ITSMConfigurationManagement
3.2.91
OTRS AG
http://otrs.org/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
Build for OTRS::ITSM 3.3.0 beta1.
The OTRS ITSM Configuration Management package.
Das OTRS ITSM Configuration Management Paket.
El paquete OTRS ITSM Configuration Management.
3.3.x
<br/>
<strong>WELCOME</strong>
<br/>
<br/>
You are about to install the OTRS package ITSMConfigurationManagement.<br/>
<br/>
<br/>
<strong>REQUIRED OTRS PACKAGES</strong>
<ul>
<li>ITSMCore 3.2.91</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WILLKOMMEN</strong>
<br/>
<br/>
Sie sind im Begriff das OTRS-Paket ITSMConfigurationManagement zu installieren.<br/>
<br/>
<br/>
<strong>BENÖTIGTE OTRS-PAKETE</strong>
<ul>
<li>ITSMCore 3.2.91</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>BIENVENIDO</strong>
<br/>
<br/>
Usted está punto de instalar el paquete ITSMConfigurationManagement de OTRS.<br/>
<br/>
<br/>
<strong>PAQUETES OTRS REQUERIDOS</strong>
<ul>
<li>ITSMCore 3.2.91</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>NOTICE</strong>
<br/>
<br/>
In order to grant users access to the config item menu, you need to add them as member to the group 'itsm-configitem'.
<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 ConfigItem-Menü zu gewähren, müssen diese Mitglied der neuen Gruppe 'itsm-configitem' 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>ATENCIÓN</strong>
<br/>
<br/>
Para permitirles a los usuarios el acceso al menú de los elementos de configuración, es necesario que se den de
alta como miembros del grupo 'itsm-configitem'.
<br/>
<br/>
Los elementos del menú que se agregaron por este paquete, serpan visibles después reiniciar la sesión al sistema.
<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-configitem' that was created during package installation will be deactivated.
You can activate this group again in the admin area.
<br/>
<br/>
All links to config item objects will be irrevocably deleted!
<br/>
<br/>
The statistics that are associated with this package, will no longer be available if the package is uninstalled.
<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-configitem' wird deaktiviert.
Sie kann jederzeit im Admin-Bereich wieder aktiviert werden.
<br/>
<br/>
Alle Verknüpfungen zu ConfigItem-Objekten werden unwiderruflich gelöscht!
<br/>
<br/>
Nach der Deinstallation sind die zu diesem Paket zugehörigen Statistiken nicht mehr verfügbar.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ATENCIÓN</strong>
<br/>
<br/>
Si usted desinstala este paquete, todas las tablas de la base de datos que fueron creadas durante su instalación se eliminarán.
¡Todos los datos de dichas tablas se perderán irrevocablemente!
<br/>
<br/>
El grupo 'itsm-configitem' que se creó durante la instalación de este paquete se desactivará.
Es posible reactivar este grupo en el área de administración.
<br/>
<br/>
¡Todos los vínculos a objetos de elementos de configuración serán eliminados permanentemente!
<br/>
<br/>
Si usted desinstala este paquete, las estadísticas que están asociadas a él ya no estarán disponibles.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WELCOME</strong>
<br/>
<br/>
You are about to upgrade the OTRS package ITSMConfigurationManagement.<br/>
<br/>
<br/>
<strong>REQUIRED OTRS PACKAGES</strong>
<ul>
<li>ITSMCore 3.2.91</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WILLKOMMEN</strong>
<br/>
<br/>
Sie sind im Begriff das OTRS-Paket ITSMConfigurationManagement zu aktualisieren.<br/>
<br/>
<br/>
<strong>BENÖTIGTE OTRS-PAKETE</strong>
<ul>
<li>ITSMCore 3.2.91</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>BIENVENIDO</strong>
<br/>
<br/>
Usted está a punto de actualizar el paquete ITSMConfigurationManagement de OTRS.<br/>
<br/>
<br/>
<strong>PAQUETES OTRS REQUERIDOS</strong>
<ul>
<li>ITSMCore 3.2.91</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
ITSMCore
# define function name
my $FunctionName = 'CodeInstall';
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# load the module
if ( $Self->{MainObject}->Require($CodeModule) ) {
# create new instance
my $CodeObject = $CodeModule->new( %{$Self} );
if ($CodeObject) {
# start methode
if ( !$CodeObject->$FunctionName(%{$Self}) ) {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method $FunctionName() on $CodeModule.pm."
);
}
}
# error handling
else {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method new() on $CodeModule.pm."
);
}
}
# uninstall Feature AddOn OTRSCIColumns that has been integrated in OTRS ITSM 3.2.91 (OTRS ITSM 3.3.0 Beta 1)
$Self->_PackageUninstallMerged(
Name => 'OTRSCIColumns',
);
# uninstall Feature AddOn OTRSCIAttributeSyntaxCheck that has been integrated in OTRS ITSM 3.2.91 (OTRS ITSM 3.3.0 Beta 1)
$Self->_PackageUninstallMerged(
Name => 'OTRSCIAttributeSyntaxCheck',
);
# define function name
my $FunctionName = 'CodeUpgrade';
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# The code module has just recently been copied to it's location in the file system.
# In a persistent Perl environment an old version of the module might still be loaded,
# as watchdogs like Apache2::Reload haven't had a chance to reload it.
# So we need to make sure that the new version is being loaded.
# Kernel::System::Main::Require() checks the relative file path, so we need to remove that from %INC.
# This is only needed in persistent Perl environment, but does no harm in a CGI environment.
my $CodeModulePath = $CodeModule;
$CodeModulePath =~ s/::/\//g;
$CodeModulePath .= '.pm';
delete $INC{$CodeModulePath};
# load the module
if ( $Self->{MainObject}->Require($CodeModule) ) {
# create new instance
my $CodeObject = $CodeModule->new( %{$Self} );
if ($CodeObject) {
# start methode
if ( !$CodeObject->$FunctionName(%{$Self}) ) {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method $FunctionName() on $CodeModule.pm."
);
}
}
# error handling
else {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method new() on $CodeModule.pm."
);
}
}
# define function name
my $FunctionName = 'CodeUninstall';
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# load the module
if ( $Self->{MainObject}->Require($CodeModule) ) {
# create new instance
my $CodeObject = $CodeModule->new( %{$Self} );
if ($CodeObject) {
# start methode
if ( !$CodeObject->$FunctionName(%{$Self}) ) {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method $FunctionName() on $CodeModule.pm."
);
}
}
# error handling
else {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method new() on $CodeModule.pm."
);
}
}
# cleanup stats list
{
# load required modules
$Self->{MainObject}->Require('Kernel::System::CSV');
$Self->{MainObject}->Require('Kernel::System::Group');
$Self->{MainObject}->Require('Kernel::System::User');
$Self->{MainObject}->Require('Kernel::System::Stats');
# create needed objects
$Self->{CSVObject} = Kernel::System::CSV->new( %{$Self} );
$Self->{GroupObject} = Kernel::System::Group->new( %{$Self} );
$Self->{UserObject} = Kernel::System::User->new( %{$Self} );
$Self->{StatsObject} = Kernel::System::Stats->new(
%{$Self},
UserID => 1,
);
# cleanup stats list
$Self->{StatsObject}->StatsCleanUp();
}
# define function name
my $FunctionName = 'CodeReinstall';
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# load the module
if ( $Self->{MainObject}->Require($CodeModule) ) {
# create new instance
my $CodeObject = $CodeModule->new( %{$Self} );
if ($CodeObject) {
# start methode
if ( !$CodeObject->$FunctionName(%{$Self}) ) {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method $FunctionName() on $CodeModule.pm."
);
}
}
# error handling
else {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method new() on $CodeModule.pm."
);
}
}
2013-08-22 16:19:32
opms.otrs.com
IyEvdXNyL2Jpbi9wZXJsIC13CiMgLS0KIyBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbURlbGV0ZS5wbCAtIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFGRkVSTyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiMgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCiMgb3Igc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyB1c2UgLi4vIGFzIGxpYiBsb2NhdGlvbgp1c2UgRmlsZTo6QmFzZW5hbWU7CnVzZSBGaW5kQmluIHF3KCRSZWFsQmluKTsKdXNlIGxpYiBkaXJuYW1lKCRSZWFsQmluKTsKCnVzZSBHZXRvcHQ6Okxvbmc7CnVzZSBLZXJuZWw6OkNvbmZpZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpFbmNvZGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6TG9nOwp1c2UgS2VybmVsOjpTeXN0ZW06Ok1haW47CnVzZSBLZXJuZWw6OlN5c3RlbTo6VGltZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpEQjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzsKCiMgY29tbW9uIG9iamVjdHMKbXkgJUNvbW1vbk9iamVjdCA9ICgpOwokQ29tbW9uT2JqZWN0e0NvbmZpZ09iamVjdH0gPSBLZXJuZWw6OkNvbmZpZy0+bmV3KCk7CiRDb21tb25PYmplY3R7RW5jb2RlT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpFbmNvZGUtPm5ldyglQ29tbW9uT2JqZWN0KTsKJENvbW1vbk9iamVjdHtMb2dPYmplY3R9ICAgID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgTG9nUHJlZml4ID0+ICdPVFJTLUNvbmZpZ0l0ZW1EZWxldGUucGwnLAogICAgJUNvbW1vbk9iamVjdCwKKTsKJENvbW1vbk9iamVjdHtNYWluT2JqZWN0fSAgICAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6TWFpbi0+bmV3KCVDb21tb25PYmplY3QpOwokQ29tbW9uT2JqZWN0e1RpbWVPYmplY3R9ICAgICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lLT5uZXcoJUNvbW1vbk9iamVjdCk7CiRDb21tb25PYmplY3R7REJPYmplY3R9ICAgICAgICAgICAgID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoJUNvbW1vbk9iamVjdCk7CiRDb21tb25PYmplY3R7Q29uZmlnSXRlbU9iamVjdH0gICAgID0gS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtLT5uZXcoJUNvbW1vbk9iamVjdCk7CiRDb21tb25PYmplY3R7R2VuZXJhbENhdGFsb2dPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nLT5uZXcoJUNvbW1vbk9iamVjdCk7CgpwcmludCAib3Rycy5JVFNNQ29uZmlnSXRlbURlbGV0ZS5wbCI7CnByaW50ICJkZWxldGUgY29uZmlnIGl0ZW1zIChhbGwsIGJ5IGNsYXNzIChhbmQgZGVwbG95bWVudCBzdGF0ZSkgb3IgYnkgbnVtYmVyKS5cbiI7CnByaW50ICJDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvXG4iOwoKbXkgJEhlbHAgICAgICAgICAgICAgID0gJyc7Cm15ICRBbGwgICAgICAgICAgICAgICA9ICcnOwpteSAkQ2xhc3MgICAgICAgICAgICAgPSAnJzsKbXkgJERlcGxveW1lbnRTdGF0ZSAgID0gJyc7Cm15IEBDb25maWdJdGVtTnVtYmVycyA9ICgpOwoKR2V0T3B0aW9ucygKICAgICdoZWxwJyAgICAgICAgICAgICAgICAgID0+IFwkSGVscCwKICAgICdhbGwnICAgICAgICAgICAgICAgICAgID0+IFwkQWxsLAogICAgJ2NsYXNzPXMnICAgICAgICAgICAgICAgPT4gXCRDbGFzcywKICAgICdkZXBsb3ltZW50c3RhdGU9cycgICAgID0+IFwkRGVwbG95bWVudFN0YXRlLAogICAgJ0NvbmZpZ0l0ZW1OdW1iZXI9c3ssfScgPT4gXEBDb25maWdJdGVtTnVtYmVycywKKTsKCiMgZGVsZXRlIGFsbCBjb25maWcgaXRlbXMKaWYgKCRBbGwpIHsKCiAgICAjIGdldCBhbGwgY29uZmlnIGl0ZW1zIGlkcwogICAgbXkgQENvbmZpZ0l0ZW1zSURzID0gQHsgJENvbW1vbk9iamVjdHtDb25maWdJdGVtT2JqZWN0fS0+Q29uZmlnSXRlbVNlYXJjaCgpIH07CgogICAgIyBnZXQgbnVtYmVyIG9mIGNvbmZpZyBpdGVtcwogICAgbXkgJENJQ291bnQgPSBzY2FsYXIgQENvbmZpZ0l0ZW1zSURzOwoKICAgICMgaWYgdGhlcmUgYXJlIGFueSBDSSB0byBkZWxldGUKICAgIGlmICgkQ0lDb3VudCkgewoKICAgICAgICBwcmludCAiQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIEFMTCAkQ0lDb3VudCBjb25maWcgaXRlbXM/ICI7CiAgICAgICAgcHJpbnQgIlRoaXMgaXMgaXJyZXZvY2FibGUuIFt5L25dICI7CiAgICAgICAgY2hvbXAoIG15ICRDb25maXJtYXRpb24gPSBsYyA8U1RESU4+ICk7CgogICAgICAgICMgaWYgdGhlIHVzZXIgY29uZmlybXMgdGhlIGRlbGV0aW9uCiAgICAgICAgaWYgKCAkQ29uZmlybWF0aW9uIGVxICd5JyApIHsKCiAgICAgICAgICAgICMgZGVsZXRlIGNvbmZpZyBpdGVtcwogICAgICAgICAgICBwcmludCAiRGVsZXRpbmcgYWxsIGNvbmZpZyBpdGVtcy4uLlxuIjsKICAgICAgICAgICAgRGVsZXRlQ29uZmlnSXRlbXMoIENvbmZpZ0l0ZW1zSURzID0+IFxAQ29uZmlnSXRlbXNJRHMgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGV4aXQgMTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBwcmludCAiVGhlcmUgYXJlIE5PIGNvbmZpZyBpdGVtcyB0byBkZWxldGUuXG4iOwogICAgfQp9CgojIGRlbGV0ZSBsaXN0ZWQgY29uZmlnIGl0ZW1zCmVsc2lmIChAQ29uZmlnSXRlbU51bWJlcnMpIHsKCiAgICBteSBAQ29uZmlnSXRlbXNJRHM7CgogICAgZm9yIG15ICRDb25maWdJdGVtTnVtYmVyIChAQ29uZmlnSXRlbU51bWJlcnMpIHsKCiAgICAgICAgIyBjaGVja3MgdGhlIHZhbGlkaXR5IG9mIHRoZSBjb25maWcgaXRlbSBpZAogICAgICAgIG15ICRJRCA9ICRDb21tb25PYmplY3R7Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1Mb29rdXAoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1OdW1iZXIgPT4gJENvbmZpZ0l0ZW1OdW1iZXIsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRJRCkgewogICAgICAgICAgICBwdXNoIEBDb25maWdJdGVtc0lEcywgJElEOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHJpbnQgIlVuYWJsZSB0byBmaW5kIGNvbmZpZyBpdGVtICRDb25maWdJdGVtTnVtYmVyLlxuIjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWxldGUgY29uZmlnIGl0ZW1zIChpZiBhbnkgdmFsaWQgbnVtYmVyIHdhcyBnaXZlbikKICAgIGlmIChAQ29uZmlnSXRlbXNJRHMpIHsKICAgICAgICBwcmludCAiRGVsZXRpbmcgc3BlY2lmaWVkIGNvbmZpZyBpdGVtcy4uLlxuIjsKICAgICAgICBEZWxldGVDb25maWdJdGVtcyggQ29uZmlnSXRlbXNJRHMgPT4gXEBDb25maWdJdGVtc0lEcyApOwogICAgfQp9CgojIGRlbGV0ZSBjb25maWcgaXRlbXMgdGhhdCBiZWxvbmcgdG8gdGhlIGNsYXNzCmVsc2lmICgkQ2xhc3MpIHsKCiAgICBteSBAQ29uZmlnSXRlbXNJRHM7CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRDb21tb25PYmplY3R7R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgIFZhbGlkID0+IDAsCiAgICApOwoKICAgICMgaW52ZXJ0IHRoZSBoYXNoIHRvIGhhdmUgdGhlIGNsYXNzZXMgbmFtZXMgYXMga2V5cwogICAgbXkgJUNsYXNzTmFtZTJJRCA9IHJldmVyc2UgJXskQ2xhc3NMaXN0fTsKCiAgICBpZiAoICRDbGFzc05hbWUySUR7JENsYXNzfSApIHsKICAgICAgICBteSAkSUQgPSAkQ2xhc3NOYW1lMklEeyRDbGFzc307CgogICAgICAgICMgZGVmaW5lIHRoZSBzZWFyY2ggcGFyYW0gZm9yIHRoZSBjbGFzcyBzZWFyY2gKICAgICAgICBteSAlU2VhcmNoUGFyYW0gPSAoCiAgICAgICAgICAgIENsYXNzSURzID0+IFskSURdLAogICAgICAgICk7CgogICAgICAgICMgYWxzbyBhIGRlcGxveW1lbnQgc3RhdGUgaXMgZ2l2ZW4KICAgICAgICBpZiAoJERlcGxveW1lbnRTdGF0ZSkgewoKICAgICAgICAgICAgIyBnZXQgZGVwbG95bWVudCBzdGF0ZSBsaXN0CiAgICAgICAgICAgIG15ICREZXBsb3ltZW50U3RhdGVMaXN0ID0gJENvbW1vbk9iamVjdHtHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGludmVydCB0aGUgaGFzaCB0byBoYXZlIHRoZSBkZXBsb3ltZW50IHN0YXRlIG5hbWVzIGFzIGtleXMKICAgICAgICAgICAgbXkgJURlcGxveW1lbnRTdGF0ZTJJRCA9IHJldmVyc2UgJXskRGVwbG95bWVudFN0YXRlTGlzdH07CgogICAgICAgICAgICAjIGlmIHRoZSBkZXBsb3ltZW50IHN0YXRlIGlzIHZhbGlkCiAgICAgICAgICAgIGlmICggJERlcGxveW1lbnRTdGF0ZTJJRHskRGVwbG95bWVudFN0YXRlfSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCB0aGUgZGVwbG95bWVudCBzdGF0ZSBpZAogICAgICAgICAgICAgICAgbXkgJElEID0gJERlcGxveW1lbnRTdGF0ZTJJRHskRGVwbG95bWVudFN0YXRlfTsKCiAgICAgICAgICAgICAgICAjIGFkZCBzZWFyY2ggcGFyYW1ldGVyCiAgICAgICAgICAgICAgICAkU2VhcmNoUGFyYW17RGVwbFN0YXRlSURzfSA9IFskSURdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcHJpbnQgIlVuYWJsZSB0byBmaW5kIGRlcGxveW1lbnQgc3RhdGUgJERlcGxveW1lbnRTdGF0ZS5cbiI7CiAgICAgICAgICAgICAgICBleGl0IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IGlkcyBvZiB0aGlzIGNsYXNzIChhbmQgbWF5YmUgZGVwbG95bWVudCBzdGF0ZSkgY29uZmlnIGl0ZW1zCiAgICAgICAgQENvbmZpZ0l0ZW1zSURzCiAgICAgICAgICAgID0gQHsgJENvbW1vbk9iamVjdHtDb25maWdJdGVtT2JqZWN0fS0+Q29uZmlnSXRlbVNlYXJjaCglU2VhcmNoUGFyYW0pIH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBwcmludCAiVW5hYmxlIHRvIGZpbmQgY2xhc3MgbmFtZSAkQ2xhc3MuXG4iOwogICAgfQoKICAgICMgZGVsZXRlIGNvbmZpZyBpdGVtcyAoaWYgYW55IHZhbGlkIG51bWJlciB3YXMgZ2l2ZW4pCiAgICBpZiAoQENvbmZpZ0l0ZW1zSURzKSB7CiAgICAgICAgcHJpbnQgIkRlbGV0aW5nIGNvbmZpZyBpdGVtcyB0aGF0IGJlbG9uZyB0byB0aGUgY2xhc3MgJENsYXNzLi4uXG4iOwogICAgICAgIERlbGV0ZUNvbmZpZ0l0ZW1zKCBDb25maWdJdGVtc0lEcyA9PiBcQENvbmZpZ0l0ZW1zSURzICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBwcmludCAiVGhlcmUgYXJlIG5vIGNvbmZpZyBpdGVtcyB0aGF0IGJlbG9uZyB0byB0aGUgY2xhc3MgJENsYXNzLi4uXG4iOwogICAgfQp9CgojIHNob3cgdXNhZ2UKZWxzZSB7CiAgICBwcmludCAiVXNhZ2U6ICQwIFtvcHRpb25zXSBcbiI7CiAgICBwcmludCAiICBPcHRpb25zIGFyZSBhcyBmb2xsb3dzOlxuIjsKICAgIHByaW50ICIgIC0taGVscCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIG9wdGlvbiBoZWxwXG4iOwogICAgcHJpbnQgIiAgLS1hbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYWxsIGNvbmZpZyBpdGVtc1xuIjsKICAgIHByaW50ICIgIC0tY2xhc3MgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFsbCBjb25maWcgaXRlbXMgb2YgdGhpcyBjbGFzc1xuIjsKICAgIHByaW50CiAgICAgICAgIiAgLS1kZXBsb3ltZW50c3RhdGUgbmFtZSAgICAgICAgICAgICBkZWxldGUgYWxsIGNvbmZpZyBpdGVtcyB3aXRoIHRoaXMgZGVwbG95bWVudCBzdGF0ZSAoT05MWSBUT0dFVEhFUiB3aXRoIHRoZSAtLWNsYXNzIHBhcmFtZXRlcilcbiI7CiAgICBwcmludCAiICAtLUNvbmZpZ0l0ZW1OdW1iZXIgbm8xIG5vMiBubzMgICAgIGRlbGV0ZSBsaXN0ZWQgY29uZmlnIGl0ZW1zXG4iOwogICAgZXhpdCAxOwp9CgoxOwoKc3ViIERlbGV0ZUNvbmZpZ0l0ZW1zIHsKCiAgICAjIGdldCBwYXJhbWV0ZXJzCiAgICBteSAoJVBhcmFtKSA9IEBfOwoKICAgIG15ICREZWxldGVkQ0k7CgogICAgIyBkZWxldGUgc3BlY2lmaWVkIGNvbmZpZyBpdGVtcwogICAgZm9yIG15ICRDb25maWdJdGVtSUQgKCBAeyAkUGFyYW17Q29uZmlnSXRlbXNJRHN9IH0gKSB7CiAgICAgICAgbXkgJFRydWUgPSAkQ29tbW9uT2JqZWN0e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtRGVsZXRlKAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICBpZiAoICEkVHJ1ZSApIHsKICAgICAgICAgICAgcHJpbnQgIlVuYWJsZSB0byBkZWxldGUgY29uZmlnIGl0ZW0gd2l0aCBpZCAkQ29uZmlnSXRlbUlEXG4iOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJERlbGV0ZWRDSSsrOwogICAgICAgIH0KICAgIH0KICAgIHByaW50ICJEZWxldGQgJERlbGV0ZWRDSSBjb25maWcgaXRlbShzKS5cblxuIjsKCiAgICByZXR1cm4gMTsKfQo=
IyEvdXNyL2Jpbi9wZXJsIC13CiMgLS0KIyBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsIC0gbGlzdCBjb25maWdpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcwojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgQUZGRVJPIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKIyBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKIyBvciBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIHVzZSAuLi8gYXMgbGliIGxvY2F0aW9uCnVzZSBGaWxlOjpCYXNlbmFtZTsKdXNlIEZpbmRCaW4gcXcoJFJlYWxCaW4pOwp1c2UgbGliIGRpcm5hbWUoJFJlYWxCaW4pOwp1c2UgbGliIGRpcm5hbWUoJFJlYWxCaW4pIC4gJy9DdXN0b20nOwoKdXNlIEdldG9wdDo6TG9uZzsKdXNlIEtlcm5lbDo6Q29uZmlnOwp1c2UgS2VybmVsOjpTeXN0ZW06OkVuY29kZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpMb2c7CnVzZSBLZXJuZWw6OlN5c3RlbTo6TWFpbjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaW1lOwp1c2UgS2VybmVsOjpTeXN0ZW06OkRCOwp1c2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOwp1c2UgS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoSXNBcnJheVJlZldpdGhEYXRhKTsKCiMgY29tbW9uIG9iamVjdHMKbXkgJUNvbW1vbk9iamVjdCA9ICgpOwokQ29tbW9uT2JqZWN0e0NvbmZpZ09iamVjdH0gPSBLZXJuZWw6OkNvbmZpZy0+bmV3KCk7CiRDb21tb25PYmplY3R7RW5jb2RlT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpFbmNvZGUtPm5ldyglQ29tbW9uT2JqZWN0KTsKJENvbW1vbk9iamVjdHtMb2dPYmplY3R9ICAgID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgTG9nUHJlZml4ID0+ICdvdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwnLAogICAgJUNvbW1vbk9iamVjdCwKKTsKJENvbW1vbk9iamVjdHtNYWluT2JqZWN0fSAgICAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6TWFpbi0+bmV3KCVDb21tb25PYmplY3QpOwokQ29tbW9uT2JqZWN0e1RpbWVPYmplY3R9ICAgICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lLT5uZXcoJUNvbW1vbk9iamVjdCk7CiRDb21tb25PYmplY3R7REJPYmplY3R9ICAgICAgICAgICAgID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoJUNvbW1vbk9iamVjdCk7CiRDb21tb25PYmplY3R7Q29uZmlnSXRlbU9iamVjdH0gICAgID0gS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtLT5uZXcoJUNvbW1vbk9iamVjdCk7CiRDb21tb25PYmplY3R7R2VuZXJhbENhdGFsb2dPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nLT5uZXcoJUNvbW1vbk9iamVjdCk7CgpwcmludCAib3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsIjsKcHJpbnQgIihMaXN0IENvbmZpZ0l0ZW1zIHdoaWNoIGhhdmUgYSBub24tdW5pcXVlIG5hbWUpLlxuIjsKcHJpbnQgIkNvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS9cblxuIjsKCm15ICRIZWxwICAgICAgPSAnJzsKbXkgJENsYXNzICAgICA9ICcnOwpteSAkU2NvcGUgICAgID0gJyc7Cm15ICRBbGxTdGF0ZXMgPSAnJzsKCkdldE9wdGlvbnMoCiAgICAnaGVscCcgICAgICA9PiBcJEhlbHAsCiAgICAnY2xhc3M9cycgICA9PiBcJENsYXNzLAogICAgJ3Njb3BlPXMnICAgPT4gXCRTY29wZSwKICAgICdhbGxzdGF0ZXMnID0+IFwkQWxsU3RhdGVzLAopOwoKIyBtYWtlIHN1cmUsIHRoZSBzdXBwbGllZCAnc2NvcGUnIGlzIHZhbGlkCmlmICggJFNjb3BlICYmICRTY29wZSBuZSAnY2xhc3MnICYmICRTY29wZSBuZSAnZ2xvYmFsJyApIHsKICAgIHByaW50ICJUaGUgcHJvdmlkZWQgc2NvcGUgaXMgbm90IHZhbGlkLCBwbGVhc2UgdXNlICdjbGFzcycgb3IgJ2dsb2JhbCdcbiI7CiAgICBleGl0IDE7Cn0KCm15ICVTZWFyY2hDcml0ZXJpYTsKCmlmICgkQ2xhc3MpIHsKCiAgICAjIGdldCBjbGFzcyBsaXN0CiAgICBteSAkQ2xhc3NMaXN0ID0gJENvbW1vbk9iamVjdHtHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICApOwoKICAgICMgaW52ZXJ0IHRoZSBoYXNoIHRvIGhhdmUgdGhlIGNsYXNzZXMnIG5hbWVzIGFzIGtleXMKICAgIG15ICVDbGFzc05hbWUySUQgPSByZXZlcnNlICV7JENsYXNzTGlzdH07CgogICAgIyBjaGVjaywgd2hldGhlciB0aGlzIGNsYXNzIGV4aXN0cwogICAgaWYgKCAkQ2xhc3NOYW1lMklEeyRDbGFzc30gKSB7CiAgICAgICAgbXkgJElEID0gJENsYXNzTmFtZTJJRHskQ2xhc3N9OwoKICAgICAgICAjIGdldCBpZHMgb2YgdGhpcyBjbGFzcycgY29uZmlnIGl0ZW1zCiAgICAgICAgJFNlYXJjaENyaXRlcmlhe0NsYXNzSURzfSA9IFskSURdOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgcHJpbnQgIlVuYWJsZSB0byBmaW5kIGNsYXNzIG5hbWUgJENsYXNzLlxuIjsKICAgIH0KfQoKaWYgKCAhJEFsbFN0YXRlcyApIHsKCiAgICBteSAkU3RhdGVMaXN0ID0gJENvbW1vbk9iamVjdHtHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgIENsYXNzICAgICAgID0+ICdJVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGUnLAogICAgICAgIFByZWZlcmVuY2VzID0+IHsKICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSA9PiBbICdwcmVwcm9kdWN0aXZlJywgJ3Byb2R1Y3RpdmUnIF0sCiAgICAgICAgfSwKICAgICk7CgogICAgbXkgJERlcGxveW1lbnRTdGF0ZUlEcyA9IFsga2V5cyAleyRTdGF0ZUxpc3R9IF07CgogICAgJFNlYXJjaENyaXRlcmlhe0RlcGxTdGF0ZUlEc30gPSBbIGtleXMgJXskU3RhdGVMaXN0fSBdOwp9CgojIGdldCBhbGwgY29uZmlnIGl0ZW1zIGlkcwpteSBAQ29uZmlnSXRlbUlEcyA9IEB7ICRDb21tb25PYmplY3R7Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1TZWFyY2goJVNlYXJjaENyaXRlcmlhKSB9OwoKIyBnZXQgbnVtYmVyIG9mIGNvbmZpZyBpdGVtcwpteSAkQ0lDb3VudCA9IHNjYWxhciBAQ29uZmlnSXRlbUlEczsKCiMgaWYgdGhlcmUgYXJlIGFueSBDSSB0byBjaGVjawppZiAoJENJQ291bnQpIHsKCiAgICAjIGlmIHRoZSBzY29wZSB3YXMgZXhwbGljaXRlbHkgZGVmaW5lZCwgc2V0IGl0LCBvdGhlcndpc2UgdGhpcyBzY3JpcHQgd2lsbCBmYWxsIGJhY2sgdG8gdGhlCiAgICAjIHZhbHVlIHNldCBpbiBTeXNDb25maWcKICAgIGlmICgkU2NvcGUpIHsKICAgICAgICAkQ29tbW9uT2JqZWN0e0NvbmZpZ09iamVjdH0tPlNldCgKICAgICAgICAgICAgS2V5ICAgPT4gJ1VuaXF1ZUNJTmFtZTo6VW5pcXVlbmVzc0NoZWNrU2NvcGUnLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2NvcGUsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoJENsYXNzKSB7CiAgICAgICAgcHJpbnQgIkNoZWNraW5nIGNvbmZpZyBpdGVtcyBvZiBjbGFzcyAkQ2xhc3MuLi5cbiI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBwcmludCAiQ2hlY2tpbmcgYWxsIGNvbmZpZyBpdGVtcy4uLlxuIjsKICAgIH0KCiAgICBteSAkRHVwbGljYXRlc0ZvdW5kID0gMDsKCiAgICAjIGNoZWNrIGNvbmZpZyBpdGVtcwogICAgQ09ORklHSVRFTUlEOgogICAgZm9yIG15ICRDb25maWdJdGVtSUQgKEBDb25maWdJdGVtSURzKSB7CgogICAgICAgICMgZ2V0IHRoZSBhdHRyaWJ1dGVzIG9mIHRoaXMgY29uZmlnIGl0ZW0KICAgICAgICBteSAkQ29uZmlnSXRlbSA9ICRDb21tb25PYmplY3R7Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICk7CgogICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmICEkQ29uZmlnSXRlbS0+e0xhc3RWZXJzaW9uSUR9OwoKICAgICAgICAjIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBjb25maWcgaXRlbQogICAgICAgIG15ICRWZXJzaW9uID0gJENvbW1vbk9iamVjdHtDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkdldCgKICAgICAgICAgICAgVmVyc2lvbklEICA9PiAkQ29uZmlnSXRlbS0+e0xhc3RWZXJzaW9uSUR9LAogICAgICAgICAgICBYTUxEYXRhR2V0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgISRWZXJzaW9uOwoKICAgICAgICBpZiAoICEkVmVyc2lvbi0+e05hbWV9ICkgewogICAgICAgICAgICBwcmludCAiU2tpcHBpbmcgQ29uZmlnSXRlbSAkQ29uZmlnSXRlbUlEIGFzIGl0IGRvZXNuJ3QgaGF2ZSBhIG5hbWVcbiI7CiAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEOwogICAgICAgIH0KCiAgICAgICAgbXkgJER1cGxpY2F0ZXMgPSAkQ29tbW9uT2JqZWN0e0NvbmZpZ0l0ZW1PYmplY3R9LT5VbmlxdWVOYW1lQ2hlY2soCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBDbGFzc0lEICAgICAgPT4gJENvbmZpZ0l0ZW0tPntDbGFzc0lEfSwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRWZXJzaW9uLT57TmFtZX0KICAgICAgICApOwoKICAgICAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkRHVwbGljYXRlcykgKSB7CgogICAgICAgICAgICAkRHVwbGljYXRlc0ZvdW5kID0gMTsKCiAgICAgICAgICAgIG15IEBEdXBsaWNhdGVEYXRhOwoKICAgICAgICAgICAgZm9yIG15ICREdXBsaWNhdGVJRCAoIEB7JER1cGxpY2F0ZXN9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSAjIG9mIHRoZSBkdXBsaWNhdGUKICAgICAgICAgICAgICAgIG15ICREdXBsaWNhdGVDb25maWdJdGVtID0gJENvbW1vbk9iamVjdHtDb25maWdJdGVtT2JqZWN0fS0+Q29uZmlnSXRlbUdldCgKICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJER1cGxpY2F0ZUlELAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAkRHVwbGljYXRlVmVyc2lvbiA9ICRDb21tb25PYmplY3R7Q29uZmlnSXRlbU9iamVjdH0tPlZlcnNpb25HZXQoCiAgICAgICAgICAgICAgICAgICAgVmVyc2lvbklEID0+ICREdXBsaWNhdGVDb25maWdJdGVtLT57TGFzdFZlcnNpb25JRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHB1c2ggQER1cGxpY2F0ZURhdGEsICREdXBsaWNhdGVWZXJzaW9uOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwcmludCAiQ29uZmlnSXRlbSAkVmVyc2lvbi0+e051bWJlcn0gKE5hbWU6ICRWZXJzaW9uLT57TmFtZX0sIENvbmZpZ0l0ZW1JRDogIgogICAgICAgICAgICAgICAgLiAiJFZlcnNpb24tPntDb25maWdJdGVtSUR9KSBoYXMgdGhlIGZvbGxvd2luZyBkdXBsaWNhdGVzOlxuIjsKCiAgICAgICAgICAgICMgbGlzdCBhbGwgdGhlIGRldGFpbHMgb2YgdGhlIGR1cGxpY2F0ZXMKICAgICAgICAgICAgZm9yIG15ICREdXBsaWNhdGVWZXJzaW9uIChARHVwbGljYXRlRGF0YSkgewogICAgICAgICAgICAgICAgcHJpbnQgIlx0JER1cGxpY2F0ZVZlcnNpb24tPntOdW1iZXJ9IChDb25maWdJdGVtSUQ6ICIKICAgICAgICAgICAgICAgICAgICAuICIkRHVwbGljYXRlVmVyc2lvbi0+e0NvbmZpZ0l0ZW1JRH0pXG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkRHVwbGljYXRlc0ZvdW5kKSB7CiAgICAgICAgcHJpbnQgIkZpbmlzaGVkIGNoZWNraW5nIGZvciBkdXBsaWNhdGUgbmFtZXNcbiI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBwcmludCAiTm8gZHVwbGljYXRlIG5hbWVzIGZvdW5kXG4iOwogICAgfQp9CmVsc2UgewogICAgcHJpbnQgIlRoZXJlIGFyZSBOTyBjb25maWcgaXRlbXMgdG8gY2hlY2suXG4iOwp9CgpwcmludCAiXG4iOwoKIyBzaG93IHVzYWdlCmlmICgkSGVscCkgewogICAgcHJpbnQgIlVzYWdlOiAkMCBbb3B0aW9uc10gXG4iOwogICAgcHJpbnQgIiAgT3B0aW9ucyBhcmUgYXMgZm9sbG93czpcbiI7CiAgICBwcmludCAiICAtLWhlbHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBvcHRpb24gaGVscFxuIjsKICAgIHByaW50ICIgIC0tY2xhc3MgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sgb25seSBjb25maWcgaXRlbXMgb2YgdGhpcyBjbGFzc1xuIjsKICAgIHByaW50ICIgIC0tc2NvcGUgKGdsb2JhbHxjbGFzcykgICAgICAgICAgICAgZGVmaW5lIHRoZSBzY29wZSBmb3IgdGhlIHVuaXF1ZW5lc3MgY2hlY2tcbiI7CiAgICBwcmludAogICAgICAgICIgIC0tYWxsc3RhdGVzICAgICAgICAgICAgICAgICAgICAgICAgYWxzbyBjaGVjayBjb25maWcgaXRlbXMgaW4gbm9uLXByb2R1Y3RpdmUgc3RhdGVzXG5cbiI7CiAgICBleGl0IDE7Cn0KCjE7Cg==
iVBORw0KGgoAAAANSUhEUgAABh4AAAQuCAIAAACs0tAIAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAfQAAAH0AG5i+efAAAgAElEQVR4nOzdS4wk930f8Oqe6ZnZmZ3d5e6KS5khZVGJGQFKBCuyoEMODn1xnAsBAzkEiAEbRpAHEsCB7QjJRYBhIAZySZwgBgLbgXWIZeQSyYFtwA6i2AsDVh6AEEMKRIo0KZLich/cx7xnunNoq1WsV1dVV3W9Pp/Dore6+l+/qumeqfr2//+v0Ww2CwAAAACguM2mCwCAtXr33XcPDw9v3ry5v79feeOHh4fvvvvupUuXnnnmmcobBwCAFho3XQAArNXFxcX5+fl0Oq2v8fPz8zoaBwCAFhItATAs85Hgo9GojsbnidXGxkYdjQMAQAuJlgAYopqipYuLiyAIxmN/XgEAGArnvgAMyxp6LYmWAAAYDue+AAxLrdHSvNeSAXEAAAyHaAmAYZlHSzXRawkAgKFx7gvAsIy/q47GTeMNAMDQbDZdAACs1V/4C3+hvsb1WgIAYGic+wJAZdwhDgCAoXHuCwCVMSAOAIChES0BQGUMiAMAYGic+wJANabT6fz2c6IlAACGw7kvAFRj3mVpNBqJlgAAGA7nvgBQDXN4AwAwQJtNFwAAPbGxsXH9+vWmqwAAgLUazWeFAAAAAICi9FoCYEBms9l3vvOd0Wh069at0WjUdDkAANB55oMAYECm0+mTJ08eP37cdCEAANATei0BMCDj8fhDH/rQbDbTZQkAACphriUAAAAASjIgDgAAAICSREsAAAAAlCRaAgAAAKAk0RIAVOP8/Hw6nTZdBQAArJU7xAFANd58883z8/PnnntuZ2en6VoAAGBN9FoCgGrMb7o6HvvbCgDAgIzm58EAwOqm06loCQCAQREtATAg0+n04uJiNBptbhoSDgAAFfDNKgADcnh4+Prrr7/zzjtNFwIAAD0hWgJgQOZ9dUejUdOFAABAT4iWABgc0RIAAFRFtATAgOi1BAAA1RItATAgoiUAAKiWaAmAAXFfVAAAqJZoCYAB0WsJAACqtdl0AQCwbnVES48ePTo+Pr58+fLu7m7ljQMAQGvptQTAgNTXa+nw8PDhw4cnJyeVtwwAAG0mWgJgQOqLlqbTaRAEGxsblbcMAABtJloCYEDqm8Z7Hi2Nx/6wAgAwLM6AARiQ+notXVxcBKIlAACGxxkwAANS94A40RIAAEPjDBiAATHXEgAAVEu0BMDgVB4tzWYzvZYAABgmZ8AADEhNvZbmuVIgWgIAYHicAQMwILVGS+PxuI6hdgAA0GaiJQAGZB4tVc7t4QAAGCwnwQAMSK29lszhDQDAAImWABic+gbEVdssAAC0n5NgAAZkMpns7OxU3r3IgDgAAAZrs+kCAGB9nn766TqaNSAOAIDB8v0qAKxKryUAAAbLSTAArMpcSwAADJaTYABYlQFxAAAMlmgJAFZlQBwAAIPlJBgAVmVAHAAAg+UkGABWZUAcAACDNZrNZk3XAADddnx8fH5+funSJekSAABDI1oCAAAAoKTNpgsAgDW5uLh46623RqPRc88913QtAADQE6IlAIZiOp2enJyMRqOmCwEAgP4wIA6AoZjNZkdHR7PZbG9vr+laAACgJ0RLAAAAAJQ0broAAAAAALpKtAQAAABASaIlAAAAAEpyhzgAWMnJycn5+fnW1tZkMmm6FgAAWDe9lgBgJY8fP3777bfff//9pgsBAIAGiJYAYCWbm5vb29u6LAEAMEyj2WzWdA0AAAAAdJK5lgAYitPT07Ozs8lksrW11XQtAADQEwbEATAUJkUCAIDKiZYAGIr5GPDRaNR0IQAA0B+iJQCGYh4tjcf+9gEAQGWcXgMwFNPpNNBrCQAAKiVaAmAoDIgDAIDKiZYAGAoD4gAAoHJOrwEYCr2WAACgcptNFwAAa1LHXEvHx8d37tzZ3t6+detWhc0CAEBXiJYAGIo6ei1dXFycnJzoCQUAwGAZEAfAUNQx19LFxUXlbQIAQIc4FQZgKOoYEDdvU7QEAMBgORUGYCjqGBA3j5Y2NjYqbBMAADpEtATAUNQ011Kg1xIAAAPmVBiAoahjriW9lgAAGDjREgBDUcdcS3otAQAwcE6FARiEeZelwDTeAABQKafCAAzCIloyIA4AACokWgJgEGrqtWRAHAAAA+dUGIBBqGOipcCAOAAABs+pMACDMO+1VFO0ZEAcAACDtdl0AQCwDuPx+MqVK3WMhgv0WgIAYMBESwAMwubm5q1bt6ptczHIrvLOUAAA0BW+ZQWAkoyGAwAA0RIAlOT2cAAA4GwYAEpyezgAAHA2DAAlGRAHAACiJQAoyYA4AABwNgwAJRkQBwAAo9ls1nQNANBJs9nMmDgAAAZOtAQAAABASZtNFwAA63Dnzp1Hjx7duHHjqaeearoWAADoD9NDADAI0+lUR10AAKicAXEADMJ0Or24uBiPx+ZFAgCAComWAAAAACjJgDgAAAAAShItAQAAAFCSaAkAAACAkkRLAFDGxcXF3bt3Hz582HQhAADQJNESAJRxdnb24MGD+/fvN10IAAA0abPpAor5/Oc/n/HfjIWJ62SvmfFs/Kk8G42vlvNVkTXz72C5Zwciz3sAIMPGxsa1a9dGo1HThQDQMZET0RKn93muR/K0n71O6YuXckpfZK3H5z//+cQDUkeRq//syCn+Y6WczvRaSvyR1/o+SPv1umKeVfRV8dW8+wHaYDKZfOhDH7p582bThQAwICWuR9Keyn5JGy6+2qOp8kr87MjPYaxQN3otpSWyi5w4vLxolpzxqzmt5TxlpG0l8mDpL+h4/fk/AD4qAHMXFxcPHz7c2Ni4evVq07UAwAfkv35Z5XqkRD21biV7053QrWqhVh3otZT2qy37qao2muepxa/XpWWUS4gAWNH5+fm9e/fu3bvXdCEAsKpVrkdyNp6YH7l+AdJ0o9dSkNkVsBO/48oVmfgX4vMhq5cUbif7C4rs16a9PPv7lsTHifubuPWMIhObzc4i60sqgcbNZrMgCMbjDnyhAgAVSrt2yIiQSreW+N/sC4fsldMuQ8LFBB+8Osi+cMi4Lli6Cxmtpb0we+8S14+8tujPLk8xeQrIbidxedpPLWNb2fUUKjLtUGTsbPbPkaLafpKd58e85rdCxueqUA0teQcv/X2UuCRxec7frUuXLG1zaSU5lyQ+2/hPBKjDdDoNREsA9EJV1yNpLS89bV6aOyxdUqLOPNvN31SJJTW1XOHVR869WP3HF+R+G+S59Kv1orK+o03EZtMFtFTa+zL8Rl/9d1lL3tnhMtI+yUs/q4lHZvHfjI/06gchfjzzbDe7BaBn5tGSu7kB0GlVXY9UqMSpeGSFQntU1XVEoSugSKlL2yx9KFZR6Douo4By7cRfUm6dxDfD0sOY0XJGOzl/rOTk+9vvfU7CFk/FV058YelNl3th/vbTdq2SGhI/zBmf8LTfU4n/5mwke7t5ft1k/LiB3tBrCYB+KHE9Ej/HruqKutypeIntJr6kVVdhNR2KOn52K/4s0l5V9NIvu55VLiqXNk4dNpsuoL0KJRGFPuHhFpb+JVizjM95TZvIuWb2gUr8JZJnQ4k/TaB/zLUEQG+sfj1SUz3hJc1eR6zSbFWpzWLJen4oVe1F/nYKXW1VzuVb24iWKkiIwi8s9Bb/fEj+VxVqf22vqkqeo1HTHyq/nqDH6ui1NJ1OZVUANGj16xHm+nHQqtqLfhwN1ky09AEZWU926tTXX+J1fPuRM95OXE2oBJRTx1xLb7311vHx8bPPPru7u1thswCQaJXrkc9/UEY7tO34lPvZVbUXK7ZT32Fszw+IubZHSxlZT3idoIb4Y5hv1rb9Jq1beE8H+0OHIaij19LFxUVganAAeqSpi69m9WOPWpIlMVid6cmfEc/XtKFIy6vntSVem7jRrn/a45VHDk78cdqz2W2uUhLQM3VES+ZvAmCd2nAVkHF5kr2kwq232doORRvk2bWll34Vbl1HgWZ14IQ4LevJfqqSLeZ8dvEmXlpGF0OiCstL/HmlHYScv5cz2kx7SZ4KgZ6paa6lytsEgKXKXY+EV8izWqHz80pOxTPk/HY5rZJKNpfzJXUcipw/u7SSVlT0uizy3zyXfuXqqbxlVtH2AXFz2b8r63sDRX6l5vmVvbSp7NfG1/n8d8VXq0Pi5ipvP6j6L01im4U2UeteA42ro4eRaAmANavjXLroVuKn3KufiheqLeOpcgcn/xVQdvtrPhSJW199W4XaWXptW9PbtdqW1/CZGoLOnBAnvr/riwOW/r4oUUnp+hv53RTeXLUftrS/RhnrlFheulq/U6CXKo+B5g1W2yYALLXK9UihrRTadJ6Xr17S0suiqq6b4ldApaOWBi8uqrqOS2wnz48jvrDCd2klLbv0q9Bo/kUuAPTYG2+8cXJy8n3f9317e3uVNHh+fv7aa6+NRqO/+Bf/YiUNAgBFVfsVOCvy4xgy37UC0H819VpyezgAWIOMgQ6CjPXz4yCuG3MtAcAqaoqWjIYDgLURW7SKHwdhBsQB0H+vvvrqdDr9/u///slkUkmDh4eHb7311tbW1kc+8pFKGgQAslU1lRKV8OMgTLQEQP9985vfDILghRde2NjYqKTBJ0+evPPOOzs7O88991wlDQIAQEfpyQ9Az9VxNzcD4gAAYM45MQA9t4iWKpx1W7QEAABzpvEGoOfG4/GHPvShageAz1sTLQEAgGgJgJ4bj8fXrl2rts2Li4tAtAQAAAbEAUAJBsQBAMCcc2IAKMyAOAAAmHNODACF6bUEAABzzokBoDDREgAAzDknBoDCREsAADDnnBgACtvY2NjY2BAtAQDAaD4RKQAAAAAUtdl0AQBQr7OzsyAINjc3R6NR07UAAEDf6MkPQM/du3fv9ddff/jwYdOFAABAD4mWAOi50Wg0Ho/NiwQAAHUw1xIAAAAAJfkKFwAAAICSREsAAAAAlCRaAgAAAKAk0RIAAAAAJW02XQAAdMzh4eH7779/6dKlp556qulaAACgYaIlACjm7Ozs4OBgNBo1XQgAADRvNJvNmq4BALrk9PT0+Ph4Y2Njb2+v6VoAAKBhoiUAAAAASjIgDoA+Ozg4ePTo0e7u7tWrV5uuBQAAesgd4gDos9PT0ydPnhwdHTVdCAAA9JNoCYA+u7i4CIJgY2Oj6UIAAKCfREsA9Nl0Og2CYDz29w4AAGrhVBuAPtNrCQAAaiVaAqDP9FoCAIBaOdUGoM/m0ZJeSwAAUBPREgB9Nh8QV22vpaOjo5OTk9lsVmGbAADQUaIlAPqsjl5Lb7311htvvDEPrQAAYOA2my4AAGpUea+l2Ww2769k/iYAqnVxcaFLLOVsbGyMRqOmq2C4REsA9Na8y1JQaa+lRZuiJQCq9YlPfOIb3/hG01XQSf/rf/2vT33qU01XwXCJlgDorXmXpdFoVOH3eG45B0B9bt++LSCgqL/6V/9q0yUwdKIlAHqrjomWREsA1Gdra2tnZ6fpKugYQ+FonDNjAHqrjtvDzaMl53AAADAnWgKgt/RaAgCAujkzBqC36uu1JFoCYOAWUxnm7Mm7WG39PX8ztpinGF2VYSlzLQHQW3XEQKIlABiNRrPZbP548SBbztXWrJ1VQec4Mwagt+a9lgyIAwCA+ui1BEBv6bUEAHOLUV2RfjoZy2ezWXgs2GKF8Di4+Trh14YbDD8VbnDx2uwyIjXMn0orOP8RiOxLYhmRzZUuONJ+fIvQD6IlAHpLryUACD4YZ+R5nLhk8d/ExCSxwfgKS9OWtI0GsXynUEaT0Wz2OqsUDMPhzBiA3tJrCQAiYUe461Di8vCSFTe0SnmJjZRObUq8MO0lhQqGgdBrCYDeunXr1tnZ2dbWVoVtipYA6Drxx9okjgpstiSog2gJgN7a3Nzc3Kz4L938jFC0BABVSRw6t376H0FpoiUAKECvJQCoVntCnFpnTWpJggZ1cGYMAAWIlgDoupZnHC0vr6j4Te6gf5wZA0ABoiUAuiUyzityo7f48go3tEp569e5gqE9DIgDgAJESwB0TlrHmco71EQaTAtr5ssXW2xJv56MuZZWLDgymTf0j2gJAAoQLQHQRWm5Rv7lkUwqbc2lDSaukGdhzg3laTytmNK1FS0Jeka0BAAF7O3tTadT0RIAREQ65uins+BQ0HuiJQAo4MMf/nDTJQBAG2UMKKtVxhxJjQc6kZF00FeiJQD66eTk5OTkZGtra2dnp+laAGAQGslQ2hzctLk2qJD+/AD008HBwbvvvvvw4cOmCwEAgD4TLQHQT5PJZG9vb3t7u+lCAACgzwyIA6Cf9vf39/f3m64CAAB6Tq8lAAAAAErSawkAAKB5Tz/99Msvv9x0FXTSK6+88qlPfarpKhgu0RIAAEDz7ty586//9b/+K3/lrzRdCB3zoz/6o88//3zTVTBooiUAAIBW+MhHPvIDP/ADTVdBx0wmk62traarYNBESwCQ17179x49enTt2rWnnnqq6VoAAKAVTOMNAHldXFycn5/PZrOmCwEAgLbQawkA8rpx48aVK1c2N/31BACAP+fkGADy2tjY2NjYaLoKAIZuNBqldaEdjUZBEJToYJvnhRnbrWR9oKMMiAOghx48ePCtb33r3r17TRcCAOXN4564jLymdJST54VFG8+/ftqeAp2g1xIAPXRxcXFxcTGdTpsuBACqtIhgIqlN2vKgeD+mxKbybDe8oYxGImsulmfsAtByoiUAeuj8/DwIApMiAdAzkeBmLjzubMXuP5GmFo9zbjd7/XmotHjV4sF8uUQJuss5NwA9dHFxEQSBeZEA6KJwIlO0L8+iT1B4Sf5NrzKeLmeqJUKC/hEtAdBDoiUAuiux3xBAa5nGG4AemkdLBsQBMDTxrkPzMWilX173C2ttClgP59wA9JBeSwD00iJ2Cc9tFB6MFpnPqGjLkaaKbjd7/cV03YuVI9MtxbcLdIJoCYC+ubi4mJ+VVhstTafTx48fb2xsXL58ucJmASBNPGRJi13CyyPr5J+kKWP9PNtdujyjyPx1Ai0kWgKqt/gyKvH2t24CQt3mXZbG43G1PerPz8/v3LkjWgKAhfCfWmd3MFjmWgIqFu7YnLZO/nuIlPbqq6/W2j5tVtNES9PpNAiC8difTgD4c7OQpmsBGuP8GOiV2Wz2X/7Lf/n0pz99fn7edC00Zv7Tr3yiJdESAADEOT+GnkucT3Hx38gdQ+JLgtCEixnrhFcO3y430nJ4zco7Ls1Dpb/8l//yyy+//P3f//0vvvhihY3TLTXN4S1aAgCAOHMtwUBFMqDI/EeRuZAW/81YJ8+2ahoEN5vNvvSlL/38z//8W2+9dXBwMJlMfvZnf/bu3bvzZ7/2ta+9/vrrGbWZN6d/njx58uTJk93d3StXrlTY7OHh4aNHj7a2tq5fv15hs2u2ubkpHQMI+4Ef+IGPf/zjTVcB0GGiJWD5nIuFbhSS3U4d6dJP//RP/9qv/Vp4yd/4G39j8fj4+LjyLUJ3jUajl156qekqANri1Vdf/Tt/5+/84i/+YtOFAHSYaAkGKpzyJA5hy/+qxv3qr/7qP/gH/+Cf/bN/dvv27bOzs9lsdvv27U996lNN10Vj3n777YODg6effvrq1asVNnv//v179+5duXLl1q1bFTa7Tjdu3Hjw4MHv//7vN10IQFv8i3/xL5ouAaDzdImH4VrcziOcFi29x0f8VW3w6U9/+g/+4A/+6I/+6Id/+IfPz88/97nPNV0RTTLXEgAArI3zYxio7GAoY5buesqpxjxg+upXv7q9vf2///f/brocGjOPljY3K+6ZK1oCoGfSbs9S1SlfU6eOGdvNuB1NnmaXvrZo4y0/u4acDIiDnkvrXhQf2pZnsFu5AXFr7uL06U9/+stf/vLh4eHatkjbnJ+fBzX0Wpq/50VLAKxN/rumVNt4VRuNt1PrHmVsN/xU6fPSPK8tunf511/PoYNyREvQf/lPGvJM1539Jy18p7nwmus/sdjd3a2vcdpsOp3O31o1DYjz7SIADQp/yRe5de9incjCRSASXzlj5s3IeVpku/EVMuqMLMx4Krw8XHz8VsWFtpuxPPxsoZQnYxdyHrqMRtJ+ZC2c8xTmREsA9Mp8NNxoNKq8e5FeSwD82I/92LxvbB3u3r2bvUJalhTJXMLf883HcEWimYykJpJ6pG035/2FI+1E4rDs+sPFx2OmQttNO27lRFpbPC566DIOUeKPTK8l2ky0BFQsz18+fxqpz3Q63djYqCMA0msJgN///d//tV/7tb29vToa/5mf+Zn5g0hsNH9QqCN5uTVztlbHn8K0NiNBzOoS6y/UeOlK8h8658l0jmgJqF7OL7KgDtvb2y+88EIdLeu1BEAQBH/rb/2tp556qo6W//k//+fzB4mdYvptILsJfeX8GABy0WsJgFZp5E9ShRttT/2Fbhu3yg3myr2w1qagEnotAUAuei0B0KzIiKrwYLGMabzD0xWFHwdJo+0iTyXeRzhPrpHYTryptDYjBQe5O3DlrL9cd7DIHNvBBztbFT10ieun/cgytgttIFoCgFz0WgJgzXLezzdtedrtejOCiULtZyi6iew9zT/jUp768x/VtNVy7kKJ5ZXUCesnWgKAXPRaAmCwEntFkYdDxxCIlgAgl3mvJdESAAMkEynNoWMIREsAsFx8EgoAGLK0P4h1JylNbRfIIFoCgFxu3LgxnU71WgKAoLkoR4QELSRaAoDlRqPR9evXm64CAABax1evAPTH2dnZW2+9de/evaYLAQCAoRAtAdAfp6enh4eHBwcHTRcCAABDYUAcAP2xvb1969atpqsAAIABES0B0B+bm5tXrlxpugpYq4cPH965c6fpKqBFNjY2Xnjhhaar6KfRaJQ2i/b8xm0rzrGd0T7QZqIlAIAO+0//6T/903/6T69du9Z0IdAKFxcX5+fnvZl0Lx61NBu+ZGx6NpvN06Wa2o8QQkGriJYAALrtx3/8x7/whS80XQW0whtvvPGDP/iDTVdRl3l2s0hwFtlKeEn8cfhBpKlIO0s3HV85bXlQsB9TYjtp9acdB6ApoiUAAIAOmIcs8SQlvDz+ePHf+IO5PD2AFi8MLwy/cMUuS4ntp9WfdhwG68mTJ5/5zGdW7zXWOc8///yrr77adBUEgWgJAPKYTqez2Ww8Hg/wvA2ANQv/rVm9b07iCyv/cxYfEFdV9CNCWmpvb+8P/uAPPvnJTzZdyFr9v//3//723/7bTVfBnxMtAcBy77///r17965evfr00083XQsAPRfuCpQzWFl05Mn5EnlNn4xGo/39/aFNure/v990CXzPuOkCAKADptNpUMN3vEAXzUfoBLl/JyxW8zuEarXqHRUvZvFJWf+mgTXTawkAlrt58+aNGzeargJoXrhLSP7uJHVWxLBEJuqOP5U2nXZ4/RKD1yIJaXjOo3CbpadASmx/keEuNhSZbiln8UDdREsA9MTp6enFxcXW1tbGxkYd7ftSFIA1SwxNiiYp9TUSWR6PulZsP6Pxou0DtTIgDoCeePTo0be//e379+83XQjQLqPvyr88/Gx8QuW0AXHh9RNfFSQNEUosI1JDdsEQpIw+KzRyE6A0vZYA6Imzs7MgCCaTSdOFAC0SuTn60seJS/Lc8ny07C7sia/NKCPeYImpnRmOSromAZQjWgKgJ87Pz4Mg2Nz0pw34c5EIJu0WWolLVt9Q6fISa5ARULe0N633HrCU828AekK0BCzlIhnS+HQApTn/BqAPZrOZaAnoHJPgANADzr8B6IOLi4sgCEajkWgJ6BD9RADoAXeIA6AP5nN4y5WAbC3vJdTy8gAgkVNwAPqg7tFwd+7cGY/H169fH499KwOdEZkYO+1Gb6vfcC3e4CrlAdWK3GOxwmYjd3WcP4jfCDL837RfFH4V0GmiJQD6oO5o6eHDh0EQXLt2TbQE3RK+WVvaTdwquYqLNJiWLkUucSsvg56pL2WoquVO5CA5b9q4iuyYOO0Qtf/QQU6iJQD6oNYBcYszP7kSdFHRi7r48kgmlbbm0gYTV8izMOeGGIJIgpnYBSaycBGsRJYnxppVtRPk7isUeXnafzPqiT8VPz4ZJRXdxGKFjN8Gq0isHFpOtARAH8x7LU0mkzoan06n8wemQQESxcfFuCykDmlZUto7cB5SLP6bNia08nYKiTQS/m/OepYen8izGT2Mlm5iqbQDu9i7PMuhc0RLAPRBrQPiFmeioiUgUWS4jatEVhSJjeYPSndeK/SGzPhLV/SNXajCxNwneyBbdvvZ3Q8jmy63ibjEXCktd5ZH0yeiJQD6oNZoad5rSa4EZHBZSIUanNG5Ve/ktHmy27kJ8RBDZs4IADpvNptdXFwENQ+IM9ESAK1SVdRSUzuFevsuHYBWosiiL6kqV0rsdFbhtqCF9FoCoPPmc3iPx+Oa0p/5yaJoCYBmpQ29TFu+mGZ7sUJkLqHsdoLQkPBC7dSxv+HsKW368NWPw9JNZEhMi4r+yKCjREsAdF6to+ECA+IAaEjOCYPSlmffwmzpS1ZpJ2N5mvybzmh5xfrzbGKxQtrESXlKylhuYB1dJFoCoPPqjpb0WqLNptPp+fn5kydPmi4EWuHg4KDpEgAGR7QEQOfptcSQ3b59+zd/8zd/8zd/s+lCoC2uX7/edAkMQk19i3RZootESwB03nyupZrm8A70WqLd/vpf/+tBEPz6r/9604VAK7z55puf+cxnmq4CYFhESwB0nl5LDNloNBqPx1tbW00XAq1Q39cMAKQRLQHQeVeuXJlMJtvb2zW1r9cSAACkES0B0Hn7+/v7+/v1ta/XEgAApPEFLAAsodcSAACkcZYMAEvotURvZLyNR6NRuTd5nhcWbdnHDQA6RLQEAEvMey251qVD0t6uGfe0Ln276zwvLNp4/vV9MKGLGvzklo7RgQzmWgKAJQyIowcWl1KR1CZt+eKpEilP+CV5thveUEYjkTUXyzN2AbpuNBqt+Y1d1THix2QAACAASURBVBaz22nw07r4TbLU+g8+dJdoCQCW0GuJWn31q1/9D//hP5R++de//vXv+77vW7pa4ts4fOG04js80tTicc7tZq8/vxRcvGrxYL7ctR8Rp6enf+/v/b2cK3/1q18NguC9997Luf7FxUXJsioSiWXDH5lwaJL40U6MfeMrZ8fEQY5gKE878V8C8c949nYLxd9LY/TEqlY/FDAQoiUAWEK0RK2+9a1v3b59+6d/+qfLvfzBgweLN2f4XVq0L0/8m/xCl0yrjKfL+eFyCUdOo9Ho4x//eM6VX3vttSAI8q//r/7Vv9rd3S1Z2coyMpdw/Jq4fvi/acvT4tq09dNkxL7xP6nh4iMxU9HtpsmI0es+FDAQoiUAWOL69etXrlzZ2dlpuhB666Mf/ejP/MzPlHvtpUuXbt++PX+c2G8IhmYymeT/QN29ezcIgtIfwJrkiYnjn/HET31idJs/0s1up0KRrot5tlvut1xk31t4KKCLREsAdNhsNjs7O9va2qp1K5cuXaq1fWiD+MVS0cEmpXsTlHhVtTVA21QYE6flTWkjvAq1swZ1b7dDhwLazIykAHTYycnJn/3Zn82HMwAZFjdFCt8daTEOJTJjS9GWE5sqtN3s9cOTnsQnQElrCnqvkmQ2o5Gqkt+auvmEf0tUUswaDgX0lV5LAHTYdDoNgmAymTRdCLRLzpEykeVLh9tkt5Axr8qKyzOKzF8n9EB8MNf8QTxyTVx/8VRkwu9wOJs4F3iJudgS2wkXGU6lg5R5oFacAy6tmIz9reNQwBCIlgDosN3d3b/0l/5S4/frAYpKvDwGInJmqRkfoqpi5RKf05ztJFaSnVmXKCnn/tZ0KKD3REsAdN7GxkbTJQDFuDYDgN4w1xIAAAAAJem1BAAAQDFpM1vrkwgDJFoCAACgGBESsGBAHABkmc1mR0dHx8fHTRcCAABtJFoCgCwXFxff/va3v/3tbzddCAAAtJEBcQCwxNbWlm7/AACQSLQEAFk2Nzc/8pGPNF0FtMti+t5I6joajQrlsEXXb4n57nex8qXq2LXEn3J8YXhO6PBTGct7+SMA6CLREgBd9fbbb49Goxs3bmxtbTVdC7RLrVfdGY0X3WiexKGFZrNZ2r2xum4Nu5bYfuTnvvhv2nLabJ3Zq7cEtIRoCYCuOjo6mk6nN27caLoQ6IBwP6PwxVhil5DFlWHkEnGxcrzXUkY/pvB2Fyskrj9fmPFUeHm4yMQYIu0gpO1XvNml7ecsNd5s4kuWXiFHXpv235zbTXtLpJVUYr+CpIMWr7acxLL7Z/37uPoW15m95i91CO8WaJBoCYBOOj8/n06nQRBMJpOma4G2S8uS0rqEzK8M45FKRoKTmBfEt7v4b+L6aWFBYp3hIuMxUKKM/UqMwLLbT3yc85CWEykgI/Zaut20t0Ta7tS6XxSSmAnmyRCD3Flh/sw0f6mJxSc+W7rxIHYc8uwXUAnREgCddHZ2FgTBZDJZ21ej0H6R2Gj+ILHPSB7VXn2t2JEh7bWRrCpnJfm3m9F+WjsZu5n2kkLFJ8Y92Yc3u/08u7ZK+y33G7/xG2+99da//Jf/cnt7+7Of/Wyzxdy9ezd7hbRMME+GGOTOCnPGu4VKjbe/Yr+zjHg6LT7u9BsVWk60BEAnnZ6eBroswQcldqjphw7tTiOlxq/8u9V+g65fv/4TP/ETn/jEJ8bj8e7ubrPF/JN/8k/mD8rFxInvvcQfVomot+j6JT4IVX12OvTrAnpDtARAJ817LZnAG0poJHgqEUa0vM4Kyys0Dig+2CextaIF5N+XPuVKQRBcunTppZde+pEf+ZGmCwmCIPj5n//5+YMKY+K0vKloVlhh7rMYZyoDgt4QLQHQSYsBcU0XAh0Q6aGQNooqPi/JYoXw4yCpG0XkqYw5jDLWj78k8bXhJWkDfBKl7VfwwbxmPqBm8ZJ4+xnz2iSWGt50ZP2qxA91ZDez61z6oy/afoalb5U8dTJXSTqTkSut0n6J1xbKWFch1YLKiZYA6KT5gDi9liBR/omBEpeHF6Y9XqX9Ek1l71E4iUhrNu0leRqJPJW9ufwLcz5bYhN5DkihH32J9hcrRC7jq3qrDDMdWJoJRpanZZ1pWWH8qex2EmVkr+HWVvzxJWaUeeLj7OKBckRLAHTS2notPXr06PHjx3t7e9euXat7W9A/upzAKnLGxCvGvhkxYp5NpK1ZSWZaaOWc8TFQOdESAN1zdnY2//pxDdHS2dnZ4eGhkXdQjms5anoPeGt1VM/m6gLmREsAdM86J1qaX72Mx+M1bAtYXdqFqyQC2sAnEXpJtARA96wzWppOp4FvWaE7XLjCeohxgQXREgDdM5/De529lkRLANTt4ODg3/ybf3Pr1q2mC8nlZ3/2ZxOX/9zP/dyaK+Hu3buPHz9uugoGTbQEQPfMey2t5/ZwBsQBsB57e3vf/OY379y503QhdMzJycn777/fdBUMmmgJgO7RawmAXvrlX/7lT3/6001XQce8+OKLzz33XNNVMGi+gwWgY2az2fn5ebDeXkuiJQAASKTXEgAdc35+PpvNRqPR5uY6/oqZxpvem7+9G5l5dzQapW23kqoy2od2+va3v/3UU081XQUdM58oABokWgKgY+aj4dbTZSnQa4luKhSpzLPaWuvJ2HTGU6tXlf8gCKFog5s3b/79v//3m66CTlrP922QxvsPgI45OTkJ1h4tmca75c7Pz995552mqyjp3r17x8fHb775ZrmXP3jwIE8msohp5pHN0peEY53wypG4Z/FU2vI89eRZHhTsx5TYzqKFSFPz/2ZsGtbjD//wD5suAaAM0RIAHTOPlra3t9ezOb2WOuH1119/8cUXr1692nQhZZyenp6enn7yk58s9/KTk5Mf/dEfzV4nnCXleTNHsqfFf+PL09ZfuonET1bROou2Pw+V4ruTM24DABKJlgDopLVFS+Za6oqnn366ox2XvvjFL37hC1/47d/+7XIv/5Vf+ZXbt2/PH4ffqGl9cPIEKGmD0SLLF02lLV9FvIaqoh8REgBUS7QEQMd8+MMfDtZ4cajXEh0S7vKzymckoxdSYm+mjOUAQO+ZOQKATlpb1mOuJfqn0McnsSfUKg2W2O5iyXo++KJkAChEryUAyKLXEj2QMWAtPF/S4qnw+vH5ibLbCfJ1Kiy63aIS219M173YUGS6pfz1AwALoiUASDWbzURLdFE8HEmLS/IsTxz1lqeRQhVmbLfEVhJXzmi8aPsAwILu/QCQqqqbVQEAQF+JlgAg1SJaMtcSAAAkMiAOAFIZIAOlpfX187ECgJ4RLQFAKhMtQWkiJAAYCNESAKTa3Nx8/vnnXSEDAEAa0RIAnfGd73zn/Pz8xo0bly5dWs8WR6PR9vb2erYFAABdJFoCoDOOj4/Pzs70IQIAgPYQLQHQGc8+++zR0dHOzk7ThUAnzWcN62U4OxqNat2v7PZLH9g8Lyy6a3UfCgCIEy0B0BmTyWQymTRdBXRAYr4wm81Wn5O+nclF3SVlt1/6wOZ5YdFdy79+O3+UAHSRaAkAYLjC0UY4aIhEHuG7JS6eWtrdJv7a+H/D7Sx68cQ3kVhPRjF52s8TrGTs7NKnCqU88aaW7lpkRzIaie9yoR8lAGQTLQEADFSk38riv/Hl8wfzhCJnDBFZOfzftO3O14lvIq2eICmoyt9+nn1JbD/y2hX7gkWaCh+xeOPx7Wavn7bLhX6UAJBNtAQA0BPhWCFPh5S0AVmR5aUDiOw4KeNVNdVTycsTG0zrVFVrPfkH4omQAKiVaAkAoCcSO79kWNobqFBrhawyhZDuNgDQKuOmCwCA9jo9PX306NHh4WHThUDtEns85X9JmrQxbqVra6HE4XL5ay69dxUelpYfYQBaTq8lAEh1dHR0586dvb293d3dpmuBlSyyg/AEPZEJsyOT8ixeG06FEufYLiptBFnG3NJLpxtP26/gg525gu92ego/zig1sf0g89DllzFteZ5di+xm4voZu1zJjxIAAtESAGTY3Nzc29vb2dlpuhAoJnG6oqVrRiaEzt940WIKLczeYqGXJO5stpybjqxWtPFKjkaJXZYoAVAJ0RIAHfD++++PRqPLly9vbGysc7t7e3t7e3vr3CJAtgpnNAeASoiWAOiABw8enJ+fb21tXbp0qelaAJokTgKgbURLALTddDo9Pz8PgmB7e7vpWoCotBmgu5KAdL1+AGicaAmAtjs5OQmCYHNzczx2Y1Nona5HMF2vHwAa5xwdgLabR0u6LAEAQAuJlgBoO9ESAAC0lmgJgLY7PT0NREsAANBKoiUA2k6vJQAAaC3REgCtdnp6OpvNxuPxZDJpuhZgudFolHbPtbW10AYZu1DJDvbgEAHQG6IlAFrt+Pg4aK7L0rvvvvv6668/fvy4ka1DaQ3mDqvfcK2SW7YVPQKVH7GMvahkB/M3IoQCoG6bTRcAAFmOjo6CINjZ2Wlk6xcXF2dnZ9PptJGtQ4UW+cJsNhuNRvNgYr4w43H4VfnbT1wefirS/ipRSyQ3CdefWFJGPfnXz1lS2qGIt1PoOGTUGT+kGbsGAFURLQHQavNeS01FS+HLVNrs3r17Dx8+/Kmf+qmmCynjtddee+WVV0oX/41vfOO5557LXmeRJQWxrCQSOYUfh19Vrv1IC4v/RtrPv6GM7QYp8Vn2+uF68q+fLfH3RtohKiGx/bRDmrZrAFAh0RIA7TWdTue3h7t06VIjBYiWuuLJkyfHx8c/+IM/2HQhZcxms/fee6908YeHh4u3aCTWWbQf2Vz+wkrUE46ogsyPTyVD5wr1Koqsn0cdH/94GVVFPyIkABohWgKgveaj4SaTycbGRoNliJY6YTQa/eN//I+brqKML37xi++9917p4ieTye3bt+ePw/1iWpIy1F1GoV5Fab2ccrYPACQyjTcA7TUfDddUl6VAryV6KvEtXdX7fJ2fl5zbKrq/de9CvP213RTPbzMA6qDXEgDt1exES4Foib7IGDgWnvh5MVlP0bmf0+Zpyh75lT1tds6ZrZfuV3h5xnxSS9ePb2JpSeFdWGUqqzztL35k4R9fxq4BQIVESwC01Gw2Ey1BOfEEISNTCCcpS1fOs8W0x3lKKrTp7JWXtp9nFqoVD8Uqmy7UfvYxlygBUCsD4gBoqdPT0+l0Oh6Pt7e3m6pBtAR1iPSKAgA6Ta8lAFpqPod3g12WAl/1Qz18sgCgT0RLALRU43N4B3otQUjaB6HunKip7WZoYUkA0CDREgAtdXp6GrSj15JoCYLmcpMW5jUtLAkAGiRaAqClnn/++bOzs83NJv9UiZYAACCbaAmA9ppMJs0WIFoCAIBs7hAHAEuIlgAAII1oCQCSLaZTES0BAEAa0RIAJBMtQVFVfVh68KHL2IXRaLT6DvbgEAHQG6IlAEgmWqK7mnrTVnXrtNXbKXoEKj9iGbtQyVHK34jfYADUzTTeAJDMHN70yeKdPJvNRqNR+O2d8Tj8qvztRxYu2ok/FaknrZ082w2/ar4wo6TI8qLr5ywpsn7GrsWPT9H20w51xq4BQFVESwCQTLTUIXfu3JlOpx/96EebLqSMg4ODJ0+elC7+8ePHP/zDP5y9TmJ2E8TCo8jj8KuWSvy8RNqJP0h8SXxhnv0K0uOqjPXn/y26frbEXcjY5aIKHeq0XQOAComWACCZi7EOOT8/D4Lgy1/+ctOFlPG7v/u7X/7yl//dv/t35V7+W7/1W6+++ur8cThuSOuoUjQtWl12O6tsJRyH5Wkqsn4edYTL8TLaM5AQAEoQLQHQLmdnZ2+99dalS5du3brVbCVbW1sf+9jHmq2BQj7xiU80XUIZf/qnf7q/v1+6+D/6oz967bXX5o/D/WIGkjIU6lWU1sspZ/sAQCLTeAPQLkdHR2dnZ2dnZ00XEgRBMB6Px2N/K+mbxEilwbGfpTedf9xcodfWfSji7Vdyz7hymwaA1em1BEC77O/vb25u6ikAFcoYOBae+HkxWU+JuZ8XK8enA4+0OZvNMupJbCfPdtP2K7w8Yz6ppevHN7G0pPAurDiV1dL20w512q4BQIVESwC0y2g02t3dbboK6LZ4gpCRKYSTlKUr599iEMt68tRTaNMlZnEqWlJVh6LEpgu1n9F40fYBoCid/AEAAAAoSbQEAAAAQEkGxAEAsFzaDNB1D7ZqarsZWlgSADRItAQAwHJN5SYtzGtaWBK02S/8wi/81//6X5uugk76uZ/7uR//8R9vugqWEy0BAABQl29961s/9EM/9PLLLzddCB3zS7/0S++++27TVZCLaAkAkp2enj569GgymVy9erXpWgCgw1588cUf+ZEfaboKOuY3fuM3mi6BvEzjDQDJTk9PHzx48OjRo6YLAQCA9tJrCYC2uHPnzsbGxtWrVzc3W/HnaTKZXLt2bTKZNF0IAAC0VyvO3QFgNps9evRoNpvt7+83Xcuf297e/tCHPtR0FcD3jEajpqbQnt8VzgTe0AmLD2zOXxqL1db/SyZji3mKWXPBDf4SpuUMiAOgFY6Ojmaz2ebm5tbWVtO1QOfNL6u6uMXsdhq8pMm/6fUffCBsHn/MP7M5P7ntjEvaWRUk0msJgFY4PDwMgmB3d7fpQqCfFnlH+Gv88Bf7i2cj6wcfvLxJXD5fGG8ko52MIrPbiWw0sjtL6w8K9j9KLCZjE1UdCgDoENESAK0gWoL6ZGQuo9EoPsAhsiRtqMjiv2mjTtLWT5MxeiWchcWLj8RMRbebJu24ZexaVYcCBiUtw81YHs7Eg5R4N/G3wWL9yAd80WA8fU4Li+O5fEYYnfMIRPYlO55eseClv/wTiwxvLq2FxIOTtst+GfaDaAmA5l1cXJycnARBcOnSpaZrgQ4LX3iknbXHT+KzT/ojaxYd7VX36LBF8WlXpBkvKbqheLBVqAUD5SBRPOLJfpy4ZGm8G28wvsLStCUjI47kO4Xi4zzRc+I6qxRcQsaxjcv/4xO194NoCYDmHR0dBUGwtbXVknvDQUdVeKa+9MIsyJeVNHXBUPd2O3QooM0iH6W0voeJS1bfUOnyEmso/Rkv8cK0lxQquFYZZSz94dJFpvEGoHlGw8E6VdJ9JqORqrrn1NTNZz6MrsJi1nAoYDhEDGsTyddK5Durt0Bv+HIYgOaJlqBWeSYlCS+Pf58fHmkSXicyCCVnOzlLTewWFJ5CJUiZB6rEdvMUk7G/dRwKoA1aEhCn/RrvqJYcVSokWgKgYWdnZ2dnZ6PRqG0TLYXnyIRuyTmhUsbFSdpTGQNSim6i0Kaz9yg+3KPEri1dOWN/azoUQOPa88mtcNakuNXPdgq10J6jSlUMiAOgYfMuSzs7O+Nxu/4qvf/++6+88sq7777bdCEAMBQt/0an5eUVldZRdJ0tBL07qsPUrpN4AAZoHi21rctS4Cs1AKhZ2mQ9lU/iE29wlfLWr9MFZ8+hboamfjAgDoCGtXaiJQPioA5pnymXFjBMad1eKukOk7GhtN9FiwndaiqjnIy5llYsuOgN2iKbS2shu4yWHFUqJFoCoEnHx8fT6XQ8Hu/s7DRdSzLRElTLVQQQkWdyt+zlaXOf5ZkHLfhgLpOzjOyW8/+iy9iX0pO41TfdW+m56lZsivYzIA6AJh0cHARBsLe318IEx0kPAPRD5DTDIKyF1Q+Fg0mg1xIAzVpES00XkqqFmRcAUEjGgLJaZZxFNB7HxIe2BQULTmyBYRItAdCY8/Pzk5OToJUTLQVOlQCgRxr5s97mc4nVx80VHclIjxkQB0Bj5l2WdnZ2NjY2mq4llV5LsB6j0WhtHzefawCokGgJgMa0fDSc79zorvVHJ6tvcZ2fuKL3QgIAMhgQB0AzZrPZ0dFR0OJoac6FJf0QueX2PFtZTJMRvwl09l2uE1dOvJN0iclNMorJKLV040HsOOTZLwBgQbQEQDNms9nVq1ePjo62t7ebriVZ+Nq7T37913+96RKq98d//MdBZ3ftT/7kT958883Sxf/xH//x+fl59jrh2/dEsp75MLT4NK6R5GXxcUhcHo6r8rSTv9R4+2nbyinxcx05DlVtCwAGQrQEQDPG4/HNmzebrmJYJpNJEAS/8zu/03Qh1Xv99deDzu7am2+++d5775Uu/tVXX/3Yxz42fxxOTNL62sSDksToJDFUjdxiKY+i65fIcaqKfkRIUJPPfOYz//2///c//MM/bLoQuufrX/960yWQi2gJAJL1r9fSfMb03/qt32q6kOp94Qtf+Imf+ImO7toXv/jFL3zhC6WL/5Vf+ZXbt2/PH8f7+5SWljelDXYr1E65euZb140IOudP/uRPJpPJSy+91HQhdMyv/uqvvvjii01XQS6iJQCAYakkncnIlVZpv8RrC821tAqpFpT22c9+9qd+6qearoKO+cpXvvLMM880XQW5iJYAIFn/ei0xWJGBbEunqY4PfAvPPRReJzItUc52EmXMKR5ubcVwZ9F4OJBaHIfF1rP3CwAIEy0BQDKXkXRXzgmVMt7kaU+Fly+dxSl7E2lrFv3oFVp/aZE5Dx0AsCBaAoAsei1BG/gkAkBrjZsuAABaSlcFaI/ZdzVdCFCj7EncVo+YhdRQE72WACCL01CoVtpnSmwEw5E2b1r2KN3V/yLn/z1j2n4oRK8lANZqNpvduXPn+Pi46UKWc04JdZilaLouoEmj78q5PCjYjymxncWSyFPhhb5hgjz0WgJgrZ48efLw4cOjo6OPfOQjTdeyxMbGxsbGxnjsaxgAqFfiXVnDXYdWjHgS24/c6TJya0iRd+MuLi5eeeWV//E//kfis6+//vp6yyGLaAmAtZpMJvv7+1tbW00XstyHP/zhpksAgP6I9wwKcvcRjg+Iqyr6ESG11tnZ2X/+z//5K1/5StoKn/jEJ9ZZDxlESwCs1c7OzjPPPNN0FQDAuoW7IAl0WGpnZ+dzn/vcP/yH/7DpQlhOJ38AAABaLW0apkY2DUTotQQAMFDz66UO9R1osKdD544VdMsivgl/1sKD4CLzIlXS/mK67sWGItMtLTZdfsdgGERLAAB9k/Pqq5KbeVcru/IGL/DyHysjfWCp+Gck7VMTXh5Zp9AHLXHljMaLtg8DJ1oCAOi/yDf/kUumeJeccIwSuUPTImRJXD/ybGI72UUm9hSILwwXE7m7U/Z2C/U/yui2kHGIsnch/9YBoBNESwAAPZd9A+94NBPJniIjRLLXj+RKie2kybjhd2JQtSgmEjMV3W6ajOOWfYgSc6hKSgKAFhItAQD0RJ4be+cZ9JE9+CtPPJRYUh0WxSR2Tcp+SdENxYOtQi20bewhAFRFtAQA0BNV3dg73sVm9ZLWrO7tljhEuikB0FfjpgsAYBDu37//8OHD6XTadCEF3L1795133jk+Pm66EKhYoaiowb45NXXzKXfD8oyXlHsKAHpDryUAajedTh88eDCdTre2ti5dutR0OXkdHR0dHx9fuXKl6UJgVfHBXPMHaTfeTrvhd/71E7cb5Oi5k3bD7/iNwyN3Cg93Iyqx3TzFhOeZyv9UtSUBQAuJlgCo3cHBwXQ6nUwmHcqVgiB46qmnzs/Pt7a2mi4ECst5F+2cd/VOnM8o513ASwQoS0vNU2HGdkvfsDzPIcrYhCwJgL4SLQFQu8ePHwdBsL+/33QhxVy+fLnpEqAzEntFAQBDYK4lAOp1cXFxeHgYdDBaAvKbhTRdCzAIGfOmZc+Aln8StKraKdE+dIteSwDU6/Hjx7PZbGdnx8gyIEi/lJJJwXCseBfLufgUZuGnSryqvnZKtB9RyRGD+oiWAKhXR0fDATVxdQSERaa9T/tvkO+3R+J9ADKWV9jO4iYDpduP3KYgfsuFQrsA6yRaAqBGZ2dnx8fHgWgJAEgyT1Iit1OM3/kx/t+01oJY78jwC3N2NaqqnULtR243GbnvpESJNhMtAVCjR48eBUGwu7u7sbHRdC0AQJPCSUq4D05anFTJoLOIqtqMt1NV9CNCootESwDUaD4a7sqVK00XAgA0LNzlJ+fotvh4MaCF3CEOgLocHx+fnZ2Nx+O9vb2mawEA2isyFiyuqlypvnYquWdcuU1D4/RaAqAu8y5Le3t743Env8k4OzubzWabm5sdrR+WKjTpbN3WWYxZS6ATwoPO4vMQzZcnzngdWZ7RTpqq2inU/mK67sWGItMtLTZdYotQK9ESALWYzWZdvzfcO++8c3Jy8uyzz+7u7jZdCxST82qnjnlMSltnMW74Dc1K/FgtXZj2eGkjOV+7YjuFflcU2tkS7cOaiZYAqMXBwcHFxcXGxkZ3cxnncPRJ5Jv2xNtpp81pEukOEL8xdrz94INfwkfayV9qWuOJVZVrPGO/3PAbAPIQLQFQi4cPHwZBcPXq1fb0iSAIgvPz8+eff77pKqp3cHAQBEFHd+3w8PDg4KB08U+ePHnppZey18m+YXb8xkxpN/xOuzF2vP3SNw6PNBW/8faKN+F2w28AqJxoCYDqnZ2dHR4eBu4N1zI3btx47733fu/3fq/pQqr3pS996XOf+1xHd+13fud3vvSlL/37f//vy738i1/84je/+c3547Qbe4fXzzPIIntsWnbUEnlt0XC5RI7jht9ACWm/nfwqgBJESwBU79GjR0EQ7O7uTiaTpmvhezY2Nsbj8cc//vGmC6ne//yf/zMIgo7u2te+9rXLly+XLv6ZZ5559dVX54+L3tg7TYU3/K4w91lMbevCD1id3yRQIbe8AaBis9lsHi31o8uSAX30T6F3ddGPwIofmRIvd8NvAGiWXksAVOzw8PD8/HxjY+Py5ctN1wIEQWyQWnya6siNrtNusJ1//cTtBpndBCJzacdXrqTLkht+A0DlREsAVOzx48dBEOzv7/uGH5qS867VOe+ivXhc4q7b+eOYxK0UemHpld3wGwBWIVoCoGLPPPPM5cuXt7e3my4EWJ/EXlE1tQ8AtIpoYdFnfAAAIABJREFUCYDq9WMonK4KkF/dnxefR6A3wgNyK2wz0mDaYN60ccoZy/0GZinREgAA6+OG38DA04r4PHSVCx/h+NFefQgzRIiWAAA67M033/xv/+2//diP/VjTheT1N//m30xc3qFdoM2Ojo6Oj4+broJiIrP4hwOO+GDb8MqLJYldbxJ76yxNTyKdfdL+G8T6+yTO+h+5rcHSkoq2v1ghZ3hUQiW3UKD3REsAAB12enq6v7//wgsvNF0ItMKTJ0++9rWvNV0FxYTvRBmEgpJIohG+JWX4lo6L7CNx/XLFhG8skF1PvP7EAuLdlHLub0b7eSS+aulYOUESRYmWACCLyYNpuY997GM/9EM/9G//7b9tuhBohTfeeOPLX/5y01WQLPwnNZ5iJN6fcekQ2uyJhBJfslRanJQ9kC27/Tx3n1yl/USJuVJa+rZ6KseQiZYAAACoXdGZoeO9ePJvog4l6mmwffEQ6yRaAgDotrfffvt3f/d3m64CWuG9995rugRqsXqOU+i+bIkTP61YT6Gsp8JcKXtK7xK1QZxoCYAKHB0dbW1tbWxsNF0IDM4zzzxzenr6i7/4i00XAm3x2c9+tukSKGYeo4SnTwpPqzRfZzHf0OIleQasVRuXJNYTrjmy0Ug9kXmXcu5vRvvZEsOptJLSlkNOoiUAKnDnzp3T09Nnn312d3e36VpgWF5++eWXX3656SoACsi4nVn+p4IPJiNp62S8vFCRGfUU3WjR/V1aeXwK8xLHIaN/lqSJpcZNFwBA502n083NzfF4vLOz03QtAADAWum1BMCqxuPxs88+e3FxMR738BsL39QBAC1X3+mKEyHyEC0BUI3+TbS0vb29sbHRy7wMAACqIloCgGQf/vCHmy4BAADazjexAAAAAJQkWgIAAACgJNESAAAAACWJlgAAAAAoyTTeAAAA0B+j0SgIgtlsVm2b4Qbnm4hvZbE88mzG8mrrpBF6LQFQxsHBwZtvvnl0dNR0IQBAx0RShhZqf4XZ6g5r5nnQXPxYzULyLKcH9FoCoIz79+8fHx8fHBxcunSp6VoAgG4Ld4EJd2MJxxbzhYv+OIvV5g/Slqe1E2kqvjyxV05a15sgd0ehSLNp/82oM/5UEDtuGVUV3cRihfCSCrOhtMrpFtESAIUdHR0dHx+PRqNr1641XQsA0G1pGVB8BNaim0xinJSxPN7OYoV4FJUR02TETDlFGk/LwjLqXHrc4iuU3sRSGXlWkD5WTpDUP6IlAAq7f/9+EARXrlzZ3Ozz35E7d+4cHx/fvHlzd3e36VoAoPMisdH8QXzMVJ6mwtFMnuUZMVD+mCMy+Ktc5UF6nJQ4uCxn+4nPxheusom4xFwpMbrKWE4/9PmSAIA6HB8fHx4ejkajp556qula6nV6enpycnJxcdF0IQDQBw3O3FzV5mrNRyrpFbW2TYiHCBMtAVDMgwcPgiC4fPnyZDJpupZ63bx58+LiYnt7u+lCAGBA2pZZpI0mi68WFOl1lb1+idCn6HGrKldKe7xKbXSOaAmAAk5PT588eRIEwfXr15uupXY7OztNlwAA/Zc20Cxx+WKO7fgsQonL4+0kNhV5edqE1hkD4lYX2Whk6qh4PRkD9NJ2regmMiQmU4V+lPSJaAmAAhZdlra2tpquBQDopOwJevKvmX/GpaVTEeUpqcRsR0XXz7N3eTaasWtFN7FYIW3ipBIlhenQ1A/jpgsAoDPOzs4eP34cBEHvZ1kCAAByEi0BkNf9+/dns9nu7q6RYgAAg1JT3yJdlvpBtARALosuSzdu3Gi6FgAAoC1ESwDkcu/evdlstre3p8sSAACwIFoCYLmTkxNdlgAAgDjREgDL3bt3LwiCy5cvb29vN10LAADQIptNFwBA2x0fHx8cHIxGo6F1WTo5OTk/P9/a2ppMJk3XAgAALaXXEgBL3L17NwiC/f39ra2tpmtZqwcPHrz99ttPnjxpuhAAoANGo1GDm25w6yBaAiDL4eHh0dHRALssBY2eIAJAj63/L2xVW8xuZzabVbKVEvJv2ukNdTAgDoAs81mWrl69urnpTwYAUItF3jGbzUaj0TwomS+cL1k8G1k/+GCqkrh8vjDeSEY7GUVmtxPZaGR3ltYffmF2MWnbjT8Vr2r1QwERrhMASHV6enp8fDwej69fv950LY1xdgUAtcrIXObjvOLhSyQTiWc34f+G85087aRJayf47tlCWvGRmKnodtOkHbeMXavqUECEaAmAVFtbWy+88MLh4eHGxkbTtTRAj3EAqFD4D2tad5t4opGYcST+jQ73bypRUh0WxSd2Tcp+SdENxYOtQi047WEVoiUAsmxsbOzv7zddBQDQeeEuNit2iknLm9JGeBVqZw3q3m6HDgX9YBpvAMjiTAsA1qmS7jMZjaxnSu9Vmi3Rcrn91VOJqui1BADJnG8BwBrEB3PNH6TNOR0f7RWeSCi8TmSOoZzt5Cw1sVtQZOrxxHmgSmw3TzEZ+1vHoYAw0RIAZHFqBQDVyjmhUsaf4LSnwsuXzuKUvYlCm87eo/iMSyV2benKGftb06GABQPiAAAAAChJtAQAyQyIAwCApQyIA4As+ocDwHCkfbHkfAAy6LUEwPc8fPjwtddeOzw8bLoQAIAGzFI0XRe0mmgJgO+5d+/e+fn56elp04W0ggFxAACwlGgJgO/56Ec/+tRTT127dq3pQlphcf/gpgsBAID2Ei0B8D2j0ejmzZtNV9EWoiUAAFhKtAQAyURLAACwlGgJALKIlgCA0Wi0tkkYzfZI54iWACCZXksAUIf1Ryerb3Gd5wP5tyWEoiU2my4AAFpKtAQA67GISGaz2Wg0mv/xXfwhDj8bWT/44F/qxOXzhfFGMtrJWWpi8YnPlm48iB2HPPsFayZaAoBkk8lkf39/e3u76UIAqNF//I//8Stf+UrTVXTAK6+8cnJykvbsjRs3nnnmmcSn/u///b9/7a/9tYyWF1lSEMt65sPQIqFJZEk4ikpcHo6r8rSTv9R4+2nbyimcqYUXho9DVduCComWAAbt7OxsMpk0XUVLXbp06dKlS01XAUCN/u7f/btvvPFGRmLCwje+8Y1Hjx4lPvXgwYMXXnjhpZdeSnx2Op3OH4QTk7S+NvGgJDE6SRwIFu40lFPR9UvkOFVFPyIk2ky0BDBc9+7de/Dgwa1bt/b395uuBQAa8I/+0T9quoTO+KVf+qW0p37hF37hwYMHaSv85E/+5PxBvL9PaWl5U9pgt0LtlKtnvnXdiBgm03gDDNTp6emDBw9KfL8HAFCfSs5MMhpZpf0Sr13breWc0dEgvZYABurOnTuz2Wxvb+/y5ctN1wIADFfki66l01THvxgLzz0UXicyLVHOdhJlzCkebm3FLkuLxsMzdi+Ow2Lr2fsF6ydaAhiihw8fHh0djcfjp59+uulaAIBhyTmhUkZWkvZUePnSWZyyN5G2ZtEEp9D6S4vMeehgzURLAINzdnZ29+7dIAhu3LixuekPAX3w9a9/PQiC8biTI/3nVwUdLR5olfv371+7dq3pKobIYDQGzhUFwOC8++670+l0Z2fH2Se9Mb/90P/5P/+n6ULK+L3f+73f/u3f/uVf/uWmCwE67PT09DOf+UzTVQyXrkMMnGgJYFjef//9+VC4Z555pulaoGKf/OQnmy6hjG984xtXrlzpaPFASxwfHzddQk+k9T8SHkEG0RLAgJyens6Hwt28eXMymTRdDgBAu4iQoATREsBQzGaz73znO7PZbHd39+rVq02X0wHn5+d/9md/FgTBxz72saZrAQCAlhItAQzF/fv3T05ONjY2bt261XQt3TAajeYz+AAAAGlESwCDcHx8/P/Zu7sYR7K77uP14vduu93vPd0zO5vNG4QXRSsQUggkmzx7yxUSEkQICSUhIspFkEIibnJJFAQKSGiFhHhZIBcbFITgiiAiwi5SEJEiCEo2ITszOz07Pd3T7m67/V5Vz0XtFLX1clxVLvtUlb+fi5W7fHzOv2p2euyfzznV6XQURdnd3eWucBFpmnb79m3u+QIAAAAI8OkCAIrPsqyTkxPLsprNZrPZlF1ObqiqWqlUZFcBAAAAZJomuwAAwMKdnZ2Nx+NSqbS7uyu7FgAAgEhUVc3X3GGJ1ebuWqFgiJYAoOAGg8HFxYWiKPv7+7quyy4HAACsuoghSAZv1iauXGLB0YcmgcIisCAOAIpsOp2+8cYbiqJsbGw0Gg3Z5QAAAARw8g7LslRV9QQl9rPug+58xDnuNBO09zwb2I+4SHdXgf37i3HG8jwbOK6/+JklBbYXXCLxKUQfHXAQLQFAkT18+NAwjGq1ylI4AACQTWGZi+fZwIzG/aOd44jbe3KlwH7CBMZezlOKL51xivHETHHHDSO4buJLFJhDpVISVhbREgAUVqfTGQwGmqYdHBww+RkAAMjlfjcSNt3Gn2gEHhG8sYkSDwWWtAhOMYFTk8QviTuQP9iK1QPvFTEPoiUAKKxWq9Xv91utFrc5AwAA0rmn2MwzKcY/xWb+kpZs0eMmuERMU8I8iJYAoLB0XT86OpJdBQAAQAyxgieJc3MWtGos1l5LnlcleIpECakgWgIAIFS32zUMY319vVTiX0wAABbCv5jLfuDsOe00sB+72/u3NIrSPnBcJUKg43m5c9w56NlKPHC/pwTjRinGvc9U9KfSLQkrizfKAACEOj8/H4/HlUqFaAkAgLRE2VDJc1CwJVPgfkYzt3ASHxeYWWqUCgXjxiop7iUSDEGWhHnwRhkAgFBsaQkAQAEEzooCkBaiJQAAQiXb7wAAAGQK/5QDC0W0BABAKKIlAABWStiEZd4MAAKa7AIAAOk4OzszTVN2FUVDtAQAwEqxQsiuC8g0oiUAKIJOp9PpdO7cucNbn0XgqgIAAABhiJYAoAjW1tYqlcr29jbbTqeLWUsAAACAGHstAUARVCqVW7duaRpfGKSMaAkAAAAQ40MIABQEudIiEC0BAAAAYnwOAQAglB3YsT86AADLp6pqdlb6L7OY7Jw1EBHREgAAoZi1BABA6iJGJ5n693eZxUQfixAKGcFeSwAAhGLWEgAAUZimOZlMAp+KEpQ4EYllWaqqel7i/6bHHak4x51mgvaeZwP7iV5qWOeBVSXrXHBe9o+BLwGWjFlLAACEYtYSAABRfOlLX6qEeOmll8SvtbMkm38ajvOs85S7vT/NEbf35EqB/cQt1e7N/98E7J79BwPPyxkr8FXAMhEtAUDOjEajhw8f8gZiOexZS1xtAAAEPve5zw3D/eIv/qLdTH3C89jNn5IERi2qi/9ZQan++VBh/UR5ecSXpPJGgncjyDIWxAFAnkwmk+PjY8MwSqXSzs6O7HKKz36jyYI4AAAESqVSqRT60dK5ia17Jdc8QYnn5fPsN5RWXuOs45vz1ICcYtYSAOSGYRh2rlStVre2tmSXsxKYtQQAwJLFiori5kpz7nud4OVLu7UcW3pDImYtAUA+mKZ5fHw8mUzK5fLR0ZHzBSAWillLAAAsmmefI/821U6DwP2G7OzG00bcPnBcRfhlkmcvbX/jVKYsufeHUly7LAWel7geYJmIlgAgByzLeuONN0ajka7rR0dHuq7LrmhVMGsJAIDUhe1ULTgo2IDJeRyxfZTjgpZx3xXEah/3OiSoB1gEoiUAyIGTk5N+v69p2tHRUblcll3OCmHWEgAABRA4K2pB/QMriGgJALLu9PS02+2qqnrjxo1qtSq7nNXCrCUAAApg0f+U81YBK45oCQAyrdPpXFxcKIqyv7/faDRkl7NySqXS1taW4K43AACgSMLmHxEeAQK8VwaA7Lq4uDg7O1MUZWdnp9lsyi5nFem6vr29LbsKAABy7IMf/OArr7zy8Y9/XHYhkXzsYx8LPJ6X+oukVqt9//vfl10FIiFaAoCMury8PD09VRRla2trc3NTdjkAAABJfP3rX7+8vHz/+98vuxDkzJe//OXnn39edhWIhGgJALLo8vLy0aNHiqJsbm4yawYAAOTahz70oU9+8pOyq0DOfPvb375586bsKhCJJrsAAIDX1dWVnSu12+2dnR3Z5QAAAABAKGYtAUC2XF1dnZycKIrSbrd3d3dllwMAADCvf/u3f9N1XXYVyJnvfe97P/MzPyO7CkRCtAQAGdLtdu1caWNjg1wJAAAUwPve975vfOMb//7v/y67EOTMu971rne/+92yq0AkREsAkBW9Xs/Jlfb29mSXAwAAkIKPfvSjH/3oR2VXAWCB2GsJALLi8ePHlmW1Wi1yJQAAAAB5wawlAMiKW7dunZ+fs2931pimaZqmpmmaxvcxAAAAgBfvkgEgKzRNI1fKoAcPHrz22mv9fl92IQAAAEAWES0BACCiqqqiKJZlyS4EAAAAyCIWxAEAIHJ4eGinSwAAAAD8mLUEAIAIuRIAAAAgQLQEABIYhiG7BAAAAABIAdESACyVaZrHx8cPHjwwTVN2LQAAAAAwL/ZaAoClMgxjOBxaljWZTKrVquxyAOTe17/+9RdffFF2Fci0D3zgA7/6q78quwoAQGERLQHAUpXL5aOjI13Xy+Wy7FoAFMF3v/vd//qv//rIRz4iuxBk1L/8y7+88sorREsAgMUhWgKAZavVarJLAFAo7373uz/1qU/JrgIZNZ1OX331VdlVAACKjL2WAAAAAAAAkBDREgAAAAAAABJiQRwAACKj0ejy8rJUKm1tbcmuBQAAAMgcZi0BwEKYpnl6eiq7CqRgOp1eXl72ej3ZhQD5o6qqqqr2g4jtPQ+KoWCnAwCAB7OWACB9k8nkwYMH4/FY07Tt7W3Z5WAumqYpimKapuxCgJxRVdWyLPux80AsYrPcKep5AQBgI1oCgJSNx+P79+8bhlEqldbX12WXg3npuq4QLQEAAAAhiJYAIE2dTufx48eWZVWr1cPDw1KJX7O5x6wlrA5n3ZZnlo3guGVZ7tVeTgP3Oji7jfu17g7dT7k7dF4rLsNTg/1UWMGCEw88tXmG9lyNKJdUcD0BAMgyPvMAQDpM0zw5ObF35Gk2m/v7+2yuUQx2tGRZlucjH1Aw/ohH/DjwiPOjP04KG8jfIPC1gjL8HQoKTiDi0DN/nL9DAACyiWgJAFLgbK6kqurOzk673ZZdEVJjR0uKopimaS+OA4rHE2E44U7YcfeR+QdKXF5gDQmymMDJUwmG9nc757kAAJALREsAMK9er3dycmKaZqlUOjg4qNfrsitCyjRNM03TMAyiJawOMg4AABAR0RIAzOXx48fn5+eKotTr9YODAzZXKiQ7WmK7JUAiictRow/NTkkAgNXERyAASMgwjIcPH/b7fUVR2u32zs4OG/EUFTt5A9ItOqYJWwMYd2h2SgIArCCiJQBIYjQaHR8fG4ahqur+/n6z2ZRdERaIaAkrKOOxiMTyMn5lAABYPqIlAIit0+k8fvzYsqxyuXzjxo1qtSq7IiwW0RIKL2wfa8H+1mkNNE956QqbshR96CiFLedcAABYJqIlAIhhOp2enJzYi+Dq9frh4aFz+zAUmL17N9ESis29T1DYTdxSCUE8HYalS/Zx963T0i0juuhDR9xrSeK5AACwCERLABDV9fX1ycmJvQhud3d3Y2NDdkVYEmYtYUUIopCIxz2ZVFjLmR0GNohycJ5tkqIUltbBeZoBAJA1REsAEFW32zUMo1qtHhwcVCoV2eVgeexoyTAM2YUAuedZ/8VyMAAACoBoCQCi2tvb03WdO8GtIGYtAWmJuGQsdYLf22RbAADMiWgJAKLSNG13d1d2FZCAaAlIkZQoh/wIAIDFYfdZAABmIFoCAAAAwhAtAQAwA9ESAAAAEIZoCQDewjTNfr8vuwpkC9ESAAAAEIa9lgDg/0wmk3v37imKcvv27VKJ35B4E9ESsuzu3btf+9rXPvShD8kuBBn1+uuvv+Md75BdBQCgyPjgBAD/p1wuVyoV0zTZ8BVulUrlxo0bpI3IJtM0t7a2nn32WdmFIKNM07x9+7bsKgAARca7ZAB4CxIE+Gmatr6+LrsKINjb3va2Z5999vd+7/dkF4KM+v3f//1XX31VdhUAgCJjryUAeAtyJQAAAACIjmgJAAAAAAAACREtAVhF0+lUdgkAAAAAUARESwBWi2majx49unPnznA4lF0LAAAAAOQeW4oAWCHdbvf09NQwDEVRRqNRrVaTXREALJWqqmF3wFRVVVGUBPfHjPJCwbiptAcAABIRLQFYCePx+NGjR4PBQFGUSqWyu7vbaDRkFwUAixIWzQjyGsuy7JAorigvjJsTRW9PCAUAgHRESwAKzjTN8/Pzi4sL+8PP1tbW5uZmso9PAJBfzu89TxATdlyJP48psKso47oHEnTiaekcF5wCAABYAqIlAEV2eXl5dnZmmqaiKGtra7u7u+VyWXZRyKXJZDIej8vlcqVSkV0LkIQnuLG5p/zMmbl7unIeRxxX3N4OlZxXOQ/s4yRKAADIRbQEoJiGw+HZ2Zm9Aq5UKu3t7a2trckuCjl2cXFxcXGxtbW1vb0tuxYglDuRiTuXx7+uLVZkkzjfib4QjwgJAIBsIloCUDTT6fTs7Kzb7SqKoqrq9vZ2u91mBRzmVC6Xq9WqruuyCwFEAucNAQAALBTREoDicG+rpChKs9nc2dkplfhFhxS02+12uy27CmCB/BF8rL2WEodZKUb/BGoAAEjBJy4ABXF5efn48WPDMBRFqdfru7u71WpVdlEAkBVOguMOjNyL0Tz7GcXt2dNV3HHF7Z3tup3Gnu2W/OMCAIClIVoCkHv9fv/09HQ8HiuKUi6Xd3Z21tfXZRcFADL5Q5aw2MV93NMm+iZNgvZRxp15XFBk9DoBAMCCEC0ByLfpdHp8fKwoiq7rW1tbGxsbbKsEANnn/l1NNgQAQK4RLQHIt1KpZO+As729rWma7HIAAJEQJwEAUBhESwByb3d3V3YJAAAAALCi+IYfAAAAAAAACREtAcgB0zSHw6HsKgAAAAAAXkRLALJuMBj88Ic/PDk5kV0IAAAAAMCLaAlA1lWrVVVVLcsyDEN2LVhpp6end+/evb6+ll0IAAAAkCFs4w0g6zRNu3nzZrValV0IVt1kMhmPx9PpVHYhgHyqqtoPPDd6s78JiNWPlFvFCca1Ty1ZVVFem5dLBABAdMxaApAD5ErIAl3XFUVh9hxywYl+FtS59YTnqbghiL/9QisXjBvlqXm6Tdx/9PbLuXQAAPgxawlAJhiGoaqqppF3I7uIlpBr7nlG7okw7jzCc9Bu6T+uBM1aEsxjco/rNAhsbx8UPOU+7i7SOTIziIlSZ+BL4k41EpzC/Jco7I9GcBYAACwO0RIAyQaDQafTub6+3tnZ2dzclF0OEIpoCYvz8OHDr3zlK8le+61vfWvmOs2wLMmTxTg/2smFP7IRJDieNCRsXOfHwPae2Etcp7tIf8wUJmKd8/D0Jj7lZJco8I+GpXMAAFmIlgBI0+/3z8/PB4OB/SNviJFxdrRkmqbsQlA0BwcHu7u7f/qnf5rs5ffu3XvPe95jP/bERvYDz2/X6L9s0/217ARAyYS91hPEzM9f5+KWsM0cOvUhAABYBKIlAMtmWVa32724uBiNRoqiqKrabDa3trbK5bLs0gARZi1hQT7wgQ984AMfSPzyF1544eWXX7YfB06WKYaCnQ4AAEVCtARgeabT6eXl5eXlpf3hXNO0Vqu1ublZKvG7CDlg7wVGtIQCkBI8JZiylJE64+61lLjsFPfhLl62CADIMj7OAViG0WjU6XR6vZ79TrdUKrXb7Y2NDfbtRo4wawn55Vlp5V5EJtjG272NkfuxErTazvOUewOgwLEC2/tfEvha95FYe3hHrzNZNOPZY1t5ayCVyiUK+6MRjAsAwKIRLQFYrF6vd3Fx4WyoVKvVNjc319bWuEcycsfZa2nOLWOAJQjbZjtKS8/BsMfz9J+gK/EZRd9xKUo98+9OFfEUEhwX/3GQKEGW6XR6enoquwqsNFVVDw4OZFexuoiWACyEaZpXV1cXFxeTyURRFFVV19fX2+12rVaTXRqQkB0tKYpiGAarOIGIAmdFwY1LhAL44Q9/+CM/8iPr6+uyC8GKsiyr3+8ztVwi3hkDSNlkMjk/P+92u/b7Y13XW61Wu93mozgKQNd1wzCIloDoyEpm4hKhGG7cuHF8fCy7Cqyoq6urzc1N2VWsNN4ZA0jZ8fGxPVOpUqm02+1Wq8XSIRSGHS2Zpim7EAChwv7RIcEBAGBBiJYApKzdbg8Gg42NjUajIbsWIGXs5A1kHxESAABLRrQEIGXtdrvdbsuuAlgI+56GREsAAACAg9t+A4jNNE17yRuwapi1BABAsamqaq+rjbilg9Os2FtAFPvsMD+iJQDxXF5e/u///m+n05FdCCAB0RIAAAWmqqplWfa62oira1mECyhESwDiqlQqiqJMp1PZhQASEC0BAAAAHuy1BCCeer3+9NNPl8tl2YUAEtjREneIAzLOXriR7lQCey6DfxT/QJ5lI86z7uPul/h7BhDdzL+J/uOWZQX+fXSvg7PbeP6qOu3dT7k79P/yCSzDU4P9VFjB6V6BwF9lgefir22es0PhES0B8DJNczQa1ev1sAbkSlhZzFpCXqx4WuH5aLQI/g9jngIE7QNfAiCBsL+J4r+hYX8f/XFS2ED+BoGvFZTh71BQsECyKxCxQ+fHec4OK4JoCcCbDMPo9XpXV1fD4bBarT711FOyKwIyhzvEIafcX8IrId85K2/9dtr9QSLsM1XgN+QzP06Iv6gXTCUI/Bo8bB5BWElx+3cazAyPEhN8mgUg4PmL4/xVCjvuPjL/QInLC6wh2W+AxFdAIGKzWGeHVUC0BKw6y7J6vV632+33+84/A7quL+ErXyB3arXaM888Y89dAnLE/pXuj4oE3067VzSEfVxJFoj4P4GI6/HXH1iA/9+siOcr6D+KwFdZTSWIAAAgAElEQVSxEgSQgr9xXAHIQrQErK5+v9/tdnu9nrNxTLVabbVa6+vrpRK/HIAAqqqSKyHL3PGKP93wf+QQfIsQ9irBtw7RP9KExUnibzXE/QeeXeC4yfoPFJgrsSoEgK3YX9MW++wQF58egZUzGo263W6323Xu8lYqlZrNZqvVsu/+BgDIqbg7a/hn8UQfYhES1COxf2IjAGLF/hVR7LNDXERLwKqYTqfdbvfq6mo8HttHNE1rNpvNZlOwYzcAYEXMn+NE3GvJFrjx05z1xN2qNm7/YWMl3i4XQLoy/hdwCeVJvAIZv/hYNKIloOBM07TnKA0GA/uIqqpra2vNZnNtbY2JrACwCtQn9412Ah33tkp2G2e/IeclURaspftBIrAed82eQT31ePZdini+gv7FAv8NDSsp7DiAxDwbt3l2T0sx8PV3OE95KZr/CiT+LLCEs0O+EC0BhWUYxsOHD/v9vnOkXq/bWynZd7kCABSV5y2+5z4+EZ9S3pqMhLURvDxWkYJ64g4a93xnVu7fwjzBdRB8tOMjGZCMJy+eeTytgcISGc9kzNTLmFlYrOP+H8WWf3bIEaIloLB0XR+NRoqiVKtVe+Ebm3MDAACgSOKGueKt9yMG04HHZybdEXtOJaaPfjzuFwwzhyBmWk18zgSKbH9/v16vM0cJAIA5Le7DEh/DgIzz3wGAv7aAB9ESkFeWZfV6vX6/v7+/H9ZmbW1tmSUBAAAABSNrrzTBUjWyLWQN0RKQV5ZlnZycWJa1ublZqVRklwOsiul0enFxoSjKzs6O7FoAAMAySIlyyI+QI0RLQF5pmmZvn8R6N2CZDMPodDq6rhMtAQAAAArREpBx/X6/0WiEPStYCgdgQcrlcrvdZlN8AAAAwMY7YyBzDMO4vr6+vr7u9/uWZT3zzDPMSwKyQ9O03d1d2VUAAAAAWUG0BGTFaDQaDAa9Xm8wGDgHVVWdTCbValViYQAAAAAAhCFaAmSaTqf9JwzDcI5Xq9W1tbW1tbVarSaxPABA8di3HIq4O6xzfyJP+7j33l50+7gE/ce6PsmGAIrn7t27Z2dnfBsKibivkVxES8CyGYYxGAzsOGkymTjHVVVdX1+v1WrNZlPXdYkVAgDyTpBreO6inbiTWPX424uTl0WHMuKhI16fxEN4EEKhAG7durW1tfWd73xHdiFYUd1u95lnnpFdxUojWgKWwbIsJ04ajUbOcVVVq9Vqo9FoNBq1Wi2V97IAAPgJ5h85j52nnIP+VwX248z08U/5EbQXPBWrzsBxw8zsPzAFi9i5oKuwUgWXAsgRTdM0Tdva2pJdCFYU91eRjj8AYOGGw+Hrr7/uPlKpVOw4qV6vs0U3AGDR3PNi3BmNZ76M86P938DZNM5TnoOqqjrt3S8UtA+MUQLbC+oMGzfMzP7n/5on1iUSXIoU/d3f/d03vvGNhQ6BtHz961/nZhEAcodoCVi4SqWiqqqu606cRKwOAFgET2xkP/DEFp4FXylOmJU14ybdcf0L4lLsX9Ylev/73//bv/3bUoZGLM8999x0OpVdBQDExudbIAWWZY3H47CdCzVNu3XrFvsaAgAWzT31JmKKwQqsVbCzs/PTP/3TsqvAbExmB5BT/PIC5tXr9X7wgx+cnp4K2pArAQVjmqZ73zQgRzK4r1+mSvIXYy9kkzU6sCKW+RfNP7Tgqfmr4u81VgGzloB52bER3/oCq8MwjB/+8IeKorzjHe/g/SJywb3Iy73pT9jiryjbeLu3o3b2onY6dG8q5G/vL8kpILC9p07/Htj+ccPM7N+zKVICcS9R2KUA8i7W36O0bs6YwKJvGcn9IrEKiJaAGabT6WAwKJVK9Xo9sEG5XH7mmWd0XV9yYQBk0XXdfvNnGAZbpyGbwrbfFj8WH4zY3r+1U+Ku5hk31qDiruJ+0ktQKh8msSI8Ge7M//MDM2XFNw8obBv+6P0v6JaR3C8Sq4M3xICXvXHSYDAYDoeDwcDeTLHZbIZFS4qikCsBq0bX9el0Op1OiZYAANnxO7/zO1L2Yeh0OpPJRNwm7q0Yw24N6T8e1n7mEIu+ZWQG7xcJLAhviAFFURTTNO0syWaapvvZarVaq9Vk1QYgg0ql0nQ6NQxDdiEAACjKky3Ad3Z2pHzn4X7zHPFWlTP7DFuMFrZCNuz4PBZ3y0giJBQM0RJW12QycaYmjcdj91OaptVqtXq9XqvVarUad+sA4GHPVeQW0UAGhc0y4IMcis1+v/q5z31Oyheir7766ksvvWQ/TnCrykCCWUiBs5kExwEsGtESVohlWaPRyImTPNMNyuWyEydxQzcAYvZ3wkRLQAbxYRLIhVjRj2cmVOALF5ElBd4yUlnK7xmiMeQL0RJWyGuvveaOk1RVrVardpZUr9fZLwlAdHa0xII4AAAiEixYi3vrxijbe0fJZRZ9y0juF4nVQbSEFVKv1weDgXulG3cNB5AMC+IAABCLfjPEWLdujNtJrAoF4yYYhftFYnUQLaEgDMPodDqj0ejo6Ciszd7eHlOTAKSCBXEAAACAjWgJBaGqaqfTURRFcC9wciUAaSFaAgAAAGxES8iHyWQyGo1UVV1bWwtsoGna5uZmuVzmbm4AlsDZayns1shAZs2/B+3SdrFdHMHOKWmdHVvwAlnALSOB5SBaQkbZWdJwOByNRqPRyN4rt16vh0VLiqLs7OwssUAAK03XdU3TTNOcTCaVSkV2OYCXINeYPw9NJVGNm7ykm9QIukorL4516ys+5QILwl8uYDmIlpAV0+nUDpLs//rvu2TfzU1KbQDgVyqVxuPxdDolWkIuhN11KPCGSs7MnbSmOHmGcG6K5C9JUE/09lHqCbsO/k7iXgRBnf5LKjg1AADygmgJ0oizJFVVK5VKtVqt1WrVarVarbLkBECmlMvl8Xg8mUxkFwLM5p4X4/731DNfxnMDbPd9vhPfeDswBrL7DwxxBPVEby/gv3O5En59kgkcIuyShp0aAAA5QrSEZbu4uLi+vh4Oh6Zpuo+TJQHIF3u7JaIlZIonNrIf+O+cHdjMb/68wzNWlNwn7r/+qb9b8NewnIV4AADkF9ESlq3b7Q6HQ4UsCUDOlctlhZvEIWPcU28iphiLDjtizSoKm+UUsX8AACAF0RLSZBjGxcXFdDrd398Pa7OxsdFqtciSAOSdHS0xawm5s8x/fCMmXGGL3ebsNhn/uMu8Ix6L4wBkxyJ++4m/Qghcmxx34TOkIFpCmizLOj8/V1V1b28v7B1hq9VaclUAsAj2gjhmLSEX3Iu83Jv+iBd/ibfNjviRI+zjgackcZ1R2vuHENfjrl8wbgKBQzjbdTtjiU8NKIDlpwCLHnHVco207pg5cxTPkQT76EE6oiVEYlnWaDQaj8ej0ahWqzWbzcBmpVKp2WzWarUllwcAy+csiFvOGy8gFv+7cE+sI2gpfirW+3tx45n9+3eJmrMeQfu448YdQnzN+dSEFRG2l7/4VpVhj6PfbzHKrTCVWX8Tw/r3nJTnsb/OsHr8Zy3mqSTsx4inLL7NQsRTmHlJ5w+JuPVBZhEtIdhkMhmNRk6c5F7xsb6+HhYtKYpycHCwlAIBQDJd1+03N9Pp1I6ZgMLwTKsBgPmFZUniW0PaBwVTC2feb1Hcf6yd6QIbu4/7H/vrTGtKjqce949xTznsj8bzbOL+xZi2WQxES1AURTEMw0mR7P/6/2Jrmlar1SqVSqPRkFIkAGRNo9FgvhIKiff3ABLzxEb2gzknA/olCy/m7CeBwP7TqicsThLPp447nzQsTUvWv6Ax32fkGtHSKrIsazgcjp8YjUaGYXjaqE9u31atVu0Huq5LqRYAMuvw8FB2CYB8YR8wZH1CyFo9wKpxz3/JyN+7JeRHzk5qUcZadD3+WUX56h95RLS0iizLun//vudguVx2UqRKpVKpVKTUBgAA8iUjHx0dWasHQKBYwVOC8CKnW3pH32vJFriXk7/DuDUs9I8m2UDIOKKlAhqNRtfX16VSKexebJqm2bOQKpVKuVyu1WrVapWwGQAAAMCCeFZRha3e8ux5794Z2pkZpMS536J/9ZZ7o+tYG/0INqgW7PQUsZ4UhW1NFXbKYX8EYZc6bv9R6oxSD7KMaKmARqPR48ePG41GWLSkKMpTTz21zJIAAAAArJQou/aIjytvjRv8jSMOEf3gTHFfFXfoBFXNHCLw0iXuJFn/TgNPABf3fwkmOmUW0VJuTKfTscvOzk6tVgtsWa1WW60Wm20DAAAAwKIFrv/gVptYKURLWWRZ1mQycQdJk8nENE13m/F4LIiW9vf3l1IpAADIk7Q+5OT9w5Kg/rgbnSQYAkDBpDgrqvDmvCxc1cwiWpLPMAwnP3Ie+Jupqloul+3dkarVar1eX36pAAAgF8JyjbTelC8/eUk3qRGvCkllA8pYm+DyYQnICG4xCSRDtCTN9fX148ePx+Nx4O8pTdOcFMlJlNhpGwAAJBO4r6p7f9zApxTf1hixtrxVfJ/TZu6eK95KNmL7KPV4GgvOK+48pliXOsFGwgAWh7+DQDJES4tiWdZoNKpUKpqmCRrYj8tPVJ4olfijAYDcSGuaA7A47kzHfdC5s4/imj4TmCUJ+gnjmY8TFlcJ2rvv+hS9vUBg/YLzTSDWpQ47NQAAcoT8YlFef/310Wh0eHi4trYW2KBerx8eHtpx0pJrAwCk5fz8/PHjx1tbW9vb27JrAd4SZ8S6/XPiZ2f2HGtWUYKUNvVUd6H3BSdCAgAUEtFSPKZp2nsh2ftq7+zshLUsl8uGYQjeQOi6HpY6AQDywv4IGrhHHrB87qk3GUkxYs0qCpvlFLF/AAAgBdFSKNM07X217SDJfmAYhtNA0zRBtHTjxo2llAkAkKnZbK6vr5fLZdmFAAuUOKiK+MKwxW6p1xOFf9y07hkXcXTCMgBA7hAtKYqiGIbh5EfT6dR+4E6R3HRdtzfVrlQqbK4BACuOrfGQF847FndQ4uwh7bylsR8LFrIF9hNlXE9j9xDOcc9B9+ZEM9v7h4h+HQTjJhDrUoedGgDYFpRui2eJBm4/F3dvO6yUVX9D/ODBg+vr67BndV137s7mPAjblhsAACAj/O/4Az8DeLKeme0FxxM0TqWkuJ9topxXxEsRawhB/wmGAHJh+elDIfOOpc1mSOVWCVhZRY6WDMPo9/uWZbVaLUEb+0GpVLLzo1KpZEdI1WqVGUkAAAAAkIqw20QGTo3xz/vzPPZM53HmA3r6mdm/4CXRJ0J6bg3pv1NklHHFt9EMLCnBqSlphETc3RIeRY6WxuPxw4cPy+WyIFra3d3VNI17tAEAAADA4oRlSWFTY/wrVd2PnWae9tGn3sy/+tU/qPvHuOOGXR/Ps55mKZ4aK3MxjzxFS/YuSJPJxHkwmUy2t7fDkqNyuVyv12u1mqBP8bMAAAAQC5vlLevDSdbqAVaNJzayH8y5ztQvWWgSvZ/o/YfFSeKFbHHXC4ettE08hKAx05GQQBajJdM03eGRI/D/b8H9nkul0s2bNxdZKQAAwKrL2ieQrNUDrJqwOTUSSSlDvE92XoYAIpIfLU0mk36/756LFHZrNsW1I5KDtWwAAAAAkC+xgqcEocmcwVas+7L5N34K7C1uAWnNzEp9LMBvSdGSYKreaDR69OiR56CmaWWfUqlEEAsAAAAAueP5SBi2cMxzO0X3jtR2AuJs1+157OlKsDDNvcf24jYYCtsfKmzcsOsQ/XxnDhGl1CglAX4Lj5YePHhwfX19eHi4trYW2KBcLq+trdnTkSqViq7r5XJZ1/VFFwYAQCosy+p0OqPR6ODggK9AAACwRdwwSHBceWvM4W8cfU+iWIPOfDbBEIH1J+4k8RBOA89Mpbh/NEx0gkeSaMmyLPf6Ncuydnd3xS+ZTqdhT1Wr1cPDwwRlAACQBaqqdjod0zQnkwnLtAEAALBqRNGSHSE5KVLYXkiapgmipd3d3f39fWYhAQAKrFwuj0YjoiVg0SR+Tx5r4xUAyLg5f5vxyxAeb0ZL4/HYHR7ZDwTbaauq6t4CSTBAuVxOuWQAADKmUqmMRqPxeBy2+htYsuVHMGmNKO5H4ocZ8U2+3VgnAgBYNW+mQvfv3w8MkuzttO2NkJy7s5VKJWYhAQDgsL9HGY/HsgsBQnm2enXvYhu48W3Y1q3iXWYjthcXKe7HM6jndGbWr8ScfyTYB3ehlwLIl7Ozs+eee+4jH/mI7EKwun75l39Zdgkr7c1oqVqtGobhDo+IkAAAiMheBzeZTGQXAgQTZC7OHYXC2rt/DDvu3xFW3E+YsH6Ut97RyV+8J2aKO26YsOsmOLW0LgWQL9Vq9R//8R9/93d/V3YhWFHD4fDTn/70iy++KLuQ1fVmtHR0dCS3DgAA8suOlpi1BOnc8UfYdJuIN1QKXPwVfVGYuJ8Uhd0RSTBuskzHfxPurF0KQKJms9loND7+8Y/LLgQr6urq6tOf/rTsKlZakjvEAQAAN3tBnGEYhmEw4RcSuafYLGKLVv/Um2T9LMGix83RpQAAYNGIlgAAmJemaaVSyb4JBtESsi+V1ViCMGU5W3rP060SP+gRn6/gKRIlrIher/fFL35RdhVYUaPRSHYJq45oCQCAFFQqlel0Oh6Pa7Wa7FoAL/9iLvtB2J7T/tVe7o2E3G08ewxF7CdiqYHTgjxbjwfuA5Vg3CjFCM53EZcCyJF2u/0rv/Irr732muxCsLp+4zd+Q3YJK41oCQCAFHCTOGRKxA2VBOlG2FPu4zN3cRIPEWto8Rn5d1xKcGozGwvOd0GXAsiLvb29P/7jP5ZdBQBpNNkFAABQBNwkDgAAAKuJaAkAgBRwkzgAAACsJhbEAQCQAntBHLOWgJnCNr1mvRgAADlFtAQAQArK5bK9ie9kMrFjJgCBiJAAACiYlY6WTNMcDofOvTwEAhvUarXt7e2wzu/fv28YxsHBQbVaDWzQ6/XOzs4SF99qtba2tgKfsizr7t27iqLcunUr7B7Y19fX19fXalKapgnuswsAq6lcLo/H4/F4TLQEAACA1ZGVaMk0TcuyzCfsx+4j9o+elKdUKu3t7YX1eXx83O/3b9y4sb6+HthgNBodHx8nrlmcrUwmk+l0KvhezjTNedZNGIYhHl1c4XA4vLy8TDz67u5uu90OG/qNN97Qdf3o6Cjs5aPRyDAM7a0SFwMAGVGpVMbjMWviAAAAsFIWGy0NBoPhcFir1er1emADwzDu3Lljmmay/u09U8UE4Y6maZVKxT8lR1EU8Zwdu4H4S+kbN25YliWocG1t7ebNmzPrD6Sqath0JPvZW7du2ScY1qZer29tbSWYq2UThFaWZY1GI0F5iqJ0Op1ut+s5aAdMuq5rs1QqFaIoABnETt4AAABYQSUlZMZQ9Advf/vbw3rvdruXl5dbW1th0ZKqqu5cyV5mZccHgQ88xPnFwcGBZVmCNtVq9fbt27MvUiK1Wk3cQNf1sMuyhNEbjUaj0VjE0KVS6fDwcGabSqXi/C9nH7QfT6fTmUPcvHkz7NINh8Orq6tqtbqxsRG3cgCYk/2VA9ESAAAAVkpJUZQ7d+6IV1eJCeaw1Go10zTDNhtSFEXTtKefftrJjxLXEEgcPGFBNE1bW1sTt9nZ2dnZ2XF+NIUMw/AcEfyvMplMLi8vG42GIFp6+PChnTnqul4qlfQnSqUSk6EAzMOetcSCOCAZ+/3kcjb5VlWV3cQBAEhLSVEUTdPsjW/EM4ac5Uieg4K1Ua1Wq9VqiStgr1OkuNdSpVLZ3t4ulUQrPQeDQdjcKHsqnCdv8jxIpU4AhWRHS9PpVByCA0uw/Ohk/hHFK+7TFb1UQigAAGYqKYry1FNP8Q4YxVCtVgWz5Gx7e3vT6XQ6nRqGYRiG88Be4Gk/JXj5O97xjrA3vnyYBFacpmlHR0fVapVfBcgg5x8vO8Gx4xJnopD7WU975a1BTOBxZyfKiO2jlxpYfOCziTtXfNchynkBAADHm7OWZJcBLE/Yej07V/LkTc4Dm3ia3unp6dXV1c7Ozubm5sLKB5BpC9rGLkX9fv/d73637CrSd3Z2pihKIU9tpouLi5/7uZ8Tt3FPvfFkPfb+lZ7QxHPEHUUFHnfHVVH6iV6qv/+wsSJyZ2rug+7rkNZYAACsiMXeIQ7IEfuuf+IVmuIJTfaeZYKsdjqdnp6elkoleyB7O/OlTf4HgKeeeurBgwdf/vKXZReSvj/6oz/68z//80Ke2kx/+7d/e+fOHfux+9+UsLk2/qAkMDoJ/OcpwZq1uO0T5DhpRT9ESAAAJEO0BMQg3sXp8PDQMAzBe+jJZNLr9TwHdV23YyYnb7IfEDkBSF21Wq1UKs8++6zsQtK3v7+vKEohT22mb37zm/fu3bMf++f7JBaWN4UtdovVT7J67NGZRgQAQNYQLQFpEu/zXS6Xd3d3J5PJdDqdTCaTycS+BV7gLRrtyMkdNlUqFXG2BQBAFKmkM4JcaZ7+E7x2abeWI9UCACAQH1OB5SmVSu12233ENE07Y3LCJvuBEzkNh0OncavVsr+WBwAgFs9CtpnbVPsXvrn3HnK38WxLFLGfQII9xd29zRnuOJ27AynnOjiji88LAAC4ES0BMmmaFnhXO8Mw/HmTfV/zQJZlvf7669VqdW9vj5V0AICIGyoJspKwp9zHZ+7iJB4irGXcBCdW+5lFRrx0AADAQbQEZJGu6+K1dR6TyWQ0Gk0mE6Y1AQAKiS9OAADILKIloAhKpdLBwUHgnk2ON954YzQaVSqVcrlcq9UqlQr3pwMA5AVThwAAyCyiJaAINE1rNpviNpMnnCOqqtoBU/WJWFOlAAQyDKPT6Uyn04ODA9m1AFkU9q0G4REAADlFtASsips3b45Go9FoNB6Px+PxcDi0LMs+0u127Ta6rjsxE9OagMQ6nY6iKHt7e5qmya4FyBwiJAAACoZoCVgVmqbV6/V6ve4cmUwm4/F49MRkMjEMo9/v9/t9p42TNHnubQcgjK7rrVarVqvJLgQAAABYBqIlYHWVy+Vyuby2tmb/aJqmkzTZD0zTtH8slUpES0B0bKgPAACA1UG0BOBNmqbVajX3VAt7WtN4PDZNU/DC6+vrcrlcqVQWXyMAAAAAIFuIlgCE8kxrCvPo0aPpdHrz5k33ajsAAAAAwCpge1EAc7Esq1wuq6parVZl1wIAiEdV1XzdrkFitbm7VgAALA2zlgDMRVXVmzdvitucn58Ph8N6vW4vuOOtOQAsmqqqUW7EZllW1n4niyuXeHe56Ncq4sUHimQ8Hr/22muyqwCy5emnn16db9+JlgAs3PX19XA4vL6+VhTFnt9k36uuVqvpui67OgBYCU4sYkcknuzDftZ90B2jOMedZoL2nmcD+xEX6e4qsH9/Mc5YnmcDx/UXP7OkwPaCSyQ+heijA3lx586dH/uxHzs4OJBdCJAVJycn//Ef//He975XdiFLQrQEYOH29vYGTxiGMRwOh8Nhp9NRFKVSqTQajUajUa/XNY0lugCwEGGZi+fZwIzG/aOd44jbe3KlwH7CBMZezlOKL51xivHETHHHDSO4buJLFJhDpVISkFn7+/v379+XXQWQFe985ztll7BUREsAFq5arVar1Xa7rSjKZDKxM6bhcDh+4uLiQlGUWq1Wr9ftmClrCzQAIBfcvzzDptv4E43AI4Lfw1HiocCSFsEpJnBqkvglcQfyB1uxeuCfNgBAUREtAVgq+65zrVZLURTDMAaDQb/f7/f7k8nEmc2kqmqtVrNnM1WrVd6LI6dGo9FoNLL/bweWwz3FZp5JMf4pNvOXtGSLHjfBJWKaEgCgqIiWAEij6/r6+vr6+rqiKNPp1M6YBoPBdDq1ZzY9fvy4Xq/P3CYcyCDDMO7du6coyvr6Oos9kTWxgieJc3MWtGos1l5LnlcleIpECQBQeERLADKhVCq1Wi17fsd4PLZnMw0Gg1qtJrs0IAld10ul0nQ6HY1G9XpddjlYdf7FXPYDZ89pp4H92N3ev6VRlPaB4yoRAh3Py53jzkHPVuKB+z0lGDdKMe59pqI/lW5JALLJf2OBme0D96STInoNiU9T8BjFQLQEIHMqlUqlUtnY2FAUxTTNsGb+LV2BTKlWq0RLkCXKhkqeg4ItmQL3M5q5hZP4uMDMUqNUKBg3VklxL5FgCD5HAUXlibajvCSPvxBSPM08nj7EmKIPINMEK4mGw+EPfvADe80RkEHValVRlNFoJLsQYBlUFz4zAACwUpi1BCCvJpOJoiiVSkV2IUAwoiWsFOIkADkSdg9NwfGZK4uVoJVinpWznhVhnteKy/DU4Jm/n3j/OP8LBauSA09TfHHcdQrW00U55QSniaUhWgKQV61Wq9lsTqdT2YUAweydwsbjcYKblAMFFvbXgQ8MAJYjygZAgdmHP/VQhBsPeTr0NwgLWcLK8HeYbPciQWFho4v3VxLUGffl4q6YGJtZLIgDkGOqqpbL5bBnp9PpvXv3Op2OPb8JWLJSqVQqlSzLGg6HsmsBMsQKIbsuACvBk01YvnsCeI67j8w50DzlBXaS7DenoLCZFyHMPL/DY50yMotZSwAKq9frjUaj0Wh0dnZWrVbX19fX1tbsNUrActRqtV6vNxwO2ckbAIBsIrwA5ke0BKCwms2mqqq9Xm8wGNgZ0+PHj8vl8vr6+vr6ur1YCVgoJ1qSXQgAAMgHuYvoWcKPZIiWABSWrusbGxsbGxuGYVxfX/d6vX6/P5lMOp1Op9Mpl8vNZrPVagmW1AFzshNMoiUAABCR3FlUzOFCMkRLAIpP1/VWq9VqtUzTdGdM5+fn5+fntVqt2Ww2m01d12VXiqKp1Wqqqk6n0+l0Wirxby4yx39bIomWWQwbwQJwZPwXgtzyMn5xkB28zQWwQjRNs1MkO2Pqdrv9fn84HA6Hw7Ozs3q93mq11tbWNI1bHCAdqqpWKpXRaDQYDJrNpuxysHzbHvEAACAASURBVEIifhjI1O0Ll1lMsvsoASgAz63Kwm70Nv/ffX+H85SXIkFhSxg9Sj381s2jnEVLn//852ceyQu78rD6PceTnebnP//5BC8UFwYUg5MxGYbR7Xa73e5wOOz3+/1+X1XV9fX1jY0N9l1GKmq12mg0Gg6HREuQy/nwEHava8V3nyDnsf9e14L2nmcT3OjH3VVY54FVJetccF7OfaNi1Q8g4wJ/kwiOpzVQWLrk+c2TehmxClvo6GG/rpdwyli03ERL4gimSDlI4LkkOM0iXRNgcXRdb7fb7XZ7MplcXV11u93JZNLtdhVFIVpCKur1+uXlZXa2W+r1en/9138tu4r0/c///I+iKIU8tZm++c1vTqdTcRvxN+fOs/4Hngb2u39xe0+uJLitdZRS/bMJAqOx6PyBl+C85hwLQGaF/b2OftyTSYW1nNlhYIMoByMOFGaemsUvV0LOLuJLxAf5hZxZ+YiWnJQkbNZSsuk5GRR2pgU7TSCDyuXy9vb29vb2cDi8urpiggnSYu/kPRqNsrDyaHt7u1arfeUrX5FbxiJ897vfVRSlkKc202uvvfaud73Lfuz+fyzsG+Ao79TF/7uK39l7Xhv3f/sEHxvS+qTBJxYAKUqQrQP5lYNoSZArKcVKWwRTk4p0mkDG1Wo1OwsAUlEul3VdNwxjNBpJ/1/rPe95T6fTefHFF+WWsQif/exnv/CFL3z1q1+VXYgEL7zwwssvv2w/TmuvCv8nosRdpZj72FXx8QxALvgXmi1n3MRfDADzyEG0ZBMEK593CXtJlElAUbY9mtnPzMaJ+U8zyvn646pkVUV5lWeUBIv4gFzo9XqmaTabTekzUJAXtVrt+vp6OBxKj5YAW6x0Ju7vujl/NyZIjpZ2azlSLQCxSPmNwa8pSJH1uyBFjCf8IZE/CvF3MjMuSdaPoDd/M8+zM9uE5UozX7vQVwVeqJndAjl1fn5+cnJyeXkpuxDkhp0oDQYD2YVgdTl7Cbl3FFLeuk21+7/u9u7NiaK3DxxXnDqJu1JcE5fmuRROGe56ws5LXA8AALDlZtZSArFmJPnnHyXrx9Ob52Bg/wnM7D9w0lCyqvxhVti1inKhgAJoNpv2rCXZhSA37GgpOzt5YxUk2CFVsCXTzA1Zw/oXHBe0nGcz2mSNE2wuCwAAHFmftZRAWIASdtD/eJ5+CiZwkpQ/YxK8ECiezc3Np59+Wtd12YUgN+xoaTqdzryNF5BfgbOiUu8/9W4BAMD88jpraWackVa0kayfRWdPyfpPXFVg7rY6+RoQl2EYBE9w0zTt4OCgVquVSnn9ZxeYadFTe5g6BGSZZVmmaV5cXMguBMgK0zRN05RdxfLwHndRFh21pJJ5AUidaZp37typ1WrtdnttbU12OcgKVlACjrDJR4RHQH7dvXv34cOHm5ubsgsBMuT73//+s88+K7uKJclrtDRzyozcWUuBnSwu1knW/6KrAlbTcDg0TbPf7/f7/XK53G63W62WphVw9TEAJEOEBBTP7du3Dw8P7969K7sQICt+9Ed/9F3vepfsKpYn69HS511k1xJDgtQmypl69s8mSwIyqNFovO1tb7u4uLi8vJxMJqenp48fP2632+12m1VyABbhlVde+Yd/+AcmC0Dg137t12SXgIKzZyOy7htwW6ktAnPzlz9uuhS2GVCCOCaVfuYnMRiKsrNS7uI/YHFKpdLOzs7W1la32+10OpPJ5Pz8/OLiotVqbW5u8q4LQLp+6qd+6vr6+ktf+pLsQpBRf/Inf/Lo0SPZVQAAiiwHn3Dck3SiLHwLbJ94GtH8/YTVGTZi4BAzX54s1onSbdhFUFxXI8qfC7BqNE3b2NjY2Njo9Xrn5+ej0cieymQHTOVyWXaBAAqiUqk0Go2bN2/KLgQZ1W63iZYAAAuVg2hJibYEzP1UlPZpjSt4YbIESjCiO9OJ2L+7t2RVRU+7iJOAQOvr6+vr6/1+//z8fDAYXF5eXl1dNZvNzc3NSqUiuzoAAAAAmEs+oiUlfLpQWJzhyVASpx4p9qNEC3eSTQLy9x8lRYpYlf/ZwB89F4qkCXBrNBqNRmMwGJyfn/f7/aurq6urq/X19a2trWq1Krs6APn2T//0Tx/84AdlV4GMun///v/7f/9PdhXA/1FVNWw7f3tvmgSb/Ud5oWDcVNoDq4y/LVgUwfQrYMUNh8Pz8/Pr62v7x/X19Z2dHZbIYQleeOGFl19++cUXX5RdSPo++9nPfuELX1jNdzV379797//+b9lVINOeeuqpn/iJn5BdBWZrtVrf+973bty4keC10+m0XC4PBoNarZZ6YTO9+uqrzz333PHxsftgsmgmcaAjMQkihILfO9/5zpdeeum9732v7EKWJDezlpBZguVy5EpAoFqtdnh4OBqNOp1Ot9vt9Xq9Xq/ZbO7u7nIXuWKzJ6ytra01m03ZtaA4bt++ffv2bdlVAMBszg2zPEFM2HEl/jymwK6ijOseSNCJp6VzXHAKwCogWkI6SJGAuKrV6sHBwfb29tnZWa/XGwwGmqbJLgqLNRgMut2uoihESwCAQL/1W7/VaDQSvNA0TUVRPvGJT0j5mury8nI8Hs9s5glubO4pP3PerN3TlfM44rji9nao5LzKeWAfJ1HCiiNawrwibvINIFC5XL5x48ZkMplMJnO+nUL2ra+vO/8FAMDjC1/4QpSAJpAdLf34j/94qSThI97p6em//uu/2o/d72fizuVx5gS5j0QvI3G+4x839SGAYiNaQjrIkoB5lMtl9lpaBdVqlV3bAQBhPvGJTyR+7XQ6/fSnP/2bv/mbsvZa+rM/+zP7ceC8IQDFxuILAAAAAIB8/qlD9hq0xC9f9AsX2hWQI0RLAJB1l5eXo9FIdhUAAABzcXIid2Dk7GHk3sYoQc+BXcUaV9zevV23f+vusK6AFcGCOADItMlkcnp6alnWU089xVoqAACQF/6QJSx2cR/3tIm+SZOgfZRxZx4XFBm9TqCoiJYAINM0TWu1WpPJhFwJAAAgRe7pUWRDwDyIlgAg03Rd39vbk10FAABA0RAnAWlhryUAAAAAAAAkRLQEAAAAAACAhIiWACDfTk9P+/2+7CoQz3A4PDs7Gw6HsgsBAAAA5sVeSwCQY4PB4OLi4uLiYn19fXd3t1Tit3o+XFxcdLtdRVFqtZrsWgAAAIC5MGsJAHKsVqttbm6qqtrr9e7evXt5eSm7IkTSaDQURRkMBrILAQAAAOZFtAQAOaaq6s7Ozq1bt2q1mmmajx49un///ng8ll0XZrCjpeFwaJqm7FoAAACAuRAtAUDuVavVW7du7e7uapo2GAzu3bt3fn7O/XSzrFQqlctlhYlLAAAoiqIoqqqqqipraMFT81cl67yAZSJaAoCCaLfbTz31VKPRsCzr8ePH9+7dY/pSltkTl9iCHQBQVLEiFYlfiQmGTqWq6J0QQiG/iJYAoDjK5fLR0dHBwYGu6+Px+N69e51OR3ZRCEa0BABYNeoTSrQYRXUJO+5+Kux4lHqiHFdizmMSFO/vyn2QjAm5w72EAKBoms1mo9E4OTm5vr4+Ozu7vr4+ODjg5nFZU6/XFUUZj8fT6ZQ/HQBAKt7znvdISSUmk8lwOBS3UVXVmb8TMfdxz/dxfvQfD2s/cwinw3nqjNu/ZVl2eOQ5Hfs4Gxogp3gvCwAFpOv64eHh5eXl2dnZYDC4e/fu3t5es9mUXRf+j67r1Wp1NBoNBgP+aAAAc9J1/dvf/ras0e/evfuxj33MfuyfiaP4FoVFCVDsqGXmcaersOPz8NeQVvRDhISCIVoCgMLa2NhoNBoPHz4cDocPHz68vr7e29vTNJZCZ0Wj0RiNRtfX10RLAIA5qar6kz/5k7JGr9VqzhsM95SfeQIUwSykwNlMguMAFo0PGABQZOVy+ebNm1tbW6qqdrvdu3fvsrlPdqytrSmKcn19zXtfAMCqibXWLHAm1DwdJhjXObKcJYdst4R8IVoCgIJTVXV7e/vmzZvlcnk6nR4fH5+cnMguCoqiKPV6Xdd10zQHg4HsWgAAWCxnjyH3TkO2wJ2t3e09mxaJ+/EfDxN33LgC+3eOeP4bODSQF0RLALASarXa7du37YVXbBqdHc7EJdmFAACQMn84YrmEHXc/5T7ieSBo7O9fUGH0cd1PRb8C/v79nYcNDeQI0RIArApVVQ8ODg4PD7e3t2XXgjcRLQEAACDviJYAYLXYWQYyotFoqKo6mUxGo5HsWgAAAIAkiJYAAJBG07RGo6EwcQkAgAVQQ8iuCygaoiUAAGRaX19XFKXX68kuBACAorFCyK4LKBqiJQDAmyaTiewSVpG9RHE0Gk2nU9m1AAAAALERLQEAFEVRBoPB3bt3z87OZBeycnRdr9VqCmviAAAAkE9ESwAARVGU8XhsWRYTl6RgTRwAAADyqyS7AABAJmxsbOi6zv3jpFhbW+v1enbABAAAAOQL0RIA4E1EG7JUKpVbt27JrgIAgDxxbvTm2ZZbVdVYG3XHbZ8i+xQijh52vsriT1nKJYp1cVLsNuK4Cyovv1gQBwAAAABImROFLKjzsNu9xf20H5jUzFXcHEOHEZxvrH7C2otPWUqAsqBBZ3YbcVxCJQ9mLQEAAAAAFs4978Y9Ecada3gO2i39x5WgWTyCeUzucZ0Gge3tg4Kn3MfdRTpHIk54EdQZ8XzFB/2Xbp5Tjl5q4LhKStN84o4b9kcvOLXo4ybop8CIlgAAAAAAixWWJXmyGOdHOwvwRzaCBMcTGIWN6/wY2N4Te4nrdBfpj5nSug5h5ys+hcC0K9Yph7WP+0eWlrjjCv7oPU+J6wwbN24/xcaCOACLtbQZxWmN5f9qyP/sMk/KbzqdLn/Ehw8frvI/lgAAICL1Cc9jt7CFXX7pvv2Yf8pM4Bl5gpvE9YT1n4ysd25h40b/Q0933MBn06qEt8cOZi0ByIflfA/g/1Yn0Mzvoxbk6urqD//wD1ut1qc+9alljvv6669Pp9PpdHp4eKhpfCcBAABCFXgSx6JPp2CXCyuFaAkAcuDq6uoP/uAPvvjFLyqKcv/+/SWPfnBw8ODBg8FgcP/+/aOjI13Xl1wAAAAoGCnBU4LZQAutU+5E+DALOuVU9lqac3T3j6lUUrz8NDGiJWAlhK399m8751krLmjpbizYCjFibeLhnDnV0TfeE3Qbawm954XOs0ubuOSESpZlTSaTz3zmM+12e9GDetTr9Zs3bx4fH49Go9dff/3o6KhcLi+5BgAAkGvOO0znR/Fx99s//2Ml5H2s+4F7I57AsQLb+18S+Fr3kVi7C/nrUV3bNnla+otUQt4zu08h7NLFPeWw9nH/yMQXJFAq4wb+0bs/DsxzvuJ+VhDRElB8/n9LPMfDHgf+MxmWvwjaRKlN3JUnx5k51szTiVJb4DnGeuH8Xnnlleeff34wGDin8xd/8Rd/+Zd/aT/udDq9Xm/JJaEA/uqv/kp2CQCA4vO/QxPswiM+GPZ4nv4TdCU+oyibKgheFX3QWHV6Gsx/ysnGFQ+9uHEFZcx5vtH/uFcE0RKwQvxfhoQ1i9VnglfN2dWcY0W8Dim+MLH3ve99f//3f/+Zz3zmu9/97mAwqNVqn/zkJ3/hF37Bfvb+/fsvv/yy4OWXl5eTySTFekzTvL6+NgxDVdW1tbVSiX9EUmaaZrfbtSxrfX19EZf3O9/5zoMHD55//vnUe86Cer0uuwQAQBYFTnXBKuCPfmlYGQgUn2C+j7uZYPJRYEslaAbTzDaC2jzHBYXNHCviZChxMTNfuJwFcbZ//ud//sxnPvOtb33r6Ojo7t27Enc7MgzjwYMHw+FQ07Sjo6NarSarkqI6OTlRFGVra2sRqw5feOGFl19++cUXX0y9ZwDAKnv11Vefe+654+Nj2YUAWfHOd77zpZdeeu973yu7kCXhRj/ASrNc5mzprFybP22Z2VWKY+XFhz/84f/8z//82te+dvv27b/5m7+RWImu60dHR/V63TTN4+Pj4XAosZhC2t/f39/fZzcrAADySw0huy5gUYiWgBUi+Pcs+j91M1sm/lfT/8IFjZXff9c//OEPv/zyy88884zcMjRNOzw8dNKl0Wgktx4AAIBMsULIrgtYFKIloPgs170nAo/PXNgVpWXYKBFrc78wrCvPLR6iFBOl21hFxnrhgvzsz/6s7BLeTJdqtRrpEgAAALDiiJaAlRD2PYn/KxTBY38n/h+tJ3foDGsTpYbArvx1iscSdxtWSdhWf/6vm5a50VI2OXstGYZBugQAAACsLKIloPgyMtdGOq5D6kiXAAAAABAtAcUXfeHb4mRhI8Poy/pmdsWUJYcnXZpOp7IrAgAAK03Wt4l8i4lVRrQErATpewdmZCPDKENHKYxcyc1Ol6rVqmEYr7/+OukSAABQ5EUtst6nRR+XEArFQ7QEAJiXnS5VKpXpdHp8fGyapuyKAABAhngmrYf96M5cnB/DnhIcDxtd0H/gS5Kdnbj/sJMCco1oCQCQAl3Xj46OSqVSvV7XNP5xSYFpmp1O5+HDh7ILAQBgXv7bszj/tfcZcKiuOwJ7nrWPe9p7RvFPHYrY/zwpT+C4Yf075y53SQGQrpLsAgAABVEqlW7dulUq8S9LOizLevz4sWVZW1tblUpFdjkAAETin6GjPElSnN0qPdtWCmKdwMhGDbmlbwKC/Tfn6Tb1foCM44tlAEBqyJVSpOt6o9FQFKXb7cquBQCAqNzzcSLOzYm7HWfgLCQAEhEtAQCQUc1mUyFaAgAUhfXkdr3zzOVZTpa0tI2QiMZQDHy9DABARq2vr2uaNplMBoNBvV6XXQ4AAOnzzzxyFs0pb11S5zQIWxDn3hdcce1qFNje6d9pkDjzChxX0L9/6yUg74iWAADIKFVV19fXr66uut0u0RIAIF8CQ5M5DwqOx32J+2DYJtwRLbp/IPtYEAcAQHbZa+J6vR7vQQEAAJBNREsAgMUajUbHx8emacouJJcajUapVDIM4/r6WnYtAAAAQACiJQDAYh0fH/f7/bOzM9mF5JU9ceny8lJ2IQAAAEAAoiUAwGIdHR2tra3t7OzILiSvNjY2FEXp9/uTyUR2LQAAAIAX0RIAYLGq1erh4aGm8S9OQuVyeW1tTVGUi4sL2bUAAAAAXrzRBwAg69rttqIoV1dXbFkFAACArCFaAgAg6xqNRrlcNk2z2+3KrgUAAAB4C6IlAABywJ64xJo4AAAAZA3REgAAOdBqtTRNG4/Hg8FAdi0AAKwuVVUlDi1xdECAaAkAgBzQNK3ZbCpMXAIA5MTyQ5C0RhT3Y1lWKqMkEH1oEigsGdESAECC6XT64MEDwzBkF5InGxsbiqJcX19Pp1PZtQAAEJv6hOLKPtxHPLNyVJfAfjyNAzsR9BNW5Mx+PEc8pxNl3FjzjwTFL/RSANERLQEAJLh///719fXDhw9lF5In1Wq1Xq9blnV5eSm7FgAA4lFV1XrCnWvYM3Hcz/rbu18Sdtx+oacTQfswYf04B/2N7SHsvMYZIu64YcKu2xIuBRAd0RIAQIIbN26oqtrv98/Pz2XXkif2Zt6Xl5cSZ+MDACDgnhQTNkEmLKMJ68oTRcWderPoqTpO8Z6zEIzrvwKxBnJ+zNqlwMoiWgIASFCtVvf29hRFOT8/Hw6HssvJjbW1tVKpZFkWa+IAANnkniwTOPcnQVfuTjxTbxL3swSLHjdHlwKFR7QEAJCj1Wqtr69blnVycsKbm4hUVT08PHz7299eLpdl1wIAQHKpzJoRdJLWrJwFze5JNm8o2fkyQQlLQLQEAJBmb2+vVCqNx+OzszPZteRGtVqVXQIAALF5Vm+5ZyEpQUvnPO3dGwl5OhE8JegnYqmevYrc1bqLd59L4nEjFrPMSwFEVJJdAABgdem6vre39+DBg4uLi7W1tUajIbsiAACQDv+U5MBJyoKZy2FPuY9H2bNp/l2Nwg4GVhK29VLikiKe74IuBRAFs5YAADKtra1tbGwoinJycmKapuxyAAAAAMRDtAQAkGxnZ6dcLk+n09PTU9m1AAAAAIiHaAkAIJmmafv7+4qiXF1d9Xo92eUAAICCU0PIrgvIK6IlAIB89Xp9c3NTUZSTkxPDMGSXAwAAiswKIbsuIK+IlgAAmbC9vV2pVEzT5G5xAAAAQI4QLQEAMkFVVWdZ3GAwkF1OPkyn05OTk6urK9mFAAAAYHURLQEAsqJWq9l3i3v06BGT0qPodrtXV1fn5+eyCwEAAMDqIloCAGTIzs6Oruvj8bjT6ciuJQfa7fba2trBwYHsQgAAALC6iJYAABmiadru7q6iKOfn5+PxWHY5Waeq6uHhYa1Wk10IAABFsMz7xHFDOhQJ0RIAIFuazWaj0bAs69GjR7JrAQAACS0/Opl/xGWux48+FiEUso9oCQCQOXt7e6qqDofDyWQiuxYAAJAO9QnFFZe4j3gmDakugf14Ggd2IugnYqmBxQc+m7hzxXcdopwXkB0l2QUAAOBVLpf39/cbjYau67JrKZqvfvWrTz/9tOwqAACFMplMZt7dVVVVZ56OOyKxLMsOTTyzeDxHnB/Djtv9+KcChbWPXqq//7CxInJOxHPQfR3SGgtYDqIlAEAWNZtN2SUU0C/90i/9/M//vOwqAABFc+fOnV//9V+3H/tn3Ci+xV/+oCQwOgmcpGNHLbHKi9s+QY6TVvRDhIScIloCAGBVbG5ubm5uyq4CAFA0pVJJ097ca8U/3yexsLzJMwspWT/J6rFHZxoR4MFeSwAAAACApUpl2yBBJ/P0n+C1S9sIie2WkE3MWgIAoDgmk4lhGLVaTXYhAAC8hWchm2ffJf/SOf/CN/feQ+42nm2JIvYTyG4Z2I+7tzmnLDmdO8MpruvgjC4+LyBTiJYAACiIbrf78OHDWq1269Yt2bUAAFZdxA2VBFlJ2FPu4zN3cRIPEdYyboITq/3MIiNeOiA7WBAHAEBBNBoNVVWHw2G/35ddCwAARbO0VW9A7hAtAQDyge/rZtJ1fWNjQ1GUs7Mz2bUAAFA01hOyCwEyh2gJAJADvV7vzp0719fXsgvJuq2tLVVVR6NRt9uVXQsAABmlhpBdF5BX7LUE/P/27jS7jSs9A3BNmDhPkmjRcqttn9OLSTaVTWQxyVLinLQlWZItkiA4YUblR9loikQVQYhkYXieHzpQ4VbdD7Qpgi++ewtYAJ1OZzAYnJ2dra+vl13LXIvjeG9v7+Tk5Pj4eGNjw7tkAJ7B+fn56enpv//7v5ddyLT+7d/+beLxBXoJzLlPnz6dnp6WXcXzES0BsAD29vaCINjf3y+7kAWwu7t7fn7e7/dPT099xQB4Bv1+P47jH374oexCYF4kSdLv98uu4vmIlgBYAFEUHRwclF3FYgjD8ODg4NOnT81mc3t7O0n8rAfgae3v729vb//nf/5n2YXAvPjv//7vV69elV3F87HXEgAsm42NjUajkaap/bwBAHhqPskEgCV0cHDw/v37i4uLnZ2der1edjkALLlut/tf//VfZVcB8+L6+rrsEp6VaAkAllC9Xt/a2jo/P//y5cubN2/KLgeAZdZoNP7xj3/8x3/8R9mFwLx4+/btSt18JkzTtOwaAIDHNxgMfv3119FodHh4uLm5WXY5AAAsJ3stAcBySpJkd3c3CILj42OfJAEA8ERESwCwtHZ3dyuVymAwOD09LbsWAACWk2gJgMUzHA5PTk6azWbZhcy7MAwPDg6CIGg2m4PBoOxyAABYQqIlABZPu90+PT1tNpvWed1rY2Oj0WikaXp8fFx2LQAALCHREgCLZ319PUmS4XB4fn5edi0L4MWLF0EQXFxcdDqdsmsBAGDZiJYAWDxhGO7s7ARBcHZ2VnYtC6BWq21tbQVB8OXLl7JrAQBg2YiWAFhI29vbURT1er2rq6uya1kA+/v7URR1Op1er1d2LQAALBXREgALKYqirBNH49I0kiR5+fLl3//+92q1WnYtAAAsFdESAIsqWxN3fX3d7XbLrmUBbG5uJklSdhUAACwb0RIAi6pSqWxsbAQalwAAoDyiJQAW2O7ubhAEFxcXw+Gw7FoAAGAViZYAWGD1er1er6dpqnEJAABKIVoCYLFljUutVitN07JrAQCAlSNaAmCxra+vJ0kyHA7Pz8/LrgUAAFaOaAmAxRaGYXarOGviHipN09PT07KrAABgsYmWAFh429vbURT1er2rq6uya1kk//znP09OTnR7AQDwLURLACy8KIq2trYCjUsPtLOzE8dxkiRlFwIAwAILbXoKwBIYDAb/93//FwTB27dvK5VK2eUsjOFwGMdx2VUAALDAdC0BsAySJFlbWwuC4OLiouxaFolcCQCAbyRaAmBJZGvi7BwEAADPSbQEwJJYX1+Poqjf73c6nbJrAQCAVWHnTgCWRBRF6+vrvV7PNoIAAPBsbOMNwPJI0zQMw7KrAACAFWJBHADLQ670KAaDQdklAACwMERLAMCfhsPhb7/99ttvv41Go7JrAQBgMYiWAIA/pWna7XZ7vd4ff/xRdi0AACwG0RIA8KckSb777rswDC8uLlqtVtnlAACwAERLAMC/NBqN/f39IAi+fPnS6XTKLgcAgHknWgIAvrK7u7uxsZGm6adPn4bDYdnlAAAw10RLAMBtr169qlQqg8Hg8+fPZdcCAMBcEy0BsJza7ba9qGcWRdHr16+jKLq+vj45OSm7HAAA5pdoCYAlNBqNPn782Gq17BY0s2q1+vLlyyAITk9Pr66uyi4HAIA5JVoCYAlFUbS5ubm1tRXHcdm1LLDNzc3t7e0gCD59+tTr9couBwCAeRSmaVp2DQDAnErT9P37991ut1KpfP/990mSlF0RAADzRdcSAJArDMOjo6NKpdLv9z9+/DgajcquCACA+SJaAgCKxHF8dHQUx3G32/348aN+ZwAAbhItAQD3qFQqR0dHURS12+3PApG0uwAAGJtJREFUnz+XXQ4AAHNEtAQA3K9Wq3333XdhGF5eXv7xxx9llwMAwLwQLQEAU1lbWzs8PAyCoNVqnZ6ell0OAABzQbQEAExrY2PjxYsXQRCcnJxcX1+XXQ4AAOVzC2EA4AF2dnaGw2Gv12s0GmXXAgBA+UL3eQFguQ0Gg4uLi1qttra2VnYtAACwbCyIA2DJtVqt4+PjVqtVdiEAALCEREsALLn19fUgCK6vrzXqAgDAoxMtAbDk6vV6HMej0ajT6ZRdCwAALBvREgDLL9tl6erqquxCAABg2YiWAFh+2Zo40dJTGw6H3W637CoAAHhWoiUAlt/6+noYhr1er9/vl13L0hoOh+/fv//w4YN0CQBgpYiWAFh+URTV6/VA49JTCsMwSZI4juM4LrsWAACeT+h2OQCsgmazeXx8vLa2dnR0VHYtSytN0+FwmCRJ2YUAAPB8dC0BsBKy7Zba7fZoNCq7lqWVNS6VXQUAAM9KtATASqhWq5VKJU3T6+vrsmsBAIDlIVoCYFVkjUuiJQAAeESiJQBWRaPRCIKg3W6XXQgAACwP0RIAqyKLlnq93nA4LLuW1ZKm6fHxcdlVAADwJERLAKyKOI6r1WoQBJ1Op+xaVssff/zRbDY/fPgg1AMAWD6iJQBWiDVxpVhfX4+iqN1uv3//vtvtll0OAACPSbQEwAoRLZViY2PjzZs3lUql3+9/+PDh4uKi7IoAAHg0oiUAVki9Xg+CoNvtjkajsmtZLdVq9YcfflhbWxuNRp8/f7b1EgDA0hAtAbBCKpVKkiRpmtpu6flFUXR0dLS7uxsEQbPZ/Pjxo4APAGAJiJYAWC3WxJXr4ODg8PAwDMOrq6t37971er2yKwIA4JuIlgBYLY1GI+tdKruQ1bW5ufnmzZskSfr9/vv376+ursquCACA2YVpmpZdAwCwcobD4adPn7L2sf39/b29vbIrAgBgFqIlAKAcaZp++fKl1WoFQbCxsZEtlCu7KAAAHka0BACUqdVqffnyJU3TJEkODw+zzbAAAFgUoiUAoGSdTufjx4/D4TAIgp2dnYODA+1LAACLQrQEAJRvNBodHx9ni+Oq1eqrV6/q9XrZRQEAcD93iAMAyhdF0cuXL1+/fp0kSa/Xc9s4AIBFoWsJAJgjWfvSixcvrIkDAFgIoiUAAAAAZmRBHACrq9vtll0CAAAsNtESAKsoTdNffvnl3bt32V3JAACA2YiWAFhFYRgmSRIEQb/fL7sWHqDVag0Gg7KrAADgX+y1BMCK6vV61Wq17Cp4gF6v9+7duzRNf/zxxziOyy4HAIAgCIKk7AIAoBxypYUTRdHa2loQBHIlAID5oWsJAFgkaZqGYVh2FQAA/Em0BAAAAMCMbOMNAAAAwIxESwDAkvj8+fPFxUXZVQAArBYL4gCAZXB1dfXx48cgCCqVyuHhYb1eL7siAICVIFoCAJZBmqbNZvP09DR7b7O2tra3t9doNMquCwBgyYmWAIDlMRqNTk9Pm81m9tdGo7G3t7e2tlZuVQDAakrTdDgcBkGQJEnemH6/PxwOx+HMgx4EQbC2tpZ38X6/f319HcfxxsZG3uxXV1dZhbfce0PebMDa2loURaIlAFba6enp5eXlq1evarVa2bXwaPr9frPZPD8/z97n1Ov1vb299fX1susCAJ5bmqbtdjtN04J3AldXV9mYTHbWzQfFB1+8eLG5uTnxyt1u9927d3Ec//jjj3mzf/r06fLycuYXeHR0lPcp2uXl5adPn+r1+ps3b/JOf/fuXbfbnXn2t2/fViqV3NgMAFZBu93udrudTke0tEwqlcrLly/39vaazWar1ep0Oh8/fqzVant7ewWf2gEAZen3+zfDnTRNR6NRWujmgJ2dnf39/YlXTtP0t99+C4Lgp59+iqLJtzJrt9vjlucZjEajvKfCvxScHsdxpVIZjw9udAzdfXD3YBzHeVdOkmRjY2N88Ykajca46ene3qO7A/4sWNcSAKvs+Pi42Wxub2+/fPmy7Fp4EsPhMAuYsrd91Wp1b28v76NFAKBAFuhkmc7NB2maxnFc0Bb0/v37fr///fffV6vViQPOz89///33mQvb2dl58eJFXs3v378Pw/Do6CgvWsq6loIbSdA44rn5IO9gkiR5V14RupYAWGlZs9K3tAEz5+I4Pjg42N3dPTs7Ozs76/V6nz9/Pjk5yQKme/cRAIDlkGVAURTl/ezr9/tnZ2d3M6Obfy24/vr6ekG0NBwOh8NhwRWSJFlbWwvDMKvwrrzjmYLOnTAMf/jhh4LK7y2ee+laAmCl9Xq9X3/9NQzDn3/+uexaeHKj0SgLmMYbam5vb29vbxe8HwWAOTFOebKMZmx8PIqivEVhQRD89ttv19fXh4eHea27nU7n/fv301QyDnqiKBo/yHY2zDul0+mEYVitVn2os5R0LQGw0qrVahRFo9Go1+vldWizNKIo2tvb29nZabVazWZzMBicnJycnp7+9NNP3ukCULo0TZvN5q3kaPzXe/tCkiQpiJayFVvFfUO7u7s306KJEdJsK7/q9foMZ7EoREsArLpqtdrpdLrdrmhpRURRtLu7u7Ozc3Fx0Wq1KpWKXAmAbzQOgApuDHJ2dtZqtTY3Nwu6e05OTooniv4Sx/Gt0Kfg9vZBELx69eq7774rGJAkycHBQfHsMJFoCYBVV6vVsmjJ1s4rJQzDra2tra0tmwMAcNN4fdndvqG8v978UVJwG7KsS3owGORNHYbh9vb2ODmKvpYdmfl1rfg+0zwp0RIAqy77dLHX65VdCOUoaFnKflXQ0wSwNAaDQbbpT8Geze/evZvtXUG2mXS259HEAZubm41Go/hO8G5ZyyISLQGw6rJ3eKIl7jo/P//y5cvBwcHOzk7ZtQBw27hpKGsjGv+5vb2dF990Op1Pnz7V6/WCaCkLhrIlZnmtQxMbi+79KKJSqRTnSrCgREsArLpsi6XBYJCmqf4Ubmq325bLATy/4XA4GAzGUVHeg7x/ogs6g5IkqdfrxVtKv3792p1D4UFESwCsuiRJspvE9ft9O3lz0+Hh4c7Ojk+YAR5RmqaXl5fD4bCgIfT4+Pj8/HzKC8Z/GbcRFexmXa/X37x5c+8Fp5wayIiWAODPm8T1ej3RErcUf7Ld6/VGo5EbKgMra+J6tOFwuLa2lrfibDQaff78OQiC7e3tvGbhJEluBUZ5D2xNDfNAtAQAQaVS6XQ6/X6/7EJYMM1m8/z8vFKpbGxsbGxsyJiApZGm6XCScXiUyVuSVrBPdhzH9Xo9SZKCdej7+/v7+/uP9mKAJyZaAoA/t1uykzcPFcdxGIb9fr/ZbDabzSRJNjc3ZUzA/Ov3+4PBoFar5XX9XFxc/P7771NeLWsyGq9Hi+N4bW2tYPy9S9KAxSJaAgDREjM6ODjY29u7vr6+uLi4vr4eDAZZxpT9WpUp2PID4HHd7Ccq6BsKguDjx4+9Xu/o6CgvA8qi8/HSs7turkp7shcELAbvdQAgyPZpFi0xgyiKstVwaZpeXV1lGdNwOLy4uLi4uAiCoFqtZhlTo9HwCxgwm1vL0PJWqN08pV6vF0RLWepdcF/U9fX1n3/++RFfArDEREsA8GfX0mg0GgwGekyYTRiG44yp0+lcX19fX19n28P3er2zs7MwDOv1epYx1ev1gt/ogNVRsN/QcDj88OHD3cyo2LiZqFarFQw7Ojp6WKEA+bx7BoAgDMNKpdLv9/v9vmiJbxSGYaPRaDQa+/v7o9Ho+i/9fr/dbrfb7WzMwcFBwY23gUWXfVxRcOPR4+PjZrO5v7+/t7c3cUAYhjfbabO7oeUtTxuvUBNbA8/Pu2cACIIgqFar/X6/1+s1Go2ya2F5jJfLBUHQ7/ezjKndbj+oBwGYKw+6ddrPP/+cl/Vkxwv+NYii6PXr19kO2T72AOaZf6EAIAiCoFKp+KSXJ1WpVLa3t7e3t4Mg6HQ62Q5fEw0Gg6urq/X1db9MQulOT097vd7dzGhKw+Ew7xt5Z2dne3s7juOC0ws2SwKYH+GD/mUEgGVVsNsFPLPz8/Pff/+9Xq+7Pzc8qU6nc3JyUqlUXr58mTfm3bt33W731sGCW6fdPG7nfmBF+CgMAIKg8C458MziOM62+i4Y0+12i/fohVWQpmnerdPGx1+9epW30jnbDa34W2l7e3s0Gt3Nj57mBQEsJF1LAAALZjQa/e///m8YhtVqtVqt1mq17EHBIjtYXN1ut9vt5uVH955+eHi4ubk58anBYHB9fV2pVOyyB/AtREsAAAum1+v9+uuvd4+Pw6Yxm4gx59I0PTs7GwwGL168yBvz5cuXs7OzgovcWoZ2q72oWq0W72cEwDcSLQEALJ40TbN7Gt408X1drVar1WpxHFcqlUqlkiSJvImnMF6DNvrLuLdobW0tr28oTdNffvklCIKffvopb5XZ+fn55eVllhMlSXI3RXrCVwXAFERLAABLYhw2dbvdgrBpc3Pz8PDw+ctjcfX7/Xa7PTE8Gj8uOH17e7tgn+zPnz/Hcby/v28DI4AFZRtvAIAlkfUl3bxb+Ths6vf7g8Gg3+/3+/28W6Fnfv3112q1+urVK7/nr47j4+Ner7e/v5+3oXW32/3999/vvU70l6zDaNxeVLwnvaATYNGJlgAAltbdsCkIgoKm9cFgkEVRBb/tt1qt6+vrOI6TJLm7tc1jVs8do9Eouyda3p95XUW1Wu3777/Pu2y73e50Otvb23nRUvZ/0c3YaBwe3XxsoSXAahItAQCsloLf/+M4fv369WAwKBjT6XQuLy/zns02coryNRqN4rap5TOOfgpe+OXlZbvdXl9fX1tbmzig3+//85//nLmG4XBY8OzOzk6apnm5UhAEtVrt9evXM88OwHJbrZ/rAFBgNBp9/vy51+v97W9/89k7qykMw1stTndtbW3VarVse+bBYHDrNvD9fr/49NevX+clLO12+/j4uFarFezL02q1hsNhOMnEl3PrSKPRyPvuzhYPJklSkLA0m830L0EQ3HxQ0EmUnRtF0U8//ZR35aurq/Pz8ziO86Klm+sTs/Au78+JXUXFDWV5e2wDwDRESwDwpyiKrq+v0zQdDAaVSqXscmBONRqNRqMx8anBYDAYDEaFCjp3hsNhp9Mpnr3VanW73ZmLf/v2bd539+Xl5fHx8dbW1qtXr/JOPz09Ld6vukDxievr63Ec531hgyCI4/jHH3/MwqPZCgCAJyJaAoB/efnyZZIkq7ZaBx7LN377NBqN169fF0cnGxsbtVotvWM8oPj2xwUNiVm/UnH9W1tb2fXHfVI326YKOony+qpuvq6NjY2CAUEQ2MoKgPkUFv/0BQAAAIA8+mkBAAAAmJFoCQAAAIAZiZYAAAAAmJFoCQAAAIAZiZYAAAAAmJFoCQAAAIAZiZYAAAAAmJFoCQC+0u/3Ly4uOp1O2YUAAMACSMouAADmS7PZbLVau7u79Xq97FoAAJ5KGIa3jqRpWvDsXePxeYNvXnD6qaeUXSRN0weVOuXs4zETCyt+duJEU77AW7XN8GUpha4lAPhKpVIJgmAwGJRdCADAU5kYx0yT0TzRLI8+dZ6Hzn73qSlLvTVsmrNmnqt0upYA4CtZtNTv98suBADgSUxsuskOhmGYHbzVLzNuESq47MRTxhecfuqHmr7Up5h9olsTPWiKe3vB5pCuJQD4SpIkgWgJAFhS4+TlVswxPvJYiUZBjHJ36keZcUrPNvv4ytNMcTcRe9z/HE9KtAQAX8m6lobD4aIsbgcAmNJsi7mewa2oKwzDuwvKnq6qu0Hb+Hjw9Vdjmu6tggsuK9ESAHwljuPsTYPtlgCApTR9P9G3eNAGRs/p+WdfiM6jbyFaAoDbsjVxoiUAgOmFX8sO5q0+uzXsloL1et9iytkfV94KxGUiWgKA20RLAADfLm+VWfHat6cuqZTZn/llPjPREgDcJloCAHio9C/jv04/+Jljl+lnv3WLt+DhawZLfJnPRrQEALeJlgAAZvagW5s9+p3pHuTZZl/i1XCBaAkA7hItAQBL7Nk22H7Ou7xNU8yyNg2VTrQEALdl0dJwOCy7EACAxzRl78wjbpi9mlYtxhItAcBtcRwHupYAgGU0Xv+V11L0uKnQzVkKpn7EGfPMPPvNFXMP+uLcvPKDZrl5ykKEdEnZBQDA3LEgDgBYYmma3tyX+tZTjz7LRMVT301VHjdnedIXHuR/had5RYvY7qRrCQBuy6KlNE2tiQMAltLEJOWJGmRuNS7dnWXiwafwnLNPnOjRT5kTupYA4LYwDOM4Hg6Hg8EgWxwHALBkHhRbFA/Oe/ahxwsGTB+7zHDxe8fMFvrM8EVblCzpFl1LADCBNXEAADAN0RIATCBaAgCAaYiWAGAC0RIAAExDtAQAE4iWAABgGuGC7hEFAE+q3W632+1Go9FoNMquBQAA5pdoCQAAAIAZWRAHAAAAwIxESwAAAADMSLQEAAAAwIxESwAAAADMKCm7AAAAAFhFYfjnnbXCMLz77PimW7eevXl84o25bh0fn/6Nd/F6rOtMOdcMs0z5BeHRiZYAAACgTAVpUfGRic9OP3h6z5DO3JziEeucGNstonkOyCyIAwAAgCV0K4xI03RpchbmimgJACZL07TX6/X7/bILAQD4l4K06N7GlrsdPZmbR8bH7x4Mvm4CGg+7O/jW47xz8wYUjMwrcvwCi78gD7ra3cF5r3rKK+dd7e7BuyfenXF+WBAHAJO1Wq0vX75sbGx89913ZdcCAKyom1nJ466HylsrF97YASp7kNWQty5vyryjeLqJUzyoyMd9yfcOuBsG3Xti8Nd/wXunuzsm7+szJ3QtAcBkcRxHURRFflYCAGVK/1Lcp/NY0cNDLzLl+FvNVg+r6SGTFnxB8s6aePxB/V/TDHvQq57bFGkiXUsAMNnm5ubm5mbZVQAA/GmGPp25VdbargfN+3SDv/GseSNaAgAAgDn1uEHSnMRStxaCzee8Dy1yti/sPPzn+Haa/AEAAGCB5W3E89BNvmfzLdnQE+VK9+5M9O3tSAVXWMH2JV1LAAAAMKduxUPBw7fsydsF/Bs3CB+ffqvCuwVPf+7E3ZEecRfzvHmnHzzNq56+zoeeNSdNZ3fNaVkAAADAQpjbyONJrearnsiCOAAAAOBhFnoB18xW81XfS8YGAAAAPNgjLlVbIKv5qouJlgAAAACYkQVxAAAAAMzIHeIAINf19XWr1arVant7e2XXAgAA80i0BAC5BoPB5eWlxeMAAJDHgjgAyBXHcRAEg8Gg7EIAAGBOiZYAIFcWLQ2Hw7ILAQCAOSVaAoBcoiUAACgmWgKAXEmSBEGQpuloNCq7FgAAmEeiJQDIFYZhFEWBxiUAAMghWgKAInbyBgCAAqIlAChiuyUAACggWgKAIqIlAAAoIFoCgCLZTt6iJQAAmEi0BABF7LUEAAAFREsAUMSCOAAAJgrDMAzD6R9Pc+5Dx8wD0RIAFBEtAQAwUZqm9x6/+Tj8S8H4m2PyrjNvkrILAIC5Zq8lAAAmCsPwQYnPNIPzxjx0ruekawkAithrCQCAPHkL2YoHTHORu8fndkGcriUAKJJFS6PRKE3Tuf1xDgDA88tbsDbNQrbHGjMPdC0BQJE4jrNEyZo4AAC4S7QEAPeIoigQLQEAwCSiJQC4h528AQAgj2gJAO5hJ28AAMgzv/euA4A50ev1giCoVCq28QYAgFtESwAAAADMyII4AAAAAGYkWgIAAABgRqIlAAAAAGYkWgIAAABgRqIlAAAAAGYkWgIAAABgRqIlAAAAAGYkWgKA+11eXp6envb7/bILAQCA+ZKUXQAALIBms9npdGq1WqVSKbsWAACYI6IlALjf2tpatVqN47jsQgAAYL6EaZqWXQMAAAAAC8leSwAAAADMSLQEAAAAwIxESwAAAADMSLQEAAAAwIxESwAAAADMSLQEAAAAwIxESwAAAADMSLQEAAAAwIxESwAwlQ8fPvzP//xPu90uuxAAAJgjoiUAmEqapkEQDIfDsgsBAIA5IloCgKnEcRyIlgAA4GuiJQCYimgJAADuEi0BwFSSJAlESwAA8DXREgBMJetaGgwGZRcCAABzRLQEAFOxIA4AAO4SLQHAVERLAABwl2gJAKYiWgIAgLtESwAwFdESAADcJVoCgKlk0VIgXQIAgBtESwAwlTAMoygKREsAAHCDaAkAppUkSSBaAgCAG0RLADAt2y0BAMAtoiUAmFYWLQ0Gg7ILAQCAeSFaAoBp6VoCAIBbREsAMC3REgAA3CJaAoBpiZYAAOAW0RIATEu0BAAAt4iWAGBaSZIEoiUAALhBtAQA04rjOI7jLGACAACCIAjTNC27BgAAAAAWkq4lAAAAAGYkWgIAAABgRqIlAAAAAGYkWgIAAABgRqIlAAAAAGb0/xHzH4OjrwxuAAAAAElFTkSuQmCC
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5JVFNNQ29uZmlnSXRlbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+YWRtaW48L0dyb3VwPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkFkbWluPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZT5Db25maWcgSXRlbTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5BZG1pbjwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJNb2R1bGU+CiAgICAgICAgICAgICAgICAgICAgPE1vZHVsZT5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyTW9kdWxlQWRtaW48L01vZHVsZT4KICAgICAgICAgICAgICAgICAgICA8TmFtZSBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZyBJdGVtczwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5DcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+VGlja2V0PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8UHJpbz40OTU8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhck1vZHVsZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ29uZmlnSXRlbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNvbmZpZ2l0ZW08L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+SVRTTSBDb25maWcgSXRlbSBPdmVydmlldzwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5Db25maWcgSXRlbTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxUaXRsZT5Db25maWcgSXRlbTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5Db25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2U8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lPkNNREI8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+TWVudTwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+SXRlbUFyZWE8L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxJbWFnZT5pdHNtX2NvbmZpZ2l0ZW0ucG5nPC9JbWFnZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbTwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPkNvbmZpZyBJdGVtPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz4zMjAwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5PdmVydmlldzwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+T3ZlcnZpZXc8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPEltYWdlPm92ZXJ2aWV3LnBuZzwvSW1hZ2U+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW08L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+Q29uZmlnIEl0ZW08L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjEwMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPklUU00uQWdlbnQuRGVmYXVsdC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01Db25maWdJdGVtWm9vbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNvbmZpZ2l0ZW08L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+Q29uZmlnIEl0ZW0gWm9vbTwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGU+Wm9vbTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5Db25maWcgSXRlbTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPENTUz5JVFNNLkFnZW50LkRldGFpbC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8Q1NTPklUU00uQWdlbnQuRGVmYXVsdC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8Q1NTPklUU00uUHJpbnQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPENTU19JRTc+SVRTTS5BZ2VudC5EZXRhaWwuSUU3LmNzczwvQ1NTX0lFNz4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD50aGlyZHBhcnR5L2pxdWVyeS10YWJsZXNvcnRlci0yLjAuNS9qcXVlcnkudGFibGVzb3J0ZXIuanM8L0phdmFTY3JpcHQ+CiAgICAgICAgICAgICAgICAgICAgPEphdmFTY3JpcHQ+Q29yZS5VSS5UYWJsZS5Tb3J0LmpzPC9KYXZhU2NyaXB0PgogICAgICAgICAgICAgICAgICAgIDxKYXZhU2NyaXB0PklUU00uQWdlbnQuWm9vbS5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01Db25maWdJdGVtRWRpdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+aXRzbS1jb25maWdpdGVtPC9Hcm91cD4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5Db25maWcgSXRlbSBFZGl0PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZT5FZGl0PC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkNvbmZpZyBJdGVtPC9OYXZCYXJOYW1lPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01Db25maWdJdGVtUHJpbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jb25maWdpdGVtPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkNvbmZpZyBJdGVtIFByaW50PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZT5QcmludDwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5Db25maWcgSXRlbTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ29uZmlnSXRlbUFkZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+aXRzbS1jb25maWdpdGVtPC9Hcm91cD4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5Db25maWcgSXRlbSBBZGQ8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlPkFkZDwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5Db25maWcgSXRlbTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPk5ldzwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+TmV3PC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxJbWFnZT5uZXcucG5nPC9JbWFnZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbUFkZDwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5Db25maWcgSXRlbTwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+PC9BY2Nlc3NLZXk+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+MjAwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2giIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jb25maWdpdGVtPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPlNlYXJjaCBDb25maWcgSXRlbXM8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlPlNlYXJjaDwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5Db25maWcgSXRlbTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPlNlYXJjaCBDb25maWcgSXRlbXM8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lPlNlYXJjaDwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8SW1hZ2U+c2VhcmNoLnBuZzwvSW1hZ2U+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2g8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPExpbmtPcHRpb24+b25jbGljaz0iSVRTTS5BZ2VudC5Db25maWdJdGVtLlNlYXJjaC5PcGVuU2VhcmNoRGlhbG9nKCdBZ2VudElUU01Db25maWdJdGVtU2VhcmNoJyk7IGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IH0gZWxzZSB7IHdpbmRvdy5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOyB9IHJldHVybiBmYWxzZTsiPC9MaW5rT3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+Q29uZmlnIEl0ZW08L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz4zMDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPENTUz5JVFNNLkFnZW50LkRldGFpbC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8Q1NTPklUU00uVGFibGUuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPENTUz5JVFNNLlByaW50LmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxDU1NfSUU3PklUU00uQWdlbnQuRGV0YWlsLklFNy5jc3M8L0NTU19JRTc+CiAgICAgICAgICAgICAgICAgICAgPEphdmFTY3JpcHQ+dGhpcmRwYXJ0eS9qcXVlcnktdGFibGVzb3J0ZXItMi4wLjUvanF1ZXJ5LnRhYmxlc29ydGVyLmpzPC9KYXZhU2NyaXB0PgogICAgICAgICAgICAgICAgICAgIDxKYXZhU2NyaXB0PkNvcmUuVUkuVGFibGUuU29ydC5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5JVFNNLkFnZW50Llpvb20uanM8L0phdmFTY3JpcHQ+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMwMDAtQmFjayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdG9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OklUU01Db25maWdJdGVtOjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtTWVudUdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPkJhY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW07Q2xhc3NJRD0kUURhdGF7IkNsYXNzSUQifTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5CYWNrPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMjAwLUhpc3RvcnkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNQ29uZmlnSXRlbTo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbU1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5IaXN0b3J5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+SGlzdG9yeTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01Db25maWdJdGVtRWRpdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5O0NvbmZpZ0l0ZW1JRD0kUURhdGF7IkNvbmZpZ0l0ZW1JRCJ9O1ZlcnNpb25JRD0kUURhdGF7IlZlcnNpb25JRCJ9PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPlBvcFVwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMzAwLUVkaXQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNvbmZpZ0l0ZW06Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW1NZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+RWRpdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPkVkaXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtRWRpdDtDb25maWdJdGVtSUQ9JFFEYXRheyJDb25maWdJdGVtSUQifTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5Qb3BVcDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzQwMC1QcmludCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNvbmZpZ0l0ZW06Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW1NZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+UHJpbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5QcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01Db25maWdJdGVtUHJpbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtUHJpbnQ7Q29uZmlnSXRlbUlEPSRRRGF0YXsiQ29uZmlnSXRlbUlEIn07VmVyc2lvbklEPSRRRGF0YXsiVmVyc2lvbklEIn08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtQYXJhbSI+dGFyZ2V0PSJwcmludCI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+UG9wVXA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyM1MDAtTGluayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNvbmZpZ0l0ZW06Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW1NZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+TGluazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPkxpbms8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRMaW5rT2JqZWN0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRMaW5rT2JqZWN0O1NvdXJjZU9iamVjdD1JVFNNQ29uZmlnSXRlbTtTb3VyY2VLZXk9JFFEYXRheyJDb25maWdJdGVtSUQifTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5Qb3BVcDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzYwMC1EdXBsaWNhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNQ29uZmlnSXRlbTo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbU1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5EdXBsaWNhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5EdXBsaWNhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtRWRpdDtEdXBsaWNhdGVJRD0kUURhdGF7IkNvbmZpZ0l0ZW1JRCJ9O1ZlcnNpb25JRD0kUURhdGF7IlZlcnNpb25JRCJ9PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPlBvcFVwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNvbmZpZ0l0ZW06Ok51bWJlckdlbmVyYXRvciIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZmlnSXRlbTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gTG9jYXRpb249Iktlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vTnVtYmVyLyoucG0iIFNlbGVjdGVkSUQ9Iktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6TnVtYmVyOjpBdXRvSW5jcmVtZW50Ij48L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6Q0lOYW1lUmVnZXgiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyByZWd1bGFyIGV4cHJlc3Npb25zIGluZGl2aWR1YWxseSBmb3IgZWFjaCBDb25maWdJdGVtIGNsYXNzIHRvIGNoZWNrIHRoZSBDb25maWdJdGVtIG5hbWUgYW5kIHRvIHNob3cgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25maWdJdGVtPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbXB1dGVyOjpDSU5hbWVSZWdleCI+XkFCQy4qPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb21wdXRlcjo6Q0lOYW1lUmVnZXhFcnJvck1lc3NhZ2UiPkEgY29tcHV0ZXIgbmFtZSBtdXN0IHN0YXJ0IHdpdGggQUJDITwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSGFyZHdhcmU6OkNJTmFtZVJlZ2V4Ij4uKlxkXGQkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJIYXJkd2FyZTo6Q0lOYW1lUmVnZXhFcnJvck1lc3NhZ2UiPkEgaGFyZHdhcmUgbmFtZSBtdXN0IGVuZCB3aXRoIHR3byBkaWdpdHMhPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6RGVmYXVsdFN1Yk9iamVjdCMjI0lUU01Db25maWdJdGVtIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyAnSVRTTUNvbmZpZ0l0ZW0nLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+Q29tcHV0ZXI8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpJVFNNQ29uZmlnSXRlbTo6U2hvd0NvbHVtbnNCeUNsYXNzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6Ok5hbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6Q3VyRGVwbFN0YXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkhhcmREaXNrOjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpIYXJkRGlzazo6MjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6SGFyZERpc2s6OjM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6SGFyZERpc2s6OjM6OkNhcGFjaXR5OjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OldhcnJhbnR5RXhwaXJhdGlvbkRhdGU6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6Q3JlYXRlVGltZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uOjpUeXBlOjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb246OkFkZHJlc3M6OjE8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iU3RhdHM6OkR5bmFtaWNPYmplY3RSZWdpc3RyYXRpb24jIyNJVFNNQ29uZmlnSXRlbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OlN0YXRzPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpJVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZFJlZ2lzdHJhdGlvbiMjI0lUU01Db25maWdJdGVtIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk9iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JbXBvcnRFeHBvcnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5PYmplY3RCYWNrZW5kOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpJVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+Q29uZmlnIEl0ZW08L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RXZlbnRNb2R1bGVQb3N0IyMjMTAwLUhpc3RvcnkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25maWdJdGVtPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpFdmVudDo6RG9IaXN0b3J5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+KENvbmZpZ0l0ZW1DcmVhdGV8VmVyc2lvbkNyZWF0ZXxEZXBsb3ltZW50U3RhdGVVcGRhdGV8SW5jaWRlbnRTdGF0ZVVwZGF0ZXxDb25maWdJdGVtRGVsZXRlfExpbmtBZGR8TGlua0RlbGV0ZXxEZWZpbml0aW9uVXBkYXRlfE5hbWVVcGRhdGV8VmFsdWVVcGRhdGV8RGVmaW5pdGlvbkNyZWF0ZXxWZXJzaW9uRGVsZXRlfEF0dGFjaG1lbnRBZGRQb3N0fEF0dGFjaG1lbnREZWxldGVQb3N0KTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHJhbnNhY3Rpb24iPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6Okhpc3RvcnlPcmRlciIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNQ29uZmlnSXRlbTo6Vmlld0hpc3Rvcnk8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9Im5vcm1hbCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InJldmVyc2UiPnJldmVyc2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Im5vcm1hbCI+bm9ybWFsPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jb25maWdpdGVtPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkNvbmZpZyBJdGVtIEhpc3Rvcnk8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlPkhpc3Rvcnk8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+Q29uZmlnIEl0ZW08L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcyMjI0RlcGxveW1lbnRTdGF0ZXMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+R2VuZXJhbENhdGFsb2c8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5HZW5lcmFsQ2F0YWxvZzo6UHJlZmVyZW5jZXM8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc0dlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj5JVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIj5EZXBsb3ltZW50IFN0YXRlIFR5cGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2MiPkRlcGxveW1lbnQgU3RhdGUgVHlwZS48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRhdGEiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InBvc3Rwcm9kdWN0aXZlIj5wb3N0cHJvZHVjdGl2ZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJwcmVwcm9kdWN0aXZlIj5wcmVwcm9kdWN0aXZlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InByb2R1Y3RpdmUiPnByb2R1Y3RpdmU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmVmS2V5Ij5GdW5jdGlvbmFsaXR5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+T3B0aW9uPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb246OkNsYXNzIyMjMDEwLUNsYXNzR3JvdXBDaGVjayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmZpZ0l0ZW08L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb246OkNsYXNzR3JvdXBDaGVjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVxdWlyZWQiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkdyYW50ZWQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6UGVybWlzc2lvbjo6SXRlbSMjIzAxMC1JdGVtQ2xhc3NHcm91cENoZWNrIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmZpZ0l0ZW08L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb246Okl0ZW1DbGFzc0dyb3VwQ2hlY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJlcXVpcmVkIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcmFudGVkIj4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNQ29uZmlnSXRlbTo6UGVybWlzc2lvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+cm88L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0IyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OklUU01Db25maWdJdGVtOjpQZXJtaXNzaW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj5ydzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbUFkZCMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OklUU01Db25maWdJdGVtOjpQZXJtaXNzaW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj5ydzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPnJvPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtUHJpbnQjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OklUU01Db25maWdJdGVtOjpQZXJtaXNzaW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj5ybzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbVpvb20jIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPnJvPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPnJvPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZG1pbklUU01Db25maWdJdGVtIyMjRWRpdG9yUm93cyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWRtaW46OlZpZXdDb25maWdJdGVtRGVmaW5pdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+MzA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjUGVybWlzc2lvbnMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkdlbmVyYWxDYXRhbG9nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+R2VuZXJhbENhdGFsb2c6OlByZWZlcmVuY2VzPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYWJlbCI+UGVybWlzc2lvbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzYyI+RGVmaW5lIHRoZSBncm91cCB3aXRoIHBlcm1pc3Npb25zLjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPlBlcm1pc3Npb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj5JVFNNOjpDb25maWdJdGVtOjpDbGFzczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJlZktleSI+UGVybWlzc2lvbjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpTZWFyY2gjIyNDb25maWdJdGVtIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6U2VhcmNoUm91dGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Il4oPzpBZ2VudHxBZG1pbilJVFNNQ29uZmlnSXRlbSI+QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2g7U3ViYWN0aW9uPUFKQVg8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMb2FkZXI6OkFnZW50OjpDb21tb25KUyMjIzEwMC1Db25maWd1cmF0aW9uTWFuYWdlbWVudCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5MaXN0IG9mIEpTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6V2ViPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+SVRTTS5BZ2VudC5Db25maWdJdGVtLlNlYXJjaC5qczwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQcmVmZXJlbmNlc0dyb3VwcyMjI0NvbmZpZ0l0ZW1PdmVydmlld1NtYWxsUGFnZVNob3duIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlBhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6UHJlZmVyZW5jZXM8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6UHJlZmVyZW5jZXNHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb2x1bW4iPk90aGVyIFNldHRpbmdzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYWJlbCIgVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0aW9uIEl0ZW0gTGltaXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSIgVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRhdGEiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEwIj4xMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxNSI+MTU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMjAiPjIwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjI1Ij4yNTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIzMCI+MzA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMzUiPjM1PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGF0YVNlbGVjdGVkIj4yNTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJlZktleSI+VXNlckNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsUGFnZVNob3duPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj44MDAwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3RpdmUiPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6Ok92ZXJ2aWV3IyMjU21hbGwiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+U21hbGw8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBhZ2VTaG93biI+MjU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkltYWdlIj5vdmVydmlld3NtYWxsLnBuZzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSW1hZ2VTZWxlY3RlZCI+b3ZlcnZpZXdzbWFsbC1zZWxlY3RlZC5wbmc8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6SG9vayIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmZpZ0l0ZW08L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPkNvbmZpZ0l0ZW0jPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIyMjU2VhcmNoTGltaXQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDb25maWdJdGVtU2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj4xMDAwMDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCMjI1Nob3dDb2x1bW5zIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NvbmZpZ0l0ZW1TZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VySW5jaVNpZ25hbCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTnVtYmVyIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VyRGVwbFN0YXRlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDdXJEZXBsU3RhdGVUeXBlIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDdXJJbmNpU3RhdGUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckluY2lTdGF0ZVR5cGUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikxhc3RDaGFuZ2VkIj4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIyMjU2hvd0NvbHVtbnNCeUNsYXNzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDb25maWdJdGVtU2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6Ok5hbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6TnVtYmVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkN1ckluY2lTaWduYWw8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6Q3VyRGVwbFN0YXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkhhcmREaXNrOjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpIYXJkRGlzazo6MjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6SGFyZERpc2s6OjM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6SGFyZERpc2s6OjM6OkNhcGFjaXR5OjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OldhcnJhbnR5RXhwaXJhdGlvbkRhdGU6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6Q3JlYXRlVGltZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uOjpDdXJJbmNpU2lnbmFsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb246Ok51bWJlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uOjpUeXBlOjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb246Ok5hbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Mb2NhdGlvbjo6QWRkcmVzczo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uOjpMYXN0Q2hhbmdlZDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gjIyNTZWFyY2hDU1ZEYXRhIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRhdGEgdXNlZCB0byBleHBvcnQgdGhlIHNlYXJjaCByZXN1bHQgaW4gQ1NWIGZvcm1hdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NvbmZpZ0l0ZW1TZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5DbGFzczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkluY2lkZW50IFN0YXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+TmFtZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbmZpZ0l0ZW1OdW1iZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5DaGFuZ2VTdGF0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPlZlcnNpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5DcmVhdGUgVGltZTwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTZWFyY2hMaW1pdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NvbmZpZ0l0ZW08L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPjEwMDAwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciAnQWxsJyBpcyBzZWxlY3RlZDwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3Q29uZmlnSXRlbTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDdXJJbmNpU2lnbmFsIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOdW1iZXIiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDdXJEZXBsU3RhdGUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckRlcGxTdGF0ZVR5cGUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckluY2lTdGF0ZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VySW5jaVN0YXRlVHlwZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFzdENoYW5nZWQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1uc0J5Q2xhc3MiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3Q29uZmlnSXRlbTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpOYW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6Ok51bWJlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpDdXJJbmNpU2lnbmFsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkN1ckRlcGxTdGF0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpIYXJkRGlzazo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6SGFyZERpc2s6OjI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkhhcmREaXNrOjozPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkhhcmREaXNrOjozOjpDYXBhY2l0eTo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpXYXJyYW50eUV4cGlyYXRpb25EYXRlOjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkNyZWF0ZVRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Mb2NhdGlvbjo6Q3VySW5jaVNpZ25hbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uOjpOdW1iZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Mb2NhdGlvbjo6VHlwZTo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uOjpOYW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb246OkFkZHJlc3M6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Mb2NhdGlvbjo6TGFzdENoYW5nZWQ8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iVW5pcXVlQ0lOYW1lOjpFbmFibGVVbmlxdWVuZXNzQ2hlY2siIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25maWdJdGVtPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIwIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+RW5hYmxlZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCI+RGlzYWJsZWQ8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlVuaXF1ZUNJTmFtZTo6VW5pcXVlbmVzc0NoZWNrU2NvcGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoJ2NsYXNzJykgb3IgZ2xvYmFsbHkgKCdnbG9iYWwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmZpZ0l0ZW08L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9Imdsb2JhbCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Imdsb2JhbCI+Z2xvYmFsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJjbGFzcyI+Y2xhc3M8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KPC9vdHJzX2NvbmZpZz4K
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9iZ19JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmJnX0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ9CQ0LTQvNC40L3QuNGB0YLRgNCw0YLQuNCy0L3QtdC9INC40L3RgdGC0YDRg9C80LXQvdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICfQkNGA0YXQuNCy0LjRgNCw0YnQviDRgy3QstC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ9CR0LjQvNC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpDb25maWdJdGVtQ3JlYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbURlbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkRlZmluaXRpb25VcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpEZXBsb3ltZW50U3RhdGVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpJbmNpZGVudFN0YXRlVXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TGlua0FkZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkxpbmtEZWxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpOYW1lVXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmFsdWVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWZXJzaW9uQ3JlYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmVyc2lvbkRlbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkF0dGFjaG1lbnRBZGQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpBdHRhY2htZW50RGVsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ9Cf0YDQvtGG0LXRgdC+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAn0JrQsNC80LXRgNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAn0JrQsNC/0LDRhtC40YLQtdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBEZWZpbml0aW9uJ30gPSAn0J/RgNC+0LzRj9C90LAg0L3QsCDQtNC10YTQuNC90LjRhtC40Y/RgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBvZiBkZWZpbml0aW9uIGZhaWxlZCEgU2VlIFN5c3RlbSBMb2cgZm9yIGRldGFpbHMuJ30gPSAn0J/RgNC+0LzRj9C90LDRgtCwINC90LAg0LTQtdGE0LjQvdC40YbQuNC40YLQtSDQtSDQvdC10YPRgdC/0LXRiNC90LAhINCS0LjQtiDRgdC40YHRgtC10LzQvdC40Y8g0LbRg9GA0L3QsNC7INC30LAg0LTQtdGC0LDQudC70LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJ9Cf0L7RgtGA0LXQsdC40YLQtdC70YHQutC4INC/0YDQuNC70L7QttC10L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJ9Cf0L7RgtGA0LXQsdC40YLQtdC70YHQutCwINCe0L/QtdGALtGBLdC80LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uY3VycmVudCBVc2Vycyd9ID0gJ9Ca0L7QvdC60YPRgNC10L3RgtC90Lgg0L/QvtGC0YDQtdCx0LjRgtC10LvQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbS1BcmVhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBhdmFpbGFibGUnfSA9ICfQlNC+0YHRgtGK0L/QvdC4INC60L7QvdGE0LjQs9GD0YAu0LXQtNC40L3QuNGG0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHNob3duJ30gPSAn0J/QvtC60LDQt9Cw0L3QuCDQutC+0L3RhNC40LPRg9GALtC10LTQuNC90LjRhtC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJ9CU0LXQvNC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICfQndCw0YHRgtC+0LvQtdC9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAn0JvQuNGG0LXQvdC3INC30LAg0YDQsNC30YDQsNCx0L7RgtGH0LjRhtC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJ9CU0L7QutC40L3QsyDRgdGC0LDQvdGG0LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICfQndCw0L/RgNCw0LLQuCDQutC+0L/QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAn0JLQs9GA0LDQtNC10L3QsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAn0JXQvdGC0YrRgNC/0YDQsNC50YEg0LvQuNGG0LXQvdC3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ9CU0LDRgtCwINC90LAg0LjQt9GC0LjRh9Cw0L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAn0JjQt9GC0LXQutC70LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRlFETid9ID0gJ0ZRRE4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICfQkdC10LfQv9C70LDRgtC90L4g0YDQsNC30L/RgNC+0YHRgtGA0LDQvdGP0LLQsNC9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJ0dTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAn0JPQtdC50YIg0L/RgNC10YXQvtC0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJ9CT0YDQsNGE0LjRh9C90LAg0LrQsNGA0YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICfQotCy0YrRgNC0INC00LjRgdC6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzazo6Q2FwYWNpdHknfSA9ICfQotCy0YrRgNC0INC00LjRgdC6OjrQutCw0L/QsNGG0LjRgtC10YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlkZSBWZXJzaW9ucyd9ID0gJ9Ch0LrRgNC40Lkg0JLQtdGA0YHQuNC40YLQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnSVAg0LDQtNGA0LXRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICdJUCDQvtGCIERIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5hY3RpdmUnfSA9ICfQndC10LDQutGC0LjQstC90LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAn0JTQsNGC0LAg0L3QsCDQuNC90YHRgtCw0LvQsNGG0LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib3JkJ30gPSAn0JrQu9Cw0LLQuNCw0YLRg9GA0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ9Cf0YDQtdC90L7RgdC40LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBDaGFuZ2UnfSA9ICfQn9C+0YHQu9C10LTQvdCwINC/0YDQvtC80Y/QvdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAn0JvQuNGG0LXQvdC30LXQvSDQutC70Y7Rhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleTo6RXhwaXJhdGlvbiBEYXRlJ30gPSAn0JvQuNGG0LXQvdC30LXQvSDQutC70Y7Rhzo60JTQsNGC0LAg0L3QsCDQuNC30YLQuNGH0LDQvdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5OjpRdWFudGl0eSd9ID0gJ9Cb0LjRhtC10L3Qt9C10L0g0LrQu9GO0Yc6OtCa0L7Qu9C40YfQtdGB0YLQstC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ9Ci0LjQvyDQvdCwINC70LjRhtC10L3Qt9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAn0J/QvtC00LTRgNGK0LbQutCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAn0JzQtdC00LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAn0KHRgNC10LTQvdC+INC90LjQstC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAn0JzQvtC00LXQuyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ9Cc0L7QtNC10LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJ9Cc0L7QvdC40YLQvtGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAn0JzQuNGI0LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICfQnNGA0LXQttC+0LIg0LDQtNCw0L/RgtC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyOjpJUCBBZGRyZXNzJ30gPSAn0JzRgNC10LbQvtCyINCw0LTQsNC/0YLQtdGAOjpJUCDQkNC00YDQtdGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgb3ZlciBESENQJ30gPSAn0JzRgNC10LbQvtCyINCw0LTQsNC/0YLQtdGAOjpJUCDQvtGCIERIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAn0JzRgNC10LbQvtCyINCw0LTRgNC10YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzOjpHYXRld2F5J30gPSAn0JzRgNC10LbQvtCyINCw0LTRgNC10YE6OtCT0LXQudGCINC/0YDQtdGF0L7QtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3M6OlN1Ym5ldCBNYXNrJ30gPSAn0JzRgNC10LbQvtCyINCw0LTRgNC10YE6OtCc0LDRgdC60LAg0L3QsCDQv9C+0LTQvNGA0LXQttCw0YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ9Ch0L7RhNGC0YPQtdGAINGBINC+0YLQstC+0YDQtdC9INC60L7QtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpbmcgU3lzdGVtJ30gPSAn0J7Qv9C10YDQsNGG0LjQvtC90L3QsCDRgdC40YHRgtC10LzQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ9CU0YDRg9Cz0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAn0JTRgNGD0LPQviDQvtCx0L7RgNGD0LTQstCw0L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICdQQ01DSUEg0LrQsNGA0YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQREEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICfQm9C40YbQtdC90LfQuNGA0LDQvdC1INC90LAg0YLQvtGH0LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAn0JvQuNGG0LXQvdC30LjRgNCw0L3QtSDQt9CwINC/0YDQvtGG0LXRgdC+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJ9Cb0LjRhtC10L3Qt9C40YDQsNC90LUg0LfQsCDRgdGK0YDQstGK0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICfQm9C40YbQtdC90LfQuNGA0LDQvdC1INC30LAg0L/QvtGC0YDQtdCx0LjRgtC10LsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAn0J/QuNC70L7Rgi3QstC+0LTQsNGHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICfQn9C70LDQvdC40YDQsNC9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICfQn9GA0LjQvdGC0LXRgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9kdWN0aW9uJ30gPSAn0J/RgNC+0LTRg9C60YLQuNCy0LXQvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ9Ca0L7Qu9C40YfQtdGB0YLQstC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAn0J/QsNC80LXRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICfQoNC10LzQvtC90YIv0JLRitC30YHRgtCw0L3QvtCy0Y/QstCw0L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAn0JjQt9C70Y/Qt9GK0Lsg0L7RgiDRg9C/0L7RgtGA0LXQsdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJ9Cf0YDQtdCz0LvQtdC20LTQsNC9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAn0KDRg9GC0LXRgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAn0KHQutC10L3QtdGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDb25maWcgSXRlbXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAn0KMt0LLQviDQt9CwINGB0LjQs9GD0YDQvdC+0YHRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAn0KHQtdGA0LjQtdC9INCd0L7QvNC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAn0KHRitGA0LLRitGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ9Ch0YrRgNCy0YrRgNC90L4g0L/RgNC40LvQvtC20LXQvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAn0YHRitGA0LLRitGA0L3QsCDQntC/0LXRgC7RgS3QvNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgVmVyc2lvbnMnfSA9ICfQn9C+0LrQsNC20Lgg0JLQtdGA0YHQuNC40YLQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ9CV0LTQuNC90LjRh9C10L0g0LvQuNGG0LXQvdC3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAn0JzQsNGB0LrQsCDQvdCwINC/0L7QtNC80YDQtdC20LDRgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ9Ca0L7QvdGG0LXQvdGC0YDQsNGC0L7RgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ1RlbGNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICfQotC10YHRgi/QmtCw0YfQtdGB0YLQstC10L0g0LrQvtC90YLRgNC+0LsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICfQm9C40YbQtdC90LcsINC+0LPRgNCw0L3QuNGH0LXQvSDQv9C+INCy0YDQtdC80LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ1VTQiDQo9GB0YLRgNC+0LnRgdGC0LLQvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICfQndC10L7Qs9GA0LDQvdC40YfQtdC9INC70LjRhtC10L3Qtyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICfQmtC70LjQtdC90YLRgdC60Lgg0LjQvdGB0YLRgNGD0LzQtdC90YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICfQodC/0LXRhtC40LDQu9C90Lgg0L7QsdC10LzQvdC4INC/0YDQvtCz0YDQsNC80LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJ1dMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICdXTEFOINGC0L7Rh9C60LAg0LfQsCDQtNC+0YHRgtGK0L8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAn0JTQsNGC0LAg0L3QsCDQuNC30YLQuNGH0LDQvdC1INC90LAg0LPQsNGA0LDQvdGG0LjRj9GC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01Db25maWdJdGVtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBNYW5hZ2VtZW50J30gPSAn0KPQv9GA0LDQstC70LXQvdC40LUg0L3QsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90LjRgtC1INC10LTQuNC90LjRhtC4IENJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBjbGFzcyBkZWZpbml0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAn0JrQu9Cw0YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBDbGFzc2VzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIENsYXNzIGZyb20gdGhlIGxpc3QgdG8gY3JlYXRlIGEgbmV3IENvbmZpZyBJdGVtLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn0J/QvtGB0LvQtdC00L3QsCDQv9GA0L7QvNGP0L3QsCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0tSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn0J/QvtGB0LvQtdC00L3QviDQv9GA0L7QvNC10L3QtdC9INC+0YInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBOZXcgVGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICfQlNCwINGC0YrRgNGB0Lgg0Lgg0LIg0L/RgNC10LTQuNGI0L3QuNGC0LUg0LLQtdGA0YHQuNC4Pyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaFJlc3VsdFByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVUaW1lJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGxpc3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdG9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpdGggdGhpcyBjb25maWcgb3B0aW9uIGl0IGlzIHBvc3NpYmxlIHRvIGRlYWN0aXZlIHRoZSBmaXhlZCBvdmVydmlldyBjb250cm9sIGJhciBpbiB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBvdmVydmlldy4gSW4gc29tZSBzY2VuYXJpb3MgdGhpcyB3aWxsIGJlIG5lY2Vzc2FyeSwgZi5lLiBkdWUgdG8gc21hbGwgc2NyZWVuIHJlc29sdXRpb25zIGluIGNvbWJpbmF0aW9uIHdpdGggYSBsb3Qgb2YgY29uZmlnIGl0ZW0gY2xhc3Nlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9jc19JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmNzX0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICdBZHJlc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ0FkbWluaXN0cmHEjW7DrSBuw6FzdHJvaic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnWsOhbG9ob3bDoWPDrSBaYcWZw616ZW7DrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICdCZWFtZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICdCdWRvdmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpDb25maWdJdGVtQ3JlYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbURlbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkRlZmluaXRpb25VcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpEZXBsb3ltZW50U3RhdGVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpJbmNpZGVudFN0YXRlVXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TGlua0FkZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkxpbmtEZWxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpOYW1lVXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmFsdWVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWZXJzaW9uQ3JlYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmVyc2lvbkRlbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkF0dGFjaG1lbnRBZGQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpBdHRhY2htZW50RGVsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ1Byb2Nlc29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ0thbWVyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJ0thcGFjaXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBEZWZpbml0aW9uJ30gPSAnWm3Em25hIERlZmluaWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBvZiBkZWZpbml0aW9uIGZhaWxlZCEgU2VlIFN5c3RlbSBMb2cgZm9yIGRldGFpbHMuJ30gPSAnWm3Em25hIGRlZmluaWNlIG5lw7pzcMSbxaFuw6EhIFZpeiBTeXN0w6ltb3bDvSBMb2cgcHJvIHBvZHJvYm5vc3RpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICdVxb5pdmF0ZWxza8OpIEFwbGlrYWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJ1XFvml2YXRlbHNrw70gT3BlcmHEjW7DrSBTeXN0w6ltJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmN1cnJlbnQgVXNlcnMnfSA9ICdLb25rdXJlbsSNbsOtIFXFvml2YXRlbMOpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtLUFyZWEnfSA9ICdLb25maWcuIFBvbG/FvmthLVN0cnVrdHVyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgYXZhaWxhYmxlJ30gPSAnRG9zdHVwbsOpIEtvbmZpZy4gUG9sb8W+a3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHNob3duJ30gPSAnWm9icmF6ZW7DqSBLb25maWcuIFBvbG/Fvmt5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJ0RlbW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJ1N0b2xuw60nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICdMaWNlbmNlIFbDvXZvasOhxZllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJ0RvayBTdGFuaWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ0R1cGxpa2FjZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJ1Zlc3RhdsSbbsO9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICdQb2RuaWtvdsOhIExpY2VuY2UgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ0tvbmVjIFBsYXRub3N0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAnUHJvcGFkbnV0w6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRlFETid9ID0gJ0ZRRE4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICdwb2RsYcW+w60nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICdGcmVld2FyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICdHU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJ0dhdGV3YXknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnR3JhZmlja8OhIEthcnRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJ1Bldm7DvSBEaXNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzazo6Q2FwYWNpdHknfSA9ICdQZXZuw70gRGlzazo6S2FwYWNpdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlkZSBWZXJzaW9ucyd9ID0gJ1NrcsO9dCBWZXJ6ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnSVAgQWRyZXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0lQIHogREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBGYWNpbGl0eSd9ID0gJ0lUIFDFmcOtc2x1xaFlbnN0dsOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luYWN0aXZlJ30gPSAnTmVha3Rpdm7DrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ0luY2lkZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJ0RhdHVtIEluc3RhbGFjZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib3JkJ30gPSAnS2zDoXZlc25pY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ01vYmlsbsOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgQ2hhbmdlJ30gPSAnUG9zbGVkbsOtIHptxJtuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJ0xpY2VuxI1uw60gS2zDrcSNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5OjpFeHBpcmF0aW9uIERhdGUnfSA9ICdMaWNlbsSNbsOtIEtsw63EjTo6S29uZWMgUGxhdG5vc3RpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5OjpRdWFudGl0eSd9ID0gJ0xpY2VuxI1uw60gS2zDrcSNOjpNbm/FvnN0dsOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ0RydWggbGljZW5jZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ8OaZHLFvmJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnTWF4IHBvxI1ldCBqZWRuw6kgUG9sb8W+a3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICdNw6lkaXVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICdTdMWZZWRuw60gw7pyb3ZlxYgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICdNb2RlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ01vZGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICdNb25pdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnTXnFoSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICdTw63FpW92w70gQWRhcHRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXI6OklQIEFkZHJlc3MnfSA9ICdTw63FpW92w70gQWRhcHRlcjo6SVAgYWRyZXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgb3ZlciBESENQJ30gPSAnU8OtxaVvdsO9IEFkYXB0ZXI6OklQIHogREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICdTw63FpW92w6EgQWRyZXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzczo6R2F0ZXdheSd9ID0gJ1PDrcWlb3bDoSBBZHJlc2E6OkdhdGV3YXknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzOjpTdWJuZXQgTWFzayd9ID0gJ1PDrcWlb3bDoSBBZHJlc2E6Ok1hc2thIFBvZHPDrXTEmyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ1NvZnR3YXJlIHMgT3RldsWZZW7DvW0gS8OzZGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGluZyBTeXN0ZW0nfSA9ICdPcGVyYcSNbsOtIFN5c3TDqW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdPcGVyYcSNbsOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnSmluw6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAnSmluw6kgVnliYXZlbsOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJ0ZpbGnDoWxrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJ1BDTUNJQSBrYXJ0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQREEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICduYSBVemVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICduYSBQcm9jZXNvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAnbmEgU2VydmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnbmEgVcW+aXZhdGVsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnVGVsZWZvbiAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICdUZWxlZm9uIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICfFmMOtZMOtY8OtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICdOYXBsw6Fub3bDoW5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICdUaXNrw6FybmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvZHVjdGlvbid9ID0gJ1Byb2R1a8SNbsOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnTW5vxb5zdHbDrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnUmFjayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICdSQU0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnT3ByYXZhL09ibm92ZW7DrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnTWltbyBwcm92b3onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnUMWZZWhsZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJ03DrXN0bm9zdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICdSb3V0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ1NrZW5lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ29uZmlnIEl0ZW1zJ30gPSAnVnlobGVkYXQgS29uZmlnLiBQb2xvxb5reSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICdCZXpwZcSNbm9zdG7DrSBaYcWZw616ZW7DrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnU8OpcmlvdsOpIMSMw61zbG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnU2VydmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ1NlcnZlcm92w6EgQXBsaWthY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnU2VydmVyb3bDvSBPcGVyYcSNbsOtIFN5c3TDqW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBWZXJzaW9ucyd9ID0gJ1Vrw6F6YXQgVmVyemUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICdKZWRub2R1Y2jDoSBMaWNlbmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAnTWFza2EgUG9kc8OtdMSbJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ1N3aXRjaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ1RlbGNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICdUZXN0L0tvbnRyb2xhIGt2YWxpdHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ1N0YXYgTmFzYXplbsOtIHTDqXRvIEtvbmZpZy4gUG9sb8W+a3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGluY2lkZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdTdGF2IEluY2lkZW50dSB0w6l0byBLb25maWcuIFBvbG/Fvmt5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJ8SMYXNvdsSbIG9tZXplbsOhIExpY2VuY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ1VTQiBaYcWZw616ZW7DrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICdOZW9tZXplbsOhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ1XFvml2YXRlbHNrw70gTsOhc3Ryb2onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICdTdmF6a292w6EgTGljZW5jZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJ1DFmcOtc3R1cG92w70gQm9kIFdMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnS29uZWMgcGxhdG5vc3RpIHrDoXJ1a3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnUHJhY292acWhdMSbJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01Db25maWdJdGVtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBNYW5hZ2VtZW50J30gPSAnU3Byw6F2YSBLb25maWd1cmHEjW7DrWNoIFBvbG/FvmVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBjbGFzcyBkZWZpbml0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnS29uZmlnLiBQb2xvxb5rYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGFzcyd9ID0gJ1TFmcOtZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBDbGFzc2VzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIENsYXNzIGZyb20gdGhlIGxpc3QgdG8gY3JlYXRlIGEgbmV3IENvbmZpZyBJdGVtLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdKbcOpbm8gdMOpdG8gS29uZmlnLiBQb2xvxb5reSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIGFscmVhZHkgaW4gdXNlIGJ5IHRoZSBDb25maWdJdGVtcyB3aXRoIHRoZSBmb2xsb3dpbmcgTnVtYmVyKHMpOiAlcyd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUnfSA9ICdTdGF2IE5hc2F6ZW7DrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YXYgSW5jaWRlbnR1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0FrdHXDoWxuw60gU3RhdiBJbmNpZGVudHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1Bvc2xlZG7DrSB6bcSbbmEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1QcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAnQWt0dcOhbG7DrSBTdGF2IE5hc2F6ZW7DrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdQb3NsZWRuw60gem3Em25hIG9kJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgTmV3IFRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnSGxlZGF0IHRha8OpIHYgcMWZZWRjaG96w61jaCB2ZXJ6w61jaD8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2hSZXN1bHRQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlVGltZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCB2ZXJzaW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaXRoIHRoaXMgY29uZmlnIG9wdGlvbiBpdCBpcyBwb3NzaWJsZSB0byBkZWFjdGl2ZSB0aGUgZml4ZWQgb3ZlcnZpZXcgY29udHJvbCBiYXIgaW4gdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gb3ZlcnZpZXcuIEluIHNvbWUgc2NlbmFyaW9zIHRoaXMgd2lsbCBiZSBuZWNlc3NhcnksIGYuZS4gZHVlIHRvIHNtYWxsIHNjcmVlbiByZXNvbHV0aW9ucyBpbiBjb21iaW5hdGlvbiB3aXRoIGEgbG90IG9mIGNvbmZpZyBpdGVtIGNsYXNzZXMuJ30gPQogICAgICAgICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9jdF9JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmN0X0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ0VpbmEgZFwnYWRtaW5pc3RyYWNpw7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ0Rpc3Bvc2l0aXUgZGUgY8OycGllcyBkZSBzZWd1cmV0YXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmVhbWVyJ30gPSAnUHJvamVjdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbUNyZWF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkNvbmZpZ0l0ZW1EZWxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpEZWZpbml0aW9uVXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6RGVwbG95bWVudFN0YXRlVXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6SW5jaWRlbnRTdGF0ZVVwZGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkxpbmtBZGQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpMaW5rRGVsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TmFtZVVwZGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZhbHVlVXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmVyc2lvbkNyZWF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZlcnNpb25EZWxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnQ1BVJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ0PDoG1lcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICdDYXBhY2l0YXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIERlZmluaXRpb24nfSA9ICdDYW52aWFyIGRlZmluaWNpw7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIG9mIGRlZmluaXRpb24gZmFpbGVkISBTZWUgU3lzdGVtIExvZyBmb3IgZGV0YWlscy4nfSA9ICdDYW52aSBkZSBkZWZpbmljacOzIGhhIGZhbGxhdCEgVmV1cmUgZWwgcmVnaXN0cmUgZGVsIHNpc3RlbWEgcGVyIGEgbcOpcyBkZXRhbGxzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICdBcGxpY2FjacOzIGNsaWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdTaXN0ZW1hIE9wZXJhdGl1IGNsaWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25jdXJyZW50IFVzZXJzJ30gPSAnVXN1YXJpcyBjb25jdXJyZW50cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbS1BcmVhJ30gPSAnw4ByZWEtRWxlbWVudCBkZSBjb25maWd1cmFjacOzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBhdmFpbGFibGUnfSA9ICdFbGVtZW50cyBkZSBjb25maWd1cmFjacOzIGRpc3BvbmlibGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBzaG93bid9ID0gJ0VsZW1lbnRzIGRlIGNvbmZpZ3VyYWNpw7MgbW9zdHJhdHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAnRGVtbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnT3JkaW5hZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAnTGxpY8OobmNpYSBkZSBkZXNlbnZvbHVwYW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG9ja2luZyBTdGF0aW9uJ30gPSAnVW5pdGF0IGRcJ2V4cGFuc2nDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICdEdXBsaWNhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJ0ludGVncmF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICdMbGljw6huY2lhIGNvcnBvcmF0aXZhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ0RhdGEgZFwnZXhwaXJhY2nDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAnRXhwaXJhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGUUROJ30gPSAnRlFETic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJ0ZyZWV3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJ0dTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnUG9ydGEgZFwnZW5sbGHDpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICdBZGFwdGFkb3IgZ3LDoGZpYyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICdEaXNjIGR1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2s6OkNhcGFjaXR5J30gPSAnRGlzYyBkdXI6OkNhcGFjaXRhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaWRlIFZlcnNpb25zJ30gPSAnT2N1bHRhciB2ZXJzaW9ucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnRGlyZWNjacOzIElQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0lQIHBlciBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luYWN0aXZlJ30gPSAnSW5hY3RpdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICdEYXRhIGRcJ2luc3RhbMK3bGFjacOzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvcmQnfSA9ICdUZWNsYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ1BvcnTDoHRpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IENoYW5nZSd9ID0gJ8OabHRpbSBjYW52aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJ0NsYXUgZGUgbGxpY8OobmNpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleTo6RXhwaXJhdGlvbiBEYXRlJ30gPSAnQ2xhdSBkZSBsbGljw6huY2lhOjpEYXRhIGRcJ2V4cGlyYWNpw7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXk6OlF1YW50aXR5J30gPSAnQ2xhdSBkZSBsbGljw6huY2lhOjpDdWFudGl0YXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnVGlwdXMgZGUgbGxpY8OobmNpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ01hbnRlbmltZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnTm9tYnJlIG3DoHhpbSBkXCd1biBlbGVtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnTWVkaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnTWlkZGxld2FyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJ01vZGVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAnTcOyZGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICdNb25pdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnUmF0b2zDrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICdBZGFwdGFkb3IgZGUgeGFyeGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyOjpJUCBBZGRyZXNzJ30gPSAnQWRhcHRhZG9yIGRlIHhhcnhhOjpEaXJlY2Npw7MgSVAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyOjpJUCBvdmVyIERIQ1AnfSA9ICdBZGFwdGFkb3IgZGUgeGFyeGE6OklQIHBlciBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJ0RpcmVjY2nDsyBkZSB4YXJ4YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3M6OkdhdGV3YXknfSA9ICdEaXJlY2Npw7MgZGUgeGFyeGE6OlBvcnRhIGRcJ2VubGxhw6cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzOjpTdWJuZXQgTWFzayd9ID0gJ0RpcmVjY2nDsyBkZSB4YXJ4YTo6TcOgc2NhcmEgZGUgc3VieGFyeGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICdPcGVuIFNvdXJjZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpbmcgU3lzdGVtJ30gPSAnU2lzdGVtYSBPcGVyYXRpdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhdGl1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnQWx0cmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ0FsdGVyIGVxdWlwYW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnVGFyZ2V0YSBQQ01DSUEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnUERBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnUGVyIE5vZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ1BlciBQcm9jZXNzYWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAnUGVyIFNlcnZpZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnUGVyIFVzdWFyaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICdQaWxvdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnUGxhbmlmaWNhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnSW1wcmVzc29yYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9kdWN0aW9uJ30gPSAnUHJvZHVjY2nDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ0N1YW50aXRhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ1JhbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICdSZXBhcmFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICdSZXRpcmF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJ1JldmlzYXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICdFbmNhbWluYWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnRXNjw6BuZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENvbmZpZyBJdGVtcyd9ID0gJ0NlcmNhciBlbGVtZW50cyBkZSBjb25maWd1cmFjacOzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ0Rpc3Bvc2l0aXUgZGUgc2VndXJldGF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICdOb21icmUgZGUgc8OocmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJ1NlcnZpZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ0FwbGljYWNpw7Mgc2Vydmlkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnU2lzdGVtYSBPcGVyYXRpdSBzZXJ2aWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IFZlcnNpb25zJ30gPSAnTW9zdHJhciB2ZXJzaW9ucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ0xsaWPDqG5jaWEgSW5kaXZpZHVhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJ03DoHNjYXJhIGRlIHN1YnhhcnhhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ0NvbW11dGFkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICdUZWxjbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAnUHJvdmFyL1FBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkZXBsb3ltZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdMXCdlc3RhdCBkZWwgZGVzcGxlZ2FtZW50IGRcYXF1ZXN0IGVsZW1lbnQgZGUgY29uZmlndXJhY2nDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ0xcJ2VzdGF0IGRlIGxcJ2luY2lkZW50IGRcJ2FxdWVzdCBlbGVtZW50IGRlIGNvbmZpZ3VyYWNpw7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnUmVzdHJpY2Npw7MgZGUgdGVtcHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ0Rpc3Bvc2l0aXUgVVNCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJ0lswrdsaW1pdGF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ0VpbmEgZFwndXN1YXJpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvbHVtZSBMaWNlbmNlJ30gPSAnTGxpY8OobmNpYSBwZXIgdm9sdW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJ1dMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICdQdW50IGRcJ2FjY8OpcyBXTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJ0RhdGEgZGUgZmkgZGUgbGEgZ2FyYW50aWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01Db25maWdJdGVtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBNYW5hZ2VtZW50J30gPSAnR2VzdGnDsyBkXCdlbGVtZW50cyBkZSBjb25maWd1cmFjacOzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBjbGFzcyBkZWZpbml0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnRWxlbWVudCBkZSBjb25maWd1cmFjacOzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnQ2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnRWwgbm9tIGRcJ2FxdWVzdCBlbGVtZW50IGRlIGNvbmZpZ3VyYWNpw7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSd9ID0gJ0VzdGF0IGRlbCBkZXNwbGVnYW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhdCBkZSBsXCdpbmNpZGVudCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhdCBhY3R1YWwgZGUgbFwnaW5jaWRlbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgQ2hhbmdlZCd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0tSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICdFc3RhdCBhY3R1YWwgZGVsIGRlc3BsZWdhbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfDmmx0aW0gY2FudmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnw5psdGltIGNhbnZpIHBlcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoLVRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBOZXcgVGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnQ2VyY2FyIHRhbWLDqSBlbiB2ZXJzaW9ucyBhbnRlcmlvcnM/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoUmVzdWx0UHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZVRpbWUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlua2VkIE9iamVjdHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCB2ZXJzaW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgQnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlZCBPbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNpemUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvciBoaWRlIHRoZSBjb250ZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0b24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kYV9JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRhX0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICdBZHJlc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICdBZG1pbiB2w6Zya3TDuGplcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnQmFja3VwIGVuaGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ0JlYW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJ0J5Z25pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpDb25maWdJdGVtQ3JlYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbURlbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkRlZmluaXRpb25VcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpEZXBsb3ltZW50U3RhdGVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpJbmNpZGVudFN0YXRlVXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TGlua0FkZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkxpbmtEZWxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpOYW1lVXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmFsdWVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWZXJzaW9uQ3JlYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmVyc2lvbkRlbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkF0dGFjaG1lbnRBZGQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpBdHRhY2htZW50RGVsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ0NQVSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICdLYW1lcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICdLYXBhY2l0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIERlZmluaXRpb24nfSA9ICfDhm5kcmUgZGVmaW5pdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2Ugb2YgZGVmaW5pdGlvbiBmYWlsZWQhIFNlZSBTeXN0ZW0gTG9nIGZvciBkZXRhaWxzLid9ID0gJ8OGbmRyaW5nIGFmIGRlZmluaXRpb24gZmVqbGVkZSEgU2UgU3lzdGVtIExvZyBmb3IgZGV0YWxqZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJ0tsaWVudCBhcGxpa2F0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJ0tsaWVudCBPUyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25jdXJyZW50IFVzZXJzJ30gPSAnU2FtdGlkaWdlIGJydWdlcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0tQXJlYSd9ID0gJ0NvbmZpZyBJdGVtLW9tcsOlZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIGF2YWlsYWJsZSd9ID0gJ1RpbGfDpm5nZWxpZ2UgQ29uZmlnIEl0ZW1zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBzaG93bid9ID0gJ1ZpcyBDb25maWcgSXRlbXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAnRGVtbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnRGVza3RvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ1VkdmlrbGVyIGxpY2Vucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICdEb2NraW5nIFN0YXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnRHVwbGlrZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICdFbWJlZGRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAnRW50ZXJwcmlzZSBsaWNlbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnVWRsw7hic2RhdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ1VkbMO4YmV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZRRE4nfSA9ICdGUUROJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zsb29yJ30gPSAnRXRhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICdGcmVld2FyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICdHU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJ0dhdGV3YXknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnR3JhZmlra29ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICdIYXJkZGlzayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2s6OkNhcGFjaXR5J30gPSAnSGFyZGRpc2s6OkthcGFjaXRldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaWRlIFZlcnNpb25zJ30gPSAnU2tqdWwgdmVyc2lvbmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdJUCBhZHJlc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0lQIHZpYSBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnSVQgZmFjaWxpdGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luYWN0aXZlJ30gPSAnSW5ha3Rpdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ0luY2lkZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJ0luc3RhbGxhdGlvbnNkYXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvcmQnfSA9ICdUYXN0YXR1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICdMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnTGFwdG9wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgQ2hhbmdlJ30gPSAnU2lkc3Qgw6ZuZHJldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJ0xpY2Vuc27DuGdsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleTo6RXhwaXJhdGlvbiBEYXRlJ30gPSAnTGljZW5zbsO4Z2xlOjpVZGzDuGJzZGF0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleTo6UXVhbnRpdHknfSA9ICdMaWNlbnNuw7hnbGU6Ok3Dpm5nZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnTGljZW5zdHlwZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ1ZlZGxpZ2Vob2xkZWxzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ01heGltdW0gYW50YWwgYWYgZXQgZWxlbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ01lZGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICdNaWRkbGV3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnTW9kZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICdNb2RlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnTW9uaXRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3VzZSd9ID0gJ011cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICdOZXRrb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgQWRkcmVzcyd9ID0gJ05ldGtvcnQ6OklQIGFkcmVzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyOjpJUCBvdmVyIERIQ1AnfSA9ICdOZXRrb3J0OjpJUCB2aWEgREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICdOZXR2w6Zya3NhZHJlc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzczo6R2F0ZXdheSd9ID0gJ05ldHbDpnJrc2FkcmVzc2U6OkdhdGV3YXknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzOjpTdWJuZXQgTWFzayd9ID0gJ05ldHbDpnJrc2FkcmVzc2U6OlN1Ym5ldCBtYXNrZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ09wZW4gU291cmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGluZyBTeXN0ZW0nfSA9ICdPUyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhdGlvbmVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnQW5kZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAnQW5kZXQgdWRzdHlyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJ1N0aWtrb250YWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnUENNQ0lBIGtvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnUERBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnUHIgbm9kZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnUHIgcHJvY2Vzc29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICdQciBzZXJ2ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICdQciBicnVnZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ1RlbGVmb24gMSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnVGVsZWZvbiAyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnUGlsb3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJ1BsYW5sYWd0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICdQcmludGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2R1Y3Rpb24nfSA9ICdQcm9kdWt0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnTcOmbmdkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnUmFjayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICdSQU0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnUmVwZXJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnUGVyc2lvbmVyZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnQW5tZWxkZWxzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnUnVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJ1JvdXRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnU2thbm5lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ29uZmlnIEl0ZW1zJ30gPSAnU8O4ZyBDb25maWcgSXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICdTaWtrZXJoZWRzZW5oZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJ1NlcmllbnVtbWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJ1NlcnZlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgQXBwbGljYXRpb24nfSA9ICdTZXJ2ZXIgYXBsaWthdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICdTZXJ2ZXIgT1MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBWZXJzaW9ucyd9ID0gJ1ZpcyB2ZXJzaW9uZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICdFbmtlbHRsaWNlbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICdTdWJuZXQgbWFza2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnU3dpdGNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnVGVsY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJ1Rlc3QvUUEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ0RlcGxveW1lbnQgdGlsc3RhbmQgZm9yIGRlbm5lIENvbmZpZyBpdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnSW5jaWRlbnQgdGlsc3RhbmQgZm9yIGRlbm5lIENvbmZpZyBJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJ1RpZHNiZWdyw6Zuc2V0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICdVU0IgZW5oZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnVW5iZWdyw6Zuc2V0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ0JydWdlciB2w6Zya3TDuGplcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJ1ZvbHVtZW4gTGljZW5zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICdXTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnV0xBTiBBY2Nlc3MgUG9pbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnVWRsw7hic2RhdG8gZm9yIGdhcmFudGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnQXJiZWpkc3BsYWRzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01Db25maWdJdGVtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBNYW5hZ2VtZW50J30gPSAnQ29uZmlnIEl0ZW0gc3R5cmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgY2xhc3MgZGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSd9ID0gJ0NvbmZpZyBJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnS2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnTmF2bmV0IHDDpSBkZW5uZSBDb25maWcgSXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIGFscmVhZHkgaW4gdXNlIGJ5IHRoZSBDb25maWdJdGVtcyB3aXRoIHRoZSBmb2xsb3dpbmcgTnVtYmVyKHMpOiAlcyd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUnfSA9ICdEZXBsb3ltZW50IHRpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnSW5jaWRlbnQgdGlsc3RhbmQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnTnV2w6ZyZW5kZSBJbmNpZGVudCB0aWxzdGFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnU2lkc3Qgw6ZuZHJldCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0tSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICdOdXbDpnJlbmRlIGRlcGxveW1lbnQgc3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ1NpZHN0IMOmbmRyZXQgYWYnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBOZXcgVGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnU8O4ZyBvZ3PDpSBpIHRpZGxpZ2VyZSB2ZXJzaW9uZXI/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoUmVzdWx0UHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZVRpbWUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZCd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0b24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2l0aCB0aGlzIGNvbmZpZyBvcHRpb24gaXQgaXMgcG9zc2libGUgdG8gZGVhY3RpdmUgdGhlIGZpeGVkIG92ZXJ2aWV3IGNvbnRyb2wgYmFyIGluIHRoZSBBZ2VudElUU01Db25maWdJdGVtIG92ZXJ2aWV3LiBJbiBzb21lIHNjZW5hcmlvcyB0aGlzIHdpbGwgYmUgbmVjZXNzYXJ5LCBmLmUuIGR1ZSB0byBzbWFsbCBzY3JlZW4gcmVzb2x1dGlvbnMgaW4gY29tYmluYXRpb24gd2l0aCBhIGxvdCBvZiBjb25maWcgaXRlbSBjbGFzc2VzLid9ID0KICAgICAgICAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kZV9JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICdBZHJlc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICdBZG1pbiBUb29sJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICdCYWNrdXAgR2Vyw6R0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ0JlYW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJ0dlYsOkdWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbUNyZWF0ZSd9ID0gJ05ldWVzIENvbmZpZ0l0ZW0gKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkNvbmZpZ0l0ZW1EZWxldGUnfSA9ICdDb25maWdJdGVtIChJRD0lcykgZ2Vsw7ZzY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6RGVmaW5pdGlvblVwZGF0ZSd9ID0gJ0RlZmluaXRpb24gZGVzIENvbmZpZ0l0ZW1zIGFrdHVhbGlzaWVydCAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6RGVwbG95bWVudFN0YXRlVXBkYXRlJ30gPSAnVmVyd2VuZHVuZ3NzdGF0dXMgZ2XDpG5kZXJ0IChuZXU9JXM7IGFsdD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpJbmNpZGVudFN0YXRlVXBkYXRlJ30gPSAnVm9yZmFsbHNzdGF0dXMgZ2XDpG5kZXJ0IChuZXU9JXM7IGFsdD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpMaW5rQWRkJ30gPSAnTGluayBhdWYgJXMgKFR5cD0lcykgaGluenVnZWbDvGd0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TGlua0RlbGV0ZSd9ID0gJ0xpbmsgYXVmICVzIChUeXA9JXMpIGdlbMO2c2NodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6Ok5hbWVVcGRhdGUnfSA9ICdOYW1lIGdlw6RuZGVydCAobmV1PSVzOyBhbHQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmFsdWVVcGRhdGUnfSA9ICdBdHRyaWJ1dCAlcyB2b24gIiVzIiBhdWYgIiVzIiBnZcOkbmRlcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWZXJzaW9uQ3JlYXRlJ30gPSAnTmV1ZSBWZXJzaW9uIGVyemV1Z3QgKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZlcnNpb25EZWxldGUnfSA9ICdWZXJzaW9uICVzIGdlbMO2c2NodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkF0dGFjaG1lbnRBZGQnfSA9ICdBbmhhbmcgKCVzKSBoaW56dWdlZsO8Z3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpBdHRhY2htZW50RGVsZXRlJ30gPSAnQW5oYW5nICglcykgZ2Vsw7ZzY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ0NQVSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICdLYW1lcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICdLYXBheml0w6R0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBEZWZpbml0aW9uJ30gPSAnRGVmaW5pdGlvbiDDpG5kZXJuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBvZiBkZWZpbml0aW9uIGZhaWxlZCEgU2VlIFN5c3RlbSBMb2cgZm9yIGRldGFpbHMuJ30gPSAnw4RuZGVybiBkZXIgRGVmaW5pdGlvbiBmZWhsZ2VzY2hsYWdlbiEgSW0gU3lzdGVtIExvZyBmaW5kZW4gU2llIHdlaXRlcmUgSW5mb3JtYXRpb25lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAnQ2xpZW50IEFud2VuZHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdDbGllbnQgQmV0cmllYnNzeXN0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uY3VycmVudCBVc2Vycyd9ID0gJ0dsZWljaHplaXRpZ2UgVXNlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbS1BcmVhJ30gPSAnQ29uZmlnIEl0ZW0tQmVyZWljaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgYXZhaWxhYmxlJ30gPSAnQ29uZmlnIEl0ZW1zIHZlcmbDvGdiYXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHNob3duJ30gPSAnQ29uZmlnIEl0ZW1zIGFuZ2V6ZWlndCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICdEZW1vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICdEZXNrdG9wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAnRW50d2lja2xlciBMaXplbnonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG9ja2luZyBTdGF0aW9uJ30gPSAnRG9ja2luZyBTdGF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ0R1cGxpemllcmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnRW1iZWRkZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnTGVlcmUgRmVsZGVyIGJlbGFzc2VuIGRlbiBha3R1ZWxsZW4gV2VydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICdFbnRlcnByaXNlIExpemVueic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICdBYmxhdWZkYXR1bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAnQWJnZWxhdWZlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGUUROJ30gPSAnRlFETic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ0V0YWdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnRnJlZXdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnR1NNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICdHYXRld2F5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJ0dyYWZpayBBZGFwdGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJ0Zlc3RwbGF0dGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrOjpDYXBhY2l0eSd9ID0gJ0Zlc3RwbGF0dGU6OkthcGF6aXTDpHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlkZSBWZXJzaW9ucyd9ID0gJ1ZlcnNpb25lbiBhdXNibGVuZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdJUCBBZGRyZXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICdJUCDDvGJlciBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnSVQgRWlucmljaHR1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5hY3RpdmUnfSA9ICdJbmFrdGl2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnVm9yZmFsbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICdJbnN0YWxsYXRpb25zZGF0dW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9yZCd9ID0gJ1Rhc3RhdHVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICdMYXB0b3AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBDaGFuZ2UnfSA9ICdMZXR6dGUgw4RuZGVydW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnTGl6ZW56c2NobMO8c3NlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleTo6RXhwaXJhdGlvbiBEYXRlJ30gPSAnTGl6ZW56c2NobMO8c3NlbDo6QWJsYXVmZGF0dW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXk6OlF1YW50aXR5J30gPSAnTGl6ZW56c2NobMO8c3NlbDo6TWVuZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnTGl6ZW56dHlwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAnSW4gV2FydHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ01heGltYWxlIEFuemFobCBlaW5lcyBFbGVtZW50cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ01lZGl1bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnTWlkZGxld2FyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJ01vZGVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAnTW9kZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJ01vbml0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICdNYXVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJ05ldHp3ZXJrIEFkYXB0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyOjpJUCBBZGRyZXNzJ30gPSAnTmV0endlcmsgQWRhcHRlcjo6SVAgQWRkcmVzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyOjpJUCBvdmVyIERIQ1AnfSA9ICdOZXR6d2VyayBBZGFwdGVyOjpJUCDDvGJlciBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJ05ldHp3ZXJrIEFkZHJlc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzczo6R2F0ZXdheSd9ID0gJ05ldHp3ZXJrIEFkZHJlc3NlOjpHYXRld2F5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzczo6U3VibmV0IE1hc2snfSA9ICdOZXR6d2VyayBBZGRyZXNzZTo6U3VibmV0eiBNYXNrZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ09wZW4gU291cmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGluZyBTeXN0ZW0nfSA9ICdCZXRyaWVic3N5c3RlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhdGl2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnU29uc3RpZ2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ1NvbnN0aWdlIEF1c3N0YXR0dW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJ0Fuc2NobHVzc2Rvc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICdQQ01DSUEgS2FydGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnUERBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnUHJvIEtub3Rlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnUHJvIFByb3plc3Nvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAnUHJvIFNlcnZlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJ1BybyBCZW51dHplcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnVGVsZWZvbiAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICdUZWxlZm9uIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICdQaWxvdGJldHJpZWInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJ0dlcGxhbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJ0RydWNrZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvZHVjdGlvbid9ID0gJ1Byb2R1a3Rpdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ01lbmdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICdSYWNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ0FyYmVpdHNzcGVpY2hlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICdJbiBSZXBhcmF0dXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJ0F1w59lciBEaWVuc3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnVW50ZXIgUmV2aWV3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICdSYXVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJ1JvdXRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnU2Nhbm5lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ29uZmlnIEl0ZW1zJ30gPSAnQ29uZmlnIEl0ZW0gU3VjaGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnU2ljaGVydGhlaXRzZ2Vyw6R0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICdTZXJpZW5udW1tZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnU2VydmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ1NlcnZlciBBbndlbmR1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnU2VydmVyIEJldHJpZWJzc3lzdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgVmVyc2lvbnMnfSA9ICdWZXJzaW9uZW4gZWluYmxlbmRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ0VpbnplbGxpemVueic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJ1N1Ym5ldHogTWFza2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnU3dpdGNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnVGVsa28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJ1Rlc3QvUVMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ0RlciBWZXJ3ZW5kdW5nc3N0YXR1cyBkaWVzZXMgQ29uZmlnIEl0ZW1zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnRGVyIFZvcmZhbGxzc3RhdHVzIGRpZXNlcyBDb25maWcgSXRlbXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnWmVpdGxpY2ggYmVncmVuenQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ1VTQiBHZXLDpHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnVW5saW1pdGllcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnVXNlciBUb29sJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvbHVtZSBMaWNlbmNlJ30gPSAnVm9sdW1lbiBMaXplbnonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJ1dMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICdXTEFOIEFjY2VzcyBQb2ludCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICdHYXJhbnRpZSBBYmxhdWZkYXR1bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrcGxhY2UnfSA9ICdBcmJlaXRzcGxhdHonOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdDb25maWcgSXRlbSBWZXJ3YWx0dW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBjbGFzcyBkZWZpbml0aW9uJ30gPSAnS2xhc3Nlbi1EZWZpbml0aW9uIMOkbmRlcm4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0nfSA9ICdDb25maWcgSXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGFzcyd9ID0gJ0tsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uJ30gPSAnRGVmaW5pdGlvbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBDbGFzc2VzJ30gPSAnRmlsdGVyIGbDvHIgS2xhc3Nlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICdXw6RobGVuIFNpZSBlaW5lIEtsYXNzZSBhdXMgZGVyIExpc3RlIGF1cyB1bSBlaW4gbmV1ZXMgQ29uZmlnIEl0ZW0genUgZXJzdGVsbGVuLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdEZXIgTmFtZSBkaWVzZXMgQ29uZmlnIEl0ZW1zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICdOYW1lIHdpcmQgYmVyZWl0cyB2b24gZGVuIENvbmZpZ0l0ZW1zIG1pdCBkZW4gZm9sZ2VuZGVuIE51bW1lcm4gdmVyd2VuZGV0OiAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnVmVyd2VuZHVuZ3NzdGF0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdWb3JmYWxsc3N0YXR1cyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdLb250ZXh0LUVpbnRzdGVsbHVuZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBwZXIgcGFnZSd9ID0gJ0NvbmZpZyBJdGVtcyBwcm8gU2VpdGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIFR5cGUnfSA9ICdWZXJ3ZW5kdW5nc3N0YXR1cy1UeXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0FrdHVlbGxlciBWb3JmYWxsc3N0YXR1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICdBa3R1ZWxsZXIgVm9yZmFsbHNzdGF0dXMtVHlwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1p1bGV0enQgZ2XDpG5kZXJ0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICdDb25maWdJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0tSW5mbyd9ID0gJ0NvbmZpZ0l0ZW0tSW5mbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICdBa3R1ZWxsZXIgVmVyd2VuZHVuZ3NzdGF0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnWnVsZXR6dCBnZcOkbmRlcnQgdm9uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICdBdWNoIGluIGZyw7xoZXJlbiBWZXJzaW9uZW4gc3VjaGVuPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaFJlc3VsdFByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVUaW1lJ30gPSAnRXJzdGVsbHplaXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICdDb25maWd1cmF0aW9uIEl0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICdaZWlnZSBudXIgZWluZSBWZXJzaW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnWmVpZ2UgYWxsZSBWZXJzaW9uZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJ1ZlcnNpb25zLVZvcmZhbGxzdGF0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICdWZXJzaW9uc251bW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb25zLURldGFpbHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICdFaWdlbnNjaGFmdCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICdQcsO8ZmUgTmFtZW4gYXVmIEVpbmRldXRpZ2tlaXQgaW5uZXJoYWxiIGRlciBzZWxiZW4gQ29uZmlnSXRlbS1LbGFzc2Ugb2RlciBnbG9iYWwsIGQuaC4gZXMgd2VyZGVuIGFsbGUgQ29uZmlnSXRlbXMgamVnbGljaGVyIENvbmZpZ0l0ZW0tS2xhc3NlIGJlaSBkZXIgUHLDvGZ1bmcgYXVmIGVpbmVuIGVpbmRldXRpZ2VuIE5hbWVuIGJlcsO8Y2tzaWNodGlndC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnQ29uZmlnIEl0ZW1zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZSd9ID0gJ0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCBwcm8gU2VpdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGFzIFN0YW5kYXJkLVN1Ym9iamVjdCBkZXIgS2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZCd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnKERlLSlBa3RpdmllcnQgZGllIEZ1bmt0aW9uYWxpdMOkdCB1bSBDb25maWdJdGVtcyBhdWYgZWluZGV1dGlnZSBOYW1lbiB6dSDDvGJlcnByw7xmZW4uIEJldm9yIFNpZSBkaWVzZSBPcHRpb24gYWt0aXZpZXJlbiwgc29sbHRlbiBTaWUgSWhyIFN5c3RlbSBhdWYgYmVyZWl0cyB2b3JoYW5kZW5lIENvbmZpZ0l0ZW1zIG1pdCBnbGVpY2hlbSBOYW1lbiDDvGJlcnByw7xmZW4uIFNpZSBrw7ZubmVuIGRpZXMgbWl0IEhpbGZlIGRlcyBzY3JpcHRzIGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwgdHVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdPYmpla3QtQmFja2VuZCBNb2R1bCBSZWdpc3RyYXRpb24gZGVzIEltcG9ydC9FeHBvcnQgTW9kdWxzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0b24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2l0aCB0aGlzIGNvbmZpZyBvcHRpb24gaXQgaXMgcG9zc2libGUgdG8gZGVhY3RpdmUgdGhlIGZpeGVkIG92ZXJ2aWV3IGNvbnRyb2wgYmFyIGluIHRoZSBBZ2VudElUU01Db25maWdJdGVtIG92ZXJ2aWV3LiBJbiBzb21lIHNjZW5hcmlvcyB0aGlzIHdpbGwgYmUgbmVjZXNzYXJ5LCBmLmUuIGR1ZSB0byBzbWFsbCBzY3JlZW4gcmVzb2x1dGlvbnMgaW4gY29tYmluYXRpb24gd2l0aCBhIGxvdCBvZiBjb25maWcgaXRlbSBjbGFzc2VzLid9ID0KICAgICAgICAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9lbl9JVFNNQ29uZmlnSXRlbS5wbSAtIHRoZSBlbmdsaXNoIHRyYW5zbGF0aW9uIG9mIElUU01Db25maWdJdGVtCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplbl9JVFNNQ29uZmlnSXRlbTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgbXkgJExhbmcgPSAkU2VsZi0+e1RyYW5zbGF0aW9ufTsKCiAgICByZXR1cm4gaWYgcmVmICRMYW5nIG5lICdIQVNIJzsKCiAgICAkTGFuZy0+eydDSUhpc3Rvcnk6OkNvbmZpZ0l0ZW1DcmVhdGUnfSAgICAgICAgICAgID0gJ05ldyBDb25maWdJdGVtIChJRD0lcyknOwogICAgJExhbmctPnsnQ0lIaXN0b3J5OjpWZXJzaW9uQ3JlYXRlJ30gICAgICAgICAgICAgICA9ICdOZXcgdmVyc2lvbiAoSUQ9JXMpJzsKICAgICRMYW5nLT57J0NJSGlzdG9yeTo6RGVwbG95bWVudFN0YXRlVXBkYXRlJ30gICAgICAgPSAnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXM7IG9sZD0lcyknOwogICAgJExhbmctPnsnQ0lIaXN0b3J5OjpJbmNpZGVudFN0YXRlVXBkYXRlJ30gICAgICAgICA9ICdJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXM7IG9sZD0lcyknOwogICAgJExhbmctPnsnQ0lIaXN0b3J5OjpDb25maWdJdGVtRGVsZXRlJ30gICAgICAgICAgICA9ICdDb25maWdJdGVtIChJRD0lcykgZGVsZXRlZCc7CiAgICAkTGFuZy0+eydDSUhpc3Rvcnk6OkxpbmtBZGQnfSAgICAgICAgICAgICAgICAgICAgID0gJ0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJzsKICAgICRMYW5nLT57J0NJSGlzdG9yeTo6TGlua0RlbGV0ZSd9ICAgICAgICAgICAgICAgICAgPSAnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCc7CiAgICAkTGFuZy0+eydDSUhpc3Rvcnk6OkRlZmluaXRpb25VcGRhdGUnfSAgICAgICAgICAgID0gJ0NvbmZpZ0l0ZW1zXCcgZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknOwogICAgJExhbmctPnsnQ0lIaXN0b3J5OjpOYW1lVXBkYXRlJ30gICAgICAgICAgICAgICAgICA9ICdOYW1lIHVwZGF0ZWQgKG5ldz0lczsgb2xkPSVzKSc7CiAgICAkTGFuZy0+eydDSUhpc3Rvcnk6OlZhbHVlVXBkYXRlJ30gICAgICAgICAgICAgICAgID0gJ0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJzsKICAgICRMYW5nLT57J0NJSGlzdG9yeTo6VmVyc2lvbkRlbGV0ZSd9ICAgICAgICAgICAgICAgPSAnVmVyc2lvbiAlcyBkZWxldGVkJzsKCiAgICAkTGFuZy0+eydEZXZlbG9wZXIgTGljZW5jZSd9ICAgICAgICAgICAgICAgICAgICAgID0gJ0RldmVsb3BlciBMaWNlbnNlJzsKICAgICRMYW5nLT57J0VudGVycHJpc2UgTGljZW5jZSd9ICAgICAgICAgICAgICAgICAgICAgPSAnRW50ZXJwcmlzZSBMaWNlbnNlJzsKICAgICRMYW5nLT57J1NpbmdsZSBMaWNlbmNlJ30gICAgICAgICAgICAgICAgICAgICAgICAgPSAnU2luZ2xlIExpY2Vuc2UnOwogICAgJExhbmctPnsnVm9sdW1lIExpY2VuY2UnfSAgICAgICAgICAgICAgICAgICAgICAgICA9ICdWb2x1bWUgTGljZW5zZSc7CiAgICAkTGFuZy0+eydMaWNlbmNlIFR5cGUnfSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ0xpY2Vuc2UgVHlwZSc7CiAgICAkTGFuZy0+eydMaWNlbmNlIEtleSd9ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ0xpY2Vuc2UgS2V5JzsKICAgICRMYW5nLT57J0xpY2VuY2UgS2V5OjpRdWFudGl0eSd9ICAgICAgICAgICAgICAgICAgPSAnTGljZW5zZSBLZXk6OlF1YW50aXR5JzsKICAgICRMYW5nLT57J0xpY2VuY2UgS2V5OjpFeHBpcmF0aW9uIERhdGUnfSAgICAgICAgICAgPSAnTGljZW5zZSBLZXk6OkV4cGlyYXRpb24gRGF0ZSc7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9lbl9DQV9JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVuX0NBX0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkNvbmZpZ0l0ZW1DcmVhdGUnfSA9ICdOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbURlbGV0ZSd9ID0gJ0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6RGVmaW5pdGlvblVwZGF0ZSd9ID0gJ0NvbmZpZ0l0ZW1zXCcgZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpEZXBsb3ltZW50U3RhdGVVcGRhdGUnfSA9ICdEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lczsgb2xkPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkluY2lkZW50U3RhdGVVcGRhdGUnfSA9ICdJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXM7IG9sZD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpMaW5rQWRkJ30gPSAnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpMaW5rRGVsZXRlJ30gPSAnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6Ok5hbWVVcGRhdGUnfSA9ICdOYW1lIHVwZGF0ZWQgKG5ldz0lczsgb2xkPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZhbHVlVXBkYXRlJ30gPSAnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWZXJzaW9uQ3JlYXRlJ30gPSAnTmV3IHZlcnNpb24gKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZlcnNpb25EZWxldGUnfSA9ICdWZXJzaW9uICVzIGRlbGV0ZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2Ugb2YgZGVmaW5pdGlvbiBmYWlsZWQhIFNlZSBTeXN0ZW0gTG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmN1cnJlbnQgVXNlcnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0tQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgYXZhaWxhYmxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBzaG93bid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ0RldmVsb3BlciBMaWNlbnNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ0VudGVycHJpc2UgTGljZW5zZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGUUROJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zsb29yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrOjpDYXBhY2l0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaWRlIFZlcnNpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luYWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib3JkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBDaGFuZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICdMaWNlbnNlIEtleSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleTo6RXhwaXJhdGlvbiBEYXRlJ30gPSAnTGljZW5zZSBLZXk6OkV4cGlyYXRpb24gRGF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleTo6UXVhbnRpdHknfSA9ICdMaWNlbnNlIEtleTo6UXVhbnRpdHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnTGljZW5zZSBUeXBlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3VzZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyOjpJUCBBZGRyZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgb3ZlciBESENQJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3M6OkdhdGV3YXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzOjpTdWJuZXQgTWFzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpbmcgU3lzdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2R1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjYW5uZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENvbmZpZyBJdGVtcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IFZlcnNpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnU2luZ2xlIExpY2Vuc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvbHVtZSBMaWNlbmNlJ30gPSAnVm9sdW1lIExpY2Vuc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01Db25maWdJdGVtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBjbGFzcyBkZWZpbml0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIHRvIG92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJtaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuY2VsJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIENsYXNzZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGludCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWF0Y2hlcyBmb3VuZC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbmNlbCAmIGNsb3NlIHdpbmRvdyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBDb250ZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1pvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGV0aW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1pvb20gdmlldyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2Ugc2VhcmNoIG9wdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0dGluZ3MnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBDaGFuZ2VkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRhdGEgZm91bmQuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmtlZC1PYmplY3QnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaC1UZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgTmV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBUZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgTmV3IFRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIHRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgY2hhbmdlcyBpbiB0ZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYW5vdGhlciBhdHRyaWJ1dGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dHB1dCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGUuIGcuIDEwKjUxNTUgb3IgMTA1NjU4KiknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtb3ZlIHRoaXMgZW50cnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtb3ZlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoUmVzdWx0UHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVUaW1lJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmtlZCBPYmplY3RzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgT24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzaXplJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb3IgaGlkZSB0aGUgY29udGVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWx1ZSd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FDTCBtb2R1bGUgdGhhdCBhbGxvd3MgY2xvc2luZyBwYXJlbnQgdGlja2V0cyBvbmx5IGlmIGFsbCBpdHMgY2hpbGRyZW4gYXJlIGFscmVhZHkgY2xvc2VkICgiU3RhdGUiIHNob3dzIHdoaWNoIHN0YXRlcyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgdGhlIHBhcmVudCB0aWNrZXQgdW50aWwgYWxsIGNoaWxkIHRpY2tldHMgYXJlIGNsb3NlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGl2YXRlcyBUeXBlQWhlYWQgZm9yIHRoZSBhdXRvY29tcGxldGUgZmVhdHVyZSwgdGhhdCBlbmFibGVzIHVzZXJzIHRvIHR5cGUgaW4gd2hhdGV2ZXIgc3BlZWQgdGhleSBkZXNpcmUsIHdpdGhvdXQgbG9zaW5nIGFueSBpbmZvcm1hdGlvbi4gT2Z0ZW4gdGhpcyBtZWFucyB0aGF0IGtleXN0cm9rZXMgZW50ZXJlZCB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbiBpbW1lZGlhdGVseS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0aXZhdGVzIGEgYmxpbmtpbmcgbWVjaGFuaXNtIG9mIHRoZSBxdWV1ZSB0aGF0IGNvbnRhaW5zIHRoZSBvbGRlc3QgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3RpdmF0ZXMgbG9zdCBwYXNzd29yZCBmZWF0dXJlIGZvciBhZ2VudHMsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGl2YXRlcyBsb3N0IHBhc3N3b3JkIGZlYXR1cmUgZm9yIGN1c3RvbWVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0aXZhdGVzIHN1cHBvcnQgZm9yIGN1c3RvbWVyIGdyb3Vwcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0aXZhdGVzIHRoZSBhcnRpY2xlIGZpbHRlciBpbiB0aGUgem9vbSB2aWV3IHRvIHNwZWNpZnkgd2hpY2ggYXJ0aWNsZXMgc2hvdWxkIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3RpdmF0ZXMgdGhlIGF2YWlsYWJsZSB0aGVtZXMgb24gdGhlIHN5c3RlbS4gVmFsdWUgMSBtZWFucyBhY3RpdmUsIDAgbWVhbnMgaW5hY3RpdmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGl2YXRlcyB0aGUgdGlja2V0IGFyY2hpdmUgc3lzdGVtIHRvIGhhdmUgYSBmYXN0ZXIgc3lzdGVtIGJ5IG1vdmluZyBzb21lIHRpY2tldHMgb3V0IG9mIHRoZSBkYWlseSBzY29wZS4gVG8gc2VhcmNoIGZvciB0aGVzZSB0aWNrZXRzLCB0aGUgYXJjaGl2ZSBmbGFnIGhhcyB0byBiZSBlbmFibGVkIGluIHRoZSB0aWNrZXQgc2VhcmNoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3RpdmF0ZXMgdGltZSBhY2NvdW50aW5nLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBub3RlIHRvIHRoaXMgdGlja2V0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIGEgc3VmZml4IHdpdGggdGhlIGFjdHVhbCB5ZWFyIGFuZCBtb250aCB0byB0aGUgT1RSUyBsb2cgZmlsZS4gQSBsb2dmaWxlIGZvciBldmVyeSBtb250aCB3aWxsIGJlIGNyZWF0ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHMgY3VzdG9tZXJzIGVtYWlsIGFkZHJlc3NlcyB0byByZWNpcGllbnRzIGluIHRoZSB0aWNrZXQgY29tcG9zZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgb25lIHRpbWUgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciAxLiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBvbmUgdGltZSB2YWNhdGlvbiBkYXlzIGZvciB0aGUgY2FsZW5kYXIgbnVtYmVyIDIuIFBsZWFzZSB1c2Ugc2luZ2xlIGRpZ2l0IHBhdHRlcm4gZm9yIG51bWJlcnMgZnJvbSAxIHRvIDkgKGluc3RlYWQgb2YgMDEgLSAwOSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHMgdGhlIG9uZSB0aW1lIHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgMy4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgb25lIHRpbWUgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciA0LiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBvbmUgdGltZSB2YWNhdGlvbiBkYXlzIGZvciB0aGUgY2FsZW5kYXIgbnVtYmVyIDUuIFBsZWFzZSB1c2Ugc2luZ2xlIGRpZ2l0IHBhdHRlcm4gZm9yIG51bWJlcnMgZnJvbSAxIHRvIDkgKGluc3RlYWQgb2YgMDEgLSAwOSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHMgdGhlIG9uZSB0aW1lIHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgNi4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgb25lIHRpbWUgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciA3LiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBvbmUgdGltZSB2YWNhdGlvbiBkYXlzIGZvciB0aGUgY2FsZW5kYXIgbnVtYmVyIDguIFBsZWFzZSB1c2Ugc2luZ2xlIGRpZ2l0IHBhdHRlcm4gZm9yIG51bWJlcnMgZnJvbSAxIHRvIDkgKGluc3RlYWQgb2YgMDEgLSAwOSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHMgdGhlIG9uZSB0aW1lIHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgOS4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgb25lIHRpbWUgdmFjYXRpb24gZGF5cy4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgMS4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgMi4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgMy4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgNC4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgNS4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgNi4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgNy4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgOC4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgOS4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMuIFBsZWFzZSB1c2Ugc2luZ2xlIGRpZ2l0IHBhdHRlcm4gZm9yIG51bWJlcnMgZnJvbSAxIHRvIDkgKGluc3RlYWQgb2YgMDEgLSAwOSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIE5vdGlmaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBOb3RpZmljYXRpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBhcnRpY2xlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gY2hlY2sgUEdQLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2UgYXJ0aWNsZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIGNoZWNrIFMvTUlNRS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG1vZHVsZSB0byBhY2Nlc3MgZnVsbHRleHQgc2VhcmNoIHZpYSBuYXYgYmFyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2UgbW9kdWxlIHRvIGFjY2VzcyBzZWFyY2ggcHJvZmlsZXMgdmlhIG5hdiBiYXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBtb2R1bGUgdG8gY2hlY2sgaW5jb21pbmcgZW1haWxzIGluIHRoZSBUaWNrZXQtWm9vbS1WaWV3IGlmIHRoZSBTL01JTUUta2V5IGlzIGF2YWlsYWJsZSBhbmQgdHJ1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gY2hlY2sgdGhlIHVzZWQgY2hhcnNldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgdGlja2V0cyBhbiBhZ2VudCBpcyByZXNwb25zaWJsZSBmb3IuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIHdhdGNoZWQgdGlja2V0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50cyA8LT4gR3JvdXBzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50cyA8LT4gUm9sZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWRkaW5nIG5vdGVzIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWRkaW5nIG5vdGVzIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWRkaW5nIG5vdGVzIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWRkaW5nIG5vdGVzIGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBhZ2VudHMgdG8gZXhjaGFuZ2UgdGhlIGF4aXMgb2YgYSBzdGF0IGlmIHRoZXkgZ2VuZXJhdGUgb25lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWdlbnRzIHRvIGdlbmVyYXRlIGluZGl2aWR1YWwtcmVsYXRlZCBzdGF0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGNob29zaW5nIGJldHdlZW4gc2hvd2luZyB0aGUgYXR0YWNobWVudHMgb2YgYSB0aWNrZXQgaW4gdGhlIGJyb3dzZXIgKGlubGluZSkgb3IganVzdCBtYWtlIHRoZW0gZG93bmxvYWRhYmxlIChhdHRhY2htZW50KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGNob29zaW5nIHRoZSBuZXh0IGNvbXBvc2Ugc3RhdGUgZm9yIGN1c3RvbWVyIHRpY2tldHMgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGN1c3RvbWVycyB0byBjaGFuZ2UgdGhlIHRpY2tldCBwcmlvcml0eSBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgY3VzdG9tZXJzIHRvIHNldCB0aGUgdGlja2V0IFNMQSBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgY3VzdG9tZXJzIHRvIHNldCB0aGUgdGlja2V0IHByaW9yaXR5IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBjdXN0b21lcnMgdG8gc2V0IHRoZSB0aWNrZXQgcXVldWUgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gSWYgdGhpcyBpcyBzZXQgdG8gXCdOb1wnLCBRdWV1ZURlZmF1bHQgc2hvdWxkIGJlIGNvbmZpZ3VyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBjdXN0b21lcnMgdG8gc2V0IHRoZSB0aWNrZXQgc2VydmljZSBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgZGVmaW5pbmcgbmV3IHR5cGVzIGZvciB0aWNrZXQgKGlmIHRpY2tldCB0eXBlIGZlYXR1cmUgaXMgZW5hYmxlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBkZWZpbmluZyBzZXJ2aWNlcyBhbmQgU0xBcyBmb3IgdGlja2V0cyAoZS4gZy4gZW1haWwsIGRlc2t0b3AsIG5ldHdvcmssIC4uLiksIGFuZCBlc2NhbGF0aW9uIGF0dHJpYnV0ZXMgZm9yIFNMQXMgKGlmIHRpY2tldCBzZXJ2aWNlL1NMQSBmZWF0dXJlIGlzIGVuYWJsZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgZXh0ZW5kZWQgc2VhcmNoIGNvbmRpdGlvbnMgaW4gdGlja2V0IHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBXaXRoIHRoaXMgZmVhdHVyZSB5b3UgY2FuIHNlYXJjaCB3LiBnLiB3aXRoIHRoaXMga2luZCBvZiBjb25kaXRpb25zIGxpa2UgIihrZXkxJiZrZXkyKSIgb3IgIihrZXkxfHxrZXkyKSIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBleHRlbmRlZCBzZWFyY2ggY29uZGl0aW9ucyBpbiB0aWNrZXQgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFdpdGggdGhpcyBmZWF0dXJlIHlvdSBjYW4gc2VhcmNoIHcuIGcuIHdpdGggdGhpcyBraW5kIG9mIGNvbmRpdGlvbnMgbGlrZSAiKGtleTEmJmtleTIpIiBvciAiKGtleTF8fGtleTIpIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGhhdmluZyBhIG1lZGl1bSBmb3JtYXQgdGlja2V0IG92ZXJ2aWV3IChDdXN0b21lckluZm8gPT4gMSAtIHNob3dzIGFsc28gdGhlIGN1c3RvbWVyIGluZm9ybWF0aW9uKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGhhdmluZyBhIHNtYWxsIGZvcm1hdCB0aWNrZXQgb3ZlcnZpZXcgKEN1c3RvbWVySW5mbyA9PiAxIC0gc2hvd3MgYWxzbyB0aGUgY3VzdG9tZXIgaW5mb3JtYXRpb24pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgdGhlIGFkbWluaXN0cmF0b3JzIHRvIGxvZ2luIGFzIG90aGVyIHVzZXJzLCB2aWEgdGhlIHVzZXJzIGFkbWluaXN0cmF0aW9uIHBhbmVsLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgdG8gc2V0IGEgbmV3IHRpY2tldCBzdGF0ZSBpbiB0aGUgbW92ZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgZW1haWwgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSBwaG9uZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBjb21wb3NlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgbWVzc2FnZSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4gTk9URS4gSWYgeW91IHdhbnQgdG8gZGlzcGxheSB0aGVzZSBmaWVsZHMgYWxzbyBpbiB0aGUgdGlja2V0IHpvb20gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZSwgeW91IGhhdmUgdG8gZW5hYmxlIHRoZW0gaW4gQ3VzdG9tZXJUaWNrZXRab29tIyMjQXR0cmlidXRlc1ZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBub3RlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBwaG9uZSBvdXRib3VuZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRhY2htZW50cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRhY2htZW50cyA8LT4gUmVzcG9uc2VzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1dG8gUmVzcG9uc2VzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1dG8gUmVzcG9uc2VzIDwtPiBRdWV1ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXV0b21hdGVkIGxpbmUgYnJlYWsgaW4gdGV4dCBtZXNzYWdlcyBhZnRlciB4IG51bWJlciBvZiBjaGFycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXV0b21hdGljYWxseSBsb2NrIGFuZCBzZXQgb3duZXIgdG8gY3VycmVudCBBZ2VudCBhZnRlciBzZWxlY3RpbmcgZm9yIGFuIEJ1bGsgQWN0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdXRvbWF0aWNhbGx5IHNldHMgdGhlIG93bmVyIG9mIGEgdGlja2V0IGFzIHRoZSByZXNwb25zaWJsZSBmb3IgaXQgKGlmIHRpY2tldCByZXNwb25zaWJsZSBmZWF0dXJlIGlzIGVuYWJsZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdXRvbWF0aWNhbGx5IHNldHMgdGhlIHJlc3BvbnNpYmxlIG9mIGEgdGlja2V0IChpZiBpdCBpcyBub3Qgc2V0IHlldCkgYWZ0ZXIgdGhlIGZpcnN0IG93bmVyIHVwZGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWxhbmNlZCB3aGl0ZSBza2luIGJ5IEZlbGl4IE5pa2xhcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmxvY2tzIGFsbCB0aGUgaW5jb21pbmcgZW1haWxzIHRoYXQgZG8gbm90IGhhdmUgYSB2YWxpZCB0aWNrZXQgbnVtYmVyIGluIHN1YmplY3Qgd2l0aCBGcm9tOiBAZXhhbXBsZS5jb20gYWRkcmVzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRzIGFuIGFydGljbGUgaW5kZXggcmlnaHQgYWZ0ZXIgdGhlIGFydGljbGVcJ3MgY3JlYXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNRCBleGFtcGxlIHNldHVwLiBJZ25vcmVzIGVtYWlscyB3aGVyZSBleHRlcm5hbCBDTUQgcmV0dXJucyBzb21lIG91dHB1dCBvbiBTVERPVVQgKGVtYWlsIHdpbGwgYmUgcGlwZWQgaW50byBTVERJTiBvZiBzb21lLmJpbikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTViBTZXBhcmF0b3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHBhc3N3b3JkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBxdWV1ZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHRoZSB0aWNrZXQgY3VzdG9tZXIhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSB0aGUgdGlja2V0IGZyZWUgZmllbGRzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgdGhlIHRpY2tldCBvd25lciEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHRoZSB0aWNrZXQgcHJpb3JpdHkhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSB0aGUgdGlja2V0IHJlc3BvbnNpYmxlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VzIHRoZSBvd25lciBvZiB0aWNrZXRzIHRvIGV2ZXJ5b25lICh1c2VmdWwgZm9yIEFTUCkuIE5vcm1hbGx5IG9ubHkgYWdlbnQgd2l0aCBydyBwZXJtaXNzaW9ucyBpbiB0aGUgcXVldWUgb2YgdGhlIHRpY2tldCB3aWxsIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVja3MgdGhlIFN5c3RlbUlEIGluIHRpY2tldCBudW1iZXIgZGV0ZWN0aW9uIGZvciBmb2xsb3ctdXBzICh1c2UgIk5vIiBpZiBTeXN0ZW1JRCBoYXMgYmVlbiBjaGFuZ2VkIGFmdGVyIHVzaW5nIHRoZSBzeXN0ZW0pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbG9zZSB0aGlzIHRpY2tldCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCBmb3IgbmV3IGhpc3RvcnkgZW50cmllcyBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wYW5pZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcGFueSBUaWNrZXRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmUgeW91ciBvd24gbG9nIHRleHQgZm9yIFBHUC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlcyBhIGRlZmF1bHQgVGlja2V0RnJlZUZpZWxkIHNldHRpbmcuICJDb3VudGVyIiBkZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgd2hpY2ggc2hvdWxkIGJlIHVzZWQsICJLZXkiIGlzIHRoZSBUaWNrZXRGcmVlS2V5LCAiVmFsdWUiIGlzIHRoZSBUaWNrZXRGcmVlVGV4dCBhbmQgIkV2ZW50IiBkZWZpbmVzIHRoZSB0cmlnZ2VyIGV2ZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmVzIGEgZGVmYXVsdCBUaWNrZXRGcmVlRmllbGQgc2V0dGluZy4gIkNvdW50ZXIiIGRlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCB3aGljaCBzaG91bGQgYmUgdXNlZCwgIktleSIgaXMgdGhlIFRpY2tldEZyZWVLZXksICJWYWx1ZSIgaXMgdGhlIFRpY2tldEZyZWVUZXh0IGFuZCAiRXZlbnQiIGRlZmluZXMgdGhlIHRyaWdnZXIgZXZlbnQuIFBsZWFzZSBjaGVjayB0aGUgZGV2ZWxvcGVyIG1hbnVhbCAoaHR0cDovL2RvYy5vdHJzLm9yZy8pLCBjaGFwdGVyICJUaWNrZXQgRXZlbnQgTW9kdWxlIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlcyB0aGUgZnVsbC10ZXh0IGluZGV4LiBFeGVjdXRlICJiaW4vb3Rycy5SZWJ1aWxkRnVsbHRleHRJbmRleC5wbCIgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgYSBuZXcgaW5kZXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRyb2xzIGlmIGN1c3RvbWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIHNvcnQgdGhlaXIgdGlja2V0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udmVydHMgSFRNTCBtYWlscyBpbnRvIHRleHQgbWVzc2FnZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIFNlcnZpY2UgTGV2ZWwgQWdyZWVtZW50cyAoU0xBcykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIGFnZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgYXR0YWNobWVudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIGNvbXBhbmllcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgY3VzdG9tZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBldmVudCBiYXNlZCBub3RpZmljYXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBncm91cHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIG5vdGlmaWNhdGlvbnMgdGhhdCBhcmUgc2VudCB0byBhZ2VudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHF1ZXVlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgcmVzcG9uc2UgdGVtcGxhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSByZXNwb25zZXMgdGhhdCBhcmUgYXV0b21hdGljYWxseSBzZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSByb2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2Ugc2FsdXRhdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHNlcnZpY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBzaWduYXR1cmVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRpY2tldCBwcmlvcml0aWVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aWNrZXQgc3RhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aWNrZXQgdHlwZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBuZXcgVGlja2V0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBuZXcgZW1haWwgdGlja2V0IGFuZCBzZW5kIHRoaXMgb3V0IChvdXRib3VuZCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIG5ldyBwaG9uZSB0aWNrZXQgKGluYm91bmQpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbSB0ZXh0IGZvciB0aGUgcGFnZSBzaG93biB0byBjdXN0b21lcnMgdGhhdCBoYXZlIG5vIHRpY2tldHMgeWV0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW5pZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgaXRlbSAoaWNvbikgd2hpY2ggc2hvd3MgdGhlIG9wZW4gdGlja2V0cyBvZiB0aGlzIGN1c3RvbWVyIGFzIGluZm8gYmxvY2suJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVycyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lcnMgPC0+IEdyb3Vwcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lcnMgPC0+IFNlcnZpY2VzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rhc2hib2FyZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRhIHVzZWQgdG8gZXhwb3J0IHRoZSBzZWFyY2ggcmVzdWx0IGluIENTViBmb3JtYXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlYnVncyB0aGUgdHJhbnNsYXRpb24gc2V0LiBJZiB0aGlzIGlzIHNldCB0byAiWWVzIiBhbGwgc3RyaW5ncyAodGV4dCkgd2l0aG91dCB0cmFuc2xhdGlvbnMgYXJlIHdyaXR0ZW4gdG8gU1RERVJSLiBUaGlzIGNhbiBiZSBoZWxwZnVsIHdoZW4geW91IGFyZSBjcmVhdGluZyBhIG5ldyB0cmFuc2xhdGlvbiBmaWxlLiBPdGhlcndpc2UsIHRoaXMgb3B0aW9uIHNob3VsZCByZW1haW4gc2V0IHRvICJObyIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgQUNMIHZhbHVlcyBmb3IgdGlja2V0IGFjdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgZGF0YSB0byB1c2Ugb24gYXR0cmlidXRlIGZvciB0aWNrZXQgc2VhcmNoIHNjcmVlbi4gRXhhbXBsZTogIlRpY2tldENyZWF0ZVRpbWVQb2ludEZvcm1hdD15ZWFyO1RpY2tldENyZWF0ZVRpbWVQb2ludFN0YXJ0PUxhc3Q7VGlja2V0Q3JlYXRlVGltZVBvaW50PTI7Ii4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBkYXRhIHRvIHVzZSBvbiBhdHRyaWJ1dGUgZm9yIHRpY2tldCBzZWFyY2ggc2NyZWVuLiBFeGFtcGxlOiAiVGlja2V0Q3JlYXRlVGltZVN0YXJ0WWVhcj0yMDEwO1RpY2tldENyZWF0ZVRpbWVTdGFydE1vbnRoPTEwO1RpY2tldENyZWF0ZVRpbWVTdGFydERheT00O1RpY2tldENyZWF0ZVRpbWVTdG9wWWVhcj0yMDEwO1RpY2tldENyZWF0ZVRpbWVTdG9wTW9udGg9MTE7VGlja2V0Q3JlYXRlVGltZVN0b3BEYXk9MzsiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxvb3AgcHJvdGVjdGlvbiBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcXVldWUgSUQgdXNlZCBieSB0aGUgc3lzdGVtIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2tpbiBmb3IgT1RSUyAzLjAgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNraW4gZm9yIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzcGVsbGluZyBkaWN0aW9uYXJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdGlja2V0IElEIHVzZWQgYnkgdGhlIHN5c3RlbSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHRpY2tldCBJRCB1c2VkIGJ5IHRoZSBzeXN0ZW0gaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIGEgZmlsdGVyIGZvciBodG1sIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEF0IG9uY2UgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJsaXR5IGlzIHRvIGluc2VydCB0aGUgbGluayB0byB0aGUgaW1hZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgc3RhcnQgZGF5IG9mIHRoZSB3ZWVrIGZvciB0aGUgZGF0ZSBwaWNrZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYSBjdXN0b21lciBpdGVtLCB3aGljaCBnZW5lcmF0ZXMgYSBMaW5rZWRJbiBpY29uIGF0IHRoZSBlbmQgb2YgYSBjdXN0b21lciBpbmZvIGJsb2NrLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGEgY3VzdG9tZXIgaXRlbSwgd2hpY2ggZ2VuZXJhdGVzIGEgWElORyBpY29uIGF0IHRoZSBlbmQgb2YgYSBjdXN0b21lciBpbmZvIGJsb2NrLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGEgY3VzdG9tZXIgaXRlbSwgd2hpY2ggZ2VuZXJhdGVzIGEgZ29vZ2xlIGljb24gYXQgdGhlIGVuZCBvZiBhIGN1c3RvbWVyIGluZm8gYmxvY2suJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYSBjdXN0b21lciBpdGVtLCB3aGljaCBnZW5lcmF0ZXMgYSBnb29nbGUgbWFwcyBpY29uIGF0IHRoZSBlbmQgb2YgYSBjdXN0b21lciBpbmZvIGJsb2NrLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGEgZGVmYXVsdCBsaXN0IG9mIHdvcmRzLCB0aGF0IGFyZSBpZ25vcmVkIGJ5IHRoZSBzcGVsbCBjaGVja2VyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGEgZmlsdGVyIGZvciBodG1sIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIENWRSBudW1iZXJzLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBBdCBvbmNlIHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2libGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGEgZmlsdGVyIGZvciBodG1sIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIE1TQnVsbGV0aW4gbnVtYmVycy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gQXQgb25jZSB0aGUgbmFtZSBvZiBhbiBpbWFnZSAoZS5nLiBmYXEucG5nKS4gSW4gdGhpcyBjYXNlIHRoZSBPVFJTIGltYWdlIHBhdGggd2lsbCBiZSB1c2VkLiBUaGUgc2Vjb25kIHBvc3NpYmxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhIGZpbHRlciBmb3IgaHRtbCBvdXRwdXQgdG8gYWRkIGxpbmtzIGJlaGluZCBhIGRlZmluZWQgc3RyaW5nLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBBdCBvbmNlIHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2libGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGEgZmlsdGVyIGZvciBodG1sIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGJ1Z3RyYXEgbnVtYmVycy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gQXQgb25jZSB0aGUgbmFtZSBvZiBhbiBpbWFnZSAoZS5nLiBmYXEucG5nKS4gSW4gdGhpcyBjYXNlIHRoZSBPVFJTIGltYWdlIHBhdGggd2lsbCBiZSB1c2VkLiBUaGUgc2Vjb25kIHBvc3NpYmxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhIGZpbHRlciB0byBwcm9jZXNzIHRoZSB0ZXh0IGluIHRoZSBhcnRpY2xlcywgaW4gb3JkZXIgdG8gaGlnaGxpZ2h0IHByZWRlZmluZWQga2V5d29yZHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBleGNsdWRlcyBzb21lIGFkZHJlc3NlcyBmcm9tIHRoZSBzeW50YXggY2hlY2sgKGlmICJDaGVja0VtYWlsQWRkcmVzc2VzIiBpcyBzZXQgdG8gIlllcyIpLiBQbGVhc2UgZW50ZXIgYSByZWdleCBpbiB0aGlzIGZpZWxkIGZvciBlbWFpbCBhZGRyZXNzZXMsIHRoYXQgYXJlblwndCBzeW50YWN0aWNhbGx5IHZhbGlkLCBidXQgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlIHN5c3RlbSAoaS5lLiAicm9vdEBsb2NhbGhvc3QiKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGZpbHRlcnMgYWxsIGVtYWlsIGFkZHJlc3NlcyB0aGF0IHNob3VsZCBub3QgYmUgdXNlZCBpbiB0aGUgYXBwbGljYXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYSB1c2VmdWwgbW9kdWxlIHRvIGxvYWQgc3BlY2lmaWMgdXNlciBvcHRpb25zIG9yIHRvIGRpc3BsYXkgbmV3cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbGwgdGhlIFgtaGVhZGVycyB0aGF0IHNob3VsZCBiZSBzY2FubmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFsbCB0aGUgbGFuZ3VhZ2VzIHRoYXQgYXJlIGF2YWlsYWJsZSB0byB0aGUgYXBwbGljYXRpb24uIFRoZSBLZXkvQ29udGVudCBwYWlyIGxpbmtzIHRoZSBmcm9udC1lbmQgZGlzcGxheSBuYW1lIHRvIHRoZSBhcHByb3ByaWF0ZSBsYW5ndWFnZSBQTSBmaWxlLiBUaGUgIktleSIgdmFsdWUgc2hvdWxkIGJlIHRoZSBiYXNlLW5hbWUgb2YgdGhlIFBNIGZpbGUgKGkuZS4gZGUucG0gaXMgdGhlIGZpbGUsIHRoZW4gZGUgaXMgdGhlICJLZXkiIHZhbHVlKS4gVGhlICJDb250ZW50IiB2YWx1ZSBzaG91bGQgYmUgdGhlIGRpc3BsYXkgbmFtZSBmb3IgdGhlIGZyb250LWVuZC4gU3BlY2lmeSBhbnkgb3duLWRlZmluZWQgbGFuZ3VhZ2UgaGVyZSAoc2VlIHRoZSBkZXZlbG9wZXIgZG9jdW1lbnRhdGlvbiBodHRwOi8vZG9jLm90cnMub3JnLyBmb3IgbW9yZSBpbmZvbWF0aW9uKS4gUGxlYXNlIHJlbWVtYmVyIHRvIHVzZSB0aGUgSFRNTCBlcXVpdmFsZW50cyBmb3Igbm9uLUFTQ0lJIGNoYXJhY3RlcnMgKGkuZS4gZm9yIHRoZSBHZXJtYW4gb2UgPSBvIHVtbGF1dCwgaXQgaXMgbmVjZXNzYXJ5IHRvIHVzZSB0aGUgJm91bWw7IHN5bWJvbCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYWxsIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgUmVmcmVzaFRpbWUgb2JqZWN0IGluIHRoZSBjdXN0b21lciBwcmVmZXJlbmNlcyBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFsbCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIFNob3duVGlja2V0cyBvYmplY3QgaW4gdGhlIGN1c3RvbWVyIHByZWZlcmVuY2VzIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYWxsIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGlzIGl0ZW0gaW4gdGhlIGN1c3RvbWVyIHByZWZlcmVuY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFsbCB0aGUgcG9zc2libGUgc3RhdHMgb3V0cHV0IGZvcm1hdHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gYWx0ZXJuYXRlIFVSTCwgd2hlcmUgdGhlIGxvZ2luIGxpbmsgcmVmZXJzIHRvLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIGFsdGVybmF0ZSBVUkwsIHdoZXJlIHRoZSBsb2dvdXQgbGluayByZWZlcnMgdG8uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gYWx0ZXJuYXRlIGxvZ2luIFVSTCBmb3IgdGhlIGN1c3RvbWVyIHBhbmVsLi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBhbHRlcm5hdGUgbG9nb3V0IFVSTCBmb3IgdGhlIGN1c3RvbWVyIHBhbmVsLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIGV4dGVybmFsIGxpbmsgdG8gdGhlIGRhdGFiYXNlIG9mIHRoZSBjdXN0b21lciAoZS5nLiBcJ2h0dHA6Ly95b3VyaG9zdC9jdXN0b21lci5waHA/Q0lEPSREYXRheyJDdXN0b21lcklEIn1cJyBvciBcJ1wnKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGhvdyB0aGUgRnJvbSBmaWVsZCBmcm9tIHRoZSBlbWFpbHMgKHNlbnQgZnJvbSBhbnN3ZXJzIGFuZCBlbWFpbCB0aWNrZXRzKSBzaG91bGQgbG9vayBsaWtlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIHRpY2tldCBib3VuY2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgY29tcG9zZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIHRpY2tldCBmb3J3YXJkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIHRpY2tldCBtZXJnZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCB0byBjaGFuZ2UgdGhlIGN1c3RvbWVyIG9mIGEgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBjb21wb3NlZCBtZXNzYWdlcyBoYXZlIHRvIGJlIHNwZWxsIGNoZWNrZWQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aW1lIGFjY291bnRpbmcgaXMgbWFuZGF0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGltZSBhY2NvdW50aW5nIG11c3QgYmUgc2V0IHRvIGFsbCB0aWNrZXRzIGluIGJ1bGsgYWN0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSA9aEhlaWdodCBmb3IgdGhlIHJpY2ggdGV4dCBlZGl0b3IgY29tcG9uZW50LiBFbnRlciBudW1iZXIgKHBpeGVscykgb3IgcGVyY2VudCB2YWx1ZSAocmVsYXRpdmUpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBJUCByZWd1bGFyIGV4cHJlc3Npb24gZm9yIGFjY2Vzc2luZyB0aGUgbG9jYWwgcmVwb3NpdG9yeS4gWW91IG5lZWQgdG8gZW5hYmxlIHRoaXMgdG8gaGF2ZSBhY2Nlc3MgdG8geW91ciBsb2NhbCByZXBvc2l0b3J5IGFuZCB0aGUgcGFja2FnZTo6UmVwb3NpdG9yeUxpc3QgaXMgcmVxdWlyZWQgb24gdGhlIHJlbW90ZSBob3N0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgQ1NTIHBhdGguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBiYXNlIHBhdGggb2YgaWNvbnMsIENTUyBhbmQgSmF2YSBTY3JpcHQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBpbWFnZSBwYXRoIG9mIGljb25zIGZvciBuYXZpZ2F0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgamF2YSBzY3JpcHQgcGF0aC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIHJpY2ggdGV4dCBlZGl0b3IgcGF0aC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgYWRkcmVzcyBvZiBhIGRlZGljYXRlZCBETlMgc2VydmVyLCBpZiBuZWNlc3NhcnksIGZvciB0aGUgIkNoZWNrTVhSZWNvcmQiIGxvb2stdXBzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBib2R5IHRleHQgZm9yIG5vdGlmaWNhdGlvbiBtYWlscyBzZW50IHRvIGFnZW50cywgYWJvdXQgbmV3IHBhc3N3b3JkIChhZnRlciB1c2luZyB0aGlzIGxpbmsgdGhlIG5ldyBwYXNzd29yZCB3aWxsIGJlIHNlbnQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBib2R5IHRleHQgZm9yIG5vdGlmaWNhdGlvbiBtYWlscyBzZW50IHRvIGFnZW50cywgd2l0aCB0b2tlbiBhYm91dCBuZXcgcmVxdWVzdGVkIHBhc3N3b3JkIChhZnRlciB1c2luZyB0aGlzIGxpbmsgdGhlIG5ldyBwYXNzd29yZCB3aWxsIGJlIHNlbnQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBib2R5IHRleHQgZm9yIG5vdGlmaWNhdGlvbiBtYWlscyBzZW50IHRvIGN1c3RvbWVycywgYWJvdXQgbmV3IGFjY291bnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGJvZHkgdGV4dCBmb3Igbm90aWZpY2F0aW9uIG1haWxzIHNlbnQgdG8gY3VzdG9tZXJzLCBhYm91dCBuZXcgcGFzc3dvcmQgKGFmdGVyIHVzaW5nIHRoaXMgbGluayB0aGUgbmV3IHBhc3N3b3JkIHdpbGwgYmUgc2VudCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGJvZHkgdGV4dCBmb3Igbm90aWZpY2F0aW9uIG1haWxzIHNlbnQgdG8gY3VzdG9tZXJzLCB3aXRoIHRva2VuIGFib3V0IG5ldyByZXF1ZXN0ZWQgcGFzc3dvcmQgKGFmdGVyIHVzaW5nIHRoaXMgbGluayB0aGUgbmV3IHBhc3N3b3JkIHdpbGwgYmUgc2VudCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGJvZHkgdGV4dCBmb3IgcmVqZWN0ZWQgZW1haWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBib2xkbmVzcyBvZiB0aGUgbGluZSBkcmF3ZWQgYnkgdGhlIGdyYXBoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjb2xvcnMgZm9yIHRoZSBncmFwaHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNvbHVtbiB0byBzdG9yZSB0aGUga2V5cyBmb3IgdGhlIHByZWZlcmVuY2VzIHRhYmxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjb25maWcgcGFyYW1ldGVycyBvZiB0aGlzIGl0ZW0sIHRvIGJlIHNob3duIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjb25maWcgcGFyYW1ldGVycyBvZiB0aGlzIGl0ZW0sIHRvIGJlIHNob3duIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3LiBUYWtlIGNhcmUgdG8gbWFpbnRhaW4gdGhlIGRpY3Rpb25hcmllcyBpbnN0YWxsZWQgaW4gdGhlIHN5c3RlbSBpbiB0aGUgZGF0YSBzZWN0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjb25uZWN0aW9ucyBmb3IgaHR0cC9mdHAsIHZpYSBhIHByb3h5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkYXRlIGlucHV0IGZvcm1hdCB1c2VkIGluIGZvcm1zIChvcHRpb24gb3IgaW5wdXQgZmllbGRzKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBDU1MgdXNlZCBpbiByaWNoIHRleHQgZWRpdG9ycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBib2R5IG9mIGEgbm90ZSBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBmcm9udC1lbmQgKEhUTUwpIHRoZW1lIHRvIGJlIHVzZWQgYnkgdGhlIGFnZW50cyBhbmQgY3VzdG9tZXJzLiBUaGUgZGVmYXVsdCB0aGVtZXMgYXJlIFN0YW5kYXJkIGFuZCBMaXRlLiBJZiB5b3UgbGlrZSwgeW91IGNhbiBhZGQgeW91ciBvd24gdGhlbWUuIFBsZWFzZSByZWZlciB0aGUgYWRtaW5pc3RyYXRvciBtYW51YWwgbG9jYXRlZCBhdCBodHRwOi8vZG9jLm90cnMub3JnLy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBmcm9udC1lbmQgbGFuZ3VhZ2UuIEFsbCB0aGUgcG9zc2libGUgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBhdmFpbGFibGUgbGFuZ3VhZ2UgZmlsZXMgb24gdGhlIHN5c3RlbSAoc2VlIHRoZSBuZXh0IHNldHRpbmcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGhpc3RvcnkgdHlwZSBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIFgtYXhpcyBhdHRyaWJ1dGVzIGZvciB0aGUgdGltZSBzY2FsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBzZWFyY2ggcmVzdWx0cyBzaG93biBvbiB0aGUgb3ZlcnZpZXcgcGFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIGZvciBhIHRpY2tldCBhZnRlciBjdXN0b21lciBmb2xsb3cgdXAgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGJlaW5nIGJvdW5jZWQsIGluIHRoZSB0aWNrZXQgYm91bmNlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYmVpbmcgZm9yd2FyZGVkLCBpbiB0aGUgdGlja2V0IGZvcndhcmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBpZiBpdCBpcyBjb21wb3NlZCAvIGFuc3dlcmVkIGluIHRoZSB0aWNrZXQgY29tcG9zZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBub3RlIGJvZHkgdGV4dCBmb3IgcGhvbmUgdGlja2V0cyBpbiB0aGUgdGlja2V0IHBob25lIG91dGJvdW5kIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHByaW9yaXR5IG9mIGZvbGxvdyB1cCBjdXN0b21lciB0aWNrZXRzIGluIHRoZSB0aWNrZXQgem9vbSBzY3JlZW4gaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBwcmlvcml0eSBvZiBuZXcgY3VzdG9tZXIgdGlja2V0cyBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHByaW9yaXR5IG9mIG5ldyB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHF1ZXVlIGZvciBuZXcgY3VzdG9tZXIgdGlja2V0cyBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBhdCB0aGUgZHJvcCBkb3duIG1lbnUgZm9yIGR5bmFtaWMgb2JqZWN0cyAoRm9ybTogQ29tbW9uIFNwZWNpZmljYXRpb24pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBhdCB0aGUgZHJvcCBkb3duIG1lbnUgZm9yIHBlcm1pc3Npb25zIChGb3JtOiBDb21tb24gU3BlY2lmaWNhdGlvbikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIGF0IHRoZSBkcm9wIGRvd24gbWVudSBmb3Igc3RhdHMgZm9ybWF0IChGb3JtOiBDb21tb24gU3BlY2lmaWNhdGlvbikuIFBsZWFzZSBpbnNlcnQgdGhlIGZvcm1hdCBrZXkgKHNlZSBTdGF0czo6Rm9ybWF0KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxIGZvciBhcnRpY2xlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMCBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDExIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTIgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMyBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE0IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTUgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxNiBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDIgZm9yIGFydGljbGVzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMiBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDMgZm9yIGFydGljbGVzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMyBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA1IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNiBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDcgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA4IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgOSBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxIGZvciBhcnRpY2xlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDEwIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDExIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDEyIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDEzIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDE0IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDE1IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDE2IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDIgZm9yIGFydGljbGVzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDIgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMyBmb3IgYXJ0aWNsZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMyBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDUgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNiBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA3IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDggZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgOSBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbmRlciB0eXBlIGZvciBwaG9uZSB0aWNrZXRzIGluIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VuZGVyIHR5cGUgZm9yIHRpY2tldHMgaW4gdGhlIHRpY2tldCB6b29tIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNob3duIHRpY2tldCBzZWFyY2ggYXR0cmlidXRlIGZvciB0aWNrZXQgc2VhcmNoIHNjcmVlbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGZvciBhbGwgcXVldWVzIGRpc3BsYXllZCBpbiB0aGUgcXVldWUgdmlldywgYWZ0ZXIgc29ydCBieSBwcmlvcml0eSBpcyBkb25lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgZm9yIGFsbCBxdWV1ZXMgaW4gdGhlIHF1ZXVlIHZpZXcsIGFmdGVyIHByaW9yaXR5IHNvcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3BlbGwgY2hlY2tlciBkaWN0aW9uYXJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN0YXRlIG9mIG5ldyBjdXN0b21lciB0aWNrZXRzIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3RhdGUgb2YgbmV3IHRpY2tldHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3ViamVjdCBmb3IgcGhvbmUgdGlja2V0cyBpbiB0aGUgdGlja2V0IHBob25lIG91dGJvdW5kIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1YmplY3Qgb2YgYSBub3RlIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBhdHRyaWJ1dGUgZm9yIHRpY2tldCBzb3J0aW5nIGluIGEgdGlja2V0IHNlYXJjaCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBhdHRyaWJ1dGUgZm9yIHRpY2tldCBzb3J0aW5nIGluIHRoZSBlc2NhbGF0aW9uIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgYXR0cmlidXRlIGZvciB0aWNrZXQgc29ydGluZyBpbiB0aGUgbG9ja2VkIHRpY2tldCB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IGF0dHJpYnV0ZSBmb3IgdGlja2V0IHNvcnRpbmcgaW4gdGhlIHJlc3BvbnNpYmxlIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgYXR0cmlidXRlIGZvciB0aWNrZXQgc29ydGluZyBpbiB0aGUgc3RhdHVzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgYXR0cmlidXRlIGZvciB0aWNrZXQgc29ydGluZyBpbiB0aGUgd2F0Y2ggdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBhdHRyaWJ1dGUgZm9yIHRpY2tldCBzb3J0aW5nIG9mIHRoZSB0aWNrZXQgc2VhcmNoIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBib3VuY2VkIG5vdGlmaWNhdGlvbiBmb3IgY3VzdG9tZXIvc2VuZGVyIGluIHRoZSB0aWNrZXQgYm91bmNlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBuZXh0IHN0YXRlIGFmdGVyIGFkZGluZyBhIHBob25lIG5vdGUgaW4gdGhlIHRpY2tldCBwaG9uZSBvdXRib3VuZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgb3JkZXIgKGFmdGVyIHByaW9yaXR5IHNvcnQpIGluIHRoZSBlc2NhbGF0aW9uIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IG9yZGVyIChhZnRlciBwcmlvcml0eSBzb3J0KSBpbiB0aGUgc3RhdHVzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IG9yZGVyIGluIHRoZSByZXNwb25zaWJsZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBvcmRlciBpbiB0aGUgdGlja2V0IGxvY2tlZCB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBvcmRlciBpbiB0aGUgdGlja2V0IHNlYXJjaCByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IG9yZGVyIGluIHRoZSB3YXRjaCB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSB0aWNrZXQgYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgcHJpb3JpdHkgaW4gdGhlIHRpY2tldCBmcmVlIHRleHQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgcHJpb3JpdHkgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHR5cGUgZm9yIGFydGljbGUgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0eXBlIG9mIGZvcndhcmRlZCBtZXNzYWdlIGluIHRoZSB0aWNrZXQgZm9yd2FyZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0eXBlIG9mIHRoZSBub3RlIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdHlwZSBvZiB0aGUgbm90ZSBpbiB0aGUgdGlja2V0IGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdHlwZSBvZiB0aGUgbm90ZSBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0eXBlIG9mIHRoZSBub3RlIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0eXBlIG9mIHRoZSBub3RlIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHR5cGUgb2YgdGhlIG5vdGUgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0eXBlIG9mIHRoZSBub3RlIGluIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdHlwZSBvZiB0aGUgbm90ZSBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0eXBlIG9mIHRoZSBub3RlIGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdHlwZSBvZiB0aGUgbm90ZSBpbiB0aGUgdGlja2V0IHpvb20gc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdXNlZCBGcm9udGVuZC1Nb2R1bGUgaWYgbm8gQWN0aW9uIHBhcmFtZXRlciBnaXZlbiBpbiB0aGUgdXJsIG9uIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdXNlZCBGcm9udGVuZC1Nb2R1bGUgaWYgbm8gQWN0aW9uIHBhcmFtZXRlciBnaXZlbiBpbiB0aGUgdXJsIG9uIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgYWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmlld2FibGUgc2VuZGVyIHR5cGVzIG9mIGEgdGlja2V0IChkZWZhdWx0OiBjdXN0b21lcikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRpZmZlcmVuY2UgZnJvbSBub3cgKGluIHNlY29uZHMpIG9mIHRoZSBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDFcJ3MgZGVmYXVsdCB2YWx1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGlmZmVyZW5jZSBmcm9tIG5vdyAoaW4gc2Vjb25kcykgb2YgdGhlIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgMlwncyBkZWZhdWx0IHZhbHVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkaWZmZXJlbmNlIGZyb20gbm93IChpbiBzZWNvbmRzKSBvZiB0aGUgZnJlZSB0aW1lIGZpZWxkIG51bWJlciAzXCdzIGRlZmF1bHQgdmFsdWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRpZmZlcmVuY2UgZnJvbSBub3cgKGluIHNlY29uZHMpIG9mIHRoZSBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDRcJ3MgZGVmYXVsdCB2YWx1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGlmZmVyZW5jZSBmcm9tIG5vdyAoaW4gc2Vjb25kcykgb2YgdGhlIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgNVwncyBkZWZhdWx0IHZhbHVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkaWZmZXJlbmNlIGZyb20gbm93IChpbiBzZWNvbmRzKSBvZiB0aGUgZnJlZSB0aW1lIGZpZWxkIG51bWJlciA2XCdzIGRlZmF1bHQgdmFsdWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpbHRlciB0aGF0IHByb2Nlc3NlcyB0aGUgdGV4dCBpbiB0aGUgYXJ0aWNsZXMsIGluIG9yZGVyIHRvIGhpZ2hsaWdodCBVUkxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmb3JtYXQgb2YgcmVzcG9uc2VzIGluIHRoZSB0aWNrZXQgY29tcG9zZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoJFFEYXRheyJPcmlnRnJvbSJ9IGlzIEZyb20gMToxLCAkUURhdGF7Ik9yaWdGcm9tTmFtZSJ9IGlzIG9ubHkgcmVhbG5hbWUgb2YgRnJvbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxIGZvciBhcnRpY2xlcyB0byBhZGQgYSBuZXcgYXJ0aWNsZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTAgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEyIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTMgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxNCBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE1IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTYgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyIGZvciBhcnRpY2xlcyB0byBhZGQgYSBuZXcgYXJ0aWNsZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMyBmb3IgYXJ0aWNsZXMgdG8gYWRkIGEgbmV3IGFydGljbGUgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMyBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA1IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNiBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDcgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA4IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgOSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxIGZvciBhcnRpY2xlcyB0byBhZGQgYSBuZXcgYXJ0aWNsZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMCBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMiBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMyBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNCBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNiBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyIGZvciBhcnRpY2xlcyB0byBhZGQgYSBuZXcgYXJ0aWNsZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMiBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzIGZvciBhcnRpY2xlcyB0byBhZGQgYSBuZXcgYXJ0aWNsZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMyBmb3IgdGlja2V0IHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDQgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA2IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDcgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgOCBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA5IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRpbWUga2V5IGZpZWxkIG51bWJlciAxIGZvciB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRpbWUga2V5IGZpZWxkIG51bWJlciAyIGZvciB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRpbWUga2V5IGZpZWxkIG51bWJlciAzIGZvciB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRpbWUga2V5IGZpZWxkIG51bWJlciA0IGZvciB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRpbWUga2V5IGZpZWxkIG51bWJlciA1IGZvciB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRpbWUga2V5IGZpZWxkIG51bWJlciA2IGZvciB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWUgb2YgdGhlIHN5c3RlbS4gVGhpcyBzZXR0aW5nIGlzIHVzZWQgYXMgYSB2YXJpYWJsZSwgT1RSU19DT05GSUdfRlFETiB3aGljaCBpcyBmb3VuZCBpbiBhbGwgZm9ybXMgb2YgbWVzc2FnaW5nIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCB0byBidWlsZCBsaW5rcyB0byB0aGUgdGlja2V0cyB3aXRoaW4geW91ciBzeXN0ZW0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGdyb3VwcyBldmVyeSBjdXN0b21lciB1c2VyIHdpbGwgYmUgaW4gKGlmIEN1c3RvbWVyR3JvdXBTdXBwb3J0IGlzIGVuYWJsZWQgYW5kIHlvdSBkb25cJ3Qgd2FudCB0byBtYW5hZ2UgZXZlcnkgdXNlciBmb3IgdGhlc2UgZ3JvdXBzKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGVpZ2h0IG9mIHRoZSBsZWdlbmQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIGVtYWlsIHRpY2tldCBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHBob25lIHRpY2tldCBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBmcmVlIHRleHQgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSBjb21tZW50IGZvciB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IGNvbW1lbnQgZm9yIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IGNvbW1lbnQgZm9yIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBwaG9uZSBvdXRib3VuZCBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBwcmlvcml0eSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCB6b29tIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSBlbWFpbCB0aWNrZXQgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSBwaG9uZSB0aWNrZXQgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgdHlwZSBmb3IgdGhlIHRpY2tldCBub3RlIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSB0eXBlIGZvciB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSB0eXBlIGZvciB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgem9vbSBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaG91cnMgYW5kIHdlZWsgZGF5cyBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDEsIHRvIGNvdW50IHRoZSB3b3JraW5nIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhvdXJzIGFuZCB3ZWVrIGRheXMgb2YgdGhlIGNhbGVuZGFyIG51bWJlciAyLCB0byBjb3VudCB0aGUgd29ya2luZyB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBob3VycyBhbmQgd2VlayBkYXlzIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgMywgdG8gY291bnQgdGhlIHdvcmtpbmcgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaG91cnMgYW5kIHdlZWsgZGF5cyBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDQsIHRvIGNvdW50IHRoZSB3b3JraW5nIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhvdXJzIGFuZCB3ZWVrIGRheXMgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA1LCB0byBjb3VudCB0aGUgd29ya2luZyB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBob3VycyBhbmQgd2VlayBkYXlzIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgNiwgdG8gY291bnQgdGhlIHdvcmtpbmcgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaG91cnMgYW5kIHdlZWsgZGF5cyBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDcsIHRvIGNvdW50IHRoZSB3b3JraW5nIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhvdXJzIGFuZCB3ZWVrIGRheXMgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA4LCB0byBjb3VudCB0aGUgd29ya2luZyB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBob3VycyBhbmQgd2VlayBkYXlzIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgOSwgdG8gY291bnQgdGhlIHdvcmtpbmcgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaG91cnMgYW5kIHdlZWsgZGF5cyB0byBjb3VudCB0aGUgd29ya2luZyB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBodHRwIGxpbmsgZm9yIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDEgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTAgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTEgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTIgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTMgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTQgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTUgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTYgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMiBmb3IgdGlja2V0cyAoaXQgd2lsbCBiZSB1c2VkIGluIGV2ZXJ5IHRpY2tldCB2aWV3KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaHR0cCBsaW5rIGZvciB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzIGZvciB0aWNrZXRzIChpdCB3aWxsIGJlIHVzZWQgaW4gZXZlcnkgdGlja2V0IHZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBodHRwIGxpbmsgZm9yIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDQgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNSBmb3IgdGlja2V0cyAoaXQgd2lsbCBiZSB1c2VkIGluIGV2ZXJ5IHRpY2tldCB2aWV3KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaHR0cCBsaW5rIGZvciB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA2IGZvciB0aWNrZXRzIChpdCB3aWxsIGJlIHVzZWQgaW4gZXZlcnkgdGlja2V0IHZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBodHRwIGxpbmsgZm9yIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDcgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgOCBmb3IgdGlja2V0cyAoaXQgd2lsbCBiZSB1c2VkIGluIGV2ZXJ5IHRpY2tldCB2aWV3KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaHR0cCBsaW5rIGZvciB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA5IGZvciB0aWNrZXRzIChpdCB3aWxsIGJlIHVzZWQgaW4gZXZlcnkgdGlja2V0IHZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBrZXkgdG8gYmUgY2hlY2tlZCB3aXRoIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJbmZvIG1vZHVsZS4gSWYgdGhpcyB1c2VyIHByZWZlcmVuY2VzIGtleSBpcyB0cnVlLCB0aGUgbWVzc2FnZSBpcyBhY2NlcHRlZCBieSB0aGUgc3lzdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBrZXkgdG8gY2hlY2sgd2l0aCBDdXN0b21lckFjY2VwdC4gSWYgdGhpcyB1c2VyIHByZWZlcmVuY2VzIGtleSBpcyB0cnVlLCB0aGVuIHRoZSBtZXNzYWdlIGlzIGFjY2VwdGVkIGJ5IHRoZSBzeXN0ZW0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ05vcm1hbFwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lOyBvdGhlcndpc2UsIHRoZSByZXN1bHQgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdQYXJlbnRDaGlsZFwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lOyBvdGhlcndpc2UsIHRoZSByZXN1bHQgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBsaW5rIHR5cGUgZ3JvdXBzLiBUaGUgbGluayB0eXBlcyBvZiB0aGUgc2FtZSBncm91cCBjYW5jZWwgb25lIGFub3RoZXIuIEV4YW1wbGU6IElmIHRpY2tldCBBIGlzIGxpbmtlZCBwZXIgYSBcJ05vcm1hbFwnIGxpbmsgd2l0aCB0aWNrZXQgQiwgdGhlbiB0aGVzZSB0aWNrZXRzIGNvdWxkIG5vdCBiZSBhZGRpdGlvbmFsbHkgbGlua2VkIHdpdGggbGluayBvZiBhIFwnUGFyZW50Q2hpbGRcJyByZWxhdGlvbnNoaXAuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb25zIGNhbiBiZSB1c2VkIGFzIHJlcG9zaXRvcnksIGZvciBleGFtcGxlOiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdHJzL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxvY2F0aW9uIHRvIGdldCBvbmxpbmUgcmVwb3NpdG9yeSBsaXN0IGZvciBhZGRpdGlvbmFsIHBhY2thZ2VzLiBUaGUgZmlyc3QgYXZhaWxhYmxlIHJlc3VsdCB3aWxsIGJlIHVzZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxvZyBtb2R1bGUgZm9yIHRoZSBzeXN0ZW0uICJGaWxlIiB3cml0ZXMgYWxsIG1lc3NhZ2VzIGluIGEgZ2l2ZW4gbG9nZmlsZSwgIlN5c0xvZyIgdXNlcyB0aGUgc3lzbG9nIGRhZW1vbiBvZiB0aGUgc3lzdGVtLCBlLmcuIHN5c2xvZ2QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG1heGltYWwgc2l6ZSAoaW4gYnl0ZXMpIGZvciBmaWxlIHVwbG9hZHMgdmlhIHRoZSBicm93c2VyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtYXhpbWFsIHZhbGlkIHRpbWUgKGluIHNlY29uZHMpIGZvciBhIHNlc3Npb24gaWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIHBlciBQREYgZmlsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbWF4aW11bSBzaXplIChpbiBNQikgb2YgdGhlIGxvZyBmaWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtb2R1bGUgdGhhdCBzaG93cyBhbGwgdGhlIGN1cnJlbnRseSBsb2dlZCBpbiBjdXN0b21lcnMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbW9kdWxlIHRoYXQgc2hvd3MgYWxsIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIGFnZW50cyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtb2R1bGUgdGhhdCBzaG93cyB0aGUgY3VycmVudGx5IGxvZ2VkIGluIGFnZW50cyBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtb2R1bGUgdGhhdCBzaG93cyB0aGUgY3VycmVudGx5IGxvZ2VkIGluIGN1c3RvbWVycyBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtb2R1bGUgdG8gYXV0aGVudGljYXRlIGN1c3RvbWVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbW9kdWxlIHRvIGRpc3BsYXkgYSBub3RpZmljYXRpb24gaW4gdGhlIGFnZW50IGludGVyZmFjZSwgaWYgdGhlIHN5c3RlbSBpcyB1c2VkIGJ5IHRoZSBhZG1pbiB1c2VyIChub3JtYWxseSB5b3Ugc2hvdWxkblwndCB3b3JrIGFzIGFkbWluKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgcmVmcmVzaCBoZWFkZXJzIG9mIGh0bWwgc2l0ZXMsIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG1vZHVsZSB0byBnZW5lcmF0ZSBodG1sIHJlZnJlc2ggaGVhZGVycyBvZiBodG1sIHNpdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtb2R1bGUgdG8gc2VuZCBlbWFpbHMuICJTZW5kbWFpbCIgZGlyZWN0bHkgdXNlcyB0aGUgc2VuZG1haWwgYmluYXJ5IG9mIHlvdXIgb3BlcmF0aW5nIHN5c3RlbS4gQW55IG9mIHRoZSAiU01UUCIgbWVjaGFuaXNtcyB1c2UgYSBzcGVjaWZpZWQgKGV4dGVybmFsKSBtYWlsc2VydmVyLiAiRG9Ob3RTZW5kRW1haWwiIGRvZXNuXCd0IHNlbmQgZW1haWxzIGFuZCBpdCBpcyB1c2VmdWwgZm9yIHRlc3Qgc3lzdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbW9kdWxlIHVzZWQgdG8gc3RvcmUgdGhlIHNlc3Npb24gZGF0YS4gV2l0aCAiREIiIHRoZSBmcm9udGVuZCBzZXJ2ZXIgY2FuIGJlIHNwbGl0dGVkIGZyb20gdGhlIGRiIHNlcnZlci4gIkZTIiBpcyBmYXN0ZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uLCBzaG93biBpbiB0aGUgd2ViIGludGVyZmFjZSwgdGFicyBhbmQgdGl0bGUgYmFyIG9mIHRoZSB3ZWIgYnJvd3Nlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDEuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciAyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgMy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA1Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgNi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgOS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgY29sdW1uIHRvIHN0b3JlIHRoZSBkYXRhIGluIHRoZSBwcmVmZXJlbmNlcyB0YWJsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgY29sdW1uIHRvIHN0b3JlIHRoZSB1c2VyIGlkZW50aWZpZXIgaW4gdGhlIHByZWZlcmVuY2VzIHRhYmxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBrZXkgZm9yIGN1c3RvbWVyIHNlc3Npb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBzZXNzaW9uIGtleS4gRS5nLiBTZXNzaW9uLCBTZXNzaW9uSUQgb3IgT1RSUy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgdGFibGUsIHdoZXJlIHRoZSBjdXN0b21lciBwcmVmZXJlbmNlcyBhcmUgc3RvcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHBvc3NpYmxlIHN0YXRlcyBhZnRlciBjb21wb3NpbmcgLyBhbnN3ZXJpbmcgYSB0aWNrZXQgaW4gdGhlIHRpY2tldCBjb21wb3NlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHBvc3NpYmxlIHN0YXRlcyBhZnRlciBmb3J3YXJkaW5nIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgZm9yd2FyZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBwb3NzaWJsZSBzdGF0ZXMgZm9yIGN1c3RvbWVyIHRpY2tldHMgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGJlaW5nIGJvdW5jZWQsIGluIHRoZSB0aWNrZXQgYm91bmNlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGJlaW5nIG1vdmVkIHRvIGFub3RoZXIgcXVldWUsIGluIHRoZSBtb3ZlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGN1c3RvbWVyIHByZWZlcmVuY2VzIHRhYmxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGluZGljYXRlcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTCIgaW5kaWNhdGVzIHRoZSBjYWNoZSBleHBpcmF0aW9uIHBlcmlvZCBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGluZGljYXRlcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBkZWZpbmVzIHRoZSBjYWNoZSBleHBpcmF0aW9uIHBlcmlvZCBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQuICJMaW1pdCIgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZGlzcGxheWVkIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGluZGljYXRlcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTCIgaW5kaWNhdGVzIHRoZSBjYWNoZSBleHBpcmF0aW9uIHBlcmlvZCBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQuICJMaW1pdCIgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZGlzcGxheWVkIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGluZGljYXRlcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBkZWZpbmVzIHRoZSBjYWNoZSBleHBpcmF0aW9uIHBlcmlvZCBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXNzd29yZCB0byBhY2Nlc3MgdGhlIFNPQVAgaGFuZGxlIChiaW4vY2dpLWJpbi9ycGMucGwpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXRoIGFuZCBUVEYtRmlsZSB0byBoYW5kbGUgYm9sZCBpdGFsaWMgbW9ub3NwYWNlZCBmb250IGluIFBERiBkb2N1bWVudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhdGggYW5kIFRURi1GaWxlIHRvIGhhbmRsZSBib2xkIGl0YWxpYyBwcm9wb3J0aW9uYWwgZm9udCBpbiBQREYgZG9jdW1lbnRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXRoIGFuZCBUVEYtRmlsZSB0byBoYW5kbGUgYm9sZCBtb25vc3BhY2VkIGZvbnQgaW4gUERGIGRvY3VtZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGF0aCBhbmQgVFRGLUZpbGUgdG8gaGFuZGxlIGJvbGQgcHJvcG9ydGlvbmFsIGZvbnQgaW4gUERGIGRvY3VtZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGF0aCBhbmQgVFRGLUZpbGUgdG8gaGFuZGxlIGl0YWxpYyBtb25vc3BhY2VkIGZvbnQgaW4gUERGIGRvY3VtZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGF0aCBhbmQgVFRGLUZpbGUgdG8gaGFuZGxlIGl0YWxpYyBwcm9wb3J0aW9uYWwgZm9udCBpbiBQREYgZG9jdW1lbnRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXRoIGFuZCBUVEYtRmlsZSB0byBoYW5kbGUgbW9ub3NwYWNlZCBmb250IGluIFBERiBkb2N1bWVudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhdGggYW5kIFRURi1GaWxlIHRvIGhhbmRsZSBwcm9wb3J0aW9uYWwgZm9udCBpbiBQREYgZG9jdW1lbnRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXRoIG9mIHRoZSBzaG93biBpbmZvIGZpbGUsIHRoYXQgaXMgbG9jYXRlZCB1bmRlciBLZXJuZWwvT3V0cHV0L0hUTUwvU3RhbmRhcmQvQ3VzdG9tZXJBY2NlcHQuZHRsLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXRoIHRvIFBHUCBiaW5hcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhdGggdG8gb3BlbiBzc2wgYmluYXJ5LiBJdCBtYXkgbmVlZCBhIEhPTUUgZW52ICgkRU5We0hPTUV9ID0gXCcvdmFyL2xpYi93d3dydW5cJzspLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGxlZ2VuZC4gVGhpcyBzaG91bGQgYmUgYSB0d28gbGV0dGVyIGtleSBvZiB0aGUgZm9ybTogXCdCW0xDUl18UltUQ0JdXCcuIFRoZSBmaXJzdCBsZXR0ZXIgaW5kaWNhdGVzIHRoZSBwbGFjZW1lbnQgKEJvdHRvbSBvciBSaWdodCksIGFuZCB0aGUgc2Vjb25kIGxldHRlciB0aGUgYWxpZ25tZW50IChMZWZ0LCBSaWdodCwgQ2VudGVyLCBUb3AsIG9yIEJvdHRvbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBvc3RtYXN0ZXIgZGVmYXVsdCBxdWV1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVjZWlwZW50IHRhcmdldCBvZiB0aGUgcGhvbmUgdGlja2V0IGFuZCB0aGUgc2VuZGVyIG9mIHRoZSBlbWFpbCB0aWNrZXQgKCJRdWV1ZSIgc2hvd3MgYWxsIHF1ZXVlcywgIlN5c3RlbUFkZHJlc3MiIGRpc3BsYXlzIGFsbCBzeXN0ZW0gYWRkcmVzc2VzKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSByZWNlaXBlbnQgdGFyZ2V0IG9mIHRoZSB0aWNrZXRzICgiUXVldWUiIHNob3dzIGFsbCBxdWV1ZXMsICJTeXN0ZW1BZGRyZXNzIiBkaXNwbGF5cyBhbGwgc3lzdGVtIGFkZHJlc3NlcykgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgc3RhdHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBhZ2VudHMgcmVhbCBuYW1lIGFuZCB0aGUgZ2l2ZW4gcXVldWUgZW1haWwgYWRkcmVzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3BhY2luZyBvZiB0aGUgbGVnZW5kcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3RhbmRhcmQgcGVybWlzc2lvbnMgYXZhaWxhYmxlIGZvciBjdXN0b21lcnMgd2l0aGluIHRoZSBhcHBsaWNhdGlvbi4gSWYgbW9yZSBwZXJtaXNzaW9ucyBhcmUgbmVlZGVkLCB5b3UgY2FuIGVudGVyIHRoZW0gaGVyZS4gUGVybWlzc2lvbnMgbXVzdCBiZSBoYXJkIGNvZGVkIHRvIGJlIGVmZmVjdGl2ZS4gUGxlYXNlIGVuc3VyZSwgd2hlbiBhZGRpbmcgYW55IG9mIHRoZSBhZm9yZSBtZW50aW9uZWQgcGVybWlzc2lvbnMsIHRoYXQgdGhlICJydyIgcGVybWlzc2lvbiByZW1haW5zIHRoZSBsYXN0IGVudHJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzdGFuZGFyZCBzaXplIG9mIFBERiBwYWdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3RhdGUgb2YgYSB0aWNrZXQgaWYgaXQgZ2V0cyBhIGZvbGxvdy11cCBhbmQgdGhlIHRpY2tldCB3YXMgYWxyZWFkeSBjbG9zZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHN0YXRlIG9mIGEgdGlja2V0IGlmIGl0IGdldHMgYSBmb2xsb3ctdXAuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHN0YXRlIHR5cGUgb2YgdGhlIHJlbWluZGVyIGZvciBwZW5kaW5nIHRpY2tldHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHN1YmplY3QgZm9yIG5vdGlmaWNhdGlvbiBtYWlscyBzZW50IHRvIGFnZW50cywgYWJvdXQgbmV3IHBhc3N3b3JkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzdWJqZWN0IGZvciBub3RpZmljYXRpb24gbWFpbHMgc2VudCB0byBhZ2VudHMsIHdpdGggdG9rZW4gYWJvdXQgbmV3IHJlcXVlc3RlZCBwYXNzd29yZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3ViamVjdCBmb3Igbm90aWZpY2F0aW9uIG1haWxzIHNlbnQgdG8gY3VzdG9tZXJzLCBhYm91dCBuZXcgYWNjb3VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3ViamVjdCBmb3Igbm90aWZpY2F0aW9uIG1haWxzIHNlbnQgdG8gY3VzdG9tZXJzLCBhYm91dCBuZXcgcGFzc3dvcmQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHN1YmplY3QgZm9yIG5vdGlmaWNhdGlvbiBtYWlscyBzZW50IHRvIGN1c3RvbWVycywgd2l0aCB0b2tlbiBhYm91dCBuZXcgcmVxdWVzdGVkIHBhc3N3b3JkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzdWJqZWN0IGZvciByZWplY3RlZCBlbWFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yXCdzIGVtYWlsIGFkZHJlc3MuIEl0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBlcnJvciBzY3JlZW5zIG9mIHRoZSBhcHBsaWNhdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3lzdGVtIGlkZW50aWZpZXIuIEV2ZXJ5IHRpY2tldCBudW1iZXIgYW5kIGh0dHAgc2Vzc2lvbiBzdHJpbmcgY29udGFpbiB0aGlzIElELiBUaGlzIGVuc3VyZXMgdGhhdCBvbmx5IHRpY2tldHMgd2hpY2ggYmVsb25nIHRvIHlvdXIgc3lzdGVtIHdpbGwgYmUgcHJvY2Vzc2VkIGFzIGZvbGxvdy11cHMgKHVzZWZ1bCB3aGVuIGNvbW11bmljYXRpbmcgYmV0d2VlbiB0d28gaW5zdGFuY2VzIG9mIE9UUlMpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0YXJnZXQgYXR0cmlidXRlIGluIHRoZSBsaW5rIHRvIGV4dGVybmFsIGN1c3RvbWVyIGRhdGFiYXNlLiBFLmcuIFwndGFyZ2V0PSJjZGIiXCcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHRpbWUgem9uZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDEsIHdoaWNoIGNhbiBiZSBhc3NpZ25lZCBsYXRlciB0byBhIHNwZWNpZmljIHF1ZXVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0aW1lIHpvbmUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciAyLCB3aGljaCBjYW4gYmUgYXNzaWduZWQgbGF0ZXIgdG8gYSBzcGVjaWZpYyBxdWV1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdGltZSB6b25lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgMywgd2hpY2ggY2FuIGJlIGFzc2lnbmVkIGxhdGVyIHRvIGEgc3BlY2lmaWMgcXVldWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHRpbWUgem9uZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDQsIHdoaWNoIGNhbiBiZSBhc3NpZ25lZCBsYXRlciB0byBhIHNwZWNpZmljIHF1ZXVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0aW1lIHpvbmUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA1LCB3aGljaCBjYW4gYmUgYXNzaWduZWQgbGF0ZXIgdG8gYSBzcGVjaWZpYyBxdWV1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdGltZSB6b25lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgNiwgd2hpY2ggY2FuIGJlIGFzc2lnbmVkIGxhdGVyIHRvIGEgc3BlY2lmaWMgcXVldWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHRpbWUgem9uZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDcsIHdoaWNoIGNhbiBiZSBhc3NpZ25lZCBsYXRlciB0byBhIHNwZWNpZmljIHF1ZXVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0aW1lIHpvbmUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA4LCB3aGljaCBjYW4gYmUgYXNzaWduZWQgbGF0ZXIgdG8gYSBzcGVjaWZpYyBxdWV1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdGltZSB6b25lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgOSwgd2hpY2ggY2FuIGJlIGFzc2lnbmVkIGxhdGVyIHRvIGEgc3BlY2lmaWMgcXVldWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHR5cGUgb2YgcHJvdG9jb2wsIHVzZWQgYnkgdGhlciB3ZWIgc2VydmVyLCB0byBzZXJ2ZSB0aGUgYXBwbGljYXRpb24uIElmIGh0dHBzIHByb3RvY29sIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHBsYWluIGh0dHAsIGl0IG11c3QgYmUgc3BlY2lmaWVkIGl0IGhlcmUuIFNpbmNlIHRoaXMgaGFzIG5vIGFmZmVjdCBvbiB0aGUgd2ViIHNlcnZlclwncyBzZXR0aW5ncyBvciBiZWhhdmlvciwgaXQgd2lsbCBub3QgY2hhbmdlIHRoZSBtZXRob2Qgb2YgYWNjZXNzIHRvIHRoZSBhcHBsaWNhdGlvbiBhbmQsIGlmIGl0IGlzIHdyb25nLCBpdCB3aWxsIG5vdCBwcmV2ZW50IHlvdSBmcm9tIGxvZ2dpbmcgaW50byB0aGUgYXBwbGljYXRpb24uIFRoaXMgc2V0dGluZyBpcyB1c2VkIGFzIGEgdmFyaWFibGUsIE9UUlNfQ09ORklHX0h0dHBUeXBlIHdoaWNoIGlzIGZvdW5kIGluIGFsbCBmb3JtcyBvZiBtZXNzYWdpbmcgdXNlZCBieSB0aGUgYXBwbGljYXRpb24sIHRvIGJ1aWxkIGxpbmtzIHRvIHRoZSB0aWNrZXRzIHdpdGhpbiB5b3VyIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdXNlZCBjaGFyYWN0ZXIgZm9yIGVtYWlsIHF1b3RlcyBpbiB0aGUgdGlja2V0IGNvbXBvc2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHVzZXIgaWRlbnRpZmllciBmb3IgdGhlIGN1c3RvbWVyIHBhbmVsLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB1c2VybmFtZSB0byBhY2Nlc3MgdGhlIFNPQVAgaGFuZGxlIChiaW4vY2dpLWJpbi9ycGMucGwpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB2YWxpZCBzdGF0ZSB0eXBlcyBmb3IgYSB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHZhbGlkIHN0YXRlcyBmb3IgdW5sb2NrZWQgdGlja2V0cy4gVG8gdW5sb2NrIHRpY2tldHMgdGhlIHNjcmlwdCAiYmluL290cnMuVW5sb2NrVGlja2V0cy5wbCIgY2FuIGJlIHVzZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHZpZXdhYmxlIGxvY2tzIG9mIGEgdGlja2V0LiBEZWZhdWx0OiB1bmxvY2ssIHRtcF9sb2NrLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3aWR0aCBmb3IgdGhlIHJpY2ggdGV4dCBlZGl0b3IgY29tcG9uZW50LiBFbnRlciBudW1iZXIgKHBpeGVscykgb3IgcGVyY2VudCB2YWx1ZSAocmVsYXRpdmUpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3aWR0aCBvZiB0aGUgbGVnZW5kLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB5ZWFycyAoaW4gZnV0dXJlIGFuZCBpbiBwYXN0KSB3aGljaCBjYW4gZ2V0IHNlbGVjdGVkIGluIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgMS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgeWVhcnMgKGluIGZ1dHVyZSBhbmQgaW4gcGFzdCkgd2hpY2ggY2FuIGdldCBzZWxlY3RlZCBpbiBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHllYXJzIChpbiBmdXR1cmUgYW5kIGluIHBhc3QpIHdoaWNoIGNhbiBnZXQgc2VsZWN0ZWQgaW4gZnJlZSB0aW1lIGZpZWxkIG51bWJlciAzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB5ZWFycyAoaW4gZnV0dXJlIGFuZCBpbiBwYXN0KSB3aGljaCBjYW4gZ2V0IHNlbGVjdGVkIGluIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgNC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgeWVhcnMgKGluIGZ1dHVyZSBhbmQgaW4gcGFzdCkgd2hpY2ggY2FuIGdldCBzZWxlY3RlZCBpbiBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHllYXJzIChpbiBmdXR1cmUgYW5kIGluIHBhc3QpIHdoaWNoIGNhbiBnZXQgc2VsZWN0ZWQgaW4gZnJlZSB0aW1lIGZpZWxkIG51bWJlciA2Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXRoZXIgdGhlIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgMSBpcyBvcHRpb25hbCBvciBub3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciB0aGUgZnJlZSB0aW1lIGZpZWxkIG51bWJlciAyIGlzIG9wdGlvbmFsIG9yIG5vdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGV0aGVyIHRoZSBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDMgaXMgb3B0aW9uYWwgb3Igbm90Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXRoZXIgdGhlIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgNCBpcyBvcHRpb25hbCBvciBub3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciB0aGUgZnJlZSB0aW1lIGZpZWxkIG51bWJlciA1IGlzIG9wdGlvbmFsIG9yIG5vdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGV0aGVyIHRoZSBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDYgaXMgb3B0aW9uYWwgb3Igbm90Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHN0YXRlcyBzaG91bGQgYmUgc2V0IGF1dG9tYXRpY2FsbHkgKENvbnRlbnQpLCBhZnRlciB0aGUgcGVuZGluZyB0aW1lIG9mIHN0YXRlIChLZXkpIGhhcyBiZWVuIHJlYWNoZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGF5IHRpbWUgYmV0d2VlbiBhdXRvY29tcGxldGUgcXVlcmllcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgdGlja2V0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGVzIGEgc2Vzc2lvbiBpZiB0aGUgc2Vzc2lvbiBpZCBpcyB1c2VkIHdpdGggYW4gaW52YWxpZCByZW1vdGUgSVAgYWRkcmVzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlcyByZXF1ZXN0ZWQgc2Vzc2lvbnMgaWYgdGhleSBoYXZlIHRpbWVkIG91dC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgbGlzdCBvZiBwb3NzaWJsZSBxdWV1ZXMgdG8gbW92ZSB0byB0aWNrZXQgaW50byBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgZHJvcGRvd24gbGlzdCBvciBpbiBhIG5ldyB3aW5kb3cgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gSWYgIk5ldyBXaW5kb3ciIGlzIHNldCB5b3UgY2FuIGFkZCBhIG1vdmUgbm90ZSB0byB0aGUgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBzZWFyY2ggcmVzdWx0cyBjb250YWluZXIgZm9yIHRoZSBhdXRvY29tcGxldGUgZmVhdHVyZSBzaG91bGQgYWRqdXN0IGl0cyB3aWR0aCBkeW5hbWljYWxseS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgc3RhdGF0aXN0aWNzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgdGlja2V0IGxpc3RzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIHRoZSBuZXh0IHBvc3NpYmxlIHRpY2tldCBzdGF0ZXMsIGFmdGVyIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBlbWFpbCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyB0aGUgbmV4dCBwb3NzaWJsZSB0aWNrZXQgc3RhdGVzLCBhZnRlciB0aGUgY3JlYXRpb24gb2YgYSBuZXcgcGhvbmUgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgdGhlIG5leHQgc2NyZWVuIGFmdGVyIG5ldyBjdXN0b21lciB0aWNrZXQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyB0aGUgbmV4dCBzY3JlZW4gYWZ0ZXIgdGhlIGZvbGxvdyB1cCBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgdGhlIHBvc3NpYmxlIHN0YXRlcyBmb3IgcGVuZGluZyB0aWNrZXRzIHRoYXQgY2hhbmdlZCBzdGF0ZSBhZnRlciByZWFjaGluZyB0aW1lIGxpbWl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIHRoZSBzdHJpbmdzIHRoYXQgd2lsbCBiZSBzaG93biBhcyByZWNlaXBlbnQgKFRvOikgb2YgdGhlIHBob25lIHRpY2tldCBhbmQgYXMgc2VuZGVyIChGcm9tOikgb2YgdGhlIGVtYWlsIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBGb3IgUXVldWUgYXMgTmV3UXVldWVTZWxlY3Rpb25UeXBlICI8UXVldWU+IiBzaG93cyB0aGUgbmFtZXMgb2YgdGhlIHF1ZXVlcyBhbmQgZm9yIFN5c3RlbUFkZHJlc3MgIjxSZWFsbmFtZT4gPDxFbWFpbD4+IiBzaG93cyB0aGUgbmFtZSBhbmQgZW1haWwgb2YgdGhlIHJlY2VpcGVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyB0aGUgc3RyaW5ncyB0aGF0IHdpbGwgYmUgc2hvd24gYXMgcmVjZWlwZW50IChUbzopIG9mIHRoZSB0aWNrZXQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gRm9yIFF1ZXVlIGFzIEN1c3RvbWVyUGFuZWxTZWxlY3Rpb25UeXBlLCAiPFF1ZXVlPiIgc2hvd3MgdGhlIG5hbWVzIG9mIHRoZSBxdWV1ZXMsIGFuZCBmb3IgU3lzdGVtQWRkcmVzcywgIjxSZWFsbmFtZT4gPDxFbWFpbD4+IiBzaG93cyB0aGUgbmFtZSBhbmQgZW1haWwgb2YgdGhlIHJlY2VpcGVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyB0aGUgd2F5IHRoZSBsaW5rZWQgb2JqZWN0cyBhcmUgZGlzcGxheWVkIGluIGVhY2ggem9vbSBtYXNrLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIHdoaWNoIG9wdGlvbnMgd2lsbCBiZSB2YWxpZCBvZiB0aGUgcmVjZXBpZW50IChwaG9uZSB0aWNrZXQpIGFuZCB0aGUgc2VuZGVyIChlbWFpbCB0aWNrZXQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgd2hpY2ggcXVldWVzIHdpbGwgYmUgdmFsaWQgZm9yIHRpY2tldFwncyByZWNlcGllbnRzIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rpc2FibGVzIHNlbmRpbmcgcmVtaW5kZXIgbm90aWZpY2F0aW9ucyB0byB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgYSB0aWNrZXQgKFRpY2tldDo6UmVzcG9uc2libGUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGlzYWJsZXMgdGhlIHdlYiBpbnN0YWxsZXIgKGh0dHA6Ly95b3VyaG9zdC5leGFtcGxlLmNvbS9vdHJzL2luc3RhbGxlci5wbCksIHRvIHByZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGJlaW5nIGhpamFja2VkLiBJZiBzZXQgdG8gIk5vIiwgdGhlIHN5c3RlbSBjYW4gYmUgcmVpbnN0YWxsZWQgYW5kIHRoZSBjdXJyZW50IGJhc2ljIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSB1c2VkIHRvIHByZS1wb3B1bGF0ZSB0aGUgcXVlc3Rpb25zIHdpdGhpbiB0aGUgaW5zdGFsbGVyIHNjcmlwdC4gSWYgbm90IGFjdGl2ZSwgaXQgYWxzbyBkaXNhYmxlcyB0aGUgR2VuZXJpY0FnZW50LCBQYWNrYWdlTWFuYWdlciBhbmQgU1FMIEJveCAodG8gYXZvaWQgdGhlIHVzZSBvZiBkZXN0cnVjdGl2ZSBxdWVyaWVzLCBzdWNoIGFzIERST1AgREFUQUJBU0UsIGFuZCBhbHNvIHRvIHN0ZWFsIHVzZXIgcGFzc3dvcmRzKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGlzcGxheXMgdGhlIGFjY291bnRlZCB0aW1lIGZvciBhbiBhcnRpY2xlIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWFpbCBBZGRyZXNzZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBQREYgb3V0cHV0LiBUaGUgQ1BBTiBtb2R1bGUgUERGOjpBUEkyIGlzIHJlcXVpcmVkLCBpZiBub3QgaW5zdGFsbGVkLCBQREYgb3V0cHV0IHdpbGwgYmUgZGlzYWJsZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgUEdQIHN1cHBvcnQuIFdoZW4gUEdQIHN1cHBvcnQgaXMgZW5hYmxlZCBmb3Igc2lnbmluZyBhbmQgc2VjdXJpbmcgbWFpbCwgaXQgaXMgSElHSExZIHJlY29tbWVuZGVkIHRoYXQgdGhlIHdlYiBzZXJ2ZXIgYmUgcnVuIGFzIHRoZSBPVFJTIHVzZXIuIE90aGVyd2lzZSwgdGhlcmUgd2lsbCBiZSBwcm9ibGVtcyB3aXRoIHRoZSBwcml2aWxlZ2VzIHdoZW4gYWNjZXNzaW5nIC5nbnVwZyBmb2xkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgUy9NSU1FIHN1cHBvcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY3VzdG9tZXJzIHRvIGNyZWF0ZSB0aGVpciBvd24gYWNjb3VudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgZmlsZSB1cGxvYWQgaW4gdGhlIHBhY2thZ2UgbWFuYWdlciBmcm9udGVuZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBvciBkaXNhYmxlIHRoZSBkZWJ1ZyBtb2RlIG92ZXIgZnJvbnRlbmQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBhdXRvY29tcGxldGUgZmVhdHVyZSBmb3IgdGhlIGN1c3RvbWVyIHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIG9yIGRpc2FibGVzIHRoZSB0aWNrZXQgd2F0Y2hlciBmZWF0dXJlLCB0byBrZWVwIHRyYWNrIG9mIHRpY2tldHMgd2l0aG91dCBiZWluZyB0aGUgb3duZXIgbm9yIHRoZSByZXNwb25zaWJsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBwZXJmb3JtYW5jZSBsb2cgKHRvIGxvZyB0aGUgcGFnZSByZXNwb25zZSB0aW1lKS4gSXQgd2lsbCBhZmZlY3QgdGhlIHN5c3RlbSBwZXJmb3JtYW5jZS4gRnJvbnRlbmQ6Ok1vZHVsZSMjI0FkbWluUGVyZm9ybWFuY2VMb2cgbXVzdCBiZSBlbmFibGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHNwZWxsIGNoZWNrZXIgc3VwcG9ydC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aWNrZXQgYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSB0aWNrZXQgYXQgYSB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRpY2tldCBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRpY2tldCByZXNwb25zaWJsZSBmZWF0dXJlLCB0byBrZWVwIHRyYWNrIG9mIGEgc3BlY2lmaWMgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRpY2tldCB3YXRjaGVyIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VzY2FsYXRpb24gdmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgcmVnaXN0cmF0aW9uLiBGb3IgbW9yZSBwZXJmb3JtYW5jZSB5b3UgY2FuIGRlZmluZSBhIHRyaWdnZXIgZXZlbnQgKGUuIGcuIEV2ZW50ID0+IFRpY2tldENyZWF0ZSkuIFRoaXMgaXMgb25seSBwb3NzaWJsZSBpZiBhbGwgVGlja2V0RnJlZUZpZWxkIGVsZW1lbnRzIG5lZWQgdGhlIHNhbWUgZXZlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4YW1wbGUgZm9yIGZyZWUgdGV4dCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeGVjdXRlIFNRTCBzdGF0ZW1lbnRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeGVjdXRlcyBmb2xsb3cgdXAgY2hlY2tzIG9uIEluLVJlcGx5LVRvIG9yIFJlZmVyZW5jZXMgaGVhZGVycyBmb3IgbWFpbHMgdGhhdCBkb25cJ3QgaGF2ZSBhIHRpY2tldCBudW1iZXIgaW4gdGhlIHN1YmplY3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4ZWN1dGVzIGZvbGxvdyB1cCBtYWlsIGF0dGFjaG1lbnRzIGNoZWNrcyBpbiAgbWFpbHMgdGhhdCBkb25cJ3QgaGF2ZSBhIHRpY2tldCBudW1iZXIgaW4gdGhlIHN1YmplY3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4ZWN1dGVzIGZvbGxvdyB1cCBtYWlsIGJvZHkgY2hlY2tzIGluIG1haWxzIHRoYXQgZG9uXCd0IGhhdmUgYSB0aWNrZXQgbnVtYmVyIGluIHRoZSBzdWJqZWN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeGVjdXRlcyBmb2xsb3cgdXAgcGxhaW4vcmF3IG1haWwgY2hlY2tzIGluIG1haWxzIHRoYXQgZG9uXCd0IGhhdmUgYSB0aWNrZXQgbnVtYmVyIGluIHRoZSBzdWJqZWN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBlcmltZW50YWwgIlNsaW0iIHNraW4gd2hpY2ggdHJpZXMgdG8gc2F2ZSBzY3JlZW4gc3BhY2UgZm9yIHBvd2VyIHVzZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBvcnRzIHRoZSB3aG9sZSBhcnRpY2xlIHRyZWUgaW4gc2VhcmNoIHJlc3VsdCAoaXQgY2FuIGFmZmVjdCB0aGUgc3lzdGVtIHBlcmZvcm1hbmNlKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmV0Y2hlcyBwYWNrYWdlcyB2aWEgcHJveHkuIE92ZXJ3cml0ZXMgIldlYlVzZXJBZ2VudDo6UHJveHkiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWxlIHRoYXQgaXMgZGlzcGxheWVkIGluIHRoZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50SW5mbyBtb2R1bGUsIGlmIGxvY2F0ZWQgdW5kZXIgS2VybmVsL091dHB1dC9IVE1ML1N0YW5kYXJkL0FnZW50SW5mby5kdGwuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBpbmNvbWluZyBlbWFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcmNlcyBlbmNvZGluZyBvZiBvdXRnb2luZyBlbWFpbHMgKDdiaXR8OGJpdHxxdW90ZWQtcHJpbnRhYmxlfGJhc2U2NCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcmNlcyB0byBjaG9vc2UgYSBkaWZmZXJlbnQgdGlja2V0IHN0YXRlIChmcm9tIGN1cnJlbnQpIGFmdGVyIGxvY2sgYWN0aW9uLiBEZWZpbmUgdGhlIGN1cnJlbnQgc3RhdGUgYXMga2V5LCBhbmQgdGhlIG5leHQgc3RhdGUgYWZ0ZXIgbG9jayBhY3Rpb24gYXMgY29udGVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9yY2VzIHRvIHVubG9jayB0aWNrZXRzIGFmdGVyIGJlaW5nIG1vdmVkIHRvIGFub3RoZXIgcXVldWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIGxhbmd1YWdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gKGRpc2FibGUgY29tcGFueSBsaW5rIGlmIG5vIGNvbXBhbnkgZmVhdHVyZSBpcyB1c2VkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgdGhlbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJpY0FnZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dpdmVzIGVuZCB1c2VycyB0aGUgcG9zc2liaWxpdHkgdG8gb3ZlcnJpZGUgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIgZm9yIENTViBmaWxlcywgZGVmaW5lZCBpbiB0aGUgdHJhbnNsYXRpb24gZmlsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYW50cyBhY2Nlc3MsIGlmIHRoZSBjdXN0b21lciBJRCBvZiB0aGUgdGlja2V0IG1hdGNoZXMgdGhlIGN1c3RvbWVyIHVzZXJcJ3MgSUQgYW5kIHRoZSBjdXN0b21lciB1c2VyIGhhcyBncm91cCBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUgdGhlIHRpY2tldCBpcyBpbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JvdXBzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hlbHBzIHRvIGV4dGVuZCB5b3VyIGFydGljbGVzIGZ1bGwtdGV4dCBzZWFyY2ggKEZyb20sIFRvLCBDYywgU3ViamVjdCBhbmQgQm9keSBzZWFyY2gpLiBSdW50aW1lIHdpbGwgZG8gZnVsbC10ZXh0IHNlYXJjaGVzIG9uIGxpdmUgZGF0YSAoaXQgd29ya3MgZmluZSBmb3IgdXAgdG8gNTAuMDAwIHRpY2tldHMpLiBTdGF0aWNEQiB3aWxsIHN0cmlwIGFsbCBhcnRpY2xlcyBhbmQgd2lsbCBidWlsZCBhbiBpbmRleCBhZnRlciBhcnRpY2xlIGNyZWF0aW9uLCBpbmNyZWFzaW5nIGZ1bGx0ZXh0IHNlYXJjaGVzIGFib3V0IDUwJS4gVG8gY3JlYXRlIGFuIGluaXRpYWwgaW5kZXggdXNlICJiaW4vb3Rycy5SZWJ1aWxkRnVsbHRleHRJbmRleC5wbCIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgYSBkYXRhYmFzZSBkcml2ZXIgKG5vcm1hbGx5IGF1dG9kZXRlY3Rpb24gaXMgdXNlZCkgY2FuIGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkRCIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCBhIHBhc3N3b3JkIHRvIGNvbm5lY3QgdG8gdGhlIGN1c3RvbWVyIHRhYmxlIGNhbiBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgYSB1c2VybmFtZSB0byBjb25uZWN0IHRvIHRoZSBjdXN0b21lciB0YWJsZSBjYW4gYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiREIiIHdhcyBzZWxlY3RlZCBmb3IgQ3VzdG9tZXI6OkF1dGhNb2R1bGUsIHRoZSBEU04gZm9yIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBjdXN0b21lciB0YWJsZSBtdXN0IGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkRCIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCB0aGUgY29sdW1uIG5hbWUgZm9yIHRoZSBDdXN0b21lclBhc3N3b3JkIGluIHRoZSBjdXN0b21lciB0YWJsZSBtdXN0IGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkRCIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCB0aGUgY3J5cHQgdHlwZSBvZiBwYXNzd29yZHMgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgdGhlIG5hbWUgb2YgdGhlIGNvbHVtbiBmb3IgdGhlIEN1c3RvbWVyS2V5IGluIHRoZSBjdXN0b21lciB0YWJsZSBtdXN0IGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkRCIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCB0aGUgbmFtZSBvZiB0aGUgdGFibGUgd2hlcmUgeW91ciBjdXN0b21lciBkYXRhIHNob3VsZCBiZSBzdG9yZWQgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBTZXNzaW9uTW9kdWxlLCBhIGNvbHVtbiBmb3IgdGhlIGlkZW50aWZpZXJzIGluIHNlc3Npb24gdGFibGUgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBTZXNzaW9uTW9kdWxlLCBhIGNvbHVtbiBmb3IgdGhlIHZhbHVlcyBpbiBzZXNzaW9uIHRhYmxlIG11c3QgYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiREIiIHdhcyBzZWxlY3RlZCBmb3IgU2Vzc2lvbk1vZHVsZSwgYSB0YWJsZSBpbiBkYXRhYmFzZSB3aGVyZSBzZXNzaW9uIGRhdGEgd2lsbCBiZSBzdG9yZWQgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJGUyIgd2FzIHNlbGVjdGVkIGZvciBTZXNzaW9uTW9kdWxlLCBhIGRpcmVjdG9yeSB3aGVyZSB0aGUgc2Vzc2lvbiBkYXRhIHdpbGwgYmUgc3RvcmVkIG11c3QgYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiSFRUUEJhc2ljQXV0aCIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgeW91IGNhbiBzcGVjaWZ5IChieSB1c2luZyBhIFJlZ0V4cCkgdG8gc3RyaXAgcGFydHMgb2YgUkVNT1RFX1VTRVIgKGUuIGcuIGZvciB0byByZW1vdmUgdHJhaWxpbmcgZG9tYWlucykuIFJlZ0V4cC1Ob3RlLCAkMSB3aWxsIGJlIHRoZSBuZXcgTG9naW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJIVFRQQmFzaWNBdXRoIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCB5b3UgY2FuIHNwZWNpZnkgdG8gc3RyaXAgbGVhZGluZyBwYXJ0cyBvZiB1c2VyIG5hbWVzIChlLiBnLiBmb3IgZG9tYWlucyBsaWtlIGV4YW1wbGVfZG9tYWluXHVzZXIgdG8gdXNlcikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlIGFuZCBpZiB5b3Ugd2FudCB0byBhZGQgYSBzdWZmaXggdG8gZXZlcnkgY3VzdG9tZXIgbG9naW4gbmFtZSwgc3BlY2lmaXkgaXQgaGVyZSwgZS4gZy4geW91IGp1c3Qgd2FudCB0byB3cml0ZSB0aGUgdXNlcm5hbWUgdXNlciBidXQgaW4geW91ciBMREFQIGRpcmVjdG9yeSBleGlzdHMgdXNlckBkb21haW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlIGFuZCBzcGVjaWFsIHBhcmFtYXRlcnMgYXJlIG5lZWRlZCBmb3IgdGhlIE5ldDo6TERBUCBwZXJsIG1vZHVsZSwgeW91IGNhbiBzcGVjaWZ5IHRoZW0gaGVyZS4gU2VlICJwZXJsZG9jIE5ldDo6TERBUCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcmFtZXRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlIGFuZCB5b3VyIHVzZXJzIGhhdmUgb25seSBhbm9ueW1vdXMgYWNjZXNzIHRvIHRoZSBMREFQIHRyZWUsIGJ1dCB5b3Ugd2FudCB0byBzZWFyY2ggdGhyb3VnaCB0aGUgZGF0YSwgeW91IGNhbiBkbyB0aGlzIHdpdGggYSB1c2VyIHdobyBoYXMgYWNjZXNzIHRvIHRoZSBMREFQIGRpcmVjdG9yeS4gU3BlY2lmeSB0aGUgcGFzc3dvcmQgZm9yIHRoaXMgc3BlY2lhbCB1c2VyIGhlcmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlIGFuZCB5b3VyIHVzZXJzIGhhdmUgb25seSBhbm9ueW1vdXMgYWNjZXNzIHRvIHRoZSBMREFQIHRyZWUsIGJ1dCB5b3Ugd2FudCB0byBzZWFyY2ggdGhyb3VnaCB0aGUgZGF0YSwgeW91IGNhbiBkbyB0aGlzIHdpdGggYSB1c2VyIHdobyBoYXMgYWNjZXNzIHRvIHRoZSBMREFQIGRpcmVjdG9yeS4gU3BlY2lmeSB0aGUgdXNlcm5hbWUgZm9yIHRoaXMgc3BlY2lhbCB1c2VyIGhlcmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCB0aGUgQmFzZUROIG11c3QgYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiTERBUCIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgdGhlIExEQVAgaG9zdCBjYW4gYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiTERBUCIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgdGhlIHVzZXIgaWRlbnRpZmllciBtdXN0IGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkxEQVAiIHdhcyBzZWxlY3RlZCBmb3IgQ3VzdG9tZXI6OkF1dGhNb2R1bGUsIHVzZXIgYXR0cmlidXRlcyBjYW4gYmUgc3BlY2lmaWVkLiBGb3IgTERBUCBwb3NpeEdyb3VwcyB1c2UgVUlELCBmb3Igbm9uIExEQVAgcG9zaXhHcm91cHMgdXNlIGZ1bGwgdXNlciBETi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkxEQVAiIHdhcyBzZWxlY3RlZCBmb3IgQ3VzdG9tZXI6OkF1dGhNb2R1bGUsIHlvdSBjYW4gc3BlY2lmeSBhY2Nlc3MgYXR0cmlidXRlcyBoZXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiTERBUCIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgeW91IGNhbiBzcGVjaWZ5IGlmIHRoZSBhcHBsaWNhdGlvbnMgd2lsbCBzdG9wIGlmIGUuIGcuIGEgY29ubmVjdGlvbiB0byBhIHNlcnZlciBjYW5cJ3QgYmUgZXN0YWJsaXNoZWQgZHVlIHRvIG5ldHdvcmsgcHJvYmxlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRobW9kdWxlLCB5b3UgY2FuIGNoZWNrIGlmIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gYXV0aGVudGljYXRlIGJlY2F1c2UgaGUgaXMgaW4gYSBwb3NpeEdyb3VwLCBlLmcuIHVzZXIgbmVlZHMgdG8gYmUgaW4gYSBncm91cCB4eXogdG8gdXNlIE9UUlMuIFNwZWNpZnkgdGhlIGdyb3VwLCB3aG8gbWF5IGFjY2VzcyB0aGUgc3lzdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiTERBUCIgd2FzIHNlbGVjdGVkLCB5b3UgY2FuIGFkZCBhIGZpbHRlciB0byBlYWNoIExEQVAgcXVlcnksIGUuZy4gKG1haWw9KiksIChvYmplY3RjbGFzcz11c2VyKSBvciAoIW9iamVjdGNsYXNzPWNvbXB1dGVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIlJhZGl1cyIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgdGhlIHBhc3N3b3JkIHRvIGF1dGhlbnRpY2F0ZSB0byB0aGUgcmFkaXVzIGhvc3QgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJSYWRpdXMiIHdhcyBzZWxlY3RlZCBmb3IgQ3VzdG9tZXI6OkF1dGhNb2R1bGUsIHRoZSByYWRpdXMgaG9zdCBtdXN0IGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIlJhZGl1cyIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgeW91IGNhbiBzcGVjaWZ5IGlmIHRoZSBhcHBsaWNhdGlvbnMgd2lsbCBzdG9wIGlmIGUuIGcuIGEgY29ubmVjdGlvbiB0byBhIHNlcnZlciBjYW5cJ3QgYmUgZXN0YWJsaXNoZWQgZHVlIHRvIG5ldHdvcmsgcHJvYmxlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJTZW5kbWFpbCIgd2FzIHNlbGVjdGVkIGFzIFNlbmRtYWlsTW9kdWxlLCB0aGUgbG9jYXRpb24gb2YgdGhlIHNlbmRtYWlsIGJpbmFyeSBhbmQgdGhlIG5lZWRlZCBvcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiU3lzTG9nIiB3YXMgc2VsZWN0ZWQgZm9yIExvZ01vZHVsZSwgYSBzcGVjaWFsIGxvZyBmYWNpbGl0eSBjYW4gYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiU3lzTG9nIiB3YXMgc2VsZWN0ZWQgZm9yIExvZ01vZHVsZSwgYSBzcGVjaWFsIGxvZyBzb2NrIGNhbiBiZSBzcGVjaWZpZWQgKG9uIHNvbGFyaXMgeW91IG1heSBuZWVkIHRvIHVzZSBcJ3N0cmVhbVwnKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIlN5c0xvZyIgd2FzIHNlbGVjdGVkIGZvciBMb2dNb2R1bGUsIHRoZSBjaGFyc2V0IHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGxvZ2dpbmcgY2FuIGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgImZpbGUiIHdhcyBzZWxlY3RlZCBmb3IgTG9nTW9kdWxlLCBhIGxvZ2ZpbGUgbXVzdCBiZSBzcGVjaWZpZWQuIElmIHRoZSBmaWxlIGRvZXNuXCd0IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQgYnkgdGhlIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhIG5vdGUgaXMgYWRkZWQgYnkgYW4gYWdlbnQsIHNldHMgdGhlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGEgbm90ZSBpcyBhZGRlZCBieSBhbiBhZ2VudCwgc2V0cyB0aGUgc3RhdGUgb2YgYSB0aWNrZXQgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhIG5vdGUgaXMgYWRkZWQgYnkgYW4gYWdlbnQsIHNldHMgdGhlIHN0YXRlIG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhbnkgb2YgdGhlICJTTVRQIiBtZWNoYW5pc21zIHdhcyBzZWxlY3RlZCBhcyBTZW5kbWFpbE1vZHVsZSwgYW5kIGF1dGhlbnRpY2F0aW9uIHRvIHRoZSBtYWlsIHNlcnZlciBpcyBuZWVkZWQsIGEgcGFzc3dvcmQgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGFueSBvZiB0aGUgIlNNVFAiIG1lY2hhbmlzbXMgd2FzIHNlbGVjdGVkIGFzIFNlbmRtYWlsTW9kdWxlLCBhbmQgYXV0aGVudGljYXRpb24gdG8gdGhlIG1haWwgc2VydmVyIGlzIG5lZWRlZCwgYW4gdXNlcm5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGFueSBvZiB0aGUgIlNNVFAiIG1lY2hhbmlzbXMgd2FzIHNlbGVjdGVkIGFzIFNlbmRtYWlsTW9kdWxlLCB0aGUgbWFpbGhvc3QgdGhhdCBzZW5kcyBvdXQgdGhlIG1haWxzIG11c3QgYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhbnkgb2YgdGhlICJTTVRQIiBtZWNoYW5pc21zIHdhcyBzZWxlY3RlZCBhcyBTZW5kbWFpbE1vZHVsZSwgdGhlIHBvcnQgd2hlcmUgeW91ciBtYWlsc2VydmVyIGlzIGxpc3RlbmluZyBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGNvbmZpZ3VyZWQsIGFsbCBlbWFpbHMgc2VudCBieSB0aGUgYXBwbGljYXRpb24gd2lsbCBjb250YWluIGFuIFgtSGVhZGVyIHdpdGggdGhpcyBvcmdhbml6YXRpb24gb3IgY29tcGFueSBuYW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBlbmFibGVkLCBPVFJTIHdpbGwgZGVsaXZlciBhbGwgQ1NTIGZpbGVzIGluIG1pbmlmaWVkIGZvcm0uIFdBUk5JTkc6IElmIHlvdSB0dXJuIHRoaXMgb2ZmLCB0aGVyZSB3aWxsIGxpa2VseSBiZSBwcm9ibGVtcyBpbiBJRSA3LCBiZWNhdXNlIGl0IGNhbm5vdCBsb2FkIG1vcmUgdGhhbiAzMiBDU1MgZmlsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIE9UUlMgd2lsbCBkZWxpdmVyIGFsbCBKYXZhU2NyaXB0IGZpbGVzIGluIG1pbmlmaWVkIGZvcm0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIFRpY2tldFBob25lIGFuZCBUaWNrZXRFbWFpbCB3aWxsIGJlIG9wZW4gaW4gbmV3IHdpbmRvd3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIHRoZSBPVFJTIHZlcnNpb24gdGFnIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBIVFRQIGhlYWRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIHRoZSBRdWV1ZVZpZXcgd2lsbCBhdXRvbWF0aWNhbGx5IHJlZnJlc2ggYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBlbmFibGVkLCB0aGUgZmlyc3QgbGV2ZWwgb2YgdGhlIG1haW4gbWVudSBvcGVucyBvbiBtb3VzZSBob3ZlciAoaW5zdGVhZCBvZiBjbGljayBvbmx5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgc2V0LCB0aGlzIGFkZHJlc3MgaXMgdXNlZCBhcyBlbnZlbG9wZSBmcm9tIGhlYWRlciBpbiBvdXRnb2luZyBub3RpZmljYXRpb25zLiBJZiBubyBhZGRyZXNzIGlzIHNwZWNpZmllZCwgdGhlIGVudmVsb3BlIGZyb20gaGVhZGVyIGlzIGVtcHR5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB0aGlzIHJlZ2V4IG1hdGNoZXMsIG5vIG1lc3NhZ2Ugd2lsbCBiZSBzZW5kIGJ5IHRoZSBhdXRvcmVzcG9uZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB5b3Ugd2FudCB0byB1c2UgYSBtaXJyb3IgZGF0YWJhc2UgZm9yIGFnZW50IHRpY2tldCBmdWxsdGV4dCBzZWFyY2ggb3IgdG8gZ2VuZXJhdGUgc3RhdHMsIHNwZWNpZnkgdGhlIERTTiB0byB0aGlzIGRhdGFiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB5b3Ugd2FudCB0byB1c2UgYSBtaXJyb3IgZGF0YWJhc2UgZm9yIGFnZW50IHRpY2tldCBmdWxsdGV4dCBzZWFyY2ggb3IgdG8gZ2VuZXJhdGUgc3RhdHMsIHRoZSBwYXNzd29yZCB0byBhdXRoZW50aWNhdGUgdG8gdGhpcyBkYXRhYmFzZSBjYW4gYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB5b3Ugd2FudCB0byB1c2UgYSBtaXJyb3IgZGF0YWJhc2UgZm9yIGFnZW50IHRpY2tldCBmdWxsdGV4dCBzZWFyY2ggb3IgdG8gZ2VuZXJhdGUgc3RhdHMsIHRoZSB1c2VyIHRvIGF1dGhlbnRpY2F0ZSB0byB0aGlzIGRhdGFiYXNlIGNhbiBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lnbm9yZSBhcnRpY2xlIHdpdGggc3lzdGVtIHNlbmRlciB0eXBlIGZvciBuZXcgYXJ0aWNsZSBmZWF0dXJlIChlLiBnLiBhdXRvIHJlc3BvbnNlcyBvciBlbWFpbCBub3RpZmljYXRpb25zKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzIGFydGljbGUgY3JlYXRlIHRpbWVzIGluIHRoZSB0aWNrZXQgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luZGV4QWNjZWxlcmF0b3I6IHRvIGNob29zZSB5b3VyIGJhY2tlbmQgVGlja2V0Vmlld0FjY2VsZXJhdG9yIG1vZHVsZS4gIlJ1bnRpbWVEQiIgZ2VuZXJhdGVzIGVhY2ggcXVldWUgdmlldyBvbiB0aGUgZmx5IGZyb20gdGlja2V0IHRhYmxlIChubyBwZXJmb3JtYW5jZSBwcm9ibGVtcyB1cCB0byBhcHByb3guIDYwLjAwMCB0aWNrZXRzIGluIHRvdGFsIGFuZCA2LjAwMCBvcGVuIHRpY2tldHMgaW4gdGhlIHN5c3RlbSkuICJTdGF0aWNEQiIgaXMgdGhlIG1vc3QgcG93ZXJmdWwgbW9kdWxlLCBpdCB1c2VzIGFuIGV4dHJhIHRpY2tldC1pbmRleCB0YWJsZSB0aGF0IHdvcmtzIGxpa2UgYSB2aWV3IChyZWNvbW1lbmRlZCBpZiBtb3JlIHRoYW4gODAuMDAwIGFuZCA2LjAwMCBvcGVuIHRpY2tldHMgYXJlIHN0b3JlZCBpbiB0aGUgc3lzdGVtKS4gVXNlIHRoZSBzY3JpcHQgImJpbi9vdHJzLlJlYnVpbGRUaWNrZXRJbmRleC5wbCIgZm9yIGluaXRpYWwgaW5kZXggdXBkYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIGlzcGVsbCBvciBhc3BlbGwgb24gdGhlIHN5c3RlbSwgaWYgeW91IHdhbnQgdG8gdXNlIGEgc3BlbGwgY2hlY2tlci4gUGxlYXNlIHNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIGFzcGVsbCBvciBpc3BlbGwgYmluYXJ5IG9uIHlvdXIgb3BlcmF0aW5nIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJmYWNlIGxhbmd1YWdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBkaWZmZXJlbnQgc2tpbnMsIGZvciBleGFtcGxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZXJlbnQgYWdlbnRzLCB0byBiZSB1c2VkIG9uIGEgcGVyLWRvbWFpbiBiYXNpcyB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uLiBVc2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiAocmVnZXgpLCB5b3UgY2FuIGNvbmZpZ3VyZSBhIEtleS9Db250ZW50IHBhaXIgdG8gbWF0Y2ggYSBkb21haW4uIFRoZSB2YWx1ZSBpbiAiS2V5IiBzaG91bGQgbWF0Y2ggdGhlIGRvbWFpbiwgYW5kIHRoZSB2YWx1ZSBpbiAiQ29udGVudCIgc2hvdWxkIGJlIGEgdmFsaWQgc2tpbiBvbiB5b3VyIHN5c3RlbS4gUGxlYXNlIHNlZSB0aGUgZXhhbXBsZSBlbnRyaWVzIGZvciB0aGUgcHJvcGVyIGZvcm0gb2YgdGhlIHJlZ2V4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdCBpcyBwb3NzaWJsZSB0byBjb25maWd1cmUgZGlmZmVyZW50IHNraW5zLCBmb3IgZXhhbXBsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGRpZmVyZW50IGN1c3RvbWVycywgdG8gYmUgdXNlZCBvbiBhIHBlci1kb21haW4gYmFzaXMgd2l0aGluIHRoZSBhcHBsaWNhdGlvbi4gVXNpbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gKHJlZ2V4KSwgeW91IGNhbiBjb25maWd1cmUgYSBLZXkvQ29udGVudCBwYWlyIHRvIG1hdGNoIGEgZG9tYWluLiBUaGUgdmFsdWUgaW4gIktleSIgc2hvdWxkIG1hdGNoIHRoZSBkb21haW4sIGFuZCB0aGUgdmFsdWUgaW4gIkNvbnRlbnQiIHNob3VsZCBiZSBhIHZhbGlkIHNraW4gb24geW91ciBzeXN0ZW0uIFBsZWFzZSBzZWUgdGhlIGV4YW1wbGUgZW50cmllcyBmb3IgdGhlIHByb3BlciBmb3JtIG9mIHRoZSByZWdleC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlIGRpZmZlcmVudCB0aGVtZXMsIGZvciBleGFtcGxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gYWdlbnRzIGFuZCBjdXN0b21lcnMsIHRvIGJlIHVzZWQgb24gYSBwZXItZG9tYWluIGJhc2lzIHdpdGhpbiB0aGUgYXBwbGljYXRpb24uIFVzaW5nIGEgcmVndWxhciBleHByZXNzaW9uIChyZWdleCksIHlvdSBjYW4gY29uZmlndXJlIGEgS2V5L0NvbnRlbnQgcGFpciB0byBtYXRjaCBhIGRvbWFpbi4gVGhlIHZhbHVlIGluICJLZXkiIHNob3VsZCBtYXRjaCB0aGUgZG9tYWluLCBhbmQgdGhlIHZhbHVlIGluICJDb250ZW50IiBzaG91bGQgYmUgYSB2YWxpZCB0aGVtZSBvbiB5b3VyIHN5c3RlbS4gUGxlYXNlIHNlZSB0aGUgZXhhbXBsZSBlbnRyaWVzIGZvciB0aGUgcHJvcGVyIGZvcm0gb2YgdGhlIHJlZ2V4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFnZW50cyB0byBncm91cHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYWdlbnRzIHRvIHJvbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGF0dGFjaG1lbnRzIHRvIHJlc3BvbnNlcyB0ZW1wbGF0ZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgY3VzdG9tZXJzIHRvIGdyb3Vwcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBjdXN0b21lcnMgdG8gc2VydmljZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgcXVldWVzIHRvIGF1dG8gcmVzcG9uc2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHJlc3BvbnNlcyB0byBxdWV1ZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgcm9sZXMgdG8gZ3JvdXBzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRoaXMgdGlja2V0IHRvIG90aGVyIG9iamVjdHMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmtzIDIgdGlja2V0cyB3aXRoIGEgIk5vcm1hbCIgdHlwZSBsaW5rLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rcyAyIHRpY2tldHMgd2l0aCBhICJQYXJlbnRDaGlsZCIgdHlwZSBsaW5rLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIENTUyBmaWxlcyB0byBhbHdheXMgYmUgbG9hZGVkIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIENTUyBmaWxlcyB0byBhbHdheXMgYmUgbG9hZGVkIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIElFNi1zcGVjaWZpYyBDU1MgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBJRTctc3BlY2lmaWMgQ1NTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2YgSUU3LXNwZWNpZmljIENTUyBmaWxlcyB0byBhbHdheXMgYmUgbG9hZGVkIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIElFOC1zcGVjaWZpYyBDU1MgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBJRTgtc3BlY2lmaWMgQ1NTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2YgSlMgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBKUyBmaWxlcyB0byBhbHdheXMgYmUgbG9hZGVkIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2cgZmlsZSBmb3IgdGhlIHRpY2tldCBjb3VudGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rIGludG8gYSB0aWNrZXQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01ha2VzIHRoZSBhcHBsaWNhdGlvbiBjaGVjayB0aGUgTVggcmVjb3JkIG9mIGVtYWlsIGFkZHJlc3NlcyBiZWZvcmUgc2VuZGluZyBhbiBlbWFpbCBvciBzdWJtaXR0aW5nIGEgdGVsZXBob25lIG9yIGVtYWlsIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFrZXMgdGhlIGFwcGxpY2F0aW9uIGNoZWNrIHRoZSBzeW50YXggb2YgZW1haWwgYWRkcmVzc2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWtlcyB0aGUgcGljdHVyZSB0cmFuc3BhcmVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFrZXMgdGhlIHNlc3Npb24gbWFuYWdlbWVudCB1c2UgaHRtbCBjb29raWVzLiBJZiBodG1sIGNvb2tpZXMgYXJlIGRpc2FibGVkIG9yIGlmIHRoZSBjbGllbnQgYnJvd3NlciBkaXNhYmxlZCBodG1sIGNvb2tpZXMsIHRoZW4gdGhlIHN5c3RlbSB3aWxsIHdvcmsgYXMgdXN1YWwgYW5kIGFwcGVuZCB0aGUgc2Vzc2lvbiBpZCB0byB0aGUgbGlua3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBQR1Aga2V5cyBmb3IgZW1haWwgZW5jcnlwdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIFBPUDMgb3IgSU1BUCBhY2NvdW50cyB0byBmZXRjaCBlbWFpbCBmcm9tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgUy9NSU1FIGNlcnRpZmljYXRlcyBmb3IgZW1haWwgZW5jcnlwdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIGV4aXN0aW5nIHNlc3Npb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcGVyaW9kaWMgdGFza3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hcmsgYXMgU3BhbSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4IHNpemUgKGluIGNoYXJhY3RlcnMpIG9mIHRoZSBjdXN0b21lciBpbmZvcm1hdGlvbiB0YWJsZSAocGhvbmUgYW5kIGVtYWlsKSBpbiB0aGUgY29tcG9zZSBzY3JlZW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heCBzaXplIG9mIHRoZSBzdWJqZWN0cyBpbiBhbiBlbWFpbCByZXBseS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4LiBkaXNwbGF5ZWQgdGlja2V0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbWFsIGF1dG8gZW1haWwgcmVzcG9uc2VzIHRvIG93biBlbWFpbC1hZGRyZXNzIGEgZGF5IChMb29wLVByb3RlY3Rpb24pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbWFsIHNpemUgaW4gS0J5dGVzIGZvciBtYWlscyB0aGF0IGNhbiBiZSBmZXRjaGVkIHZpYSBQT1AzL1BPUDNTL0lNQVAvSU1BUFMgKEtCeXRlcykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIHRpY2tldHMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgdGlja2V0cyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgKGluIGNoYXJhY3RlcnMpIG9mIHRoZSBjdXN0b21lciBpbmZvIHRhYmxlIGluIHRoZSBxdWV1ZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgKGluIGNoYXJhY3RlcnMpIG9mIHRoZSBjdXN0b21lciBpbmZvcm1hdGlvbiB0YWJsZSBpbiB0aGUgdGlja2V0IHpvb20gdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVyZ2UgdGhpcyB0aWNrZXQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSBmb3IgVG8tc2VsZWN0aW9uIGluIG5ldyB0aWNrZXQgc2NyZWVuIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayBjdXN0b21lciBwZXJtaXNzaW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIGlmIGEgdXNlciBpcyBpbiBhIHNwZWNpYWwgZ3JvdXAuIEFjY2VzcyBpcyBncmFudGVkLCBpZiB0aGUgdXNlciBpcyBpbiB0aGUgc3BlY2lmaWVkIGdyb3VwIGFuZCBoYXMgcm8gYW5kIHJ3IHBlcm1pc3Npb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgaWYgYXJyaXZlZCBlbWFpbHMgc2hvdWxkIGJlIG1hcmtlZCBhcyBlbWFpbC1pbnRlcm5hbCAoYmVjYXVzZSBvZiBvcmlnaW5hbCBmb3J3YXJlZCBpbnRlcm5hbCBlbWFpbCBpdCBjb2xsZWdlKS4gQXJ0aWNsZVR5cGUgYW5kIFNlbmRlclR5cGUgZGVmaW5lIHRoZSB2YWx1ZXMgZm9yIHRoZSBhcnJpdmVkIGVtYWlsL2FydGljbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgYWdlbnQgcmVzcG9uc2libGUgb2YgYSB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcGVybWlzc2lvbnMgZm9yIHRoZSBhY2Nlc3MgdG8gY3VzdG9tZXIgdGlja2V0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgb3duZXIgb2YgYSB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgd2F0Y2hlciBhZ2VudHMgb2YgYSB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjb21wb3NlIHNpZ25lZCBtZXNzYWdlcyAoUEdQIG9yIFMvTUlNRSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjcnlwdCBjb21wb3NlZCBtZXNzYWdlcyAoUEdQIG9yIFMvTUlNRSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBmaWx0ZXIgYW5kIG1hbmlwdWxhdGUgaW5jb21pbmcgbWVzc2FnZXMuIEJsb2NrL2lnbm9yZSBhbGwgc3BhbSBlbWFpbCB3aXRoIEZyb206IG5vcmVwbHlAIGFkZHJlc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBmaWx0ZXIgYW5kIG1hbmlwdWxhdGUgaW5jb21pbmcgbWVzc2FnZXMuIEdldCBhIDQgZGlnaXQgbnVtYmVyIHRvIHRpY2tldCBmcmVlIHRleHQsIHVzZSByZWdleCBpbiBNYXRjaCBlLiBnLiBGcm9tID0+IFwnKC4rPylALis/XCcsIGFuZCB1c2UgKCkgYXMgWyoqKl0gaW4gU2V0ID0+Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgYWNjb3VudGVkIHRpbWUgdGlja2V0IHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgdGlja2V0IHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IHRpY2tldCBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIHRpY2tldCBzb2x1dGlvbiBhbmQgcmVzcG9uc2UgdGltZSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgdGlja2V0IHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBpbmZvcm0gYWdlbnRzLCB2aWEgdGhlIGFnZW50IGludGVyZmFjZSwgYWJvdXQgdGhlIHVzZWQgY2hhcnNldC4gQSBub3RpZmljYXRpb24gaXMgZGlzcGxheWVkLCBpZiB0aGUgZGVmYXVsdCBjaGFyc2V0IGlzIG5vdCB1c2VkLCBlLmcuIGluIHRpY2tldHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IG5vdGlmaWNhdGlvbnMgYW5kIGVzY2FsYXRpb25zIChTaG93bk1heDogbWF4LiBzaG93biBlc2NhbGF0aW9ucywgRXNjYWxhdGlvbkluTWludXRlczogU2hvdyB0aWNrZXQgd2hpY2ggd2lsbCBlc2NhbGF0aW9uIGluLCBDYWNoZVRpbWU6IENhY2hlIG9mIGNhbGN1bGF0ZWQgZXNjYWxhdGlvbnMgaW4gc2Vjb25kcykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byB1c2UgZGF0YWJhc2UgZmlsdGVyIHN0b3JhZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IFF1ZXVlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBUaWNrZXRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgb2YgY3VzdG9tIHF1ZXVlLiBUaGUgY3VzdG9tIHF1ZXVlIGlzIGEgcXVldWUgc2VsZWN0aW9uIG9mIHlvdXIgcHJlZmVycmVkIHF1ZXVlcyBhbmQgY2FuIGJlIHNlbGVjdGVkIGluIHRoZSBwcmVmZXJlbmNlcyBzZXR0aW5ncy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBUaWNrZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IGVtYWlsIHRpY2tldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgcGhvbmUgdGlja2V0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB0aWNrZXQgbm90aWZpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05leHQgcG9zc2libGUgdGlja2V0IHN0YXRlcyBhZnRlciBhZGRpbmcgYSBwaG9uZSBub3RlIGluIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbnMgKEV2ZW50KSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgZGlzcGxheWVkIHRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIGxpbmVzIChwZXIgdGlja2V0KSB0aGF0IGFyZSBzaG93biBieSB0aGUgc2VhcmNoIHV0aWxpdHkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHRpY2tldHMgdG8gYmUgZGlzcGxheWVkIGluIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHRpY2tldHMgdG8gYmUgZGlzcGxheWVkIGluIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXQgT2YgT2ZmaWNlIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcmxvYWRzIChyZWRlZmluZXMpIGV4aXN0aW5nIGZ1bmN0aW9ucyBpbiBLZXJuZWw6OlN5c3RlbTo6VGlja2V0LiBVc2VkIHRvIGVhc2lseSBhZGQgY3VzdG9taXphdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IEVzY2FsYXRlZCBUaWNrZXRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IG9mIGFsbCBvcGVuIFRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb2YgYWxsIG9wZW4gVGlja2V0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUEdQIEtleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQR1AgS2V5IFVwbG9hZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQR1AgS2V5cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYWNrYWdlIE1hbmFnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIENyZWF0ZU5leHRNYXNrIG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBDdXN0b21RdWV1ZSBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgRm9sbG93VXBOb3RpZnkgb2JqZWN0IGluIHRoZSBwcmVmZXJlbmNlIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIExvY2tUaW1lb3V0Tm90aWZ5IG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBNb3ZlTm90aWZ5IG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBOZXdUaWNrZXROb3RpZnkgb2JqZWN0IGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBSZWZyZXNoVGltZSBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgV2F0Y2hlck5vdGlmeSBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIG5ldyB0aWNrZXRzIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgdGlja2V0IGNhbGVuZGFyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgdGlja2V0IGVzY2FsYXRpb24gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgdGlja2V0IHBlbmRpbmcgcmVtaW5kZXIgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgdGlja2V0IHBlbmRpbmcgcmVtaW5kZXIgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSB0aWNrZXQgc3RhdHMgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSB0aWNrZXRzIGFyZSBzaG93bikgb2YgdGhlIG1lZGl1bSB0aWNrZXQgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIHRpY2tldHMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgdGlja2V0IG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSB0aWNrZXRzIGFyZSBzaG93bikgb2YgdGhlIHRpY2tldCBwcmV2aWV3IG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIG9mIHRoZSBleGFtcGxlIFNMQSBhdHRyaWJ1dGUgQ29tbWVudDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgb2YgdGhlIGV4YW1wbGUgcXVldWUgYXR0cmlidXRlIENvbW1lbnQyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIG9mIHRoZSBleGFtcGxlIHNlcnZpY2UgYXR0cmlidXRlIENvbW1lbnQyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXRoIGZvciB0aGUgbG9nIGZpbGUgKGl0IG9ubHkgYXBwbGllcyBpZiAiRlMiIHdhcyBzZWxlY3RlZCBmb3IgTG9vcFByb3RlY3Rpb25Nb2R1bGUgYW5kIGl0IGlzIG1hbmRhdG9yeSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhdGggb2YgdGhlIGZpbGUgdGhhdCBzdG9yZXMgYWxsIHRoZSBzZXR0aW5ncyBmb3IgdGhlIFF1ZXVlT2JqZWN0IG9iamVjdCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGF0aCBvZiB0aGUgZmlsZSB0aGF0IHN0b3JlcyBhbGwgdGhlIHNldHRpbmdzIGZvciB0aGUgUXVldWVPYmplY3Qgb2JqZWN0IGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXRoIG9mIHRoZSBmaWxlIHRoYXQgc3RvcmVzIGFsbCB0aGUgc2V0dGluZ3MgZm9yIHRoZSBUaWNrZXRPYmplY3QgZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhdGggb2YgdGhlIGZpbGUgdGhhdCBzdG9yZXMgYWxsIHRoZSBzZXR0aW5ncyBmb3IgdGhlIFRpY2tldE9iamVjdCBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyZm9ybWFuY2UgTG9nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pdHRlZCB3aWR0aCBmb3IgY29tcG9zZSBlbWFpbCB3aW5kb3dzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXR0ZWQgd2lkdGggZm9yIGNvbXBvc2Ugbm90ZSB3aW5kb3dzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQb3N0TWFzdGVyIEZpbHRlcnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zdE1hc3RlciBNYWlsIEFjY291bnRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoaXMgdGlja2V0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0aWVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3RlY3Rpb24gYWdhaW5zdCBDU1JGIChDcm9zcyBTaXRlIFJlcXVlc3QgRm9yZ2VyeSkgZXhwbG9pdHMgKGZvciBtb3JlIGluZm8gc2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3Jvc3Mtc2l0ZV9yZXF1ZXN0X2ZvcmdlcnkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZSB2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXVlVmlldyBSZWZyZXNoIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZnJlc2ggUXVldWVWaWV3IGFmdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZnJlc2ggaW50ZXJ2YWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwbGFjZXMgdGhlIG9yaWdpbmFsIHNlbmRlciB3aXRoIGN1cnJlbnQgY3VzdG9tZXJcJ3MgZW1haWwgYWRkcmVzcyBvbiBjb21wb3NlIGFuc3dlciBpbiB0aGUgdGlja2V0IGNvbXBvc2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNoYW5nZSB0aGUgY3VzdG9tZXIgb2YgYSB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgYm91bmNlIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBjb21wb3NlIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBmb3J3YXJkIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBmcmVlIHRleHQgc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgdGlja2V0IG1lcmdlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0cyBhbmQgdW5sb2NrcyB0aGUgb3duZXIgb2YgYSB0aWNrZXQgaWYgaXQgd2FzIG1vdmVkIHRvIGFub3RoZXIgcXVldWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZXMgPC0+IFF1ZXVlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0b3JlcyBhIHRpY2tldCBmcm9tIHRoZSBhcmNoaXZlIChvbmx5IGlmIHRoZSBldmVudCBpcyBhIHN0YXRlIGNoYW5nZSwgZnJvbSBjbG9zZWQgdG8gYW55IG9wZW4gYXZhaWxhYmxlIHN0YXRlKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9sZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9sZXMgPC0+IEdyb3Vwcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW5zIGFuIGluaXRpYWwgd2lsZGNhcmQgc2VhcmNoIG9mIHRoZSBleGlzdGluZyBjdXN0b21lciB1c2VycyB3aGVuIGFjY2Vzc2luZyB0aGUgQWRtaW5DdXN0b21lclVzZXIgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW5zIHRoZSBzeXN0ZW0gaW4gIkRlbW8iIG1vZGUuIElmIHNldCB0byAiWWVzIiwgYWdlbnRzIGNhbiBjaGFuZ2UgcHJlZmVyZW5jZXMsIHN1Y2ggYXMgc2VsZWN0aW9uIG9mIGxhbmd1YWdlIGFuZCB0aGVtZSB2aWEgdGhlIGFnZW50IHdlYiBpbnRlcmZhY2UuIFRoZXNlIGNoYW5nZXMgYXJlIG9ubHkgdmFsaWQgZm9yIHRoZSBjdXJyZW50IHNlc3Npb24uIEl0IHdpbGwgbm90IGJlIHBvc3NpYmxlIGZvciBhZ2VudHMgdG8gY2hhbmdlIHRoZWlyIHBhc3N3b3Jkcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUy9NSU1FIENlcnRpZmljYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1MvTUlNRSBDZXJ0aWZpY2F0ZSBVcGxvYWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUy9NSU1FIENlcnRpZmljYXRlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTUUwgQm94J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhbHV0YXRpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmVzIHRoZSBhdHRhY2htZW50cyBvZiBhcnRpY2xlcy4gIkRCIiBzdG9yZXMgYWxsIGRhdGEgaW4gdGhlIGRhdGFiYXNlIChub3QgcmVjb21tZW5kZWQgZm9yIHN0b3JpbmcgYmlnIGF0dGFjaG1lbnRzKS4gIkZTIiBzdG9yZXMgdGhlIGRhdGEgb24gdGhlIGZpbGVzeXN0ZW07IHRoaXMgaXMgZmFzdGVyIGJ1dCB0aGUgd2Vic2VydmVyIHNob3VsZCBydW4gdW5kZXIgdGhlIE9UUlMgdXNlci4gWW91IGNhbiBzd2l0Y2ggYmV0d2VlbiB0aGUgbW9kdWxlcyBldmVuIG9uIGEgc3lzdGVtIHRoYXQgaXMgYWxyZWFkeSBpbiBwcm9kdWN0aW9uIHdpdGhvdXQgYW55IGxvc3Mgb2YgZGF0YS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZXMgdGhlIGxvZ2luIGFuZCBwYXNzd29yZCBvbiB0aGUgc2Vzc2lvbiB0YWJsZSBpbiB0aGUgZGF0YWJhc2UsIGlmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBTZXNzaW9uTW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY3JlZW4gYWZ0ZXIgbmV3IHRpY2tldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggVGlja2V0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggYmFja2VuZCBkZWZhdWx0IHJvdXRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGJhY2tlbmQgcm91dGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIgdXNlZCBpbiBDU1YgZmlsZXMgKHN0YXRzIGFuZCBzZWFyY2hlcykuIElmIHlvdSBkb25cJ3Qgc2VsZWN0IGEgc2VwYXJhdG9yIGhlcmUsIHRoZSBkZWZhdWx0IHNlcGFyYXRvciBmb3IgeW91ciBsYW5ndWFnZSB3aWxsIGJlIHVzZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCB5b3VyIGZyb250ZW5kIFRoZW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIG1vZHVsZSB0byBoYW5kbGUgdXBsb2FkcyB2aWEgdGhlIHdlYiBpbnRlcmZhY2UuICJEQiIgc3RvcmVzIGFsbCB1cGxvYWRzIGluIHRoZSBkYXRhYmFzZSwgIkZTIiB1c2VzIHRoZSBmaWxlIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgdGlja2V0IG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgdGlja2V0IG51bWJlciwgdGhlIFN5c3RlbUlEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZCB3aXRoIFN5c3RlbUlELmNvdW50ZXIgZm9ybWF0IChlLmcuIDEwMTAxMzgsIDEwMTAxMzkpLiBXaXRoICJEYXRlIiB0aGUgdGlja2V0IG51bWJlcnMgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgdGhlIGN1cnJlbnQgZGF0ZSwgdGhlIFN5c3RlbUlEIGFuZCB0aGUgY291bnRlci4gVGhlIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LlN5c3RlbUlELmNvdW50ZXIgKGUuZy4gMjAwMjA2MjMxMDEwMTM4LCAyMDAyMDYyMzEwMTAxMzkpLiBXaXRoICJEYXRlQ2hlY2tzdW0iICB0aGUgY291bnRlciB3aWxsIGJlIGFwcGVuZGVkIGFzIGNoZWNrc3VtIHRvIHRoZSBzdHJpbmcgb2YgZGF0ZSBhbmQgU3lzdGVtSUQuIFRoZSBjaGVja3N1bSB3aWxsIGJlIHJvdGF0ZWQgb24gYSBkYWlseSBiYXNpcy4gVGhlIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LlN5c3RlbUlELkNvdW50ZXIuQ2hlY2tTdW0gKGUuZy4gMjAwMjA3MDExMDEwMTUyMCwgMjAwMjA3MDExMDEwMTUzNSkuICJSYW5kb20iIGdlbmVyYXRlcyByYW5kb21pemVkIHRpY2tldCBudW1iZXJzIGluIHRoZSBmb3JtYXQgIlN5c3RlbUlELlJhbmRvbSIgKGUuZy4gMTAwMDU3ODY2MzUyLCAxMDM3NDUzOTQ1OTYpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIG1lIGEgbm90aWZpY2F0aW9uIGlmIGEgY3VzdG9tZXIgc2VuZHMgYSBmb2xsb3cgdXAgYW5kIElcJ20gdGhlIG93bmVyIG9mIHRoZSB0aWNrZXQgb3IgdGhlIHRpY2tldCBpcyB1bmxvY2tlZCBhbmQgaXMgaW4gb25lIG9mIG15IHN1YnNjcmliZWQgcXVldWVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIG1lIGEgbm90aWZpY2F0aW9uIGlmIGEgdGlja2V0IGlzIG1vdmVkIGludG8gb25lIG9mICJNeSBRdWV1ZXMiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIG1lIGEgbm90aWZpY2F0aW9uIGlmIGEgdGlja2V0IGlzIHVubG9ja2VkIGJ5IHRoZSBzeXN0ZW0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgbWUgYSBub3RpZmljYXRpb24gaWYgdGhlcmUgaXMgYSBuZXcgdGlja2V0IGluICJNeSBRdWV1ZXMiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIG1lIHRoZSBzYW1lIG5vdGlmaWNhdGlvbnMgZm9yIG15IHdhdGNoZWQgdGlja2V0cyB0aGF0IHRoZSB0aWNrZXQgb3duZXJzIHdpbGwgZ2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIG5ldyB0aWNrZXQgbm90aWZpY2F0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIG5vdGlmaWNhdGlvbnMgdG8gdXNlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgdGlja2V0IGZvbGxvdyB1cCBub3RpZmljYXRpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgdGlja2V0IGxvY2sgdGltZW91dCBub3RpZmljYXRpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgdGlja2V0IG1vdmUgbm90aWZpY2F0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIHRpY2tldCB3YXRjaCBub3RpZmljYXRpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmRlciB0eXBlIGZvciBuZXcgdGlja2V0cyBmcm9tIHRoZSBjdXN0b21lciBpbnRlZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZHMgYWdlbnQgZm9sbG93LXVwIG5vdGlmaWNhdGlvbiBvbmx5IHRvIHRoZSBvd25lciwgaWYgYSB0aWNrZXQgaXMgdW5sb2NrZWQgKHRoZSBkZWZhdWx0IGlzIHRvIHNlbmQgdGhlIG5vdGlmaWNhdGlvbiB0byBhbGwgYWdlbnRzKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZHMgYWxsIG91dGdvaW5nIGVtYWlsIHZpYSBiY2MgdG8gdGhlIHNwZWNpZmllZCBhZGRyZXNzLiBQbGVhc2UgdXNlIHRoaXMgb25seSBmb3IgYmFja3VwIHJlYXNvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmRzIGN1c3RvbWVyIG5vdGlmaWNhdGlvbnMganVzdCB0byB0aGUgbWFwcGVkIGN1c3RvbWVyLiBOb3JtYWxseSwgaWYgbm8gY3VzdG9tZXIgaXMgbWFwcGVkLCB0aGUgbGF0ZXN0IGN1c3RvbWVyIHNlbmRlciBnZXRzIHRoZSBub3RpZmljYXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmRzIHJlbWluZGVyIG5vdGlmaWNhdGlvbnMgb2YgdW5sb2NrZWQgdGlja2V0IGFmdGVyIHJlYWNoaW5nIHRoZSByZW1pbmRlciBkYXRlIChvbmx5IHNlbnQgdG8gdGlja2V0IG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZHMgdGhlIG5vdGlmaWNhdGlvbnMgd2hpY2ggYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGFkbWluIGludGVyZmFjZSB1bmRlciAiTm90ZmljYXRpb24gKEV2ZW50KSIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgTGV2ZWwgQWdyZWVtZW50cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXNzaW9uIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHNlbmRlciBlbWFpbCBhZGRyZXNzZXMgZm9yIHRoaXMgc3lzdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGFydGljbGVzIGluIEFnZW50VGlja2V0Wm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBhcnRpY2xlcyBpbiBBZ2VudFRpY2tldFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGlzIHRpY2tldCB0byBwZW5kaW5nISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhpcyB0byB5ZXMgaWYgeW91IHRydXN0IGluIGFsbCB5b3VyIHB1YmxpYyBhbmQgcHJpdmF0ZSBwZ3Aga2V5cywgZXZlbiBpZiB0aGV5IGFyZSBub3QgY2VydGlmaWVkIHdpdGggYSB0cnVzdGVkIHNpZ25hdHVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyBpZiB0aWNrZXQgb3duZXIgbXVzdCBiZSBzZWxlY3RlZCBieSB0aGUgYWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIFBlbmRpbmdUaW1lIG9mIGEgdGlja2V0IHRvIDAgaWYgdGhlIHN0YXRlIGlzIGNoYW5nZWQgdG8gYSBub24tcGVuZGluZyBzdGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgYWdlIGluIG1pbnV0ZXMgKGZpcnN0IGxldmVsKSBmb3IgaGlnaGxpZ2h0aW5nIHF1ZXVlcyB0aGF0IGNvbnRhaW4gdW50b3VjaGVkIHRpY2tldHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGFnZSBpbiBtaW51dGVzIChzZWNvbmQgbGV2ZWwpIGZvciBoaWdobGlnaHRpbmcgcXVldWVzIHRoYXQgY29udGFpbiB1bnRvdWNoZWQgdGlja2V0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgY29uZmlndXJhdGlvbiBsZXZlbCBvZiB0aGUgYWRtaW5pc3RyYXRvci4gRGVwZW5kaW5nIG9uIHRoZSBjb25maWcgbGV2ZWwsIHNvbWUgc3lzY29uZmlnIG9wdGlvbnMgd2lsbCBiZSBub3Qgc2hvd24uIFRoZSBjb25maWcgbGV2ZWxzIGFyZSBpbiBpbiBhc2NlbmRpbmcgb3JkZXI6IEV4cGVydCwgQWR2YW5jZWQsIEJlZ2lubmVyLiBUaGUgaGlnaGVyIHRoZSBjb25maWcgbGV2ZWwgaXMgKGUuZy4gQmVnaW5uZXIgaXMgdGhlIGhpZ2hlc3QpLCB0aGUgbGVzcyBsaWtlbHkgaXMgaXQgdGhhdCB0aGUgdXNlciBjYW4gYWNjaWRlbnRhbGx5IGNvbmZpZ3VyZSB0aGUgc3lzdGVtIGluIGEgd2F5IHRoYXQgaXQgaXMgbm90IHVzYWJsZSBhbnkgbW9yZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBhcnRpY2xlIHR5cGUgZm9yIG5ldyBlbWFpbCB0aWNrZXRzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgYXJ0aWNsZSB0eXBlIGZvciBuZXcgcGhvbmUgdGlja2V0cyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBib2R5IHRleHQgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgbW92ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBib2R5IHRleHQgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBib2R5IHRleHQgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBib2R5IHRleHQgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBjaGFyc2V0IGZvciB0aGUgd2ViIGludGVyZmFjZSB0byB1c2UgKHNob3VsZCByZXByZXNlbnQgdGhlIGNoYXJzZXQgdXNlZCB0byBjcmVhdGUgdGhlIGRhdGFiYXNlIG9yLCBpbiBzb21lIGNhc2VzLCB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gYmVpbmcgdXNlZCkuICJ1dGYtOCIgaXMgYSBnb29kIGNob2ljZSBmb3IgZW52aXJvbm1lbnRzIGV4cGVjdGluZyBtYW55IGNoYXJzZXRzLiBZb3UgY2FuIHNwZWNpZnkgYW5vdGhlciBjaGFyc2V0IGhlcmUgKGkuZS4gImlzby04ODU5LTEiKS4gUGxlYXNlIGJlIHN1cmUgdGhhdCB5b3Ugd2lsbCBub3QgYmUgcmVjZWl2aW5nIGZvcmVpZ24gZW1haWxzLCBvciB0ZXh0LCBvdGhlcndpc2UgdGhpcyBjb3VsZCBsZWFkIHRvIHByb2JsZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGxpbmsgdHlwZSBvZiBzcGxpdHRlZCB0aWNrZXRzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBmb3IgbmV3IHBob25lIHRpY2tldHMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBuZXh0IHRpY2tldCBzdGF0ZSwgYWZ0ZXIgdGhlIGNyZWF0aW9uIG9mIGFuIGVtYWlsIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IG5vdGUgdGV4dCBmb3IgbmV3IHRlbGVwaG9uZSB0aWNrZXRzLiBFLmcgXCdOZXcgdGlja2V0IHZpYSBjYWxsXCcgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBwcmlvcml0eSBmb3IgbmV3IGVtYWlsIHRpY2tldHMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBwcmlvcml0eSBmb3IgbmV3IHBob25lIHRpY2tldHMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzZW5kZXIgdHlwZSBmb3IgbmV3IGVtYWlsIHRpY2tldHMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzZW5kZXIgdHlwZSBmb3IgbmV3IHBob25lIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIG5ldyBlbWFpbCB0aWNrZXRzIChlLmcuIFwnZW1haWwgT3V0Ym91bmRcJykgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBuZXcgcGhvbmUgdGlja2V0cyAoZS5nLiBcJ1Bob25lIGNhbGxcJykgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgbW92ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgc3ViamVjdCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgc3ViamVjdCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHRleHQgZm9yIG5ldyBlbWFpbCB0aWNrZXRzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRpc3BsYXkgb3JkZXIgb2YgdGhlIGRpZmZlcmVudCBpdGVtcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5hY3Rpdml0eSB0aW1lIChpbiBzZWNvbmRzKSB0byBwYXNzIGJlZm9yZSBhIHNlc3Npb24gaXMga2lsbGVkIGFuZCBhIHVzZXIgaXMgbG9nZWQgb3V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBtaW5pbWFsIHRpY2tldCBjb3VudGVyIHNpemUgKGlmICJBdXRvSW5jcmVtZW50IiB3YXMgc2VsZWN0ZWQgYXMgVGlja2V0TnVtYmVyR2VuZXJhdG9yKS4gRGVmYXVsdCBpcyA1LCB0aGlzIG1lYW5zIHRoZSBjb3VudGVyIHN0YXJ0cyBmcm9tIDEwMDAwLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJlZm9yZSBhdXRvY29tcGxldGUgcXVlcnkgaXMgc2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgbnVtYmVyIG9mIGxpbmVzIHRoYXQgYXJlIGRpc3BsYXllZCBpbiB0ZXh0IG1lc3NhZ2VzIChlLmcuIHRpY2tldCBsaW5lcyBpbiB0aGUgUXVldWVab29tKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgbnVtYmVyIG9mIGxpbmVzIHRoYXQgYXJlIGRpc3BsYXllZCBpbiB0aGUgcHJldmlldyBvZiBtZXNzYWdlcyAoZS5nLiBmb3IgdGlja2V0cyBpbiB0aGUgUXVldWVWaWV3KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgbnVtYmVyIG9mIHNlYXJjaCByZXN1bHRzIHRvIGJlIGRpc3BsYXllZCBmb3IgdGhlIGF1dG9jb21wbGV0ZSBmZWF0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBvcHRpb25zIGZvciBQR1AgYmluYXJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBvcmRlciBvZiB0aGUgZGlmZmVyZW50IGl0ZW1zIGluIHRoZSBjdXN0b21lciBwcmVmZXJlbmNlcyB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBwYXNzd29yZCBmb3IgcHJpdmF0ZSBQR1Aga2V5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBwcmVmZXJlZCB0aW1lIHVuaXRzIChlLmcuIHdvcmsgdW5pdHMsIGhvdXJzLCBtaW51dGVzKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcHJlZml4IHRvIHRoZSBzY3JpcHRzIGZvbGRlciBvbiB0aGUgc2VydmVyLCBhcyBjb25maWd1cmVkIG9uIHRoZSB3ZWIgc2VydmVyLiBUaGlzIHNldHRpbmcgaXMgdXNlZCBhcyBhIHZhcmlhYmxlLCBPVFJTX0NPTkZJR19TY3JpcHRBbGlhcyB3aGljaCBpcyBmb3VuZCBpbiBhbGwgZm9ybXMgb2YgbWVzc2FnaW5nIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCB0byBidWlsZCBsaW5rcyB0byB0aGUgdGlja2V0cyB3aXRoaW4gdGhlIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSByZXNwb25zaWJsZSBhZ2VudCBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHJlc3BvbnNpYmxlIGFnZW50IG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHJlc3BvbnNpYmxlIGFnZW50IG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6U2VydmljZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc2VydmljZSBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6U2VydmljZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc2VydmljZSBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc2VydmljZSBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpTZXJ2aWNlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHNlcnZpY2UgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpTZXJ2aWNlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHNpemUgb2YgdGhlIHN0YXRpc3RpYyBncmFwaC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc3RhdHMgaG9vay4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc3lzdGVtIHRpbWUgem9uZSAocmVxdWlyZWQgYSBzeXN0ZW0gd2l0aCBVVEMgYXMgc3lzdGVtIHRpbWUpLiBPdGhlcndpc2UgdGhpcyBpcyBhIGRpZmYgdGltZSB0byB0aGUgbG9jYWwgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IG93bmVyIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCBvd25lciBpbiB0aGUgdGlja2V0IGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCBvd25lciBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IG93bmVyIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IG93bmVyIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgb3duZXIgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IG93bmVyIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgb3duZXIgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpUeXBlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCB0eXBlIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlR5cGUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIHRpY2tldCBub3RlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlR5cGUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6VHlwZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlR5cGUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIHRpY2tldCBwcmlvcml0eSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6VHlwZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlR5cGUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGltZSB0eXBlIHdoaWNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGltZW91dCAoaW4gc2Vjb25kcykgZm9yIGh0dHAvZnRwIGRvd25sb2Fkcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGltZW91dCAoaW4gc2Vjb25kcykgZm9yIHBhY2thZ2UgZG93bmxvYWRzLiBPdmVyd3JpdGVzICJXZWJVc2VyQWdlbnQ6OlRpbWVvdXQiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB1c2VyIHRpbWUgem9uZSBwZXIgdXNlciAocmVxdWlyZWQgYSBzeXN0ZW0gd2l0aCBVVEMgYXMgc3lzdGVtIHRpbWUgYW5kIFVUQyB1bmRlciBUaW1lWm9uZSkuIE90aGVyd2lzZSB0aGlzIGlzIGEgZGlmZiB0aW1lIHRvIHRoZSBsb2NhbCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB1c2VyIHRpbWUgem9uZSBwZXIgdXNlciBiYXNlZCBvbiBqYXZhIHNjcmlwdCAvIGJyb3dzZXIgdGltZSB6b25lIG9mZnNldCBmZWF0dXJlIGF0IGxvZ2luIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYSByZXNwb25zaWJsZSBzZWxlY3Rpb24gaW4gcGhvbmUgYW5kIGVtYWlsIHRpY2tldHMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhcnRpY2xlIGFzIHJpY2ggdGV4dCBldmVuIGlmIHJpY2ggdGV4dCB3cml0aW5nIGlzIGRpc2FibGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRoaXMgc2NyZWVuIGFmdGVyIEkgY3JlYXRlZCBhIG5ldyB0aWNrZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBjb3VudCBvZiBpY29ucyBpbiB0aGUgdGlja2V0IHpvb20sIGlmIHRoZSBhcnRpY2xlIGhhcyBhdHRhY2htZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IGZvciBzdWJzY3JpYmluZyAvIHVuc3Vic2NyaWJpbmcgZnJvbSBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSB0aWNrZXQgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbWVyZ2luZyB0aWNrZXRzIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWRkIGEgZnJlZSB0ZXh0IGZpZWxkIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSBub3RlIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSBub3RlIHRvIGEgdGlja2V0IGluIGV2ZXJ5IHRpY2tldCBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gY2xvc2UgYSB0aWNrZXQgaW4gZXZlcnkgdGlja2V0IG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBjbG9zZSBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgdGlja2V0IGluIGV2ZXJ5IHRpY2tldCBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBBZGRpdGlvbmFsIGFjY2VzcyBjb250cm9sIHRvIHNob3cgb3Igbm90IHNob3cgdGhpcyBsaW5rIGNhbiBiZSBkb25lIGJ5IHVzaW5nIEtleSAiR3JvdXAiIGFuZCBDb250ZW50IGxpa2UgInJ3Omdyb3VwMTttb3ZlX2ludG86Z3JvdXAyIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBBZGRpdGlvbmFsIGFjY2VzcyBjb250cm9sIHRvIHNob3cgb3Igbm90IHNob3cgdGhpcyBsaW5rIGNhbiBiZSBkb25lIGJ5IHVzaW5nIEtleSAiR3JvdXAiIGFuZCBDb250ZW50IGxpa2UgInJ3Omdyb3VwMTttb3ZlX2ludG86Z3JvdXAyIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdG9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBsb2NrIC8gdW5sb2NrIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgb3ZlcnZpZXdzIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBsb2NrL3VubG9jayB0aWNrZXRzIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBtb3ZlIGEgdGlja2V0IGluIGV2ZXJ5IHRpY2tldCBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgdGlja2V0IG9yIGFuIGFydGljbGUgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNlZSB0aGUgY3VzdG9tZXIgd2hvIHJlcXVlc3RlZCB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBzZWUgdGhlIGhpc3Rvcnkgb2YgYSB0aWNrZXQgaW4gZXZlcnkgdGlja2V0IG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBzZWUgdGhlIG93bmVyIG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBzZWUgdGhlIHByaW9yaXR5IG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBzZWUgdGhlIHJlc3BvbnNpYmxlIGFnZW50IG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBzZXQgYSB0aWNrZXQgYXMgcGVuZGluZyBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gc2V0IGEgdGlja2V0IGFzIHNwYW0gaW4gZXZlcnkgdGlja2V0IG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIEFkZGl0aW9uYWwgYWNjZXNzIGNvbnRyb2wgdG8gc2hvdyBvciBub3Qgc2hvdyB0aGlzIGxpbmsgY2FuIGJlIGRvbmUgYnkgdXNpbmcgS2V5ICJHcm91cCIgYW5kIENvbnRlbnQgbGlrZSAicnc6Z3JvdXAxO21vdmVfaW50bzpncm91cDIiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gc2V0IHRoZSBwcmlvcml0eSBvZiBhIHRpY2tldCBpbiBldmVyeSB0aWNrZXQgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gYSB0aWNrZXQgaW4gdGhlIHRpY2tldCBvdmVydmlld3Mgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIHRvIGFjY2VzcyBhcnRpY2xlIGF0dGFjaG1lbnRzIHZpYSBhIGh0bWwgb25saW5lIHZpZXdlciBpbiB0aGUgem9vbSB2aWV3IG9mIHRoZSBhcnRpY2xlIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayB0byBkb3dubG9hZCBhcnRpY2xlIGF0dGFjaG1lbnRzIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIGFydGljbGUgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIHRvIHNlZSBhIHpvb21lZCBlbWFpbCB0aWNrZXQgaW4gcGxhaW4gdGV4dC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIHRvIHNldCBhIHRpY2tldCBhcyBzcGFtIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIEFkZGl0aW9uYWwgYWNjZXNzIGNvbnRyb2wgdG8gc2hvdyBvciBub3Qgc2hvdyB0aGlzIGxpbmsgY2FuIGJlIGRvbmUgYnkgdXNpbmcgS2V5ICJHcm91cCIgYW5kIENvbnRlbnQgbGlrZSAicnc6Z3JvdXAxO21vdmVfaW50bzpncm91cDIiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGludm9sdmVkIGFnZW50cyBvbiB0aGlzIHRpY2tldCwgaW4gdGhlIHRpY2tldCBmcmVlIHRleHQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGludm9sdmVkIGFnZW50cyBvbiB0aGlzIHRpY2tldCwgaW4gdGhlIHRpY2tldCBub3RlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGludm9sdmVkIGFnZW50cyBvbiB0aGlzIHRpY2tldCwgaW4gdGhlIHRpY2tldCBwcmlvcml0eSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGludm9sdmVkIGFnZW50cyBvbiB0aGlzIHRpY2tldCwgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIHBvc3NpYmxlIGFnZW50cyAoYWxsIGFnZW50cyB3aXRoIG5vdGUgcGVybWlzc2lvbnMgb24gdGhlIHF1ZXVlL3RpY2tldCkgdG8gZGV0ZXJtaW5lIHdobyBzaG91bGQgYmUgaW5mb3JtZWQgYWJvdXQgdGhpcyBub3RlLCBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBwb3NzaWJsZSBhZ2VudHMgKGFsbCBhZ2VudHMgd2l0aCBub3RlIHBlcm1pc3Npb25zIG9uIHRoZSBxdWV1ZS90aWNrZXQpIHRvIGRldGVybWluZSB3aG8gc2hvdWxkIGJlIGluZm9ybWVkIGFib3V0IHRoaXMgbm90ZSwgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBwb3NzaWJsZSBhZ2VudHMgKGFsbCBhZ2VudHMgd2l0aCBub3RlIHBlcm1pc3Npb25zIG9uIHRoZSBxdWV1ZS90aWNrZXQpIHRvIGRldGVybWluZSB3aG8gc2hvdWxkIGJlIGluZm9ybWVkIGFib3V0IHRoaXMgbm90ZSwgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBwcmV2aWV3IG9mIHRoZSB0aWNrZXQgb3ZlcnZpZXcgKEN1c3RvbWVySW5mbyA9PiAxIC0gc2hvd3MgYWxzbyBDdXN0b21lci1JbmZvLCBDdXN0b21lckluZm9NYXhTaXplIG1heC4gc2l6ZSBpbiBjaGFyYWN0ZXJzIG9mIEN1c3RvbWVyLUluZm8pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhbGwgYm90aCBybyBhbmQgcncgcXVldWVzIGluIHRoZSBxdWV1ZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhbGwgb3BlbiB0aWNrZXRzIChldmVuIGlmIHRoZXkgYXJlIGxvY2tlZCkgaW4gdGhlIGVzY2FsYXRpb24gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhbGwgb3BlbiB0aWNrZXRzIChldmVuIGlmIHRoZXkgYXJlIGxvY2tlZCkgaW4gdGhlIHN0YXR1cyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGFsbCB0aGUgYXJ0aWNsZXMgb2YgdGhlIHRpY2tldCAoZXhwYW5kZWQpIGluIHRoZSB6b29tIHZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGFsbCB0aGUgY3VzdG9tZXIgaWRlbnRpZmllcnMgaW4gYSBtdWx0aS1zZWxlY3QgZmllbGQgKG5vdCB1c2VmdWwgaWYgeW91IGhhdmUgYSBsb3Qgb2YgY3VzdG9tZXIgaWRlbnRpZmllcnMpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhbiBvd25lciBzZWxlY3Rpb24gaW4gcGhvbmUgYW5kIGVtYWlsIHRpY2tldHMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgY3VzdG9tZXIgaGlzdG9yeSB0aWNrZXRzIGluIEFnZW50VGlja2V0UGhvbmUsIEFnZW50VGlja2V0RW1haWwgYW5kIEFnZW50VGlja2V0Q3VzdG9tZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGVpdGhlciB0aGUgbGFzdCBjdXN0b21lciBhcnRpY2xlXCdzIHN1YmplY3Qgb3IgdGhlIHRpY2tldCB0aXRsZSBpbiB0aGUgc21hbGwgZm9ybWF0IG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBleGlzdGluZyBwYXJlbnQvY2hpbGQgcXVldWUgbGlzdHMgaW4gdGhlIHN5c3RlbSBpbiB0aGUgZm9ybSBvZiBhIHRyZWUgb3IgYSBsaXN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgYWN0aXZhdGVkIHRpY2tldCBhdHRyaWJ1dGVzIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UgKDAgPSBEaXNhYmxlZCBhbmQgMSA9IEVuYWJsZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgYXJ0aWNsZXMgc29ydGVkIG5vcm1hbGx5IG9yIGluIHJldmVyc2UsIHVuZGVyIHRpY2tldCB6b29tIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjdXN0b21lciB1c2VyIGluZm9ybWF0aW9uIChwaG9uZSBhbmQgZW1haWwpIGluIHRoZSBjb21wb3NlIHNjcmVlbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGN1c3RvbWVyIHVzZXJcJ3MgaW5mbyBpbiB0aGUgdGlja2V0IHpvb20gdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIG1lc3NhZ2Ugb2YgdGhlIGRheSAoTU9URCkgaW4gdGhlIGFnZW50IGRhc2hib2FyZC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgaW5kaWNhdGVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIG1lc3NhZ2Ugb2YgdGhlIGRheSBvbiBsb2dpbiBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgaGlzdG9yeSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgbW92ZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgdGlja2V0IGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGlja2V0IHByaW9yaXR5IG9wdGlvbnMgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGlja2V0IHByaW9yaXR5IG9wdGlvbnMgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkcyBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGRzIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGRzIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkcyBpbiB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkcyBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGRzIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGRzIGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRpbWUgaW4gbG9uZyBmb3JtYXQgKGRheXMsIGhvdXJzLCBtaW51dGVzKSwgaWYgc2V0IHRvICJZZXMiOyBvciBpbiBzaG9ydCBmb3JtYXQgKGRheXMsIGhvdXJzKSwgaWYgc2V0IHRvICJObyIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRpbWUgdXNlIGNvbXBsZXRlIGRlc2NyaXB0aW9uIChkYXlzLCBob3VycywgbWludXRlcyksIGlmIHNldCB0byAiWWVzIjsgb3IganVzdCBmaXJzdCBsZXR0ZXIgKGQsIGgsIG0pLCBpZiBzZXQgdG8gIk5vIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2lnbmF0dXJlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2luJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvcnRzIHRoZSB0aWNrZXRzIChhc2NlbmRpbmdseSBvciBkZXNjZW5kaW5nbHkpIHdoZW4gYSBzaW5nbGUgcXVldWUgaXMgc2VsZWN0ZWQgaW4gdGhlIHF1ZXVlIHZpZXcgYW5kIGFmdGVyIHRoZSB0aWNrZXRzIGFyZSBzb3J0ZWQgYnkgcHJpb3JpdHkuIFZhbHVlczogMCA9IGFzY2VuZGluZyAob2xkZXN0IG9uIHRvcCwgZGVmYXVsdCksIDEgPSBkZXNjZW5kaW5nICh5b3VuZ2VzdCBvbiB0b3ApLiBVc2UgdGhlIFF1ZXVlSUQgZm9yIHRoZSBrZXkgYW5kIDAgb3IgMSBmb3IgdmFsdWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwYW0gQXNzYXNzaW4gZXhhbXBsZSBzZXR1cC4gSWdub3JlcyBlbWFpbHMgdGhhdCBhcmUgbWFya2VkIHdpdGggU3BhbUFzc2Fzc2luLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGFtIEFzc2Fzc2luIGV4YW1wbGUgc2V0dXAuIE1vdmVzIG1hcmtlZCBtYWlscyB0byBzcGFtIHF1ZXVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgaWYgYW4gYWdlbnQgc2hvdWxkIHJlY2VpdmUgZW1haWwgbm90aWZpY2F0aW9uIG9mIGhpcyBvd24gYWN0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBjaGFydC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBwaWN0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIGJvcmRlciBjb2xvciBvZiB0aGUgY2hhcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgYm9yZGVyIGNvbG9yIG9mIHRoZSBsZWdlbmQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgYm90dG9tIG1hcmdpbiBvZiB0aGUgY2hhcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgZGlmZmVyZW50IGFydGljbGUgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgaW4gdGhlIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBkaWZmZXJlbnQgbm90ZSB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgc3lzdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgZGF0YSBpbiwgaWYgIkZTIiB3YXMgc2VsZWN0ZWQgZm9yIFRpY2tldFN0b3JhZ2VNb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHdoZXJlIFNTTCBjZXJ0aWZpY2F0ZXMgYXJlIHN0b3JlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgcHJpdmF0ZSBTU0wgY2VydGlmaWNhdGVzIGFyZSBzdG9yZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgZW1haWwgYWRkcmVzcyB0aGF0IHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiB3aGVuIHNlbmRpbmcgbm90aWZpY2F0aW9ucy4gVGhlIGVtYWlsIGFkZHJlc3MgaXMgdXNlZCB0byBidWlsZCB0aGUgY29tcGxldGUgZGlzcGxheSBuYW1lIGZvciB0aGUgbm90aWZpY2F0aW9uIG1hc3RlciAoaS5lLiAiT1RSUyBOb3RpZmljYXRpb24gTWFzdGVyIiBvdHJzQHlvdXIuZXhhbXBsZS5jb20pLiBZb3UgY2FuIHVzZSB0aGUgT1RSU19DT05GSUdfRlFETiB2YXJpYWJsZSBhcyBzZXQgaW4geW91ciBjb25maWd1YXRpb24sIG9yIGNob29zZSBhbm90aGVyIGVtYWlsIGFkZHJlc3MuIE5vdGlmaWNhdGlvbnMgYXJlIG1lc3NhZ2VzIHN1Y2ggYXMgZW46OkN1c3RvbWVyOjpRdWV1ZVVwZGF0ZSBvciBlbjo6QWdlbnQ6Ok1vdmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgbGVmdCBtYXJnaW4gb2YgdGhlIGNoYXJ0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIG5hbWUgdGhhdCBzaG91bGQgYmUgdXNlZCBieSB0aGUgYXBwbGljYXRpb24gd2hlbiBzZW5kaW5nIG5vdGlmaWNhdGlvbnMuIFRoZSBzZW5kZXIgbmFtZSBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBjb21wbGV0ZSBkaXNwbGF5IG5hbWUgZm9yIHRoZSBub3RpZmljYXRpb24gbWFzdGVyIChpLmUuICJPVFJTIE5vdGlmaWNhdGlvbiBNYXN0ZXIiIG90cnNAeW91ci5leGFtcGxlLmNvbSkuIE5vdGlmaWNhdGlvbnMgYXJlIG1lc3NhZ2VzIHN1Y2ggYXMgZW46OkN1c3RvbWVyOjpRdWV1ZVVwZGF0ZSBvciBlbjo6QWdlbnQ6Ok1vdmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgcGF0aCBvZiB0aGUgZmlsZSBmb3IgdGhlIGxvZ28gaW4gdGhlIHBhZ2UgaGVhZGVyIChnaWZ8anBnfHBuZywgNzAwIHggMTAwIHBpeGVsKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBwYXRoIG9mIHRoZSBmaWxlIGZvciB0aGUgcGVyZm9ybWFuY2UgbG9nLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGNvbnZlcnRlciB0aGF0IGFsbG93cyB0aGUgdmlldyBvZiBNaWNyb3NvZnQgRXhjZWwgZmlsZXMsIGluIHRoZSB3ZWIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGNvbnZlcnRlciB0aGF0IGFsbG93cyB0aGUgdmlldyBvZiBNaWNyb3NvZnQgV29yZCBmaWxlcywgaW4gdGhlIHdlYiBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgY29udmVydGVyIHRoYXQgYWxsb3dzIHRoZSB2aWV3IG9mIFBERiBkb2N1bWVudHMsIGluIHRoZSB3ZWIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGNvbnZlcnRlciB0aGF0IGFsbG93cyB0aGUgdmlldyBvZiBYTUwgZmlsZXMsIGluIHRoZSB3ZWIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIHJpZ2h0IG1hcmdpbiBvZiB0aGUgY2hhcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgdGV4dCBjb2xvciBvZiB0aGUgY2hhcnQgKGUuIGcuIGNhcHRpb24pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIHRleHQgY29sb3Igb2YgdGhlIGxlZ2VuZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSB0ZXh0IHRoYXQgc2hvdWxkIGFwcGVhciBpbiB0aGUgbG9nIGZpbGUgdG8gZGVub3RlIGEgQ0dJIHNjcmlwdCBlbnRyeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSB0b3AgbWFyZ2luIG9mIHRoZSBjaGFydC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHVzZXIgaWQgb2YgdGhlIHBvc3RtYXN0ZXIgZGF0YSBiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVsbGluZyBEaWN0aW9uYXJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YW5kYXJkIGF2YWlsYWJsZSBwZXJtaXNzaW9ucyBmb3IgYWdlbnRzIHdpdGhpbiB0aGUgYXBwbGljYXRpb24uIElmIG1vcmUgcGVybWlzc2lvbnMgYXJlIG5lZWRlZCwgdGhleSBjYW4gYmUgZW50ZXJlZCBoZXJlLiBQZXJtaXNzaW9ucyBtdXN0IGJlIGRlZmluZWQgdG8gYmUgZWZmZWN0aXZlLiBTb21lIG90aGVyIGdvb2QgcGVybWlzc2lvbnMgaGF2ZSBhbHNvIGJlZW4gcHJvdmlkZWQgYnVpbHQtaW46IG5vdGUsIGNsb3NlLCBwZW5kaW5nLCBjdXN0b21lciwgZnJlZXRleHQsIG1vdmUsIGNvbXBvc2UsIHJlc3BvbnNpYmxlLCBmb3J3YXJkLCBhbmQgYm91bmNlLiBNYWtlIHN1cmUgdGhhdCAicnciIGlzIGFsd2F5cyB0aGUgbGFzdCByZWdpc3RlcmVkIHBlcm1pc3Npb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG51bWJlciBmb3Igc3RhdGlzdGljcyBjb3VudGluZy4gRXZlcnkgbmV3IHN0YXQgaW5jcmVtZW50cyB0aGlzIG51bWJlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRpc3RpY3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHVzIHZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RvcmVzIGNvb2tpZXMgYWZ0ZXIgdGhlIGJyb3dzZXIgaGFzIGJlZW4gY2xvc2VkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdHJpcHMgZW1wdHkgbGluZXMgb24gdGhlIHRpY2tldCBwcmV2aWV3IGluIHRoZSBxdWV1ZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTeXN0ZW0gTG9nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSAiYmluL1Bvc3RNYXN0ZXJNYWlsQWNjb3VudC5wbCIgd2lsbCByZWNvbm5lY3QgdG8gUE9QMy9QT1AzUy9JTUFQL0lNQVBTIGhvc3QgYWZ0ZXIgdGhlIHNwZWNpZmllZCBjb3VudCBvZiBtZXNzYWdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFnZW50IHNraW5cJ3MgSW50ZXJuYWxOYW1lIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmxlIHNraW5zIGluIEZyb250ZW5kOjpBZ2VudDo6U2tpbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjdXN0b21lciBza2luXCdzIEludGVybmFsTmFtZSB3aGljaCBzaG91bGQgYmUgdXNlZCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJsZSBza2lucyBpbiBGcm9udGVuZDo6Q3VzdG9tZXI6OlNraW5zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGl2aWRlciBiZXR3ZWVuIFRpY2tldEhvb2sgYW5kIHRpY2tldCBudW1iZXIuIEUuZyBcJzogXCcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBmb3JtYXQgb2YgdGhlIHN1YmplY3QuIFwnTGVmdFwnIG1lYW5zIFwnW1RpY2tldEhvb2sjOjEyMzQ1XSBTb21lIFN1YmplY3RcJywgXCdSaWdodFwnIG1lYW5zIFwnU29tZSBTdWJqZWN0IFtUaWNrZXRIb29rIzoxMjM0NV1cJywgXCdOb25lXCcgbWVhbnMgXCdTb21lIFN1YmplY3RcJyBhbmQgbm8gdGlja2V0IG51bWJlci4gSW4gdGhlIGxhc3QgY2FzZSB5b3Ugc2hvdWxkIGVuYWJsZSBQb3N0bWFzdGVyRm9sbG93dXBTZWFyY2hJblJhdyBvciBQb3N0bWFzdGVyRm9sbG93VXBTZWFyY2hJblJlZmVyZW5jZXMgdG8gcmVjb2duaXplIGZvbGxvd3VwcyBiYXNlZCBvbiBlbWFpbCBoZWFkZXJzIGFuZC9vciBib2R5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaGVhZGxpbmUgc2hvd24gaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgdGlja2V0LCBlLmcuIFRpY2tldCMsIENhbGwjLCBNeVRpY2tldCMuIFRoZSBkZWZhdWx0IGlzIFRpY2tldCMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBsb2dvIHNob3duIGluIHRoZSBoZWFkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVGhlIFVSTCB0byB0aGUgaW1hZ2UgbXVzdCBiZSBhIHJlbGF0aXZlIFVSTCB0byB0aGUgc2tpbiBpbWFnZSBkaXJlY3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBsb2dvIHNob3duIGluIHRoZSBoZWFkZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVGhlIFVSTCB0byB0aGUgaW1hZ2UgbXVzdCBiZSBhIHJlbGF0aXZlIFVSTCB0byB0aGUgc2tpbiBpbWFnZSBkaXJlY3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBsb2dvIHNob3duIG9uIHRvcCBvZiB0aGUgbG9naW4gYm94IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFRoZSBVUkwgdG8gdGhlIGltYWdlIG11c3QgYmUgcmVsYXRpdmUgVVJMIHRvIHRoZSBza2luIGltYWdlIGRpcmVjdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHRleHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3ViamVjdCBpbiBhbiBlbWFpbCByZXBseSwgZS5nLiBSRSwgQVcsIG9yIEFTLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGV4dCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdWJqZWN0IHdoZW4gYW4gZW1haWwgaXMgZm9yd2FyZGVkLCBlLmcuIEZXLCBGd2QsIG9yIFdHLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVtZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBhbmQgaXRzIFByZVJ1bigpIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQsIGlmIGRlZmluZWQsIGZvciBldmVyeSByZXF1ZXN0LiBUaGlzIG1vZHVsZSBpcyB1c2VmdWwgdG8gY2hlY2sgc29tZSB1c2VyIG9wdGlvbnMgb3IgdG8gZGlzcGxheSBuZXdzIGFib3V0IG5ldyBhcHBsaWNhdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBPdmVydmlldyAiTWVkaXVtIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgT3ZlcnZpZXcgIlByZXZpZXciIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmb2xsb3cgdXAgbm90aWZpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIGVtYWlsIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSBtb3ZlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSBwaG9uZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IGNvbXBvc2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IGZvcndhcmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgbWVzc2FnZSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4gTk9URS4gSWYgeW91IHdhbnQgdG8gZGlzcGxheSB0aGVzZSBmaWVsZHMgYWxzbyBpbiB0aGUgdGlja2V0IHpvb20gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZSwgeW91IGhhdmUgdG8gZW5hYmxlIHRoZW0gaW4gQ3VzdG9tZXJUaWNrZXRab29tIyMjQXR0cmlidXRlc1ZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHBob25lIG91dGJvdW5kIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBwcmlvcml0eSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBzZWFyY2ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgc2VhcmNoIHNjcmVlbiBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkIGFuZCAxID0gRW5hYmxlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRpbWUgb3B0aW9ucyBzaG93biBpbiB0aGUgZW1haWwgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0aW1lIG9wdGlvbnMgc2hvd24gaW4gdGhlIG1vdmUgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0aW1lIG9wdGlvbnMgc2hvd24gaW4gdGhlIHBob25lIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgY29tcG9zZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgZm9yd2FyZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0aW1lIG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBtZXNzYWdlIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLiBOT1RFLiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IHRoZXNlIGZpZWxkcyBhbHNvIGluIHRoZSB0aWNrZXQgem9vbSBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLCB5b3UgaGF2ZSB0byBlbmFibGUgdGhlbSBpbiBDdXN0b21lclRpY2tldFpvb20jIyNBdHRyaWJ1dGVzVmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0aW1lIG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRpbWUgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRpbWUgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgc2VhcmNoIHNjcmVlbiBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkIGFuZCAxID0gRW5hYmxlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGxpbWl0IHBlciBwYWdlIGZvciBUaWNrZXQgT3ZlcnZpZXcgIk1lZGl1bSInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGxpbWl0IHBlciBwYWdlIGZvciBUaWNrZXQgT3ZlcnZpZXcgIlByZXZpZXciJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBsaW1pdCBwZXIgcGFnZSBmb3IgVGlja2V0IE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGxvY2sgdGltZW91dCBub3RpZmljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IG1vdmUgbm90aWZpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBvdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgd2F0Y2ggbm90aWZpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBab25lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgaW4gc2Vjb25kcyB0aGF0IGdldHMgYWRkZWQgdG8gdGhlIGFjdHVhbCB0aW1lIGlmIHNldHRpbmcgYSBwZW5kaW5nLXN0YXRlIChkZWZhdWx0OiA4NjQwMCA9IDEgZGF5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9vbGJhciBJdGVtIGZvciBhIHNob3J0Y3V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUdXJucyBvbiB0aGUgYW5pbWF0aW9ucyB1c2VkIGluIHRoZSBHVUkuIElmIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggdGhlc2UgYW5pbWF0aW9ucyAoZS5nLiBwZXJmb3JtYW5jZSBpc3N1ZXMpLCB5b3UgY2FuIHR1cm4gdGhlbSBvZmYgaGVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHVybnMgb24gdGhlIHJlbW90ZSBpcCBhZGRyZXNzIGNoZWNrLiBJdCBzaG91bGQgYmUgc2V0IHRvICJObyIgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIHVzZWQsIGZvciBleGFtcGxlLCB2aWEgYSBwcm94eSBmYXJtIG9yIGEgZGlhbHVwIGNvbm5lY3Rpb24sIGJlY2F1c2UgdGhlIHJlbW90ZSBpcCBhZGRyZXNzIGlzIG1vc3RseSBkaWZmZXJlbnQgZm9yIHRoZSByZXF1ZXN0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHlwZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXBkYXRlIFRpY2tldCAiU2VlbiIgZmxhZyBpZiBldmVyeSBhcnRpY2xlIGdvdCBzZWVuIG9yIGEgbmV3IEFydGljbGUgZ290IGNyZWF0ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VwZGF0ZSBhbmQgZXh0ZW5kIHlvdXIgc3lzdGVtIHdpdGggc29mdHdhcmUgcGFja2FnZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VwZGF0ZXMgdGhlIHRpY2tldCBlc2NhbGF0aW9uIGluZGV4IGFmdGVyIGEgdGlja2V0IGF0dHJpYnV0ZSBnb3QgdXBkYXRlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXBkYXRlcyB0aGUgdGlja2V0IGluZGV4IGFjY2VsZXJhdG9yLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VzIENjIHJlY2lwaWVudHMgaW4gcmVwbHkgQ2MgbGlzdCBvbiBjb21wb3NlIGFuIGVtYWlsIGFuc3dlciBpbiB0aGUgdGlja2V0IGNvbXBvc2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXMgcmljaHRleHQgZm9yIHZpZXdpbmcgYW5kIGVkaXRpbmc6IGFydGljbGVzLCBzYWx1dGF0aW9ucywgc2lnbmF0dXJlcywgc3RhbmRhcmQgcmVzcG9uc2VzLCBhdXRvIHJlc3BvbnNlcyBhbmQgbm90aWZpY2F0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmlldyBwZXJmb3JtYW5jZSBiZW5jaG1hcmsgcmVzdWx0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmlldyBzeXN0ZW0gbG9nIG1lc3NhZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXZWFyIHRoaXMgZnJvbnRlbmQgc2tpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaGVuIHRpY2tldHMgYXJlIG1lcmdlZCwgYSBub3RlIHdpbGwgYmUgYWRkZWQgYXV0b21hdGljYWxseSB0byB0aGUgdGlja2V0IHdoaWNoIGlzIG5vIGxvbmdlciBhY3RpdmUuIEluIHRoaXMgdGV4dCBhcmVhIHlvdSBjYW4gZGVmaW5lIHRoaXMgdGV4dCAoVGhpcyB0ZXh0IGNhbm5vdCBiZSBjaGFuZ2VkIGJ5IHRoZSBhZ2VudCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1doZW4gdGlja2V0cyBhcmUgbWVyZ2VkLCB0aGUgY3VzdG9tZXIgY2FuIGJlIGluZm9ybWVkIHBlciBlbWFpbCBieSBzZXR0aW5nIHRoZSBjaGVjayBib3ggIkluZm9ybSBTZW5kZXIiLiBJbiB0aGlzIHRleHQgYXJlYSwgeW91IGNhbiBkZWZpbmUgYSBwcmUtZm9ybWF0dGVkIHRleHQgd2hpY2ggY2FuIGxhdGVyIGJlIG1vZGlmaWVkIGJ5IHRoZSBhZ2VudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdXIgbGFuZ3VhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91ciBxdWV1ZSBzZWxlY3Rpb24gb2YgeW91ciBmYXZvdXJpdGUgcXVldWVzLiBZb3UgYWxzbyBnZXQgbm90aWZpZWQgYWJvdXQgdGhvc2UgcXVldWVzIHZpYSBlbWFpbCBpZiBlbmFibGVkLid9ID0gJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9lbl9HQl9JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVuX0dCX0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkNvbmZpZ0l0ZW1DcmVhdGUnfSA9ICdOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbURlbGV0ZSd9ID0gJ0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6RGVmaW5pdGlvblVwZGF0ZSd9ID0gJ0NvbmZpZ0l0ZW1zXCcgZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpEZXBsb3ltZW50U3RhdGVVcGRhdGUnfSA9ICdEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lczsgb2xkPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkluY2lkZW50U3RhdGVVcGRhdGUnfSA9ICdJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXM7IG9sZD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpMaW5rQWRkJ30gPSAnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpMaW5rRGVsZXRlJ30gPSAnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6Ok5hbWVVcGRhdGUnfSA9ICdOYW1lIHVwZGF0ZWQgKG5ldz0lczsgb2xkPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZhbHVlVXBkYXRlJ30gPSAnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWZXJzaW9uQ3JlYXRlJ30gPSAnTmV3IHZlcnNpb24gKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZlcnNpb25EZWxldGUnfSA9ICdWZXJzaW9uICVzIGRlbGV0ZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2Ugb2YgZGVmaW5pdGlvbiBmYWlsZWQhIFNlZSBTeXN0ZW0gTG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmN1cnJlbnQgVXNlcnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0tQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgYXZhaWxhYmxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBzaG93bid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRlFETid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzazo6Q2FwYWNpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlkZSBWZXJzaW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBGYWNpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmFjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9yZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgQ2hhbmdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5OjpFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXk6OlF1YW50aXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgQWRkcmVzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXI6OklQIG92ZXIgREhDUCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzOjpHYXRld2F5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzczo6U3VibmV0IE1hc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW5nIFN5c3RlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDb25maWcgSXRlbXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBWZXJzaW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01Db25maWdJdGVtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBjbGFzcyBkZWZpbml0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIHRvIG92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJtaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuY2VsJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIENsYXNzZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGludCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWF0Y2hlcyBmb3VuZC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbmNlbCAmIGNsb3NlIHdpbmRvdyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBDb250ZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1pvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGV0aW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1pvb20gdmlldyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2Ugc2VhcmNoIG9wdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0dGluZ3MnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBDaGFuZ2VkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRhdGEgZm91bmQuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmtlZC1PYmplY3QnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaC1UZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgTmV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBUZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgTmV3IFRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIHRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgY2hhbmdlcyBpbiB0ZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYW5vdGhlciBhdHRyaWJ1dGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dHB1dCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGUuIGcuIDEwKjUxNTUgb3IgMTA1NjU4KiknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtb3ZlIHRoaXMgZW50cnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtb3ZlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoUmVzdWx0UHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVUaW1lJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmtlZCBPYmplY3RzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgT24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzaXplJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb3IgaGlkZSB0aGUgY29udGVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWx1ZSd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FDTCBtb2R1bGUgdGhhdCBhbGxvd3MgY2xvc2luZyBwYXJlbnQgdGlja2V0cyBvbmx5IGlmIGFsbCBpdHMgY2hpbGRyZW4gYXJlIGFscmVhZHkgY2xvc2VkICgiU3RhdGUiIHNob3dzIHdoaWNoIHN0YXRlcyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgdGhlIHBhcmVudCB0aWNrZXQgdW50aWwgYWxsIGNoaWxkIHRpY2tldHMgYXJlIGNsb3NlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGl2YXRlcyBUeXBlQWhlYWQgZm9yIHRoZSBhdXRvY29tcGxldGUgZmVhdHVyZSwgdGhhdCBlbmFibGVzIHVzZXJzIHRvIHR5cGUgaW4gd2hhdGV2ZXIgc3BlZWQgdGhleSBkZXNpcmUsIHdpdGhvdXQgbG9zaW5nIGFueSBpbmZvcm1hdGlvbi4gT2Z0ZW4gdGhpcyBtZWFucyB0aGF0IGtleXN0cm9rZXMgZW50ZXJlZCB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbiBpbW1lZGlhdGVseS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0aXZhdGVzIGEgYmxpbmtpbmcgbWVjaGFuaXNtIG9mIHRoZSBxdWV1ZSB0aGF0IGNvbnRhaW5zIHRoZSBvbGRlc3QgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3RpdmF0ZXMgbG9zdCBwYXNzd29yZCBmZWF0dXJlIGZvciBhZ2VudHMsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGl2YXRlcyBsb3N0IHBhc3N3b3JkIGZlYXR1cmUgZm9yIGN1c3RvbWVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0aXZhdGVzIHN1cHBvcnQgZm9yIGN1c3RvbWVyIGdyb3Vwcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0aXZhdGVzIHRoZSBhcnRpY2xlIGZpbHRlciBpbiB0aGUgem9vbSB2aWV3IHRvIHNwZWNpZnkgd2hpY2ggYXJ0aWNsZXMgc2hvdWxkIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3RpdmF0ZXMgdGhlIGF2YWlsYWJsZSB0aGVtZXMgb24gdGhlIHN5c3RlbS4gVmFsdWUgMSBtZWFucyBhY3RpdmUsIDAgbWVhbnMgaW5hY3RpdmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGl2YXRlcyB0aGUgdGlja2V0IGFyY2hpdmUgc3lzdGVtIHRvIGhhdmUgYSBmYXN0ZXIgc3lzdGVtIGJ5IG1vdmluZyBzb21lIHRpY2tldHMgb3V0IG9mIHRoZSBkYWlseSBzY29wZS4gVG8gc2VhcmNoIGZvciB0aGVzZSB0aWNrZXRzLCB0aGUgYXJjaGl2ZSBmbGFnIGhhcyB0byBiZSBlbmFibGVkIGluIHRoZSB0aWNrZXQgc2VhcmNoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3RpdmF0ZXMgdGltZSBhY2NvdW50aW5nLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBub3RlIHRvIHRoaXMgdGlja2V0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIGEgc3VmZml4IHdpdGggdGhlIGFjdHVhbCB5ZWFyIGFuZCBtb250aCB0byB0aGUgT1RSUyBsb2cgZmlsZS4gQSBsb2dmaWxlIGZvciBldmVyeSBtb250aCB3aWxsIGJlIGNyZWF0ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHMgY3VzdG9tZXJzIGVtYWlsIGFkZHJlc3NlcyB0byByZWNpcGllbnRzIGluIHRoZSB0aWNrZXQgY29tcG9zZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgb25lIHRpbWUgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciAxLiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBvbmUgdGltZSB2YWNhdGlvbiBkYXlzIGZvciB0aGUgY2FsZW5kYXIgbnVtYmVyIDIuIFBsZWFzZSB1c2Ugc2luZ2xlIGRpZ2l0IHBhdHRlcm4gZm9yIG51bWJlcnMgZnJvbSAxIHRvIDkgKGluc3RlYWQgb2YgMDEgLSAwOSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHMgdGhlIG9uZSB0aW1lIHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgMy4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgb25lIHRpbWUgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciA0LiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBvbmUgdGltZSB2YWNhdGlvbiBkYXlzIGZvciB0aGUgY2FsZW5kYXIgbnVtYmVyIDUuIFBsZWFzZSB1c2Ugc2luZ2xlIGRpZ2l0IHBhdHRlcm4gZm9yIG51bWJlcnMgZnJvbSAxIHRvIDkgKGluc3RlYWQgb2YgMDEgLSAwOSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHMgdGhlIG9uZSB0aW1lIHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgNi4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgb25lIHRpbWUgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciA3LiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBvbmUgdGltZSB2YWNhdGlvbiBkYXlzIGZvciB0aGUgY2FsZW5kYXIgbnVtYmVyIDguIFBsZWFzZSB1c2Ugc2luZ2xlIGRpZ2l0IHBhdHRlcm4gZm9yIG51bWJlcnMgZnJvbSAxIHRvIDkgKGluc3RlYWQgb2YgMDEgLSAwOSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHMgdGhlIG9uZSB0aW1lIHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgOS4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgb25lIHRpbWUgdmFjYXRpb24gZGF5cy4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgMS4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgMi4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgMy4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgNC4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgNS4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgNi4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgNy4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgOC4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgOS4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgcGVybWFuZW50IHZhY2F0aW9uIGRheXMuIFBsZWFzZSB1c2Ugc2luZ2xlIGRpZ2l0IHBhdHRlcm4gZm9yIG51bWJlcnMgZnJvbSAxIHRvIDkgKGluc3RlYWQgb2YgMDEgLSAwOSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIE5vdGlmaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBOb3RpZmljYXRpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBhcnRpY2xlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gY2hlY2sgUEdQLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2UgYXJ0aWNsZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIGNoZWNrIFMvTUlNRS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG1vZHVsZSB0byBhY2Nlc3MgZnVsbHRleHQgc2VhcmNoIHZpYSBuYXYgYmFyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2UgbW9kdWxlIHRvIGFjY2VzcyBzZWFyY2ggcHJvZmlsZXMgdmlhIG5hdiBiYXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBtb2R1bGUgdG8gY2hlY2sgaW5jb21pbmcgZW1haWxzIGluIHRoZSBUaWNrZXQtWm9vbS1WaWV3IGlmIHRoZSBTL01JTUUta2V5IGlzIGF2YWlsYWJsZSBhbmQgdHJ1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gY2hlY2sgdGhlIHVzZWQgY2hhcnNldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgdGlja2V0cyBhbiBhZ2VudCBpcyByZXNwb25zaWJsZSBmb3IuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIHdhdGNoZWQgdGlja2V0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50cyA8LT4gR3JvdXBzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50cyA8LT4gUm9sZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWRkaW5nIG5vdGVzIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWRkaW5nIG5vdGVzIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWRkaW5nIG5vdGVzIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWRkaW5nIG5vdGVzIGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBhZ2VudHMgdG8gZXhjaGFuZ2UgdGhlIGF4aXMgb2YgYSBzdGF0IGlmIHRoZXkgZ2VuZXJhdGUgb25lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWdlbnRzIHRvIGdlbmVyYXRlIGluZGl2aWR1YWwtcmVsYXRlZCBzdGF0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGNob29zaW5nIGJldHdlZW4gc2hvd2luZyB0aGUgYXR0YWNobWVudHMgb2YgYSB0aWNrZXQgaW4gdGhlIGJyb3dzZXIgKGlubGluZSkgb3IganVzdCBtYWtlIHRoZW0gZG93bmxvYWRhYmxlIChhdHRhY2htZW50KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGNob29zaW5nIHRoZSBuZXh0IGNvbXBvc2Ugc3RhdGUgZm9yIGN1c3RvbWVyIHRpY2tldHMgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGN1c3RvbWVycyB0byBjaGFuZ2UgdGhlIHRpY2tldCBwcmlvcml0eSBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgY3VzdG9tZXJzIHRvIHNldCB0aGUgdGlja2V0IFNMQSBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgY3VzdG9tZXJzIHRvIHNldCB0aGUgdGlja2V0IHByaW9yaXR5IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBjdXN0b21lcnMgdG8gc2V0IHRoZSB0aWNrZXQgcXVldWUgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gSWYgdGhpcyBpcyBzZXQgdG8gXCdOb1wnLCBRdWV1ZURlZmF1bHQgc2hvdWxkIGJlIGNvbmZpZ3VyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBjdXN0b21lcnMgdG8gc2V0IHRoZSB0aWNrZXQgc2VydmljZSBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgZGVmaW5pbmcgbmV3IHR5cGVzIGZvciB0aWNrZXQgKGlmIHRpY2tldCB0eXBlIGZlYXR1cmUgaXMgZW5hYmxlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBkZWZpbmluZyBzZXJ2aWNlcyBhbmQgU0xBcyBmb3IgdGlja2V0cyAoZS4gZy4gZW1haWwsIGRlc2t0b3AsIG5ldHdvcmssIC4uLiksIGFuZCBlc2NhbGF0aW9uIGF0dHJpYnV0ZXMgZm9yIFNMQXMgKGlmIHRpY2tldCBzZXJ2aWNlL1NMQSBmZWF0dXJlIGlzIGVuYWJsZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgZXh0ZW5kZWQgc2VhcmNoIGNvbmRpdGlvbnMgaW4gdGlja2V0IHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBXaXRoIHRoaXMgZmVhdHVyZSB5b3UgY2FuIHNlYXJjaCB3LiBnLiB3aXRoIHRoaXMga2luZCBvZiBjb25kaXRpb25zIGxpa2UgIihrZXkxJiZrZXkyKSIgb3IgIihrZXkxfHxrZXkyKSIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBleHRlbmRlZCBzZWFyY2ggY29uZGl0aW9ucyBpbiB0aWNrZXQgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFdpdGggdGhpcyBmZWF0dXJlIHlvdSBjYW4gc2VhcmNoIHcuIGcuIHdpdGggdGhpcyBraW5kIG9mIGNvbmRpdGlvbnMgbGlrZSAiKGtleTEmJmtleTIpIiBvciAiKGtleTF8fGtleTIpIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGhhdmluZyBhIG1lZGl1bSBmb3JtYXQgdGlja2V0IG92ZXJ2aWV3IChDdXN0b21lckluZm8gPT4gMSAtIHNob3dzIGFsc28gdGhlIGN1c3RvbWVyIGluZm9ybWF0aW9uKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGhhdmluZyBhIHNtYWxsIGZvcm1hdCB0aWNrZXQgb3ZlcnZpZXcgKEN1c3RvbWVySW5mbyA9PiAxIC0gc2hvd3MgYWxzbyB0aGUgY3VzdG9tZXIgaW5mb3JtYXRpb24pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgdGhlIGFkbWluaXN0cmF0b3JzIHRvIGxvZ2luIGFzIG90aGVyIHVzZXJzLCB2aWEgdGhlIHVzZXJzIGFkbWluaXN0cmF0aW9uIHBhbmVsLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgdG8gc2V0IGEgbmV3IHRpY2tldCBzdGF0ZSBpbiB0aGUgbW92ZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgZW1haWwgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSBwaG9uZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBjb21wb3NlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgbWVzc2FnZSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4gTk9URS4gSWYgeW91IHdhbnQgdG8gZGlzcGxheSB0aGVzZSBmaWVsZHMgYWxzbyBpbiB0aGUgdGlja2V0IHpvb20gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZSwgeW91IGhhdmUgdG8gZW5hYmxlIHRoZW0gaW4gQ3VzdG9tZXJUaWNrZXRab29tIyMjQXR0cmlidXRlc1ZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBub3RlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBwaG9uZSBvdXRib3VuZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRhY2htZW50cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRhY2htZW50cyA8LT4gUmVzcG9uc2VzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1dG8gUmVzcG9uc2VzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1dG8gUmVzcG9uc2VzIDwtPiBRdWV1ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXV0b21hdGVkIGxpbmUgYnJlYWsgaW4gdGV4dCBtZXNzYWdlcyBhZnRlciB4IG51bWJlciBvZiBjaGFycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXV0b21hdGljYWxseSBsb2NrIGFuZCBzZXQgb3duZXIgdG8gY3VycmVudCBBZ2VudCBhZnRlciBzZWxlY3RpbmcgZm9yIGFuIEJ1bGsgQWN0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdXRvbWF0aWNhbGx5IHNldHMgdGhlIG93bmVyIG9mIGEgdGlja2V0IGFzIHRoZSByZXNwb25zaWJsZSBmb3IgaXQgKGlmIHRpY2tldCByZXNwb25zaWJsZSBmZWF0dXJlIGlzIGVuYWJsZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdXRvbWF0aWNhbGx5IHNldHMgdGhlIHJlc3BvbnNpYmxlIG9mIGEgdGlja2V0IChpZiBpdCBpcyBub3Qgc2V0IHlldCkgYWZ0ZXIgdGhlIGZpcnN0IG93bmVyIHVwZGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWxhbmNlZCB3aGl0ZSBza2luIGJ5IEZlbGl4IE5pa2xhcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmxvY2tzIGFsbCB0aGUgaW5jb21pbmcgZW1haWxzIHRoYXQgZG8gbm90IGhhdmUgYSB2YWxpZCB0aWNrZXQgbnVtYmVyIGluIHN1YmplY3Qgd2l0aCBGcm9tOiBAZXhhbXBsZS5jb20gYWRkcmVzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRzIGFuIGFydGljbGUgaW5kZXggcmlnaHQgYWZ0ZXIgdGhlIGFydGljbGVcJ3MgY3JlYXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNRCBleGFtcGxlIHNldHVwLiBJZ25vcmVzIGVtYWlscyB3aGVyZSBleHRlcm5hbCBDTUQgcmV0dXJucyBzb21lIG91dHB1dCBvbiBTVERPVVQgKGVtYWlsIHdpbGwgYmUgcGlwZWQgaW50byBTVERJTiBvZiBzb21lLmJpbikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTViBTZXBhcmF0b3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHBhc3N3b3JkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBxdWV1ZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHRoZSB0aWNrZXQgY3VzdG9tZXIhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSB0aGUgdGlja2V0IGZyZWUgZmllbGRzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgdGhlIHRpY2tldCBvd25lciEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHRoZSB0aWNrZXQgcHJpb3JpdHkhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSB0aGUgdGlja2V0IHJlc3BvbnNpYmxlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VzIHRoZSBvd25lciBvZiB0aWNrZXRzIHRvIGV2ZXJ5b25lICh1c2VmdWwgZm9yIEFTUCkuIE5vcm1hbGx5IG9ubHkgYWdlbnQgd2l0aCBydyBwZXJtaXNzaW9ucyBpbiB0aGUgcXVldWUgb2YgdGhlIHRpY2tldCB3aWxsIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVja3MgdGhlIFN5c3RlbUlEIGluIHRpY2tldCBudW1iZXIgZGV0ZWN0aW9uIGZvciBmb2xsb3ctdXBzICh1c2UgIk5vIiBpZiBTeXN0ZW1JRCBoYXMgYmVlbiBjaGFuZ2VkIGFmdGVyIHVzaW5nIHRoZSBzeXN0ZW0pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbG9zZSB0aGlzIHRpY2tldCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCBmb3IgbmV3IGhpc3RvcnkgZW50cmllcyBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wYW5pZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcGFueSBUaWNrZXRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmUgeW91ciBvd24gbG9nIHRleHQgZm9yIFBHUC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlcyBhIGRlZmF1bHQgVGlja2V0RnJlZUZpZWxkIHNldHRpbmcuICJDb3VudGVyIiBkZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgd2hpY2ggc2hvdWxkIGJlIHVzZWQsICJLZXkiIGlzIHRoZSBUaWNrZXRGcmVlS2V5LCAiVmFsdWUiIGlzIHRoZSBUaWNrZXRGcmVlVGV4dCBhbmQgIkV2ZW50IiBkZWZpbmVzIHRoZSB0cmlnZ2VyIGV2ZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmVzIGEgZGVmYXVsdCBUaWNrZXRGcmVlRmllbGQgc2V0dGluZy4gIkNvdW50ZXIiIGRlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCB3aGljaCBzaG91bGQgYmUgdXNlZCwgIktleSIgaXMgdGhlIFRpY2tldEZyZWVLZXksICJWYWx1ZSIgaXMgdGhlIFRpY2tldEZyZWVUZXh0IGFuZCAiRXZlbnQiIGRlZmluZXMgdGhlIHRyaWdnZXIgZXZlbnQuIFBsZWFzZSBjaGVjayB0aGUgZGV2ZWxvcGVyIG1hbnVhbCAoaHR0cDovL2RvYy5vdHJzLm9yZy8pLCBjaGFwdGVyICJUaWNrZXQgRXZlbnQgTW9kdWxlIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlcyB0aGUgZnVsbC10ZXh0IGluZGV4LiBFeGVjdXRlICJiaW4vb3Rycy5SZWJ1aWxkRnVsbHRleHRJbmRleC5wbCIgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgYSBuZXcgaW5kZXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRyb2xzIGlmIGN1c3RvbWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIHNvcnQgdGhlaXIgdGlja2V0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udmVydHMgSFRNTCBtYWlscyBpbnRvIHRleHQgbWVzc2FnZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIFNlcnZpY2UgTGV2ZWwgQWdyZWVtZW50cyAoU0xBcykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIGFnZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgYXR0YWNobWVudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIGNvbXBhbmllcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgY3VzdG9tZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBldmVudCBiYXNlZCBub3RpZmljYXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBncm91cHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIG5vdGlmaWNhdGlvbnMgdGhhdCBhcmUgc2VudCB0byBhZ2VudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHF1ZXVlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgcmVzcG9uc2UgdGVtcGxhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSByZXNwb25zZXMgdGhhdCBhcmUgYXV0b21hdGljYWxseSBzZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSByb2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2Ugc2FsdXRhdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHNlcnZpY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBzaWduYXR1cmVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRpY2tldCBwcmlvcml0aWVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aWNrZXQgc3RhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aWNrZXQgdHlwZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBuZXcgVGlja2V0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBuZXcgZW1haWwgdGlja2V0IGFuZCBzZW5kIHRoaXMgb3V0IChvdXRib3VuZCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIG5ldyBwaG9uZSB0aWNrZXQgKGluYm91bmQpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbSB0ZXh0IGZvciB0aGUgcGFnZSBzaG93biB0byBjdXN0b21lcnMgdGhhdCBoYXZlIG5vIHRpY2tldHMgeWV0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW5pZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgaXRlbSAoaWNvbikgd2hpY2ggc2hvd3MgdGhlIG9wZW4gdGlja2V0cyBvZiB0aGlzIGN1c3RvbWVyIGFzIGluZm8gYmxvY2suJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVycyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lcnMgPC0+IEdyb3Vwcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lcnMgPC0+IFNlcnZpY2VzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rhc2hib2FyZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRhIHVzZWQgdG8gZXhwb3J0IHRoZSBzZWFyY2ggcmVzdWx0IGluIENTViBmb3JtYXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlYnVncyB0aGUgdHJhbnNsYXRpb24gc2V0LiBJZiB0aGlzIGlzIHNldCB0byAiWWVzIiBhbGwgc3RyaW5ncyAodGV4dCkgd2l0aG91dCB0cmFuc2xhdGlvbnMgYXJlIHdyaXR0ZW4gdG8gU1RERVJSLiBUaGlzIGNhbiBiZSBoZWxwZnVsIHdoZW4geW91IGFyZSBjcmVhdGluZyBhIG5ldyB0cmFuc2xhdGlvbiBmaWxlLiBPdGhlcndpc2UsIHRoaXMgb3B0aW9uIHNob3VsZCByZW1haW4gc2V0IHRvICJObyIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgQUNMIHZhbHVlcyBmb3IgdGlja2V0IGFjdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgZGF0YSB0byB1c2Ugb24gYXR0cmlidXRlIGZvciB0aWNrZXQgc2VhcmNoIHNjcmVlbi4gRXhhbXBsZTogIlRpY2tldENyZWF0ZVRpbWVQb2ludEZvcm1hdD15ZWFyO1RpY2tldENyZWF0ZVRpbWVQb2ludFN0YXJ0PUxhc3Q7VGlja2V0Q3JlYXRlVGltZVBvaW50PTI7Ii4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBkYXRhIHRvIHVzZSBvbiBhdHRyaWJ1dGUgZm9yIHRpY2tldCBzZWFyY2ggc2NyZWVuLiBFeGFtcGxlOiAiVGlja2V0Q3JlYXRlVGltZVN0YXJ0WWVhcj0yMDEwO1RpY2tldENyZWF0ZVRpbWVTdGFydE1vbnRoPTEwO1RpY2tldENyZWF0ZVRpbWVTdGFydERheT00O1RpY2tldENyZWF0ZVRpbWVTdG9wWWVhcj0yMDEwO1RpY2tldENyZWF0ZVRpbWVTdG9wTW9udGg9MTE7VGlja2V0Q3JlYXRlVGltZVN0b3BEYXk9MzsiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxvb3AgcHJvdGVjdGlvbiBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcXVldWUgSUQgdXNlZCBieSB0aGUgc3lzdGVtIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2tpbiBmb3IgT1RSUyAzLjAgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNraW4gZm9yIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzcGVsbGluZyBkaWN0aW9uYXJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdGlja2V0IElEIHVzZWQgYnkgdGhlIHN5c3RlbSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHRpY2tldCBJRCB1c2VkIGJ5IHRoZSBzeXN0ZW0gaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIGEgZmlsdGVyIGZvciBodG1sIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEF0IG9uY2UgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJsaXR5IGlzIHRvIGluc2VydCB0aGUgbGluayB0byB0aGUgaW1hZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgc3RhcnQgZGF5IG9mIHRoZSB3ZWVrIGZvciB0aGUgZGF0ZSBwaWNrZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYSBjdXN0b21lciBpdGVtLCB3aGljaCBnZW5lcmF0ZXMgYSBMaW5rZWRJbiBpY29uIGF0IHRoZSBlbmQgb2YgYSBjdXN0b21lciBpbmZvIGJsb2NrLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGEgY3VzdG9tZXIgaXRlbSwgd2hpY2ggZ2VuZXJhdGVzIGEgWElORyBpY29uIGF0IHRoZSBlbmQgb2YgYSBjdXN0b21lciBpbmZvIGJsb2NrLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGEgY3VzdG9tZXIgaXRlbSwgd2hpY2ggZ2VuZXJhdGVzIGEgZ29vZ2xlIGljb24gYXQgdGhlIGVuZCBvZiBhIGN1c3RvbWVyIGluZm8gYmxvY2suJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYSBjdXN0b21lciBpdGVtLCB3aGljaCBnZW5lcmF0ZXMgYSBnb29nbGUgbWFwcyBpY29uIGF0IHRoZSBlbmQgb2YgYSBjdXN0b21lciBpbmZvIGJsb2NrLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGEgZGVmYXVsdCBsaXN0IG9mIHdvcmRzLCB0aGF0IGFyZSBpZ25vcmVkIGJ5IHRoZSBzcGVsbCBjaGVja2VyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGEgZmlsdGVyIGZvciBodG1sIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIENWRSBudW1iZXJzLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBBdCBvbmNlIHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2libGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGEgZmlsdGVyIGZvciBodG1sIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIE1TQnVsbGV0aW4gbnVtYmVycy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gQXQgb25jZSB0aGUgbmFtZSBvZiBhbiBpbWFnZSAoZS5nLiBmYXEucG5nKS4gSW4gdGhpcyBjYXNlIHRoZSBPVFJTIGltYWdlIHBhdGggd2lsbCBiZSB1c2VkLiBUaGUgc2Vjb25kIHBvc3NpYmxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhIGZpbHRlciBmb3IgaHRtbCBvdXRwdXQgdG8gYWRkIGxpbmtzIGJlaGluZCBhIGRlZmluZWQgc3RyaW5nLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBBdCBvbmNlIHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2libGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGEgZmlsdGVyIGZvciBodG1sIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGJ1Z3RyYXEgbnVtYmVycy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gQXQgb25jZSB0aGUgbmFtZSBvZiBhbiBpbWFnZSAoZS5nLiBmYXEucG5nKS4gSW4gdGhpcyBjYXNlIHRoZSBPVFJTIGltYWdlIHBhdGggd2lsbCBiZSB1c2VkLiBUaGUgc2Vjb25kIHBvc3NpYmxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhIGZpbHRlciB0byBwcm9jZXNzIHRoZSB0ZXh0IGluIHRoZSBhcnRpY2xlcywgaW4gb3JkZXIgdG8gaGlnaGxpZ2h0IHByZWRlZmluZWQga2V5d29yZHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBleGNsdWRlcyBzb21lIGFkZHJlc3NlcyBmcm9tIHRoZSBzeW50YXggY2hlY2sgKGlmICJDaGVja0VtYWlsQWRkcmVzc2VzIiBpcyBzZXQgdG8gIlllcyIpLiBQbGVhc2UgZW50ZXIgYSByZWdleCBpbiB0aGlzIGZpZWxkIGZvciBlbWFpbCBhZGRyZXNzZXMsIHRoYXQgYXJlblwndCBzeW50YWN0aWNhbGx5IHZhbGlkLCBidXQgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlIHN5c3RlbSAoaS5lLiAicm9vdEBsb2NhbGhvc3QiKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGZpbHRlcnMgYWxsIGVtYWlsIGFkZHJlc3NlcyB0aGF0IHNob3VsZCBub3QgYmUgdXNlZCBpbiB0aGUgYXBwbGljYXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYSB1c2VmdWwgbW9kdWxlIHRvIGxvYWQgc3BlY2lmaWMgdXNlciBvcHRpb25zIG9yIHRvIGRpc3BsYXkgbmV3cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbGwgdGhlIFgtaGVhZGVycyB0aGF0IHNob3VsZCBiZSBzY2FubmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFsbCB0aGUgbGFuZ3VhZ2VzIHRoYXQgYXJlIGF2YWlsYWJsZSB0byB0aGUgYXBwbGljYXRpb24uIFRoZSBLZXkvQ29udGVudCBwYWlyIGxpbmtzIHRoZSBmcm9udC1lbmQgZGlzcGxheSBuYW1lIHRvIHRoZSBhcHByb3ByaWF0ZSBsYW5ndWFnZSBQTSBmaWxlLiBUaGUgIktleSIgdmFsdWUgc2hvdWxkIGJlIHRoZSBiYXNlLW5hbWUgb2YgdGhlIFBNIGZpbGUgKGkuZS4gZGUucG0gaXMgdGhlIGZpbGUsIHRoZW4gZGUgaXMgdGhlICJLZXkiIHZhbHVlKS4gVGhlICJDb250ZW50IiB2YWx1ZSBzaG91bGQgYmUgdGhlIGRpc3BsYXkgbmFtZSBmb3IgdGhlIGZyb250LWVuZC4gU3BlY2lmeSBhbnkgb3duLWRlZmluZWQgbGFuZ3VhZ2UgaGVyZSAoc2VlIHRoZSBkZXZlbG9wZXIgZG9jdW1lbnRhdGlvbiBodHRwOi8vZG9jLm90cnMub3JnLyBmb3IgbW9yZSBpbmZvbWF0aW9uKS4gUGxlYXNlIHJlbWVtYmVyIHRvIHVzZSB0aGUgSFRNTCBlcXVpdmFsZW50cyBmb3Igbm9uLUFTQ0lJIGNoYXJhY3RlcnMgKGkuZS4gZm9yIHRoZSBHZXJtYW4gb2UgPSBvIHVtbGF1dCwgaXQgaXMgbmVjZXNzYXJ5IHRvIHVzZSB0aGUgJm91bWw7IHN5bWJvbCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYWxsIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgUmVmcmVzaFRpbWUgb2JqZWN0IGluIHRoZSBjdXN0b21lciBwcmVmZXJlbmNlcyBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFsbCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIFNob3duVGlja2V0cyBvYmplY3QgaW4gdGhlIGN1c3RvbWVyIHByZWZlcmVuY2VzIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYWxsIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGlzIGl0ZW0gaW4gdGhlIGN1c3RvbWVyIHByZWZlcmVuY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFsbCB0aGUgcG9zc2libGUgc3RhdHMgb3V0cHV0IGZvcm1hdHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gYWx0ZXJuYXRlIFVSTCwgd2hlcmUgdGhlIGxvZ2luIGxpbmsgcmVmZXJzIHRvLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIGFsdGVybmF0ZSBVUkwsIHdoZXJlIHRoZSBsb2dvdXQgbGluayByZWZlcnMgdG8uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gYWx0ZXJuYXRlIGxvZ2luIFVSTCBmb3IgdGhlIGN1c3RvbWVyIHBhbmVsLi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBhbHRlcm5hdGUgbG9nb3V0IFVSTCBmb3IgdGhlIGN1c3RvbWVyIHBhbmVsLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIGV4dGVybmFsIGxpbmsgdG8gdGhlIGRhdGFiYXNlIG9mIHRoZSBjdXN0b21lciAoZS5nLiBcJ2h0dHA6Ly95b3VyaG9zdC9jdXN0b21lci5waHA/Q0lEPSREYXRheyJDdXN0b21lcklEIn1cJyBvciBcJ1wnKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGhvdyB0aGUgRnJvbSBmaWVsZCBmcm9tIHRoZSBlbWFpbHMgKHNlbnQgZnJvbSBhbnN3ZXJzIGFuZCBlbWFpbCB0aWNrZXRzKSBzaG91bGQgbG9vayBsaWtlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIHRpY2tldCBib3VuY2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgY29tcG9zZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIHRpY2tldCBmb3J3YXJkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIHRpY2tldCBtZXJnZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCB0byBjaGFuZ2UgdGhlIGN1c3RvbWVyIG9mIGEgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBjb21wb3NlZCBtZXNzYWdlcyBoYXZlIHRvIGJlIHNwZWxsIGNoZWNrZWQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aW1lIGFjY291bnRpbmcgaXMgbWFuZGF0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGltZSBhY2NvdW50aW5nIG11c3QgYmUgc2V0IHRvIGFsbCB0aWNrZXRzIGluIGJ1bGsgYWN0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSA9aEhlaWdodCBmb3IgdGhlIHJpY2ggdGV4dCBlZGl0b3IgY29tcG9uZW50LiBFbnRlciBudW1iZXIgKHBpeGVscykgb3IgcGVyY2VudCB2YWx1ZSAocmVsYXRpdmUpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBJUCByZWd1bGFyIGV4cHJlc3Npb24gZm9yIGFjY2Vzc2luZyB0aGUgbG9jYWwgcmVwb3NpdG9yeS4gWW91IG5lZWQgdG8gZW5hYmxlIHRoaXMgdG8gaGF2ZSBhY2Nlc3MgdG8geW91ciBsb2NhbCByZXBvc2l0b3J5IGFuZCB0aGUgcGFja2FnZTo6UmVwb3NpdG9yeUxpc3QgaXMgcmVxdWlyZWQgb24gdGhlIHJlbW90ZSBob3N0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgQ1NTIHBhdGguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBiYXNlIHBhdGggb2YgaWNvbnMsIENTUyBhbmQgSmF2YSBTY3JpcHQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBpbWFnZSBwYXRoIG9mIGljb25zIGZvciBuYXZpZ2F0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgamF2YSBzY3JpcHQgcGF0aC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIHJpY2ggdGV4dCBlZGl0b3IgcGF0aC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgYWRkcmVzcyBvZiBhIGRlZGljYXRlZCBETlMgc2VydmVyLCBpZiBuZWNlc3NhcnksIGZvciB0aGUgIkNoZWNrTVhSZWNvcmQiIGxvb2stdXBzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBib2R5IHRleHQgZm9yIG5vdGlmaWNhdGlvbiBtYWlscyBzZW50IHRvIGFnZW50cywgYWJvdXQgbmV3IHBhc3N3b3JkIChhZnRlciB1c2luZyB0aGlzIGxpbmsgdGhlIG5ldyBwYXNzd29yZCB3aWxsIGJlIHNlbnQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBib2R5IHRleHQgZm9yIG5vdGlmaWNhdGlvbiBtYWlscyBzZW50IHRvIGFnZW50cywgd2l0aCB0b2tlbiBhYm91dCBuZXcgcmVxdWVzdGVkIHBhc3N3b3JkIChhZnRlciB1c2luZyB0aGlzIGxpbmsgdGhlIG5ldyBwYXNzd29yZCB3aWxsIGJlIHNlbnQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBib2R5IHRleHQgZm9yIG5vdGlmaWNhdGlvbiBtYWlscyBzZW50IHRvIGN1c3RvbWVycywgYWJvdXQgbmV3IGFjY291bnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGJvZHkgdGV4dCBmb3Igbm90aWZpY2F0aW9uIG1haWxzIHNlbnQgdG8gY3VzdG9tZXJzLCBhYm91dCBuZXcgcGFzc3dvcmQgKGFmdGVyIHVzaW5nIHRoaXMgbGluayB0aGUgbmV3IHBhc3N3b3JkIHdpbGwgYmUgc2VudCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGJvZHkgdGV4dCBmb3Igbm90aWZpY2F0aW9uIG1haWxzIHNlbnQgdG8gY3VzdG9tZXJzLCB3aXRoIHRva2VuIGFib3V0IG5ldyByZXF1ZXN0ZWQgcGFzc3dvcmQgKGFmdGVyIHVzaW5nIHRoaXMgbGluayB0aGUgbmV3IHBhc3N3b3JkIHdpbGwgYmUgc2VudCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGJvZHkgdGV4dCBmb3IgcmVqZWN0ZWQgZW1haWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBib2xkbmVzcyBvZiB0aGUgbGluZSBkcmF3ZWQgYnkgdGhlIGdyYXBoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjb2xvcnMgZm9yIHRoZSBncmFwaHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNvbHVtbiB0byBzdG9yZSB0aGUga2V5cyBmb3IgdGhlIHByZWZlcmVuY2VzIHRhYmxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjb25maWcgcGFyYW1ldGVycyBvZiB0aGlzIGl0ZW0sIHRvIGJlIHNob3duIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjb25maWcgcGFyYW1ldGVycyBvZiB0aGlzIGl0ZW0sIHRvIGJlIHNob3duIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3LiBUYWtlIGNhcmUgdG8gbWFpbnRhaW4gdGhlIGRpY3Rpb25hcmllcyBpbnN0YWxsZWQgaW4gdGhlIHN5c3RlbSBpbiB0aGUgZGF0YSBzZWN0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjb25uZWN0aW9ucyBmb3IgaHR0cC9mdHAsIHZpYSBhIHByb3h5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkYXRlIGlucHV0IGZvcm1hdCB1c2VkIGluIGZvcm1zIChvcHRpb24gb3IgaW5wdXQgZmllbGRzKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBDU1MgdXNlZCBpbiByaWNoIHRleHQgZWRpdG9ycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBib2R5IG9mIGEgbm90ZSBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBmcm9udC1lbmQgKEhUTUwpIHRoZW1lIHRvIGJlIHVzZWQgYnkgdGhlIGFnZW50cyBhbmQgY3VzdG9tZXJzLiBUaGUgZGVmYXVsdCB0aGVtZXMgYXJlIFN0YW5kYXJkIGFuZCBMaXRlLiBJZiB5b3UgbGlrZSwgeW91IGNhbiBhZGQgeW91ciBvd24gdGhlbWUuIFBsZWFzZSByZWZlciB0aGUgYWRtaW5pc3RyYXRvciBtYW51YWwgbG9jYXRlZCBhdCBodHRwOi8vZG9jLm90cnMub3JnLy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBmcm9udC1lbmQgbGFuZ3VhZ2UuIEFsbCB0aGUgcG9zc2libGUgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBhdmFpbGFibGUgbGFuZ3VhZ2UgZmlsZXMgb24gdGhlIHN5c3RlbSAoc2VlIHRoZSBuZXh0IHNldHRpbmcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGhpc3RvcnkgdHlwZSBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIFgtYXhpcyBhdHRyaWJ1dGVzIGZvciB0aGUgdGltZSBzY2FsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBzZWFyY2ggcmVzdWx0cyBzaG93biBvbiB0aGUgb3ZlcnZpZXcgcGFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIGZvciBhIHRpY2tldCBhZnRlciBjdXN0b21lciBmb2xsb3cgdXAgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGJlaW5nIGJvdW5jZWQsIGluIHRoZSB0aWNrZXQgYm91bmNlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYmVpbmcgZm9yd2FyZGVkLCBpbiB0aGUgdGlja2V0IGZvcndhcmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBpZiBpdCBpcyBjb21wb3NlZCAvIGFuc3dlcmVkIGluIHRoZSB0aWNrZXQgY29tcG9zZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBub3RlIGJvZHkgdGV4dCBmb3IgcGhvbmUgdGlja2V0cyBpbiB0aGUgdGlja2V0IHBob25lIG91dGJvdW5kIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHByaW9yaXR5IG9mIGZvbGxvdyB1cCBjdXN0b21lciB0aWNrZXRzIGluIHRoZSB0aWNrZXQgem9vbSBzY3JlZW4gaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBwcmlvcml0eSBvZiBuZXcgY3VzdG9tZXIgdGlja2V0cyBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHByaW9yaXR5IG9mIG5ldyB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHF1ZXVlIGZvciBuZXcgY3VzdG9tZXIgdGlja2V0cyBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBhdCB0aGUgZHJvcCBkb3duIG1lbnUgZm9yIGR5bmFtaWMgb2JqZWN0cyAoRm9ybTogQ29tbW9uIFNwZWNpZmljYXRpb24pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBhdCB0aGUgZHJvcCBkb3duIG1lbnUgZm9yIHBlcm1pc3Npb25zIChGb3JtOiBDb21tb24gU3BlY2lmaWNhdGlvbikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIGF0IHRoZSBkcm9wIGRvd24gbWVudSBmb3Igc3RhdHMgZm9ybWF0IChGb3JtOiBDb21tb24gU3BlY2lmaWNhdGlvbikuIFBsZWFzZSBpbnNlcnQgdGhlIGZvcm1hdCBrZXkgKHNlZSBTdGF0czo6Rm9ybWF0KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxIGZvciBhcnRpY2xlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMCBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDExIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTIgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMyBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE0IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTUgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxNiBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDIgZm9yIGFydGljbGVzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMiBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDMgZm9yIGFydGljbGVzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMyBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA1IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNiBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDcgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA4IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgOSBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxIGZvciBhcnRpY2xlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDEwIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDExIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDEyIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDEzIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDE0IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDE1IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDE2IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDIgZm9yIGFydGljbGVzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDIgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMyBmb3IgYXJ0aWNsZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMyBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDUgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNiBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA3IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDggZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgOSBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbmRlciB0eXBlIGZvciBwaG9uZSB0aWNrZXRzIGluIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VuZGVyIHR5cGUgZm9yIHRpY2tldHMgaW4gdGhlIHRpY2tldCB6b29tIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNob3duIHRpY2tldCBzZWFyY2ggYXR0cmlidXRlIGZvciB0aWNrZXQgc2VhcmNoIHNjcmVlbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGZvciBhbGwgcXVldWVzIGRpc3BsYXllZCBpbiB0aGUgcXVldWUgdmlldywgYWZ0ZXIgc29ydCBieSBwcmlvcml0eSBpcyBkb25lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgZm9yIGFsbCBxdWV1ZXMgaW4gdGhlIHF1ZXVlIHZpZXcsIGFmdGVyIHByaW9yaXR5IHNvcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3BlbGwgY2hlY2tlciBkaWN0aW9uYXJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN0YXRlIG9mIG5ldyBjdXN0b21lciB0aWNrZXRzIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3RhdGUgb2YgbmV3IHRpY2tldHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3ViamVjdCBmb3IgcGhvbmUgdGlja2V0cyBpbiB0aGUgdGlja2V0IHBob25lIG91dGJvdW5kIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1YmplY3Qgb2YgYSBub3RlIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBhdHRyaWJ1dGUgZm9yIHRpY2tldCBzb3J0aW5nIGluIGEgdGlja2V0IHNlYXJjaCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBhdHRyaWJ1dGUgZm9yIHRpY2tldCBzb3J0aW5nIGluIHRoZSBlc2NhbGF0aW9uIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgYXR0cmlidXRlIGZvciB0aWNrZXQgc29ydGluZyBpbiB0aGUgbG9ja2VkIHRpY2tldCB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IGF0dHJpYnV0ZSBmb3IgdGlja2V0IHNvcnRpbmcgaW4gdGhlIHJlc3BvbnNpYmxlIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgYXR0cmlidXRlIGZvciB0aWNrZXQgc29ydGluZyBpbiB0aGUgc3RhdHVzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgYXR0cmlidXRlIGZvciB0aWNrZXQgc29ydGluZyBpbiB0aGUgd2F0Y2ggdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBhdHRyaWJ1dGUgZm9yIHRpY2tldCBzb3J0aW5nIG9mIHRoZSB0aWNrZXQgc2VhcmNoIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBib3VuY2VkIG5vdGlmaWNhdGlvbiBmb3IgY3VzdG9tZXIvc2VuZGVyIGluIHRoZSB0aWNrZXQgYm91bmNlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBuZXh0IHN0YXRlIGFmdGVyIGFkZGluZyBhIHBob25lIG5vdGUgaW4gdGhlIHRpY2tldCBwaG9uZSBvdXRib3VuZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgb3JkZXIgKGFmdGVyIHByaW9yaXR5IHNvcnQpIGluIHRoZSBlc2NhbGF0aW9uIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IG9yZGVyIChhZnRlciBwcmlvcml0eSBzb3J0KSBpbiB0aGUgc3RhdHVzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IG9yZGVyIGluIHRoZSByZXNwb25zaWJsZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBvcmRlciBpbiB0aGUgdGlja2V0IGxvY2tlZCB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBvcmRlciBpbiB0aGUgdGlja2V0IHNlYXJjaCByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IG9yZGVyIGluIHRoZSB3YXRjaCB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSB0aWNrZXQgYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgcHJpb3JpdHkgaW4gdGhlIHRpY2tldCBmcmVlIHRleHQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgcHJpb3JpdHkgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHR5cGUgZm9yIGFydGljbGUgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0eXBlIG9mIGZvcndhcmRlZCBtZXNzYWdlIGluIHRoZSB0aWNrZXQgZm9yd2FyZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0eXBlIG9mIHRoZSBub3RlIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdHlwZSBvZiB0aGUgbm90ZSBpbiB0aGUgdGlja2V0IGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdHlwZSBvZiB0aGUgbm90ZSBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0eXBlIG9mIHRoZSBub3RlIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0eXBlIG9mIHRoZSBub3RlIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHR5cGUgb2YgdGhlIG5vdGUgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0eXBlIG9mIHRoZSBub3RlIGluIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdHlwZSBvZiB0aGUgbm90ZSBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0eXBlIG9mIHRoZSBub3RlIGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdHlwZSBvZiB0aGUgbm90ZSBpbiB0aGUgdGlja2V0IHpvb20gc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdXNlZCBGcm9udGVuZC1Nb2R1bGUgaWYgbm8gQWN0aW9uIHBhcmFtZXRlciBnaXZlbiBpbiB0aGUgdXJsIG9uIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdXNlZCBGcm9udGVuZC1Nb2R1bGUgaWYgbm8gQWN0aW9uIHBhcmFtZXRlciBnaXZlbiBpbiB0aGUgdXJsIG9uIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgYWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmlld2FibGUgc2VuZGVyIHR5cGVzIG9mIGEgdGlja2V0IChkZWZhdWx0OiBjdXN0b21lcikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRpZmZlcmVuY2UgZnJvbSBub3cgKGluIHNlY29uZHMpIG9mIHRoZSBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDFcJ3MgZGVmYXVsdCB2YWx1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGlmZmVyZW5jZSBmcm9tIG5vdyAoaW4gc2Vjb25kcykgb2YgdGhlIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgMlwncyBkZWZhdWx0IHZhbHVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkaWZmZXJlbmNlIGZyb20gbm93IChpbiBzZWNvbmRzKSBvZiB0aGUgZnJlZSB0aW1lIGZpZWxkIG51bWJlciAzXCdzIGRlZmF1bHQgdmFsdWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRpZmZlcmVuY2UgZnJvbSBub3cgKGluIHNlY29uZHMpIG9mIHRoZSBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDRcJ3MgZGVmYXVsdCB2YWx1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGlmZmVyZW5jZSBmcm9tIG5vdyAoaW4gc2Vjb25kcykgb2YgdGhlIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgNVwncyBkZWZhdWx0IHZhbHVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkaWZmZXJlbmNlIGZyb20gbm93IChpbiBzZWNvbmRzKSBvZiB0aGUgZnJlZSB0aW1lIGZpZWxkIG51bWJlciA2XCdzIGRlZmF1bHQgdmFsdWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpbHRlciB0aGF0IHByb2Nlc3NlcyB0aGUgdGV4dCBpbiB0aGUgYXJ0aWNsZXMsIGluIG9yZGVyIHRvIGhpZ2hsaWdodCBVUkxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmb3JtYXQgb2YgcmVzcG9uc2VzIGluIHRoZSB0aWNrZXQgY29tcG9zZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoJFFEYXRheyJPcmlnRnJvbSJ9IGlzIEZyb20gMToxLCAkUURhdGF7Ik9yaWdGcm9tTmFtZSJ9IGlzIG9ubHkgcmVhbG5hbWUgb2YgRnJvbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxIGZvciBhcnRpY2xlcyB0byBhZGQgYSBuZXcgYXJ0aWNsZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTAgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEyIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTMgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxNCBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE1IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTYgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyIGZvciBhcnRpY2xlcyB0byBhZGQgYSBuZXcgYXJ0aWNsZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMyBmb3IgYXJ0aWNsZXMgdG8gYWRkIGEgbmV3IGFydGljbGUgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMyBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA1IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNiBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDcgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA4IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgOSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxIGZvciBhcnRpY2xlcyB0byBhZGQgYSBuZXcgYXJ0aWNsZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMCBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMiBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMyBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNCBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNiBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyIGZvciBhcnRpY2xlcyB0byBhZGQgYSBuZXcgYXJ0aWNsZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMiBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzIGZvciBhcnRpY2xlcyB0byBhZGQgYSBuZXcgYXJ0aWNsZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMyBmb3IgdGlja2V0IHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDQgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA2IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDcgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgOCBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA5IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRpbWUga2V5IGZpZWxkIG51bWJlciAxIGZvciB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRpbWUga2V5IGZpZWxkIG51bWJlciAyIGZvciB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRpbWUga2V5IGZpZWxkIG51bWJlciAzIGZvciB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRpbWUga2V5IGZpZWxkIG51bWJlciA0IGZvciB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRpbWUga2V5IGZpZWxkIG51bWJlciA1IGZvciB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRpbWUga2V5IGZpZWxkIG51bWJlciA2IGZvciB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWUgb2YgdGhlIHN5c3RlbS4gVGhpcyBzZXR0aW5nIGlzIHVzZWQgYXMgYSB2YXJpYWJsZSwgT1RSU19DT05GSUdfRlFETiB3aGljaCBpcyBmb3VuZCBpbiBhbGwgZm9ybXMgb2YgbWVzc2FnaW5nIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCB0byBidWlsZCBsaW5rcyB0byB0aGUgdGlja2V0cyB3aXRoaW4geW91ciBzeXN0ZW0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGdyb3VwcyBldmVyeSBjdXN0b21lciB1c2VyIHdpbGwgYmUgaW4gKGlmIEN1c3RvbWVyR3JvdXBTdXBwb3J0IGlzIGVuYWJsZWQgYW5kIHlvdSBkb25cJ3Qgd2FudCB0byBtYW5hZ2UgZXZlcnkgdXNlciBmb3IgdGhlc2UgZ3JvdXBzKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGVpZ2h0IG9mIHRoZSBsZWdlbmQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIGVtYWlsIHRpY2tldCBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHBob25lIHRpY2tldCBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBmcmVlIHRleHQgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSBjb21tZW50IGZvciB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IGNvbW1lbnQgZm9yIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IGNvbW1lbnQgZm9yIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBwaG9uZSBvdXRib3VuZCBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBwcmlvcml0eSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCB6b29tIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSBlbWFpbCB0aWNrZXQgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSBwaG9uZSB0aWNrZXQgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgdHlwZSBmb3IgdGhlIHRpY2tldCBub3RlIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSB0eXBlIGZvciB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSB0eXBlIGZvciB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgem9vbSBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaG91cnMgYW5kIHdlZWsgZGF5cyBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDEsIHRvIGNvdW50IHRoZSB3b3JraW5nIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhvdXJzIGFuZCB3ZWVrIGRheXMgb2YgdGhlIGNhbGVuZGFyIG51bWJlciAyLCB0byBjb3VudCB0aGUgd29ya2luZyB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBob3VycyBhbmQgd2VlayBkYXlzIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgMywgdG8gY291bnQgdGhlIHdvcmtpbmcgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaG91cnMgYW5kIHdlZWsgZGF5cyBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDQsIHRvIGNvdW50IHRoZSB3b3JraW5nIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhvdXJzIGFuZCB3ZWVrIGRheXMgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA1LCB0byBjb3VudCB0aGUgd29ya2luZyB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBob3VycyBhbmQgd2VlayBkYXlzIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgNiwgdG8gY291bnQgdGhlIHdvcmtpbmcgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaG91cnMgYW5kIHdlZWsgZGF5cyBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDcsIHRvIGNvdW50IHRoZSB3b3JraW5nIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhvdXJzIGFuZCB3ZWVrIGRheXMgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA4LCB0byBjb3VudCB0aGUgd29ya2luZyB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBob3VycyBhbmQgd2VlayBkYXlzIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgOSwgdG8gY291bnQgdGhlIHdvcmtpbmcgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaG91cnMgYW5kIHdlZWsgZGF5cyB0byBjb3VudCB0aGUgd29ya2luZyB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBodHRwIGxpbmsgZm9yIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDEgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTAgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTEgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTIgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTMgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTQgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTUgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTYgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMiBmb3IgdGlja2V0cyAoaXQgd2lsbCBiZSB1c2VkIGluIGV2ZXJ5IHRpY2tldCB2aWV3KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaHR0cCBsaW5rIGZvciB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzIGZvciB0aWNrZXRzIChpdCB3aWxsIGJlIHVzZWQgaW4gZXZlcnkgdGlja2V0IHZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBodHRwIGxpbmsgZm9yIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDQgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNSBmb3IgdGlja2V0cyAoaXQgd2lsbCBiZSB1c2VkIGluIGV2ZXJ5IHRpY2tldCB2aWV3KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaHR0cCBsaW5rIGZvciB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA2IGZvciB0aWNrZXRzIChpdCB3aWxsIGJlIHVzZWQgaW4gZXZlcnkgdGlja2V0IHZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBodHRwIGxpbmsgZm9yIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDcgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgOCBmb3IgdGlja2V0cyAoaXQgd2lsbCBiZSB1c2VkIGluIGV2ZXJ5IHRpY2tldCB2aWV3KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaHR0cCBsaW5rIGZvciB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA5IGZvciB0aWNrZXRzIChpdCB3aWxsIGJlIHVzZWQgaW4gZXZlcnkgdGlja2V0IHZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBrZXkgdG8gYmUgY2hlY2tlZCB3aXRoIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJbmZvIG1vZHVsZS4gSWYgdGhpcyB1c2VyIHByZWZlcmVuY2VzIGtleSBpcyB0cnVlLCB0aGUgbWVzc2FnZSBpcyBhY2NlcHRlZCBieSB0aGUgc3lzdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBrZXkgdG8gY2hlY2sgd2l0aCBDdXN0b21lckFjY2VwdC4gSWYgdGhpcyB1c2VyIHByZWZlcmVuY2VzIGtleSBpcyB0cnVlLCB0aGVuIHRoZSBtZXNzYWdlIGlzIGFjY2VwdGVkIGJ5IHRoZSBzeXN0ZW0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ05vcm1hbFwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lOyBvdGhlcndpc2UsIHRoZSByZXN1bHQgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdQYXJlbnRDaGlsZFwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lOyBvdGhlcndpc2UsIHRoZSByZXN1bHQgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBsaW5rIHR5cGUgZ3JvdXBzLiBUaGUgbGluayB0eXBlcyBvZiB0aGUgc2FtZSBncm91cCBjYW5jZWwgb25lIGFub3RoZXIuIEV4YW1wbGU6IElmIHRpY2tldCBBIGlzIGxpbmtlZCBwZXIgYSBcJ05vcm1hbFwnIGxpbmsgd2l0aCB0aWNrZXQgQiwgdGhlbiB0aGVzZSB0aWNrZXRzIGNvdWxkIG5vdCBiZSBhZGRpdGlvbmFsbHkgbGlua2VkIHdpdGggbGluayBvZiBhIFwnUGFyZW50Q2hpbGRcJyByZWxhdGlvbnNoaXAuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb25zIGNhbiBiZSB1c2VkIGFzIHJlcG9zaXRvcnksIGZvciBleGFtcGxlOiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdHJzL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxvY2F0aW9uIHRvIGdldCBvbmxpbmUgcmVwb3NpdG9yeSBsaXN0IGZvciBhZGRpdGlvbmFsIHBhY2thZ2VzLiBUaGUgZmlyc3QgYXZhaWxhYmxlIHJlc3VsdCB3aWxsIGJlIHVzZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxvZyBtb2R1bGUgZm9yIHRoZSBzeXN0ZW0uICJGaWxlIiB3cml0ZXMgYWxsIG1lc3NhZ2VzIGluIGEgZ2l2ZW4gbG9nZmlsZSwgIlN5c0xvZyIgdXNlcyB0aGUgc3lzbG9nIGRhZW1vbiBvZiB0aGUgc3lzdGVtLCBlLmcuIHN5c2xvZ2QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG1heGltYWwgc2l6ZSAoaW4gYnl0ZXMpIGZvciBmaWxlIHVwbG9hZHMgdmlhIHRoZSBicm93c2VyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtYXhpbWFsIHZhbGlkIHRpbWUgKGluIHNlY29uZHMpIGZvciBhIHNlc3Npb24gaWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIHBlciBQREYgZmlsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbWF4aW11bSBzaXplIChpbiBNQikgb2YgdGhlIGxvZyBmaWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtb2R1bGUgdGhhdCBzaG93cyBhbGwgdGhlIGN1cnJlbnRseSBsb2dlZCBpbiBjdXN0b21lcnMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbW9kdWxlIHRoYXQgc2hvd3MgYWxsIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIGFnZW50cyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtb2R1bGUgdGhhdCBzaG93cyB0aGUgY3VycmVudGx5IGxvZ2VkIGluIGFnZW50cyBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtb2R1bGUgdGhhdCBzaG93cyB0aGUgY3VycmVudGx5IGxvZ2VkIGluIGN1c3RvbWVycyBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtb2R1bGUgdG8gYXV0aGVudGljYXRlIGN1c3RvbWVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbW9kdWxlIHRvIGRpc3BsYXkgYSBub3RpZmljYXRpb24gaW4gdGhlIGFnZW50IGludGVyZmFjZSwgaWYgdGhlIHN5c3RlbSBpcyB1c2VkIGJ5IHRoZSBhZG1pbiB1c2VyIChub3JtYWxseSB5b3Ugc2hvdWxkblwndCB3b3JrIGFzIGFkbWluKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgcmVmcmVzaCBoZWFkZXJzIG9mIGh0bWwgc2l0ZXMsIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG1vZHVsZSB0byBnZW5lcmF0ZSBodG1sIHJlZnJlc2ggaGVhZGVycyBvZiBodG1sIHNpdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtb2R1bGUgdG8gc2VuZCBlbWFpbHMuICJTZW5kbWFpbCIgZGlyZWN0bHkgdXNlcyB0aGUgc2VuZG1haWwgYmluYXJ5IG9mIHlvdXIgb3BlcmF0aW5nIHN5c3RlbS4gQW55IG9mIHRoZSAiU01UUCIgbWVjaGFuaXNtcyB1c2UgYSBzcGVjaWZpZWQgKGV4dGVybmFsKSBtYWlsc2VydmVyLiAiRG9Ob3RTZW5kRW1haWwiIGRvZXNuXCd0IHNlbmQgZW1haWxzIGFuZCBpdCBpcyB1c2VmdWwgZm9yIHRlc3Qgc3lzdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbW9kdWxlIHVzZWQgdG8gc3RvcmUgdGhlIHNlc3Npb24gZGF0YS4gV2l0aCAiREIiIHRoZSBmcm9udGVuZCBzZXJ2ZXIgY2FuIGJlIHNwbGl0dGVkIGZyb20gdGhlIGRiIHNlcnZlci4gIkZTIiBpcyBmYXN0ZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uLCBzaG93biBpbiB0aGUgd2ViIGludGVyZmFjZSwgdGFicyBhbmQgdGl0bGUgYmFyIG9mIHRoZSB3ZWIgYnJvd3Nlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDEuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciAyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgMy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA1Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgNi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgOS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgY29sdW1uIHRvIHN0b3JlIHRoZSBkYXRhIGluIHRoZSBwcmVmZXJlbmNlcyB0YWJsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgY29sdW1uIHRvIHN0b3JlIHRoZSB1c2VyIGlkZW50aWZpZXIgaW4gdGhlIHByZWZlcmVuY2VzIHRhYmxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBrZXkgZm9yIGN1c3RvbWVyIHNlc3Npb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBzZXNzaW9uIGtleS4gRS5nLiBTZXNzaW9uLCBTZXNzaW9uSUQgb3IgT1RSUy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgdGFibGUsIHdoZXJlIHRoZSBjdXN0b21lciBwcmVmZXJlbmNlcyBhcmUgc3RvcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHBvc3NpYmxlIHN0YXRlcyBhZnRlciBjb21wb3NpbmcgLyBhbnN3ZXJpbmcgYSB0aWNrZXQgaW4gdGhlIHRpY2tldCBjb21wb3NlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHBvc3NpYmxlIHN0YXRlcyBhZnRlciBmb3J3YXJkaW5nIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgZm9yd2FyZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBwb3NzaWJsZSBzdGF0ZXMgZm9yIGN1c3RvbWVyIHRpY2tldHMgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGJlaW5nIGJvdW5jZWQsIGluIHRoZSB0aWNrZXQgYm91bmNlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGJlaW5nIG1vdmVkIHRvIGFub3RoZXIgcXVldWUsIGluIHRoZSBtb3ZlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGN1c3RvbWVyIHByZWZlcmVuY2VzIHRhYmxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGluZGljYXRlcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTCIgaW5kaWNhdGVzIHRoZSBjYWNoZSBleHBpcmF0aW9uIHBlcmlvZCBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGluZGljYXRlcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBkZWZpbmVzIHRoZSBjYWNoZSBleHBpcmF0aW9uIHBlcmlvZCBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQuICJMaW1pdCIgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZGlzcGxheWVkIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGluZGljYXRlcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTCIgaW5kaWNhdGVzIHRoZSBjYWNoZSBleHBpcmF0aW9uIHBlcmlvZCBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQuICJMaW1pdCIgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZGlzcGxheWVkIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGluZGljYXRlcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBkZWZpbmVzIHRoZSBjYWNoZSBleHBpcmF0aW9uIHBlcmlvZCBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXNzd29yZCB0byBhY2Nlc3MgdGhlIFNPQVAgaGFuZGxlIChiaW4vY2dpLWJpbi9ycGMucGwpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXRoIGFuZCBUVEYtRmlsZSB0byBoYW5kbGUgYm9sZCBpdGFsaWMgbW9ub3NwYWNlZCBmb250IGluIFBERiBkb2N1bWVudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhdGggYW5kIFRURi1GaWxlIHRvIGhhbmRsZSBib2xkIGl0YWxpYyBwcm9wb3J0aW9uYWwgZm9udCBpbiBQREYgZG9jdW1lbnRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXRoIGFuZCBUVEYtRmlsZSB0byBoYW5kbGUgYm9sZCBtb25vc3BhY2VkIGZvbnQgaW4gUERGIGRvY3VtZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGF0aCBhbmQgVFRGLUZpbGUgdG8gaGFuZGxlIGJvbGQgcHJvcG9ydGlvbmFsIGZvbnQgaW4gUERGIGRvY3VtZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGF0aCBhbmQgVFRGLUZpbGUgdG8gaGFuZGxlIGl0YWxpYyBtb25vc3BhY2VkIGZvbnQgaW4gUERGIGRvY3VtZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGF0aCBhbmQgVFRGLUZpbGUgdG8gaGFuZGxlIGl0YWxpYyBwcm9wb3J0aW9uYWwgZm9udCBpbiBQREYgZG9jdW1lbnRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXRoIGFuZCBUVEYtRmlsZSB0byBoYW5kbGUgbW9ub3NwYWNlZCBmb250IGluIFBERiBkb2N1bWVudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhdGggYW5kIFRURi1GaWxlIHRvIGhhbmRsZSBwcm9wb3J0aW9uYWwgZm9udCBpbiBQREYgZG9jdW1lbnRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXRoIG9mIHRoZSBzaG93biBpbmZvIGZpbGUsIHRoYXQgaXMgbG9jYXRlZCB1bmRlciBLZXJuZWwvT3V0cHV0L0hUTUwvU3RhbmRhcmQvQ3VzdG9tZXJBY2NlcHQuZHRsLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXRoIHRvIFBHUCBiaW5hcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhdGggdG8gb3BlbiBzc2wgYmluYXJ5LiBJdCBtYXkgbmVlZCBhIEhPTUUgZW52ICgkRU5We0hPTUV9ID0gXCcvdmFyL2xpYi93d3dydW5cJzspLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGxlZ2VuZC4gVGhpcyBzaG91bGQgYmUgYSB0d28gbGV0dGVyIGtleSBvZiB0aGUgZm9ybTogXCdCW0xDUl18UltUQ0JdXCcuIFRoZSBmaXJzdCBsZXR0ZXIgaW5kaWNhdGVzIHRoZSBwbGFjZW1lbnQgKEJvdHRvbSBvciBSaWdodCksIGFuZCB0aGUgc2Vjb25kIGxldHRlciB0aGUgYWxpZ25tZW50IChMZWZ0LCBSaWdodCwgQ2VudGVyLCBUb3AsIG9yIEJvdHRvbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBvc3RtYXN0ZXIgZGVmYXVsdCBxdWV1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVjZWlwZW50IHRhcmdldCBvZiB0aGUgcGhvbmUgdGlja2V0IGFuZCB0aGUgc2VuZGVyIG9mIHRoZSBlbWFpbCB0aWNrZXQgKCJRdWV1ZSIgc2hvd3MgYWxsIHF1ZXVlcywgIlN5c3RlbUFkZHJlc3MiIGRpc3BsYXlzIGFsbCBzeXN0ZW0gYWRkcmVzc2VzKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSByZWNlaXBlbnQgdGFyZ2V0IG9mIHRoZSB0aWNrZXRzICgiUXVldWUiIHNob3dzIGFsbCBxdWV1ZXMsICJTeXN0ZW1BZGRyZXNzIiBkaXNwbGF5cyBhbGwgc3lzdGVtIGFkZHJlc3NlcykgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgc3RhdHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBhZ2VudHMgcmVhbCBuYW1lIGFuZCB0aGUgZ2l2ZW4gcXVldWUgZW1haWwgYWRkcmVzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3BhY2luZyBvZiB0aGUgbGVnZW5kcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3RhbmRhcmQgcGVybWlzc2lvbnMgYXZhaWxhYmxlIGZvciBjdXN0b21lcnMgd2l0aGluIHRoZSBhcHBsaWNhdGlvbi4gSWYgbW9yZSBwZXJtaXNzaW9ucyBhcmUgbmVlZGVkLCB5b3UgY2FuIGVudGVyIHRoZW0gaGVyZS4gUGVybWlzc2lvbnMgbXVzdCBiZSBoYXJkIGNvZGVkIHRvIGJlIGVmZmVjdGl2ZS4gUGxlYXNlIGVuc3VyZSwgd2hlbiBhZGRpbmcgYW55IG9mIHRoZSBhZm9yZSBtZW50aW9uZWQgcGVybWlzc2lvbnMsIHRoYXQgdGhlICJydyIgcGVybWlzc2lvbiByZW1haW5zIHRoZSBsYXN0IGVudHJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzdGFuZGFyZCBzaXplIG9mIFBERiBwYWdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3RhdGUgb2YgYSB0aWNrZXQgaWYgaXQgZ2V0cyBhIGZvbGxvdy11cCBhbmQgdGhlIHRpY2tldCB3YXMgYWxyZWFkeSBjbG9zZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHN0YXRlIG9mIGEgdGlja2V0IGlmIGl0IGdldHMgYSBmb2xsb3ctdXAuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHN0YXRlIHR5cGUgb2YgdGhlIHJlbWluZGVyIGZvciBwZW5kaW5nIHRpY2tldHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHN1YmplY3QgZm9yIG5vdGlmaWNhdGlvbiBtYWlscyBzZW50IHRvIGFnZW50cywgYWJvdXQgbmV3IHBhc3N3b3JkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzdWJqZWN0IGZvciBub3RpZmljYXRpb24gbWFpbHMgc2VudCB0byBhZ2VudHMsIHdpdGggdG9rZW4gYWJvdXQgbmV3IHJlcXVlc3RlZCBwYXNzd29yZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3ViamVjdCBmb3Igbm90aWZpY2F0aW9uIG1haWxzIHNlbnQgdG8gY3VzdG9tZXJzLCBhYm91dCBuZXcgYWNjb3VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3ViamVjdCBmb3Igbm90aWZpY2F0aW9uIG1haWxzIHNlbnQgdG8gY3VzdG9tZXJzLCBhYm91dCBuZXcgcGFzc3dvcmQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHN1YmplY3QgZm9yIG5vdGlmaWNhdGlvbiBtYWlscyBzZW50IHRvIGN1c3RvbWVycywgd2l0aCB0b2tlbiBhYm91dCBuZXcgcmVxdWVzdGVkIHBhc3N3b3JkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzdWJqZWN0IGZvciByZWplY3RlZCBlbWFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yXCdzIGVtYWlsIGFkZHJlc3MuIEl0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBlcnJvciBzY3JlZW5zIG9mIHRoZSBhcHBsaWNhdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3lzdGVtIGlkZW50aWZpZXIuIEV2ZXJ5IHRpY2tldCBudW1iZXIgYW5kIGh0dHAgc2Vzc2lvbiBzdHJpbmcgY29udGFpbiB0aGlzIElELiBUaGlzIGVuc3VyZXMgdGhhdCBvbmx5IHRpY2tldHMgd2hpY2ggYmVsb25nIHRvIHlvdXIgc3lzdGVtIHdpbGwgYmUgcHJvY2Vzc2VkIGFzIGZvbGxvdy11cHMgKHVzZWZ1bCB3aGVuIGNvbW11bmljYXRpbmcgYmV0d2VlbiB0d28gaW5zdGFuY2VzIG9mIE9UUlMpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0YXJnZXQgYXR0cmlidXRlIGluIHRoZSBsaW5rIHRvIGV4dGVybmFsIGN1c3RvbWVyIGRhdGFiYXNlLiBFLmcuIFwndGFyZ2V0PSJjZGIiXCcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHRpbWUgem9uZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDEsIHdoaWNoIGNhbiBiZSBhc3NpZ25lZCBsYXRlciB0byBhIHNwZWNpZmljIHF1ZXVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0aW1lIHpvbmUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciAyLCB3aGljaCBjYW4gYmUgYXNzaWduZWQgbGF0ZXIgdG8gYSBzcGVjaWZpYyBxdWV1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdGltZSB6b25lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgMywgd2hpY2ggY2FuIGJlIGFzc2lnbmVkIGxhdGVyIHRvIGEgc3BlY2lmaWMgcXVldWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHRpbWUgem9uZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDQsIHdoaWNoIGNhbiBiZSBhc3NpZ25lZCBsYXRlciB0byBhIHNwZWNpZmljIHF1ZXVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0aW1lIHpvbmUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA1LCB3aGljaCBjYW4gYmUgYXNzaWduZWQgbGF0ZXIgdG8gYSBzcGVjaWZpYyBxdWV1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdGltZSB6b25lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgNiwgd2hpY2ggY2FuIGJlIGFzc2lnbmVkIGxhdGVyIHRvIGEgc3BlY2lmaWMgcXVldWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHRpbWUgem9uZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDcsIHdoaWNoIGNhbiBiZSBhc3NpZ25lZCBsYXRlciB0byBhIHNwZWNpZmljIHF1ZXVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0aW1lIHpvbmUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA4LCB3aGljaCBjYW4gYmUgYXNzaWduZWQgbGF0ZXIgdG8gYSBzcGVjaWZpYyBxdWV1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdGltZSB6b25lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgOSwgd2hpY2ggY2FuIGJlIGFzc2lnbmVkIGxhdGVyIHRvIGEgc3BlY2lmaWMgcXVldWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHR5cGUgb2YgcHJvdG9jb2wsIHVzZWQgYnkgdGhlciB3ZWIgc2VydmVyLCB0byBzZXJ2ZSB0aGUgYXBwbGljYXRpb24uIElmIGh0dHBzIHByb3RvY29sIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHBsYWluIGh0dHAsIGl0IG11c3QgYmUgc3BlY2lmaWVkIGl0IGhlcmUuIFNpbmNlIHRoaXMgaGFzIG5vIGFmZmVjdCBvbiB0aGUgd2ViIHNlcnZlclwncyBzZXR0aW5ncyBvciBiZWhhdmlvciwgaXQgd2lsbCBub3QgY2hhbmdlIHRoZSBtZXRob2Qgb2YgYWNjZXNzIHRvIHRoZSBhcHBsaWNhdGlvbiBhbmQsIGlmIGl0IGlzIHdyb25nLCBpdCB3aWxsIG5vdCBwcmV2ZW50IHlvdSBmcm9tIGxvZ2dpbmcgaW50byB0aGUgYXBwbGljYXRpb24uIFRoaXMgc2V0dGluZyBpcyB1c2VkIGFzIGEgdmFyaWFibGUsIE9UUlNfQ09ORklHX0h0dHBUeXBlIHdoaWNoIGlzIGZvdW5kIGluIGFsbCBmb3JtcyBvZiBtZXNzYWdpbmcgdXNlZCBieSB0aGUgYXBwbGljYXRpb24sIHRvIGJ1aWxkIGxpbmtzIHRvIHRoZSB0aWNrZXRzIHdpdGhpbiB5b3VyIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdXNlZCBjaGFyYWN0ZXIgZm9yIGVtYWlsIHF1b3RlcyBpbiB0aGUgdGlja2V0IGNvbXBvc2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHVzZXIgaWRlbnRpZmllciBmb3IgdGhlIGN1c3RvbWVyIHBhbmVsLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB1c2VybmFtZSB0byBhY2Nlc3MgdGhlIFNPQVAgaGFuZGxlIChiaW4vY2dpLWJpbi9ycGMucGwpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB2YWxpZCBzdGF0ZSB0eXBlcyBmb3IgYSB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHZhbGlkIHN0YXRlcyBmb3IgdW5sb2NrZWQgdGlja2V0cy4gVG8gdW5sb2NrIHRpY2tldHMgdGhlIHNjcmlwdCAiYmluL290cnMuVW5sb2NrVGlja2V0cy5wbCIgY2FuIGJlIHVzZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHZpZXdhYmxlIGxvY2tzIG9mIGEgdGlja2V0LiBEZWZhdWx0OiB1bmxvY2ssIHRtcF9sb2NrLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3aWR0aCBmb3IgdGhlIHJpY2ggdGV4dCBlZGl0b3IgY29tcG9uZW50LiBFbnRlciBudW1iZXIgKHBpeGVscykgb3IgcGVyY2VudCB2YWx1ZSAocmVsYXRpdmUpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3aWR0aCBvZiB0aGUgbGVnZW5kLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB5ZWFycyAoaW4gZnV0dXJlIGFuZCBpbiBwYXN0KSB3aGljaCBjYW4gZ2V0IHNlbGVjdGVkIGluIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgMS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgeWVhcnMgKGluIGZ1dHVyZSBhbmQgaW4gcGFzdCkgd2hpY2ggY2FuIGdldCBzZWxlY3RlZCBpbiBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHllYXJzIChpbiBmdXR1cmUgYW5kIGluIHBhc3QpIHdoaWNoIGNhbiBnZXQgc2VsZWN0ZWQgaW4gZnJlZSB0aW1lIGZpZWxkIG51bWJlciAzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB5ZWFycyAoaW4gZnV0dXJlIGFuZCBpbiBwYXN0KSB3aGljaCBjYW4gZ2V0IHNlbGVjdGVkIGluIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgNC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgeWVhcnMgKGluIGZ1dHVyZSBhbmQgaW4gcGFzdCkgd2hpY2ggY2FuIGdldCBzZWxlY3RlZCBpbiBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHllYXJzIChpbiBmdXR1cmUgYW5kIGluIHBhc3QpIHdoaWNoIGNhbiBnZXQgc2VsZWN0ZWQgaW4gZnJlZSB0aW1lIGZpZWxkIG51bWJlciA2Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXRoZXIgdGhlIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgMSBpcyBvcHRpb25hbCBvciBub3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciB0aGUgZnJlZSB0aW1lIGZpZWxkIG51bWJlciAyIGlzIG9wdGlvbmFsIG9yIG5vdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGV0aGVyIHRoZSBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDMgaXMgb3B0aW9uYWwgb3Igbm90Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXRoZXIgdGhlIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgNCBpcyBvcHRpb25hbCBvciBub3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciB0aGUgZnJlZSB0aW1lIGZpZWxkIG51bWJlciA1IGlzIG9wdGlvbmFsIG9yIG5vdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGV0aGVyIHRoZSBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDYgaXMgb3B0aW9uYWwgb3Igbm90Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHN0YXRlcyBzaG91bGQgYmUgc2V0IGF1dG9tYXRpY2FsbHkgKENvbnRlbnQpLCBhZnRlciB0aGUgcGVuZGluZyB0aW1lIG9mIHN0YXRlIChLZXkpIGhhcyBiZWVuIHJlYWNoZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGF5IHRpbWUgYmV0d2VlbiBhdXRvY29tcGxldGUgcXVlcmllcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgdGlja2V0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGVzIGEgc2Vzc2lvbiBpZiB0aGUgc2Vzc2lvbiBpZCBpcyB1c2VkIHdpdGggYW4gaW52YWxpZCByZW1vdGUgSVAgYWRkcmVzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlcyByZXF1ZXN0ZWQgc2Vzc2lvbnMgaWYgdGhleSBoYXZlIHRpbWVkIG91dC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgbGlzdCBvZiBwb3NzaWJsZSBxdWV1ZXMgdG8gbW92ZSB0byB0aWNrZXQgaW50byBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgZHJvcGRvd24gbGlzdCBvciBpbiBhIG5ldyB3aW5kb3cgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gSWYgIk5ldyBXaW5kb3ciIGlzIHNldCB5b3UgY2FuIGFkZCBhIG1vdmUgbm90ZSB0byB0aGUgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBzZWFyY2ggcmVzdWx0cyBjb250YWluZXIgZm9yIHRoZSBhdXRvY29tcGxldGUgZmVhdHVyZSBzaG91bGQgYWRqdXN0IGl0cyB3aWR0aCBkeW5hbWljYWxseS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgc3RhdGF0aXN0aWNzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgdGlja2V0IGxpc3RzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIHRoZSBuZXh0IHBvc3NpYmxlIHRpY2tldCBzdGF0ZXMsIGFmdGVyIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBlbWFpbCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyB0aGUgbmV4dCBwb3NzaWJsZSB0aWNrZXQgc3RhdGVzLCBhZnRlciB0aGUgY3JlYXRpb24gb2YgYSBuZXcgcGhvbmUgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgdGhlIG5leHQgc2NyZWVuIGFmdGVyIG5ldyBjdXN0b21lciB0aWNrZXQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyB0aGUgbmV4dCBzY3JlZW4gYWZ0ZXIgdGhlIGZvbGxvdyB1cCBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgdGhlIHBvc3NpYmxlIHN0YXRlcyBmb3IgcGVuZGluZyB0aWNrZXRzIHRoYXQgY2hhbmdlZCBzdGF0ZSBhZnRlciByZWFjaGluZyB0aW1lIGxpbWl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIHRoZSBzdHJpbmdzIHRoYXQgd2lsbCBiZSBzaG93biBhcyByZWNlaXBlbnQgKFRvOikgb2YgdGhlIHBob25lIHRpY2tldCBhbmQgYXMgc2VuZGVyIChGcm9tOikgb2YgdGhlIGVtYWlsIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBGb3IgUXVldWUgYXMgTmV3UXVldWVTZWxlY3Rpb25UeXBlICI8UXVldWU+IiBzaG93cyB0aGUgbmFtZXMgb2YgdGhlIHF1ZXVlcyBhbmQgZm9yIFN5c3RlbUFkZHJlc3MgIjxSZWFsbmFtZT4gPDxFbWFpbD4+IiBzaG93cyB0aGUgbmFtZSBhbmQgZW1haWwgb2YgdGhlIHJlY2VpcGVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyB0aGUgc3RyaW5ncyB0aGF0IHdpbGwgYmUgc2hvd24gYXMgcmVjZWlwZW50IChUbzopIG9mIHRoZSB0aWNrZXQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gRm9yIFF1ZXVlIGFzIEN1c3RvbWVyUGFuZWxTZWxlY3Rpb25UeXBlLCAiPFF1ZXVlPiIgc2hvd3MgdGhlIG5hbWVzIG9mIHRoZSBxdWV1ZXMsIGFuZCBmb3IgU3lzdGVtQWRkcmVzcywgIjxSZWFsbmFtZT4gPDxFbWFpbD4+IiBzaG93cyB0aGUgbmFtZSBhbmQgZW1haWwgb2YgdGhlIHJlY2VpcGVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyB0aGUgd2F5IHRoZSBsaW5rZWQgb2JqZWN0cyBhcmUgZGlzcGxheWVkIGluIGVhY2ggem9vbSBtYXNrLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIHdoaWNoIG9wdGlvbnMgd2lsbCBiZSB2YWxpZCBvZiB0aGUgcmVjZXBpZW50IChwaG9uZSB0aWNrZXQpIGFuZCB0aGUgc2VuZGVyIChlbWFpbCB0aWNrZXQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgd2hpY2ggcXVldWVzIHdpbGwgYmUgdmFsaWQgZm9yIHRpY2tldFwncyByZWNlcGllbnRzIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rpc2FibGVzIHNlbmRpbmcgcmVtaW5kZXIgbm90aWZpY2F0aW9ucyB0byB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgYSB0aWNrZXQgKFRpY2tldDo6UmVzcG9uc2libGUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGlzYWJsZXMgdGhlIHdlYiBpbnN0YWxsZXIgKGh0dHA6Ly95b3VyaG9zdC5leGFtcGxlLmNvbS9vdHJzL2luc3RhbGxlci5wbCksIHRvIHByZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGJlaW5nIGhpamFja2VkLiBJZiBzZXQgdG8gIk5vIiwgdGhlIHN5c3RlbSBjYW4gYmUgcmVpbnN0YWxsZWQgYW5kIHRoZSBjdXJyZW50IGJhc2ljIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSB1c2VkIHRvIHByZS1wb3B1bGF0ZSB0aGUgcXVlc3Rpb25zIHdpdGhpbiB0aGUgaW5zdGFsbGVyIHNjcmlwdC4gSWYgbm90IGFjdGl2ZSwgaXQgYWxzbyBkaXNhYmxlcyB0aGUgR2VuZXJpY0FnZW50LCBQYWNrYWdlTWFuYWdlciBhbmQgU1FMIEJveCAodG8gYXZvaWQgdGhlIHVzZSBvZiBkZXN0cnVjdGl2ZSBxdWVyaWVzLCBzdWNoIGFzIERST1AgREFUQUJBU0UsIGFuZCBhbHNvIHRvIHN0ZWFsIHVzZXIgcGFzc3dvcmRzKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGlzcGxheXMgdGhlIGFjY291bnRlZCB0aW1lIGZvciBhbiBhcnRpY2xlIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWFpbCBBZGRyZXNzZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBQREYgb3V0cHV0LiBUaGUgQ1BBTiBtb2R1bGUgUERGOjpBUEkyIGlzIHJlcXVpcmVkLCBpZiBub3QgaW5zdGFsbGVkLCBQREYgb3V0cHV0IHdpbGwgYmUgZGlzYWJsZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgUEdQIHN1cHBvcnQuIFdoZW4gUEdQIHN1cHBvcnQgaXMgZW5hYmxlZCBmb3Igc2lnbmluZyBhbmQgc2VjdXJpbmcgbWFpbCwgaXQgaXMgSElHSExZIHJlY29tbWVuZGVkIHRoYXQgdGhlIHdlYiBzZXJ2ZXIgYmUgcnVuIGFzIHRoZSBPVFJTIHVzZXIuIE90aGVyd2lzZSwgdGhlcmUgd2lsbCBiZSBwcm9ibGVtcyB3aXRoIHRoZSBwcml2aWxlZ2VzIHdoZW4gYWNjZXNzaW5nIC5nbnVwZyBmb2xkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgUy9NSU1FIHN1cHBvcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY3VzdG9tZXJzIHRvIGNyZWF0ZSB0aGVpciBvd24gYWNjb3VudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgZmlsZSB1cGxvYWQgaW4gdGhlIHBhY2thZ2UgbWFuYWdlciBmcm9udGVuZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBvciBkaXNhYmxlIHRoZSBkZWJ1ZyBtb2RlIG92ZXIgZnJvbnRlbmQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBhdXRvY29tcGxldGUgZmVhdHVyZSBmb3IgdGhlIGN1c3RvbWVyIHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIG9yIGRpc2FibGVzIHRoZSB0aWNrZXQgd2F0Y2hlciBmZWF0dXJlLCB0byBrZWVwIHRyYWNrIG9mIHRpY2tldHMgd2l0aG91dCBiZWluZyB0aGUgb3duZXIgbm9yIHRoZSByZXNwb25zaWJsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBwZXJmb3JtYW5jZSBsb2cgKHRvIGxvZyB0aGUgcGFnZSByZXNwb25zZSB0aW1lKS4gSXQgd2lsbCBhZmZlY3QgdGhlIHN5c3RlbSBwZXJmb3JtYW5jZS4gRnJvbnRlbmQ6Ok1vZHVsZSMjI0FkbWluUGVyZm9ybWFuY2VMb2cgbXVzdCBiZSBlbmFibGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHNwZWxsIGNoZWNrZXIgc3VwcG9ydC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aWNrZXQgYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSB0aWNrZXQgYXQgYSB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRpY2tldCBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRpY2tldCByZXNwb25zaWJsZSBmZWF0dXJlLCB0byBrZWVwIHRyYWNrIG9mIGEgc3BlY2lmaWMgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRpY2tldCB3YXRjaGVyIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VzY2FsYXRpb24gdmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgcmVnaXN0cmF0aW9uLiBGb3IgbW9yZSBwZXJmb3JtYW5jZSB5b3UgY2FuIGRlZmluZSBhIHRyaWdnZXIgZXZlbnQgKGUuIGcuIEV2ZW50ID0+IFRpY2tldENyZWF0ZSkuIFRoaXMgaXMgb25seSBwb3NzaWJsZSBpZiBhbGwgVGlja2V0RnJlZUZpZWxkIGVsZW1lbnRzIG5lZWQgdGhlIHNhbWUgZXZlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4YW1wbGUgZm9yIGZyZWUgdGV4dCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeGVjdXRlIFNRTCBzdGF0ZW1lbnRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeGVjdXRlcyBmb2xsb3cgdXAgY2hlY2tzIG9uIEluLVJlcGx5LVRvIG9yIFJlZmVyZW5jZXMgaGVhZGVycyBmb3IgbWFpbHMgdGhhdCBkb25cJ3QgaGF2ZSBhIHRpY2tldCBudW1iZXIgaW4gdGhlIHN1YmplY3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4ZWN1dGVzIGZvbGxvdyB1cCBtYWlsIGF0dGFjaG1lbnRzIGNoZWNrcyBpbiAgbWFpbHMgdGhhdCBkb25cJ3QgaGF2ZSBhIHRpY2tldCBudW1iZXIgaW4gdGhlIHN1YmplY3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4ZWN1dGVzIGZvbGxvdyB1cCBtYWlsIGJvZHkgY2hlY2tzIGluIG1haWxzIHRoYXQgZG9uXCd0IGhhdmUgYSB0aWNrZXQgbnVtYmVyIGluIHRoZSBzdWJqZWN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeGVjdXRlcyBmb2xsb3cgdXAgcGxhaW4vcmF3IG1haWwgY2hlY2tzIGluIG1haWxzIHRoYXQgZG9uXCd0IGhhdmUgYSB0aWNrZXQgbnVtYmVyIGluIHRoZSBzdWJqZWN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBlcmltZW50YWwgIlNsaW0iIHNraW4gd2hpY2ggdHJpZXMgdG8gc2F2ZSBzY3JlZW4gc3BhY2UgZm9yIHBvd2VyIHVzZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBvcnRzIHRoZSB3aG9sZSBhcnRpY2xlIHRyZWUgaW4gc2VhcmNoIHJlc3VsdCAoaXQgY2FuIGFmZmVjdCB0aGUgc3lzdGVtIHBlcmZvcm1hbmNlKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmV0Y2hlcyBwYWNrYWdlcyB2aWEgcHJveHkuIE92ZXJ3cml0ZXMgIldlYlVzZXJBZ2VudDo6UHJveHkiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWxlIHRoYXQgaXMgZGlzcGxheWVkIGluIHRoZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50SW5mbyBtb2R1bGUsIGlmIGxvY2F0ZWQgdW5kZXIgS2VybmVsL091dHB1dC9IVE1ML1N0YW5kYXJkL0FnZW50SW5mby5kdGwuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBpbmNvbWluZyBlbWFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcmNlcyBlbmNvZGluZyBvZiBvdXRnb2luZyBlbWFpbHMgKDdiaXR8OGJpdHxxdW90ZWQtcHJpbnRhYmxlfGJhc2U2NCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcmNlcyB0byBjaG9vc2UgYSBkaWZmZXJlbnQgdGlja2V0IHN0YXRlIChmcm9tIGN1cnJlbnQpIGFmdGVyIGxvY2sgYWN0aW9uLiBEZWZpbmUgdGhlIGN1cnJlbnQgc3RhdGUgYXMga2V5LCBhbmQgdGhlIG5leHQgc3RhdGUgYWZ0ZXIgbG9jayBhY3Rpb24gYXMgY29udGVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9yY2VzIHRvIHVubG9jayB0aWNrZXRzIGFmdGVyIGJlaW5nIG1vdmVkIHRvIGFub3RoZXIgcXVldWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIGxhbmd1YWdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gKGRpc2FibGUgY29tcGFueSBsaW5rIGlmIG5vIGNvbXBhbnkgZmVhdHVyZSBpcyB1c2VkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgdGhlbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJpY0FnZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dpdmVzIGVuZCB1c2VycyB0aGUgcG9zc2liaWxpdHkgdG8gb3ZlcnJpZGUgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIgZm9yIENTViBmaWxlcywgZGVmaW5lZCBpbiB0aGUgdHJhbnNsYXRpb24gZmlsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYW50cyBhY2Nlc3MsIGlmIHRoZSBjdXN0b21lciBJRCBvZiB0aGUgdGlja2V0IG1hdGNoZXMgdGhlIGN1c3RvbWVyIHVzZXJcJ3MgSUQgYW5kIHRoZSBjdXN0b21lciB1c2VyIGhhcyBncm91cCBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUgdGhlIHRpY2tldCBpcyBpbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JvdXBzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hlbHBzIHRvIGV4dGVuZCB5b3VyIGFydGljbGVzIGZ1bGwtdGV4dCBzZWFyY2ggKEZyb20sIFRvLCBDYywgU3ViamVjdCBhbmQgQm9keSBzZWFyY2gpLiBSdW50aW1lIHdpbGwgZG8gZnVsbC10ZXh0IHNlYXJjaGVzIG9uIGxpdmUgZGF0YSAoaXQgd29ya3MgZmluZSBmb3IgdXAgdG8gNTAuMDAwIHRpY2tldHMpLiBTdGF0aWNEQiB3aWxsIHN0cmlwIGFsbCBhcnRpY2xlcyBhbmQgd2lsbCBidWlsZCBhbiBpbmRleCBhZnRlciBhcnRpY2xlIGNyZWF0aW9uLCBpbmNyZWFzaW5nIGZ1bGx0ZXh0IHNlYXJjaGVzIGFib3V0IDUwJS4gVG8gY3JlYXRlIGFuIGluaXRpYWwgaW5kZXggdXNlICJiaW4vb3Rycy5SZWJ1aWxkRnVsbHRleHRJbmRleC5wbCIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgYSBkYXRhYmFzZSBkcml2ZXIgKG5vcm1hbGx5IGF1dG9kZXRlY3Rpb24gaXMgdXNlZCkgY2FuIGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkRCIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCBhIHBhc3N3b3JkIHRvIGNvbm5lY3QgdG8gdGhlIGN1c3RvbWVyIHRhYmxlIGNhbiBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgYSB1c2VybmFtZSB0byBjb25uZWN0IHRvIHRoZSBjdXN0b21lciB0YWJsZSBjYW4gYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiREIiIHdhcyBzZWxlY3RlZCBmb3IgQ3VzdG9tZXI6OkF1dGhNb2R1bGUsIHRoZSBEU04gZm9yIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBjdXN0b21lciB0YWJsZSBtdXN0IGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkRCIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCB0aGUgY29sdW1uIG5hbWUgZm9yIHRoZSBDdXN0b21lclBhc3N3b3JkIGluIHRoZSBjdXN0b21lciB0YWJsZSBtdXN0IGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkRCIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCB0aGUgY3J5cHQgdHlwZSBvZiBwYXNzd29yZHMgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgdGhlIG5hbWUgb2YgdGhlIGNvbHVtbiBmb3IgdGhlIEN1c3RvbWVyS2V5IGluIHRoZSBjdXN0b21lciB0YWJsZSBtdXN0IGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkRCIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCB0aGUgbmFtZSBvZiB0aGUgdGFibGUgd2hlcmUgeW91ciBjdXN0b21lciBkYXRhIHNob3VsZCBiZSBzdG9yZWQgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBTZXNzaW9uTW9kdWxlLCBhIGNvbHVtbiBmb3IgdGhlIGlkZW50aWZpZXJzIGluIHNlc3Npb24gdGFibGUgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBTZXNzaW9uTW9kdWxlLCBhIGNvbHVtbiBmb3IgdGhlIHZhbHVlcyBpbiBzZXNzaW9uIHRhYmxlIG11c3QgYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiREIiIHdhcyBzZWxlY3RlZCBmb3IgU2Vzc2lvbk1vZHVsZSwgYSB0YWJsZSBpbiBkYXRhYmFzZSB3aGVyZSBzZXNzaW9uIGRhdGEgd2lsbCBiZSBzdG9yZWQgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJGUyIgd2FzIHNlbGVjdGVkIGZvciBTZXNzaW9uTW9kdWxlLCBhIGRpcmVjdG9yeSB3aGVyZSB0aGUgc2Vzc2lvbiBkYXRhIHdpbGwgYmUgc3RvcmVkIG11c3QgYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiSFRUUEJhc2ljQXV0aCIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgeW91IGNhbiBzcGVjaWZ5IChieSB1c2luZyBhIFJlZ0V4cCkgdG8gc3RyaXAgcGFydHMgb2YgUkVNT1RFX1VTRVIgKGUuIGcuIGZvciB0byByZW1vdmUgdHJhaWxpbmcgZG9tYWlucykuIFJlZ0V4cC1Ob3RlLCAkMSB3aWxsIGJlIHRoZSBuZXcgTG9naW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJIVFRQQmFzaWNBdXRoIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCB5b3UgY2FuIHNwZWNpZnkgdG8gc3RyaXAgbGVhZGluZyBwYXJ0cyBvZiB1c2VyIG5hbWVzIChlLiBnLiBmb3IgZG9tYWlucyBsaWtlIGV4YW1wbGVfZG9tYWluXHVzZXIgdG8gdXNlcikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlIGFuZCBpZiB5b3Ugd2FudCB0byBhZGQgYSBzdWZmaXggdG8gZXZlcnkgY3VzdG9tZXIgbG9naW4gbmFtZSwgc3BlY2lmaXkgaXQgaGVyZSwgZS4gZy4geW91IGp1c3Qgd2FudCB0byB3cml0ZSB0aGUgdXNlcm5hbWUgdXNlciBidXQgaW4geW91ciBMREFQIGRpcmVjdG9yeSBleGlzdHMgdXNlckBkb21haW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlIGFuZCBzcGVjaWFsIHBhcmFtYXRlcnMgYXJlIG5lZWRlZCBmb3IgdGhlIE5ldDo6TERBUCBwZXJsIG1vZHVsZSwgeW91IGNhbiBzcGVjaWZ5IHRoZW0gaGVyZS4gU2VlICJwZXJsZG9jIE5ldDo6TERBUCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcmFtZXRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlIGFuZCB5b3VyIHVzZXJzIGhhdmUgb25seSBhbm9ueW1vdXMgYWNjZXNzIHRvIHRoZSBMREFQIHRyZWUsIGJ1dCB5b3Ugd2FudCB0byBzZWFyY2ggdGhyb3VnaCB0aGUgZGF0YSwgeW91IGNhbiBkbyB0aGlzIHdpdGggYSB1c2VyIHdobyBoYXMgYWNjZXNzIHRvIHRoZSBMREFQIGRpcmVjdG9yeS4gU3BlY2lmeSB0aGUgcGFzc3dvcmQgZm9yIHRoaXMgc3BlY2lhbCB1c2VyIGhlcmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlIGFuZCB5b3VyIHVzZXJzIGhhdmUgb25seSBhbm9ueW1vdXMgYWNjZXNzIHRvIHRoZSBMREFQIHRyZWUsIGJ1dCB5b3Ugd2FudCB0byBzZWFyY2ggdGhyb3VnaCB0aGUgZGF0YSwgeW91IGNhbiBkbyB0aGlzIHdpdGggYSB1c2VyIHdobyBoYXMgYWNjZXNzIHRvIHRoZSBMREFQIGRpcmVjdG9yeS4gU3BlY2lmeSB0aGUgdXNlcm5hbWUgZm9yIHRoaXMgc3BlY2lhbCB1c2VyIGhlcmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCB0aGUgQmFzZUROIG11c3QgYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiTERBUCIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgdGhlIExEQVAgaG9zdCBjYW4gYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiTERBUCIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgdGhlIHVzZXIgaWRlbnRpZmllciBtdXN0IGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkxEQVAiIHdhcyBzZWxlY3RlZCBmb3IgQ3VzdG9tZXI6OkF1dGhNb2R1bGUsIHVzZXIgYXR0cmlidXRlcyBjYW4gYmUgc3BlY2lmaWVkLiBGb3IgTERBUCBwb3NpeEdyb3VwcyB1c2UgVUlELCBmb3Igbm9uIExEQVAgcG9zaXhHcm91cHMgdXNlIGZ1bGwgdXNlciBETi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkxEQVAiIHdhcyBzZWxlY3RlZCBmb3IgQ3VzdG9tZXI6OkF1dGhNb2R1bGUsIHlvdSBjYW4gc3BlY2lmeSBhY2Nlc3MgYXR0cmlidXRlcyBoZXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiTERBUCIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgeW91IGNhbiBzcGVjaWZ5IGlmIHRoZSBhcHBsaWNhdGlvbnMgd2lsbCBzdG9wIGlmIGUuIGcuIGEgY29ubmVjdGlvbiB0byBhIHNlcnZlciBjYW5cJ3QgYmUgZXN0YWJsaXNoZWQgZHVlIHRvIG5ldHdvcmsgcHJvYmxlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRobW9kdWxlLCB5b3UgY2FuIGNoZWNrIGlmIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gYXV0aGVudGljYXRlIGJlY2F1c2UgaGUgaXMgaW4gYSBwb3NpeEdyb3VwLCBlLmcuIHVzZXIgbmVlZHMgdG8gYmUgaW4gYSBncm91cCB4eXogdG8gdXNlIE9UUlMuIFNwZWNpZnkgdGhlIGdyb3VwLCB3aG8gbWF5IGFjY2VzcyB0aGUgc3lzdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiTERBUCIgd2FzIHNlbGVjdGVkLCB5b3UgY2FuIGFkZCBhIGZpbHRlciB0byBlYWNoIExEQVAgcXVlcnksIGUuZy4gKG1haWw9KiksIChvYmplY3RjbGFzcz11c2VyKSBvciAoIW9iamVjdGNsYXNzPWNvbXB1dGVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIlJhZGl1cyIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgdGhlIHBhc3N3b3JkIHRvIGF1dGhlbnRpY2F0ZSB0byB0aGUgcmFkaXVzIGhvc3QgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJSYWRpdXMiIHdhcyBzZWxlY3RlZCBmb3IgQ3VzdG9tZXI6OkF1dGhNb2R1bGUsIHRoZSByYWRpdXMgaG9zdCBtdXN0IGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIlJhZGl1cyIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgeW91IGNhbiBzcGVjaWZ5IGlmIHRoZSBhcHBsaWNhdGlvbnMgd2lsbCBzdG9wIGlmIGUuIGcuIGEgY29ubmVjdGlvbiB0byBhIHNlcnZlciBjYW5cJ3QgYmUgZXN0YWJsaXNoZWQgZHVlIHRvIG5ldHdvcmsgcHJvYmxlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJTZW5kbWFpbCIgd2FzIHNlbGVjdGVkIGFzIFNlbmRtYWlsTW9kdWxlLCB0aGUgbG9jYXRpb24gb2YgdGhlIHNlbmRtYWlsIGJpbmFyeSBhbmQgdGhlIG5lZWRlZCBvcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiU3lzTG9nIiB3YXMgc2VsZWN0ZWQgZm9yIExvZ01vZHVsZSwgYSBzcGVjaWFsIGxvZyBmYWNpbGl0eSBjYW4gYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiU3lzTG9nIiB3YXMgc2VsZWN0ZWQgZm9yIExvZ01vZHVsZSwgYSBzcGVjaWFsIGxvZyBzb2NrIGNhbiBiZSBzcGVjaWZpZWQgKG9uIHNvbGFyaXMgeW91IG1heSBuZWVkIHRvIHVzZSBcJ3N0cmVhbVwnKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIlN5c0xvZyIgd2FzIHNlbGVjdGVkIGZvciBMb2dNb2R1bGUsIHRoZSBjaGFyc2V0IHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGxvZ2dpbmcgY2FuIGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgImZpbGUiIHdhcyBzZWxlY3RlZCBmb3IgTG9nTW9kdWxlLCBhIGxvZ2ZpbGUgbXVzdCBiZSBzcGVjaWZpZWQuIElmIHRoZSBmaWxlIGRvZXNuXCd0IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQgYnkgdGhlIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhIG5vdGUgaXMgYWRkZWQgYnkgYW4gYWdlbnQsIHNldHMgdGhlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGEgbm90ZSBpcyBhZGRlZCBieSBhbiBhZ2VudCwgc2V0cyB0aGUgc3RhdGUgb2YgYSB0aWNrZXQgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhIG5vdGUgaXMgYWRkZWQgYnkgYW4gYWdlbnQsIHNldHMgdGhlIHN0YXRlIG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhbnkgb2YgdGhlICJTTVRQIiBtZWNoYW5pc21zIHdhcyBzZWxlY3RlZCBhcyBTZW5kbWFpbE1vZHVsZSwgYW5kIGF1dGhlbnRpY2F0aW9uIHRvIHRoZSBtYWlsIHNlcnZlciBpcyBuZWVkZWQsIGEgcGFzc3dvcmQgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGFueSBvZiB0aGUgIlNNVFAiIG1lY2hhbmlzbXMgd2FzIHNlbGVjdGVkIGFzIFNlbmRtYWlsTW9kdWxlLCBhbmQgYXV0aGVudGljYXRpb24gdG8gdGhlIG1haWwgc2VydmVyIGlzIG5lZWRlZCwgYW4gdXNlcm5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGFueSBvZiB0aGUgIlNNVFAiIG1lY2hhbmlzbXMgd2FzIHNlbGVjdGVkIGFzIFNlbmRtYWlsTW9kdWxlLCB0aGUgbWFpbGhvc3QgdGhhdCBzZW5kcyBvdXQgdGhlIG1haWxzIG11c3QgYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhbnkgb2YgdGhlICJTTVRQIiBtZWNoYW5pc21zIHdhcyBzZWxlY3RlZCBhcyBTZW5kbWFpbE1vZHVsZSwgdGhlIHBvcnQgd2hlcmUgeW91ciBtYWlsc2VydmVyIGlzIGxpc3RlbmluZyBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGNvbmZpZ3VyZWQsIGFsbCBlbWFpbHMgc2VudCBieSB0aGUgYXBwbGljYXRpb24gd2lsbCBjb250YWluIGFuIFgtSGVhZGVyIHdpdGggdGhpcyBvcmdhbml6YXRpb24gb3IgY29tcGFueSBuYW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBlbmFibGVkLCBPVFJTIHdpbGwgZGVsaXZlciBhbGwgQ1NTIGZpbGVzIGluIG1pbmlmaWVkIGZvcm0uIFdBUk5JTkc6IElmIHlvdSB0dXJuIHRoaXMgb2ZmLCB0aGVyZSB3aWxsIGxpa2VseSBiZSBwcm9ibGVtcyBpbiBJRSA3LCBiZWNhdXNlIGl0IGNhbm5vdCBsb2FkIG1vcmUgdGhhbiAzMiBDU1MgZmlsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIE9UUlMgd2lsbCBkZWxpdmVyIGFsbCBKYXZhU2NyaXB0IGZpbGVzIGluIG1pbmlmaWVkIGZvcm0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIFRpY2tldFBob25lIGFuZCBUaWNrZXRFbWFpbCB3aWxsIGJlIG9wZW4gaW4gbmV3IHdpbmRvd3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIHRoZSBPVFJTIHZlcnNpb24gdGFnIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBIVFRQIGhlYWRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIHRoZSBRdWV1ZVZpZXcgd2lsbCBhdXRvbWF0aWNhbGx5IHJlZnJlc2ggYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBlbmFibGVkLCB0aGUgZmlyc3QgbGV2ZWwgb2YgdGhlIG1haW4gbWVudSBvcGVucyBvbiBtb3VzZSBob3ZlciAoaW5zdGVhZCBvZiBjbGljayBvbmx5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgc2V0LCB0aGlzIGFkZHJlc3MgaXMgdXNlZCBhcyBlbnZlbG9wZSBmcm9tIGhlYWRlciBpbiBvdXRnb2luZyBub3RpZmljYXRpb25zLiBJZiBubyBhZGRyZXNzIGlzIHNwZWNpZmllZCwgdGhlIGVudmVsb3BlIGZyb20gaGVhZGVyIGlzIGVtcHR5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB0aGlzIHJlZ2V4IG1hdGNoZXMsIG5vIG1lc3NhZ2Ugd2lsbCBiZSBzZW5kIGJ5IHRoZSBhdXRvcmVzcG9uZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB5b3Ugd2FudCB0byB1c2UgYSBtaXJyb3IgZGF0YWJhc2UgZm9yIGFnZW50IHRpY2tldCBmdWxsdGV4dCBzZWFyY2ggb3IgdG8gZ2VuZXJhdGUgc3RhdHMsIHNwZWNpZnkgdGhlIERTTiB0byB0aGlzIGRhdGFiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB5b3Ugd2FudCB0byB1c2UgYSBtaXJyb3IgZGF0YWJhc2UgZm9yIGFnZW50IHRpY2tldCBmdWxsdGV4dCBzZWFyY2ggb3IgdG8gZ2VuZXJhdGUgc3RhdHMsIHRoZSBwYXNzd29yZCB0byBhdXRoZW50aWNhdGUgdG8gdGhpcyBkYXRhYmFzZSBjYW4gYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB5b3Ugd2FudCB0byB1c2UgYSBtaXJyb3IgZGF0YWJhc2UgZm9yIGFnZW50IHRpY2tldCBmdWxsdGV4dCBzZWFyY2ggb3IgdG8gZ2VuZXJhdGUgc3RhdHMsIHRoZSB1c2VyIHRvIGF1dGhlbnRpY2F0ZSB0byB0aGlzIGRhdGFiYXNlIGNhbiBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lnbm9yZSBhcnRpY2xlIHdpdGggc3lzdGVtIHNlbmRlciB0eXBlIGZvciBuZXcgYXJ0aWNsZSBmZWF0dXJlIChlLiBnLiBhdXRvIHJlc3BvbnNlcyBvciBlbWFpbCBub3RpZmljYXRpb25zKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzIGFydGljbGUgY3JlYXRlIHRpbWVzIGluIHRoZSB0aWNrZXQgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luZGV4QWNjZWxlcmF0b3I6IHRvIGNob29zZSB5b3VyIGJhY2tlbmQgVGlja2V0Vmlld0FjY2VsZXJhdG9yIG1vZHVsZS4gIlJ1bnRpbWVEQiIgZ2VuZXJhdGVzIGVhY2ggcXVldWUgdmlldyBvbiB0aGUgZmx5IGZyb20gdGlja2V0IHRhYmxlIChubyBwZXJmb3JtYW5jZSBwcm9ibGVtcyB1cCB0byBhcHByb3guIDYwLjAwMCB0aWNrZXRzIGluIHRvdGFsIGFuZCA2LjAwMCBvcGVuIHRpY2tldHMgaW4gdGhlIHN5c3RlbSkuICJTdGF0aWNEQiIgaXMgdGhlIG1vc3QgcG93ZXJmdWwgbW9kdWxlLCBpdCB1c2VzIGFuIGV4dHJhIHRpY2tldC1pbmRleCB0YWJsZSB0aGF0IHdvcmtzIGxpa2UgYSB2aWV3IChyZWNvbW1lbmRlZCBpZiBtb3JlIHRoYW4gODAuMDAwIGFuZCA2LjAwMCBvcGVuIHRpY2tldHMgYXJlIHN0b3JlZCBpbiB0aGUgc3lzdGVtKS4gVXNlIHRoZSBzY3JpcHQgImJpbi9vdHJzLlJlYnVpbGRUaWNrZXRJbmRleC5wbCIgZm9yIGluaXRpYWwgaW5kZXggdXBkYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIGlzcGVsbCBvciBhc3BlbGwgb24gdGhlIHN5c3RlbSwgaWYgeW91IHdhbnQgdG8gdXNlIGEgc3BlbGwgY2hlY2tlci4gUGxlYXNlIHNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIGFzcGVsbCBvciBpc3BlbGwgYmluYXJ5IG9uIHlvdXIgb3BlcmF0aW5nIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJmYWNlIGxhbmd1YWdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBkaWZmZXJlbnQgc2tpbnMsIGZvciBleGFtcGxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZXJlbnQgYWdlbnRzLCB0byBiZSB1c2VkIG9uIGEgcGVyLWRvbWFpbiBiYXNpcyB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uLiBVc2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiAocmVnZXgpLCB5b3UgY2FuIGNvbmZpZ3VyZSBhIEtleS9Db250ZW50IHBhaXIgdG8gbWF0Y2ggYSBkb21haW4uIFRoZSB2YWx1ZSBpbiAiS2V5IiBzaG91bGQgbWF0Y2ggdGhlIGRvbWFpbiwgYW5kIHRoZSB2YWx1ZSBpbiAiQ29udGVudCIgc2hvdWxkIGJlIGEgdmFsaWQgc2tpbiBvbiB5b3VyIHN5c3RlbS4gUGxlYXNlIHNlZSB0aGUgZXhhbXBsZSBlbnRyaWVzIGZvciB0aGUgcHJvcGVyIGZvcm0gb2YgdGhlIHJlZ2V4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdCBpcyBwb3NzaWJsZSB0byBjb25maWd1cmUgZGlmZmVyZW50IHNraW5zLCBmb3IgZXhhbXBsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGRpZmVyZW50IGN1c3RvbWVycywgdG8gYmUgdXNlZCBvbiBhIHBlci1kb21haW4gYmFzaXMgd2l0aGluIHRoZSBhcHBsaWNhdGlvbi4gVXNpbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gKHJlZ2V4KSwgeW91IGNhbiBjb25maWd1cmUgYSBLZXkvQ29udGVudCBwYWlyIHRvIG1hdGNoIGEgZG9tYWluLiBUaGUgdmFsdWUgaW4gIktleSIgc2hvdWxkIG1hdGNoIHRoZSBkb21haW4sIGFuZCB0aGUgdmFsdWUgaW4gIkNvbnRlbnQiIHNob3VsZCBiZSBhIHZhbGlkIHNraW4gb24geW91ciBzeXN0ZW0uIFBsZWFzZSBzZWUgdGhlIGV4YW1wbGUgZW50cmllcyBmb3IgdGhlIHByb3BlciBmb3JtIG9mIHRoZSByZWdleC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlIGRpZmZlcmVudCB0aGVtZXMsIGZvciBleGFtcGxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gYWdlbnRzIGFuZCBjdXN0b21lcnMsIHRvIGJlIHVzZWQgb24gYSBwZXItZG9tYWluIGJhc2lzIHdpdGhpbiB0aGUgYXBwbGljYXRpb24uIFVzaW5nIGEgcmVndWxhciBleHByZXNzaW9uIChyZWdleCksIHlvdSBjYW4gY29uZmlndXJlIGEgS2V5L0NvbnRlbnQgcGFpciB0byBtYXRjaCBhIGRvbWFpbi4gVGhlIHZhbHVlIGluICJLZXkiIHNob3VsZCBtYXRjaCB0aGUgZG9tYWluLCBhbmQgdGhlIHZhbHVlIGluICJDb250ZW50IiBzaG91bGQgYmUgYSB2YWxpZCB0aGVtZSBvbiB5b3VyIHN5c3RlbS4gUGxlYXNlIHNlZSB0aGUgZXhhbXBsZSBlbnRyaWVzIGZvciB0aGUgcHJvcGVyIGZvcm0gb2YgdGhlIHJlZ2V4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFnZW50cyB0byBncm91cHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYWdlbnRzIHRvIHJvbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGF0dGFjaG1lbnRzIHRvIHJlc3BvbnNlcyB0ZW1wbGF0ZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgY3VzdG9tZXJzIHRvIGdyb3Vwcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBjdXN0b21lcnMgdG8gc2VydmljZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgcXVldWVzIHRvIGF1dG8gcmVzcG9uc2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHJlc3BvbnNlcyB0byBxdWV1ZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgcm9sZXMgdG8gZ3JvdXBzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRoaXMgdGlja2V0IHRvIG90aGVyIG9iamVjdHMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmtzIDIgdGlja2V0cyB3aXRoIGEgIk5vcm1hbCIgdHlwZSBsaW5rLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rcyAyIHRpY2tldHMgd2l0aCBhICJQYXJlbnRDaGlsZCIgdHlwZSBsaW5rLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIENTUyBmaWxlcyB0byBhbHdheXMgYmUgbG9hZGVkIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIENTUyBmaWxlcyB0byBhbHdheXMgYmUgbG9hZGVkIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIElFNi1zcGVjaWZpYyBDU1MgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBJRTctc3BlY2lmaWMgQ1NTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2YgSUU3LXNwZWNpZmljIENTUyBmaWxlcyB0byBhbHdheXMgYmUgbG9hZGVkIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIElFOC1zcGVjaWZpYyBDU1MgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBJRTgtc3BlY2lmaWMgQ1NTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2YgSlMgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBKUyBmaWxlcyB0byBhbHdheXMgYmUgbG9hZGVkIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2cgZmlsZSBmb3IgdGhlIHRpY2tldCBjb3VudGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rIGludG8gYSB0aWNrZXQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01ha2VzIHRoZSBhcHBsaWNhdGlvbiBjaGVjayB0aGUgTVggcmVjb3JkIG9mIGVtYWlsIGFkZHJlc3NlcyBiZWZvcmUgc2VuZGluZyBhbiBlbWFpbCBvciBzdWJtaXR0aW5nIGEgdGVsZXBob25lIG9yIGVtYWlsIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFrZXMgdGhlIGFwcGxpY2F0aW9uIGNoZWNrIHRoZSBzeW50YXggb2YgZW1haWwgYWRkcmVzc2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWtlcyB0aGUgcGljdHVyZSB0cmFuc3BhcmVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFrZXMgdGhlIHNlc3Npb24gbWFuYWdlbWVudCB1c2UgaHRtbCBjb29raWVzLiBJZiBodG1sIGNvb2tpZXMgYXJlIGRpc2FibGVkIG9yIGlmIHRoZSBjbGllbnQgYnJvd3NlciBkaXNhYmxlZCBodG1sIGNvb2tpZXMsIHRoZW4gdGhlIHN5c3RlbSB3aWxsIHdvcmsgYXMgdXN1YWwgYW5kIGFwcGVuZCB0aGUgc2Vzc2lvbiBpZCB0byB0aGUgbGlua3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBQR1Aga2V5cyBmb3IgZW1haWwgZW5jcnlwdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIFBPUDMgb3IgSU1BUCBhY2NvdW50cyB0byBmZXRjaCBlbWFpbCBmcm9tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgUy9NSU1FIGNlcnRpZmljYXRlcyBmb3IgZW1haWwgZW5jcnlwdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIGV4aXN0aW5nIHNlc3Npb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcGVyaW9kaWMgdGFza3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hcmsgYXMgU3BhbSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4IHNpemUgKGluIGNoYXJhY3RlcnMpIG9mIHRoZSBjdXN0b21lciBpbmZvcm1hdGlvbiB0YWJsZSAocGhvbmUgYW5kIGVtYWlsKSBpbiB0aGUgY29tcG9zZSBzY3JlZW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heCBzaXplIG9mIHRoZSBzdWJqZWN0cyBpbiBhbiBlbWFpbCByZXBseS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4LiBkaXNwbGF5ZWQgdGlja2V0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbWFsIGF1dG8gZW1haWwgcmVzcG9uc2VzIHRvIG93biBlbWFpbC1hZGRyZXNzIGEgZGF5IChMb29wLVByb3RlY3Rpb24pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbWFsIHNpemUgaW4gS0J5dGVzIGZvciBtYWlscyB0aGF0IGNhbiBiZSBmZXRjaGVkIHZpYSBQT1AzL1BPUDNTL0lNQVAvSU1BUFMgKEtCeXRlcykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIHRpY2tldHMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgdGlja2V0cyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgKGluIGNoYXJhY3RlcnMpIG9mIHRoZSBjdXN0b21lciBpbmZvIHRhYmxlIGluIHRoZSBxdWV1ZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgKGluIGNoYXJhY3RlcnMpIG9mIHRoZSBjdXN0b21lciBpbmZvcm1hdGlvbiB0YWJsZSBpbiB0aGUgdGlja2V0IHpvb20gdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVyZ2UgdGhpcyB0aWNrZXQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSBmb3IgVG8tc2VsZWN0aW9uIGluIG5ldyB0aWNrZXQgc2NyZWVuIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayBjdXN0b21lciBwZXJtaXNzaW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIGlmIGEgdXNlciBpcyBpbiBhIHNwZWNpYWwgZ3JvdXAuIEFjY2VzcyBpcyBncmFudGVkLCBpZiB0aGUgdXNlciBpcyBpbiB0aGUgc3BlY2lmaWVkIGdyb3VwIGFuZCBoYXMgcm8gYW5kIHJ3IHBlcm1pc3Npb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgaWYgYXJyaXZlZCBlbWFpbHMgc2hvdWxkIGJlIG1hcmtlZCBhcyBlbWFpbC1pbnRlcm5hbCAoYmVjYXVzZSBvZiBvcmlnaW5hbCBmb3J3YXJlZCBpbnRlcm5hbCBlbWFpbCBpdCBjb2xsZWdlKS4gQXJ0aWNsZVR5cGUgYW5kIFNlbmRlclR5cGUgZGVmaW5lIHRoZSB2YWx1ZXMgZm9yIHRoZSBhcnJpdmVkIGVtYWlsL2FydGljbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgYWdlbnQgcmVzcG9uc2libGUgb2YgYSB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcGVybWlzc2lvbnMgZm9yIHRoZSBhY2Nlc3MgdG8gY3VzdG9tZXIgdGlja2V0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgb3duZXIgb2YgYSB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgd2F0Y2hlciBhZ2VudHMgb2YgYSB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjb21wb3NlIHNpZ25lZCBtZXNzYWdlcyAoUEdQIG9yIFMvTUlNRSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjcnlwdCBjb21wb3NlZCBtZXNzYWdlcyAoUEdQIG9yIFMvTUlNRSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBmaWx0ZXIgYW5kIG1hbmlwdWxhdGUgaW5jb21pbmcgbWVzc2FnZXMuIEJsb2NrL2lnbm9yZSBhbGwgc3BhbSBlbWFpbCB3aXRoIEZyb206IG5vcmVwbHlAIGFkZHJlc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBmaWx0ZXIgYW5kIG1hbmlwdWxhdGUgaW5jb21pbmcgbWVzc2FnZXMuIEdldCBhIDQgZGlnaXQgbnVtYmVyIHRvIHRpY2tldCBmcmVlIHRleHQsIHVzZSByZWdleCBpbiBNYXRjaCBlLiBnLiBGcm9tID0+IFwnKC4rPylALis/XCcsIGFuZCB1c2UgKCkgYXMgWyoqKl0gaW4gU2V0ID0+Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgYWNjb3VudGVkIHRpbWUgdGlja2V0IHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgdGlja2V0IHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IHRpY2tldCBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIHRpY2tldCBzb2x1dGlvbiBhbmQgcmVzcG9uc2UgdGltZSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgdGlja2V0IHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBpbmZvcm0gYWdlbnRzLCB2aWEgdGhlIGFnZW50IGludGVyZmFjZSwgYWJvdXQgdGhlIHVzZWQgY2hhcnNldC4gQSBub3RpZmljYXRpb24gaXMgZGlzcGxheWVkLCBpZiB0aGUgZGVmYXVsdCBjaGFyc2V0IGlzIG5vdCB1c2VkLCBlLmcuIGluIHRpY2tldHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IG5vdGlmaWNhdGlvbnMgYW5kIGVzY2FsYXRpb25zIChTaG93bk1heDogbWF4LiBzaG93biBlc2NhbGF0aW9ucywgRXNjYWxhdGlvbkluTWludXRlczogU2hvdyB0aWNrZXQgd2hpY2ggd2lsbCBlc2NhbGF0aW9uIGluLCBDYWNoZVRpbWU6IENhY2hlIG9mIGNhbGN1bGF0ZWQgZXNjYWxhdGlvbnMgaW4gc2Vjb25kcykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byB1c2UgZGF0YWJhc2UgZmlsdGVyIHN0b3JhZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IFF1ZXVlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBUaWNrZXRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgb2YgY3VzdG9tIHF1ZXVlLiBUaGUgY3VzdG9tIHF1ZXVlIGlzIGEgcXVldWUgc2VsZWN0aW9uIG9mIHlvdXIgcHJlZmVycmVkIHF1ZXVlcyBhbmQgY2FuIGJlIHNlbGVjdGVkIGluIHRoZSBwcmVmZXJlbmNlcyBzZXR0aW5ncy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBUaWNrZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IGVtYWlsIHRpY2tldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgcGhvbmUgdGlja2V0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB0aWNrZXQgbm90aWZpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05leHQgcG9zc2libGUgdGlja2V0IHN0YXRlcyBhZnRlciBhZGRpbmcgYSBwaG9uZSBub3RlIGluIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbnMgKEV2ZW50KSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgZGlzcGxheWVkIHRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIGxpbmVzIChwZXIgdGlja2V0KSB0aGF0IGFyZSBzaG93biBieSB0aGUgc2VhcmNoIHV0aWxpdHkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHRpY2tldHMgdG8gYmUgZGlzcGxheWVkIGluIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHRpY2tldHMgdG8gYmUgZGlzcGxheWVkIGluIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXQgT2YgT2ZmaWNlIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcmxvYWRzIChyZWRlZmluZXMpIGV4aXN0aW5nIGZ1bmN0aW9ucyBpbiBLZXJuZWw6OlN5c3RlbTo6VGlja2V0LiBVc2VkIHRvIGVhc2lseSBhZGQgY3VzdG9taXphdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IEVzY2FsYXRlZCBUaWNrZXRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IG9mIGFsbCBvcGVuIFRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb2YgYWxsIG9wZW4gVGlja2V0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUEdQIEtleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQR1AgS2V5IFVwbG9hZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQR1AgS2V5cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYWNrYWdlIE1hbmFnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIENyZWF0ZU5leHRNYXNrIG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBDdXN0b21RdWV1ZSBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgRm9sbG93VXBOb3RpZnkgb2JqZWN0IGluIHRoZSBwcmVmZXJlbmNlIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIExvY2tUaW1lb3V0Tm90aWZ5IG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBNb3ZlTm90aWZ5IG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBOZXdUaWNrZXROb3RpZnkgb2JqZWN0IGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBSZWZyZXNoVGltZSBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgV2F0Y2hlck5vdGlmeSBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIG5ldyB0aWNrZXRzIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgdGlja2V0IGNhbGVuZGFyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgdGlja2V0IGVzY2FsYXRpb24gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgdGlja2V0IHBlbmRpbmcgcmVtaW5kZXIgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgdGlja2V0IHBlbmRpbmcgcmVtaW5kZXIgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSB0aWNrZXQgc3RhdHMgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSB0aWNrZXRzIGFyZSBzaG93bikgb2YgdGhlIG1lZGl1bSB0aWNrZXQgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIHRpY2tldHMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgdGlja2V0IG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSB0aWNrZXRzIGFyZSBzaG93bikgb2YgdGhlIHRpY2tldCBwcmV2aWV3IG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIG9mIHRoZSBleGFtcGxlIFNMQSBhdHRyaWJ1dGUgQ29tbWVudDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgb2YgdGhlIGV4YW1wbGUgcXVldWUgYXR0cmlidXRlIENvbW1lbnQyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIG9mIHRoZSBleGFtcGxlIHNlcnZpY2UgYXR0cmlidXRlIENvbW1lbnQyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXRoIGZvciB0aGUgbG9nIGZpbGUgKGl0IG9ubHkgYXBwbGllcyBpZiAiRlMiIHdhcyBzZWxlY3RlZCBmb3IgTG9vcFByb3RlY3Rpb25Nb2R1bGUgYW5kIGl0IGlzIG1hbmRhdG9yeSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhdGggb2YgdGhlIGZpbGUgdGhhdCBzdG9yZXMgYWxsIHRoZSBzZXR0aW5ncyBmb3IgdGhlIFF1ZXVlT2JqZWN0IG9iamVjdCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGF0aCBvZiB0aGUgZmlsZSB0aGF0IHN0b3JlcyBhbGwgdGhlIHNldHRpbmdzIGZvciB0aGUgUXVldWVPYmplY3Qgb2JqZWN0IGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXRoIG9mIHRoZSBmaWxlIHRoYXQgc3RvcmVzIGFsbCB0aGUgc2V0dGluZ3MgZm9yIHRoZSBUaWNrZXRPYmplY3QgZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhdGggb2YgdGhlIGZpbGUgdGhhdCBzdG9yZXMgYWxsIHRoZSBzZXR0aW5ncyBmb3IgdGhlIFRpY2tldE9iamVjdCBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyZm9ybWFuY2UgTG9nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pdHRlZCB3aWR0aCBmb3IgY29tcG9zZSBlbWFpbCB3aW5kb3dzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXR0ZWQgd2lkdGggZm9yIGNvbXBvc2Ugbm90ZSB3aW5kb3dzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQb3N0TWFzdGVyIEZpbHRlcnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zdE1hc3RlciBNYWlsIEFjY291bnRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoaXMgdGlja2V0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0aWVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3RlY3Rpb24gYWdhaW5zdCBDU1JGIChDcm9zcyBTaXRlIFJlcXVlc3QgRm9yZ2VyeSkgZXhwbG9pdHMgKGZvciBtb3JlIGluZm8gc2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3Jvc3Mtc2l0ZV9yZXF1ZXN0X2ZvcmdlcnkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZSB2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXVlVmlldyBSZWZyZXNoIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZnJlc2ggUXVldWVWaWV3IGFmdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZnJlc2ggaW50ZXJ2YWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwbGFjZXMgdGhlIG9yaWdpbmFsIHNlbmRlciB3aXRoIGN1cnJlbnQgY3VzdG9tZXJcJ3MgZW1haWwgYWRkcmVzcyBvbiBjb21wb3NlIGFuc3dlciBpbiB0aGUgdGlja2V0IGNvbXBvc2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNoYW5nZSB0aGUgY3VzdG9tZXIgb2YgYSB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgYm91bmNlIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBjb21wb3NlIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBmb3J3YXJkIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBmcmVlIHRleHQgc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgdGlja2V0IG1lcmdlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0cyBhbmQgdW5sb2NrcyB0aGUgb3duZXIgb2YgYSB0aWNrZXQgaWYgaXQgd2FzIG1vdmVkIHRvIGFub3RoZXIgcXVldWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZXMgPC0+IFF1ZXVlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0b3JlcyBhIHRpY2tldCBmcm9tIHRoZSBhcmNoaXZlIChvbmx5IGlmIHRoZSBldmVudCBpcyBhIHN0YXRlIGNoYW5nZSwgZnJvbSBjbG9zZWQgdG8gYW55IG9wZW4gYXZhaWxhYmxlIHN0YXRlKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9sZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9sZXMgPC0+IEdyb3Vwcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW5zIGFuIGluaXRpYWwgd2lsZGNhcmQgc2VhcmNoIG9mIHRoZSBleGlzdGluZyBjdXN0b21lciB1c2VycyB3aGVuIGFjY2Vzc2luZyB0aGUgQWRtaW5DdXN0b21lclVzZXIgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW5zIHRoZSBzeXN0ZW0gaW4gIkRlbW8iIG1vZGUuIElmIHNldCB0byAiWWVzIiwgYWdlbnRzIGNhbiBjaGFuZ2UgcHJlZmVyZW5jZXMsIHN1Y2ggYXMgc2VsZWN0aW9uIG9mIGxhbmd1YWdlIGFuZCB0aGVtZSB2aWEgdGhlIGFnZW50IHdlYiBpbnRlcmZhY2UuIFRoZXNlIGNoYW5nZXMgYXJlIG9ubHkgdmFsaWQgZm9yIHRoZSBjdXJyZW50IHNlc3Npb24uIEl0IHdpbGwgbm90IGJlIHBvc3NpYmxlIGZvciBhZ2VudHMgdG8gY2hhbmdlIHRoZWlyIHBhc3N3b3Jkcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUy9NSU1FIENlcnRpZmljYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1MvTUlNRSBDZXJ0aWZpY2F0ZSBVcGxvYWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUy9NSU1FIENlcnRpZmljYXRlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTUUwgQm94J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhbHV0YXRpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmVzIHRoZSBhdHRhY2htZW50cyBvZiBhcnRpY2xlcy4gIkRCIiBzdG9yZXMgYWxsIGRhdGEgaW4gdGhlIGRhdGFiYXNlIChub3QgcmVjb21tZW5kZWQgZm9yIHN0b3JpbmcgYmlnIGF0dGFjaG1lbnRzKS4gIkZTIiBzdG9yZXMgdGhlIGRhdGEgb24gdGhlIGZpbGVzeXN0ZW07IHRoaXMgaXMgZmFzdGVyIGJ1dCB0aGUgd2Vic2VydmVyIHNob3VsZCBydW4gdW5kZXIgdGhlIE9UUlMgdXNlci4gWW91IGNhbiBzd2l0Y2ggYmV0d2VlbiB0aGUgbW9kdWxlcyBldmVuIG9uIGEgc3lzdGVtIHRoYXQgaXMgYWxyZWFkeSBpbiBwcm9kdWN0aW9uIHdpdGhvdXQgYW55IGxvc3Mgb2YgZGF0YS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZXMgdGhlIGxvZ2luIGFuZCBwYXNzd29yZCBvbiB0aGUgc2Vzc2lvbiB0YWJsZSBpbiB0aGUgZGF0YWJhc2UsIGlmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBTZXNzaW9uTW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY3JlZW4gYWZ0ZXIgbmV3IHRpY2tldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggVGlja2V0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggYmFja2VuZCBkZWZhdWx0IHJvdXRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGJhY2tlbmQgcm91dGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIgdXNlZCBpbiBDU1YgZmlsZXMgKHN0YXRzIGFuZCBzZWFyY2hlcykuIElmIHlvdSBkb25cJ3Qgc2VsZWN0IGEgc2VwYXJhdG9yIGhlcmUsIHRoZSBkZWZhdWx0IHNlcGFyYXRvciBmb3IgeW91ciBsYW5ndWFnZSB3aWxsIGJlIHVzZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCB5b3VyIGZyb250ZW5kIFRoZW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIG1vZHVsZSB0byBoYW5kbGUgdXBsb2FkcyB2aWEgdGhlIHdlYiBpbnRlcmZhY2UuICJEQiIgc3RvcmVzIGFsbCB1cGxvYWRzIGluIHRoZSBkYXRhYmFzZSwgIkZTIiB1c2VzIHRoZSBmaWxlIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgdGlja2V0IG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgdGlja2V0IG51bWJlciwgdGhlIFN5c3RlbUlEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZCB3aXRoIFN5c3RlbUlELmNvdW50ZXIgZm9ybWF0IChlLmcuIDEwMTAxMzgsIDEwMTAxMzkpLiBXaXRoICJEYXRlIiB0aGUgdGlja2V0IG51bWJlcnMgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgdGhlIGN1cnJlbnQgZGF0ZSwgdGhlIFN5c3RlbUlEIGFuZCB0aGUgY291bnRlci4gVGhlIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LlN5c3RlbUlELmNvdW50ZXIgKGUuZy4gMjAwMjA2MjMxMDEwMTM4LCAyMDAyMDYyMzEwMTAxMzkpLiBXaXRoICJEYXRlQ2hlY2tzdW0iICB0aGUgY291bnRlciB3aWxsIGJlIGFwcGVuZGVkIGFzIGNoZWNrc3VtIHRvIHRoZSBzdHJpbmcgb2YgZGF0ZSBhbmQgU3lzdGVtSUQuIFRoZSBjaGVja3N1bSB3aWxsIGJlIHJvdGF0ZWQgb24gYSBkYWlseSBiYXNpcy4gVGhlIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LlN5c3RlbUlELkNvdW50ZXIuQ2hlY2tTdW0gKGUuZy4gMjAwMjA3MDExMDEwMTUyMCwgMjAwMjA3MDExMDEwMTUzNSkuICJSYW5kb20iIGdlbmVyYXRlcyByYW5kb21pemVkIHRpY2tldCBudW1iZXJzIGluIHRoZSBmb3JtYXQgIlN5c3RlbUlELlJhbmRvbSIgKGUuZy4gMTAwMDU3ODY2MzUyLCAxMDM3NDUzOTQ1OTYpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIG1lIGEgbm90aWZpY2F0aW9uIGlmIGEgY3VzdG9tZXIgc2VuZHMgYSBmb2xsb3cgdXAgYW5kIElcJ20gdGhlIG93bmVyIG9mIHRoZSB0aWNrZXQgb3IgdGhlIHRpY2tldCBpcyB1bmxvY2tlZCBhbmQgaXMgaW4gb25lIG9mIG15IHN1YnNjcmliZWQgcXVldWVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIG1lIGEgbm90aWZpY2F0aW9uIGlmIGEgdGlja2V0IGlzIG1vdmVkIGludG8gb25lIG9mICJNeSBRdWV1ZXMiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIG1lIGEgbm90aWZpY2F0aW9uIGlmIGEgdGlja2V0IGlzIHVubG9ja2VkIGJ5IHRoZSBzeXN0ZW0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgbWUgYSBub3RpZmljYXRpb24gaWYgdGhlcmUgaXMgYSBuZXcgdGlja2V0IGluICJNeSBRdWV1ZXMiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIG1lIHRoZSBzYW1lIG5vdGlmaWNhdGlvbnMgZm9yIG15IHdhdGNoZWQgdGlja2V0cyB0aGF0IHRoZSB0aWNrZXQgb3duZXJzIHdpbGwgZ2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIG5ldyB0aWNrZXQgbm90aWZpY2F0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIG5vdGlmaWNhdGlvbnMgdG8gdXNlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgdGlja2V0IGZvbGxvdyB1cCBub3RpZmljYXRpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgdGlja2V0IGxvY2sgdGltZW91dCBub3RpZmljYXRpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgdGlja2V0IG1vdmUgbm90aWZpY2F0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIHRpY2tldCB3YXRjaCBub3RpZmljYXRpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmRlciB0eXBlIGZvciBuZXcgdGlja2V0cyBmcm9tIHRoZSBjdXN0b21lciBpbnRlZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZHMgYWdlbnQgZm9sbG93LXVwIG5vdGlmaWNhdGlvbiBvbmx5IHRvIHRoZSBvd25lciwgaWYgYSB0aWNrZXQgaXMgdW5sb2NrZWQgKHRoZSBkZWZhdWx0IGlzIHRvIHNlbmQgdGhlIG5vdGlmaWNhdGlvbiB0byBhbGwgYWdlbnRzKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZHMgYWxsIG91dGdvaW5nIGVtYWlsIHZpYSBiY2MgdG8gdGhlIHNwZWNpZmllZCBhZGRyZXNzLiBQbGVhc2UgdXNlIHRoaXMgb25seSBmb3IgYmFja3VwIHJlYXNvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmRzIGN1c3RvbWVyIG5vdGlmaWNhdGlvbnMganVzdCB0byB0aGUgbWFwcGVkIGN1c3RvbWVyLiBOb3JtYWxseSwgaWYgbm8gY3VzdG9tZXIgaXMgbWFwcGVkLCB0aGUgbGF0ZXN0IGN1c3RvbWVyIHNlbmRlciBnZXRzIHRoZSBub3RpZmljYXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmRzIHJlbWluZGVyIG5vdGlmaWNhdGlvbnMgb2YgdW5sb2NrZWQgdGlja2V0IGFmdGVyIHJlYWNoaW5nIHRoZSByZW1pbmRlciBkYXRlIChvbmx5IHNlbnQgdG8gdGlja2V0IG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZHMgdGhlIG5vdGlmaWNhdGlvbnMgd2hpY2ggYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGFkbWluIGludGVyZmFjZSB1bmRlciAiTm90ZmljYXRpb24gKEV2ZW50KSIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgTGV2ZWwgQWdyZWVtZW50cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXNzaW9uIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHNlbmRlciBlbWFpbCBhZGRyZXNzZXMgZm9yIHRoaXMgc3lzdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGFydGljbGVzIGluIEFnZW50VGlja2V0Wm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBhcnRpY2xlcyBpbiBBZ2VudFRpY2tldFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGlzIHRpY2tldCB0byBwZW5kaW5nISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhpcyB0byB5ZXMgaWYgeW91IHRydXN0IGluIGFsbCB5b3VyIHB1YmxpYyBhbmQgcHJpdmF0ZSBwZ3Aga2V5cywgZXZlbiBpZiB0aGV5IGFyZSBub3QgY2VydGlmaWVkIHdpdGggYSB0cnVzdGVkIHNpZ25hdHVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyBpZiB0aWNrZXQgb3duZXIgbXVzdCBiZSBzZWxlY3RlZCBieSB0aGUgYWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIFBlbmRpbmdUaW1lIG9mIGEgdGlja2V0IHRvIDAgaWYgdGhlIHN0YXRlIGlzIGNoYW5nZWQgdG8gYSBub24tcGVuZGluZyBzdGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgYWdlIGluIG1pbnV0ZXMgKGZpcnN0IGxldmVsKSBmb3IgaGlnaGxpZ2h0aW5nIHF1ZXVlcyB0aGF0IGNvbnRhaW4gdW50b3VjaGVkIHRpY2tldHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGFnZSBpbiBtaW51dGVzIChzZWNvbmQgbGV2ZWwpIGZvciBoaWdobGlnaHRpbmcgcXVldWVzIHRoYXQgY29udGFpbiB1bnRvdWNoZWQgdGlja2V0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgY29uZmlndXJhdGlvbiBsZXZlbCBvZiB0aGUgYWRtaW5pc3RyYXRvci4gRGVwZW5kaW5nIG9uIHRoZSBjb25maWcgbGV2ZWwsIHNvbWUgc3lzY29uZmlnIG9wdGlvbnMgd2lsbCBiZSBub3Qgc2hvd24uIFRoZSBjb25maWcgbGV2ZWxzIGFyZSBpbiBpbiBhc2NlbmRpbmcgb3JkZXI6IEV4cGVydCwgQWR2YW5jZWQsIEJlZ2lubmVyLiBUaGUgaGlnaGVyIHRoZSBjb25maWcgbGV2ZWwgaXMgKGUuZy4gQmVnaW5uZXIgaXMgdGhlIGhpZ2hlc3QpLCB0aGUgbGVzcyBsaWtlbHkgaXMgaXQgdGhhdCB0aGUgdXNlciBjYW4gYWNjaWRlbnRhbGx5IGNvbmZpZ3VyZSB0aGUgc3lzdGVtIGluIGEgd2F5IHRoYXQgaXQgaXMgbm90IHVzYWJsZSBhbnkgbW9yZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBhcnRpY2xlIHR5cGUgZm9yIG5ldyBlbWFpbCB0aWNrZXRzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgYXJ0aWNsZSB0eXBlIGZvciBuZXcgcGhvbmUgdGlja2V0cyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBib2R5IHRleHQgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgbW92ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBib2R5IHRleHQgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBib2R5IHRleHQgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBib2R5IHRleHQgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBjaGFyc2V0IGZvciB0aGUgd2ViIGludGVyZmFjZSB0byB1c2UgKHNob3VsZCByZXByZXNlbnQgdGhlIGNoYXJzZXQgdXNlZCB0byBjcmVhdGUgdGhlIGRhdGFiYXNlIG9yLCBpbiBzb21lIGNhc2VzLCB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gYmVpbmcgdXNlZCkuICJ1dGYtOCIgaXMgYSBnb29kIGNob2ljZSBmb3IgZW52aXJvbm1lbnRzIGV4cGVjdGluZyBtYW55IGNoYXJzZXRzLiBZb3UgY2FuIHNwZWNpZnkgYW5vdGhlciBjaGFyc2V0IGhlcmUgKGkuZS4gImlzby04ODU5LTEiKS4gUGxlYXNlIGJlIHN1cmUgdGhhdCB5b3Ugd2lsbCBub3QgYmUgcmVjZWl2aW5nIGZvcmVpZ24gZW1haWxzLCBvciB0ZXh0LCBvdGhlcndpc2UgdGhpcyBjb3VsZCBsZWFkIHRvIHByb2JsZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGxpbmsgdHlwZSBvZiBzcGxpdHRlZCB0aWNrZXRzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBmb3IgbmV3IHBob25lIHRpY2tldHMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBuZXh0IHRpY2tldCBzdGF0ZSwgYWZ0ZXIgdGhlIGNyZWF0aW9uIG9mIGFuIGVtYWlsIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IG5vdGUgdGV4dCBmb3IgbmV3IHRlbGVwaG9uZSB0aWNrZXRzLiBFLmcgXCdOZXcgdGlja2V0IHZpYSBjYWxsXCcgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBwcmlvcml0eSBmb3IgbmV3IGVtYWlsIHRpY2tldHMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBwcmlvcml0eSBmb3IgbmV3IHBob25lIHRpY2tldHMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzZW5kZXIgdHlwZSBmb3IgbmV3IGVtYWlsIHRpY2tldHMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzZW5kZXIgdHlwZSBmb3IgbmV3IHBob25lIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIG5ldyBlbWFpbCB0aWNrZXRzIChlLmcuIFwnZW1haWwgT3V0Ym91bmRcJykgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBuZXcgcGhvbmUgdGlja2V0cyAoZS5nLiBcJ1Bob25lIGNhbGxcJykgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgbW92ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgc3ViamVjdCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgc3ViamVjdCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHRleHQgZm9yIG5ldyBlbWFpbCB0aWNrZXRzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRpc3BsYXkgb3JkZXIgb2YgdGhlIGRpZmZlcmVudCBpdGVtcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5hY3Rpdml0eSB0aW1lIChpbiBzZWNvbmRzKSB0byBwYXNzIGJlZm9yZSBhIHNlc3Npb24gaXMga2lsbGVkIGFuZCBhIHVzZXIgaXMgbG9nZWQgb3V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBtaW5pbWFsIHRpY2tldCBjb3VudGVyIHNpemUgKGlmICJBdXRvSW5jcmVtZW50IiB3YXMgc2VsZWN0ZWQgYXMgVGlja2V0TnVtYmVyR2VuZXJhdG9yKS4gRGVmYXVsdCBpcyA1LCB0aGlzIG1lYW5zIHRoZSBjb3VudGVyIHN0YXJ0cyBmcm9tIDEwMDAwLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJlZm9yZSBhdXRvY29tcGxldGUgcXVlcnkgaXMgc2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgbnVtYmVyIG9mIGxpbmVzIHRoYXQgYXJlIGRpc3BsYXllZCBpbiB0ZXh0IG1lc3NhZ2VzIChlLmcuIHRpY2tldCBsaW5lcyBpbiB0aGUgUXVldWVab29tKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgbnVtYmVyIG9mIGxpbmVzIHRoYXQgYXJlIGRpc3BsYXllZCBpbiB0aGUgcHJldmlldyBvZiBtZXNzYWdlcyAoZS5nLiBmb3IgdGlja2V0cyBpbiB0aGUgUXVldWVWaWV3KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgbnVtYmVyIG9mIHNlYXJjaCByZXN1bHRzIHRvIGJlIGRpc3BsYXllZCBmb3IgdGhlIGF1dG9jb21wbGV0ZSBmZWF0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBvcHRpb25zIGZvciBQR1AgYmluYXJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBvcmRlciBvZiB0aGUgZGlmZmVyZW50IGl0ZW1zIGluIHRoZSBjdXN0b21lciBwcmVmZXJlbmNlcyB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBwYXNzd29yZCBmb3IgcHJpdmF0ZSBQR1Aga2V5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBwcmVmZXJlZCB0aW1lIHVuaXRzIChlLmcuIHdvcmsgdW5pdHMsIGhvdXJzLCBtaW51dGVzKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcHJlZml4IHRvIHRoZSBzY3JpcHRzIGZvbGRlciBvbiB0aGUgc2VydmVyLCBhcyBjb25maWd1cmVkIG9uIHRoZSB3ZWIgc2VydmVyLiBUaGlzIHNldHRpbmcgaXMgdXNlZCBhcyBhIHZhcmlhYmxlLCBPVFJTX0NPTkZJR19TY3JpcHRBbGlhcyB3aGljaCBpcyBmb3VuZCBpbiBhbGwgZm9ybXMgb2YgbWVzc2FnaW5nIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCB0byBidWlsZCBsaW5rcyB0byB0aGUgdGlja2V0cyB3aXRoaW4gdGhlIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSByZXNwb25zaWJsZSBhZ2VudCBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHJlc3BvbnNpYmxlIGFnZW50IG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHJlc3BvbnNpYmxlIGFnZW50IG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6U2VydmljZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc2VydmljZSBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6U2VydmljZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc2VydmljZSBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc2VydmljZSBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpTZXJ2aWNlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHNlcnZpY2UgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpTZXJ2aWNlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHNpemUgb2YgdGhlIHN0YXRpc3RpYyBncmFwaC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc3RhdHMgaG9vay4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc3lzdGVtIHRpbWUgem9uZSAocmVxdWlyZWQgYSBzeXN0ZW0gd2l0aCBVVEMgYXMgc3lzdGVtIHRpbWUpLiBPdGhlcndpc2UgdGhpcyBpcyBhIGRpZmYgdGltZSB0byB0aGUgbG9jYWwgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IG93bmVyIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCBvd25lciBpbiB0aGUgdGlja2V0IGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCBvd25lciBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IG93bmVyIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IG93bmVyIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgb3duZXIgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IG93bmVyIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgb3duZXIgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpUeXBlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCB0eXBlIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlR5cGUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIHRpY2tldCBub3RlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlR5cGUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6VHlwZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlR5cGUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIHRpY2tldCBwcmlvcml0eSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6VHlwZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlR5cGUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGltZSB0eXBlIHdoaWNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGltZW91dCAoaW4gc2Vjb25kcykgZm9yIGh0dHAvZnRwIGRvd25sb2Fkcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGltZW91dCAoaW4gc2Vjb25kcykgZm9yIHBhY2thZ2UgZG93bmxvYWRzLiBPdmVyd3JpdGVzICJXZWJVc2VyQWdlbnQ6OlRpbWVvdXQiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB1c2VyIHRpbWUgem9uZSBwZXIgdXNlciAocmVxdWlyZWQgYSBzeXN0ZW0gd2l0aCBVVEMgYXMgc3lzdGVtIHRpbWUgYW5kIFVUQyB1bmRlciBUaW1lWm9uZSkuIE90aGVyd2lzZSB0aGlzIGlzIGEgZGlmZiB0aW1lIHRvIHRoZSBsb2NhbCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB1c2VyIHRpbWUgem9uZSBwZXIgdXNlciBiYXNlZCBvbiBqYXZhIHNjcmlwdCAvIGJyb3dzZXIgdGltZSB6b25lIG9mZnNldCBmZWF0dXJlIGF0IGxvZ2luIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYSByZXNwb25zaWJsZSBzZWxlY3Rpb24gaW4gcGhvbmUgYW5kIGVtYWlsIHRpY2tldHMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhcnRpY2xlIGFzIHJpY2ggdGV4dCBldmVuIGlmIHJpY2ggdGV4dCB3cml0aW5nIGlzIGRpc2FibGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRoaXMgc2NyZWVuIGFmdGVyIEkgY3JlYXRlZCBhIG5ldyB0aWNrZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBjb3VudCBvZiBpY29ucyBpbiB0aGUgdGlja2V0IHpvb20sIGlmIHRoZSBhcnRpY2xlIGhhcyBhdHRhY2htZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IGZvciBzdWJzY3JpYmluZyAvIHVuc3Vic2NyaWJpbmcgZnJvbSBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSB0aWNrZXQgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbWVyZ2luZyB0aWNrZXRzIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWRkIGEgZnJlZSB0ZXh0IGZpZWxkIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSBub3RlIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSBub3RlIHRvIGEgdGlja2V0IGluIGV2ZXJ5IHRpY2tldCBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gY2xvc2UgYSB0aWNrZXQgaW4gZXZlcnkgdGlja2V0IG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBjbG9zZSBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgdGlja2V0IGluIGV2ZXJ5IHRpY2tldCBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBBZGRpdGlvbmFsIGFjY2VzcyBjb250cm9sIHRvIHNob3cgb3Igbm90IHNob3cgdGhpcyBsaW5rIGNhbiBiZSBkb25lIGJ5IHVzaW5nIEtleSAiR3JvdXAiIGFuZCBDb250ZW50IGxpa2UgInJ3Omdyb3VwMTttb3ZlX2ludG86Z3JvdXAyIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBBZGRpdGlvbmFsIGFjY2VzcyBjb250cm9sIHRvIHNob3cgb3Igbm90IHNob3cgdGhpcyBsaW5rIGNhbiBiZSBkb25lIGJ5IHVzaW5nIEtleSAiR3JvdXAiIGFuZCBDb250ZW50IGxpa2UgInJ3Omdyb3VwMTttb3ZlX2ludG86Z3JvdXAyIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdG9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBsb2NrIC8gdW5sb2NrIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgb3ZlcnZpZXdzIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBsb2NrL3VubG9jayB0aWNrZXRzIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBtb3ZlIGEgdGlja2V0IGluIGV2ZXJ5IHRpY2tldCBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgdGlja2V0IG9yIGFuIGFydGljbGUgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNlZSB0aGUgY3VzdG9tZXIgd2hvIHJlcXVlc3RlZCB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBzZWUgdGhlIGhpc3Rvcnkgb2YgYSB0aWNrZXQgaW4gZXZlcnkgdGlja2V0IG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBzZWUgdGhlIG93bmVyIG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBzZWUgdGhlIHByaW9yaXR5IG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBzZWUgdGhlIHJlc3BvbnNpYmxlIGFnZW50IG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBzZXQgYSB0aWNrZXQgYXMgcGVuZGluZyBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gc2V0IGEgdGlja2V0IGFzIHNwYW0gaW4gZXZlcnkgdGlja2V0IG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIEFkZGl0aW9uYWwgYWNjZXNzIGNvbnRyb2wgdG8gc2hvdyBvciBub3Qgc2hvdyB0aGlzIGxpbmsgY2FuIGJlIGRvbmUgYnkgdXNpbmcgS2V5ICJHcm91cCIgYW5kIENvbnRlbnQgbGlrZSAicnc6Z3JvdXAxO21vdmVfaW50bzpncm91cDIiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gc2V0IHRoZSBwcmlvcml0eSBvZiBhIHRpY2tldCBpbiBldmVyeSB0aWNrZXQgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gYSB0aWNrZXQgaW4gdGhlIHRpY2tldCBvdmVydmlld3Mgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIHRvIGFjY2VzcyBhcnRpY2xlIGF0dGFjaG1lbnRzIHZpYSBhIGh0bWwgb25saW5lIHZpZXdlciBpbiB0aGUgem9vbSB2aWV3IG9mIHRoZSBhcnRpY2xlIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayB0byBkb3dubG9hZCBhcnRpY2xlIGF0dGFjaG1lbnRzIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIGFydGljbGUgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIHRvIHNlZSBhIHpvb21lZCBlbWFpbCB0aWNrZXQgaW4gcGxhaW4gdGV4dC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIHRvIHNldCBhIHRpY2tldCBhcyBzcGFtIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIEFkZGl0aW9uYWwgYWNjZXNzIGNvbnRyb2wgdG8gc2hvdyBvciBub3Qgc2hvdyB0aGlzIGxpbmsgY2FuIGJlIGRvbmUgYnkgdXNpbmcgS2V5ICJHcm91cCIgYW5kIENvbnRlbnQgbGlrZSAicnc6Z3JvdXAxO21vdmVfaW50bzpncm91cDIiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGludm9sdmVkIGFnZW50cyBvbiB0aGlzIHRpY2tldCwgaW4gdGhlIHRpY2tldCBmcmVlIHRleHQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGludm9sdmVkIGFnZW50cyBvbiB0aGlzIHRpY2tldCwgaW4gdGhlIHRpY2tldCBub3RlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGludm9sdmVkIGFnZW50cyBvbiB0aGlzIHRpY2tldCwgaW4gdGhlIHRpY2tldCBwcmlvcml0eSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGludm9sdmVkIGFnZW50cyBvbiB0aGlzIHRpY2tldCwgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIHBvc3NpYmxlIGFnZW50cyAoYWxsIGFnZW50cyB3aXRoIG5vdGUgcGVybWlzc2lvbnMgb24gdGhlIHF1ZXVlL3RpY2tldCkgdG8gZGV0ZXJtaW5lIHdobyBzaG91bGQgYmUgaW5mb3JtZWQgYWJvdXQgdGhpcyBub3RlLCBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBwb3NzaWJsZSBhZ2VudHMgKGFsbCBhZ2VudHMgd2l0aCBub3RlIHBlcm1pc3Npb25zIG9uIHRoZSBxdWV1ZS90aWNrZXQpIHRvIGRldGVybWluZSB3aG8gc2hvdWxkIGJlIGluZm9ybWVkIGFib3V0IHRoaXMgbm90ZSwgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBwb3NzaWJsZSBhZ2VudHMgKGFsbCBhZ2VudHMgd2l0aCBub3RlIHBlcm1pc3Npb25zIG9uIHRoZSBxdWV1ZS90aWNrZXQpIHRvIGRldGVybWluZSB3aG8gc2hvdWxkIGJlIGluZm9ybWVkIGFib3V0IHRoaXMgbm90ZSwgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBwcmV2aWV3IG9mIHRoZSB0aWNrZXQgb3ZlcnZpZXcgKEN1c3RvbWVySW5mbyA9PiAxIC0gc2hvd3MgYWxzbyBDdXN0b21lci1JbmZvLCBDdXN0b21lckluZm9NYXhTaXplIG1heC4gc2l6ZSBpbiBjaGFyYWN0ZXJzIG9mIEN1c3RvbWVyLUluZm8pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhbGwgYm90aCBybyBhbmQgcncgcXVldWVzIGluIHRoZSBxdWV1ZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhbGwgb3BlbiB0aWNrZXRzIChldmVuIGlmIHRoZXkgYXJlIGxvY2tlZCkgaW4gdGhlIGVzY2FsYXRpb24gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhbGwgb3BlbiB0aWNrZXRzIChldmVuIGlmIHRoZXkgYXJlIGxvY2tlZCkgaW4gdGhlIHN0YXR1cyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGFsbCB0aGUgYXJ0aWNsZXMgb2YgdGhlIHRpY2tldCAoZXhwYW5kZWQpIGluIHRoZSB6b29tIHZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGFsbCB0aGUgY3VzdG9tZXIgaWRlbnRpZmllcnMgaW4gYSBtdWx0aS1zZWxlY3QgZmllbGQgKG5vdCB1c2VmdWwgaWYgeW91IGhhdmUgYSBsb3Qgb2YgY3VzdG9tZXIgaWRlbnRpZmllcnMpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhbiBvd25lciBzZWxlY3Rpb24gaW4gcGhvbmUgYW5kIGVtYWlsIHRpY2tldHMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgY3VzdG9tZXIgaGlzdG9yeSB0aWNrZXRzIGluIEFnZW50VGlja2V0UGhvbmUsIEFnZW50VGlja2V0RW1haWwgYW5kIEFnZW50VGlja2V0Q3VzdG9tZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGVpdGhlciB0aGUgbGFzdCBjdXN0b21lciBhcnRpY2xlXCdzIHN1YmplY3Qgb3IgdGhlIHRpY2tldCB0aXRsZSBpbiB0aGUgc21hbGwgZm9ybWF0IG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBleGlzdGluZyBwYXJlbnQvY2hpbGQgcXVldWUgbGlzdHMgaW4gdGhlIHN5c3RlbSBpbiB0aGUgZm9ybSBvZiBhIHRyZWUgb3IgYSBsaXN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgYWN0aXZhdGVkIHRpY2tldCBhdHRyaWJ1dGVzIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UgKDAgPSBEaXNhYmxlZCBhbmQgMSA9IEVuYWJsZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgYXJ0aWNsZXMgc29ydGVkIG5vcm1hbGx5IG9yIGluIHJldmVyc2UsIHVuZGVyIHRpY2tldCB6b29tIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjdXN0b21lciB1c2VyIGluZm9ybWF0aW9uIChwaG9uZSBhbmQgZW1haWwpIGluIHRoZSBjb21wb3NlIHNjcmVlbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGN1c3RvbWVyIHVzZXJcJ3MgaW5mbyBpbiB0aGUgdGlja2V0IHpvb20gdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIG1lc3NhZ2Ugb2YgdGhlIGRheSAoTU9URCkgaW4gdGhlIGFnZW50IGRhc2hib2FyZC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgaW5kaWNhdGVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIG1lc3NhZ2Ugb2YgdGhlIGRheSBvbiBsb2dpbiBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgaGlzdG9yeSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgbW92ZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgdGlja2V0IGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGlja2V0IHByaW9yaXR5IG9wdGlvbnMgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGlja2V0IHByaW9yaXR5IG9wdGlvbnMgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkcyBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGRzIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGRzIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkcyBpbiB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkcyBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGRzIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGRzIGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRpbWUgaW4gbG9uZyBmb3JtYXQgKGRheXMsIGhvdXJzLCBtaW51dGVzKSwgaWYgc2V0IHRvICJZZXMiOyBvciBpbiBzaG9ydCBmb3JtYXQgKGRheXMsIGhvdXJzKSwgaWYgc2V0IHRvICJObyIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRpbWUgdXNlIGNvbXBsZXRlIGRlc2NyaXB0aW9uIChkYXlzLCBob3VycywgbWludXRlcyksIGlmIHNldCB0byAiWWVzIjsgb3IganVzdCBmaXJzdCBsZXR0ZXIgKGQsIGgsIG0pLCBpZiBzZXQgdG8gIk5vIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2lnbmF0dXJlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2luJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvcnRzIHRoZSB0aWNrZXRzIChhc2NlbmRpbmdseSBvciBkZXNjZW5kaW5nbHkpIHdoZW4gYSBzaW5nbGUgcXVldWUgaXMgc2VsZWN0ZWQgaW4gdGhlIHF1ZXVlIHZpZXcgYW5kIGFmdGVyIHRoZSB0aWNrZXRzIGFyZSBzb3J0ZWQgYnkgcHJpb3JpdHkuIFZhbHVlczogMCA9IGFzY2VuZGluZyAob2xkZXN0IG9uIHRvcCwgZGVmYXVsdCksIDEgPSBkZXNjZW5kaW5nICh5b3VuZ2VzdCBvbiB0b3ApLiBVc2UgdGhlIFF1ZXVlSUQgZm9yIHRoZSBrZXkgYW5kIDAgb3IgMSBmb3IgdmFsdWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwYW0gQXNzYXNzaW4gZXhhbXBsZSBzZXR1cC4gSWdub3JlcyBlbWFpbHMgdGhhdCBhcmUgbWFya2VkIHdpdGggU3BhbUFzc2Fzc2luLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGFtIEFzc2Fzc2luIGV4YW1wbGUgc2V0dXAuIE1vdmVzIG1hcmtlZCBtYWlscyB0byBzcGFtIHF1ZXVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgaWYgYW4gYWdlbnQgc2hvdWxkIHJlY2VpdmUgZW1haWwgbm90aWZpY2F0aW9uIG9mIGhpcyBvd24gYWN0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBjaGFydC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBwaWN0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIGJvcmRlciBjb2xvciBvZiB0aGUgY2hhcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgYm9yZGVyIGNvbG9yIG9mIHRoZSBsZWdlbmQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgYm90dG9tIG1hcmdpbiBvZiB0aGUgY2hhcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgZGlmZmVyZW50IGFydGljbGUgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgaW4gdGhlIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBkaWZmZXJlbnQgbm90ZSB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgc3lzdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgZGF0YSBpbiwgaWYgIkZTIiB3YXMgc2VsZWN0ZWQgZm9yIFRpY2tldFN0b3JhZ2VNb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHdoZXJlIFNTTCBjZXJ0aWZpY2F0ZXMgYXJlIHN0b3JlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgcHJpdmF0ZSBTU0wgY2VydGlmaWNhdGVzIGFyZSBzdG9yZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgZW1haWwgYWRkcmVzcyB0aGF0IHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiB3aGVuIHNlbmRpbmcgbm90aWZpY2F0aW9ucy4gVGhlIGVtYWlsIGFkZHJlc3MgaXMgdXNlZCB0byBidWlsZCB0aGUgY29tcGxldGUgZGlzcGxheSBuYW1lIGZvciB0aGUgbm90aWZpY2F0aW9uIG1hc3RlciAoaS5lLiAiT1RSUyBOb3RpZmljYXRpb24gTWFzdGVyIiBvdHJzQHlvdXIuZXhhbXBsZS5jb20pLiBZb3UgY2FuIHVzZSB0aGUgT1RSU19DT05GSUdfRlFETiB2YXJpYWJsZSBhcyBzZXQgaW4geW91ciBjb25maWd1YXRpb24sIG9yIGNob29zZSBhbm90aGVyIGVtYWlsIGFkZHJlc3MuIE5vdGlmaWNhdGlvbnMgYXJlIG1lc3NhZ2VzIHN1Y2ggYXMgZW46OkN1c3RvbWVyOjpRdWV1ZVVwZGF0ZSBvciBlbjo6QWdlbnQ6Ok1vdmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgbGVmdCBtYXJnaW4gb2YgdGhlIGNoYXJ0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIG5hbWUgdGhhdCBzaG91bGQgYmUgdXNlZCBieSB0aGUgYXBwbGljYXRpb24gd2hlbiBzZW5kaW5nIG5vdGlmaWNhdGlvbnMuIFRoZSBzZW5kZXIgbmFtZSBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBjb21wbGV0ZSBkaXNwbGF5IG5hbWUgZm9yIHRoZSBub3RpZmljYXRpb24gbWFzdGVyIChpLmUuICJPVFJTIE5vdGlmaWNhdGlvbiBNYXN0ZXIiIG90cnNAeW91ci5leGFtcGxlLmNvbSkuIE5vdGlmaWNhdGlvbnMgYXJlIG1lc3NhZ2VzIHN1Y2ggYXMgZW46OkN1c3RvbWVyOjpRdWV1ZVVwZGF0ZSBvciBlbjo6QWdlbnQ6Ok1vdmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgcGF0aCBvZiB0aGUgZmlsZSBmb3IgdGhlIGxvZ28gaW4gdGhlIHBhZ2UgaGVhZGVyIChnaWZ8anBnfHBuZywgNzAwIHggMTAwIHBpeGVsKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBwYXRoIG9mIHRoZSBmaWxlIGZvciB0aGUgcGVyZm9ybWFuY2UgbG9nLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGNvbnZlcnRlciB0aGF0IGFsbG93cyB0aGUgdmlldyBvZiBNaWNyb3NvZnQgRXhjZWwgZmlsZXMsIGluIHRoZSB3ZWIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGNvbnZlcnRlciB0aGF0IGFsbG93cyB0aGUgdmlldyBvZiBNaWNyb3NvZnQgV29yZCBmaWxlcywgaW4gdGhlIHdlYiBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgY29udmVydGVyIHRoYXQgYWxsb3dzIHRoZSB2aWV3IG9mIFBERiBkb2N1bWVudHMsIGluIHRoZSB3ZWIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGNvbnZlcnRlciB0aGF0IGFsbG93cyB0aGUgdmlldyBvZiBYTUwgZmlsZXMsIGluIHRoZSB3ZWIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIHJpZ2h0IG1hcmdpbiBvZiB0aGUgY2hhcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgdGV4dCBjb2xvciBvZiB0aGUgY2hhcnQgKGUuIGcuIGNhcHRpb24pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIHRleHQgY29sb3Igb2YgdGhlIGxlZ2VuZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSB0ZXh0IHRoYXQgc2hvdWxkIGFwcGVhciBpbiB0aGUgbG9nIGZpbGUgdG8gZGVub3RlIGEgQ0dJIHNjcmlwdCBlbnRyeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSB0b3AgbWFyZ2luIG9mIHRoZSBjaGFydC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHVzZXIgaWQgb2YgdGhlIHBvc3RtYXN0ZXIgZGF0YSBiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVsbGluZyBEaWN0aW9uYXJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YW5kYXJkIGF2YWlsYWJsZSBwZXJtaXNzaW9ucyBmb3IgYWdlbnRzIHdpdGhpbiB0aGUgYXBwbGljYXRpb24uIElmIG1vcmUgcGVybWlzc2lvbnMgYXJlIG5lZWRlZCwgdGhleSBjYW4gYmUgZW50ZXJlZCBoZXJlLiBQZXJtaXNzaW9ucyBtdXN0IGJlIGRlZmluZWQgdG8gYmUgZWZmZWN0aXZlLiBTb21lIG90aGVyIGdvb2QgcGVybWlzc2lvbnMgaGF2ZSBhbHNvIGJlZW4gcHJvdmlkZWQgYnVpbHQtaW46IG5vdGUsIGNsb3NlLCBwZW5kaW5nLCBjdXN0b21lciwgZnJlZXRleHQsIG1vdmUsIGNvbXBvc2UsIHJlc3BvbnNpYmxlLCBmb3J3YXJkLCBhbmQgYm91bmNlLiBNYWtlIHN1cmUgdGhhdCAicnciIGlzIGFsd2F5cyB0aGUgbGFzdCByZWdpc3RlcmVkIHBlcm1pc3Npb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG51bWJlciBmb3Igc3RhdGlzdGljcyBjb3VudGluZy4gRXZlcnkgbmV3IHN0YXQgaW5jcmVtZW50cyB0aGlzIG51bWJlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRpc3RpY3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHVzIHZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RvcmVzIGNvb2tpZXMgYWZ0ZXIgdGhlIGJyb3dzZXIgaGFzIGJlZW4gY2xvc2VkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdHJpcHMgZW1wdHkgbGluZXMgb24gdGhlIHRpY2tldCBwcmV2aWV3IGluIHRoZSBxdWV1ZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTeXN0ZW0gTG9nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSAiYmluL1Bvc3RNYXN0ZXJNYWlsQWNjb3VudC5wbCIgd2lsbCByZWNvbm5lY3QgdG8gUE9QMy9QT1AzUy9JTUFQL0lNQVBTIGhvc3QgYWZ0ZXIgdGhlIHNwZWNpZmllZCBjb3VudCBvZiBtZXNzYWdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFnZW50IHNraW5cJ3MgSW50ZXJuYWxOYW1lIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmxlIHNraW5zIGluIEZyb250ZW5kOjpBZ2VudDo6U2tpbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjdXN0b21lciBza2luXCdzIEludGVybmFsTmFtZSB3aGljaCBzaG91bGQgYmUgdXNlZCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJsZSBza2lucyBpbiBGcm9udGVuZDo6Q3VzdG9tZXI6OlNraW5zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGl2aWRlciBiZXR3ZWVuIFRpY2tldEhvb2sgYW5kIHRpY2tldCBudW1iZXIuIEUuZyBcJzogXCcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBmb3JtYXQgb2YgdGhlIHN1YmplY3QuIFwnTGVmdFwnIG1lYW5zIFwnW1RpY2tldEhvb2sjOjEyMzQ1XSBTb21lIFN1YmplY3RcJywgXCdSaWdodFwnIG1lYW5zIFwnU29tZSBTdWJqZWN0IFtUaWNrZXRIb29rIzoxMjM0NV1cJywgXCdOb25lXCcgbWVhbnMgXCdTb21lIFN1YmplY3RcJyBhbmQgbm8gdGlja2V0IG51bWJlci4gSW4gdGhlIGxhc3QgY2FzZSB5b3Ugc2hvdWxkIGVuYWJsZSBQb3N0bWFzdGVyRm9sbG93dXBTZWFyY2hJblJhdyBvciBQb3N0bWFzdGVyRm9sbG93VXBTZWFyY2hJblJlZmVyZW5jZXMgdG8gcmVjb2duaXplIGZvbGxvd3VwcyBiYXNlZCBvbiBlbWFpbCBoZWFkZXJzIGFuZC9vciBib2R5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaGVhZGxpbmUgc2hvd24gaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgdGlja2V0LCBlLmcuIFRpY2tldCMsIENhbGwjLCBNeVRpY2tldCMuIFRoZSBkZWZhdWx0IGlzIFRpY2tldCMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBsb2dvIHNob3duIGluIHRoZSBoZWFkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVGhlIFVSTCB0byB0aGUgaW1hZ2UgbXVzdCBiZSBhIHJlbGF0aXZlIFVSTCB0byB0aGUgc2tpbiBpbWFnZSBkaXJlY3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBsb2dvIHNob3duIGluIHRoZSBoZWFkZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVGhlIFVSTCB0byB0aGUgaW1hZ2UgbXVzdCBiZSBhIHJlbGF0aXZlIFVSTCB0byB0aGUgc2tpbiBpbWFnZSBkaXJlY3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBsb2dvIHNob3duIG9uIHRvcCBvZiB0aGUgbG9naW4gYm94IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFRoZSBVUkwgdG8gdGhlIGltYWdlIG11c3QgYmUgcmVsYXRpdmUgVVJMIHRvIHRoZSBza2luIGltYWdlIGRpcmVjdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHRleHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3ViamVjdCBpbiBhbiBlbWFpbCByZXBseSwgZS5nLiBSRSwgQVcsIG9yIEFTLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGV4dCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdWJqZWN0IHdoZW4gYW4gZW1haWwgaXMgZm9yd2FyZGVkLCBlLmcuIEZXLCBGd2QsIG9yIFdHLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVtZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBhbmQgaXRzIFByZVJ1bigpIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQsIGlmIGRlZmluZWQsIGZvciBldmVyeSByZXF1ZXN0LiBUaGlzIG1vZHVsZSBpcyB1c2VmdWwgdG8gY2hlY2sgc29tZSB1c2VyIG9wdGlvbnMgb3IgdG8gZGlzcGxheSBuZXdzIGFib3V0IG5ldyBhcHBsaWNhdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBPdmVydmlldyAiTWVkaXVtIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgT3ZlcnZpZXcgIlByZXZpZXciIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmb2xsb3cgdXAgbm90aWZpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIGVtYWlsIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSBtb3ZlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSBwaG9uZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IGNvbXBvc2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IGZvcndhcmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgbWVzc2FnZSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4gTk9URS4gSWYgeW91IHdhbnQgdG8gZGlzcGxheSB0aGVzZSBmaWVsZHMgYWxzbyBpbiB0aGUgdGlja2V0IHpvb20gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZSwgeW91IGhhdmUgdG8gZW5hYmxlIHRoZW0gaW4gQ3VzdG9tZXJUaWNrZXRab29tIyMjQXR0cmlidXRlc1ZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHBob25lIG91dGJvdW5kIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBwcmlvcml0eSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBzZWFyY2ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgc2VhcmNoIHNjcmVlbiBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkIGFuZCAxID0gRW5hYmxlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRpbWUgb3B0aW9ucyBzaG93biBpbiB0aGUgZW1haWwgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0aW1lIG9wdGlvbnMgc2hvd24gaW4gdGhlIG1vdmUgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0aW1lIG9wdGlvbnMgc2hvd24gaW4gdGhlIHBob25lIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgY29tcG9zZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgZm9yd2FyZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0aW1lIG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBtZXNzYWdlIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLiBOT1RFLiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IHRoZXNlIGZpZWxkcyBhbHNvIGluIHRoZSB0aWNrZXQgem9vbSBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLCB5b3UgaGF2ZSB0byBlbmFibGUgdGhlbSBpbiBDdXN0b21lclRpY2tldFpvb20jIyNBdHRyaWJ1dGVzVmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0aW1lIG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRpbWUgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRpbWUgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgc2VhcmNoIHNjcmVlbiBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkIGFuZCAxID0gRW5hYmxlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGxpbWl0IHBlciBwYWdlIGZvciBUaWNrZXQgT3ZlcnZpZXcgIk1lZGl1bSInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGxpbWl0IHBlciBwYWdlIGZvciBUaWNrZXQgT3ZlcnZpZXcgIlByZXZpZXciJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBsaW1pdCBwZXIgcGFnZSBmb3IgVGlja2V0IE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGxvY2sgdGltZW91dCBub3RpZmljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IG1vdmUgbm90aWZpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBvdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgd2F0Y2ggbm90aWZpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBab25lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgaW4gc2Vjb25kcyB0aGF0IGdldHMgYWRkZWQgdG8gdGhlIGFjdHVhbCB0aW1lIGlmIHNldHRpbmcgYSBwZW5kaW5nLXN0YXRlIChkZWZhdWx0OiA4NjQwMCA9IDEgZGF5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9vbGJhciBJdGVtIGZvciBhIHNob3J0Y3V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUdXJucyBvbiB0aGUgYW5pbWF0aW9ucyB1c2VkIGluIHRoZSBHVUkuIElmIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggdGhlc2UgYW5pbWF0aW9ucyAoZS5nLiBwZXJmb3JtYW5jZSBpc3N1ZXMpLCB5b3UgY2FuIHR1cm4gdGhlbSBvZmYgaGVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHVybnMgb24gdGhlIHJlbW90ZSBpcCBhZGRyZXNzIGNoZWNrLiBJdCBzaG91bGQgYmUgc2V0IHRvICJObyIgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIHVzZWQsIGZvciBleGFtcGxlLCB2aWEgYSBwcm94eSBmYXJtIG9yIGEgZGlhbHVwIGNvbm5lY3Rpb24sIGJlY2F1c2UgdGhlIHJlbW90ZSBpcCBhZGRyZXNzIGlzIG1vc3RseSBkaWZmZXJlbnQgZm9yIHRoZSByZXF1ZXN0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHlwZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXBkYXRlIFRpY2tldCAiU2VlbiIgZmxhZyBpZiBldmVyeSBhcnRpY2xlIGdvdCBzZWVuIG9yIGEgbmV3IEFydGljbGUgZ290IGNyZWF0ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VwZGF0ZSBhbmQgZXh0ZW5kIHlvdXIgc3lzdGVtIHdpdGggc29mdHdhcmUgcGFja2FnZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VwZGF0ZXMgdGhlIHRpY2tldCBlc2NhbGF0aW9uIGluZGV4IGFmdGVyIGEgdGlja2V0IGF0dHJpYnV0ZSBnb3QgdXBkYXRlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXBkYXRlcyB0aGUgdGlja2V0IGluZGV4IGFjY2VsZXJhdG9yLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VzIENjIHJlY2lwaWVudHMgaW4gcmVwbHkgQ2MgbGlzdCBvbiBjb21wb3NlIGFuIGVtYWlsIGFuc3dlciBpbiB0aGUgdGlja2V0IGNvbXBvc2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXMgcmljaHRleHQgZm9yIHZpZXdpbmcgYW5kIGVkaXRpbmc6IGFydGljbGVzLCBzYWx1dGF0aW9ucywgc2lnbmF0dXJlcywgc3RhbmRhcmQgcmVzcG9uc2VzLCBhdXRvIHJlc3BvbnNlcyBhbmQgbm90aWZpY2F0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmlldyBwZXJmb3JtYW5jZSBiZW5jaG1hcmsgcmVzdWx0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmlldyBzeXN0ZW0gbG9nIG1lc3NhZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXZWFyIHRoaXMgZnJvbnRlbmQgc2tpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaGVuIHRpY2tldHMgYXJlIG1lcmdlZCwgYSBub3RlIHdpbGwgYmUgYWRkZWQgYXV0b21hdGljYWxseSB0byB0aGUgdGlja2V0IHdoaWNoIGlzIG5vIGxvbmdlciBhY3RpdmUuIEluIHRoaXMgdGV4dCBhcmVhIHlvdSBjYW4gZGVmaW5lIHRoaXMgdGV4dCAoVGhpcyB0ZXh0IGNhbm5vdCBiZSBjaGFuZ2VkIGJ5IHRoZSBhZ2VudCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1doZW4gdGlja2V0cyBhcmUgbWVyZ2VkLCB0aGUgY3VzdG9tZXIgY2FuIGJlIGluZm9ybWVkIHBlciBlbWFpbCBieSBzZXR0aW5nIHRoZSBjaGVjayBib3ggIkluZm9ybSBTZW5kZXIiLiBJbiB0aGlzIHRleHQgYXJlYSwgeW91IGNhbiBkZWZpbmUgYSBwcmUtZm9ybWF0dGVkIHRleHQgd2hpY2ggY2FuIGxhdGVyIGJlIG1vZGlmaWVkIGJ5IHRoZSBhZ2VudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdXIgbGFuZ3VhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91ciBxdWV1ZSBzZWxlY3Rpb24gb2YgeW91ciBmYXZvdXJpdGUgcXVldWVzLiBZb3UgYWxzbyBnZXQgbm90aWZpZWQgYWJvdXQgdGhvc2UgcXVldWVzIHZpYSBlbWFpbCBpZiBlbmFibGVkLid9ID0gJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9lc19JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICdEaXJlY2Npw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICdIZXJyYW1pZW50YSBkZSBBZG1pbmlzdHJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ0Rpc3Bvc2l0aXZvIGRlIFJlc3BhbGRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ1Byb3llY3Rvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJ0VkaWZpY2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbUNyZWF0ZSd9ID0gJ0NvbmZpZ0l0ZW0gbnVldm8gKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkNvbmZpZ0l0ZW1EZWxldGUnfSA9ICdDb25maWdJdGVtIGVsaW1pbmFkbyAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6RGVmaW5pdGlvblVwZGF0ZSd9ID0gJ0RlZmluaWNpw7NuIGRlbCBDb25maWdJdGVtIG1vZGlmaWNhZG8gKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkRlcGxveW1lbnRTdGF0ZVVwZGF0ZSd9ID0gJ0ltcGxlbWVudGFjacOzbiBkZWwgZXN0YWRvIG1vZGlmaWNhZG8gKG51ZXZvPSVzOyBhbHQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6SW5jaWRlbnRTdGF0ZVVwZGF0ZSd9ID0gJ01vZGlmaWNhY2nDs24gZGVsIGVzdGFkbyBkZWwgaW5jaWRlbnRlIChudWV2bz0lczsgYWx0PSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkxpbmtBZGQnfSA9ICdWw61uY3VsbyBjb24gJXMgbnVldm8gKFRpcG89JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TGlua0RlbGV0ZSd9ID0gJ1bDrW5jdWxvIGNvbiAlcyBlbGltaW5hZG8gKFRpcG89JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TmFtZVVwZGF0ZSd9ID0gJ05vbWJyZSBhY3R1YWxpemFkbyAobnVldm89JXM7IGFsdD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWYWx1ZVVwZGF0ZSd9ID0gJ0F0cmlidXRvICVzIGFjdHVhbGl6YWRvIGRlc2RlICIlcyIgaGFzdGEgIiVzIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZlcnNpb25DcmVhdGUnfSA9ICdWZXJzacOzbiBudWV2YSAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmVyc2lvbkRlbGV0ZSd9ID0gJ1ZlcnNpw7NuICVzIGVsaW1pbmFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkF0dGFjaG1lbnRBZGQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpBdHRhY2htZW50RGVsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ0NQVSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICdDw6FtYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAnQ2FwYWNpZGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBEZWZpbml0aW9uJ30gPSAnTW9kaWZpY2FyIERlZmluaWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBvZiBkZWZpbml0aW9uIGZhaWxlZCEgU2VlIFN5c3RlbSBMb2cgZm9yIGRldGFpbHMuJ30gPSAnQWN0dWFsaXphY2nDs24gZGUgZGVmaW5pY2lvbmVzIGZhbGxpZGEhIFJldmlzYXIgZWwgTG9nIGRlbCBTaXN0ZW1hIHBhcmEgY29uc3VsdGFyIGxvcyBkZXRhbGxlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICdBcGxpY2FjacOzbiBDbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJ1NPIENsaWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uY3VycmVudCBVc2Vycyd9ID0gJ1VzdWFyaW9zIENvbmN1cnJlbnRlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbS1BcmVhJ30gPSAnw4FyZWEgZGUgRWxlbWVudG9zIGRlIENvbmZpZ3VyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBhdmFpbGFibGUnfSA9ICdFbGVtZW50b3MgZGUgQ29uZmlndXJhY2nDs24gZGlzcG9uaWJsZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHNob3duJ30gPSAnRWxlbWVudG9zIGRlIENvbmZpZ3VyYWNpw7NuIG1vc3RyYWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICdEZW1vc3RyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICdFc2NyaXRvcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAnTGljZW5jaWEgZGUgRGVzYXJyb2xsYWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICdEb2NraW5nIFN0YXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnRHVwbGljYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnRW1iZWJpZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ0xpY2VuY2lhIENvcnBvcmF0aXZhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ0ZlY2hhIGRlIEV4cGlyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICdFeHBpcmFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGUUROJ30gPSAnRlFETic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ1Bpc28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICdGcmVld2FyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICdHU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJ1B1ZXJ0YSBkZSBlbmxhY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnVGFyamV0YSBHcsOhZmljYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICdEaXNjbyBEdXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzazo6Q2FwYWNpdHknfSA9ICdEaXNjbyBEdXJvOjpDYXBhY2lkYWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlkZSBWZXJzaW9ucyd9ID0gJ09jdWx0YXIgVmVyc2lvbmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdEaXJlY2Npw7NuIElQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0lQIHNvYnJlIERIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICdJbnN0YWxhY2lvbmVzIGRlIFRJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luYWN0aXZlJ30gPSAnSW5hY3Rpdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAnRmVjaGEgZGUgSW5zdGFsYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvcmQnfSA9ICdUZWNsYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICdDb21wdXRhZG9yYSBwb3J0w6F0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBDaGFuZ2UnfSA9ICdVbHRpbWEgbW9kaWZpY2FjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJ0NsYXZlIGRlIExpY2VuY2lhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5OjpFeHBpcmF0aW9uIERhdGUnfSA9ICdDbGF2ZSBkZSBMaWNlbmNpYTo6RmVjaGEgZGUgRXhwaXJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXk6OlF1YW50aXR5J30gPSAnQ2xhdmUgZGUgTGljZW5jaWE6OkNhbnRpZGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ1RpcG8gZGUgTGljZW5jaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICdNYW50ZW5pbWllbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnTsO6bWVybyBtw6F4aW1vIGRlIHVuIGVsZW1lbnRvICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ01lZGlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICdNaWRkbGV3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnTW9kZWxvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAnTcOzZGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICdNb25pdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnTW91c2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnQWRhcHRhZG9yIGRlIFJlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXI6OklQIEFkZHJlc3MnfSA9ICdBZGFwdGFkb3IgZGUgUmVkOjpEaXJlY2Npw7NuIElQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgb3ZlciBESENQJ30gPSAnQWRhcHRhZG9yIGRlIFJlZDo6SVAgU29icmUgREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICdEaXJlY2Npw7NuIGRlIFJlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3M6OkdhdGV3YXknfSA9ICdEaXJlY2Npw7NuIGRlIFJlZDo6UHVlcnRhIGRlIGVubGFjZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3M6OlN1Ym5ldCBNYXNrJ30gPSAnRGlyZWNjacOzbiBkZSBSZWQ6Ok3DoXNjYXJhIGRlIFN1YnJlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ0PDs2RpZ28gQWJpZXJ0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpbmcgU3lzdGVtJ30gPSAnU2lzdGVtYSBPcGVyYXRpdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdPcGVyYWNpb25hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ090cm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAnT3RybyBFcXVpcG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnT3V0bGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnVGFyamV0YSBQQ01DSUEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnQWdlbmRhIFBlcnNvbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnUG9yIE5vZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ1BvciBQcm9jZXNhZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICdQb3IgU2Vydmlkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICdQb3IgVXN1YXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnVGVsw6lmb25vIDEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJ1RlbMOpZm9ubyAyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnUGlsb3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICdQbGFuaWZpY2Fkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnSW1wcmVzb3JhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2R1Y3Rpb24nfSA9ICdQcm9kdWNjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ0NhbnRpZGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICdSYWNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ1JBTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICdSZXBhcmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnUmV0aXJhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnUmV2aXNhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJ0N1YXJ0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICdFbnJ1dGFkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ0VzY8OhbmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDb25maWcgSXRlbXMnfSA9ICdCdXNjYXIgRWxlbWVudG9zIGRlIENvbmZpZ3VyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ0Rpc3Bvc2l0aXZvIGRlIFNlZ3VyaWRhZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnTsO6bWVybyBTZXJpYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnU2Vydmlkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnQXBsaWNhY2nDs24gU2Vydmlkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnU08gU2Vydmlkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBWZXJzaW9ucyd9ID0gJ01vc3RyYXIgVmVyc2lvbmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnTGljZW5jaWEgw5puaWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAnTcOhc2NhcmEgZGUgU3VicmVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ1N3aXRjaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ0NvbmZlcmVuY2lhIHRlbGVmw7NuaWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICdQcnVlYmFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkZXBsb3ltZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdFbCBlc3RhZG8gZGUgaW1wbGVtZW50YWNpw7NuIGRlIGVzdGUgZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGluY2lkZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdFbCBlc3RhZG8gZGUgZXN0ZSBlbGVtZW50byBkZSBjb25maWd1cmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICdUaWVtcG8gUmVzdHJpbmdpZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ0Rpc3Bvc2l0aXZvIFVTQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICdJbGltaXRhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnSGVycmFtaWVudGEgZGUgVXN1YXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJ0xpY2VuY2lhIHBvciBWb2x1bWVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICdXTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnUHVudG8gZGUgQWNjZXNvIFdMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnRmVjaGEgZGUgRXhwaXJhY2nDs24gZGUgbGEgR2FyYW50w61hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ0x1Z2FyIGRlIHRyYWJham8nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdHZXN0acOzbiBkZSBFbGVtZW50b3MgZGUgQ29uZmlndXJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0nfSA9ICdFbGVtZW50byBkZSBDb25maWd1cmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGFzcyd9ID0gJ0NsYXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnRWwgbm9tYnJlIGRlIGVzdGUgZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlIGxhIEltcGxlbWVudGFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBkZWwgSW5jaWRlbnRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBBY3R1YWwgZGVsIEluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnw5psdGltYSBtb2RpZmljYWNpw7NuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBBY3R1YWwgZGUgbGEgSW1wbGVtZW50YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ8OabHRpbWEgbW9kaWZpY2FjacOzbiBwb3InOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBOZXcgVGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnwr9EZXNlYSBidXNjYXIgZW4gdmVyc2lvbmVzIGFudGVyaW9yZXM/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoUmVzdWx0UHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZVRpbWUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ03Ds2R1bG8gZGUgZXZlbnRvIGRlIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiBxdWUgaGFiaWxpdGEgZWwgYWNjZXNvIGEgbGEgaGlzdG9yaWEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnTMOtbWl0ZSBkZSBFbGVtZW50b3MgZGUgQ29uZmlndXJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlJ30gPSAnTMOtbWl0ZSBwb3IgcMOhZ2luYSBkZSBFbGVtZW50b3MgZGUgQ29uZmlndXJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUm91dGVyIGJhY2tlbmQgZGUgYsO6c3F1ZWRhIGRlIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiBkZSBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnRGVmaW5lIGVsIHN1Ym9iamV0byBwb3IgZGVmYXVsdCBkZSBsYSBjbGFzZSBcJ0lUU01Db25maWdJdGVtXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZCd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnTcOzZHVsbyBwYXJhIHZlcmlmaWNhciBlbCBncnVwbyByZXNwb25zYWJsZSBkZSB1bmEgY2xhc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnTcOzZHVsbyBwYXJhIHZlcmlmaWNhciBlbCBncnVwbyByZXNwb25zYWJsZSBkZSB1biBlbGVtZW50byBkZSBjb25maWd1cmFjacOzbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICdNw7NkdWxvIHBhcmEgZ2VuZXJhciBlc3RhZMOtc3RpY2FzIGRlIGxvcyBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGVsIG3Ds2R1bG8gZGUgb2JqZXRvIGJhY2tlbmQgcGFyYSBlbCBtw7NkdWxvIGRlIGltcG9ydGFjacOzbi9leHBvcnRhY2nDs24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGFyw6FtZXRyb3MgcGFyYSBsb3MgZXN0YWRvcyBkZSBpbXBsZW1lbnRhY2nDs24gZW4gbGEgdmlzdGEgZGUgcHJlZmVyZW5jaWFzIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICdQYXLDoW1ldHJvcyBwYXJhIGxhcyBww6FnaW5hcyAoZG9uZGUgc2UgbXVlc3RyYW4gbG9zIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Blcm1pc29zIG5lY2VzYXJpb3MgcGFyYSB1c2FyIGxhIHZlbnRhbmEgZGUgbG9zIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Blcm1pc29zIG5lY2VzYXJpb3MgcGFyYSB1c2FyIGxhIHZlbnRhbmEgZGUgYsO6c3F1ZWRhIGRlIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZXJtaXNvcyBuZWNlc2FyaW9zIHBhcmEgdXNhciBsYSB2ZW50YW5hIGRlIGRldGFsbGUgZGUgbG9zIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Blcm1pc29zIG5lY2VzYXJpb3MgcGFyYSB1c2FyIGxhIHZlbnRhbmEgcGFyYSBhZ3JlZ2FyIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZXJtaXNvcyBuZWNlc2FyaW9zIHBhcmEgdXNhciBsYSB2ZW50YW5hIGRlIGVkaWNpw7NuIGRlIGxvcyBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24gZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVybWlzb3MgbmVjZXNhcmlvcyBwYXJhIHVzYXIgbGEgdmVudGFuYSBkZSBoaXN0b3JpYWwgZGUgbG9zIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVybWlzb3MgbmVjZXNhcmlvcyBwYXJhIHVzYXIgbGEgdmVudGFuYSBkZSBpbXByZXNpw7NuIGRlIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICdTZWxlY2Npb25hIGVsIG3Ds2R1bG8gZ2VuZXJhZG9yIGRlIG7Dum1lcm9zIGRlIGxvcyBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24uICJBdXRvSW5jcmVtZW50YXIiIGluY3JlbWVudGEgZWwgbsO6bWVybyBkZWwgZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs247IGVsIFN5c3RlbUlELCBlbCBDb25maWdJdGVtQ2xhc3NJRCB5IGVsIGNvbnRhZG9yIHNvbiB1c2Fkb3MuIEVsIGZvcm1hdG8gZXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBwb3IgZWplbXBsbzogMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuIGxpbmsgZW4gZWwgbWVuw7ogcGFyYSB2aW5jdWxhciB1biBlbGVtZW50byBkZSBjb25maWd1cmFjacOzbiBjb24gb3RybyBvYmpldG8sIGVuIGxhIHZpc3RhIGRldGFsbGFkYSBkZSBkaWNobyBlbGVtZW50byBkZSBjb25maWd1cmFjacOzbiBkZSBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuIGxpbmsgZW4gZWwgbWVuw7ogcGFyYSBhY2NlZGVyIGEgbGEgaGlzdG9yaWEgZGUgdW4gZWxlbWVudG8gZGUgY29uZmlndXJhY2lvbiBlbiBzdSB2aXN0YSBkZXRhbGxhZGEsIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ011ZXN0cmEgdW4gbGluayBlbiBlbCBtZW7DuiBwYXJhIGR1cGxpY2FyIHVuIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpb24gZW4gc3UgdmlzdGEgZGV0YWxsYWRhLCBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTXVlc3RyYSB1biBsaW5rIGVuIGVsIG1lbsO6IHBhcmEgZWRpdGFyIHVuIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpb24gZW4gc3UgdmlzdGEgZGV0YWxsYWRhLCBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdG9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuIGxpbmsgZW4gZWwgbWVuw7ogcGFyYSByZWdyZXNhciBlbiBsYSB2aXN0YSBkZXRhbGxhZGEgZGUgdW4gZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs24gZGUgbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuIGxpbmsgZW4gZWwgbWVuw7ogcGFyYSBpbXByaW1pciB1biBlbGVtZW50byBkZSBjb25maWd1cmFjaW9uIGVuIHN1IHZpc3RhIGRldGFsbGFkYSwgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ011ZXN0cmEgbGEgaGlzdG9yaWEgZGUgbG9zIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiAob3JkZW5hZG9zIGludmVyc2FtZW50ZSkgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaXRoIHRoaXMgY29uZmlnIG9wdGlvbiBpdCBpcyBwb3NzaWJsZSB0byBkZWFjdGl2ZSB0aGUgZml4ZWQgb3ZlcnZpZXcgY29udHJvbCBiYXIgaW4gdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gb3ZlcnZpZXcuIEluIHNvbWUgc2NlbmFyaW9zIHRoaXMgd2lsbCBiZSBuZWNlc3NhcnksIGYuZS4gZHVlIHRvIHNtYWxsIHNjcmVlbiByZXNvbHV0aW9ucyBpbiBjb21iaW5hdGlvbiB3aXRoIGEgbG90IG9mIGNvbmZpZyBpdGVtIGNsYXNzZXMuJ30gPQogICAgICAgICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9mYV9JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZhX0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICfZhti02KfZhtuMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICfYp9io2LLYp9ixINmF2K/bjNix24zYqtuMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICfZiNiz2KfbjNmEINm+2LTYqtuM2KjYp9mG4oCM2q/bjNix24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmVhbWVyJ30gPSAn2b7Ysdiq2Ygg2KfZgdqp2YYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICfYs9in2K7YqtmF2KfZhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkNvbmZpZ0l0ZW1DcmVhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpDb25maWdJdGVtRGVsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6RGVmaW5pdGlvblVwZGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkRlcGxveW1lbnRTdGF0ZVVwZGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkluY2lkZW50U3RhdGVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpMaW5rQWRkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TGlua0RlbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6Ok5hbWVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWYWx1ZVVwZGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZlcnNpb25DcmVhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWZXJzaW9uRGVsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6QXR0YWNobWVudEFkZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkF0dGFjaG1lbnREZWxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAn2LPbjOKAjNm+24zigIzbjNmIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ9iv2YjYsdio24zZhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJ9i42LHZgduM2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIERlZmluaXRpb24nfSA9ICfYqti624zbjNixINiq2LnYsduM2YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIG9mIGRlZmluaXRpb24gZmFpbGVkISBTZWUgU3lzdGVtIExvZyBmb3IgZGV0YWlscy4nfSA9ICfYudmF2YTbjNin2Kog2KrYutuM24zYsSDYqti52LHbjNmBINmG2KfZhdmI2YHZgiDYqNmI2K8uINio2LHYp9uMINqp2LPYqCDYp9i32YTYp9i5INio24zYtNiq2LEgbG9nINiz24zYs9iq2YUg2LHYpyDYqNio24zZhtuM2K8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJ9io2LHZhtin2YXZh+KAjNmH2KfbjCDaqdmE2KfbjNmG2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAn2LPbjNiz2KrZhSDYudin2YXZhCDaqdmE2KfbjNmG2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uY3VycmVudCBVc2Vycyd9ID0gJ9qp2KfYsdio2LHYp9mGINmF2YjYp9iy24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0tQXJlYSd9ID0gJ9mF2K3Yr9mI2K/ZhyBDSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgYXZhaWxhYmxlJ30gPSAnQ0nZh9in24wg2K/YsSDYr9iz2KrYsdizJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBzaG93bid9ID0gJ0NJ2YfYp9uMINmG2YXYp9uM2LQg2K/Yp9iv2Ycg2LTYr9mHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJ9mG2LPYrtmHINmG2YXYp9uM2LTbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAn2LHZiNmF24zYstuMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAn2KfYrNin2LLZh+KAjNmG2KfZhdmHINiq2YjYs9i52Ycg2K/Zh9mG2K/Zhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICfYp9uM2LPYqtqv2KfZhyDYp9iq2LXYp9mEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ9iq2qnYq9uM2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICfYr9in2K7ZhNuMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJ9mB24zZhNiv2YfYp9uMINiu2KfZhNuMINmF2LTYrti1INmF24zigIzaqdmG2K8g2qnZhyDZhdmC2KfYr9uM2LEg2qnZhtmI2YbbjCDYqNin2YLbjCDYrtmI2KfZh9mG2K8g2YXYp9mG2K8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAn2KfYrNin2LLZh+KAjNmG2KfZhdmHINiz2KfYstmF2KfZhtuMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ9iq2KfYsduM2K4g2KfZhtmC2LbYpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAn2YXZhtmC2LbbjCDYtNiv2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRlFETid9ID0gJ0ZRRE4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICfYt9io2YLZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJ9mG2LHZhSDYp9mB2LLYp9ixINmF2KzYp9mG24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnR1NNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICdHYXRld2F5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJ9qp2KfYsdiqINqv2LHYp9mB24zaqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICfZh9in2LHYryDYr9uM2LPaqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2s6OkNhcGFjaXR5J30gPSAn2YfYp9ix2K8g2K/bjNiz2qk6Oti42LHZgduM2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlkZSBWZXJzaW9ucyd9ID0gJ9mI24zYsdin24zYtOKAjNmH2Kcg2LHYpyDZhdiu2YHbjCDaqdmGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICfYotiv2LHYsyBJUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICdJUCDYp9iyINi32LHbjNmCIERIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICfYqtiz2YfbjNmE2KfYqiBJVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmFjdGl2ZSd9ID0gJ9i624zYsSDZgdi52KfZhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICfYqtin2LHbjNiuINmG2LXYqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib3JkJ30gPSAn2LXZgdit2Ycg2qnZhNuM2K8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ9qp24zZgduMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgQ2hhbmdlJ30gPSAn2KLYrtix24zZhiDYqti624zbjNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAn2qnZhNuM2K8g2KfYrNin2LLZh+KAjNmG2KfZhdmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5OjpFeHBpcmF0aW9uIERhdGUnfSA9ICfaqdmE24zYryDYp9is2KfYstmH4oCM2YbYp9mF2Yc6Otiq2KfYsduM2K4g2KfZhtmC2LbYpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleTo6UXVhbnRpdHknfSA9ICfaqdmE24zYryDYp9is2KfYstmH4oCM2YbYp9mF2Yc6Otiq2LnYr9in2K8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAn2YbZiNi5INin2KzYp9iy2YfigIzZhtin2YXZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ9m+2LTYqtuM2KjYp9mG24wg2Ygg2Ybar9mH2K/Yp9ix24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICfYrdiv2Kfaqdir2LEg2LTZhdin2LHZhyDbjNqpINi52YbYtdixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAn2LHYs9in2YbZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAn2YXbjNin2YYg2KfZgdiy2KfYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJ9mF2K/ZhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ9mF2YjYr9mFJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICfYtdmB2K3ZhyDZhtmF2KfbjNi0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAn2YXYp9mI2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAn2qnYp9ix2Kog2LTYqNqp2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyOjpJUCBBZGRyZXNzJ30gPSAn2qnYp9ix2Kog2LTYqNqp2Yc6Otii2K/YsdizIElQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgb3ZlciBESENQJ30gPSAn2qnYp9ix2Kog2LTYqNqp2Yc6OklQINin2LIg2LfYsduM2YIgREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICfYotiv2LHYsyDYtNio2qnZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3M6OkdhdGV3YXknfSA9ICfYotiv2LHYsyDYtNio2qnZhzo6R2F0ZXdheSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3M6OlN1Ym5ldCBNYXNrJ30gPSAn2KLYr9ix2LMg2LTYqNqp2Yc6OlN1Ym5ldCBNYXNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAn2qnYryDYqNin2LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW5nIFN5c3RlbSd9ID0gJ9iz24zYs9iq2YUg2LnYp9mF2YQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICfYudmF2YTbjNin2KrbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ9i624zYsdmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ9iq2KzZh9uM2LLYp9iqINmF2KrZgdix2YLZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICfZvtix24zYsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJ9qp2KfYsdiqIFBDTUNJQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQREEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICfYqNmHINin2LLYp9uMINqp2KfZhdm+24zZiNiq2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ9io2Ycg2KfYstin24wg2b7Ysdiv2KfYsti02q/YsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAn2KjZhyDYp9iy2KfbjCDYs9ix2YjYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJ9io2Ycg2KfYstin24wg2qnYp9ix2KjYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAn2KrZhNmB2YYg27EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJ9iq2YTZgdmGINuyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAn2YbZhdmI2YbZhyDYotiy2YXYp9uM2LTbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAn2KjYsdmG2KfZhdmHINix24zYstuMINi02K/Zhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAn2obYp9m+2q/YsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9kdWN0aW9uJ30gPSAn2K/YsSDYrdin2YQg2KrZiNmE24zYryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ9iq2LnYr9in2K8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJ9mC2YHYs9mHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ9ix2YUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAn2KrYudmF24zYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAn2KjYp9iy2YbYtNiz2KrZhyDYtNiv2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAn2KjYp9iy2KjbjNmG24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJ9in2KrYp9mCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJ9mF2LPbjNix24zYp9ioJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjYW5uZXInfSA9ICfYp9iz2qnZhtixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDb25maWcgSXRlbXMnfSA9ICfYrNiz2KrYrNmI24wg2KLbjNiq2YXigIzZh9in24wg2b7bjNqp2LHYqNmG2K/bjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICfZiNiz2KfbjNmEINin2YXZhtuM2KrbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAn2LTZhdin2LHZhyDYs9ix24zYp9mEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJ9iz2LHZiNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ9mG2LHZhSDYp9mB2LLYp9ixINiz2LHZiNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJ9iz24zYs9iq2YUg2LnYp9mF2YQg2LPYsdmI2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBWZXJzaW9ucyd9ID0gJ9mI24zYsdin24zYtOKAjNmH2Kcg2LHYpyDZhtmF2KfbjNi0INio2K/Zhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ9in2KzYp9iy2YfigIzZhtin2YXZhyDYqtqp24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICdTdWJuZXQgTWFzayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICfYs9mI24zahic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ1RlbGNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICfYqtiz2Kov2KrYttmF24zZhiDaqduM2YHbjNiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkZXBsb3ltZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICfZiNi22LnbjNiqINmG2LXYqCDYp9uM2YYgQ0knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGluY2lkZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICfZiNi22LnbjNiqINix2K7Yr9in2K8g2KfbjNmGIENJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJ9iv2KfYsdin24wg2YXYrdiv2YjYr9mHINiy2YXYp9mG24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ9iq2KzZh9uM2LLYp9iqIFVTQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICfZhtin2YXYrdiv2YjYryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICfYp9io2LLYp9ixINqp2KfYsdio2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICfYp9is2KfYstmH4oCM2YbYp9mF2Ycg2K3YrNmF24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJ1dMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICfZhtmC2KfYtyDYr9iz2KrYsdiz24wgV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICfYqtin2LHbjNiuINin2YbZgti22KfbjCDYttmF2KfZhtiq4oCM2YbYp9mF2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAn2YXYrdmEINqp2KfYsSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ29uZmlnSXRlbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gTWFuYWdlbWVudCd9ID0gJ9mF2K/bjNix24zYqiBDSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgY2xhc3MgZGVmaW5pdGlvbid9ID0gJ9iq2LrbjNuM2LEg2KrYudix24zZgSDaqdmE2KfYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSd9ID0gJ9ii24zYqtmFINm+24zaqdix2KjZhtiv24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xhc3MnfSA9ICfaqdmE2KfYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uJ30gPSAn2KrYudix24zZgSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBDbGFzc2VzJ30gPSAn2YHbjNmE2KrYsSDYqNix2KfbjCDaqdmE2KfYs+KAjNmH2KcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgQ2xhc3MgZnJvbSB0aGUgbGlzdCB0byBjcmVhdGUgYSBuZXcgQ29uZmlnIEl0ZW0uJ30gPSAn2qnZhNin2LPbjCDYsdinINio2LHYp9uMINiz2KfYrtiqINuM2qkg2KLbjNiq2YUg2b7YqNqp2LHYqNmG2K/bjCDYrNiv24zYryDYp9mG2KrYrtinINqp2YbbjNivLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICfZhtin2YUg2KfbjNmGINii24zYqtmF4oCM2YfYp9uMINm+24zaqdix2KjZhtiv24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAn2YjYtti524zYqiDZhti12KgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICfZiNi22LnbjNiqINix2K7Yr9in2K8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAn2KrZhti424zZhdin2Kog2YXZgdin2K8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAn2KrYudiv2KfYryDYotuM2KrZheKAjNmH2KfbjCDZvtuM2qnYsdio2YbYr9uMINiv2LEg2YfYsSDYtdmB2K3Zhyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJ9mG2YjYuSDZiNi22LnbjNiqINmG2LXYqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn2YjYtti524zYqiDYrNin2LHbjCDYsdiu2K/Yp9ivJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ9mG2YjYuSDZiNi22LnbjNiqINis2KfYsduMINix2K7Yr9in2K8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn2KLYrtix24zZhiDYqti624zbjNixJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICfYotuM2KrZhSDZvtuM2qnYsdio2YbYr9uMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0tSW5mbyd9ID0gJ9in2LfZhNin2LnYp9iqINii24zYqtmFINm+24zaqdix2KjZhtiv24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAn2YjYtti524zYqiDZgdi52YTbjCDZhti12KgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn2KLYrtix24zZhiDYqti624zbjNixINio2Ycg2YjYs9uM2YTZhyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBUZW1wbGF0ZSd9ID0gJ9iz2KfYrtiq2YYg2YLYp9mE2Kgg2KzYr9uM2K8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAn2K/YsSDZiNuM2LHYp9uM2LTigIzZh9in24wg2YLYqNmE24wg2YfZhSDYrNiz2KrYrNmIINin2YbYrNin2YUg2LTZiNiv2J8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2hSZXN1bHRQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlVGltZSd9ID0gJ9iy2YXYp9mGINiz2KfYrtiq2YYnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICfYotuM2KrZhSDZvtuM2qnYsdio2YbYr9uMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAn2YbZhdin24zYtCDbjNqpINmG2LPYrtmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAn2YbZhdin24zYtCDYqtmF2KfZhSDZhtiz2K7Zh+KAjNmH2KcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJ9mI2LbYuduM2Kog2LHYrtiv2KfYryDZhtiz2K7Zhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJ9i02YXYp9ix2Ycg2YbYs9iu2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJ9is2LLYptuM2KfYqiDZhtiz2K7ZhyDYotuM2KrZhSDZvtuM2qnYsdio2YbYr9uMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAn2YjbjNqY2q/bjCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfZhdin2pjZiNmEINix2YjbjNiv2KfYryDYotuM2KrZhSDZvtuM2qnYsdio2YbYr9uMINqp2Ycg2KvYqNiqINmI2YLYp9uM2Lkg2K/YsSDYqtin2LHbjNiu2obZhyDYsdinINiv2LEg2YjYp9iz2Lcg2qnYp9ix2KjYsduMINqp2KfYsdi02YbYp9izINmB2LnYp9mEINmF24zigIzYs9in2LLYry4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAn2YXYrdiv2YjYr9uM2Kog2KLbjNiq2YUg2b7bjNqp2LHYqNmG2K/bjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UnfSA9ICfZhdit2K/ZiNiv24zYqiDYotuM2KrZhSDZvtuM2qnYsdio2YbYr9uMINiv2LEg2YfYsSDYtdmB2K3Zhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLid9ID0gJ9iz2KfYrtiqINmIINmF2K/bjNix24zYqiDYqti52KfYsduM2YEg2KLbjNiq2YXigIzZh9in24wg2b7bjNqp2LHYqNmG2K/bjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGxpc3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdG9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpdGggdGhpcyBjb25maWcgb3B0aW9uIGl0IGlzIHBvc3NpYmxlIHRvIGRlYWN0aXZlIHRoZSBmaXhlZCBvdmVydmlldyBjb250cm9sIGJhciBpbiB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBvdmVydmlldy4gSW4gc29tZSBzY2VuYXJpb3MgdGhpcyB3aWxsIGJlIG5lY2Vzc2FyeSwgZi5lLiBkdWUgdG8gc21hbGwgc2NyZWVuIHJlc29sdXRpb25zIGluIGNvbWJpbmF0aW9uIHdpdGggYSBsb3Qgb2YgY29uZmlnIGl0ZW0gY2xhc3Nlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9mcl9JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZyX0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICdBZHJlc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICdPdXRpbCBkXCdBZG1pbmlzdHJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnRWxlbWVudCBkZSBzYXV2ZWdhcmRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ1LDqXRyb3Byb2plY3RldXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICdCYXRpbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkNvbmZpZ0l0ZW1DcmVhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpDb25maWdJdGVtRGVsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6RGVmaW5pdGlvblVwZGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkRlcGxveW1lbnRTdGF0ZVVwZGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkluY2lkZW50U3RhdGVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpMaW5rQWRkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TGlua0RlbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6Ok5hbWVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWYWx1ZVVwZGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZlcnNpb25DcmVhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWZXJzaW9uRGVsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6QXR0YWNobWVudEFkZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkF0dGFjaG1lbnREZWxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnQ1BVJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ0NhbcOpcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICdDYXBhY2l0w6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIERlZmluaXRpb24nfSA9ICdEw6lmaW5pdGlvbiBkdSBDaGFuZ2VtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBvZiBkZWZpbml0aW9uIGZhaWxlZCEgU2VlIFN5c3RlbSBMb2cgZm9yIGRldGFpbHMuJ30gPSAnTW9kaWZpY2F0aW9uIGRlIGxhIGTDqWZpbml0aW9uIMOpY2hvdcOpZSEgUmVnYXJkZXogbGVzIExvZyBTeXN0w6htZXMgcG91ciBwbHVzIGRlIGTDqXRhaWxzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICdBcHBsaWNhdGlvbiBDbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJ09TIENsaWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25jdXJyZW50IFVzZXJzJ30gPSAnVXRpbGlzYXRldXJzIGNvbmN1cnJlbnRzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtLUFyZWEnfSA9ICdab25lIGRlcyBFbMOpbWVudHMgZGUgQ29uZmlndXJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgYXZhaWxhYmxlJ30gPSAnRWzDqW1lbnRzIGRlIGNvbmZpZ3VyYXRpb24gZGlzcG9uaWJsZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHNob3duJ30gPSAnRWzDqW1lbnRzIGRlIGNvbmZpZ3VyYXRpb24gbW9udHLDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAnRGVtbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnT3JkaW5hdGV1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ0xpY2Vuc2UgRMOpdmVsb3BwZXVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJ0Jhc2UgcG91ciBQb3J0YWJsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICdEdXBsaXF1ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICdFbWJhcnF1w6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ0xpY2Vuc2UgRW50cmVwcmlzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICdEYXRlIGRcJ2V4cGlyYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ0V4cGlyw6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRlFETid9ID0gJ0ZRRE4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICdFdGFnZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJ0ZyZWV3YXJlL0dyYXRpY2llbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICdHU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJ1Bhc3NlcmVsbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnQWRhcHRhdGV1ciBncmFwaGlxdWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnRGlzcXVlIGR1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2s6OkNhcGFjaXR5J30gPSAnRGlzcXVlIGR1cjo6Q2FwYWNpdMOpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpZGUgVmVyc2lvbnMnfSA9ICdDYWNoZXIgbGVzIFZlcnNpb25zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdBZHJlc3NlIElQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0lQIHN1ciBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnRMOpcGFydGVtZW50IElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luYWN0aXZlJ30gPSAnSW5hY3RpZic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ0luY2lkZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJ0RhdGUgZFwnaW5zdGFsbGF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvcmQnfSA9ICdDbGF2aWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICdQb3J0YWJsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IENoYW5nZSd9ID0gJ0Rlcm5pw6hyZSBtb2RpZmljYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICdDbMOpIGRlIGxhIGxpY2Vuc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXk6OkV4cGlyYXRpb24gRGF0ZSd9ID0gJ0Nsw6kgZGUgbGEgbGljZW5zZTo6RGF0ZSBkXCdleHBpcmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5OjpRdWFudGl0eSd9ID0gJ0Nsw6kgZGUgbGEgbGljZW5zZTo6UXVhbnRpdMOpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ1R5cGUgZGUgbGljZW5zZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ01haW50ZW5hbmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnUXVhbnRpdMOpIG1heGltYWxlIHBvdXIgdW4gw6lsw6ltZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnTWVkaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJ01pZGRsZXdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICdNb2TDqGxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAnTW9kZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJ01vbml0ZXVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnU291cmlzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJ0FkYXB0YXRldXIgcsOpc2VhdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXI6OklQIEFkZHJlc3MnfSA9ICdBZGFwdGF0ZXVyIHLDqXNlYXU6OiBBZHJlc3NlIElQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgb3ZlciBESENQJ30gPSAnQWRhcHRhdGV1ciByw6lzZWF1OjpJUCBzdXIgREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICdBZHJlc3NlIHLDqXNlYXUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzOjpHYXRld2F5J30gPSAnQWRyZXNzZSByw6lzZWF1OjpQYXNzZXJlbGxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzczo6U3VibmV0IE1hc2snfSA9ICdBZHJlc3NlIHLDqXNlYXU6Ok1hc3F1ZSBkdSBzb3VzIHLDqXNlYXUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICdPcGVuIFNvdXJjZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpbmcgU3lzdGVtJ30gPSAnU3lzdMOobWUgZFwnZXhwbG9pdGF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnT3DDqXJhdGlvbm5lbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0F1dHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ0F1dHJlIMOpcXVpcGVtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJ1ByaXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnQ2FydGUgUENNQ0lBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJ1BEQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJ1BhciBub2V1ZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnUGFyIHByb2Nlc3NldXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJ1BhciBTZXJ2ZXVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnUGFyIFV0aWxpc2F0ZXVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDEnfSA9ICdUw6lsw6lwaG9uZSAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICdUw6lsw6lwaG9uZSAyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnUGlsb3RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICdQbGFuaWZpw6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJ0ltcHJpbWFudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvZHVjdGlvbid9ID0gJ1Byb2R1Y3Rpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICdRdWFudGl0w6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJ1JhY2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnUkFNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ0VuIHLDqXBhcmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICdSZXRpcsOpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJ1JldnVlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICdQacOoY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAnUm91dGV1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnU2Nhbm5lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ29uZmlnIEl0ZW1zJ30gPSAnQ2hlcmNoZXIgZGFucyBsZXMgw6lsw6ltZW50cyBkZSBjb25maWd1cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ1DDqXJpcGjDqXJpcXVlIGRlIHPDqWN1cml0w6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJ051bcOpcm8gZGUgc8OpcmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJ1NlcnZldXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnQXBwbGljYXRpb24gU2VydmV1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICdPUyBTZXJ2ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBWZXJzaW9ucyd9ID0gJ01vbnRyZXIgbGVzIFZlcnNpb25zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnTGljZW5zZSB1bmlxdWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICdNYXNxdWUgZHUgc291cyByw6lzZWF1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ1N3aXRjaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ1RlbGNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICdUZXN0L1FBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkZXBsb3ltZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdMXCfDqXRhdCBkZSBkw6lwbG9pZW1lbnQgZGUgY2V0IMOpbMOpbWVudCBkZSBjb25maWd1cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnTFwnw6l0YXQgZFwnaW5jaWRlbnQgZGUgY2V0IMOpbMOpbWVudCBkZSBjb25maWd1cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJ0xpbWl0w6llIGRhbnMgbGUgdGVtcHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ1DDqXJpcGjDqXJpcXVlIFVTQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICdJbGxpbWl0w6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnT3V0aWwgVXRpbGlzYXRldXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICdMaWNlbnNlIHBhciB2b2x1bWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJ1dMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICdQb2ludCBkXCdhY2Nlc3MgV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICdEYXRlIGRcJ2V4cGlyYXRpb24gZGUgbGEgZ2FyYW50aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnRW1wbGFjZW1lbnQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdHZXN0aW9uIGRlcyBFbMOpbWVudHMgZGUgQ29uZmlndXJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgY2xhc3MgZGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSd9ID0gJ0Vsw6ltZW50IGRlIGNvbmZpZ3VyYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xhc3MnfSA9ICdDbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBDbGFzc2VzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIENsYXNzIGZyb20gdGhlIGxpc3QgdG8gY3JlYXRlIGEgbmV3IENvbmZpZyBJdGVtLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdMZSBub20gZGUgY2V0IMOpbMOpbWVudCBkZSBjb25maWd1cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSd9ID0gJ0V0YXQgZGUgZMOpcGxvaWVtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXRhdCBkZSBsXCdpbmNpZGVudCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdFdGF0IGFjdHVlbCBkZSBsXCdpbmNpZGVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0tSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICdFdGF0IGFjdHVlbCBkZSBkw6lwbG9pZW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBlZmZlY3R1w6llIHBhcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnQ2hlcmNoZXIgw6lnYWxlbWVudCBkYW5zIGxlcyB2ZXJzaW9ucyBwcsOpY8OpZGVudGVzPz8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2hSZXN1bHRQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlVGltZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCB2ZXJzaW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaXRoIHRoaXMgY29uZmlnIG9wdGlvbiBpdCBpcyBwb3NzaWJsZSB0byBkZWFjdGl2ZSB0aGUgZml4ZWQgb3ZlcnZpZXcgY29udHJvbCBiYXIgaW4gdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gb3ZlcnZpZXcuIEluIHNvbWUgc2NlbmFyaW9zIHRoaXMgd2lsbCBiZSBuZWNlc3NhcnksIGYuZS4gZHVlIHRvIHNtYWxsIHNjcmVlbiByZXNvbHV0aW9ucyBpbiBjb21iaW5hdGlvbiB3aXRoIGEgbG90IG9mIGNvbmZpZyBpdGVtIGNsYXNzZXMuJ30gPQogICAgICAgICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9pdF9JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Oml0X0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ1N0cnVtZW50aSBkaSBBbW1pbmlzdHJhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ0Rpc3Bvc2l0aXZvIGRpIENvcGlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ1ZpZGVvIEJlYW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpDb25maWdJdGVtQ3JlYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbURlbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkRlZmluaXRpb25VcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpEZXBsb3ltZW50U3RhdGVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpJbmNpZGVudFN0YXRlVXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TGlua0FkZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkxpbmtEZWxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpOYW1lVXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmFsdWVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWZXJzaW9uQ3JlYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmVyc2lvbkRlbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkF0dGFjaG1lbnRBZGQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpBdHRhY2htZW50RGVsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ0NQVSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICdWaWRlb2NhbWVyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJ0NhcGFjaXTDoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVmaW5pdGlvbid9ID0gJ01vZGlmaWNhIERlZmluaXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBvZiBkZWZpbml0aW9uIGZhaWxlZCEgU2VlIFN5c3RlbSBMb2cgZm9yIGRldGFpbHMuJ30gPSAnQWdnaW9ybmFtZW50byBkZWxsZSBkZWZpbml6aW9uaSBmYWxsaXRhISBHdWFyZGEgbmVsIExvZyBkZWwgU2lzdGVtYSBwZXIgZGV0dGFnbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAnQXBwbGljYXppb25lIENsaWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAnU08gQ2xpZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25jdXJyZW50IFVzZXJzJ30gPSAnVXRlbnRpIGNvbmNvcnJlbnRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtLUFyZWEnfSA9ICdBcmVhIGRpIENvbmZpZ3VyYXppb25lIGRlZ2xpIEVsZW1lbnRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBhdmFpbGFibGUnfSA9ICdFbGVtZW50aSBkaSBjb25maWd1cmF6aW9uZSBkaXNwb25pYmlsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgc2hvd24nfSA9ICdFbGVtZW50aSBkaSBjb25maWd1cmF6aW9uZSBtb3N0cmF0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICdEaW1vc3RyYXRpdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJ0Rlc2t0b3AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICdMaWNlbnphIGRpIFN2aWx1cHBvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJ0RvY2tpbmcgU3RhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICdEdXBsaWNhdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICdFbWJlZGRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAnTGljZW56YSBBemllbmRhbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnRGF0YSBkaSBzY2FkZW56YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAnU2NhZHV0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGUUROJ30gPSAnRlFETic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJ0ZyZWV3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJ0dTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnR2F0ZXdheSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICdTY2hlZGEgR3JhZmljYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICdEaXNjbyBSaWdpZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrOjpDYXBhY2l0eSd9ID0gJ0Rpc2NvIFJpZ2lkbzo6Q2FwYWNpdMOgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpZGUgVmVyc2lvbnMnfSA9ICdOYXNjb25kaSBWZXJzaW9uaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnSW5kaXJpenpvIElQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0lQIHN1IERIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5hY3RpdmUnfSA9ICdJbmF0dGl2byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICdEYXRhIGRpIGluc3RhbGxhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9yZCd9ID0gJ1Rhc3RpZXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICdQb3J0YXRpbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBDaGFuZ2UnfSA9ICdVbHRpbWEgbW9kaWZpY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICdDaGlhdmUgZGVsbGEgTGljZW56YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleTo6RXhwaXJhdGlvbiBEYXRlJ30gPSAnQ2hpYXZlIGRlbGxhIExpY2VuemE6OkRhdGEgZGkgc2NhZGVuemEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXk6OlF1YW50aXR5J30gPSAnQ2hpYXZlIGRlbGxhIExpY2VuemE6OlF1YW50aXTDoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIFR5cGUnfSA9ICdUaXBvIGRpIExpY2VuemEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICdNYW51dGVuemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICdOdW1lcm8gbWFzc2ltbyBkaSB1biBlbGVtZW50byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ1N1cHBvcnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICdNaWRkbGV3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnTW9kZWxsbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ01vZGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICdNb25pdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnTW91c2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnQWRhdHRhdG9yZSBkaSBSZXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgQWRkcmVzcyd9ID0gJ0FkYXR0YXRvcmUgZGkgUmV0ZTo6SW5kaXJpenpvIElQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgb3ZlciBESENQJ30gPSAnQWRhdHRhdG9yZSBkaSBSZXRlOjpJUCBzdSBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJ0luZGlyaXp6byBkaSBSZXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzczo6R2F0ZXdheSd9ID0gJ0luZGlyaXp6byBkaSBSZXRlOjpHYXRld2F5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzczo6U3VibmV0IE1hc2snfSA9ICdJbmRpcml6em8gZGkgUmV0ZTo6U3VibmV0IE1hc2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICdPcGVuIFNvdXJjZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpbmcgU3lzdGVtJ30gPSAnU2lzdGVtYSBPcGVyYXRpdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdPcGVyYXRpdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdBbHRybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICdBbHRyZSBBcHBhcmVjY2hpYXR1cmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnU2NoZWRhIFBDTUNJQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQYWxtYXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnUGVyIE5vZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ1BlciBQcm9jZXNzb3JlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICdQZXIgU2VydmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnUGVyIFV0ZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICdQaWxvdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnUGlhbmlmaWNhdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJ1N0YW1wYW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9kdWN0aW9uJ30gPSAnUHJvZHV6aW9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ1F1YW50aXTDoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ1JhbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICdSaXBhcmF6aW9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnUml0aXJhdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnUmV2aXNpb25hdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICdSb3V0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ1NjYW5uZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENvbmZpZyBJdGVtcyd9ID0gJ1JpY2VyY2EgZWxlbWVudGkgZGkgY29uZmlndXJhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnRGlzcG9zaXRpdm8gZGkgc2ljdXJlenphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICdOdW1lcm8gU2VyaWFsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICdTZXJ2ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnQXBsaWNhemlvbmUgU2VydmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJ1NPIFNlcnZlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IFZlcnNpb25zJ30gPSAnTW9zdHJhIFZlcnNpb25pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnU2luZ2xlIExpY2VuY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICdTdWJuZXQgTWFzayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICdTd2l0Y2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICdUZWxjbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAnVGVzdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnTG8gc3RhdG8gZGkgaW1wbGVtZW50YXppb25lIGRpIHF1ZXN0byBlbGVtZW50byBkaSBjb25maWd1cmF6aW9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ0xvIHN0YXRvIGRpIGluY2lkZW50ZSBkaSBxdWVzdG8gZWxlbWVudG8gZGkgY29uZmlndXJhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnTGltaXRhdGEgbmVsIHRlbXBvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICdEaXNwb3NpdGl2byBVU0InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnSWxsaW1pdGF0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICdTdHJ1bWVudGkgVXRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvbHVtZSBMaWNlbmNlJ30gPSAnTGljZW56YSBwZXIgVm9sdW1lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICdXTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnV0xBTiBBY2Nlc3MgUG9pbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnRGF0YSBkaSBzY2FkZW56YSBkZWxsYSBnYXJhbnppYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrcGxhY2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdHZXN0aW9uZSBkZWdsaSBFbGVtZW50aSBkaSBDb25maWd1cmF6aW9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgY2xhc3MgZGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSd9ID0gJ0VsZW1lbnRvIGRpIENvbmZpZ3VyYXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnQ2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnSWwgbm9tZSBkaSBxdWVzdG8gZWxlbWVudG8gZGkgY29uZmlndXJhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnU3RhdG8gZGkgaW1wbGVtZW50YXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnU3RhdG8gZGVsbFwnSW5jaWRlbnRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YXRvIGF0dHVhbGUgZGVsbFwnSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdVbHRpbWEgbW9kaWZpY2EnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1QcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAnU3RhdG8gYXR0dWFsZSBkaSBpbXBsZW1lbnRhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnVWx0aW1hIG1vZGlmaWNhIGRpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgTmV3IFRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fsc28gc2VhcmNoIGluIHByZXZpb3VzIHZlcnNpb25zPyd9ID0gJ0NlcmNhcmUgYW5jaGUgaW4gdmVyc2lvbmkgcHJlY2VkZW50aT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2hSZXN1bHRQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlVGltZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCB2ZXJzaW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaXRoIHRoaXMgY29uZmlnIG9wdGlvbiBpdCBpcyBwb3NzaWJsZSB0byBkZWFjdGl2ZSB0aGUgZml4ZWQgb3ZlcnZpZXcgY29udHJvbCBiYXIgaW4gdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gb3ZlcnZpZXcuIEluIHNvbWUgc2NlbmFyaW9zIHRoaXMgd2lsbCBiZSBuZWNlc3NhcnksIGYuZS4gZHVlIHRvIHNtYWxsIHNjcmVlbiByZXNvbHV0aW9ucyBpbiBjb21iaW5hdGlvbiB3aXRoIGEgbG90IG9mIGNvbmZpZyBpdGVtIGNsYXNzZXMuJ30gPQogICAgICAgICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9qYV9JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmphX0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICfnrqHnkIbjg4Tjg7zjg6snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ+ODkOODg+OCr+OCouODg+ODl+ODu+ODh+ODkOOCpOOCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICfjg5fjg63jgrjjgqfjgq/jgr/jg7wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICfmp4vnr4knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpDb25maWdJdGVtQ3JlYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbURlbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkRlZmluaXRpb25VcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpEZXBsb3ltZW50U3RhdGVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpJbmNpZGVudFN0YXRlVXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TGlua0FkZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkxpbmtEZWxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpOYW1lVXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmFsdWVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWZXJzaW9uQ3JlYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmVyc2lvbkRlbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkF0dGFjaG1lbnRBZGQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpBdHRhY2htZW50RGVsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICfjgqvjg6Hjg6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIERlZmluaXRpb24nfSA9ICflrprnvqnjga7lpInmm7QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIG9mIGRlZmluaXRpb24gZmFpbGVkISBTZWUgU3lzdGVtIExvZyBmb3IgZGV0YWlscy4nfSA9ICflrprnvqnjga7lpInmm7TjgavlpLHmlZfjgZfjgb7jgZfjgZ/jgILoqbPntLDjga/jgrfjgrnjg4bjg6Djg63jgrDjgpLlj4LnhafjgZfjgabjgY/jgaDjgZXjgYTjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAn44Kv44Op44Kk44Ki44Oz44OI44K944OV44OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJ+OCr+ODqeOCpOOCouODs+ODiE9TJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmN1cnJlbnQgVXNlcnMnfSA9ICflkIzmmYLlrp/ooYzjg6bjg7zjgrYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0tQXJlYSd9ID0gJ+OCouOCpOODhuODoOOCqOODquOCouOBruioreWumic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgYXZhaWxhYmxlJ30gPSAn6Kit5a6a6aCF55uu44Gu5Yip55So5Y+vIC8g5LiN5Y+vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBzaG93bid9ID0gJ+ioreWumumgheebruihqOekuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICfjg4fjg6InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJ+ODh+OCueOCr+ODiOODg+ODlyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ+mWi+eZuuiAheODqeOCpOOCu+ODs+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICfjg4njg4Pjgq3jg7PjgrDjgrnjg4bjg7zjgrfjg6fjg7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAn44Kz44OU44O8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAn5Z+L44KB6L6844G/44Kq44OW44K444Kn44Kv44OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ+OCqOODs+OCv+ODvOODl+ODqeOCpOOCuuODu+ODqeOCpOOCu+ODs+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICfmnInlirnmnJ/pmZAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ+acn+mZkOWIh+OCjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGUUROJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zsb29yJ30gPSAn5YiH5o2o44GmJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAn44OV44Oq44O844Km44Kn44KiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICfjgrDjg6njg5XjgqPjg4Pjgq/jgqLjg4Djg5fjgr8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrOjpDYXBhY2l0eSd9ID0gJ+ODj+ODvOODieODh+OCo+OCueOCr+WuuemHjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaWRlIFZlcnNpb25zJ30gPSAn44OQ44O844K444On44Oz44KS6Z2e6KGo56S6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0RIQ1DmnInlirknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICdJVOODleOCoeOCt+ODquODhuOCoyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmFjdGl2ZSd9ID0gJ+eEoeWKueOBric7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib3JkJ30gPSAn44Kt44O844Oc44O844OJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICfjg47jg7zjg4hQQyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IENoYW5nZSd9ID0gJ+acgOaWsOOBruWkieabtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleTo6RXhwaXJhdGlvbiBEYXRlJ30gPSAn44Op44Kk44K744Oz44K544Kt44O844Gu5pyJ5Yq55pyf6ZmQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5OjpRdWFudGl0eSd9ID0gJ+ODqeOCpOOCu+ODs+OCueOCreODvOOBruaVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ+ODoeODs+ODhuODiuODs+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAn44Of44OJ44Or44Km44Kn44KiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAn44Oi44OH44OgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICfjg6Ljg4vjgr8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICfjg57jgqbjgrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyOjpJUCBvdmVyIERIQ1AnfSA9ICfjg43jg4Pjg4jjg6/jg7zjgq/jg7tESENQ5pyJ5Yq5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzczo6R2F0ZXdheSd9ID0gJ+ODh+ODleOCqeODq+ODiOOCsuODvOODiOOCpuOCp+OCpCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3M6OlN1Ym5ldCBNYXNrJ30gPSAn44K144OW44ON44OD44OI44Oe44K544KvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAn44Kq44O844OX44Oz44K944O844K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAn6YGL55SoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAn5LuWJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ+OBneOBruS7luOBruapn+WZqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICfjgqLjgqbjg4jjg6zjg4Pjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICdQQ01DSUEg44Kr44O844OJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJ+ODjuODvOODieavjic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAn44OX44Ot44K744OD44K15q+OJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICfjgrXjg7zjg5Dmr44nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICfjg6bjg7zjgrbmr44nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ+mbu+ipsSAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICfpm7voqbEgMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJ+ODkeOCpOODreODg+ODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAn6KiI55S7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICfjg5fjg6rjg7Pjgr8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvZHVjdGlvbid9ID0gJ+eUn+eUoyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ+aVsOmHjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAn44Op44OD44KvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ1JBTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICfkv67nkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJ+W8lemAgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICfjg6zjg5Pjg6Xjg7wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJ+WupOWGhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICfjg6vjg7zjgr8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ+OCueOCreODo+ODiic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ29uZmlnIEl0ZW1zJ30gPSAn6Kit5a6a6aCF55uu44Gu5qSc57SiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ+OCu+OCreODpeODquODhuOCo+ODh+ODkOOCpOOCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICfjgrXjg7zjg5AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAn44K144O844OQ44K944OV44OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJ+OCteODvOODkE9TJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgVmVyc2lvbnMnfSA9ICfjg5Djg7zjgrjjg6fjg7Pjga7ooajnpLonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICfjgrfjg7PjgrDjg6vjg6njgqTjgrvjg7PjgrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAn44K544Kk44OD44OBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAn6Zu76Kmx5Lya56S+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICfjg4bjgrnjg4ggLyBRQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAn44GT44Gu6Kit5a6a6aCF55uu44Gu5bGV6ZaL54q25oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAn44GT44Gu6Kit5a6a6aCF55uu44Gu44Kk44Oz44K344OH44Oz44OI54q25oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJ+aZgumWk+WItumZkCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnVVNC44OH44OQ44Kk44K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJ+eEoeWItumZkCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICfjg6bjg7zjgrbjg7vjg4Tjg7zjg6snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICfjg5zjg6rjg6Xjg7zjg6Djg6njgqTjgrvjg7PjgrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJ1dMQU4g44Ki44Kv44K744K544Od44Kk44Oz44OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ+iBt+WgtCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ29uZmlnSXRlbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gTWFuYWdlbWVudCd9ID0gJ+ani+aIkOOCouOCpOODhuODoOeuoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgY2xhc3MgZGVmaW5pdGlvbid9ID0gJ+OCr+ODqeOCueWumue+qeOCkuWkieabtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uJ30gPSAn6KiY6L+wJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtQWRkCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICfjgrPjg7Pjg4bjgq3jgrnjg4jjga7oqK3lrponOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnMeODmuODvOOCuOavjuOBruioreWumumgheebric7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJ+WxlemWi+OBrueKtuaFiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn54++5Zyo44Gu44Kk44Oz44K344OH44Oz44OI54q25oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ+ePvuWcqOOBruOCpOODs+OCt+ODh+ODs+ODiOeKtuaFi+OBruOCv+OCpOODlyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfmnIDntYLlpInmm7Tml6XmmYInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1QcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJ+ioreWumumgheebric7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtLUluZm8nfSA9ICfoqK3lrprpoIXnm67mg4XloLEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAn54++5Zyo44Gu5bGV6ZaL54q25oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ+acgOe1guWkieabtOiAhSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAn44OX44Os44OT44Ol44O85pmC44CB5Lul5YmN44Gu44OQ44O844K444On44Oz44KC5qSc57Si5a++6LGh44Go44GX44G+44GZ44GL77yfJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoUmVzdWx0UHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZVRpbWUnfSA9ICfkvZzmiJDml6XmmYInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICfoqbPntLDoqK3lrponOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICfoqqzmmI7jgpLooajnpLonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICfjgZnjgbnjgabjga7oqqzmmI7jgpLooajnpLonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJ+OCpOODs+OCt+ODh+ODs+ODiOeKtuaFiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJ+ODkOODvOOCuOODp+ODs+ODiuODs+ODkOODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAn5qeL5oiQ44Gu6Kmz57SwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAn6aCF55uuJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaXRoIHRoaXMgY29uZmlnIG9wdGlvbiBpdCBpcyBwb3NzaWJsZSB0byBkZWFjdGl2ZSB0aGUgZml4ZWQgb3ZlcnZpZXcgY29udHJvbCBiYXIgaW4gdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gb3ZlcnZpZXcuIEluIHNvbWUgc2NlbmFyaW9zIHRoaXMgd2lsbCBiZSBuZWNlc3NhcnksIGYuZS4gZHVlIHRvIHNtYWxsIHNjcmVlbiByZXNvbHV0aW9ucyBpbiBjb21iaW5hdGlvbiB3aXRoIGEgbG90IG9mIGNvbmZpZyBpdGVtIGNsYXNzZXMuJ30gPQogICAgICAgICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9tc19JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om1zX0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICdBbGFtYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ0FkbWluIFRvb2wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ1BlcmFsYXRhbiBCYWNrdXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmVhbWVyJ30gPSAnQmVhbWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAnQmFuZ3VuYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpDb25maWdJdGVtQ3JlYXRlJ30gPSAnQ29uZmlnSXRlbSBCYXJ1IChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpDb25maWdJdGVtRGVsZXRlJ30gPSAnQ29uZmlnSXRlbSAoSUQ9JXMpIGRpcGFkYW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpEZWZpbml0aW9uVXBkYXRlJ30gPSAnRGVmaW5pc2kgQ29uZmlnSXRlbXMgZGlrZW1hc2tpbmkgKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkRlcGxveW1lbnRTdGF0ZVVwZGF0ZSd9ID0gJ0d1bmFrYW4gc3RhdHVzIGJlcnViYWggKGJhcnU9JXM7IGxhbWE9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6SW5jaWRlbnRTdGF0ZVVwZGF0ZSd9ID0gJ1N0YXR1cyBJbnNpZGVuIGJlcnViYWggKGJhcnU9JXM7IGxhbWE9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TGlua0FkZCd9ID0gJ1BhdXRhbiBkaXRhbWJhaCBwYWRhICVzIChqZW5pcz0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpMaW5rRGVsZXRlJ30gPSAnUGF1dGFuIGRpcGFkYW0gcGFkYSAlcyAoamVuaXM9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TmFtZVVwZGF0ZSd9ID0gJ25hbWEgZGl0dWthciAoYmFydT0lczsgbGFtYT0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWYWx1ZVVwZGF0ZSd9ID0gJ0F0cmlidXQlIHMgIiVzIiBrZXBhZGEgIiVzIiBiZXJ1YmFoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmVyc2lvbkNyZWF0ZSd9ID0gJ1ZlcnNpIGJhcnUgbWVuamFuYSAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmVyc2lvbkRlbGV0ZSd9ID0gJ1ZlcnNpICVzIGRpcGFkYW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnQ1BVJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ0thbWVyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJ011YXRhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVmaW5pdGlvbid9ID0gJ1ViYWggZGVmaW5pc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIG9mIGRlZmluaXRpb24gZmFpbGVkISBTZWUgU3lzdGVtIExvZyBmb3IgZGV0YWlscy4nfSA9ICdQZXJ1YmFoYW4gZGVmaW5pc2kgZ2FnYWwhIExpaGF0IExvZyBTaXN0ZW0gdW50dWsgbWFrbHVtYXQgbGFuanV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICdBcGxpa2FzaSBwZWxhbmdnYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAnT1MgUGVsYW5nZ2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmN1cnJlbnQgVXNlcnMnfSA9ICdQZW5nZ3VuYSBTZWRpYSBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0tQXJlYSd9ID0gJ0NvbmZpZyBQZXJrYXJhLUthd2FzYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIGF2YWlsYWJsZSd9ID0gJ0l0ZW0gY29uZmlnIGRpc2VkaWFrYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHNob3duJ30gPSAnSXRlbSBjb25maWcgZGl0dW5qdWtrYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAnRGVtbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnRGVza3RvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ0xlc2VuIFBlbWFqdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICdEb2sgU3Rlc2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ0dhbmRha2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAndGVyYmVuYW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnTWVkYW4ga29zb25nIG1lbnVuanVra2FuIGJhaGF3YSBuaWxhaSBzZW1hc2EgZGlzaW1wYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAnTGVzZW4gRW50ZXJwcmlzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICdUYXJpa2ggVGFtYXQgVGVtcG9oJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICdUYW1hdCBUZW1wb2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRlFETid9ID0gJ0ZRRE4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICd0aW5na2F0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnRnJlZXdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnR1NNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICdHZXJiYW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJ1Blbnllc3VhaSBncmFmaWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnQ2FrZXJhIEtlcmFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzazo6Q2FwYWNpdHknfSA9ICdDYWtlcmEgS2VyYXMgOjogS2FwYXNpdGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlkZSBWZXJzaW9ucyd9ID0gJ1NlbWJ1bnlpIFZlcnNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdJUCBBZGRyZXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICdJUCBsZWJpaCBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnSVQgS2VtdWRhaGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luYWN0aXZlJ30gPSAnVGlkYWsgQWt0aWYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdpbnNpZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJ1Bhc2FuZyBUYXJpa2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9yZCd9ID0gJ0p1cnV0ZWtuaWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ0xhcHRvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IENoYW5nZSd9ID0gJ1BlcnViYWhhbiBha2hpcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJ0t1bmNpIExlc2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5OjpFeHBpcmF0aW9uIERhdGUnfSA9ICdLdW5jaSBMZXNlbiA6OiBUYXJpa2ggVGFtYXQgVGVtcG9oJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5OjpRdWFudGl0eSd9ID0gJ0t1bmNpIExlc2VuOjogS3VhbnRpdGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnSmVuaXMgTGVzZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICdwZW55ZWxlbmdnYXJhYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICdCaWxhbmdhbiBtYWtzaW11bSBzYXR1IGVsZW1lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ01lZGlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICdNaWRkbGV3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnTW9kZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICdNb2RlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnTW9uaXRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3VzZSd9ID0gJ3RldGlrdXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnTmV0d29yayBBZGFwdGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgQWRkcmVzcyd9ID0gJ05ldHdvcmsgQWRhcHRlciA6OiBJUCBBZGRyZXNzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgb3ZlciBESENQJ30gPSAnTmV0d29yayBBZGFwdGVyIDo6IElQIGxlYmloIERIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAnQWxhbWF0IFJhbmdrYWlhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3M6OkdhdGV3YXknfSA9ICdSYW5na2FpYW4gQWxhbWF0IDo6IEdlcmJhbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzOjpTdWJuZXQgTWFzayd9ID0gJ1JhbmdrYWlhbiBBbGFtYXQgOjogU3VibmV0IE1hc2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICdTdW1iZXIgVGVyYnVrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpbmcgU3lzdGVtJ30gPSAnU2lzdGVtIE9wZXJhc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdvcGVyYXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnbGFpbi1sYWluJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ1BlcmFsYXRhbiBsYWluLWxhaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnT3V0bGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnUENNQ0lBIEthZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQREEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICdwZXIgTm9kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICd1bnR1ayBQZW1wcm9zZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJ1NldGlhcCBwZWxheWFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnc2V0aWFwIFBlbmdndW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDEnfSA9ICdUZWxlZm9uIDEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJ1RlbGVmb24gMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJ1BpbG90JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICdEaXJhbmNhbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJ3BlbmNldGFrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2R1Y3Rpb24nfSA9ICdwZW5nZWx1YXJhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ0t1YW50aXRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICdSYWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnbWVtb3JpIHV0YW1hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ01lbWJhaWtpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICdiZXJzYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJ21lbmdrYWppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICdCaWxpayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICdSb3V0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ1BlbmdpbWJhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ29uZmlnIEl0ZW1zJ30gPSAnQ2FyaWFuIENvbmZpZyBJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ1BlcmFudGkgS2VzZWxhbWF0YW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJ05vbWJvciBTZXJpZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnUGVsYXlhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgQXBwbGljYXRpb24nfSA9ICdQZXJtb2hvbmFuIFBlbGF5YW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnU2VydmVyIE9TJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgVmVyc2lvbnMnfSA9ICdQYXBhciB2ZXJzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ0xlc2VuIFNhaGFqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJ1N1Ym5ldCBNYXNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ1R1a2FyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnVGVsa28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJ1VqaWFuL1FBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkZXBsb3ltZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdLZWFkYWFuIHBlbmVtcGF0YW4gaXRlbSBpbmkgY29uZmlnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnS2VhZGFhbiBpbnNpZGVuIGJhZ2kgY29uZmlnIGl0ZW0gaW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJ21hc2EgVGVyaGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICdQZXJhbnRpIFVTQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICdUaWFkYSBiYXRhc2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ0FsYXQgcGVuZ2d1bmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICdMZXNlbiBKaWxpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJ3B1c2F0IGFrc2VzIFdMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnVGFyaWtoIFdhcmFudGkgUGVsdXB1dGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ1RlbXBhdCBrZXJqYSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ29uZmlnSXRlbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gTWFuYWdlbWVudCd9ID0gJ1Blbmd1cnVzYW4gQ29uZmlnIEl0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICdVYmFoIGRlZmluaXNpIGtlbGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnQ29uZmlnIEl0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xhc3MnfSA9ICdLZWxhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uJ30gPSAnRGVmaW5pc2knOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJ01lbmFwaXMgS2VsYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgQ2xhc3MgZnJvbSB0aGUgbGlzdCB0byBjcmVhdGUgYSBuZXcgQ29uZmlnIEl0ZW0uJ30gPSAnUGlsaWggS2VsYXMgZGFyaSBzZW5hcmFpIHVudHVrIG1ld3VqdWRrYW4gUGVya2FyYSBDb25maWcgYmFydS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnTmFtYSBjb25maWcgaXRlbSBpbmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSd9ID0gJ0tlYWRhYW4gUGVydHVrYXJhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ2luc2lkZW4ga2VhZGFhbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdrb250ZWtzIFRldGFwYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnSXRlbSBjb25maWcgcGVyIGhhbGFtYW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIFR5cGUnfSA9ICdKZW5pcyBQZXJ0dWthcmFuIEtlYWRhYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0luc2lkZW4ga2VhZGFhbiBzZW1hc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnTnlhdGFrYW4gSmVuaXMgSW5zaWRlbiBTZW1hc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBDaGFuZ2VkJ30gPSAnVGVya2luaSBiZXJ1YmFoJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICdDb25maWdJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0tSW5mbyd9ID0gJ0NvbmZpZ0l0ZW0tSW5mbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICdQZXJ0dWthcmFuIGtlYWRhYW4gc2VtYXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1RlcmtpbmkgYmVydWJhaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdUZXJha2hpciBkaXViYWggb2xlaCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnSnVnYSBtZW5jYXJpIGRhbGFtIHZlcnNpIHNlYmVsdW1ueWE/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoUmVzdWx0UHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZVRpbWUnfSA9ICdDaXB0YSBNYXNhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnUGVya2FyYSBrb25maWd1cmFzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAnVHVuanVra2FuIHNhdHUgdmVyc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICdUdW5qdWtrYW4gc2VtdWEgdmVyc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJ1ZlcnNpIEluc2lkZW4gTmVnZXJpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnQmlsYW5nYW4gdmVyc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBCeSd9ID0gJ0RpYnVhdCBPbGVoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgT24nfSA9ICdiZXJ1YmFoIFBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvciBoaWRlIHRoZSBjb250ZW50Lid9ID0gJ01lbnVuanVra2FuIGF0YXUgbWVueWVtYnVueWlrYW4ga2FuZHVuZ2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnS29uZmlndXJhc2kgVmVyc2kgSXRlbSBLZXBlcmluY2hpYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICdoYXJ0YSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9ICdEZWZpbmllcnQgZGFzIFN0YW5kYXJkLVN1Ym9iamVjdCBkZXIgS2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPSAnT2JqZWt0LUJhY2tlbmQgTW9kdWwgUmVnaXN0cmF0aW9uIGRlcyBJbXBvcnQvRXhwb3J0IE1vZHVscy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdG9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0gJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9uYl9OT19JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om5iX05PX0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnQmFja3VwLWVuaGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJ0J5Z25pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpDb25maWdJdGVtQ3JlYXRlJ30gPSAnTnkgS29uZmlndXJhc2pvbnNlbmhldCAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbURlbGV0ZSd9ID0gJ0tvbmZpZ3VyYXNqb25zZW5oZXQgKElEPSVzKSBzbGV0dGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6RGVmaW5pdGlvblVwZGF0ZSd9ID0gJ0tvbmZpZ3VyYXNqb25zZW5oZXRlbnMgZGVmaW5pc2pvbiBibGUgb3BwZGF0ZXJ0IChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpEZXBsb3ltZW50U3RhdGVVcGRhdGUnfSA9ICdQcm9kdWtzam9uc3NldHRpbmdzdGlsc3RhbmQgZW5kcmV0IChueT0lczsgZ21sPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkluY2lkZW50U3RhdGVVcGRhdGUnfSA9ICdIZW5kZWxzZXN0aWxzdGFuZCBvcHBkYXRlcnQgKG55PSVzOyBnbWw9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TGlua0FkZCd9ID0gJ0tvYmxpbmcgdGlsICVzICh0eXBlPSVzKSBsYWd0IHRpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkxpbmtEZWxldGUnfSA9ICdLb2JsaW5nIHRpbCAlcyAodHlwZT0lcykgbGFndCB0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpOYW1lVXBkYXRlJ30gPSAnTmF2biBvcHBkYXRlcnQgKG55dHQ9JXM7IGdtbD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWYWx1ZVVwZGF0ZSd9ID0gJ0F0dHJpYnV0dCAlcyBvcHBkYXRlcnQgZnJhICIlcyIgdGlsICIlcyInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWZXJzaW9uQ3JlYXRlJ30gPSAnTnkgdmVyc2pvbiAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmVyc2lvbkRlbGV0ZSd9ID0gJ1ZlcnNqb24gJXMgc2xldHRldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkF0dGFjaG1lbnRBZGQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpBdHRhY2htZW50RGVsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ1Byb3Nlc3Nvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICdLYW1lcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICdLYXBhc2l0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIERlZmluaXRpb24nfSA9ICdFbmRyZSBkZWZpbmlzam9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBvZiBkZWZpbml0aW9uIGZhaWxlZCEgU2VlIFN5c3RlbSBMb2cgZm9yIGRldGFpbHMuJ30gPSAnRW5kcmluZyBmZWlsZXQhIFNlIHN5c3RlbWxvZ2dlbiBmb3IgZGV0YWxqZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJ0tsaWVudC1hcHBsaWthc2pvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdLbGllbnQtT1MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uY3VycmVudCBVc2Vycyd9ID0gJ1NhbXRpZGlnZSBicnVrZXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtLUFyZWEnfSA9ICdLb25maWd1cmFzam9uc2VuaGV0LW9tcsOlZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIGF2YWlsYWJsZSd9ID0gJ1RpbGdqZW5nZWxpZ2Uga29uZmlndXJhc2pvbnNlbmhldGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBzaG93bid9ID0gJ1Zpc3RlIGtvbmZpZ3VyYXNqb25zZW5oZXRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCJ30gPSAnQ01EQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAnRGVtbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnU3Rhc2pvbsOmcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ1V0dmlrbGVybGlzZW5zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJ0Rva2tpbmdzdGFzam9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ0R1cGxpc8Opcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJ0lubmVieWdkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJ1RvbW1lIGZlbHRlciBpbmRpa2VyZXIgYXQgZGUgbsOldsOmcmVuZGUgdmVyZGllbmUgYmVob2xkZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAnRW50ZXJwcmlzZS1saXNlbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnVXRnw6VyIGRhdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ1V0Z8OldHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRlFETid9ID0gJ0ZRRE4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICdFdGFzamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICdHcmF0aXMgcHJvZ3JhbXZhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnR1NNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICdSdXRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICdHcmFmaWtrb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJ0hhcmRkaXNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzazo6Q2FwYWNpdHknfSA9ICdIYXJkZGlzazo6S2FwYXNpdGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpZGUgVmVyc2lvbnMnfSA9ICdTa2p1bCB2ZXJzam9uZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgQWRkcmVzcyd9ID0gJ0lQLWFkcmVzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnSVAgZnJhIERIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICdJVC1mYXNpbGl0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5hY3RpdmUnfSA9ICdJbmFrdGl2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJ0luc3RhbGxhc2pvbnNkYXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvcmQnfSA9ICdUYXN0YXR1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICdMb2thbG5ldHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnQsOmcmJhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IENoYW5nZSd9ID0gJ1Npc3QgZW5kcmV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnTGlzZW5zbsO4a2tlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleTo6RXhwaXJhdGlvbiBEYXRlJ30gPSAnTGlzZW5zbsO4a2tlbDo6VXRnw6VyIGRhdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXk6OlF1YW50aXR5J30gPSAnTGlzZW5zbsO4a2tlbDo6QW50YWxsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ0xpc2Vuc3R5cGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICdWZWRsaWtlaG9sZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ01ha3MuIGFudGFsbCBhdiBldHQgZWxlbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ01lZGlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICdNZWxsb212YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnTW9kZWxsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAnTW9kZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJ1NramVybSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3VzZSd9ID0gJ011cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICdOZXR0dmVya3Nrb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgQWRkcmVzcyd9ID0gJ05ldHR2ZXJrc2tvcnQ6OklQLWFkcmVzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyOjpJUCBvdmVyIERIQ1AnfSA9ICdOZXR0dmVya3Nrb3J0OjpJUCBmcmEgREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICdOZXR0dmVya3NhZHJlc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzczo6R2F0ZXdheSd9ID0gJ05ldHR2ZXJrc2FkcmVzc2U6OlJ1dGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzczo6U3VibmV0IE1hc2snfSA9ICdOZXR0dmVya3NhZHJlc3NlOjpTdWJuZXR0bWFza2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICfDhXBlbiBraWxkZWtvZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW5nIFN5c3RlbSd9ID0gJ09wZXJhdGl2c3lzdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnT3BlcmF0aXYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdBbm5ldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICdBbm5ldCB1dHN0eXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnS29udGFrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJ1BDTUNJQS1rb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJ1BEQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJ1BlciBOb2RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICdQZXIgUHJvc2Vzc29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICdQZXIgVGplbmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnUGVyIEJydWtlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnVGVsZWZvbiAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICdUZWxlZm9uIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICdQaWxvdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnUGxhbmxhZ3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJ1Nrcml2ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvZHVjdGlvbid9ID0gJ1Byb2R1a3Nqb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICdBbnRhbGwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJ1JhY2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnSW50ZXJubWlubmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnUmVwYXJhc2pvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnUGVuc2pvbmVydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICdFdmFsdWVyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICdSb20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAnUnV0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ1NrYW5uZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENvbmZpZyBJdGVtcyd9ID0gJ1PDuGsga29uZmlndXJhc2pvbnNlbmhldGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ1Npa2tlcmhldHNlbmhldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnU2VyaWVudW1tZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnVGplbmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ1RqZW5lci1hcHBsaWthc2pvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICdUamVuZXItT1MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBWZXJzaW9ucyd9ID0gJ1ZpcyB2ZXJzam9uZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICdFbmtlbHRsaXNlbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICdTdWJuZXR0bWFza2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnU3ZpdHNqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnVGVsZXV0c3R5cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAnVGVzdC9LdmFsaXRldHNrb250cm9sbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnUHJvZHVrc2pvbnNzZXR0aW5nc3RpbHN0YW5kIGZvciBkZW5uZSBrb25maWd1cmFzam9uc2VuaGV0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGluY2lkZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdIZW5kZWxzZXN0aWxzdGFuZGVuIGZvciBkZW5uZSBrb25maWd1cmFzam9uc2VuaGV0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnVGlkc2JlZ3JlbnNldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnVVNCLWVuaGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJ1ViZWdyZW5zZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnQnJ1a2VydmVya3TDuHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICdWb2x1bWxpc2Vucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJ1dMQU4tYmFzZXN0YXNqb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnVXRsw7hwc2RhdG8gZm9yIGdhcmFudGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnQXJiZWlkc3N0ZWQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdBZG1pbmlzdHJhc2pvbiBhdiBrb25maWd1cmFzam9uc2VuaGV0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICdFbmRyZSBrbGFzc2VkZWZpbmlzam9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnS29uZmlndXJhc2pvbnNlbmhldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGFzcyd9ID0gJ0tsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uJ30gPSAnRGVmaW5pc2pvbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBDbGFzc2VzJ30gPSAnRmlsdGVyIGZvciBrbGFzc2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIENsYXNzIGZyb20gdGhlIGxpc3QgdG8gY3JlYXRlIGEgbmV3IENvbmZpZyBJdGVtLid9ID0gJ1ZlbGcgZW4ga2xhc3NlIGZyYSBsaXN0ZW4gZm9yIMOlIG9wcHJldHRlIGVuIG55IGtvbmZpZ3VyYXNqb25zZW5oZXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnTmF2bmV0IHRpbCBkZW5uZSBrb25maWd1cmFzam9uc2VuaGV0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnUHJvZHVrc2pvbnNzZXR0aW5nc3RpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnSGVuZGVsc2VzdGlsc3RhbmQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnS29udGVrc3R2YWxnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBwZXIgcGFnZSd9ID0gJ0tvbmZpZ3VyYXNqb25zZW5oZXRlciBwZXIgc2lkZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJ1R5cGUgUHJvZHVrc2pvbnNzZXR0aW5nc3RpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdOw6V2w6ZyZW5kZSBIZW5kZWxzZXN0aWxzdGFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICdOw6V2w6ZyZW5kZSB0eXBlIEhlbmRlbHNlc3RpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1Npc3QgZW5kcmV0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICdLb25maWd1cmFzam9uc2VuaGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0tSW5mbyd9ID0gJ0tvbmZpZ3VyYXNqb25zZW5oZXQtaW5mbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICdOw6V2w6ZyZW5kZSBQcm9kdWtzam9uc3NldHRpbmdzdGlsc3RhbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnU2lzdCBlbmRyZXQgYXYnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fsc28gc2VhcmNoIGluIHByZXZpb3VzIHZlcnNpb25zPyd9ID0gJ09nc8OlIHPDuGtlIGkgdGlkbGlnZXJlIHZlcnNqb25lcj8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2hSZXN1bHRQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlVGltZSd9ID0gJ09wcHJldHRlbHNlc3RpZHNwdW5rdCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJ0tvbmZpZ3VyYXNqb25zZW5oZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICdWaXMgw6luIHZlcnNqb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICdWaXMgYWxsZSB2ZXJzam9uZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJ0hlbmRlbHNlc3RpbHN0YW5kIGZvciB2ZXJzam9uZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICdWZXJzam9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICdWZXJzam9uc2RldGFsamVyIGZvciBlbmhldGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZCd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0b24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2l0aCB0aGlzIGNvbmZpZyBvcHRpb24gaXQgaXMgcG9zc2libGUgdG8gZGVhY3RpdmUgdGhlIGZpeGVkIG92ZXJ2aWV3IGNvbnRyb2wgYmFyIGluIHRoZSBBZ2VudElUU01Db25maWdJdGVtIG92ZXJ2aWV3LiBJbiBzb21lIHNjZW5hcmlvcyB0aGlzIHdpbGwgYmUgbmVjZXNzYXJ5LCBmLmUuIGR1ZSB0byBzbWFsbCBzY3JlZW4gcmVzb2x1dGlvbnMgaW4gY29tYmluYXRpb24gd2l0aCBhIGxvdCBvZiBjb25maWcgaXRlbSBjbGFzc2VzLid9ID0KICAgICAgICAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ubF9JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om5sX0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICdBZHJlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAnQWRtaW4gVG9vbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnQmFja3VwYXBwYXJhYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmVhbWVyJ30gPSAnQmVhbWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAnR2Vib3V3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbUNyZWF0ZSd9ID0gJ05pZXV3IGNvbmZpZ3VyYXRpZS1pdGVtIChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpDb25maWdJdGVtRGVsZXRlJ30gPSAnQ29uZmlndXJhdGllLWl0ZW0gKElEPSVzKSB2ZXJ3aWpkZXJkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6RGVmaW5pdGlvblVwZGF0ZSd9ID0gJ0NvbmZpZ0l0ZW1zXCcgZGVmaW5pdGllIGJpamdld2Vya3QgKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkRlcGxveW1lbnRTdGF0ZVVwZGF0ZSd9ID0gJ1N0YXR1cyBiaWpnZXdlcmt0IChuaWV1dz0lczsgb3VkPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkluY2lkZW50U3RhdGVVcGRhdGUnfSA9ICdJbmNpZGVudC1zdGF0dXMgYmlqZ2V3ZXJrdCAobmlldXc9JXM7IG91ZD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpMaW5rQWRkJ30gPSAnS29wcGVsaW5nIG5hYXIgJXMgKHR5cGU9JXMpIHRvZWdldm9lZ2QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpMaW5rRGVsZXRlJ30gPSAnS29wcGVsaW5nIG5hYXIgJXMgKHR5cGU9JXMpIHZlcndpamRlcmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpOYW1lVXBkYXRlJ30gPSAnTmFhbSBiaWpnZXdlcmt0IChuaWV1dz0lczsgb3VkPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZhbHVlVXBkYXRlJ30gPSAnQXR0cmlidXV0ICVzIGJpamdld2Vya3QgdmFuICIlcyIgbmFhciAiJXMiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmVyc2lvbkNyZWF0ZSd9ID0gJ05pZXV3ZSB2ZXJzaWUgKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZlcnNpb25EZWxldGUnfSA9ICdWZXJzaWUgJXMgdmVyd2lqZGVyZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkF0dGFjaG1lbnRBZGQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpBdHRhY2htZW50RGVsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ0NQVSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICdDYW1lcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICdDYXBhY2l0ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBEZWZpbml0aW9uJ30gPSAnRGVmaW5pdGllIHZlcmFuZGVyZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIG9mIGRlZmluaXRpb24gZmFpbGVkISBTZWUgU3lzdGVtIExvZyBmb3IgZGV0YWlscy4nfSA9ICdEZWZpbml0aWV3aWp6aWdpbmcgbWlzbHVrdCEgWmllIGRlIFN5c3RlbSBMb2cgdm9vciBkZXRhaWxzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICdDbGllbnR0b2VwYXNzaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJ0NsaWVudCBiZXN0dXJpbmdzc3lzdGVlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25jdXJyZW50IFVzZXJzJ30gPSAnR2VsaWprdGlqZGlnZSBnZWJydWlrZXJzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtLUFyZWEnfSA9ICdDb25maWd1cmF0aWUtaXRlbS1nZWJpZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIGF2YWlsYWJsZSd9ID0gJ0Jlc2NoaWtiYXJlIGNvbmZpZ3VyYXRpZS1pdGVtcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgc2hvd24nfSA9ICdHZXRvb25kZSBjb25maWd1cmF0aWUtaXRlbXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQid9ID0gJ0NNREInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJ0RlbW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJ0Rlc2t0b3AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICdPbnR3aWtrZWxhYXJzbGljZW50aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG9ja2luZyBTdGF0aW9uJ30gPSAnRG9ja2luZyBzdGF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ0R1cGxpY2VyZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICdFbWJlZGRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAnRW50ZXJwcmlzZWxpY2VudGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ0V4cGlyYXRpZWRhdHVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICdWZXJsb3Blbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGUUROJ30gPSAnRlFETic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ0V0YWdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnRnJlZXdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnR1NNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICdHYXRld2F5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJ1ZpZGVva2FhcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnSGFyZGUgc2NoaWpmJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzazo6Q2FwYWNpdHknfSA9ICdIYXJkZSBzY2hpamY6OkNhcGFjaXRlaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlkZSBWZXJzaW9ucyd9ID0gJ1ZlcmJlcmcgdmVyc2llcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnSVAgYWRyZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnSVAgdmlhIERIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICdTZXJ2ZXJydWltdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5hY3RpdmUnfSA9ICdJbmFjdGllZic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ0luY2lkZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJ0luc3RhbGxhdGllZGF0dW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9yZCd9ID0gJ1RvZXRzZW5ib3JkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICdMYXB0b3AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBDaGFuZ2UnfSA9ICdMYWF0c3RlIHdpanppZ2luZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJ0xpY2VudGllc2xldXRlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleTo6RXhwaXJhdGlvbiBEYXRlJ30gPSAnTGljZW50aWVzbGV1dGVsOjpFeHBpcmF0aWVkYXR1bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleTo6UXVhbnRpdHknfSA9ICdMaWNlbnRpZXNsZXV0ZWw6OkhvZXZlZWxoZWlkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ0xpY2VudGlldHlwZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ0luIG9uZGVyaG91ZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ01heGltYWxlIGhvZXZlZWxoZWlkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnTWVkaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJ01pZGRsZXdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICdNb2RlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ01vZGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICdNb25pdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnTXVpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICdOZXR3ZXJrIGFkYXB0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyOjpJUCBBZGRyZXNzJ30gPSAnTmV0d2VyayBhZGFwdGVyOjpJUCBhZHJlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXI6OklQIG92ZXIgREhDUCd9ID0gJ05ldHdlcmsgYWRhcHRlcjo6SVAgdmlhIERIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAnTmV0d2Vya2FkcmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzczo6R2F0ZXdheSd9ID0gJ05ldHdlcmthZHJlczo6R2F0ZXdheSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3M6OlN1Ym5ldCBNYXNrJ30gPSAnTmV0d2Vya2FkcmVzOjpTdWJuZXQgTWFzayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ09wZW4gU291cmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGluZyBTeXN0ZW0nfSA9ICdCZXN0dXJpbmdzc3lzdGVlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhdGlvbmVlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ092ZXJpZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAnT3ZlcmlnZSB1aXRydXN0aW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJ0FhbnNsdWl0aW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnUENNQ0lBIGthYXJ0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJ1BEQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJ1BlciBub2RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICdQZXIgQ1BVJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICdQZXIgc2VydmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnUGVyIGdlYnJ1aWtlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnVGVsZWZvb24gMSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnVGVsZWZvb24gMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJ1BpbG90JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICdHZXBsYW5uZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJ1ByaW50ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvZHVjdGlvbid9ID0gJ1Byb2R1a3RpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ0hvZXZlZWxoZWlkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICdSYWNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ1JBTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICdJbiByZXBhcmF0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJ1VpdGdlZmFzZWVyZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICdSZXZpZXcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJ0thbWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJ1JvdXRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnU2Nhbm5lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ29uZmlnIEl0ZW1zJ30gPSAnWm9layBDb25maWd1cmF0aWUtaXRlbXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnU2VjdXJpdHkgZGV2aWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICdTZXJpZW51bW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICdTZXJ2ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnU2VydmVydG9lcGFzc2luZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICdTZXJ2ZXIgYmVzdHVyaW5nc3N5c3RlZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBWZXJzaW9ucyd9ID0gJ1Rvb24gdmVyc2llcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ1NpbmdsZSBMaWNlbmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAnU3VibmV0IE1hc2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnU3dpdGNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnVGVsY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJ1Rlc3QvUUEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ0RlIHN0YXR1cyB2YW4gZGl0IGNvbmZpZ3VyYXRpZS1pdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnRGUgaW5jaWRlbnRzdGF0dXMgdmFuIGRpdCBjb25maWd1cmF0aWUtaXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICdUaW1lIHJlc3RyaWN0ZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ1VTQiBhcHBhcmFhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICdPbmdlbGltaXRlZXJkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ1VzZXIgVG9vbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJ1ZvbHVtZSBMaWNlbnRpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJ1dMQU4gQWNjZXNzIFBvaW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJ0VpbmRkYXR1bSBnYXJhbnRpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrcGxhY2UnfSA9ICdXZXJrcGxlayc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ29uZmlnSXRlbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gTWFuYWdlbWVudCd9ID0gJ0NvbmZpZ3VyYXRpZS1pdGVtIGJlaGVlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgY2xhc3MgZGVmaW5pdGlvbid9ID0gJ1dpanppZyBkZWZpbml0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0nfSA9ICdDb25maWd1cmF0aWUtaXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGFzcyd9ID0gJ0tsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uJ30gPSAnRGVmaW5pdGllJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIENsYXNzZXMnfSA9ICdGaWx0ZXIgb3Aga2xhc3Nlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICdTZWxlY3RlZXIgZWVuIGtsYXNzZSB1aXQgZGUgbGlqc3Qgb20gZWVuIG5pZXV3IGNvbmZpZ3VyYXRpZS1pdGVtIGFhbiB0ZSBtYWtlbi4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnRGUgbmFhbSB2YW4gZGl0IGNvbmZpZ3VyYXRpZS1pdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSd9ID0gJ1N0YXR1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0luY2lkZW50c3RhdHVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnQWFudGFsIGNvbmZpZ3VyYXRpZS1pdGVtcyBwZXIgcGFnaW5hJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdBY3R1ZWxlIGluY2lkZW50c3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdMYWFzdGUgd2lqemlnaW5nJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJ0FjdHVlbGUgc3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ0xhYXN0ZSB3aWp6aWdpbmcgZG9vcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnT29rIGluIGVlcmRlcmUgdmVyc2llcyB6b2VrZW4/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoUmVzdWx0UHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZVRpbWUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICdDb25maWd1cmF0aWUtaXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICdDb25maWd1cmF0aWUtaXRlbSBpbmZvcm1hdGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICdUb29uIMOpw6luIHZlcnNpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCB2ZXJzaW9ucyd9ID0gJ1Rvb24gYWxsZSB2ZXJzaWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICdWZXJzaWUgSW5jaWRlbnQtc3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnVmVyc2llbnVtbWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICdDb25maWd1cmF0aWUtaXRlbSB2ZXJzaWUgZGV0YWlscyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJ0F0dHJpYnV1dCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnQ29uZmlndXJhdGllLWl0ZW1zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLid9ID0gJ0Fhbm1ha2VuIGVuIGJlaGVyZW4gdmFuIGRlZmluaXRpZXMgdm9vciBjb25maWd1cmF0aWUtaXRlbXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZCd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0b24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2l0aCB0aGlzIGNvbmZpZyBvcHRpb24gaXQgaXMgcG9zc2libGUgdG8gZGVhY3RpdmUgdGhlIGZpeGVkIG92ZXJ2aWV3IGNvbnRyb2wgYmFyIGluIHRoZSBBZ2VudElUU01Db25maWdJdGVtIG92ZXJ2aWV3LiBJbiBzb21lIHNjZW5hcmlvcyB0aGlzIHdpbGwgYmUgbmVjZXNzYXJ5LCBmLmUuIGR1ZSB0byBzbWFsbCBzY3JlZW4gcmVzb2x1dGlvbnMgaW4gY29tYmluYXRpb24gd2l0aCBhIGxvdCBvZiBjb25maWcgaXRlbSBjbGFzc2VzLid9ID0KICAgICAgICAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wbF9JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgSW5mb3JtYXR5a2EgQm9ndXNsYXdza2kgc3AuIHogby5vLiBzcC5rLiwgaHR0cDovL3d3dy5pYi5wbC8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cGxfSVRTTUNvbmZpZ0l0ZW07Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29uZmlnSXRlbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcmVzcyd9ID0gJ0FkcmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICdOYXJ6xJlkemllIGFkbWluaXN0cmF0b3Jza2llJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICdVcnrEhWR6ZW5pZSBkbyBiYWNrdXB1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJ0J1ZHluZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpDb25maWdJdGVtQ3JlYXRlJ30gPSAnTm93eSBDSSAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbURlbGV0ZSd9ID0gJ1VzdW5pxJljaWUgQ0kgKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkRlZmluaXRpb25VcGRhdGUnfSA9ICdBa3R1YWxpemFjamEgZGVmaW5pY2ppIENJIChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpEZXBsb3ltZW50U3RhdGVVcGRhdGUnfSA9ICdBa3R1YWxpemFjamEgc3RhbnUgd2Ryb8W8ZW5pYSBDSSAobm93eT0lczsgc3Rhcnk9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6SW5jaWRlbnRTdGF0ZVVwZGF0ZSd9ID0gJ0FrdHVhbGl6YWNqYSBzdGFudSB6ZGFyemVuaWEgKG5vd3k9JXM7IHN0YXJ5PSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkxpbmtBZGQnfSA9ICdEb2RhbnkgbGluayBkbyAlcyAoVHlwPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkxpbmtEZWxldGUnfSA9ICdVc3VuacSZdHkgbGluayBkbyAlcyAoVHlwPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6Ok5hbWVVcGRhdGUnfSA9ICdBa3R1YWxpemFjamEgbmF6d3kgKG5vd2E9JXM7IHN0YXJhPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZhbHVlVXBkYXRlJ30gPSAnQWt0dWFsaXphY2phIHdhcnRvxZtjaSBhdHJ5YnV0dSAlcyB6ICIlcyIgbmEgIiVzIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZlcnNpb25DcmVhdGUnfSA9ICdVdHdvcnplbmllIG5vd2VqIHdlcnNqaSAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmVyc2lvbkRlbGV0ZSd9ID0gJ1VzdW5pxJljaWUgd2Vyc2ppICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6QXR0YWNobWVudEFkZCd9ID0gJ1V0d29yemVuaWUgemHFgsSFY3puaWthICglcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpBdHRhY2htZW50RGVsZXRlJ30gPSAnVXN1bmnEmWNpZSB6YcWCxIVjem5pa2EgKCVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICdQcm9jZXNvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICdLYW1lcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICdQb2plbW5vxZvEhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVmaW5pdGlvbid9ID0gJ0RlZmluaWNqYSB6bWlhbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIG9mIGRlZmluaXRpb24gZmFpbGVkISBTZWUgU3lzdGVtIExvZyBmb3IgZGV0YWlscy4nfSA9ICdabWlhbmEgZGVmaW5pY2ppIG5pZSBwb3dpb2TFgmEgc2nEmSEgU3pjemVnw7PFgnkgem5hamR1asSFIHNpxJkgdyBsb2d1IHN5c3RlbXUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJ0FwbGlrYWNqYSBrbGllbmNrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdTeXN0ZW0ga2xpZW5ja2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uY3VycmVudCBVc2Vycyd9ID0gJ0plZG5vY3plxZtuaSB1xbx5dGtvd25pY3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0tQXJlYSd9ID0gJ0NJLU9ic3phcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgYXZhaWxhYmxlJ30gPSAnRG9zdMSZcG5lIENJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBzaG93bid9ID0gJ1d5xZt3aWV0bG9uZSBDSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCJ30gPSAnQ01EQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAnRGVtbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnRGVza3RvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ0xpY2VuY2phIGRldmVsb3BlcnNrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICdTdGFjamEgZG9rdWrEhWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ0R1cGxpa2F0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnT3NhZHpvbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnUHVzdGUgcG9sYSB6bmFjemFqxIUsIMW8ZSB6YXRyenltYW5lIGLEmWTEhSBiaWXFvMSFY2Ugd2FydG/Fm2NpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ0xpY2VuY2phIEVudGVycHJpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnRGF0YSB3eWdhxZtuacSZY2lhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICdXeWdhc8WCbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGUUROJ30gPSAnTmF6d2EgRlFETic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ1BpxJl0cm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICdGcmVld2FyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICdHU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJ0JyYW1hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJ0thcnRhIGdyYWZpY3puYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICdEeXNrIHR3YXJkeSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2s6OkNhcGFjaXR5J30gPSAnUG9qZW1ub8WbxIcgZHlza3UgdHdhcmRlZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlkZSBWZXJzaW9ucyd9ID0gJ1VrcnlqIHdlcnNqZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnQWRyZXMgSVAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnQWRyZXMgSVAgeiBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnRHppYcWCIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luYWN0aXZlJ30gPSAnTmllYWt0eXdueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ1pkYXJ6ZW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICdEYXRhIGluc3RhbGFjamknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9yZCd9ID0gJ0tsYXdpYXR1cmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ0xhcHRvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IENoYW5nZSd9ID0gJ09zdGF0bmlhIHptaWFuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJ0tsdWN6IGxpY2VuY3lqbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXk6OkV4cGlyYXRpb24gRGF0ZSd9ID0gJ0tsdWN6IGxpY2VuY3lqbnk6OkRhdGEgd3lnYcWbbmnEmWNpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleTo6UXVhbnRpdHknfSA9ICdLbHVjeiBsaWNlbmN5am55OjpJbG/Fm8SHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ1R5cCBsaWNlbmNqaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ1V0cnp5bWFuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICdNYWtzeW1hbG5hIGxpY3piYSB3eXN0xIVwaWXFhCBwb2plZG55Y3plZ28gZWxlbWV0bnR1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnTm/Fm25payc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnTWlkZGxld2FyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJ01vZGVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAnTW9kZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJ01vbml0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICdNeXN6a2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnS2FydGEgc2llY2lvd2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyOjpJUCBBZGRyZXNzJ30gPSAnS2FydGEgc2llY2lvd2E6OkFkcmVzIElQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgb3ZlciBESENQJ30gPSAnS2FydGEgc2llY2lvd2E6OkFkcmVzIElQIHogREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICdBZHJlcyBzaWVjaW93eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3M6OkdhdGV3YXknfSA9ICdBZHJlcyBzaWVjaW93eTo6QnJhbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzOjpTdWJuZXQgTWFzayd9ID0gJ0FkcmVzIHNpZWNpb3d5OjpNYXNrYSBzaWVjaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ09wZW4gc291cmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGluZyBTeXN0ZW0nfSA9ICdTeXN0ZW0gb3BlcmFjeWpueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhY3lqbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdJbm5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ1Bvem9zdGHFgmUgd3lwb3NhxbxlbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJ1B1bmt0IHNwcnplZGHFvHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICdLYXJ0YSBQQ01DSUEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnUERBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnTmEgdXJ6xIVkemVuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ05hIHByb2Nlc29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICdOYSBzZXJ3ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICdOYSB1xbx5dGtvd25pa2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ1RlbGVmb24gMSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnVGVsZWZvbiAyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnUGlsb3RhxbwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJ1BsYW5vd2FueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnRHJ1a2Fya2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvZHVjdGlvbid9ID0gJ1Byb2R1a2NqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ0lsb8WbxIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJ1JhY2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnUkFNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ05hcHJhd2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJ1d5Y29mYW55JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJ1ByemVnbMSFZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnUG9rw7NqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJ1J1dGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjYW5uZXInfSA9ICdTa2FuZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENvbmZpZyBJdGVtcyd9ID0gJ1N6dWthaiBDSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICdVcnrEhWR6ZW5pZSB6YWJlenBpZWN6YWrEhWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICdOdW1lciBzZXJ5am55JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJ1Nlcndlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgQXBwbGljYXRpb24nfSA9ICdBcGxpa2FjamEgc2Vyd2Vyb3dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJ1N5c3RlbSBzZXJ3ZXJvd3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBWZXJzaW9ucyd9ID0gJ1Bva2HFvCB3ZXJzamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICdQb2plZHnFhGN6YSBsaWNlbmNqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJ01hc2thIHNpZWNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ1N3aXRjaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ1RlbGNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICdUZXN0L1FBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkZXBsb3ltZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdTdGFuIHdkcm/FvGVuaWEgdGVnbyBDSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ1N0YW4gemRhcnplbmlhIHRlZ28gQ0knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnQ3phc293byBvZ3Jhbmljem9uYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnVXJ6xIVkemVuaWUgVVNCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJ0JleiBsaW1pdHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnTmFyesSZZHppZSB1xbx5dGtvd25pa2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICdaYmlvcmN6YSBsaWNlbmNqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJ0FjY2VzcyBQb2ludCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICdEYXRhIHd5Z2HFm25pxJljaWEgZ3dhcmFuY2ppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ01pZWpzY2UgcHJhY3knOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdaYXJ6xIVkemFuaWUgQ0knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICdabWllxYQgZGVmaW5pY2rEmSBrbGFzeSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSd9ID0gJ0NJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ29uZmlnSXRlbSd9ID0gJ0NJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnS2xhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJ0RlZmluaWNqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJ1NwcnrEmXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcHV0ZXInfSA9ICdLb21wdXRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnU2llxIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICdPcHJvZ3JhbW93YW5pZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBDbGFzc2VzJ30gPSAnRmlsdHIgZGxhIGtsYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgQ2xhc3MgZnJvbSB0aGUgbGlzdCB0byBjcmVhdGUgYSBuZXcgQ29uZmlnIEl0ZW0uJ30gPSAnWmF6bmFjeiBrbGFzxJkgbmEgbGnFm2NpZSBhYnkgdXR3b3J6ecSHIG5vd2UgQ0kuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ05hendhIHRlZ28gQ0knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJ05hendhIGplc3QganXFvCB1xbx5d2FuYSBwcnpleiBDSSBvIG5hc3TEmXB1asSFY3ljaCBudW1lcmFjaDogJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSd9ID0gJ1N0YW4gd2Ryb8W8ZW5pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YW4gemRhcnplbmlhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ1VzdGF3aWVuaWEga29udGVrc3R1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBwZXIgcGFnZSd9ID0gJ0xpY3piYSBDSSBuYSBzdHJvbmllJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBUeXBlJ30gPSAnVHlwIHN0YW51IHdkcm/FvGVuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0FrdHVhbG55IHN0YW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnQWt0dWFsbnkgdHlwIHN0YW51JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ09zdGF0bmlvIHptaWVuaW9uZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnQ0knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbS1JbmZvJ30gPSAnQ0ktSW5mbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICdBa3R1YWxueSBzdGFuIHdkcm/FvGVuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnT3N0YXRuaW8gem1pZW5pb25lIHByemV6JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2gtVGVtcGxhdGUnfSA9ICdTenVrYWotc3phYmxvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICdVd3pnbMSZZG5pxIcgcG9wcnplZG5pZSB3ZXJzamU/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHQ6IENsYXNzJ30gPSAnV3luaWsgd3lzenVraXdhbmlhIENJOiBrbGFzYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaFJlc3VsdFByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVUaW1lJ30gPSAnQ3phcyB1dHdvcnplbmlhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnQ0knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNqZSBvIENJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICdQb2thxbwgamVkbsSFIHdlcnNqxJkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnUG9rYcW8IHdzenlzdGtpZSB3ZXJzamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICdXZXJzamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBCeSd9ID0gJ1V0d29yem9uZSBwcnpleic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VkIE9uJ30gPSAnWm1pZW5pb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2l6ZSd9ID0gJ1ptaWXFhCByb3ptaWFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb3IgaGlkZSB0aGUgY29udGVudC4nfSA9ICdQb2thxbwgdWtyeXTEhSB0cmXFm8SHLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnU3pjemVnw7PFgnkgd2Vyc2ppIENJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnV8WCYcWbY2l3b8WbxIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNqZSBvIENJJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICdMaW1pdCBsaWN6YnkgQ0knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlJ30gPSAnTGltaXQgbGljemJ5IENJIG5hIHN0cm9uxJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICdUd29yemVuaWUgaSB6YXJ6xIVkemFuaWUgZGVmaW5pY2phbWkgZWxlbWVudMOzdyBrb25maWd1cmFjamkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZCd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0b24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2l0aCB0aGlzIGNvbmZpZyBvcHRpb24gaXQgaXMgcG9zc2libGUgdG8gZGVhY3RpdmUgdGhlIGZpeGVkIG92ZXJ2aWV3IGNvbnRyb2wgYmFyIGluIHRoZSBBZ2VudElUU01Db25maWdJdGVtIG92ZXJ2aWV3LiBJbiBzb21lIHNjZW5hcmlvcyB0aGlzIHdpbGwgYmUgbmVjZXNzYXJ5LCBmLmUuIGR1ZSB0byBzbWFsbCBzY3JlZW4gcmVzb2x1dGlvbnMgaW4gY29tYmluYXRpb24gd2l0aCBhIGxvdCBvZiBjb25maWcgaXRlbSBjbGFzc2VzLid9ID0KICAgICAgICAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wdF9CUl9JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0JSX0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICdFbmRlcmXDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ0ZlcnJhbWVudGEgZGUgQWRtaW5pc3RyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICdEaXNwb3NpdGl2byBkZSBCYWNrdXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmVhbWVyJ30gPSAnUHJvamV0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICdQcsOpZGlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbUNyZWF0ZSd9ID0gJ05vdm8gaXRlbSBkZSBjb25maWd1cmHDp8OjbyAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbURlbGV0ZSd9ID0gJ0l0ZW0gZGUgY29uZmlndXJhw6fDo28gKElEPSVzKSBleGNsdcOtZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpEZWZpbml0aW9uVXBkYXRlJ30gPSAnRGVmaW5pw6fDo28gZG8gSUMgYXR1YWxpemFkYSAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6RGVwbG95bWVudFN0YXRlVXBkYXRlJ30gPSAnRXN0YWRvIGRlIGltcGxhbnRhw6fDo28gYWx0ZXJhZG8gKG5vdm89JXM7IGFudGlnbz0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpJbmNpZGVudFN0YXRlVXBkYXRlJ30gPSAnRXN0YWRvIGRlIGluY2lkZW50ZSBhbHRlcmFkbyAobm92bz0lczsgYW50aWdvPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkxpbmtBZGQnfSA9ICdPIGxpbmsgcGFyYSAlcyAoVHlwPSVzKSBmb2kgYWRpY2lvbmFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkxpbmtEZWxldGUnfSA9ICdPIGxpbmsgcGFyYSAlcyAoVHlwPSVzKSBleGNsdcOtZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpOYW1lVXBkYXRlJ30gPSAnTm9tZSBhbHRlcmFkbyAobm92bz0lczsgYW50aWdvPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZhbHVlVXBkYXRlJ30gPSAnTyBhdHJpYnV0byAlcyBkZSAiJXMiIHBhcmEgIiVzIiBtdWRvdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZlcnNpb25DcmVhdGUnfSA9ICdOb3ZhIHZlcnPDo28gY3JpYWRhIChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWZXJzaW9uRGVsZXRlJ30gPSAnVmVyc8OjbyAlcyBleGNsdcOtZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpBdHRhY2htZW50QWRkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6QXR0YWNobWVudERlbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICdQcm9jZXNzYWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICdDw6JtZXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAnQ2FwYWNpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVmaW5pdGlvbid9ID0gJ0FsdGVyYXIgRGVmaW5pw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIG9mIGRlZmluaXRpb24gZmFpbGVkISBTZWUgU3lzdGVtIExvZyBmb3IgZGV0YWlscy4nfSA9ICdNdWRhbsOnYSBkZSBkZWZpbmnDp8OjbyBmYWxob3UhIFZlamEgbyByZWdpc3RybyBkbyBzaXN0ZW1hIHBhcmEgbWFpcyBkZXRhbGhlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAnQXBsaWNhw6fDo28gQ2xpZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdTTyBDbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmN1cnJlbnQgVXNlcnMnfSA9ICdVc3XDoXJpb3MgQ29uY29ycmVudGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtLUFyZWEnfSA9ICfDgXJlYSBJdGVtIGRlIENvbmZpZ3VyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBhdmFpbGFibGUnfSA9ICdJdGVucyBkZSBDb25maWd1cmHDp8OjbyBkaXNwb27DrXZlaXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHNob3duJ30gPSAnSXRlbnMgZGUgQ29uZmlndXJhw6fDo28gdmlzdWFsaXphZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREInfSA9ICdCREdDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICdEZW1vbnN0cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnw4FyZWEgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAnTGljZW7Dp2EgZGUgRGVzZW52b2x2ZWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnRHVwbGljYXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICdJbnRlZ3JhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnT3MgY2FtcG9zIHZhemlvcyBpbmRpY2FtIHF1ZSBvcyB2YWxvcmVzIGF0dWFpcyBzw6NvIG1hbnRpZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ0xpY2Vuw6dhIENvcnBvcmF0aXZhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ0RhdGEgZGUgRXhwaXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ0V4cGlyYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZRRE4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICdBbmRhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJ0xpdnJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnUm90ZWFkb3IgUGFkcsOjbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICdBZGFwdGFkb3IgR3LDoWZpY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnRGlzY28gUsOtZ2lkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2s6OkNhcGFjaXR5J30gPSAnRGlzY28gUsOtZ2lkbzo6Q2FwYWNpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaWRlIFZlcnNpb25zJ30gPSAnT2N1bHRhciBWZXJzw7Vlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnRW5kZXJlw6dvIElQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0RIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICdEZXBhcnRhbWVudG8gZGUgVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5hY3RpdmUnfSA9ICdJbmF0aXZvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJ0RhdGEgSW5zdGFsYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvcmQnfSA9ICdUZWNsYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ1JFREUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnTm90ZWJvb2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBDaGFuZ2UnfSA9ICfDmmx0aW1hIEFsdGVyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnQ2hhdmUgZGUgTGljZW7Dp2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXk6OkV4cGlyYXRpb24gRGF0ZSd9ID0gJ0NoYXZlIGRlIExpY2Vuw6dhOjpEYXRhIGRlIEV4cGlyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5OjpRdWFudGl0eSd9ID0gJ0NoYXZlIGRlIExpY2Vuw6dhOjpRdWFudGlkYWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ1RpcG8gZGUgTGljZW7Dp2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICdNYW51dGVuw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICdOw7ptZXJvIG3DoXhpbW8gZGUgdW0gZWxlbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICdNw61kaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJ01vZGVsbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJ0FkYXB0YWRvciBkZSBSZWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgQWRkcmVzcyd9ID0gJ0FkYXB0YWRvciBkZSBSZWRlOjpFbmRlcmXDp28gSVAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyOjpJUCBvdmVyIERIQ1AnfSA9ICdBZGFwdGFkb3IgZGUgUmVkZTo6REhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICdFbmRlcmXDp28gZGUgUmVkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3M6OkdhdGV3YXknfSA9ICdFbmRlcmXDp28gZGUgUmVkZTo6Um90ZWFkb3IgUGFkcsOjbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3M6OlN1Ym5ldCBNYXNrJ30gPSAnRW5kZXJlw6dvIGRlIFJlZGU6Ok3DoXNjYXJhIGRlIFN1YnJlZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICdDw7NkaWdvIGFiZXJ0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpbmcgU3lzdGVtJ30gPSAnU2lzdGVtYSBPcGVyYWNpb25hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhY2lvbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnT3V0cm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAnT3V0cm8gRXF1aXBhbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnVG9tYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnQ2FydMOjbyBQQ01DSUEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnUG9yIE7Dsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnUG9yIFByb2Nlc3NhZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICdQb3IgU2Vydmlkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICdQb3IgVXN1w6FyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ1RlbGVmb25lIDEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJ1RlbGVmb25lIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICdQaWxvdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJ1BsYW5lamFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnSW1wcmVzc29yYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9kdWN0aW9uJ30gPSAnUHJvZHXDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ1F1YW50aWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICdNZW3Ds3JpYSBSQU0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnUmVwYXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICdSZXRpcmFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICdSZXZpc8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnU2FsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICdSb3RlYWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDb25maWcgSXRlbXMnfSA9ICdQZXNxdWlzYXIgSXRlbnMgZGUgQ29uZmlndXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnRGlzcG9zaXRpdm8gZGUgU2VndXJhbsOnYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnTsO6bWVybyBkZSBTw6lyaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnU2Vydmlkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnQXBsaWNhw6fDo28gU2Vydmlkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnU08gU2Vydmlkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBWZXJzaW9ucyd9ID0gJ1Zpc3VhbGl6YXIgVmVyc8O1ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICdMaWNlbsOnYSDDmm5pY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICdNw6FzY2FyYSBkZSBTdWJyZWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ1RlbGVjb211bmljYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICdUZXN0ZSBkZSBRdWFsaWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ08gZXN0YWRvIGRlIGltcGxhbnRhw6fDo28gZGVzdGUgaXRlbSBkZSBjb25maWd1cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ08gZXN0YWRvIGRlIGluY2lkZW50ZSBkZXN0ZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJ1RlbXBvIFJlc3RyaXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICdEaXNwb3NpdGl2byBVU0InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnSWxpbWl0YWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ0ZlcnJhbWVudGEgZG8gVXN1w6FyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICdMaWNlbsOnYSBwb3IgVm9sdW1lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnRGF0YSBkZSBFeHBpcmHDp8OjbyBkYSBHYXJhbnRpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrcGxhY2UnfSA9ICdMb2NhbCBkZSBUcmFiYWxobyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ29uZmlnSXRlbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gTWFuYWdlbWVudCd9ID0gJ0dlcmVuY2lhbWVudG8gZGUgSXRlbnMgZGUgQ29uZmlndXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICdNdWRhciBkZWZpbmnDp8OjbyBkZSBjbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0nfSA9ICdJdGVtIGRlIENvbmZpZ3VyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnQ2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24nfSA9ICdEZWZpbmnDp8Ojbyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBDbGFzc2VzJ30gPSAnRmlsdHJvIHBhcmEgQ2xhc3Nlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICdTZWxlY2lvbmUgdW1hIGNsYXNzZSBhIHBhcnRpciBkYSBsaXN0YSBwYXJhIGNyaWFyIHVtIG5vdm8gaXRlbSBkZSBjb25maWd1cmHDp8Ojby4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnTyBub21lIGRlc3RlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlIEltcGxhbnRhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhZG8gZGUgSW5jaWRlbnRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ0NvbmZpZ3VyYcOnw7VlcyBkZSBDb250ZXh0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICdJdGVucyBkZSBjb25maWd1cmHDp8OjbyBwb3IgcMOhZ2luYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJ1RpcG8gZGUgRXN0YWRvIGRlIEltcGxhbnRhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBkbyBJbmNpZGVudGUgQXR1YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnRXN0YWRvIEF0dWFsIGRlIEluY2lkZW50ZSBwb3IgdGlwbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfDmmx0aW1hIG1vZGlmaWNhw6fDo28nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1QcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJ0l0ZW0gZGUgY29uZmlndXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbS1JbmZvJ30gPSAnIEluZm9ybWHDp8OjbyBkbyBJdGVtIGRlIGNvbmZpZ3VyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBkZSBJbXBsYW50YcOnw6NvIEF0dWFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ8OabHRpbWEgbW9kaWZpY2HDp8OjbyBwb3InOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fsc28gc2VhcmNoIGluIHByZXZpb3VzIHZlcnNpb25zPyd9ID0gJ1Byb2N1cmFyIG5hcyB2ZXLDtWVzIGFudGVyaW9yZXMgdGFtYsOpbT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2hSZXN1bHRQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlVGltZSd9ID0gJ1RlbXBvIGRlIGNyaWHDp8Ojbyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJ0l0ZW0gZGUgY29uZmlndXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICdWaXN1YWxpemFyIHVtYSB2ZXJzw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnVmlzdWFsaXphciB0b2RhcyBhcyB2ZXJzw7Vlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRhIFZlcnPDo28gZGUgSW5jaWRlbnRlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJ07Dum1lcm8gZGEgdmVyc8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnRGV0YWxoZXMgZGEgVmVyc8OjbyBkbyBJdGVtIGRlIENvbmZpZ3VyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnUHJvcHJpZWRhZGUnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBldmVudG8gZGUgaXRlbSBkZSBjb25maWd1cmHDp8OjbyBxdWUgcGVybWl0ZSByZWdpc3RyYXIgbyBoaXN0w7NyaWNvIGRhIGludGVyZmFjZSBkbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJ0xpbWl0ZSBkZSBJdGVtIGRlIENvbmZpZ3VyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZSd9ID0gJ0xpbWl0ZSBkZSBJdGVtIGRlIENvbmZpZ3VyYcOnw6NvIHBvciBww6FnaW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JvdGVhZG9yIGRlIHBlc3F1aXNhIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gZGEgaW50ZXJmYWNlIGRvIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLid9ID0gJ0NyaWFyIGUgZ2VyZW5jaWFyIGFzIGRlZmluacOnw7VlcyBkZSBJdGVucyBkZSBDb25maWd1cmHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnRGVmaW5lIHVtIG3Ds2R1bG8gZGUgdmlzw6NvIGdlcmFsIHBhcmEgbW9zdHJhciBhIHZpc8OjbyBwZXF1ZW5hIGRhIGxpc3RhIGRlIGl0ZW5zIGRlIGNvbmZpZ3VyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnRGVmaW5lIG8gc3Vib2JqZXRvIHBhZHLDo28gZGEgY2xhc3NlIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkJ30gPQogICAgICAgICdEZWZpbmUgYXMgY29sdW5hcyBtb3N0cmFkYXMgbmEgdmlzw6NvIGdlcmFsIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28uIEVzdGEgb3DDp8OjbyBuw6NvIHRlbSBlZmVpdG8gc29icmUgYSBwb3Npw6fDo28gZGEgY29sdW5hLiBOb3RhOiBBIGNvbHVuYSBkZSBjbGFzc2UgZXN0w6Egc2VtcHJlIGRpc3BvbsOtdmVsLCBzZSBvIGZpbHRybyBcJ0FsbFwnIMOpIHNlbGVjaW9uYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmUgYXMgY29sdW5hcyBtb3N0cmFkYXMgbmEgYnVzY2EgZGUgaXRlbSBkZSBjb25maWd1cmHDp8Ojby4gRXN0YSBvcMOnw6NvIG7Do28gdGVtIGVmZWl0byBzb2JyZSBhIHBvc2nDp8OjbyBkYSBjb2x1bmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICdNw7NkdWxvIHBhcmEgdmVyaWZpY2FyIG8gZ3J1cG8gcmVzcG9uc8OhdmVsIHBvciB1bWEgY2xhc3NlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJ03Ds2R1bG8gcGFyYSB2ZXJpZmljYXIgbyBncnVwbyByZXNwb25zw6F2ZWwgcG9yIHVtIGl0ZW0gZGUgY29uZmlndXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnTcOzZHVsbyBwYXJhIGdlcmFyIGVzdGF0w61zdGljYXMgZG8gaXRlbSBkZSBjb25maWd1cmHDp8OjbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdNb2R1bG8gZGUgcmVnaXN0cm8gZGUgb2JqZXRvIHBhcmEgbyBtw7NkdWxvIGRlIGltcG9ydGHDp8Ojby9leHBvcnRhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGFyw6JtZXRyb3MgZGUgZXN0YWRvIGRlIGltcGxhbnRhw6fDo28gbmFzIHByZWZlcsOqbmNpYXMgZGUgZXhpYmnDp8OjbyBkYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXLDom1ldHJvcyBkbyBncnVwb3MgZGUgcGVybWlzc8OjbyBkZSBleGVtcGxvIGRvcyBhdHJpYnV0b3MgZG8gY2F0w6Fsb2dvIGdlcmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICdQYXLDom1ldHJvcyBkYXMgcMOhZ2luYXMgKG5hcyBxdWFpcyBvcyBpdGVucyBkZSBjb25maWd1cmHDp8OjbyBzw6NvIG1vc3RyYWRvcykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZXJtaXNzw7VlcyBuZWNlc3PDoXJpYXMgcGFyYSB1c2FyIGEgdGVsYSBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIElUU00gbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZXJtaXNzw7VlcyBuZWNlc3PDoXJpYXMgcGFyYSB1c2FyIGEgdGVsYSBkZSBwZXNxdWlzYSBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIElUU00gbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVybWlzc8O1ZXMgbmVjZXNzw6FyaWFzIHBhcmEgdXNhciBhIHRlbGEgZGUgZGV0YWxoZXMgZG8gaXRlbSBkZSBjb25maWd1cmHDp8OjbyBJVFNNIG5hIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVybWlzc8O1ZXMgbmVjZXNzw6FyaWFzIHBhcmEgdXNhciBhIHRlbGEgZGUgYWRpw6fDo28gZGUgaXRlbSBkZSBjb25maWd1cmHDp8OjbyBJVFNNIG5hIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Blcm1pc3PDtWVzIG5lY2Vzc8OhcmlhcyBwYXJhIHVzYXIgYSB0ZWxhIGRlIGVkacOnw6NvIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gSVRTTSBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZXJtaXNzw7VlcyBuZWNlc3PDoXJpYXMgcGFyYSB1c2FyIGEgdGVsYSBkZSBoaXN0w7NyaWNvIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gSVRTTSBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVybWlzc8O1ZXMgbmVjZXNzw6FyaWFzIHBhcmEgdXNhciBhIHRlbGEgZGUgaW1wcmVzc8OjbyBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIElUU00gbmEgaW50ZXJmYWNlIGRvIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnU2VsZWNpb25hIG8gbcOzZHVsbyBkZSBnZXJhw6fDo28gZGUgbsO6bWVybyBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvLiAiQXV0b2luY3JlbWVudG8iIGluY3JlbWVudGEgbyBuw7ptZXJvIGRvIGl0ZW0gZGUgY29uZmlndXJhw6fDo28sIG8gU3lzdGVtSUQsIG8gQ29uZmlnSXRlbUNsYXNzSUQgZSBvIENvdW50ZXIgc8OjbyB1c2Fkb3MuIE8gZm9ybWF0byDDqSAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIHBvciBleGVtcGxvLCAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcXVlIHBlcm1pdGUgYXNzb2NpYXIgdW0gaXRlbSBkZSBjb25maWd1cmHDp8OjbyBjb20gdW0gb3V0cm8gb2JqZXRvIG5hIHZpc8OjbyBkZSBkZXRhbGhlcyBkbyBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIGRhIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcGFyYSBhY2Vzc2FyIG8gaGlzdMOzcmljbyBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIG5hIHZpc8OjbyBkZSBkZXRhbGhlcyBkbyBtZXNtbyBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHBhcmEgZHVwbGljYXIgdW0gaXRlbSBkZSBjb25maWd1cmHDp8OjbyBuYSB2aXPDo28gZGUgZGV0YWxoZXMgZG8gbWVzbW8gbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcGFyYSBlZGl0YXIgdW0gaXRlbSBkZSBjb25maWd1cmHDp8OjbyBuYSB2aXPDo28gZGUgZGV0YWxoZXMgZG8gbWVzbW8gbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIHJldG9ybmFyIMOgIHRlbGEgZGUgdmlzw6NvIGRlIGRldGFsaGVzIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gZGEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHBhcmEgaW1wcmltaXIgdW0gaXRlbSBkZSBjb25maWd1cmHDp8OjbyBuYSB2aXPDo28gZGUgZGV0YWxoZXMgZG8gbWVzbW8gbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSBvIGhpc3TDs3JpY28gZG8gaXRlbSBjb25maWd1cmHDp8OjbyAob3JkZW0gcmV2ZXJzYSkgbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaXRoIHRoaXMgY29uZmlnIG9wdGlvbiBpdCBpcyBwb3NzaWJsZSB0byBkZWFjdGl2ZSB0aGUgZml4ZWQgb3ZlcnZpZXcgY29udHJvbCBiYXIgaW4gdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gb3ZlcnZpZXcuIEluIHNvbWUgc2NlbmFyaW9zIHRoaXMgd2lsbCBiZSBuZWNlc3NhcnksIGYuZS4gZHVlIHRvIHNtYWxsIHNjcmVlbiByZXNvbHV0aW9ucyBpbiBjb21iaW5hdGlvbiB3aXRoIGEgbG90IG9mIGNvbmZpZyBpdGVtIGNsYXNzZXMuJ30gPQogICAgICAgICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wdF9QVF9JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDEyIEZDQ04gLSBSdWkgRnJhbmNpc2NvIDxydWkuZnJhbmNpc2NvQGZjY24ucHQ+CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X1BUX0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICdFbmRlcmXDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ0ZlcnJhbWVudGEgZGUgQWRtaW5pc3RyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICdEaXNwb3NpdGl2byBkZSBCYWNrdXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmVhbWVyJ30gPSAnUHJvamV0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICdQcsOpZGlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbUNyZWF0ZSd9ID0gJ05vdm8gaXRlbSBkZSBjb25maWd1cmHDp8OjbyAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbURlbGV0ZSd9ID0gJ0l0ZW0gZGUgY29uZmlndXJhw6fDo28gKElEPSVzKSBleGNsdcOtZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpEZWZpbml0aW9uVXBkYXRlJ30gPSAnRGVmaW5pw6fDo28gZG8gQ0kgYXR1YWxpemFkYSAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6RGVwbG95bWVudFN0YXRlVXBkYXRlJ30gPSAnRXN0YWRvIGRlIGltcGxlbWVudGHDp8OjbyBhbHRlcmFkbyAobm92bz0lczsgYW50aWdvPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkluY2lkZW50U3RhdGVVcGRhdGUnfSA9ICdFc3RhZG8gZGUgaW5jaWRlbnRlIGFsdGVyYWRvIChub3ZvPSVzOyBhbnRpZ289JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TGlua0FkZCd9ID0gJ08gbGluayBwYXJhICVzIChUeXA9JXMpIGZvaSBhZGljaW9uYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TGlua0RlbGV0ZSd9ID0gJ08gbGluayAlcyAoVHlwPSVzKSBmb2kgYXBhZ2Fkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6Ok5hbWVVcGRhdGUnfSA9ICdOb21lIGFsdGVyYWRvIChub3ZvPSVzOyBhbnRpZ289JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmFsdWVVcGRhdGUnfSA9ICdPIGF0cmlidXRvICVzIGZvaSBhbHRlcmFkbyBkZSAiJXMiIHBhcmEgIiVzIiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWZXJzaW9uQ3JlYXRlJ30gPSAnTm92YSB2ZXJzw6NvIGNyaWFkYSAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmVyc2lvbkRlbGV0ZSd9ID0gJ1ZlcnPDo28gJXMgZm9pIGFwYWdhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnUHJvY2Vzc2Fkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAnQ2FtZXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAnQ2FwYWNBbnRpZ3VpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVmaW5pdGlvbid9ID0gJ0FsdGVyYXIgRGVmaW5pw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIG9mIGRlZmluaXRpb24gZmFpbGVkISBTZWUgU3lzdGVtIExvZyBmb3IgZGV0YWlscy4nfSA9ICdBbHRlcmHDp8OjbyBkYSBkZWZpbmnDp8OjbyBmYWxob3UhIFZlamEgbyBsb2cgcGFyYSBtYWlzIGluZm9ybWHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAnQXBsaWNhw6fDo28gQ2xpZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdTTyBDbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmN1cnJlbnQgVXNlcnMnfSA9ICdVdGlsaXphZG9yZXMgQ29uY29ycmVudGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtLUFyZWEnfSA9ICfDgXJlYSBJdGVtIGRlIENvbmZpZ3VyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBhdmFpbGFibGUnfSA9ICdJdGVucyBkZSBDb25maWd1cmHDp8OjbyBkaXNwb27DrXZlaXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHNob3duJ30gPSAnSXRlbnMgZGUgQ29uZmlndXJhw6fDo28gdmlzw612ZWlzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREInfSA9ICdDTURCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICdEZW1vbnN0cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnw4FyZWEgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAnTGljZW7Dp2EgZGUgZGVzZW52b2x2aW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICdEdXBsaWNhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJ0ludGVncmFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICdPcyBjYW1wb3MgdmF6aW9zIGluZGljYW0gcXVlIG9zIHZhbG9yZXMgYXR1YWlzIHPDo28gbWFudGlkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAnTGljZW7Dp2EgQ29ycG9yYXRpdmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnRGF0YSBkZSBFeHBpcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAnRXhwaXJhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRlFETid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ1Bpc28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICdMaXZyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICdBZGFwdGFkb3IgR3LDoWZpY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnRGlzY28gUsOtZ2lkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2s6OkNhcGFjaXR5J30gPSAnRGlzY28gUsOtZ2lkbzo6Q2FwYWNBbnRpZ3VpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaWRlIFZlcnNpb25zJ30gPSAnT2N1bHRhciBWZXJzw7Vlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnRW5kZXJlw6dvIElQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0RIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICdEZXBhcnRhbWVudG8gZGUgVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5hY3RpdmUnfSA9ICdJbmF0aXZvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJ0RhdGEgSW5zdGFsYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvcmQnfSA9ICdUZWNsYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ1JFREUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAncG9ydMOhdGlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgQ2hhbmdlJ30gPSAnw5psdGltYSBBbHRlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJ0NoYXZlIGRlIExpY2Vuw6dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5OjpFeHBpcmF0aW9uIERhdGUnfSA9ICdDaGF2ZSBkZSBMaWNlbsOnYTo6RGF0YSBkZSBFeHBpcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleTo6UXVhbnRpdHknfSA9ICdDaGF2ZSBkZSBMaWNlbsOnYTo6UXVhbnRBbnRpZ3VpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIFR5cGUnfSA9ICdUaXBvIGRlIExpY2Vuw6dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAnTWFudXRlbsOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnTsO6bWVybyBtw6F4aW1vIGRlIHVtIGVsZW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnTWVkaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJ01vZGVsbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAncmF0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICdBZGFwdGFkb3IgZGUgUmVkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXI6OklQIEFkZHJlc3MnfSA9ICdBZGFwdGFkb3IgZGUgUmVkZTo6RW5kZXJlw6dvIElQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgb3ZlciBESENQJ30gPSAnQWRhcHRhZG9yIGRlIFJlZGU6OkRIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAnRW5kZXJlw6dvIGRlIFJlZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzOjpHYXRld2F5J30gPSAnRW5kZXJlw6dvIGRlIFJlZGU6OkdhdGV3YXknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzOjpTdWJuZXQgTWFzayd9ID0gJ0VuZGVyZcOnbyBkZSBSZWRlOjpNw6FzY2FyYSBkZSBTdWJyZWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAnQ8OzZGlnbyBhYmVydG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW5nIFN5c3RlbSd9ID0gJ1Npc3RlbWEgT3BlcmF0aXZvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnT3BlcmF0aXZvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnT3V0cm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAnT3V0cm8gRXF1aXBhbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnVG9tYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnUGxhY2EgUENNQ0lBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJ1BvciBQb3N0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnUG9yIFByb2Nlc3NhZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICdQb3IgU2Vydmlkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICdQb3IgVXRpbGl6YWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnVGVsZWZvbmUgMSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnVGVsZWZvbmUgMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJ1BpbG90byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnUGxhbmVhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJ0ltcHJlc3NvcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvZHVjdGlvbid9ID0gJ1Byb2R1w6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICdRdWFudEFudGlndWlkYWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnTWVtw7NyaWEgUkFNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ1JlcGFyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICdSZXRpcmFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICdSZXZpc8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnU2FsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICdSb3V0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ29uZmlnIEl0ZW1zJ30gPSAnUGVzcXVpc2FyIEl0ZW5zIGRlIENvbmZpZ3VyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ0Rpc3Bvc2l0aXZvIGRlIFNlZ3VyYW7Dp2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJ07Dum1lcm8gZGUgU8OpcmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJ1NlcnZpZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ1NlcnZpZG9yIEFwbGljYWNpb25hbCAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnU08gU2Vydmlkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBWZXJzaW9ucyd9ID0gJ1Zpc3VhbGl6YXIgVmVyc8O1ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICdMaWNlbsOnYSDDmm5pY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICdNw6FzY2FyYSBkZSByZWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ1RlbGVjb211bmljYcOnw7Vlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAnVGVzdGUgZGUgUXVhbEFudGlndWlkYWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkZXBsb3ltZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdPIGVzdGFkbyBkZSBpbXBsZW1lbnRhw6fDo28gZG8gaXRlbSBkZSBjb25maWd1cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ08gZXN0YWRvIGRlIGluY2lkZW50ZSBkZXN0ZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJ1RlbXBvIFJlc3RyaXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICdEaXNwb3NpdGl2byBVU0InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnSWxpbWl0YWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ0ZlcnJhbWVudGEgZGUgVXRpbGl6YWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJ0xpY2Vuw6dhIHBvciBWb2x1bWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICdEYXRhIGRlIEV4cGlyYcOnw6NvIGRhIEdhcmFudGlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ0xvY2FsIGRlIFRyYWJhbGhvJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01Db25maWdJdGVtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBNYW5hZ2VtZW50J30gPSAnR2VzdMOjbyBkZSBJdGVucyBkZSBDb25maWd1cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgY2xhc3MgZGVmaW5pdGlvbid9ID0gJ011ZGFyIGRlZmluacOnw6NvIGRlIGNsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSd9ID0gJ0l0ZW0gZGUgQ29uZmlndXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xhc3MnfSA9ICdDbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJ0RlZmluacOnw6NvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIENsYXNzZXMnfSA9ICdGaWx0cm8gcGFyYSBDbGFzc2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIENsYXNzIGZyb20gdGhlIGxpc3QgdG8gY3JlYXRlIGEgbmV3IENvbmZpZyBJdGVtLid9ID0gJ1NlbGVjaW9uZSB1bWEgY2xhc3NlIGEgcGFydGlyIGRhIGxpc3RhIHBhcmEgY3JpYXIgdW0gbm92byBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdPIG5vbWUgZGVzdGUgaXRlbSBkZSBjb25maWd1cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlIEltcGxlbWVudGHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBkZSBJbmNpZGVudGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnQ29uZmlndXJhw6fDtWVzIGRlIENvbnRleHRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBwZXIgcGFnZSd9ID0gJ0l0ZW5zIGRlIGNvbmZpZ3VyYcOnw6NvIHBvciBww6FnaW5hJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBUeXBlJ30gPSAnVGlwbyBkZSBFc3RhZG8gZGUgSW1wbGVtZW50YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhZG8gZG8gSW5jaWRlbnRlIEF0dWFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ0VzdGFkbyBBdHVhbCBkZSBJbmNpZGVudGUgcG9yIHRpcG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBDaGFuZ2VkJ30gPSAnw5psdGltYSBNb2RpZmljYcOnw6NvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICdJdGVtIGRlIGNvbmZpZ3VyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0tSW5mbyd9ID0gJyBJbmZvcm1hw6fDo28gZG8gSXRlbSBkZSBjb25maWd1cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICdFc3RhZG8gZGUgSW1wbGVtZW50YcOnw6NvIEF0dWFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ8OabHRpbWEgbW9kaWZpY2HDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfDmmx0aW1hIG1vZGlmaWNhw6fDo28gcG9yJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICdQcm9jdXJhciBuYXMgdmVyc8O1ZXMgYW50ZXJpb3JlcyB0YW1iw6ltPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaFJlc3VsdFByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVUaW1lJ30gPSAnSG9yYSBkZSBjcmlhw6fDo28nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICdJdGVtIGRlIGNvbmZpZ3VyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICdWaXN1YWxpemFyIHVtYSB2ZXJzw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnVmlzdWFsaXphciB0b2RhcyBhcyB2ZXJzw7Vlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRhIFZlcnPDo28gZGUgSW5jaWRlbnRlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJ07Dum1lcm8gZGEgdmVyc8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnQ3JpYWRvIHBvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VkIE9uJ30gPSAnTW9kaWZpY2FkbyBwb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvciBoaWRlIHRoZSBjb250ZW50Lid9ID0gJ01vc3RyYXIgb3Ugb2N1bHRhciBvIGNvbnRlw7pkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJ0RldGFsaGVzIGRhIFZlcnPDo28gZG8gSXRlbSBkZSBDb25maWd1cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJ1Byb3ByaWVkYWRlJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdNw7NkdWxvIGRlIGV2ZW50byBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIHF1ZSBwZXJtaXRlIHJlZ2lzdGFyIG8gaGlzdMOzcmljbyBkYSBpbnRlcmZhY2UgZG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICdMaW1pdGUgZGUgSXRlbXMgZGUgQ29uZmlndXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlJ30gPSAnTGltaXRlIGRlIEl0ZW1zIGRlIENvbmZpZ3VyYcOnw6NvIHBvciBww6FnaW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdSb3V0ZXIgZGUgcGVzcXVpc2EgZGUgaXRlbSBkZSBjb25maWd1cmHDp8OjbyBkYSBpbnRlcmZhY2UgZG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnQ3JpYXIgZSBnZXJpciBhcyBkZWZpbmnDp8O1ZXMgZGUgSXRlbnMgZGUgQ29uZmlndXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9ICdEZWZpbmUgdW0gbcOzZHVsbyBkZSB2aXN0YSBnZXJhbCBwYXJhIG1vc3RyYXIgYSB2aXN0YSBwZXF1ZW5hIGRhIGxpc3RhIGRlIGl0ZW5zIGRlIGNvbmZpZ3VyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0gJ0RlZmluZSBvIHN1Ym9iamV0byBwb3Igb21pc3PDo28gZGEgY2xhc3NlIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkJ30gPSAnRGVmaW5lIGFzIGNvbHVuYXMgZGEgdmlzdGEgZ2VyYWwgZGUgaXRlbSBkZSBjb25maWd1cmHDp8Ojby4gRXN0YSBvcMOnw6NvIG7Do28gdGVtIGVmZWl0byBzb2JyZSBhIHBvc2nDp8OjbyBkYSBjb2x1bmEuIE5vdGE6IEEgY29sdW5hIGRlIGNsYXNzZSBlc3TDoSBzZW1wcmUgZGlzcG9uw612ZWwsIHNlIG8gZmlsdHJvIFwnQWxsXCcgZm9yIHNlbGVjaW9uYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnRGVmaW5lIGFzIGNvbHVuYXMgbW9zdHJhZGFzIG5hIGJ1c2NhIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28uIEVzdGEgb3DDp8OjbyBuw6NvIHRlbSBlZmVpdG8gc29icmUgYSBwb3Npw6fDo28gZGEgY29sdW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJ03Ds2R1bG8gcGFyYSB2ZXJpZmljYXIgbyBncnVwbyByZXNwb25zw6F2ZWwgcG9yIHVtYSBjbGFzc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0gJ03Ds2R1bG8gcGFyYSB2ZXJpZmljYXIgbyBncnVwbyByZXNwb25zw6F2ZWwgcG9yIHVtIGl0ZW0gZGUgY29uZmlndXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5ldGFyZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnTcOzZHVsbyBwYXJhIGdlcmFyIGVzdGF0w61zdGljYXMgZG8gaXRlbSBkZSBjb25maWd1cmHDp8OjbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPSAnTW9kdWxvIGRlIHJlZ2lzdG8gZGUgb2JqZXRvIHBhcmEgbyBtw7NkdWxvIGRlIGltcG9ydGHDp8Ojby9leHBvcnRhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ1BhcsOibWV0cm9zIGRlIGVzdGFkbyBkZSBpbXBsZW1lbnRhw6fDo28gbmFzIHByZWZlcsOqbmNpYXMgZGUgdmlzdWFsaXphw6fDo28gZGEgaW50ZXJmYWNlIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0gJ1BhcsOibWV0cm9zIGRvIGdydXBvcyBkZSBwZXJtaXNzw6NvIGRlIGV4ZW1wbG8gZG9zIGF0cmlidXRvcyBkbyBjYXTDoWxvZ28gZ2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9ICdQYXLDom1ldHJvcyBkYXMgcMOhZ2luYXMgKG5hcyBxdWFpcyBvcyBpdGVucyBkZSBjb25maWd1cmHDp8OjbyBzw6NvIHZpc3VhbGl6YWRvcykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnUGVybWlzc8O1ZXMgbmVjZXNzw6FyaWFzIHBhcmEgdXNhciBvIGZvcm11bMOhcmlvIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gSVRTTSBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ1Blcm1pc3PDtWVzIG5lY2Vzc8OhcmlhcyBwYXJhIHVzYXIgbyBmb3JtdWzDoXJpbyBkZSBwZXNxdWlzYSBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIElUU00gZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnUGVybWlzc8O1ZXMgbmVjZXNzw6FyaWFzIHBhcmEgdXNhciBvIGZvcm11bMOhcmlvIGRlIGRldGFsaGVzIGRvIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gSVRTTSBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ1Blcm1pc3PDtWVzIG5lY2Vzc8OhcmlhcyBwYXJhIHVzYXIgbyBmb3JtdWzDoXJpbyBkZSBhZGnDp8OjbyBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIElUU00gZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnUGVybWlzc8O1ZXMgbmVjZXNzw6FyaWFzIHBhcmEgdXNhciBvIGZvcm11bMOhcmlvIGRlIGVkacOnw6NvIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gSVRTTSBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdQZXJtaXNzw7VlcyBuZWNlc3PDoXJpYXMgcGFyYSB1c2FyIG8gZm9ybXVsw6FyaW8gZGUgaGlzdMOzcmljbyBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIElUU00gZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ1Blcm1pc3PDtWVzIG5lY2Vzc8OhcmlhcyBwYXJhIHVzYXIgbyBmb3JtdWzDoXJpbyBkZSBpbXByZXNzw6NvIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gSVRTTSBuYSBpbnRlcmZhY2UgZG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPSAnU2VsZWNpb25hIG8gbcOzZHVsbyBkZSBnZXJhw6fDo28gZGUgbsO6bWVybyBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvLiAiQXV0b2luY3JlbWVudG8iIGluY3JlbWVudGEgbyBuw7ptZXJvIGRvIGl0ZW0gZGUgY29uZmlndXJhw6fDo28sIG8gU3lzdGVtSUQsIG8gQ29uZmlnSXRlbUNsYXNzSUQgZSBvIENvdW50ZXIgc8OjbyB1dGlsaXphZG9zLiBPIGZvcm1hdG8gw6kgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBwb3IgZXhlbXBsbywgMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBxdWUgcGVybWl0ZSBhc3NvY2lhciB1bSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIGEgb3V0cm8gb2JqZXRvIG5hIHZpc3RhIGRlIGRldGFsaGVzIGRvIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIGFjZWRlciBvIGhpc3TDs3JpY28gZGUgaXRlbSBkZSBjb25maWd1cmHDp8OjbyBuYSB2aXN0YSBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdNb3N0cmEgdW0gbGluayBubyBtZW51IHBhcmEgZHVwbGljYXIgdW0gaXRlbSBkZSBjb25maWd1cmHDp8OjbyBuYSB2aXN0YSBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIGVkaXRhciB1bSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIG5hIHZpc3RhIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcGFyYSByZXRvcm5hciDDoCB2aXN0YSBkZSBkZXRhbGhlcyBkbyBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIGltcHJpbWlyIHVtIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gbmEgdmlzdGEgZGUgZGV0YWxoZXMgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01vc3RyYSBvIGhpc3TDs3JpY28gZG8gaXRlbSBjb25maWd1cmHDp8OjbyAob3JkZW0gaW52ZXJzYSkgbm8gaW50ZXJmYWNlIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0sIE15Q29uZmlnSXRlbS4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbS4nfSA9ICdPIGlkZW50aWZpY2Fkb3IgZGUgdW0gaXRlbSBkZSBjb25maWd1cmHDp8OjbywgcG9yIGV4ZW1wbG8sIENvbmZpZ0l0ZW0sIEl0ZW1Db25maWcsIE1ldUl0ZW1Db25maWcuIE8gdmFsb3IgcG9yIG9taXNzw6NvIMOpIENvbmZpZ0l0ZW0uJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ydV9JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnJ1X0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ9Ch0LjRgdGC0LXQvNC90YvQtSDRg9GC0LjQu9C40YLRiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAn0KPRgdGC0YDQvtC50YHRgtCy0L4g0LHRjdC60LDQv9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ9Cf0YDQvtC10LrRgtC+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpDb25maWdJdGVtQ3JlYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6Q29uZmlnSXRlbURlbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkRlZmluaXRpb25VcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpEZXBsb3ltZW50U3RhdGVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpJbmNpZGVudFN0YXRlVXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TGlua0FkZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkxpbmtEZWxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpOYW1lVXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmFsdWVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWZXJzaW9uQ3JlYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6VmVyc2lvbkRlbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkF0dGFjaG1lbnRBZGQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpBdHRhY2htZW50RGVsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ9Cm0J/Qoyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICfQmtCw0LzQtdGA0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICfQntCx0YrQtdC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBEZWZpbml0aW9uJ30gPSAn0JjQt9C80LXQvdC40YLRjCDQvtC/0LjRgdCw0L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBvZiBkZWZpbml0aW9uIGZhaWxlZCEgU2VlIFN5c3RlbSBMb2cgZm9yIGRldGFpbHMuJ30gPSAn0J3QtdCy0L7Qt9C80L7QttC90L4g0LjQt9C80LXQvdC40YLRjCDQvtC/0LjRgdCw0L3QuNC1ISDQlNC70Y8g0L/QvtC00YDQvtCx0L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC4INGB0LzQvtGC0YDQuCBTeXN0ZW0gTG9nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICfQmtC70LjQtdC90YLRgdC60L7QtSDQv9GA0LjQu9C+0LbQtdC90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICfQmtC70LjQtdC90YLRgdC60LDRjyDQntChJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmN1cnJlbnQgVXNlcnMnfSA9ICfQmtC+0L3QutGD0YDQtdC90YLQsNGPINC70LjRhtC10L3Qt9C40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0tQXJlYSd9ID0gJ9Ce0LHQt9C+0YAg0L7RgdC90L7QstC90YvRhSDRgdGA0LXQtNGB0YLQsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgYXZhaWxhYmxlJ30gPSAn0JTQvtGB0YLRg9C/0L3QviDQvtGB0L3QvtCy0L3Ri9GFINGB0YDQtdC00YHRgtCyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBzaG93bid9ID0gJ9Cf0L7QutCw0LfQsNC90L4g0L7RgdC90L7QstC90YvRhSDRgdGA0LXQtNGB0YLQsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICfQlNC10LzQvi3QstC10YDRgdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJ9Cd0LDRgdGC0L7Qu9GM0L3Ri9C5INCf0JonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICfQm9C40YbQtdC90LfQuNGPINC00LvRjyDRgNCw0LfRgNCw0LHQvtGC0YfQuNC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG9ja2luZyBTdGF0aW9uJ30gPSAn0JTQvtC6LdGB0YLQsNC90YbQuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ9Cg0LXQt9C10YDQsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJ9CS0YHRgtGA0L7QtdC90L3Ri9C5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICfQmtC+0YDQv9C+0YDQsNGC0LjQstC90LDRjyDQu9C40YbQtdC90LfQuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ9Ch0YDQvtC6INC70LjRhtC10L3Qt9C40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ9Cj0YHRgtCw0YDQtdC70L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRlFETid9ID0gJ0ZRRE4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICfQkdC10YHQv9C70LDRgtC90L7QtSDQn9CeJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJ0dTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAn0KjQu9GO0LcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAn0JLQuNC00LXQviDQsNC00LDQv9GC0LXRgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICfQltC10YHRgtC60LjQuSDQtNC40YHQuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2s6OkNhcGFjaXR5J30gPSAn0JbQtdGB0YLQutC40Lkg0LTQuNGB0Lo6OtCe0LHRitC10LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlkZSBWZXJzaW9ucyd9ID0gJ9Ch0LrRgNGL0YLRjCDQstC10YDRgdC40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgQWRkcmVzcyd9ID0gJ0lQINCw0LTRgNC10YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnSVAg0L/QviBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luYWN0aXZlJ30gPSAn0J3QtdCw0LrRgtC40LLQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAn0JjQvdGG0LjQtNC10L3Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICfQlNCw0YLQsCDRg9GB0YLQsNC90L7QstC60LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9yZCd9ID0gJ9Ca0LvQsNCy0LjQsNGC0YPRgNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ9Ch0LXRgtC10LLQsNGPINC60LDRgNGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAn0J3QvtGD0YLQsdGD0LonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBDaGFuZ2UnfSA9ICfQktGA0LXQvNGPINC/0L7RgdC70LXQtNC90LXQs9C+INC40LfQvNC10L3QtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJ9Cb0LjRhtC10L3Qt9C40L7QvdC90YvQuSDQutC70Y7Rhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleTo6RXhwaXJhdGlvbiBEYXRlJ30gPSAn0JvQuNGG0LXQvdC30LjQvtC90L3Ri9C5INC60LvRjtGHOjrQodGA0L7QuiDQu9C40YbQtdC90LfQuNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5OjpRdWFudGl0eSd9ID0gJ9Cb0LjRhtC10L3Qt9C40L7QvdC90YvQuSDQutC70Y7Rhzo60JrQvtC70LjRh9C10YHRgtCy0L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAn0KLQuNC/INC70LjRhtC10L3Qt9C40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICfQotC10YXQvdC40YfQtdGB0LrQvtC1INC+0LHRgdC70YPQttC40LLQsNC90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ9Cc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDQvtC00L3QvtCz0L4g0Y3Qu9C10LzQtdC90YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ9Cc0YPQu9GM0YLQuNC80LXQtNC40LnQvdGL0LUg0YHRgNC10LTRgdGC0LLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAn0J/RgNC+0LzQtdC20YPRgtC+0YfQvdC+0LUg0J/Qnic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJ9Cc0L7QtNC10LvRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ9Cc0L7QtNC10LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJ9Cc0L7QvdC40YLQvtGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAn0JzRi9GI0LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICfQodC10YLQtdCy0L7QuSDQsNC00LDQv9GC0LXRgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXI6OklQIEFkZHJlc3MnfSA9ICfQodC10YLQtdCy0L7QuSDQsNC00LDQv9GC0LXRgDo6SVAg0LDQtNGA0LXRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXI6OklQIG92ZXIgREhDUCd9ID0gJ9Ch0LXRgtC10LLQvtC5INCw0LTQsNC/0YLQtdGAOjpJUCDQv9C+IERIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAn0KHQtdGC0LXQstC+0Lkg0LDQtNGA0LXRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3M6OkdhdGV3YXknfSA9ICfQodC10YLQtdCy0L7QuSDQsNC00YDQtdGBOjrQqNC70Y7Qtyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3M6OlN1Ym5ldCBNYXNrJ30gPSAn0KHQtdGC0LXQstC+0Lkg0LDQtNGA0LXRgTo60JzQsNGB0LrQsCDQv9C+0LTRgdC10YLQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ9Cf0J4g0YEg0L7RgtC60YDRi9GC0YvQvCDQutC+0LTQvtC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGluZyBTeXN0ZW0nfSA9ICfQntC/0LXRgNCw0YbQuNC+0L3QvdCw0Y8g0YHQuNGB0YLQtdC80LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICfQkiDRjdC60YHQv9C70YPQsNGC0LDRhtC40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICfQlNGA0YPQs9C+0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAn0JTRgNGD0LPQvtC1INC+0LHQvtGA0YPQtNC+0LLQsNC90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICdQQ01DSUEg0LrQsNGA0YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQREEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICfQndCwINC90L7QtNGDKNGD0LfQtdC7KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAn0J3QsCDQptCf0KMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJ9Cd0LAg0YHQtdGA0LLQtdGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAn0J3QsCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAn0K3QutGB0L/QtdGA0LjQvNC10L3Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAn0JfQsNC/0LvQsNC90LjRgNC+0LLQsNC90L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAn0J/RgNC40L3RgtC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvZHVjdGlvbid9ID0gJ9Cf0YDQvtC40LfQstC+0LTRgdGC0LLQvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ9Ca0L7Qu9C40YfQtdGB0YLQstC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAn0J7Ql9CjJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ9Cg0LXQvNC+0L3Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAn0KHQv9C40YHQsNC90L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAn0K3QutGB0L/QtdGA0YLQuNC30LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICfQnNCw0YDRiNGA0YPRgtC40LfQsNGC0L7RgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAn0KHQutCw0L3QtdGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDb25maWcgSXRlbXMnfSA9ICfQn9C+0LjRgdC6INC+0YHQvdC+0LLQvdGL0YUg0YHRgNC10LTRgdGC0LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAn0KHQvNCw0YDRgi3QutCw0YDRgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICfQodC10YDQuNC50L3Ri9C5INC90L7QvNC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAn0KHQtdGA0LLQtdGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ9Ch0LXRgNCy0LXRgNC90L7QtSDQv9GA0LjQu9C+0LbQtdC90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICfQodC10YDQstC10YDQvdCw0Y8g0J7QoSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IFZlcnNpb25zJ30gPSAn0J/QvtC60LDQt9Cw0YLRjCDQstC10YDRgdC40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICfQntC00L3QvtC60YDQsNGC0L3QsNGPINC70LjRhtC10L3Qt9C40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICfQnNCw0YHQutCwINC/0L7QtNGB0LXRgtC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ9Ca0L7QvNC80YPRgtCw0YLQvtGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICfQotC10YHRgtC40YDQvtCy0LDQvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ9Ch0L7RgdGC0L7Rj9C90LjQtSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyDRjdGC0L7Qs9C+INC+0YHQvdC+0LLQvdC+0LPQviDRgdGA0LXQtNGB0YLQstCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAn0KHRgtCw0YLRg9GBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJ9Ce0LPRgNCw0L3QuNGH0LXQvdC90LDRjyDQv9C+INCy0YDQtdC80LXQvdC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICdVU0Ig0YPRgdGC0YDQvtC50YHRgtCy0L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAn0JHQtdC3INC+0LPRgNCw0L3QuNGH0LXQvdC40LknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAn0J/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0YHQutC40LUg0YPRgtC40LvQuNGC0YsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICfQmtC+0YDQv9C+0YDQsNGC0LjQstC90LDRjyDQu9C40YbQtdC90LfQuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICdXTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnV0xBTiDRgtC+0YfQutCwINC00L7RgdGC0YPQv9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJ9Ch0YDQvtC6INC40YHRgtC10YfQtdC90LjRjyDQs9Cw0YDQsNC90YLQuNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ29uZmlnSXRlbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gTWFuYWdlbWVudCd9ID0gJ9Cj0L/RgNCw0LLQu9C10L3QuNC1INC+0YHQvdC+0LLQvdGL0LzQuCDRgdGA0LXQtNGB0YLQstCw0LzQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgY2xhc3MgZGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSd9ID0gJ9Ce0YHQvdC+0LLQvdGL0LUg0YHRgNC10LTRgdGC0LLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGFzcyd9ID0gJ9Ca0LvQsNGB0YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBDbGFzc2VzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIENsYXNzIGZyb20gdGhlIGxpc3QgdG8gY3JlYXRlIGEgbmV3IENvbmZpZyBJdGVtLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICfQmNC80Y8g0Y3RgtC+0LPQviDRg9GH0LXRgtC90L7Qs9C+INGN0LvQtdC80LXQvdGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAn0KHQvtGB0YLQvtGP0L3QuNC1INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAn0KHQvtGB0YLQvtGP0L3QuNC1INC40L3RhtC40LTQtdC90YLQsCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn0KLQtdC60YPRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1INC40L3RhtC40LTQtdC90YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn0JLRgNC10LzRjyDQv9C+0YHQu9C10LTQvdC10LPQviDQuNC30LzQtdC90LXQvdC40Y8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1QcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAn0KLQtdC60YPRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ9CQ0LLRgtC+0YAg0L/QvtGB0LvQtdC00L3QtdCz0L4g0LjQt9C80LXQvdC10L3QuNGPJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICfQmNGB0LrQsNGC0Ywg0LIg0L/RgNC10LTRi9C00YPRidC40YUg0LLQtdGA0YHQuNGP0YU/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoUmVzdWx0UHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZVRpbWUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZCd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0b24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2l0aCB0aGlzIGNvbmZpZyBvcHRpb24gaXQgaXMgcG9zc2libGUgdG8gZGVhY3RpdmUgdGhlIGZpeGVkIG92ZXJ2aWV3IGNvbnRyb2wgYmFyIGluIHRoZSBBZ2VudElUU01Db25maWdJdGVtIG92ZXJ2aWV3LiBJbiBzb21lIHNjZW5hcmlvcyB0aGlzIHdpbGwgYmUgbmVjZXNzYXJ5LCBmLmUuIGR1ZSB0byBzbWFsbCBzY3JlZW4gcmVzb2x1dGlvbnMgaW4gY29tYmluYXRpb24gd2l0aCBhIGxvdCBvZiBjb25maWcgaXRlbSBjbGFzc2VzLid9ID0KICAgICAgICAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS96aF9DTl9JVFNNQ29uZmlnSXRlbS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnpoX0NOX0lUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHJlc3MnfSA9ICflnLDlnYAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ+euoeeQhuWRmOW3peWFtyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAn5aSH5Lu96K6+5aSHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ+aKleW9seS7qic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJ+Wkp+WOpic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkNvbmZpZ0l0ZW1DcmVhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpDb25maWdJdGVtRGVsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6RGVmaW5pdGlvblVwZGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkRlcGxveW1lbnRTdGF0ZVVwZGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkluY2lkZW50U3RhdGVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpMaW5rQWRkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6TGlua0RlbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6Ok5hbWVVcGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWYWx1ZVVwZGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OlZlcnNpb25DcmVhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lIaXN0b3J5OjpWZXJzaW9uRGVsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJSGlzdG9yeTo6QXR0YWNobWVudEFkZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSUhpc3Rvcnk6OkF0dGFjaG1lbnREZWxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnQ1BVJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ+eFp+ebuOacuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJ+WuuemHjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVmaW5pdGlvbid9ID0gJ+S/ruaUueWumuS5iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2Ugb2YgZGVmaW5pdGlvbiBmYWlsZWQhIFNlZSBTeXN0ZW0gTG9nIGZvciBkZXRhaWxzLid9ID0gJ+S/ruaUueWumuS5ieWksei0pSHor6bnu4bkv6Hmga/or7flj4LogIPns7vnu5/ml6Xlv5cuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJ+WuouaIt+err+W6lOeUqOeoi+W6jyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICflrqLmiLfmk43kvZzns7vnu58nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uY3VycmVudCBVc2Vycyd9ID0gJ+W5tuWPkeeUqOaIt+aVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbS1BcmVhJ30gPSAn6YWN572u6aG55Yy65Z+fJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBhdmFpbGFibGUnfSA9ICfmnInmlYjnmoTphY3nva7pobknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHNob3duJ30gPSAn5pi+56S66YWN572u6aG5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJ+a8lOekuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAn5Y+w5byP55S16ISRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAn5byA5Y+R6K645Y+vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJ+WdnuermSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICflpI3liLYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICfltYzlhaXlvI8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ+S8geS4muaJp+eFpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICfov4fmnJ/ml6XmnJ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ+WIsOacnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGUUROJ30gPSAnRlFETic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ+alvOWxgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJ+WFjei0uei9r+S7tic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICdHU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJ+e9keWFsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICflm77lvaLlpITnkIblmagnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAn56Gs55uYJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzazo6Q2FwYWNpdHknfSA9ICfnoaznm5g6OuWuuemHjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaWRlIFZlcnNpb25zJ30gPSAn6ZqQ6JeP54mI5pysJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdJUCDlnLDlnYAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAn5LuOIERIQ1Ag6I635Y+WIElQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnSVQg6K6+5pa9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luYWN0aXZlJ30gPSAn6Z2e5rS75Yqo55qEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAn5LqL5Lu2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJ+WuieijheaXpeacnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib3JkJ30gPSAn6ZSu55uYJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICfnrJTorrDmnKwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBDaGFuZ2UnfSA9ICfmnIDlkI7mm7TmlLknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICforrjlj6/lr4bpkqUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXk6OkV4cGlyYXRpb24gRGF0ZSd9ID0gJ+iuuOWPr+WvhumSpTo65Yiw5pyf5pe26Ze0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5OjpRdWFudGl0eSd9ID0gJ+iuuOWPr+WvhumSpTo65pWw6YePJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ+iuuOWPr+exu+WIqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ+e7tOaKpCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ+atpOWFg+e0oOeahOacgOWkp+aVsOmHjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ+S7i+i0qCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAn5Lit6Ze05Lu2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAn5Z6L5Y+3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAn6LCD6Kej6LCD5ZmoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICfmmL7npLrlmagnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICfpvKDmoIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAn572R5Y2hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgQWRkcmVzcyd9ID0gJ+e9keWNoTo6SVAg5Zyw5Z2AJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcjo6SVAgb3ZlciBESENQJ30gPSAn572R5Y2hOjrku44gREhDUCDojrflj5YgSVAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAn572R57uc5Zyw5Z2AJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzczo6R2F0ZXdheSd9ID0gJ+e9kee7nOWcsOWdgDo6572R5YWzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzczo6U3VibmV0IE1hc2snfSA9ICfnvZHnu5zlnLDlnYA6OuWtkOe9keaOqeeggSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ+W8gOa6kCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpbmcgU3lzdGVtJ30gPSAn5pON5L2c57O757ufJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAn5Y+v55So55qEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAn5YW25a6DJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ+WFtuWug+WFg+e0oCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICfmj5LluqcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICdQQ01DSUEg5Y2hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJ1BEQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJ+avj+iKgueCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAn5q+P5aSE55CG5ZmoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICfmr4/mnI3liqHlmagnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICfmr4/nlKjmiLcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ+eUteivnSAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICfnlLXor50gMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJ+W8leWvvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAn5bey6KeE5YiSJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICfmiZPljbDmnLonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvZHVjdGlvbid9ID0gJ+S6p+eUnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ+aVsOmHjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAn5py65p62JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ+WGheWtmCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICfkv67lpI0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJ+WbnuaUtic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICflpI3lrqEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJ+aIv+mXtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICfot6/nlLHlmagnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ+aJq+aPj+S7qic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ29uZmlnIEl0ZW1zJ30gPSAn5pCc57Si6YWN572u6aG5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ+WuieWFqOiuvuWkhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAn5bqP5YiX5Y+3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJ+acjeWKoeWZqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgQXBwbGljYXRpb24nfSA9ICfmnI3liqHlmajlupTnlKjnqIvluo8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAn5pyN5Yqh5Zmo5pON5L2c57O757ufJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgVmVyc2lvbnMnfSA9ICfmmL7npLrniYjmnKwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICfljZXkuIDorrjlj68nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICflrZDnvZHmjqnnoIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAn5Lqk5o2i5py6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAn55S16K+d5YWs5Y+4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICfmtYvor5UvUUEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ+W6lOeUqOi/meS4qumDqOe9sueKtuaAgeWIsOmFjee9rumhuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ+W6lOeUqOi/meS4quS6i+S7tueKtuaAgeWIsOmFjee9rumhuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICfml7bpl7TpmZDliLYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ1VTQiDorr7lpIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAn5peg6ZmQ5Yi255qEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ+eUqOaIt+W3peWFtyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJ+aJuemHj+aOiOadgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAn5peg57q/572R57ucJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnV0xBTiDml6Dnur/orr/pl67ngrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAn5L+d5L+u6L+H5pyf5pel5pyfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ+i9pumXtCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ29uZmlnSXRlbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gTWFuYWdlbWVudCd9ID0gJ+euoeeQhumFjee9rumhuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgY2xhc3MgZGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSd9ID0gJ+mFjee9rumhuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGFzcyd9ID0gJ+e6p+WIqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIENsYXNzZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgQ2xhc3MgZnJvbSB0aGUgbGlzdCB0byBjcmVhdGUgYSBuZXcgQ29uZmlnIEl0ZW0uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ+S4uui/meS4qumFjee9rumhueWRveWQjSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIGFscmVhZHkgaW4gdXNlIGJ5IHRoZSBDb25maWdJdGVtcyB3aXRoIHRoZSBmb2xsb3dpbmcgTnVtYmVyKHMpOiAlcyd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUnfSA9ICfpg6jnvbLnirbmgIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICfkuovku7bnirbmgIEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn5b2T5YmN55qE5LqL5Lu254q25oCBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfmnIDlkI7kv67mlLknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1QcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAn5b2T5YmN55qE6YOo572y54q25oCBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ+acgOWQjuS/ruaUueS6jic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAn5ZCM5pe25pCc57Si5Lul5YmN55qE54mI5pysPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaFJlc3VsdFByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVUaW1lJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGxpc3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdG9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpdGggdGhpcyBjb25maWcgb3B0aW9uIGl0IGlzIHBvc3NpYmxlIHRvIGRlYWN0aXZlIHRoZSBmaXhlZCBvdmVydmlldyBjb250cm9sIGJhciBpbiB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBvdmVydmlldy4gSW4gc29tZSBzY2VuYXJpb3MgdGhpcyB3aWxsIGJlIG5lY2Vzc2FyeSwgZi5lLiBkdWUgdG8gc21hbGwgc2NyZWVuIHJlc29sdXRpb25zIGluIGNvbWJpbmF0aW9uIHdpdGggYSBsb3Qgb2YgY29uZmlnIGl0ZW0gY2xhc3Nlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNvbmZpZ0l0ZW0ucG0gLSBhZG1pbiBmcm9udGVuZCB0byBtYW5hZ2UgY29uZmlnIGl0ZW1zCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluSVRTTUNvbmZpZ0l0ZW07Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nOwp1c2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IENvbmZpZ09iamVjdCBMb2dPYmplY3QpKSB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2ctPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0tPm5ldyglUGFyYW0pOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNsYXNzIGxpc3QKICAgIG15ICRDbGFzc0xpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICk7CiAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigpIGlmICEkQ2xhc3NMaXN0OwogICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKSBpZiByZWYgJENsYXNzTGlzdCBuZSAnSEFTSCc7CiAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigpIGlmICEleyRDbGFzc0xpc3R9OwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgZGVmaW5pdGlvbiBsaXN0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRGVmaW5pdGlvbkxpc3QnICkgewoKICAgICAgICAjIGdldCBjbGFzcyBpZAogICAgICAgIG15ICRDbGFzc0lEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnQ2xhc3NJRCcgKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApIGlmICEkQ2xhc3NJRDsKCiAgICAgICAgIyBnZW5lcmF0ZSBDbGFzc09wdGlvblN0cmcKICAgICAgICBteSAkQ2xhc3NPcHRpb25TdHJnID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRDbGFzc0xpc3QsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnQ2xhc3NJRCcsCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRDbGFzc0lELAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzT3B0aW9uU3RyZyA9PiAkQ2xhc3NPcHRpb25TdHJnLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IHJlc3VsdAogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0RlZmluaXRpb25MaXN0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lID0+ICRDbGFzc0xpc3QtPnskQ2xhc3NJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgZGVmaW5pdGlvbiBsaXN0CiAgICAgICAgbXkgJERlZmluaXRpb25MaXN0ID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+RGVmaW5pdGlvbkxpc3QoCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzSUQsCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICREZWZpbml0aW9uICggcmV2ZXJzZSBAeyREZWZpbml0aW9uTGlzdH0gKSB7CgogICAgICAgICAgICAjIGdldCB1c2VyIGRhdGEKICAgICAgICAgICAgbXkgJVVzZXJEYXRhID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJERlZmluaXRpb24tPntDcmVhdGVCeX0sCiAgICAgICAgICAgICAgICBDYWNoZWQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0IGRlZmluaXRpb24KICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0RlZmluaXRpb25MaXN0Um93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVVc2VyRGF0YSwKICAgICAgICAgICAgICAgICAgICAleyREZWZpbml0aW9ufSwKICAgICAgICAgICAgICAgICAgICBDbGFzcyA9PiAkQ2xhc3NMaXN0LT57JENsYXNzSUR9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgQWN0aW9uT3ZlcnZpZXcKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBY3Rpb25PdmVydmlldycsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBkZWZpbml0aW9uIHZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdEZWZpbml0aW9uVmlldycgKSB7CgogICAgICAgICMgZ2V0IGRlZmluaXRpb24gaWQKICAgICAgICBteSAkRGVmaW5pdGlvbklEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnRGVmaW5pdGlvbklEJyApOwoKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICkgaWYgISREZWZpbml0aW9uSUQ7CgogICAgICAgICMgZ2V0IGRlZmluaXRpb24KICAgICAgICBteSAkRGVmaW5pdGlvbiA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkRlZmluaXRpb25HZXQoCiAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkRGVmaW5pdGlvbklELAogICAgICAgICk7CiAgICAgICAgJERlZmluaXRpb24tPntEZWZpbml0aW9uU3RyaW5nfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJERlZmluaXRpb24tPntEZWZpbml0aW9ufSwKICAgICAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGdlbmVyYXRlIENsYXNzT3B0aW9uU3RyZwogICAgICAgIG15ICRDbGFzc09wdGlvblN0cmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJENsYXNzTGlzdCwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdDbGFzc0lEJywKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJERlZmluaXRpb24tPntDbGFzc0lEfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc09wdGlvblN0cmcgPT4gJENsYXNzT3B0aW9uU3RyZywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCB1c2VyIGRhdGEKICAgICAgICBteSAlVXNlckRhdGEgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEID0+ICREZWZpbml0aW9uLT57Q3JlYXRlQnl9LAogICAgICAgICAgICBDYWNoZWQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBvdmVydmlldyByZXN1bHQKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdEZWZpbml0aW9uVmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVVzZXJEYXRhLAogICAgICAgICAgICAgICAgJXskRGVmaW5pdGlvbn0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBBY3Rpb25PdmVydmlldwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JywKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5JVFNNQ29uZmlnSXRlbScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGRlZmluaXRpb24gY2hhbmdlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRGVmaW5pdGlvbkNoYW5nZScgKSB7CgogICAgICAgICMgZ2V0IGNsYXNzIGlkCiAgICAgICAgbXkgJENsYXNzSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdDbGFzc0lEJyApOwoKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICkgaWYgISRDbGFzc0lEOwoKICAgICAgICAjIGdldCBjbGFzcyBsaXN0CiAgICAgICAgbXkgJENsYXNzTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICAgICApOwoKICAgICAgICAjIGdldCBkZWZpbml0aW9uCiAgICAgICAgbXkgJERlZmluaXRpb24gPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5EZWZpbml0aW9uR2V0KAogICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lELAogICAgICAgICk7CgogICAgICAgICMgZ2VuZXJhdGUgQ2xhc3NPcHRpb25TdHJnCiAgICAgICAgbXkgJENsYXNzT3B0aW9uU3RyZyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkQ2xhc3NMaXN0LAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ0NsYXNzSUQnLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkQ2xhc3NJRCwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc09wdGlvblN0cmcgPT4gJENsYXNzT3B0aW9uU3RyZywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBvdmVydmlldyByZXN1bHQKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdEZWZpbml0aW9uQ2hhbmdlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAleyREZWZpbml0aW9ufSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzSUQsCiAgICAgICAgICAgICAgICBDbGFzcyAgID0+ICRDbGFzc0xpc3QtPnskQ2xhc3NJRH0sCiAgICAgICAgICAgICAgICBSb3dzICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e0VkaXRvclJvd3N9IHx8IDMwLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgQWN0aW9uT3ZlcnZpZXcKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBY3Rpb25PdmVydmlldycsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBkZWZpbml0aW9uIHNhdmUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdEZWZpbml0aW9uU2F2ZScgKSB7CiAgICAgICAgbXkgJURlZmluaXRpb247CgogICAgICAgICMgZ2V0IHBhcmFtcwogICAgICAgIGZvciBteSAkRm9ybVBhcmFtIChxdyhDbGFzc0lEIERlZmluaXRpb24pKSB7CiAgICAgICAgICAgICREZWZpbml0aW9ueyRGb3JtUGFyYW19ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkRm9ybVBhcmFtICkgfHwgJyc7CiAgICAgICAgfQogICAgICAgIGZvciBteSAkRm9ybVBhcmFtIChxdyhDbGFzc0lEIERlZmluaXRpb24pKSB7CiAgICAgICAgICAgIGlmICggISREZWZpbml0aW9ueyRGb3JtUGFyYW19ICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coIFByaW9yaXR5ID0+ICdlcnJvcicsIE1lc3NhZ2UgPT4gIk5lZWQgJEZvcm1QYXJhbSEiICk7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYWRkIHRvIGRhdGFiYXNlCiAgICAgICAgbXkgJERlZmluaXRpb25JRCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkRlZmluaXRpb25BZGQoCiAgICAgICAgICAgICVEZWZpbml0aW9uLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKCkgaWYgISREZWZpbml0aW9uSUQ7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY29uZmlnIGl0ZW0gY2xhc3Mgb3ZlcnZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2UgewoKICAgICAgICAjIGdlbmVyYXRlIENsYXNzT3B0aW9uU3RyZwogICAgICAgIG15ICRDbGFzc09wdGlvblN0cmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJENsYXNzTGlzdCwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdDbGFzc0lEJywKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzT3B0aW9uU3RyZyA9PiAkQ2xhc3NPcHRpb25TdHJnLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IHJlc3VsdAogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TGlzdCcsCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICRDbGFzc0lEICggc29ydCB7ICRDbGFzc0xpc3QtPnskYX0gY21wICRDbGFzc0xpc3QtPnskYn0gfSBrZXlzICV7JENsYXNzTGlzdH0gKSB7CgogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdMaXN0Um93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzSUQsCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICA9PiAkQ2xhc3NMaXN0LT57JENsYXNzSUR9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbklUU01Db25maWdJdGVtJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQp9CgoxOwo=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW0ucG0gLSB0aGUgT1RSUyBJVFNNIGNvbmZpZyBpdGVtIG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBDb25maWdPYmplY3QpKSB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2ctPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0tPm5ldyglUGFyYW0pOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgZ2V0IGRlZmF1bHQgcGFyYW1ldGVycywgdHJ5IHRvIGdldCBmaWx0ZXIgKENsYXNzSUQpIGZyb20gc2Vzc2lvbiBpZiBub3QgZ2l2ZW4gYXMgcGFyYW1ldGVyCiAgICAkU2VsZi0+e0ZpbHRlcn0KICAgICAgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbHRlcicgKQogICAgICAgIHx8ICRTZWxmLT57QWdlbnRJVFNNQ29uZmlnSXRlbUNsYXNzRmlsdGVyfQogICAgICAgIHx8ICcnOwogICAgJFNlbGYtPntWaWV3fSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1ZpZXcnICkgfHwgJyc7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnIGRhdGEKICAgICRTZWxmLT57U2VhcmNoTGltaXR9ID0gJFNlbGYtPntDb25maWd9LT57U2VhcmNoTGltaXR9IHx8IDEwMDAwOwoKICAgICMgc3RvcmUgbGFzdCBzY3JlZW4sIHVzZWQgZm9yIGJhY2tsaW5rcwogICAgJFNlbGYtPntTZXNzaW9uT2JqZWN0fS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuVmlldycsCiAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57UmVxdWVzdGVkVVJMfSwKICAgICk7CgogICAgIyBzdG9yZSBsYXN0IHNjcmVlbiBvdmVydmlldwogICAgJFNlbGYtPntTZXNzaW9uT2JqZWN0fS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuT3ZlcnZpZXcnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgc3RvcmUgZmlsdGVyIChDbGFzc0lEKSBpbiBzZXNzaW9uCiAgICAkU2VsZi0+e1Nlc3Npb25PYmplY3R9LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ0FnZW50SVRTTUNvbmZpZ0l0ZW1DbGFzc0ZpbHRlcicsCiAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57RmlsdGVyfSwKICAgICk7CgogICAgIyBnZXQgc29ydGluZyBwYXJhbWV0ZXJzCiAgICBteSAkU29ydEJ5ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU29ydEJ5JyApCiAgICAgICAgfHwgJFNlbGYtPntDb25maWd9LT57J1NvcnRCeTo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ051bWJlcic7CgogICAgIyBnZXQgb3JkZXJpbmcgcGFyYW1ldGVycwogICAgbXkgJE9yZGVyQnkgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdPcmRlckJ5JyApCiAgICAgICAgfHwgJFNlbGYtPntDb25maWd9LT57J09yZGVyOjpEZWZhdWx0J30KICAgICAgICB8fCAnRG93bic7CgogICAgIyBzZXQgU29ydCBhbmQgT3JkZXIgYnkgYXMgQXJyYXlzCiAgICBteSBAU29ydEJ5QXJyYXkgID0gKCRTb3J0QnkpOwogICAgbXkgQE9yZGVyQnlBcnJheSA9ICgkT3JkZXJCeSk7CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgKTsKCiAgICAjIGdldCBwb3NzaWJsZSBkZXBsb3ltZW50IHN0YXRlIGxpc3QgZm9yIGNvbmZpZyBpdGVtcyB0byBiZSBzaG93bgogICAgbXkgJFN0YXRlTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gWyAncHJlcHJvZHVjdGl2ZScsICdwcm9kdWN0aXZlJyBdLAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2V0IHRoZSBkZXBsb3ltZW50IHN0YXRlIElEcyBwYXJhbWV0ZXIgZm9yIHRoZSBzZWFyY2gKICAgIG15ICREZXBsU3RhdGVJRHM7CiAgICBmb3IgbXkgJERlcGxTdGF0ZUtleSAoIGtleXMgJXskU3RhdGVMaXN0fSApIHsKICAgICAgICBwdXNoIEB7JERlcGxTdGF0ZUlEc30sICREZXBsU3RhdGVLZXk7CiAgICB9CgogICAgIyB0byBzdG9yZSB0aGUgZGVmYXVsdCBjbGFzcwogICAgbXkgJENsYXNzSURBdXRvID0gJyc7CgogICAgIyB0byBzdG9yZSB0aGUgTmF2QmFyIGZpbHRlcnMKICAgIG15ICVGaWx0ZXJzOwoKICAgICMgZGVmaW5lIHBvc2l0aW9uIG9mIHRoZSBmaWx0ZXIgaW4gdGhlIGZyb250ZW5kCiAgICBteSAkUHJpb0NvdW50ZXIgPSAxMDAwOwoKICAgICMgdG8gc3RvcmUgdGhlIHRvdGFsIG51bWJlciBvZiBjb25maWcgaXRlbXMgaW4gYWxsIGNsYXNzZXMgdGhhdCB0aGUgdXNlciBoYXMgYWNjZXNzCiAgICBteSAkVG90YWxDb3VudDsKCiAgICAjIHRvIHN0b3JlIGFsbCB0aGUgY2xhc2VzIHRoYXQgdGhlIHVzZXIgaGFzIGFjY2VzcywgdXNlZCBpbiBzZWFyY2ggZm9yIGZpbHRlciAnQWxsJwogICAgbXkgJEFjY2Vzc0NsYXNzTGlzdDsKCiAgICBDTEFTU0lEOgogICAgZm9yIG15ICRDbGFzc0lEICggc29ydCB7ICR7JENsYXNzTGlzdH17JGF9IGNtcCAkeyRDbGFzc0xpc3R9eyRifSB9IGtleXMgJXskQ2xhc3NMaXN0fSApIHsKCiAgICAgICAgIyBzaG93IG1lbnUgbGluayBvbmx5IGlmIHVzZXIgaGFzIGFjY2VzcyByaWdodHMKICAgICAgICBteSAkSGFzQWNjZXNzID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+UGVybWlzc2lvbigKICAgICAgICAgICAgU2NvcGUgICA9PiAnQ2xhc3MnLAogICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lELAogICAgICAgICAgICBVc2VySUQgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgVHlwZSAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICApOwoKICAgICAgICBuZXh0IENMQVNTSUQgaWYgISRIYXNBY2Nlc3M7CgogICAgICAgICMgaW5zZXJ0IHRoaXMgY2xhc3MgdG8gYmUgcGFzc2VkIGFzIHNlYXJjaCBwYXJhbWV0ZXIgZm9yIGZpbHRlciAnQWxsJwogICAgICAgIHB1c2ggQHskQWNjZXNzQ2xhc3NMaXN0fSwgJENsYXNzSUQ7CgogICAgICAgICMgY291bnQgYWxsIHJlY29yZHMgb2YgdGhpcyBjbGFzcwogICAgICAgIG15ICRDbGFzc0NvdW50ID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+Q29uZmlnSXRlbUNvdW50KAogICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lELAogICAgICAgICk7CgogICAgICAgICMgYWRkIHRoZSBjb25maWcgaXRlbXMgbnVtYmVyIGluIHRoaXMgY2xhc3MgdG8gdGhlIHRvdGFsCiAgICAgICAgJFRvdGFsQ291bnQgKz0gJENsYXNzQ291bnQ7CgogICAgICAgICMgaW5jcmVhc2UgdGhlIFByaW9Db3VudGVyCiAgICAgICAgJFByaW9Db3VudGVyKys7CgogICAgICAgICMgYWRkIGZpbHRlciB3aXRoIHBhcmFtcyBmb3IgdGhlIHNlYXJjaCBtZXRob2QKICAgICAgICAkRmlsdGVyc3skQ2xhc3NJRH0gPSB7CiAgICAgICAgICAgIE5hbWUgICA9PiAkQ2xhc3NMaXN0LT57JENsYXNzSUR9LAogICAgICAgICAgICBQcmlvICAgPT4gJFByaW9Db3VudGVyLAogICAgICAgICAgICBDb3VudCAgPT4gJENsYXNzQ291bnQsCiAgICAgICAgICAgIFNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEcyAgICAgICAgID0+IFskQ2xhc3NJRF0sCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRHMgICAgID0+ICREZXBsU3RhdGVJRHMsCiAgICAgICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFxAU29ydEJ5QXJyYXksCiAgICAgICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFxAT3JkZXJCeUFycmF5LAogICAgICAgICAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAkU2VsZi0+e1NlYXJjaExpbWl0fSwKICAgICAgICAgICAgfSwKICAgICAgICB9OwoKICAgICAgICAjIHJlbWVtYmVyIHRoZSBmaXJzdCBjbGFzcyBpZCB0byBzaG93IHRoaXMgaW4gdGhlIG92ZXJ2aWV3CiAgICAgICAgIyBpZiBubyBjbGFzcyBpZCB3YXMgZ2l2ZW4KICAgICAgICBpZiAoICEkQ2xhc3NJREF1dG8gKSB7CiAgICAgICAgICAgICRDbGFzc0lEQXV0byA9ICRDbGFzc0lEOwogICAgICAgIH0KICAgIH0KCiAgICAjIGlmIG9ubHkgb25lIGZpbHRlciBleGlzdHMKICAgIGlmICggc2NhbGFyIGtleXMgJUZpbHRlcnMgPT0gMSApIHsKCiAgICAgICAgIyBnZXQgdGhlIG5hbWUgb2YgdGhlIG9ubHkgZmlsdGVyCiAgICAgICAgbXkgKCRGaWx0ZXJOYW1lKSA9IGtleXMgJUZpbHRlcnM7CgogICAgICAgICMgYWN0aXZhdGUgdGhpcyBmaWx0ZXIKICAgICAgICAkU2VsZi0+e0ZpbHRlcn0gPSAkRmlsdGVyTmFtZTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGFkZCBkZWZhdWx0IGZpbHRlciwgd2hpY2ggc2hvd3MgYWxsIGl0ZW1zCiAgICAgICAgJEZpbHRlcnN7QWxsfSA9IHsKICAgICAgICAgICAgTmFtZSAgID0+ICdBbGwnLAogICAgICAgICAgICBQcmlvICAgPT4gMTAwMCwKICAgICAgICAgICAgQ291bnQgID0+ICRUb3RhbENvdW50LAogICAgICAgICAgICBTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRHMgICAgICAgICA9PiAkQWNjZXNzQ2xhc3NMaXN0LAogICAgICAgICAgICAgICAgRGVwbFN0YXRlSURzICAgICA9PiAkRGVwbFN0YXRlSURzLAogICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBcQFNvcnRCeUFycmF5LAogICAgICAgICAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBcQE9yZGVyQnlBcnJheSwKICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgPT4gJFNlbGYtPntTZWFyY2hMaW1pdH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfTsKCiAgICAgICAgIyBpZiBubyBmaWx0ZXIgd2FzIHNlbGVjdGVkIGFjdGl2YXRlIHRoZSBmaWx0ZXIgZm9yIHRoZSBkZWZhdWx0IGNsYXNzCiAgICAgICAgaWYgKCAhJFNlbGYtPntGaWx0ZXJ9ICkgewogICAgICAgICAgICAkU2VsZi0+e0ZpbHRlcn0gPSAkQ2xhc3NJREF1dG87CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgZmlsdGVyIGlzIHZhbGlkCiAgICBpZiAoICEkRmlsdGVyc3sgJFNlbGYtPntGaWx0ZXJ9IH0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05vIGFjY2VzcyB0byBDbGFzcyBpcyBnaXZlbiEnLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgaW52ZXN0aWdhdGUgcmVmcmVzaAogICAgbXkgJFJlZnJlc2ggPSAkU2VsZi0+e1VzZXJSZWZyZXNoVGltZX0gPyA2MCAqICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA6IHVuZGVmOwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKAogICAgICAgIFRpdGxlICAgPT4gJ092ZXJ2aWV3JywKICAgICAgICBSZWZyZXNoID0+ICRSZWZyZXNoLAogICAgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPlByaW50KCBPdXRwdXQgPT4gXCRPdXRwdXQgKTsKICAgICRPdXRwdXQgPSAnJzsKCiAgICAjIGRpc3BsYXkgYWxsIG5hdmJhciBmaWx0ZXJzCiAgICBteSAlTmF2QmFyRmlsdGVyOwogICAgZm9yIG15ICRGaWx0ZXIgKCBrZXlzICVGaWx0ZXJzICkgewoKICAgICAgICAjIGRpc3BsYXkgdGhlIG5hdmJhciBmaWx0ZXIKICAgICAgICAkTmF2QmFyRmlsdGVyeyAkRmlsdGVyc3skRmlsdGVyfS0+e1ByaW99IH0gPSB7CiAgICAgICAgICAgIEZpbHRlciA9PiAkRmlsdGVyLAogICAgICAgICAgICAleyAkRmlsdGVyc3skRmlsdGVyfSB9LAogICAgICAgIH07CiAgICB9CgogICAgIyBzZWFyY2ggY29uZmlnIGl0ZW1zIHdoaWNoIG1hdGNoIHRoZSBzZWxlY3RlZCBmaWx0ZXIKICAgIG15ICRDb25maWdJdGVtSURzID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+Q29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKAogICAgICAgICV7ICRGaWx0ZXJzeyAkU2VsZi0+e0ZpbHRlcn0gfS0+e1NlYXJjaH0gfSwKICAgICk7CgogICAgIyBmaW5kIG91dCB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSBzaG93bgogICAgbXkgQFNob3dDb2x1bW5zOwogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gKSB7CgogICAgICAgICMgZ2V0IGFsbCBwb3NzaWJsZSBjb2x1bW5zIGZyb20gY29uZmlnCiAgICAgICAgbXkgJVBvc3NpYmxlQ29sdW1uID0gJXsgJFNlbGYtPntDb25maWd9LT57U2hvd0NvbHVtbnN9IH07CgogICAgICAgICMgc2hvdyBjb2x1bW4gIkNsYXNzIiBpZiBmaWx0ZXIgJ0FsbCcgaXMgc2VsZWN0ZWQKICAgICAgICBpZiAoICRTZWxmLT57RmlsdGVyfSBlcSAnQWxsJyApIHsKICAgICAgICAgICAgJFBvc3NpYmxlQ29sdW1ue0NsYXNzfSA9ICcxJzsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHRoZSBjb2x1bW4gbmFtZXMgdGhhdCBzaG91bGQgYmUgc2hvd24KICAgICAgICBDT0xVTU5OQU1FOgogICAgICAgIGZvciBteSAkTmFtZSAoIGtleXMgJVBvc3NpYmxlQ29sdW1uICkgewogICAgICAgICAgICBuZXh0IENPTFVNTk5BTUUgaWYgISRQb3NzaWJsZUNvbHVtbnskTmFtZX07CiAgICAgICAgICAgIHB1c2ggQFNob3dDb2x1bW5zLCAkTmFtZTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdGhlIGNvbmZpZ3VyZWQgY29sdW1ucyBhbmQgcmVvcmdhbml6ZSB0aGVtIGJ5IGNsYXNzIG5hbWUKICAgIGlmICgKICAgICAgICBJc0FycmF5UmVmV2l0aERhdGEoICRTZWxmLT57Q29uZmlnfS0+e1Nob3dDb2x1bW5zQnlDbGFzc30gKQogICAgICAgICYmICRTZWxmLT57RmlsdGVyfQogICAgICAgICYmICRTZWxmLT57RmlsdGVyfSBuZSAnQWxsJwogICAgKSB7CgogICAgICAgIG15ICVDb2x1bW5CeUNsYXNzOwogICAgICAgIGZvciBteSAkTmFtZSAoIEB7ICRTZWxmLT57Q29uZmlnfS0+e1Nob3dDb2x1bW5zQnlDbGFzc30gfSApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCB0aGUgY2xhc3MgbmFtZSBhbmQgdGhlIGNvbHVtbiBuYW1lCiAgICAgICAgICAgIGlmICggJE5hbWUgPX4gbXsgXEEgKFteOl0rKSA6OiAoLispIFx6IH14bXMgKSB7CgogICAgICAgICAgICAgICAgbXkgKCRDbGFzcywgJENvbHVtbikgID0gKCQxLCAkMik7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgbmV3IGVudHJ5CiAgICAgICAgICAgICAgICBwdXNoIEB7ICRDb2x1bW5CeUNsYXNzeyRDbGFzc30gfSwgJENvbHVtbjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiB0aGVyZSBpcyBhIHNwZWNpZmljIGNvbHVtbiBjb25maWcgZm9yIHRoZSBzZWxlY3RlZCBjbGFzcwogICAgICAgIG15ICRTZWxlY3RlZENsYXNzID0gJENsYXNzTGlzdC0+eyAkU2VsZi0+e0ZpbHRlcn0gfTsKICAgICAgICBpZiAoICRDb2x1bW5CeUNsYXNzeyRTZWxlY3RlZENsYXNzfSApIHsKICAgICAgICAgICAgQFNob3dDb2x1bW5zID0gQHsgJENvbHVtbkJ5Q2xhc3N7JFNlbGVjdGVkQ2xhc3N9IH07CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyB0aGUgbGlzdAogICAgbXkgJExpbmtQYWdlID0KICAgICAgICAnRmlsdGVyPScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntGaWx0ZXJ9ICkKICAgICAgICAuICc7Vmlldz0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57Vmlld30gKQogICAgICAgIC4gJztTb3J0Qnk9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkU29ydEJ5ICkKICAgICAgICAuICc7T3JkZXJCeT0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRPcmRlckJ5ICkKICAgICAgICAuICc7JzsKICAgIG15ICRMaW5rU29ydCA9CiAgICAgICAgJ0ZpbHRlcj0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57RmlsdGVyfSApCiAgICAgICAgLiAnO1ZpZXc9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAuICc7JzsKICAgIG15ICRMaW5rRmlsdGVyID0KICAgICAgICAnU29ydEJ5PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNvcnRCeSApCiAgICAgICAgLiAnO09yZGVyQnk9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkT3JkZXJCeSApCiAgICAgICAgLiAnO1ZpZXc9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAuICc7JzsKCiAgICAjIHNob3cgY29uZmlnIGl0ZW0gbGlzdAogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPklUU01Db25maWdJdGVtTGlzdFNob3coCiAgICAgICAgQ29uZmlnSXRlbUlEcyA9PiAkQ29uZmlnSXRlbUlEcywKICAgICAgICBUb3RhbCAgICAgICAgID0+IHNjYWxhciBAeyRDb25maWdJdGVtSURzfSwKCiAgICAgICAgVmlldyA9PiAkU2VsZi0+e1ZpZXd9LAoKICAgICAgICBGaWx0ZXIgICAgID0+ICRTZWxmLT57RmlsdGVyfSwKICAgICAgICBGaWx0ZXJzICAgID0+IFwlTmF2QmFyRmlsdGVyLAogICAgICAgIEZpbHRlckxpbmsgPT4gJExpbmtGaWx0ZXIsCgogICAgICAgIFRpdGxlTmFtZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnT3ZlcnZpZXcnKQogICAgICAgICAgICAuICc6ICcgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnSVRTTSBDb25maWdJdGVtJyksCgogICAgICAgIFRpdGxlVmFsdWUgPT4gJEZpbHRlcnN7ICRTZWxmLT57RmlsdGVyfSB9LT57TmFtZX0sCgogICAgICAgIEVudiAgICAgID0+ICRTZWxmLAogICAgICAgIExpbmtQYWdlID0+ICRMaW5rUGFnZSwKICAgICAgICBMaW5rU29ydCA9PiAkTGlua1NvcnQsCgogICAgICAgIFNob3dDb2x1bW5zID0+IFxAU2hvd0NvbHVtbnMsCiAgICAgICAgU29ydEJ5ICAgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTb3J0QnkgKSwKICAgICAgICBPcmRlckJ5ICAgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoIFRleHQgPT4gJE9yZGVyQnkgKSwKICAgICk7CgogICAgIyBhZGQgZm9vdGVyCiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1BZGQucG0gLSB0aGUgT1RSUyBJVFNNIGNvbmZpZyBpdGVtIGFkZCBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNQ29uZmlnSXRlbUFkZDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW07CnVzZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCkpIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CiAgICAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZy0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9ICAgICA9IEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbS0+bmV3KCVQYXJhbSk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgKTsKCiAgICAjIGNoZWNrIGZvciBhY2Nlc3MgcmlnaHRzCiAgICBmb3IgbXkgJENsYXNzSUQgKCBrZXlzICV7JENsYXNzTGlzdH0gKSB7CiAgICAgICAgbXkgJEhhc0FjY2VzcyA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlBlcm1pc3Npb24oCiAgICAgICAgICAgIFR5cGUgICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgIFNjb3BlICAgPT4gJ0NsYXNzJywKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NJRCwKICAgICAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgZGVsZXRlICRDbGFzc0xpc3QtPnskQ2xhc3NJRH0gaWYgISRIYXNBY2Nlc3M7CiAgICB9CgogICAgIyBzaG93IHRoZSBsaXN0IG9mIENJIGNsYXNzZXMgc29ydGVkIGJ5IG5hbWUKICAgIGZvciBteSAkSXRlbUlEICggc29ydCB7ICR7JENsYXNzTGlzdH17JGF9IGNtcCAkeyRDbGFzc0xpc3R9eyRifSB9IGtleXMgJXskQ2xhc3NMaXN0fSApIHsKCiAgICAgICAgIyBnZXQgaXRlbSBkYXRhCiAgICAgICAgbXkgJEl0ZW1EYXRhID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1HZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkSXRlbUlELAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IGl0ZW0gbGlzdAogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3SXRlbUxpc3QnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJEl0ZW1JRCwKICAgICAgICAgICAgICAgIE5hbWUgICAgPT4gJENsYXNzTGlzdC0+eyRJdGVtSUR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoIFRpdGxlID0+ICdBZGQnICk7CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNQ29uZmlnSXRlbUFkZCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICApOwoKICAgICMgb3V0cHV0IGZvb3RlcgogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtIC0gdGhlIE9UUlMgSVRTTSBjb25maWcgaXRlbSBlZGl0IG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Db25maWdJdGVtRWRpdDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW07CnVzZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c7CnVzZSBLZXJuZWw6OlN5c3RlbTo6V2ViOjpVcGxvYWRDYWNoZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBDb25maWdPYmplY3QpKSB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIGFkZGl0aW9uYWwgb2JqZWN0cwogICAgJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0tPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2ctPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntVcGxvYWRDYWNoZU9iamVjdH0gICAgPSBLZXJuZWw6OlN5c3RlbTo6V2ViOjpVcGxvYWRDYWNoZS0+bmV3KCVQYXJhbSk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBnZXQgZm9ybSBpZAogICAgJFNlbGYtPntGb3JtSUR9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnRm9ybUlEJyApOwoKICAgICMgY3JlYXRlIGZvcm0gaWQKICAgIGlmICggISRTZWxmLT57Rm9ybUlEfSApIHsKICAgICAgICAkU2VsZi0+e0Zvcm1JRH0gPSAkU2VsZi0+e1VwbG9hZENhY2hlT2JqZWN0fS0+Rm9ybUlEQ3JlYXRlKCk7CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnaXRlbSBpZCBhbmQgY2xhc3MgaWQKICAgIG15ICRDb25maWdJdGVtID0ge307CiAgICAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb25maWdJdGVtSUQnICkgfHwgMDsKICAgICRDb25maWdJdGVtLT57Q2xhc3NJRH0gICAgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NsYXNzSUQnICkgICAgICB8fCAwOwogICAgbXkgJER1cGxpY2F0ZUlEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnRHVwbGljYXRlSUQnICkgfHwgMDsKCiAgICBteSAkSGFzQWNjZXNzOwoKICAgICMgZ2V0IG5lZWRlZCBkYXRhCiAgICBpZiAoICRDb25maWdJdGVtLT57Q29uZmlnSXRlbUlEfSAmJiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0gbmUgJ05FVycgKSB7CgogICAgICAgICMgY2hlY2sgYWNjZXNzIGZvciBjb25maWcgaXRlbQogICAgICAgICRIYXNBY2Nlc3MgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5QZXJtaXNzaW9uKAogICAgICAgICAgICBTY29wZSAgPT4gJ0l0ZW0nLAogICAgICAgICAgICBJdGVtSUQgPT4gJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY29uZmlnIGl0ZW0KICAgICAgICAkQ29uZmlnSXRlbSA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICgkRHVwbGljYXRlSUQpIHsKCiAgICAgICAgIyBnZXQgY29uZmlnIGl0ZW0gdG8gZHVwbGljYXRlCiAgICAgICAgJENvbmZpZ0l0ZW0gPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtR2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJER1cGxpY2F0ZUlELAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgYWNjZXNzIGZvciBjb25maWcgaXRlbQogICAgICAgICRIYXNBY2Nlc3MgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5QZXJtaXNzaW9uKAogICAgICAgICAgICBTY29wZSAgPT4gJ0l0ZW0nLAogICAgICAgICAgICBJdGVtSUQgPT4gJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgY29uZmlnIGl0ZW0gaWQgYW5kIG51bWJlcgogICAgICAgICRDb25maWdJdGVtLT57Q29uZmlnSXRlbUlEfSA9ICdORVcnOwogICAgICAgICRDb25maWdJdGVtLT57TnVtYmVyfSAgICAgICA9ICdORVcnOwogICAgfQogICAgZWxzaWYgKCAkQ29uZmlnSXRlbS0+e0NsYXNzSUR9ICkgewoKICAgICAgICAjIHNldCBjb25maWcgaXRlbSBpZCBhbmQgbnVtYmVyCiAgICAgICAgJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9ID0gJ05FVyc7CiAgICAgICAgJENvbmZpZ0l0ZW0tPntOdW1iZXJ9ICAgICAgID0gJ05FVyc7CgogICAgICAgICMgY2hlY2sgYWNjZXNzIGZvciBjb25maWcgaXRlbQogICAgICAgICRIYXNBY2Nlc3MgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5QZXJtaXNzaW9uKAogICAgICAgICAgICBTY29wZSAgID0+ICdDbGFzcycsCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW0tPntDbGFzc0lEfSwKICAgICAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIFR5cGUgICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2xhc3MgbGlzdAogICAgICAgIG15ICRDbGFzc0xpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICAgICAgKTsKICAgICAgICAkQ29uZmlnSXRlbS0+e0NsYXNzfSA9ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW0tPntDbGFzc0lEfSB9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgaWYgdXNlciBoYXMgbm8gYWNjZXNzIHJpZ2h0cyBzaG93IGVycm9yIHBhZ2UKICAgIGlmICggISRIYXNBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05vIGFjY2VzcyBpcyBnaXZlbiEnLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGRlZmluaXRpb24KICAgIG15ICRYTUxEZWZpbml0aW9uID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+RGVmaW5pdGlvbkdldCgKICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtLT57Q2xhc3NJRH0sCiAgICApOwoKICAgICMgYWJvcnQsIGlmIG5vIGRlZmluaXRpb24gaXMgZGVmaW5lZAogICAgaWYgKCAhJFhNTERlZmluaXRpb24tPntEZWZpbml0aW9uSUR9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICJObyBEZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAkQ29uZmlnSXRlbS0+e0NsYXNzfSEiLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgd2hlbiB0aGVyZSdzIG5vIENsYXNzSUQgaXQgbWVhbnMsIGFuIGV4aXN0aW5nIGNvbmZpZyBpdGVtIGlzIGVkaXRlZCBhcyB0aGUgQ2xhc3NJRCBpcyBvbmx5CiAgICAjIHByb3ZpZGVkIGFzIEdFVCBwYXJhbSB3aGVuIGNyZWF0aW5nIGEgbmV3IGNvbmZpZyBpdGVtCiAgICBpZiAoICEkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdDbGFzc0lEJyApICkgewoKICAgICAgICAjIGdldCBhbGwgYXR0YWNobWVudHMgbWV0YSBkYXRhCiAgICAgICAgbXkgQEV4aXN0aW5nQXR0YWNobWVudHMgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtQXR0YWNobWVudExpc3QoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjb3B5IGFsbCBleGlzdGluZyBhdHRhY2htZW50cyB0byB1cGxvYWQgY2FjaGUKICAgICAgICBGSUxFTkFNRToKICAgICAgICBmb3IgbXkgJEZpbGVuYW1lIChARXhpc3RpbmdBdHRhY2htZW50cykgewoKICAgICAgICAgICAgIyBnZXQgdGhlIGV4aXN0aW5nIGF0dGFjaG1lbnQgZGF0YQogICAgICAgICAgICBteSAkQXR0YWNobWVudERhdGEgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtQXR0YWNobWVudEdldCgKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICAgPT4gJEZpbGVuYW1lLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIGF0dGFjaG1lbnQgdG8gdGhlIHVwbG9hZCBjYWNoZQogICAgICAgICAgICAkU2VsZi0+e1VwbG9hZENhY2hlT2JqZWN0fS0+Rm9ybUlEQWRkRmlsZSgKICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICRBdHRhY2htZW50RGF0YS0+e0ZpbGVuYW1lfSwKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRBdHRhY2htZW50RGF0YS0+e0NvbnRlbnR9LAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJEF0dGFjaG1lbnREYXRhLT57Q29udGVudFR5cGV9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBzdWJtaXQgc2F2ZQogICAgbXkgJFN1Ym1pdFNhdmUgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdWJtaXRTYXZlJyApOwoKICAgICMgZ2V0IHhtbCBkYXRhCiAgICBteSAkVmVyc2lvbiA9IHt9OwogICAgbXkgJE5hbWVEdXBsaWNhdGVzOwogICAgbXkgJENJTmFtZVJlZ2V4RXJyb3JNZXNzYWdlOwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1ZlcnNpb25TYXZlJyApIHsKCiAgICAgICAgIyBjaGVjayBpZiBhbiBhdHRhY2htZW50IG11c3QgYmUgZGVsZXRlZAogICAgICAgIEFUVEFDSE1FTlQ6CiAgICAgICAgZm9yIG15ICROdW1iZXIgKCAxIC4uIDMyICkgewoKICAgICAgICAgICAgIyBjaGVjayBpZiB0aGUgZGVsZXRlIGJ1dHRvbiB3YXMgcHJlc3NlZCBmb3IgdGhpcyBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICREZWxldGUgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJBdHRhY2htZW50RGVsZXRlJE51bWJlciIgKTsKCiAgICAgICAgICAgICMgY2hlY2sgbmV4dCBhdHRhY2htZW50IGlmIGl0IHdhcyBub3QgcHJlc3NlZAogICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISREZWxldGU7CgogICAgICAgICAgICAjIHJlbW92ZSB0aGUgYXR0YWNobWVudCBmcm9tIHRoZSB1cGxvYWQgY2FjaGUKICAgICAgICAgICAgJFNlbGYtPntVcGxvYWRDYWNoZU9iamVjdH0tPkZvcm1JRFJlbW92ZUZpbGUoCiAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgRmlsZUlEID0+ICROdW1iZXIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIHRoZXJlIHdhcyBhbiBhdHRhY2htZW50IHVwbG9hZAogICAgICAgIGlmICggJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnQXR0YWNobWVudFVwbG9hZCcgKSApIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSB1cGxvYWRlZCBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICVVcGxvYWRTdHVmZiA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRVcGxvYWRBbGwoCiAgICAgICAgICAgICAgICBQYXJhbSAgPT4gJ0ZpbGVVcGxvYWQnLAogICAgICAgICAgICAgICAgU291cmNlID0+ICdzdHJpbmcnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBhZGQgYXR0YWNobWVudCB0byB0aGUgdXBsb2FkIGNhY2hlCiAgICAgICAgICAgICRTZWxmLT57VXBsb2FkQ2FjaGVPYmplY3R9LT5Gb3JtSURBZGRGaWxlKAogICAgICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgICVVcGxvYWRTdHVmZiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICRBbGxSZXF1aXJlZCA9IDE7CgogICAgICAgICMgZ2V0IGdlbmVyYWwgZm9ybSBkYXRhCiAgICAgICAgZm9yIG15ICRGb3JtUGFyYW0gKHF3KE5hbWUgRGVwbFN0YXRlSUQgSW5jaVN0YXRlSUQpKSB7CiAgICAgICAgICAgICRWZXJzaW9uLT57JEZvcm1QYXJhbX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRGb3JtUGFyYW0gKTsKICAgICAgICAgICAgaWYgKCAhJFZlcnNpb24tPnskRm9ybVBhcmFtfSApIHsKICAgICAgICAgICAgICAgICRBbGxSZXF1aXJlZCA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IHhtbCBmb3JtIGRhdGEKICAgICAgICAkVmVyc2lvbi0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufS0+WzFdID0gJFNlbGYtPl9YTUxGb3JtR2V0KAogICAgICAgICAgICBYTUxEZWZpbml0aW9uID0+ICRYTUxEZWZpbml0aW9uLT57RGVmaW5pdGlvblJlZn0sCiAgICAgICAgICAgIEFsbFJlcXVpcmVkICAgPT4gXCRBbGxSZXF1aXJlZCwKICAgICAgICAgICAgQ29uZmlnSXRlbUlEICA9PiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjaywgd2hldGhlciB0aGUgZmVhdHVyZSB0byBjaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBpcyBlbmFibGVkCiAgICAgICAgaWYgKAogICAgICAgICAgICBJc1N0cmluZ1dpdGhEYXRhKCAkVmVyc2lvbi0+e05hbWV9ICkKICAgICAgICAgICAgJiYgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1VuaXF1ZUNJTmFtZTo6RW5hYmxlVW5pcXVlbmVzc0NoZWNrJykKICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT57RGVidWd9ID4gMCApIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNoZWNraW5nIGZvciBkdXBsaWNhdGUgbmFtZXMgKENsYXNzSUQ6ICRDb25maWdJdGVtLT57Q2xhc3NJRH0sICIKICAgICAgICAgICAgICAgICAgICAgICAgLiAiTmFtZTogJFZlcnNpb24tPntOYW1lfSwgQ29uZmlnSXRlbUlEOiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0pIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICROYW1lRHVwbGljYXRlcyA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlVuaXF1ZU5hbWVDaGVjaygKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgPT4gJENvbmZpZ0l0ZW0tPntDbGFzc0lEfSwKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkVmVyc2lvbi0+e05hbWV9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzdG9wIHByb2Nlc3NpbmcgaWYgdGhlIG5hbWUgaXMgbm90IHVuaXF1ZQogICAgICAgICAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkTmFtZUR1cGxpY2F0ZXMpICkgewoKICAgICAgICAgICAgICAgICRBbGxSZXF1aXJlZCA9IDA7CgogICAgICAgICAgICAgICAgIyBidWlsZCBhIHN0cmluZyBvZiBhbGwgZHVwbGljYXRlIElEcwogICAgICAgICAgICAgICAgbXkgJE5hbWVEdXBsaWNhdGVzU3RyaW5nID0gam9pbiAnLCAnLCBAeyROYW1lRHVwbGljYXRlc307CgogICAgICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgbmFtZSAkVmVyc2lvbi0+e05hbWV9IGlzIGFscmVhZHkgaW4gdXNlIGJ5IHRoZSBDb25maWdJdGVtSUQocyk6ICIKICAgICAgICAgICAgICAgICAgICAgICAgLiAkTmFtZUR1cGxpY2F0ZXNTdHJpbmcsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgY29uZmlnIG9wdGlvbiBmb3IgdGhlIG5hbWUgcmVnZXggY2hlY2tzCiAgICAgICAgbXkgJENJTmFtZVJlZ2V4Q29uZmlnID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIklUU01Db25maWdJdGVtOjpDSU5hbWVSZWdleCIpOwoKICAgICAgICAjIGNoZWNrIGlmIHRoZSBDSSBuYW1lIGlzIGdpdmVuIGFuZCBzaG91bGQgYmUgY2hlY2tlZCB3aXRoIGEgcmVndWxhciBleHByZXNzaW9uCiAgICAgICAgaWYgKCBJc1N0cmluZ1dpdGhEYXRhKCAkVmVyc2lvbi0+e05hbWV9ICkgJiYgJENJTmFtZVJlZ2V4Q29uZmlnICkgewoKICAgICAgICAgICAgIyBnZXQgY2xhc3MgbGlzdAogICAgICAgICAgICBteSAkQ2xhc3NMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBjbGFzcyBuYW1lCiAgICAgICAgICAgIG15ICRDbGFzc05hbWUgPSAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtLT57Q2xhc3NJRH0gfSB8fCAnJzsKCiAgICAgICAgICAgICMgZ2V0IHRoZSByZWdleCBmb3IgdGhpcyBjbGFzcwogICAgICAgICAgICBteSAkQ0lOYW1lUmVnZXggPSAkQ0lOYW1lUmVnZXhDb25maWctPnsgJENsYXNzTmFtZSAuICc6OicgLiAnQ0lOYW1lUmVnZXgnIH0gfHwgJyc7CgogICAgICAgICAgICAjIGlmIGEgcmVnZXggaXMgZGVmaW5lZCBhbmQgdGhlIENJIG5hbWUgZG9lcyBub3QgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgogICAgICAgICAgICBpZiAoICRDSU5hbWVSZWdleCAmJiAkVmVyc2lvbi0+e05hbWV9ICF+IG17ICRDSU5hbWVSZWdleCB9eG1zICkgewoKICAgICAgICAgICAgICAgICRBbGxSZXF1aXJlZCA9IDA7CgogICAgICAgICAgICAgICAgIyBnZXQgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoaXMgY2xhc3MKICAgICAgICAgICAgICAgICRDSU5hbWVSZWdleEVycm9yTWVzc2FnZSA9ICRDSU5hbWVSZWdleENvbmZpZy0+eyAkQ2xhc3NOYW1lIC4gJzo6JyAuICdDSU5hbWVSZWdleEVycm9yTWVzc2FnZScgfSB8fCAnJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzYXZlIHZlcnNpb24gdG8gZGF0YWJhc2UKICAgICAgICBpZiAoICRTdWJtaXRTYXZlICYmICRBbGxSZXF1aXJlZCApIHsKCiAgICAgICAgICAgIGlmICggJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9IGVxICdORVcnICkgewogICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9ID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+Q29uZmlnSXRlbUFkZCgKICAgICAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtLT57Q2xhc3NJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCBhbGwgYXR0YWNobWVudHMgZnJvbSB1cGxvYWQgY2FjaGUKICAgICAgICAgICAgbXkgQEF0dGFjaG1lbnRzID0gJFNlbGYtPntVcGxvYWRDYWNoZU9iamVjdH0tPkZvcm1JREdldEFsbEZpbGVzRGF0YSgKICAgICAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGJ1aWxkIGEgbG9va3VwIGxvb2t1cCBoYXNoIG9mIHRoZSBuZXcgYXR0YWNobWVudHMKICAgICAgICAgICAgbXkgJU5ld0F0dGFjaG1lbnQ7CiAgICAgICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoQEF0dGFjaG1lbnRzKSB7CgogICAgICAgICAgICAgICAgIyB0aGUga2V5IGlzIHRoZSBmaWxlbmFtZSArIGZpbGVzaXplICsgY29udGVudCB0eXBlCiAgICAgICAgICAgICAgICBteSAkS2V5ID0gJEF0dGFjaG1lbnQtPntGaWxlbmFtZX0KICAgICAgICAgICAgICAgICAgICAuICRBdHRhY2htZW50LT57RmlsZXNpemV9CiAgICAgICAgICAgICAgICAgICAgLiAkQXR0YWNobWVudC0+e0NvbnRlbnRUeXBlfTsKCiAgICAgICAgICAgICAgICAjIHN0b3JlIGFsbCBvZiB0aGUgbmV3IGF0dGFjaG1lbnQgZGF0YQogICAgICAgICAgICAgICAgJE5ld0F0dGFjaG1lbnR7JEtleX0gPSAkQXR0YWNobWVudDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgYWxsIGF0dGFjaG1lbnRzIG1ldGEgZGF0YQogICAgICAgICAgICBteSBARXhpc3RpbmdBdHRhY2htZW50cyA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1BdHRhY2htZW50TGlzdCgKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoZWNrIHRoZSBleGlzdGluZyBhdHRhY2htZW50cwogICAgICAgICAgICBGSUxFTkFNRToKICAgICAgICAgICAgZm9yIG15ICRGaWxlbmFtZSAoQEV4aXN0aW5nQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICAgICAjIGdldCB0aGUgZXhpc3RpbmcgYXR0YWNobWVudCBkYXRhCiAgICAgICAgICAgICAgICBteSAkQXR0YWNobWVudERhdGEgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtQXR0YWNobWVudEdldCgKICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgICA9PiAkRmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyB0aGUga2V5IGlzIHRoZSBmaWxlbmFtZSArIGZpbGVzaXplICsgY29udGVudCB0eXBlCiAgICAgICAgICAgICAgICAjIChubyBjb250ZW50IGlkLCBhcyBleGlzdGluZyBhdHRhY2htZW50cyBkb24ndCBoYXZlIGl0KQogICAgICAgICAgICAgICAgbXkgJEtleSA9ICRBdHRhY2htZW50RGF0YS0+e0ZpbGVuYW1lfQogICAgICAgICAgICAgICAgICAgIC4gJEF0dGFjaG1lbnREYXRhLT57RmlsZXNpemV9CiAgICAgICAgICAgICAgICAgICAgLiAkQXR0YWNobWVudERhdGEtPntDb250ZW50VHlwZX07CgogICAgICAgICAgICAgICAgIyBhdHRhY2htZW50IGlzIGFscmVhZHkgZXhpc3RpbmcsIHdlIGNhbiBkZWxldGUgaXQgZnJvbSB0aGUgbmV3IGF0dGFjaG1lbnQgaGFzaAogICAgICAgICAgICAgICAgaWYgKCAkTmV3QXR0YWNobWVudHskS2V5fSApIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgJE5ld0F0dGFjaG1lbnR7JEtleX07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBleGlzdGluZyBhdHRhY2htZW50IGlzIG5vIGxvbmdlciBpbiBuZXcgYXR0YWNobWVudHMgaGFzaAogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgZGVsZXRlIHRoZSBleGlzdGluZyBhdHRhY2htZW50CiAgICAgICAgICAgICAgICAgICAgbXkgJERlbGV0ZVN1Y2Nlc3NmdWwgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtQXR0YWNobWVudERlbGV0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtLT57Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgID0+ICRGaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJERlbGV0ZVN1Y2Nlc3NmdWwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgd3JpdGUgdGhlIG5ldyBhdHRhY2htZW50cwogICAgICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKCB2YWx1ZXMgJU5ld0F0dGFjaG1lbnQgKSB7CgogICAgICAgICAgICAgICAgIyBhZGQgYXR0YWNobWVudAogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtQXR0YWNobWVudEFkZCgKICAgICAgICAgICAgICAgICAgICAleyRBdHRhY2htZW50fSwKICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICAgICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhZGQgdmVyc2lvbgogICAgICAgICAgICAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5WZXJzaW9uQWRkKAogICAgICAgICAgICAgICAgJXskVmVyc2lvbn0sCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRYTUxEZWZpbml0aW9uLT57RGVmaW5pdGlvbklEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJlZGlyZWN0IHRvIHpvb20gbWFzawogICAgICAgICAgICBteSAkU2NyZWVuVHlwZSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NjcmVlblR5cGUnICkgfHwgMDsKICAgICAgICAgICAgaWYgKCRTY3JlZW5UeXBlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Qb3B1cENsb3NlKAogICAgICAgICAgICAgICAgICAgIFVSTCA9PgogICAgICAgICAgICAgICAgICAgICAgICAiQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVpvb207Q29uZmlnSXRlbUlEPSRDb25maWdJdGVtLT57Q29uZmlnSXRlbUlEfSIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCREdXBsaWNhdGVJRCkgewogICAgICAgIG15ICRWZXJzaW9uSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdWZXJzaW9uSUQnICk7CiAgICAgICAgaWYgKCRWZXJzaW9uSUQpIHsKCiAgICAgICAgICAgICMgZ2V0IHZlcnNpb24gZGF0YSB0byBkdXBsaWNhdGUgY29uZmlnIGl0ZW0KICAgICAgICAgICAgJFZlcnNpb24gPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5WZXJzaW9uR2V0KAogICAgICAgICAgICAgICAgVmVyc2lvbklEID0+ICRWZXJzaW9uSUQsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBnZXQgbGFzdCB2ZXJzaW9uIGRhdGEgdG8gZHVwbGljYXRlIGNvbmZpZyBpdGVtCiAgICAgICAgICAgICRWZXJzaW9uID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkdldCgKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkRHVwbGljYXRlSUQsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0gbmUgJ05FVycgKSB7CgogICAgICAgICMgZ2V0IGxhc3QgdmVyc2lvbiBkYXRhCiAgICAgICAgJFZlcnNpb24gPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5WZXJzaW9uR2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgJVhNTEZvcm1PdXRwdXRQYXJhbTsKICAgIGlmICggJFZlcnNpb24tPntYTUxEYXRhfS0+WzFdLT57VmVyc2lvbn0tPlsxXSApIHsKICAgICAgICAkWE1MRm9ybU91dHB1dFBhcmFte1hNTERhdGF9ID0gJFZlcnNpb24tPntYTUxEYXRhfS0+WzFdLT57VmVyc2lvbn0tPlsxXTsKICAgIH0KCiAgICAjIG91dHB1dCBkZXBsb3ltZW50IHN0YXRlIGludmFsaWQgYmxvY2sKICAgIG15ICRSb3dOYW1lSW52YWxpZCA9ICcnOwogICAgaWYgKCAhJFZlcnNpb24tPntOYW1lfSAmJiAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1ZlcnNpb25TYXZlJyAmJiAkU3VibWl0U2F2ZSApIHsKICAgICAgICAkUm93TmFtZUludmFsaWQgPSAnU2VydmVyRXJyb3InOwogICAgfQoKICAgICMgY2hlY2sgZm9yIG5hbWUgZHVwbGljYXRlcwogICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoJE5hbWVEdXBsaWNhdGVzKSApIHsKICAgICAgICAkUm93TmFtZUludmFsaWQgPSAnU2VydmVyRXJyb3InOwogICAgfQoKICAgICMgY2hlY2sgZm9yIG5vdCBtYXRjaGVkIG5hbWUgcmVnZXgKICAgIGlmICggJENJTmFtZVJlZ2V4RXJyb3JNZXNzYWdlICkgewogICAgICAgICRSb3dOYW1lSW52YWxpZCA9ICdTZXJ2ZXJFcnJvcic7CiAgICB9CgogICAgIyBvdXRwdXQgbmFtZSBibG9jawogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdSb3dOYW1lJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJXskVmVyc2lvbn0sCiAgICAgICAgICAgIFJvd05hbWVJbnZhbGlkID0+ICRSb3dOYW1lSW52YWxpZCwKICAgICAgICB9LAogICAgKTsKCiAgICBpZiAoIElzU3RyaW5nV2l0aERhdGEoJFJvd05hbWVJbnZhbGlkKSAmJiAhSXNBcnJheVJlZldpdGhEYXRhKCROYW1lRHVwbGljYXRlcykgJiYgISRDSU5hbWVSZWdleEVycm9yTWVzc2FnZSApIHsKCiAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPntEZWJ1Z30gPiAwICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiUmVuZGVyaW5nIGRlZmF1bHQgZXJyb3IgYmxvY2siLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUm93TmFtZUVycm9yRGVmYXVsdCcsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggSXNBcnJheVJlZldpdGhEYXRhKCROYW1lRHVwbGljYXRlcykgKSB7CgogICAgICAgICMgYnVpbGQgYXJyYXkgd2l0aCBDSS1OdW1iZXJzCiAgICAgICAgbXkgQE5hbWVEdXBsaWNhdGVzQnlDSU51bWJlcjsKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIEB7JE5hbWVEdXBsaWNhdGVzfSApIHsKCiAgICAgICAgICAgICMgbG9va3VwIHRoZSBDSSBudW1iZXIKICAgICAgICAgICAgbXkgJENJTnVtYmVyID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+Q29uZmlnSXRlbUxvb2t1cCgKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcHVzaCBATmFtZUR1cGxpY2F0ZXNCeUNJTnVtYmVyLCAkQ0lOdW1iZXI7CiAgICAgICAgfQoKICAgICAgICBteSAkRHVwbGljYXRlU3RyaW5nID0gam9pbiAnLCAnLCBATmFtZUR1cGxpY2F0ZXNCeUNJTnVtYmVyOwoKICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+e0RlYnVnfSA+IDAgKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiUmVuZGVyaW5nIGJsb2NrIGZvciBkdXBsaWNhdGVzIChDSS1OdW1iZXJzOiAkRHVwbGljYXRlU3RyaW5nKSBlcnJvciBtZXNzYWdlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Jvd05hbWVFcnJvckR1cGxpY2F0ZXMnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIER1cGxpY2F0ZXMgPT4gJER1cGxpY2F0ZVN0cmluZywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIGVsc2lmICggJENJTmFtZVJlZ2V4RXJyb3JNZXNzYWdlICkgewoKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdSb3dOYW1lRXJyb3JSZWdFeCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgUmVnRXhFcnJvck1lc3NhZ2UgPT4gJENJTmFtZVJlZ2V4RXJyb3JNZXNzYWdlLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZGVwbG95bWVudCBzdGF0ZSBsaXN0CiAgICBteSAkRGVwbFN0YXRlTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICk7CgogICAgIyBvdXRwdXQgZGVwbG95bWVudCBzdGF0ZSBpbnZhbGlkIGJsb2NrCiAgICBteSAkUm93RGVwbFN0YXRlSW52YWxpZCA9ICcnOwogICAgaWYgKCAhJFZlcnNpb24tPntEZXBsU3RhdGVJRH0gJiYgJFNlbGYtPntTdWJhY3Rpb259IGVxICdWZXJzaW9uU2F2ZScgJiYgJFN1Ym1pdFNhdmUgKSB7CiAgICAgICAgJFJvd0RlcGxTdGF0ZUludmFsaWQgPSAnIFNlcnZlckVycm9yJzsKICAgIH0KCiAgICAjIGdlbmVyYXRlIERlcGxTdGF0ZU9wdGlvblN0cmcKICAgIG15ICREZXBsU3RhdGVPcHRpb25TdHJnID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gJERlcGxTdGF0ZUxpc3QsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdEZXBsU3RhdGVJRCcsCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdWYWxpZGF0ZV9SZXF1aXJlZCcgLiAkUm93RGVwbFN0YXRlSW52YWxpZCwKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFZlcnNpb24tPntEZXBsU3RhdGVJRH0sCiAgICApOwoKICAgICMgb3V0cHV0IGRlcGxveW1lbnQgc3RhdGUgYmxvY2sKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnUm93RGVwbFN0YXRlJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgRGVwbFN0YXRlT3B0aW9uU3RyZyA9PiAkRGVwbFN0YXRlT3B0aW9uU3RyZywKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCBpbmNpZGVudCBzdGF0ZSBsaXN0CiAgICBteSAkSW5jaVN0YXRlTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBGdW5jdGlvbmFsaXR5ID0+IFsgJ29wZXJhdGlvbmFsJywgJ2luY2lkZW50JyBdLAogICAgICAgIH0sCiAgICApOwoKICAgICMgb3V0cHV0IGRlcGxveW1lbnQgc3RhdGUgaW52YWxpZCBibG9jawogICAgbXkgJFJvd0luY2lTdGF0ZUludmFsaWQgPSAnJzsKICAgIGlmICggISRWZXJzaW9uLT57SW5jaVN0YXRlSUR9ICYmICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnVmVyc2lvblNhdmUnICYmICRTdWJtaXRTYXZlICkgewogICAgICAgICRSb3dJbmNpU3RhdGVJbnZhbGlkID0gJyBTZXJ2ZXJFcnJvcic7CiAgICB9CgogICAgIyBnZW5lcmF0ZSBJbmNpU3RhdGVPcHRpb25TdHJnCiAgICBteSAkSW5jaVN0YXRlT3B0aW9uU3RyZyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+ICRJbmNpU3RhdGVMaXN0LAogICAgICAgIE5hbWUgICAgICAgICA9PiAnSW5jaVN0YXRlSUQnLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIENsYXNzICAgICAgICA9PiAnVmFsaWRhdGVfUmVxdWlyZWQnIC4gJFJvd0luY2lTdGF0ZUludmFsaWQsCiAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRWZXJzaW9uLT57SW5jaVN0YXRlSUR9LAogICAgKTsKCiAgICAjIG91dHB1dCBpbmNpZGVudCBzdGF0ZSBibG9jawogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdSb3dJbmNpU3RhdGUnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBJbmNpU3RhdGVPcHRpb25TdHJnID0+ICRJbmNpU3RhdGVPcHRpb25TdHJnLAogICAgICAgIH0sCiAgICApOwoKICAgICMgb3V0cHV0IHhtbCBmb3JtCiAgICBpZiAoICRYTUxEZWZpbml0aW9uLT57RGVmaW5pdGlvbn0gKSB7CiAgICAgICAgJFNlbGYtPl9YTUxGb3JtT3V0cHV0KAogICAgICAgICAgICBYTUxEZWZpbml0aW9uID0+ICRYTUxEZWZpbml0aW9uLT57RGVmaW5pdGlvblJlZn0sCiAgICAgICAgICAgICVYTUxGb3JtT3V0cHV0UGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgdGhlIGF0dGFjaG1lbnQgdXBsb2FkIGJ1dHRvbgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50VXBsb2FkJywKICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIGdldCBhbGwgYXR0YWNobWVudHMgbWV0YSBkYXRhCiAgICBteSBAQXR0YWNobWVudHMgPSAkU2VsZi0+e1VwbG9hZENhY2hlT2JqZWN0fS0+Rm9ybUlER2V0QWxsRmlsZXNNZXRhKAogICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICApOwoKICAgICMgc2hvdyBhdHRhY2htZW50cwogICAgQVRUQUNITUVOVDoKICAgIGZvciBteSAkQXR0YWNobWVudCAoQEF0dGFjaG1lbnRzKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQXR0YWNobWVudCcsCiAgICAgICAgICAgIERhdGEgPT4gJEF0dGFjaG1lbnQsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkT3V0cHV0ID0gJyc7CiAgICBpZiAoICggJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9ICYmICRDb25maWdJdGVtLT57Q29uZmlnSXRlbUlEfSBuZSAnTkVXJyApIHx8ICREdXBsaWNhdGVJRCApIHsKCiAgICAgICAgIyBvdXRwdXQgYmxvY2sKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTdGFydFNtYWxsJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAleyRDb25maWdJdGVtfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0VuZFNtYWxsJyApOwoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKAogICAgICAgICAgICBUaXRsZSA9PiAnRWRpdCcsCiAgICAgICAgICAgIFR5cGUgID0+ICdTbWFsbCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICV7JENvbmZpZ0l0ZW19LAogICAgICAgICAgICAgICAgRHVwbGljYXRlSUQgPT4gJER1cGxpY2F0ZUlELAogICAgICAgICAgICAgICAgRm9ybUlEICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlciggVHlwZSA9PiAnU21hbGwnICk7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBOZWNlc3Nhcnkgc3R1ZmYgZm9yIEFkZCBOZXcKICAgICAgICAjIGdldCBjbGFzcyBsaXN0CiAgICAgICAgbXkgJENsYXNzTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGZvciBhY2Nlc3MgcmlnaHRzCiAgICAgICAgZm9yIG15ICRDbGFzc0lEICgga2V5cyAleyRDbGFzc0xpc3R9ICkgewogICAgICAgICAgICBteSAkSGFzQWNjZXNzID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+UGVybWlzc2lvbigKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgICAgICBTY29wZSAgID0+ICdDbGFzcycsCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lELAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBkZWxldGUgJENsYXNzTGlzdC0+eyRDbGFzc0lEfSBpZiAhJEhhc0FjY2VzczsKICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgQ2xhc3NPcHRpb25TdHJnCiAgICAgICAgbXkgJENsYXNzT3B0aW9uU3RyZyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkQ2xhc3NMaXN0LAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ0NsYXNzSUQnLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnVzEwMHBjJywKICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRDb25maWdJdGVtLT57Q2xhc3NJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBFbmQgTmVjZXNzYXJ5IHN0dWZmIGZvciBBZGQgTmV3CgogICAgICAgICMgb3V0cHV0IGJsb2NrCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU3RhcnROb3JtYWwnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzT3B0aW9uU3RyZyA9PiAkQ2xhc3NPcHRpb25TdHJnLAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJXskQ29uZmlnSXRlbX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnRW5kTm9ybWFsJyApOwoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCBUaXRsZSA9PiAnRWRpdCcgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJXskQ29uZmlnSXRlbX0sCiAgICAgICAgICAgICAgICBEdXBsaWNhdGVJRCA9PiAkRHVwbGljYXRlSUQsCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICB9CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCnN1YiBfWE1MRm9ybUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxEZWZpbml0aW9ufTsKICAgIHJldHVybiBpZiAhJFBhcmFte0FsbFJlcXVpcmVkfTsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERlZmluaXRpb259IG5lICdBUlJBWSc7CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtBbGxSZXF1aXJlZH0gbmUgJ1NDQUxBUic7CiAgICByZXR1cm4gaWYgISRQYXJhbXtDb25maWdJdGVtSUR9OwoKICAgIG15ICRGb3JtRGF0YSA9IHt9OwoKICAgIElURU06CiAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17WE1MRGVmaW5pdGlvbn0gfSApIHsKICAgICAgICBteSAkQ291bnRlckluc2VydCA9IDE7CgogICAgICAgIENPVU5URVI6CiAgICAgICAgZm9yIG15ICRDb3VudGVyICggMSAuLiAkSXRlbS0+e0NvdW50TWF4fSApIHsKCiAgICAgICAgICAgICMgY3JlYXRlIGlucHV0a2V5IGFuZCBhZGRrZXkKICAgICAgICAgICAgbXkgJElucHV0S2V5ID0gJEl0ZW0tPntLZXl9IC4gJzo6JyAuICRDb3VudGVyOwogICAgICAgICAgICBteSAkQWRkS2V5ICAgPSAkSXRlbS0+e0tleX0gLiAnOjpBZGQnOwogICAgICAgICAgICBpZiAoICRQYXJhbXtQcmVmaXh9ICkgewogICAgICAgICAgICAgICAgJElucHV0S2V5ID0gJFBhcmFte1ByZWZpeH0gLiAnOjonIC4gJElucHV0S2V5OwogICAgICAgICAgICAgICAgJEFkZEtleSAgID0gJFBhcmFte1ByZWZpeH0gLiAnOjonIC4gJEFkZEtleTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgcGFyYW0KICAgICAgICAgICAgbXkgJEZvcm1WYWx1ZXMgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPklUU01Db25maWdJdGVtRm9ybURhdGFHZXQoCiAgICAgICAgICAgICAgICBLZXkgICAgICAgICAgPT4gJElucHV0S2V5LAogICAgICAgICAgICAgICAgSXRlbSAgICAgICAgID0+ICRJdGVtLAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCBkZWZpbmVkICRGb3JtVmFsdWVzLT57VmFsdWV9ICkgewoKICAgICAgICAgICAgICAgICMgY2hlY2sgcmVxdWlyZWQgdmFsdWUKICAgICAgICAgICAgICAgIGlmICggJEZvcm1WYWx1ZXMtPntJbnZhbGlkfSApIHsKICAgICAgICAgICAgICAgICAgICAkeyAkUGFyYW17QWxsUmVxdWlyZWR9IH0gPSAwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY2hlY2sgZGVsZXRlIGJ1dHRvbgogICAgICAgICAgICAgICAgbmV4dCBDT1VOVEVSIGlmICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJElucHV0S2V5IC4gJzo6RGVsZXRlJyApOwoKICAgICAgICAgICAgICAgICMgc3RhcnQgcmVjdXJzaW9uLCBpZiAiU3ViIiB3YXMgZm91bmQKICAgICAgICAgICAgICAgIGlmICggJEl0ZW0tPntTdWJ9ICkgewogICAgICAgICAgICAgICAgICAgIG15ICRTdWJGb3JtRGF0YSA9ICRTZWxmLT5fWE1MRm9ybUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgICAgICAgICAgICAgIFByZWZpeCAgICAgICAgPT4gJElucHV0S2V5LAogICAgICAgICAgICAgICAgICAgICAgICBBbGxSZXF1aXJlZCAgID0+ICRQYXJhbXtBbGxSZXF1aXJlZH0sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCAgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkRm9ybURhdGEtPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlckluc2VydF0gPSAkU3ViRm9ybURhdGE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkRm9ybURhdGEtPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlckluc2VydF0tPntDb250ZW50fSA9ICRGb3JtVmFsdWVzLT57VmFsdWV9OwogICAgICAgICAgICAgICAgJENvdW50ZXJJbnNlcnQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGFkZCBidXR0b24KICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkQWRkS2V5ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkSXRlbS0+e1N1Yn0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRGb3JtRGF0YS0+eyAkSXRlbS0+e0tleX0gfS0+WyRDb3VudGVySW5zZXJ0XSA9ICRTZWxmLT5fWE1MRGVmYXVsdFNldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkRm9ybURhdGEtPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlckluc2VydF0tPntDb250ZW50fSA9ICcnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbGFzdCBDT1VOVEVSOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkRm9ybURhdGE7Cn0KCnN1YiBfWE1MRGVmYXVsdFNldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxEZWZpbml0aW9ufTsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERlZmluaXRpb259IG5lICdBUlJBWSc7CgogICAgbXkgJERlZmF1bHREYXRhID0ge307CgogICAgZm9yIG15ICRJdGVtICggQHsgJFBhcmFte1hNTERlZmluaXRpb259IH0gKSB7CiAgICAgICAgZm9yIG15ICRDb3VudGVyICggMSAuLiAkSXRlbS0+e0NvdW50RGVmYXVsdH0gKSB7CgogICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbiwgaWYgIlN1YiIgd2FzIGZvdW5kCiAgICAgICAgICAgIGlmICggJEl0ZW0tPntTdWJ9ICkgewogICAgICAgICAgICAgICAgJERlZmF1bHREYXRhLT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdID0gJFNlbGYtPl9YTUxEZWZhdWx0U2V0KAogICAgICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJERlZmF1bHREYXRhLT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLT57Q29udGVudH0gPSAnJzsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICREZWZhdWx0RGF0YTsKfQoKc3ViIF9YTUxGb3JtT3V0cHV0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIHJldHVybiBpZiAhJFBhcmFte1hNTERlZmluaXRpb259OwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRGVmaW5pdGlvbn0gbmUgJ0FSUkFZJzsKCiAgICAkUGFyYW17TGV2ZWx9ICB8fD0gMDsKICAgICRQYXJhbXtQcmVmaXh9IHx8PSAnJzsKCiAgICAjIGdldCBzdWJtaXQgc2F2ZQogICAgbXkgJFN1Ym1pdFNhdmUgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdWJtaXRTYXZlJyApOwoKICAgICMgc2V0IGRhdGEgcHJlc2VudCBtb2RlCiAgICBteSAkRGF0YVByZXNlbnRNb2RlID0gMDsKICAgIGlmICggJFBhcmFte1hNTERhdGF9ICYmIHJlZiAkUGFyYW17WE1MRGF0YX0gZXEgJ0hBU0gnICkgewogICAgICAgICREYXRhUHJlc2VudE1vZGUgPSAxOwogICAgfQoKICAgIG15ICRJdGVtQ291bnRlciA9IDE7CiAgICBJVEVNOgogICAgZm9yIG15ICRJdGVtICggQHsgJFBhcmFte1hNTERlZmluaXRpb259IH0gKSB7CgogICAgICAgICMgc2V0IGxvb3AKICAgICAgICBteSAkTG9vcCA9ICRJdGVtLT57Q291bnREZWZhdWx0fTsKICAgICAgICBpZiAoJERhdGFQcmVzZW50TW9kZSkgewogICAgICAgICAgICAkTG9vcCA9IDA7CgogICAgICAgICAgICAjIHNlYXJjaCB0aGUgbGFzdCBjb250ZW50CiAgICAgICAgICAgIENPVU5URVI6CiAgICAgICAgICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gJEl0ZW0tPntDb3VudE1heH0gKSB7CiAgICAgICAgICAgICAgICBsYXN0IENPVU5URVIgaWYgIWRlZmluZWQgJFBhcmFte1hNTERhdGF9LT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLT57Q29udGVudH07CiAgICAgICAgICAgICAgICAkTG9vcCA9ICRDb3VudGVyOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNldCBhYnNvbHV0IG1pbmltdW0KICAgICAgICAgICAgaWYgKCAkTG9vcCA8ICRJdGVtLT57Q291bnRNaW59ICkgewogICAgICAgICAgICAgICAgJExvb3AgPSAkSXRlbS0+e0NvdW50TWlufTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzZXQgZGVsZXRlCiAgICAgICAgbXkgJERlbGV0ZSA9IDA7CiAgICAgICAgaWYgKCAkTG9vcCA+ICRJdGVtLT57Q291bnRNaW59ICkgewogICAgICAgICAgICAkRGVsZXRlID0gMTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGNvbnRlbnQgcm93cwogICAgICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gJExvb3AgKSB7CgogICAgICAgICAgICAjIG91dHB1dCByb3cgYmxvY2sKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnWE1MUm93JyApOwoKICAgICAgICAgICAgaWYgKCAhJFBhcmFte0xldmVsfSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1hNTFJvd0ZpZWxkc2V0U3RhcnQnICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY3JlYXRlIGlucHV0a2V5IGFuZCBhZGRrZXkKICAgICAgICAgICAgbXkgJElucHV0S2V5ID0gJEl0ZW0tPntLZXl9IC4gJzo6JyAuICRDb3VudGVyOwogICAgICAgICAgICBpZiAoICRQYXJhbXtQcmVmaXh9ICkgewogICAgICAgICAgICAgICAgJElucHV0S2V5ID0gJFBhcmFte1ByZWZpeH0gLiAnOjonIC4gJElucHV0S2V5OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG91dHB1dCBibHVlIHJlcXVpcmVkIHN0YXIKICAgICAgICAgICAgbXkgJFhNTFJvd1ZhbHVlQ29udGVudFJlcXVpcmVkID0gMDsKICAgICAgICAgICAgbXkgJExhYmVsQ2xhc3MgICAgICAgICAgICAgICAgID0gJyc7CiAgICAgICAgICAgIGlmICggJEl0ZW0tPntJbnB1dH0tPntSZXF1aXJlZH0gKSB7CiAgICAgICAgICAgICAgICAkWE1MUm93VmFsdWVDb250ZW50UmVxdWlyZWQgPSAxOwogICAgICAgICAgICAgICAgJExhYmVsQ2xhc3MgICAgICAgICAgICAgICAgID0gJ01hbmRhdG9yeSc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgb3V0cHV0IHJlZCBpbnZhbGlkIHN0YXIKICAgICAgICAgICAgbXkgJFhNTFJvd1ZhbHVlQ29udGVudEludmFsaWQgPSAwOwogICAgICAgICAgICBpZiAoICRJdGVtLT57Rm9ybX0tPnskSW5wdXRLZXl9LT57SW52YWxpZH0gJiYgJFN1Ym1pdFNhdmUgKSB7CiAgICAgICAgICAgICAgICAkWE1MUm93VmFsdWVDb250ZW50SW52YWxpZCA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRJdGVtSUQgPSAnSXRlbScgLiAkSXRlbUNvdW50ZXIrKyAuICRQYXJhbXtQcmVmaXh9IC4gJFBhcmFte0xldmVsfTsKCiAgICAgICAgICAgIGlmICggJEl0ZW0tPntJbnB1dH0tPntUeXBlfSBlcSAnQ3VzdG9tZXInICkgewoKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQ3VzdG9tZXJTZWFyY2hJbml0JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgSXRlbUlEID0+ICRJdGVtSUQsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY3JlYXRlIGlucHV0IGVsZW1lbnQKICAgICAgICAgICAgbXkgJElucHV0U3RyaW5nID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5JVFNNQ29uZmlnSXRlbUlucHV0Q3JlYXRlKAogICAgICAgICAgICAgICAgS2V5ICAgICAgPT4gJElucHV0S2V5LAogICAgICAgICAgICAgICAgSXRlbSAgICAgPT4gJEl0ZW0sCiAgICAgICAgICAgICAgICBWYWx1ZSAgICA9PiAkUGFyYW17WE1MRGF0YX0tPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlcl0tPntDb250ZW50fSwKICAgICAgICAgICAgICAgIEl0ZW1JZCAgID0+ICRJdGVtSUQsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCA9PiAkWE1MUm93VmFsdWVDb250ZW50UmVxdWlyZWQsCiAgICAgICAgICAgICAgICBJbnZhbGlkICA9PiAkWE1MUm93VmFsdWVDb250ZW50SW52YWxpZCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgSUQ/CiAgICAgICAgICAgIG15ICRMYWJlbEZvciA9ICRJdGVtSUQ7CiAgICAgICAgICAgIGlmICggJEl0ZW0tPntJbnB1dH0tPntUeXBlfSBlcSAnRGF0ZScgfHwgJEl0ZW0tPntJbnB1dH0tPntUeXBlfSBlcSAnRGF0ZVRpbWUnICkgewogICAgICAgICAgICAgICAgJExhYmVsRm9yID0gJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaWQgbmVlZGVkPwogICAgICAgICAgICBpZiAoJExhYmVsRm9yKSB7CiAgICAgICAgICAgICAgICAkTGFiZWxGb3IgPSAnZm9yPSInIC4gJExhYmVsRm9yIC4gJyInOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGlzIHRoaXMgYSBzdWIgZmllbGQ/CiAgICAgICAgICAgIG15ICRDbGFzcyA9ICcnOwogICAgICAgICAgICBpZiAoICRQYXJhbXtMZXZlbH0gKSB7CiAgICAgICAgICAgICAgICAkQ2xhc3MgPSAnU3ViRWxlbWVudCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2xhc3MgbmVlZGVkPwogICAgICAgICAgICBpZiAoJExhYmVsQ2xhc3MpIHsKICAgICAgICAgICAgICAgICRMYWJlbENsYXNzID0gJ2NsYXNzPSInIC4gIiRDbGFzcyAgJExhYmVsQ2xhc3MiIC4gJyInOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJExhYmVsQ2xhc3MgPSAnY2xhc3M9IicgLiAkQ2xhc3MgLiAnIic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgb3V0cHV0IHJvdyB2YWx1ZSBjb250ZW50IGJsb2NrCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdYTUxSb3dWYWx1ZScsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICA9PiAkSXRlbS0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgID0+ICRJdGVtSUQsCiAgICAgICAgICAgICAgICAgICAgTGFiZWxGb3IgICAgPT4gJExhYmVsRm9yIHx8ICcnLAogICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICRJdGVtLT57RGVzY3JpcHRpb259IHx8ICRJdGVtLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgSW5wdXRTdHJpbmcgPT4gJElucHV0U3RyaW5nLAogICAgICAgICAgICAgICAgICAgIExhYmVsQ2xhc3MgID0+ICRMYWJlbENsYXNzIHx8ICcnLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICRDbGFzcyB8fCAnJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICRJdGVtLT57SW5wdXR9LT57UmVxdWlyZWR9ICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnWE1MUm93VmFsdWVDb250ZW50UmVxdWlyZWQnICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgb3V0cHV0IGRlbGV0ZSBidXR0b24KICAgICAgICAgICAgaWYgKCREZWxldGUpIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnWE1MUm93VmFsdWVDb250ZW50RGVsZXRlJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRLZXkgPT4gJElucHV0S2V5LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHRoZSBjb250ZW50IGlzIGludmFsaWQKICAgICAgICAgICAgaWYgKCAkWE1MUm93VmFsdWVDb250ZW50SW52YWxpZCApIHsKCiAgICAgICAgICAgICAgICAjIHNob3cgcmVnZXggZXJyb3IgbWVzc2FnZSBibG9jawogICAgICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0Zvcm19LT57JElucHV0S2V5fS0+e1JlZ0V4RXJyb3JNZXNzYWdlfSApIHsKCiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnWE1MUm93VmFsdWVSZWdFeEVycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgICAgICAgICA9PiAkSXRlbUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnRXhFcnJvck1lc3NhZ2UgPT4gJEl0ZW0tPntGb3JtfS0+eyRJbnB1dEtleX0tPntSZWdFeEVycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSBzaG93IG5vcm1hbCBzZXJ2ZXIgZXJyb3IgYmxvY2sKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1hNTFJvd1ZhbHVlU2VydmVyRXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkSXRlbUlELAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3RhcnQgcmVjdXJzaW9uLCBpZiAiU3ViIiB3YXMgZm91bmQKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e1N1Yn0gKSB7CiAgICAgICAgICAgICAgICBteSAlWE1MRm9ybU91dHB1dFBhcmFtOwogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICREYXRhUHJlc2VudE1vZGUKICAgICAgICAgICAgICAgICAgICAmJiBkZWZpbmVkICRQYXJhbXtYTUxEYXRhfS0+eyAkSXRlbS0+e0tleX0gfS0+WyRDb3VudGVyXS0+e0NvbnRlbnR9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRYTUxGb3JtT3V0cHV0UGFyYW17WE1MRGF0YX0gPSAkUGFyYW17WE1MRGF0YX0tPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlcl07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJFNlbGYtPl9YTUxGb3JtT3V0cHV0KAogICAgICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgICAgICVYTUxGb3JtT3V0cHV0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgTGV2ZWwgICAgICAgICAgICAgID0+ICRQYXJhbXtMZXZlbH0gKyAxLAogICAgICAgICAgICAgICAgICAgIFByZWZpeCAgICAgICAgICAgICA9PiAkSW5wdXRLZXksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICEkUGFyYW17TGV2ZWx9ICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnWE1MUm93RmllbGRzZXRFbmQnICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgb3V0cHV0IHJvdyB0byBzb3J0IHJvd3MgY29ycmVjdGx5CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1hNTFJvdycgKTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGFkZCBidXR0b24KICAgICAgICBpZiAoICRMb29wIDwgJEl0ZW0tPntDb3VudE1heH0gKSB7CgogICAgICAgICAgICAjIGlmIG5vIGl0ZW0gc2hvdWxkIGJlIHNob3duIHdlIG5lZWQgdG8gc2hvdyB0aGUgYWRkIGJ1dHRvbgogICAgICAgICAgICAjIGFuZCB0aGVyZWZvcmUgd2UgbmVlZCB0byBzaG93IHRoZSBYTUxSb3cgYmxvY2sKICAgICAgICAgICAgaWYgKCAhJExvb3AgKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdYTUxSb3cnICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRDbGFzcyA9ICcnOwogICAgICAgICAgICBpZiAoICRQYXJhbXtMZXZlbH0gKSB7CiAgICAgICAgICAgICAgICAkQ2xhc3MgPSAnY2xhc3M9IlN1YkVsZW1lbnQiJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1hNTFJvd0ZpZWxkc2V0RW5kJyApOwogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnWE1MUm93RmllbGRzZXRTdGFydCcgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgcHJlZml4CiAgICAgICAgICAgIG15ICRJbnB1dEtleSA9ICRJdGVtLT57S2V5fTsKICAgICAgICAgICAgaWYgKCAkUGFyYW17UHJlZml4fSApIHsKICAgICAgICAgICAgICAgICRJbnB1dEtleSA9ICRQYXJhbXtQcmVmaXh9IC4gJzo6JyAuICRJbnB1dEtleTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBvdXRwdXQgcm93IGFkZCBjb250ZW50IGJsb2NrCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdYTUxSb3dBZGRDb250ZW50JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgID0+ICRJbnB1dEtleSAuICdBZGQnLAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICRJdGVtLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJEl0ZW0tPntEZXNjcmlwdGlvbn0gfHwgJEl0ZW0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBJbnB1dEtleSAgICA9PiAkSW5wdXRLZXksCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJENsYXNzLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LnBtIC0gdGlja2V0IGhpc3RvcnkKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMCBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNQ29uZmlnSXRlbUhpc3Rvcnk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOwp1c2UgS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgKAogICAgICAgIHF3KCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IFVzZXJPYmplY3QgQ29uZmlnT2JqZWN0CiAgICAgICAgUGFyYW1PYmplY3QgRW5jb2RlT2JqZWN0IE1haW5PYmplY3QgKQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRffSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJF8hIiApOwogICAgICAgIH0KICAgIH0KCiAgICAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9ICAgICA9IEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbS0+bmV3KCAleyRTZWxmfSApOwogICAgJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2ctPm5ldyggJXskU2VsZn0gKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkU2VsZi0+e0NvbmZpZ0l0ZW1JRH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb25maWdJdGVtSUQnICk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRTZWxmLT57Q29uZmlnSXRlbUlEfSApIHsKCiAgICAgICAgIyBlcnJvciBwYWdlCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ0NhblwndCBzaG93IGhpc3RvcnksIG5vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgZm9yIGFjY2VzcyByaWdodHMKICAgIG15ICRIYXNBY2Nlc3MgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5QZXJtaXNzaW9uKAogICAgICAgIFNjb3BlICA9PiAnSXRlbScsCiAgICAgICAgSXRlbUlEID0+ICRTZWxmLT57Q29uZmlnSXRlbUlEfSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIFR5cGUgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICk7CgogICAgaWYgKCAhJEhhc0FjY2VzcyApIHsKCiAgICAgICAgIyBlcnJvciBwYWdlCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJywKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBhbGwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbmZpZyBpdGVtCiAgICBteSAkQ29uZmlnSXRlbSA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRTZWxmLT57Q29uZmlnSXRlbUlEfSwKICAgICk7CiAgICBteSAkQ29uZmlnSXRlbU5hbWUgPSAkQ29uZmlnSXRlbS0+e051bWJlcn07CgogICAgIyBnZXQgYWxsIGVudHJpZXMgaW4gdGhlIGhpc3RvcnkgZm9yIHRoaXMgY29uZmlnIGl0ZW0KICAgIG15ICRMaW5lcyA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkhpc3RvcnlHZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRTZWxmLT57Q29uZmlnSXRlbUlEfSwKICAgICk7CgogICAgIyBnZXQgc2hvd24gdXNlciBpbmZvCiAgICBteSBATmV3TGluZXMgPSBAeyRMaW5lc307CiAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6Okhpc3RvcnlPcmRlcicpIGVxICdyZXZlcnNlJyApIHsKICAgICAgICBATmV3TGluZXMgPSByZXZlcnNlIEB7JExpbmVzfTsKICAgIH0KCiAgICAjIGdldCBkZWZpbml0aW9uIGZvciBDSSdzIGNsYXNzCiAgICBteSAkRGVmaW5pdGlvbiA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkRlZmluaXRpb25HZXQoCiAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbS0+e0NsYXNzSUR9LAogICAgKTsKCiAgICBteSAkVGFibGUgICA9ICcnOwogICAgbXkgJENvdW50ZXIgPSAxOwogICAgbXkgJFZlcnNpb24gPSAwOwogICAgZm9yIG15ICREYXRhVG1wIChATmV3TGluZXMpIHsKICAgICAgICAkQ291bnRlcisrOwogICAgICAgIG15ICVEYXRhID0gKAogICAgICAgICAgICAleyREYXRhVG1wfSwKICAgICAgICAgICAgVmVyc2lvbklEID0+ICRWZXJzaW9uLAogICAgICAgICk7CgogICAgICAgICMgdHJpbSB0aGUgY29tbWVudCB0byBvbmx5IHNob3cgdmVyc2lvbiBudW1iZXIKICAgICAgICBpZiAoICREYXRhe0hpc3RvcnlUeXBlfSBlcSAnVmVyc2lvbkNyZWF0ZScgKSB7CiAgICAgICAgICAgICREYXRhe0NvbW1lbnR9ID1+IHMvXEQvL2c7CiAgICAgICAgICAgICREYXRhe1ZlcnNpb25JRH0gPSAkRGF0YXtDb21tZW50fTsKICAgICAgICAgICAgJFZlcnNpb24gPSAkRGF0YXtDb21tZW50fTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkRGF0YXtIaXN0b3J5VHlwZX0gZXEgJ1ZhbHVlVXBkYXRlJyApIHsKCiAgICAgICAgICAgICMgYmVhdXRpZnkgY29tbWVudAogICAgICAgICAgICBteSBAUGFydHMgPSBzcGxpdCAvJSUvLCAkRGF0YXtDb21tZW50fTsKICAgICAgICAgICAgJFBhcnRzWzBdID1+IHN7IFxBIFxbLio/XF0gXHsnVmVyc2lvbidcfSBcWy4qP1xdIFx7JyB9e314bXM7CiAgICAgICAgICAgICRQYXJ0c1swXSA9fiBzeyAnXH0gXFsuKj9cXSBceycgfXs6On14bXNnOwogICAgICAgICAgICAkUGFydHNbMF0gPX4gc3sgJ1x9IFxbLio/XF0gXHogfXt9eG1zOwoKICAgICAgICAgICAgIyBnZXQgaW5mbyBhYm91dCBhdHRyaWJ1dGUKICAgICAgICAgICAgbXkgJEF0dHJpYnV0ZUluZm8gPSAkU2VsZi0+X0dldEF0dHJpYnV0ZUluZm8oCiAgICAgICAgICAgICAgICBEZWZpbml0aW9uID0+ICREZWZpbml0aW9uLT57RGVmaW5pdGlvblJlZn0sCiAgICAgICAgICAgICAgICBQYXRoICAgICAgID0+ICRQYXJ0c1swXSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggJEF0dHJpYnV0ZUluZm8gJiYgJEF0dHJpYnV0ZUluZm8tPntJbnB1dH0tPntUeXBlfSBlcSAnR2VuZXJhbENhdGFsb2cnICkgewogICAgICAgICAgICAgICAgbXkgJEl0ZW1MaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgICAgICAgICAgICAgIENsYXNzID0+ICRBdHRyaWJ1dGVJbmZvLT57SW5wdXR9LT57Q2xhc3N9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkUGFydHNbMV0gPSAkSXRlbUxpc3QtPnsgJFBhcnRzWzFdIH0gfHwgJyc7CiAgICAgICAgICAgICAgICAkUGFydHNbMl0gPSAkSXRlbUxpc3QtPnsgJFBhcnRzWzJdIH0gfHwgJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYXNzZW1ibGUgcGFydHMKICAgICAgICAgICAgJERhdGF7Q29tbWVudH0gPSBqb2luICclJScsIEBQYXJ0czsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkRGF0YXtIaXN0b3J5VHlwZX0gZXEgJ0RlcGxveW1lbnRTdGF0ZVVwZGF0ZScgKSB7CgogICAgICAgICAgICAjIGdldCBkZXBsb3ltZW50IHN0YXRlIGxpc3QKICAgICAgICAgICAgbXkgJERlcGxTdGF0ZUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2hvdyBuYW1lcwogICAgICAgICAgICBteSBAUGFydHMgPSBzcGxpdCAvJSUvLCAkRGF0YXtDb21tZW50fTsKICAgICAgICAgICAgZm9yIG15ICRQYXJ0IChAUGFydHMpIHsKICAgICAgICAgICAgICAgICRQYXJ0ID0gJERlcGxTdGF0ZUxpc3QtPnskUGFydH0gfHwgJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYXNzZW1ibGUgcGFydHMKICAgICAgICAgICAgJERhdGF7Q29tbWVudH0gPSBqb2luICclJScsIEBQYXJ0czsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkRGF0YXtIaXN0b3J5VHlwZX0gZXEgJ0luY2lkZW50U3RhdGVVcGRhdGUnICkgewoKICAgICAgICAgICAgIyBnZXQgZGVwbG95bWVudCBzdGF0ZSBsaXN0CiAgICAgICAgICAgIG15ICREZXBsU3RhdGVMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzaG93IG5hbWVzCiAgICAgICAgICAgIG15IEBQYXJ0cyA9IHNwbGl0IC8lJS8sICREYXRhe0NvbW1lbnR9OwogICAgICAgICAgICBmb3IgbXkgJFBhcnQgKEBQYXJ0cykgewogICAgICAgICAgICAgICAgJFBhcnQgPSAkRGVwbFN0YXRlTGlzdC0+eyRQYXJ0fSB8fCAnJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhc3NlbWJsZSBwYXJ0cwogICAgICAgICAgICAkRGF0YXtDb21tZW50fSA9IGpvaW4gJyUlJywgQFBhcnRzOwogICAgICAgIH0KCiAgICAgICAgIyByZXBsYWNlIHRleHQKICAgICAgICBpZiAoICREYXRhe0NvbW1lbnR9ICkgewogICAgICAgICAgICBteSAlSW5mbyA9ICgpOwogICAgICAgICAgICAkRGF0YXtDb21tZW50fSA9fiBzL14lJS8vZzsKICAgICAgICAgICAgbXkgQFZhbHVlcyA9IHNwbGl0KCAvJSUvLCAkRGF0YXtDb21tZW50fSApOwogICAgICAgICAgICAkRGF0YXtDb21tZW50fSA9ICcnOwogICAgICAgICAgICBmb3IgKEBWYWx1ZXMpIHsKICAgICAgICAgICAgICAgIGlmICggJERhdGF7Q29tbWVudH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJERhdGF7Q29tbWVudH0gLj0gIlwiLCAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJERhdGF7Q29tbWVudH0gLj0gIlwiJF8iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggISREYXRhe0NvbW1lbnR9ICkgewogICAgICAgICAgICAgICAgJERhdGF7Q29tbWVudH0gPSAnIiAnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICREYXRhe0NvbW1lbnR9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoCiAgICAgICAgICAgICAgICAnQ0lIaXN0b3J5OjonIC4gJERhdGF7SGlzdG9yeVR5cGV9IC4gJyIsICcgLiAkRGF0YXtDb21tZW50fQogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyByZW1vdmUgbm90IG5lZWRlZCBwbGFjZSBob2xkZXIKICAgICAgICAgICAgJERhdGF7Q29tbWVudH0gPX4gcy9cJXMvL2c7CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdSb3cnLAogICAgICAgICAgICBEYXRhID0+IHslRGF0YX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGJ1aWxkIHBhZ2UKICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVmFsdWUgPT4gJENvbmZpZ0l0ZW1OYW1lLCBUeXBlID0+ICdTbWFsbCcgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRDb25maWdJdGVtTmFtZSwKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRTZWxmLT57Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgVmVyc2lvbklEICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1ZlcnNpb25JRCcgKSwKICAgICAgICB9LAogICAgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgpzdWIgX0dldEF0dHJpYnV0ZUluZm8gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoRGVmaW5pdGlvbiBQYXRoKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkU3VidHJlZSA9ICRQYXJhbXtEZWZpbml0aW9ufTsKICAgIG15ICRJbmZvOwoKICAgIFBBUlQ6CiAgICBmb3IgbXkgJFBhcnQgKCBzcGxpdCAvOjovLCAkUGFyYW17UGF0aH0gKSB7CiAgICAgICAgbXkgKCRGb3VuZCkgPSBncmVwIHsgJF8tPntLZXl9IGVxICRQYXJ0IH0gQHskU3VidHJlZX07CgogICAgICAgIGxhc3QgUEFSVCBpZiAhJEZvdW5kOwoKICAgICAgICAkU3VidHJlZSA9ICRGb3VuZC0+e1N1Yn07CiAgICAgICAgJEluZm8gICAgPSAkRm91bmQ7CiAgICB9CgogICAgcmV0dXJuICRJbmZvOwp9CgoxOwo=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbSAtIHByaW50IGxheW91dCBmb3IgaXRzbSBjb25maWcgaXRlbSBhZ2VudCBpbnRlcmZhY2UKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNQ29uZmlnSXRlbVByaW50OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Owp1c2UgS2VybmVsOjpTeXN0ZW06OlBERjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHM7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCkpIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CiAgICAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57TGlua09iamVjdH0gICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdC0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1BERk9iamVjdH0gICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlBERi0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0gID0gS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscy0+bmV3KCVQYXJhbSk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAkQ29uZmlnSXRlbUlEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29uZmlnSXRlbUlEJyApOwogICAgbXkgJFZlcnNpb25JRCAgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1ZlcnNpb25JRCcgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJENvbmZpZ0l0ZW1JRCB8fCAhJFZlcnNpb25JRCApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgZm9yIGFjY2VzcyByaWdodHMKICAgIG15ICRIYXNBY2Nlc3MgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5QZXJtaXNzaW9uKAogICAgICAgIFNjb3BlICA9PiAnSXRlbScsCiAgICAgICAgSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBUeXBlICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICApOwoKICAgIGlmICggISRIYXNBY2Nlc3MgKSB7CgogICAgICAgICMgZXJyb3IgcGFnZQogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICdDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBpdGVtCiAgICBteSAkQ29uZmlnSXRlbSA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICApOwogICAgaWYgKCAhJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICJDb25maWdJdGVtSUQgJENvbmZpZ0l0ZW1JRCBub3QgZm91bmQgaW4gZGF0YWJhc2UhIiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB2ZXJzaW9uCiAgICBteSAkVmVyc2lvbiA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlZlcnNpb25HZXQoCiAgICAgICAgVmVyc2lvbklEID0+ICRWZXJzaW9uSUQsCiAgICApOwogICAgaWYgKCAhJFZlcnNpb24tPntWZXJzaW9uSUR9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICJWZXJzaW9uSUQgJFZlcnNpb25JRCBub3QgZm91bmQgaW4gZGF0YWJhc2UhIiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBsYXN0IHZlcnNpb24KICAgIG15ICRMYXN0VmVyc2lvbiA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlZlcnNpb25HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICApOwogICAgJENvbmZpZ0l0ZW0tPntDdXJyZW50TmFtZX0gPSAkTGFzdFZlcnNpb24tPntOYW1lfTsKCiAgICAjIGdldCB2ZXJzaW9uIGxpc3QKICAgIG15ICRWZXJzaW9uTGlzdCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlZlcnNpb25MaXN0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgKTsKCiAgICBteSAkVmVyc2lvbk51bWJlciA9IDE7CiAgICBMSVNUVkVSU0lPTklEOgogICAgZm9yIG15ICRMaXN0VmVyc2lvbklEICggQHskVmVyc2lvbkxpc3R9ICkgewoKICAgICAgICBsYXN0IExJU1RWRVJTSU9OSUQgaWYgJFZlcnNpb25JRCBlcSAkTGlzdFZlcnNpb25JRDsKICAgICAgICAkVmVyc2lvbk51bWJlcisrOwogICAgfQoKICAgICMgZ2V0IHVzZXIgZGF0YSBvZiBjb25maWcgaXRlbSAoY3JlYXRlIGJ5KQogICAgbXkgJUNvbmZpZ0l0ZW1DcmVhdGVCeSA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgIFVzZXJJRCA9PiAkQ29uZmlnSXRlbS0+e0NyZWF0ZUJ5fSwKICAgICAgICBDYWNoZWQgPT4gMSwKICAgICk7CgogICAgIyBnZXQgdXNlciBkYXRhIG9mIGNvbmZpZyBpdGVtIChjaGFuZ2UgYnkpCiAgICBteSAlQ29uZmlnSXRlbUNoYW5nZUJ5ID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgVXNlcklEID0+ICRDb25maWdJdGVtLT57Q2hhbmdlQnl9LAogICAgICAgIENhY2hlZCA9PiAxLAogICAgKTsKCiAgICAjIGdldCB1c2VyIGRhdGEgb2YgdmVyc2lvbiAoY3JlYXRlIGJ5KQogICAgbXkgJVZlcnNpb25DcmVhdGVCeSA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgIFVzZXJJRCA9PiAkVmVyc2lvbi0+e0NyZWF0ZUJ5fSwKICAgICAgICBDYWNoZWQgPT4gMSwKICAgICk7CgogICAgIyBnZXQgbGlua2VkIG9iamVjdHMKICAgIG15ICRMaW5rTGlzdFdpdGhEYXRhID0gJFNlbGYtPntMaW5rT2JqZWN0fS0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICBPYmplY3QgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICBLZXkgICAgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICBTdGF0ZSAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBsaW5rIHR5cGUgbGlzdAogICAgbXkgJUxpbmtUeXBlTGlzdCA9ICRTZWxmLT57TGlua09iamVjdH0tPlR5cGVMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBsaW5rIGRhdGEKICAgIG15ICVMaW5rRGF0YTsKICAgIGlmICggJExpbmtMaXN0V2l0aERhdGEgJiYgcmVmICRMaW5rTGlzdFdpdGhEYXRhIGVxICdIQVNIJyAmJiAleyRMaW5rTGlzdFdpdGhEYXRhfSApIHsKICAgICAgICAlTGlua0RhdGEgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkxpbmtPYmplY3RUYWJsZUNyZWF0ZSgKICAgICAgICAgICAgTGlua0xpc3RXaXRoRGF0YSA9PiAkTGlua0xpc3RXaXRoRGF0YSwKICAgICAgICAgICAgVmlld01vZGUgICAgICAgICA9PiAnU2ltcGxlUmF3JywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGF0dGFjaG1lbnRzCiAgICBteSBAQXR0YWNobWVudHMgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtQXR0YWNobWVudExpc3QoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICApOwoKICAgICMgZ2VuZXJhdGUgcGRmIG91dHB1dAogICAgaWYgKCAkU2VsZi0+e1BERk9iamVjdH0gKSB7CgogICAgICAgIG15ICVQYWdlOwogICAgICAgIG15ICRVcmwgPSAnICc7CgogICAgICAgIGlmICggJEVOVntSRVFVRVNUX1VSSX0gKSB7CiAgICAgICAgICAgICRVcmwgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnSHR0cFR5cGUnKSAuICc6Ly8nCiAgICAgICAgICAgICAgICAuICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGUUROJykKICAgICAgICAgICAgICAgIC4gJEVOVntSRVFVRVNUX1VSSX07CiAgICAgICAgfQoKICAgICAgICAjIGdldCBtYXhpbXVtIG51bWJlciBvZiBwYWdlcwogICAgICAgICRQYWdle01heFBhZ2VzfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdQREY6Ok1heFBhZ2VzJyk7CiAgICAgICAgaWYgKCAhJFBhZ2V7TWF4UGFnZXN9IHx8ICRQYWdle01heFBhZ2VzfSA8IDEgfHwgJFBhZ2V7TWF4UGFnZXN9ID4gMTAwMCApIHsKICAgICAgICAgICAgJFBhZ2V7TWF4UGFnZXN9ID0gMTAwOwogICAgICAgIH0KCiAgICAgICAgJFBhZ2V7TWFyZ2luVG9wfSAgICA9IDMwOwogICAgICAgICRQYWdle01hcmdpblJpZ2h0fSAgPSA0MDsKICAgICAgICAkUGFnZXtNYXJnaW5Cb3R0b219ID0gNDA7CiAgICAgICAgJFBhZ2V7TWFyZ2luTGVmdH0gICA9IDQwOwogICAgICAgICRQYWdle0hlYWRlclJpZ2h0fSAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnQ29uZmlnSXRlbScpIC4gJyMnCiAgICAgICAgICAgIC4gJENvbmZpZ0l0ZW0tPntOdW1iZXJ9OwogICAgICAgICRQYWdle0hlYWRsaW5lTGVmdH0gID0gJFZlcnNpb24tPntOYW1lfTsKICAgICAgICAkUGFnZXtIZWFkbGluZVJpZ2h0fSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdwcmludGVkIGJ5JykgLiAnICcKICAgICAgICAgICAgLiAkU2VsZi0+e1VzZXJGaXJzdG5hbWV9IC4gJyAnCiAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyTGFzdG5hbWV9IC4gJyAoJwogICAgICAgICAgICAuICRTZWxmLT57VXNlckVtYWlsfSAuICcpICcKICAgICAgICAgICAgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCggVGVtcGxhdGUgPT4gJyRFbnZ7IlRpbWUifScgKTsKICAgICAgICAkUGFnZXtGb290ZXJMZWZ0fSA9ICRVcmw7CiAgICAgICAgJFBhZ2V7UGFnZVRleHR9ICAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnUGFnZScpOwogICAgICAgICRQYWdle1BhZ2VDb3VudH0gID0gMTsKCiAgICAgICAgIyBjcmVhdGUgbmV3IHBkZiBkb2N1bWVudAogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+RG9jdW1lbnROZXcoCiAgICAgICAgICAgIFRpdGxlICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUHJvZHVjdCcpIC4gJzonIC4gJFZlcnNpb24tPntOYW1lfSwKICAgICAgICAgICAgRW5jb2RlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e1VzZXJDaGFyc2V0fSwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBmaXJzdCBwZGYgcGFnZQogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UGFnZU5ldygKICAgICAgICAgICAgJVBhZ2UsCiAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdle1BhZ2VUZXh0fSAuICcgJyAuICRQYWdle1BhZ2VDb3VudH0sCiAgICAgICAgKTsKICAgICAgICAkUGFnZXtQYWdlQ291bnR9Kys7CgogICAgICAgICMgb3V0cHV0IGdlbmVyYWwgaW5mb3MKICAgICAgICAkU2VsZi0+X1BERk91dHB1dEdlbmVyYWxJbmZvcygKICAgICAgICAgICAgUGFnZSAgICAgICA9PiBcJVBhZ2UsCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gJENvbmZpZ0l0ZW0sCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgPT4gXCVDb25maWdJdGVtQ3JlYXRlQnksCiAgICAgICAgICAgIENoYW5nZUJ5ICAgPT4gXCVDb25maWdJdGVtQ2hhbmdlQnksCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgbGlua2VkIG9iamVjdHMKICAgICAgICBpZiAoJUxpbmtEYXRhKSB7CiAgICAgICAgICAgICRTZWxmLT5fUERGT3V0cHV0TGlua2VkT2JqZWN0cygKICAgICAgICAgICAgICAgIFBhZ2VEYXRhICAgICA9PiBcJVBhZ2UsCiAgICAgICAgICAgICAgICBMaW5rRGF0YSAgICAgPT4gXCVMaW5rRGF0YSwKICAgICAgICAgICAgICAgIExpbmtUeXBlTGlzdCA9PiBcJUxpbmtUeXBlTGlzdCwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGF0dGFjaG1lbnRzCiAgICAgICAgaWYgKEBBdHRhY2htZW50cykgewogICAgICAgICAgICAkU2VsZi0+X1BERk91dHB1dEF0dGFjaG1lbnRzKAogICAgICAgICAgICAgICAgUGFnZURhdGEgICAgICAgPT4gXCVQYWdlLAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEICAgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgIEF0dGFjaG1lbnREYXRhID0+IFxAQXR0YWNobWVudHMsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCB2ZXJzaW9uIGluZm9zCiAgICAgICAgJFNlbGYtPl9QREZPdXRwdXRWZXJzaW9uSW5mb3MoCiAgICAgICAgICAgIFBhZ2UgICAgICAgICAgPT4gXCVQYWdlLAogICAgICAgICAgICBWZXJzaW9uICAgICAgID0+ICRWZXJzaW9uLAogICAgICAgICAgICBWZXJzaW9uTnVtYmVyID0+ICRWZXJzaW9uTnVtYmVyLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgID0+IFwlVmVyc2lvbkNyZWF0ZUJ5LAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGZpbGUgbmFtZQogICAgICAgIG15ICRGaWxlbmFtZSA9ICRTZWxmLT57TWFpbk9iamVjdH0tPkZpbGVuYW1lQ2xlYW5VcCgKICAgICAgICAgICAgRmlsZW5hbWUgPT4gJENvbmZpZ0l0ZW0tPntOdW1iZXJ9LAogICAgICAgICAgICBUeXBlICAgICA9PiAnQXR0YWNobWVudCcsCiAgICAgICAgKTsKICAgICAgICBteSAoICRzLCAkbSwgJGgsICRELCAkTSwgJFkgKSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCksCiAgICAgICAgKTsKICAgICAgICAkTSA9IHNwcmludGYoICIlMDJkIiwgJE0gKTsKICAgICAgICAkRCA9IHNwcmludGYoICIlMDJkIiwgJEQgKTsKICAgICAgICAkaCA9IHNwcmludGYoICIlMDJkIiwgJGggKTsKICAgICAgICAkbSA9IHNwcmludGYoICIlMDJkIiwgJG0gKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXR0YWNobWVudCgKICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ2NvbmZpZ2l0ZW1fJyAuICRGaWxlbmFtZSAuICJfJFktJE0tJERcXyRoLSRtLnBkZiIsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9wZGYnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkU2VsZi0+e1BERk9iamVjdH0tPkRvY3VtZW50T3V0cHV0KCksCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdhdHRhY2htZW50JywKICAgICAgICApOwogICAgfQoKICAgICMgZ2VuZXJhdGUgaHRtbCBvdXRwdXQKICAgIGVsc2UgewoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5QcmludEhlYWRlciggVmFsdWUgPT4gJFZlcnNpb24tPntOYW1lfSApOwoKICAgICAgICBpZiAoJUxpbmtEYXRhKSB7CgogICAgICAgICAgICAjIG91dHB1dCBsaW5rIGRhdGEKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0xpbmsnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgZm9yIG15ICRMaW5rVHlwZUxpbmtEaXJlY3Rpb24gKCBzb3J0IHsgbGMgJGEgY21wIGxjICRiIH0ga2V5cyAlTGlua0RhdGEgKSB7CgogICAgICAgICAgICAgICAgIyBpbnZlc3RpZ2F0ZSBsaW5rIHR5cGUgbmFtZQogICAgICAgICAgICAgICAgbXkgQExpbmtEYXRhID0gc3BsaXQgcXs6On0sICRMaW5rVHlwZUxpbmtEaXJlY3Rpb247CgogICAgICAgICAgICAgICAgIyBvdXRwdXQgbGluayB0eXBlIGRhdGEKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnTGlua1R5cGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBMaW5rVHlwZU5hbWUgPT4gJExpbmtUeXBlTGlzdHsgJExpbmtEYXRhWzBdIH0tPnsgJExpbmtEYXRhWzFdIC4gJ05hbWUnIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBleHRyYWN0IG9iamVjdCBsaXN0CiAgICAgICAgICAgICAgICBteSAkT2JqZWN0TGlzdCA9ICRMaW5rRGF0YXskTGlua1R5cGVMaW5rRGlyZWN0aW9ufTsKCiAgICAgICAgICAgICAgICBmb3IgbXkgJE9iamVjdCAoIHNvcnQgeyBsYyAkYSBjbXAgbGMgJGIgfSBrZXlzICV7JE9iamVjdExpc3R9ICkgewoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkT2JqZWN0TGlzdC0+eyRPYmplY3R9IH0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIG91dHB1dCBsaW5rIHR5cGUgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnTGlua1R5cGVSb3cnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua1N0cmcgPT4gJEl0ZW0tPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgdmVyc2lvbiBibG9jawogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gIlZlcnNpb24iLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICV7JFZlcnNpb259LAogICAgICAgICAgICAgICAgVmVyc2lvbk51bWJlciAgICAgICAgID0+ICRWZXJzaW9uTnVtYmVyLAogICAgICAgICAgICAgICAgQ3JlYXRlQnlVc2VyTG9naW4gICAgID0+ICRWZXJzaW9uQ3JlYXRlQnl7VXNlckxvZ2lufSwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5VXNlckZpcnN0bmFtZSA9PiAkVmVyc2lvbkNyZWF0ZUJ5e1VzZXJGaXJzdG5hbWV9LAogICAgICAgICAgICAgICAgQ3JlYXRlQnlVc2VyTGFzdG5hbWUgID0+ICRWZXJzaW9uQ3JlYXRlQnl7VXNlckxhc3RuYW1lfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCB4bWwgc3RydWN0dXJlCiAgICAgICAgaWYgKAogICAgICAgICAgICAkVmVyc2lvbgogICAgICAgICAgICAmJiByZWYgJFZlcnNpb24gZXEgJ0hBU0gnCiAgICAgICAgICAgICYmICRWZXJzaW9uLT57WE1MRGVmaW5pdGlvbn0KICAgICAgICAgICAgJiYgJFZlcnNpb24tPntYTUxEYXRhfQogICAgICAgICAgICAmJiByZWYgJFZlcnNpb24tPntYTUxEZWZpbml0aW9ufSBlcSAnQVJSQVknCiAgICAgICAgICAgICYmIHJlZiAkVmVyc2lvbi0+e1hNTERhdGF9ICAgICAgIGVxICdBUlJBWScKICAgICAgICAgICAgJiYgJFZlcnNpb24tPntYTUxEYXRhfS0+WzFdCiAgICAgICAgICAgICYmIHJlZiAkVmVyc2lvbi0+e1hNTERhdGF9LT5bMV0gZXEgJ0hBU0gnCiAgICAgICAgICAgICYmICRWZXJzaW9uLT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259CiAgICAgICAgICAgICYmIHJlZiAkVmVyc2lvbi0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufSBlcSAnQVJSQVknCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRTZWxmLT5fSFRNTE91dHB1dFhNTFN0cnVjdHVyZSgKICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJFZlcnNpb24tPntYTUxEZWZpbml0aW9ufSwKICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgPT4gJFZlcnNpb24tPntYTUxEYXRhfS0+WzFdLT57VmVyc2lvbn0tPlsxXSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmIChAQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBtZXRhZGF0YSBvZiB0aGUgMXN0IGF0dGFjaG1lbnQKICAgICAgICAgICAgbXkgJEZpcnN0QXR0YWNobWVudCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1BdHRhY2htZW50R2V0KAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICAgPT4gJEF0dGFjaG1lbnRzWzBdLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0F0dGFjaG1lbnRzJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgICA9PiAkRmlyc3RBdHRhY2htZW50LT57RmlsZW5hbWV9LAogICAgICAgICAgICAgICAgICAgIEZpbGVzaXplICAgICA9PiAkRmlyc3RBdHRhY2htZW50LT57RmlsZXNpemV9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgdGhlIDFzdCBhdHRhY2htZW50IHdhcyBkaXJlY3RseSByZW5kZXJlZCBpbnRvIHRoZSAxc3Qgcm93J3MgcmlnaHQgY2VsbCwgYWxsIGZ1cnRoZXIKICAgICAgICAgICAgIyBhdHRhY2htZW50cyBhcmUgcmVuZGVyZWQgaW50byBhIHNlcGFyYXRlIHJvdwogICAgICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBBdHRhY2htZW50cykgewoKICAgICAgICAgICAgICAgICMgc2tpcCB0aGUgMXN0IGF0dGFjaG1lbnQKICAgICAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAkQXR0YWNobWVudCBlcSAkQXR0YWNobWVudHNbMF07CgogICAgICAgICAgICAgICAgIyBnZXQgdGhlIG1ldGFkYXRhIG9mIHRoZSBjdXJyZW50IGF0dGFjaG1lbnQKICAgICAgICAgICAgICAgIG15ICRBdHRhY2htZW50RGF0YSA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1BdHRhY2htZW50R2V0KAogICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgICA9PiAkQXR0YWNobWVudCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50Um93JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgICA9PiAkQXR0YWNobWVudERhdGEtPntGaWxlbmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVzaXplICAgICA9PiAkQXR0YWNobWVudERhdGEtPntGaWxlc2l6ZX0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudElUU01Db25maWdJdGVtUHJpbnQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJXskQ29uZmlnSXRlbX0sCiAgICAgICAgICAgICAgICBDcmVhdGVCeVVzZXJMb2dpbiAgICAgPT4gJENvbmZpZ0l0ZW1DcmVhdGVCeXtVc2VyTG9naW59LAogICAgICAgICAgICAgICAgQ3JlYXRlQnlVc2VyRmlyc3RuYW1lID0+ICRDb25maWdJdGVtQ3JlYXRlQnl7VXNlckZpcnN0bmFtZX0sCiAgICAgICAgICAgICAgICBDcmVhdGVCeVVzZXJMYXN0bmFtZSAgPT4gJENvbmZpZ0l0ZW1DcmVhdGVCeXtVc2VyTGFzdG5hbWV9LAogICAgICAgICAgICAgICAgQ2hhbmdlQnlVc2VyTG9naW4gICAgID0+ICRDb25maWdJdGVtQ2hhbmdlQnl7VXNlckxvZ2lufSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5VXNlckZpcnN0bmFtZSA9PiAkQ29uZmlnSXRlbUNoYW5nZUJ5e1VzZXJGaXJzdG5hbWV9LAogICAgICAgICAgICAgICAgQ2hhbmdlQnlVc2VyTGFzdG5hbWUgID0+ICRDb25maWdJdGVtQ2hhbmdlQnl7VXNlckxhc3RuYW1lfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UHJpbnRGb290ZXIoKTsKCiAgICAgICAgIyByZXR1cm4gb3V0cHV0CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCnN1YiBfUERGT3V0cHV0R2VuZXJhbEluZm9zIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFBhZ2UgQ29uZmlnSXRlbSBDcmVhdGVCeSBDaGFuZ2VCeSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSBsZWZ0IHRhYmxlCiAgICBteSAkVGFibGVMZWZ0ID0gWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0NsYXNzJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtDb25maWdJdGVtfS0+e0NsYXNzfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0NvbmZpZ0l0ZW0nKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte0NvbmZpZ0l0ZW19LT57Q3VycmVudE5hbWV9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KAogICAgICAgICAgICAgICAgJFBhcmFte0NvbmZpZ0l0ZW19LT57Q3VyRGVwbFN0YXRlfSwKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoCiAgICAgICAgICAgICAgICAkUGFyYW17Q29uZmlnSXRlbX0tPntDdXJJbmNpU3RhdGV9LAogICAgICAgICAgICApLAogICAgICAgIH0sCiAgICBdOwoKICAgICMgY3JlYXRlIHJpZ2h0IHRhYmxlCiAgICBteSAkVGFibGVSaWdodCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdDcmVhdGVkJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJyRUaW1lTG9uZ3siJERhdGF7IkNyZWF0ZVRpbWUifSJ9JywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFwleyAkUGFyYW17Q29uZmlnSXRlbX0gfSwKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0NyZWF0ZWQgYnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte0NyZWF0ZUJ5fS0+e1VzZXJMb2dpbn0gLiAnICgnCiAgICAgICAgICAgICAgICAuICRQYXJhbXtDcmVhdGVCeX0tPntVc2VyRmlyc3RuYW1lfSAuICcgJwogICAgICAgICAgICAgICAgLiAkUGFyYW17Q3JlYXRlQnl9LT57VXNlckxhc3RuYW1lfSAuICcpJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0xhc3QgY2hhbmdlZCcpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlID0+ICckVGltZUxvbmd7IiREYXRheyJDaGFuZ2VUaW1lIn0ifScsCiAgICAgICAgICAgICAgICBEYXRhICAgICA9PiBcJXsgJFBhcmFte0NvbmZpZ0l0ZW19IH0sCiAgICAgICAgICAgICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdMYXN0IGNoYW5nZWQgYnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte0NoYW5nZUJ5fS0+e1VzZXJMb2dpbn0gLiAnICgnCiAgICAgICAgICAgICAgICAuICRQYXJhbXtDaGFuZ2VCeX0tPntVc2VyRmlyc3RuYW1lfSAuICcgJwogICAgICAgICAgICAgICAgLiAkUGFyYW17Q2hhbmdlQnl9LT57VXNlckxhc3RuYW1lfSAuICcpJywKICAgICAgICB9LAogICAgXTsKCiAgICBteSAkUm93cyA9IEB7JFRhYmxlTGVmdH07CiAgICBpZiAoIEB7JFRhYmxlUmlnaHR9ID4gJFJvd3MgKSB7CiAgICAgICAgJFJvd3MgPSBAeyRUYWJsZVJpZ2h0fTsKICAgIH0KCiAgICBteSAlVGFibGVQYXJhbTsKICAgIGZvciBteSAkUm93ICggMSAuLiAkUm93cyApIHsKICAgICAgICAkUm93LS07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0LT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICAgICAgICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlTGVmdC0+WyRSb3ddLT57VmFsdWV9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtDb250ZW50fSAgICAgICAgID0gJyAnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNGRkZGRkYnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVszXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlUmlnaHQtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzNde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzRde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVSaWdodC0+WyRSb3ddLT57VmFsdWV9OwogICAgfQoKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gMTcwLjU7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsyXXtXaWR0aH0gPSA0OwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bM117V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVs0XXtXaWR0aH0gPSAxNzAuNTsKICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgID0gMDsKICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgICAgICA9IDY7CiAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3JFdmVufSAgPSAnI0FBQUFBQSc7CiAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3JPZGR9ICAgPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgICAgICAgPSAxOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICAgICAgID0gMzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgICAgICA9IDM7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIFBBR0U6CiAgICBmb3IgKCAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9IC4uICRQYXJhbXtQYWdlfS0+e01heFBhZ2VzfSApIHsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgJVRhYmxlUGFyYW0gPSAkU2VsZi0+e1BERk9iamVjdH0tPlRhYmxlKCVUYWJsZVBhcmFtKTsKCiAgICAgICAgIyBzdG9wIG91dHB1dCBvciBvdXRwdXQgbmV4dCBwYWdlCiAgICAgICAgbGFzdCBQQUdFIGlmICRUYWJsZVBhcmFte1N0YXRlfTsKCiAgICAgICAgJFNlbGYtPntQREZPYmplY3R9LT5QYWdlTmV3KAogICAgICAgICAgICAleyAkUGFyYW17UGFnZX0gfSwKICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhcmFte1BhZ2V9LT57UGFnZVRleHR9IC4gJyAnIC4gJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fSwKICAgICAgICApOwogICAgICAgICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0rKzsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9QREZPdXRwdXRMaW5rZWRPYmplY3RzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciAocXcoUGFnZURhdGEgTGlua0RhdGEgTGlua1R5cGVMaXN0KSkgewogICAgICAgIGlmICggIWRlZmluZWQoICRQYXJhbXskX30gKSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coIFByaW9yaXR5ID0+ICdlcnJvcicsIE1lc3NhZ2UgPT4gIk5lZWQgJF8hIiApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICVQYWdlICAgICA9ICV7ICRQYXJhbXtQYWdlRGF0YX0gfTsKICAgIG15ICVUeXBlTGlzdCA9ICV7ICRQYXJhbXtMaW5rVHlwZUxpc3R9IH07CiAgICBteSAlVGFibGVQYXJhbTsKICAgIG15ICRSb3cgPSAwOwoKICAgIGZvciBteSAkTGlua1R5cGVMaW5rRGlyZWN0aW9uICggc29ydCB7IGxjICRhIGNtcCBsYyAkYiB9IGtleXMgJXsgJFBhcmFte0xpbmtEYXRhfSB9ICkgewoKICAgICAgICAjIGludmVzdGlnYXRlIGxpbmsgdHlwZSBuYW1lCiAgICAgICAgbXkgQExpbmtEYXRhID0gc3BsaXQgcXs6On0sICRMaW5rVHlwZUxpbmtEaXJlY3Rpb247CiAgICAgICAgbXkgJExpbmtUeXBlTmFtZSA9ICRUeXBlTGlzdHsgJExpbmtEYXRhWzBdIH0tPnsgJExpbmtEYXRhWzFdIC4gJ05hbWUnIH07CiAgICAgICAgJExpbmtUeXBlTmFtZSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCRMaW5rVHlwZU5hbWUpOwoKICAgICAgICAjIGRlZmluZSBoZWFkbGluZQogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtDb250ZW50fSA9ICRMaW5rVHlwZU5hbWUgLiAnOic7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSA9ICcnOwoKICAgICAgICAjIGV4dHJhY3Qgb2JqZWN0IGxpc3QKICAgICAgICBteSAkT2JqZWN0TGlzdCA9ICRQYXJhbXtMaW5rRGF0YX0tPnskTGlua1R5cGVMaW5rRGlyZWN0aW9ufTsKCiAgICAgICAgZm9yIG15ICRPYmplY3QgKCBzb3J0IHsgbGMgJGEgY21wIGxjICRiIH0ga2V5cyAleyRPYmplY3RMaXN0fSApIHsKCiAgICAgICAgICAgIGZvciBteSAkSXRlbSAoIEB7ICRPYmplY3RMaXN0LT57JE9iamVjdH0gfSApIHsKCiAgICAgICAgICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gfHw9ICcnOwogICAgICAgICAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzFde0NvbnRlbnR9ID0gJEl0ZW0tPntUaXRsZX0gfHwgJyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGludWUgewogICAgICAgICAgICAgICAgJFJvdysrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gNDMxOwoKICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgJFNlbGYtPntQREZPYmplY3R9LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC0xNSwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICRTZWxmLT57UERGT2JqZWN0fS0+VGV4dCgKICAgICAgICBUZXh0ICAgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnTGlua2VkIE9iamVjdHMnKSwKICAgICAgICBIZWlnaHQgICA9PiA3LAogICAgICAgIFR5cGUgICAgID0+ICdDdXQnLAogICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkSXRhbGljJywKICAgICAgICBGb250U2l6ZSA9PiA3LAogICAgICAgIENvbG9yICAgID0+ICcjNjY2NjY2JywKICAgICk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTQsCiAgICApOwoKICAgICMgdGFibGUgcGFyYW1zCiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgID0gMDsKICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yfSA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgPSAxOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgZm9yICggJFBhZ2V7UGFnZUNvdW50fSAuLiAkUGFnZXtNYXhQYWdlc30gKSB7CgogICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICVUYWJsZVBhcmFtID0gJFNlbGYtPntQREZPYmplY3R9LT5UYWJsZSggJVRhYmxlUGFyYW0sICk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGlmICggJFRhYmxlUGFyYW17U3RhdGV9ICkgewogICAgICAgICAgICBsYXN0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntQREZPYmplY3R9LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgJVBhZ2UsIEZvb3RlclJpZ2h0ID0+ICRQYWdle1BhZ2VUZXh0fSAuICcgJyAuICRQYWdle1BhZ2VDb3VudH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRQYWdle1BhZ2VDb3VudH0rKzsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfUERGT3V0cHV0QXR0YWNobWVudHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIChxdyhQYWdlRGF0YSBDb25maWdJdGVtSUQgQXR0YWNobWVudERhdGEpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCggJFBhcmFteyRffSApICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyggUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAiTmVlZCAkXyEiICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJVBhZ2UgPSAleyAkUGFyYW17UGFnZURhdGF9IH07CiAgICBteSAlVGFibGVQYXJhbTsKICAgIG15ICRSb3cgPSAwOwoKICAgICMgYXR0YWNobWVudHMgYXJlIHJlbmRlcmVkIGludG8gYSBzZXBhcmF0ZSByb3cKICAgIEFUVEFDSE1FTlQ6CiAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKCBAeyAkUGFyYW17QXR0YWNobWVudERhdGF9IH0gKSB7CgogICAgICAgICMgZ2V0IHRoZSBtZXRhZGF0YSBvZiB0aGUgY3VycmVudCBhdHRhY2htZW50CiAgICAgICAgbXkgJEF0dGFjaG1lbnREYXRhID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+Q29uZmlnSXRlbUF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgRmlsZW5hbWUgICAgID0+ICRBdHRhY2htZW50LAogICAgICAgICk7CgogICAgICAgICMgZGVmaW5lIGF0dGFjaG1lbnQgbGluZQogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtDb250ZW50fQogICAgICAgICAgICA9ICRBdHRhY2htZW50RGF0YS0+e0ZpbGVuYW1lfSAuICcgICgnIC4gJEF0dGFjaG1lbnREYXRhLT57RmlsZXNpemV9IC4gJyknOwoKICAgICAgICAkUm93Kys7CiAgICB9CgogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsxXXtXaWR0aH0gPSA0MzE7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTE1LAogICAgKTsKCiAgICAjIG91dHB1dCBoZWFkbGluZQogICAgJFNlbGYtPntQREZPYmplY3R9LT5UZXh0KAogICAgICAgIFRleHQgICAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdBdHRhY2htZW50cycpLAogICAgICAgIEhlaWdodCAgID0+IDcsCiAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGRJdGFsaWMnLAogICAgICAgIEZvbnRTaXplID0+IDcsCiAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRTZWxmLT57UERGT2JqZWN0fS0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNCwKICAgICk7CgogICAgIyB0YWJsZSBwYXJhbXMKICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgPSAnQ3V0JzsKICAgICRUYWJsZVBhcmFte0JvcmRlcn0gICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICA9IDY7CiAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNEREREREQnOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgID0gMzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgPSAzOwoKICAgICMgb3V0cHV0IHRhYmxlCiAgICBmb3IgKCAkUGFnZXtQYWdlQ291bnR9IC4uICRQYWdle01heFBhZ2VzfSApIHsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgJVRhYmxlUGFyYW0gPSAkU2VsZi0+e1BERk9iamVjdH0tPlRhYmxlKCAlVGFibGVQYXJhbSwgKTsKCiAgICAgICAgIyBzdG9wIG91dHB1dCBvciBvdXRwdXQgbmV4dCBwYWdlCiAgICAgICAgaWYgKCAkVGFibGVQYXJhbXtTdGF0ZX0gKSB7CiAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBhZ2VOZXcoCiAgICAgICAgICAgICAgICAlUGFnZSwgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSsrOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9QREZPdXRwdXRWZXJzaW9uSW5mb3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUGFnZSBWZXJzaW9uIFZlcnNpb25OdW1iZXIpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRTZWxmLT57UERGT2JqZWN0fS0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtMTUsCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRsaW5lCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlRleHQoCiAgICAgICAgVGV4dCA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnVmVyc2lvbicpIC4gJyAnCiAgICAgICAgICAgIC4gJFBhcmFte1ZlcnNpb25OdW1iZXJ9LAogICAgICAgIEhlaWdodCAgID0+IDcsCiAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGRJdGFsaWMnLAogICAgICAgIEZvbnRTaXplID0+IDcsCiAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRTZWxmLT57UERGT2JqZWN0fS0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNCwKICAgICk7CgogICAgIyBjcmVhdGUgdGFibGUKICAgIG15ICRUYWJsZSA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdDcmVhdGVkJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJyRUaW1lTG9uZ3siJERhdGF7IkNyZWF0ZVRpbWUifSJ9JywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFwleyAkUGFyYW17VmVyc2lvbn0gfSwKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0NyZWF0ZWQgYnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte0NyZWF0ZUJ5fS0+e1VzZXJMb2dpbn0gLiAnICgnCiAgICAgICAgICAgICAgICAuICRQYXJhbXtDcmVhdGVCeX0tPntVc2VyRmlyc3RuYW1lfSAuICcgJwogICAgICAgICAgICAgICAgLiAkUGFyYW17Q3JlYXRlQnl9LT57VXNlckxhc3RuYW1lfSAuICcpJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJyAnLAogICAgICAgICAgICBWYWx1ZSA9PiAnICcsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdOYW1lJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtWZXJzaW9ufS0+e05hbWV9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnRGVwbG95bWVudCBTdGF0ZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCggJFBhcmFte1ZlcnNpb259LT57RGVwbFN0YXRlfSApLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnSW5jaWRlbnQgU3RhdGUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoICRQYXJhbXtWZXJzaW9ufS0+e0luY2lTdGF0ZX0gKSwKICAgICAgICB9LAogICAgXTsKCiAgICAjIGFkZCB4bWwgZGF0YSB0byB0YWJsZQogICAgaWYgKAogICAgICAgIHJlZiAkUGFyYW17VmVyc2lvbn0gZXEgJ0hBU0gnCiAgICAgICAgJiYgJFBhcmFte1ZlcnNpb259LT57WE1MRGVmaW5pdGlvbn0KICAgICAgICAmJiAkUGFyYW17VmVyc2lvbn0tPntYTUxEYXRhfQogICAgICAgICYmIHJlZiAkUGFyYW17VmVyc2lvbn0tPntYTUxEZWZpbml0aW9ufSBlcSAnQVJSQVknCiAgICAgICAgJiYgcmVmICRQYXJhbXtWZXJzaW9ufS0+e1hNTERhdGF9ICAgICAgIGVxICdBUlJBWScKICAgICAgICAmJiAkUGFyYW17VmVyc2lvbn0tPntYTUxEYXRhfS0+WzFdCiAgICAgICAgJiYgcmVmICRQYXJhbXtWZXJzaW9ufS0+e1hNTERhdGF9LT5bMV0gZXEgJ0hBU0gnCiAgICAgICAgJiYgJFBhcmFte1ZlcnNpb259LT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259CiAgICAgICAgJiYgcmVmICRQYXJhbXtWZXJzaW9ufS0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufSBlcSAnQVJSQVknCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT5fUERGT3V0cHV0WE1MT3V0cHV0KAogICAgICAgICAgICBYTUxEZWZpbml0aW9uID0+ICRQYXJhbXtWZXJzaW9ufS0+e1hNTERlZmluaXRpb259LAogICAgICAgICAgICBYTUxEYXRhICAgICAgID0+ICRQYXJhbXtWZXJzaW9ufS0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufS0+WzFdLAogICAgICAgICAgICBUYWJsZURhdGEgICAgID0+ICRUYWJsZSwKICAgICAgICApOwogICAgfQoKICAgIG15ICVUYWJsZVBhcmFtOwogICAgbXkgJFJvd3MgPSBAeyRUYWJsZX07CgogICAgZm9yIG15ICRSb3cgKCAxIC4uICRSb3dzICkgewogICAgICAgICRSb3ctLTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gPSAkVGFibGUtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSA9ICRUYWJsZS0+WyRSb3ddLT57VmFsdWV9OwogICAgfQoKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDEwMDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzFde1dpZHRofSA9IDQxMTsKICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgID0gMDsKICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgICAgICA9IDY7CiAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3J9ICAgICAgPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgICAgICAgPSAxOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICAgICAgID0gMzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgICAgICA9IDM7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIFBBR0U6CiAgICBmb3IgKCAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9IC4uICRQYXJhbXtQYWdlfS0+e01heFBhZ2VzfSApIHsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgJVRhYmxlUGFyYW0gPSAkU2VsZi0+e1BERk9iamVjdH0tPlRhYmxlKCVUYWJsZVBhcmFtKTsKCiAgICAgICAgIyBzdG9wIG91dHB1dCBvciBvdXRwdXQgbmV4dCBwYWdlCiAgICAgICAgbGFzdCBQQUdFIGlmICRUYWJsZVBhcmFte1N0YXRlfTsKCiAgICAgICAgJFNlbGYtPntQREZPYmplY3R9LT5QYWdlTmV3KAogICAgICAgICAgICAleyAkUGFyYW17UGFnZX0gfSwKICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhcmFte1BhZ2V9LT57UGFnZVRleHR9IC4gJyAnIC4gJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fSwKICAgICAgICApOwogICAgICAgICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0rKzsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9QREZPdXRwdXRYTUxPdXRwdXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17VGFibGVEYXRhfTsKICAgIHJldHVybiBpZiAhJFBhcmFte1hNTERhdGF9OwogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGVmaW5pdGlvbn07CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtUYWJsZURhdGF9IG5lICdBUlJBWSc7CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxEYXRhfSBuZSAnSEFTSCc7CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxEZWZpbml0aW9ufSBuZSAnQVJSQVknOwoKICAgICRQYXJhbXtMZXZlbH0gfHw9IDA7CgogICAgSVRFTToKICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtYTUxEZWZpbml0aW9ufSB9ICkgewogICAgICAgIENPVU5URVI6CiAgICAgICAgZm9yIG15ICRDb3VudGVyICggMSAuLiAkSXRlbS0+e0NvdW50TWF4fSApIHsKCiAgICAgICAgICAgICMgc3RvcCBsb29wLCBpZiBubyBjb250ZW50IHdhcyBnaXZlbgogICAgICAgICAgICBsYXN0IENPVU5URVIgaWYgIWRlZmluZWQgJFBhcmFte1hNTERhdGF9LT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLT57Q29udGVudH07CgogICAgICAgICAgICAjIGxvb2t1cCB2YWx1ZQogICAgICAgICAgICBteSAkVmFsdWUgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5YTUxWYWx1ZUxvb2t1cCgKICAgICAgICAgICAgICAgIEl0ZW0gID0+ICRJdGVtLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1hNTERhdGF9LT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLT57Q29udGVudH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNyZWF0ZSBvdXRwdXQgc3RyaW5nCiAgICAgICAgICAgICRWYWx1ZSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SVRTTUNvbmZpZ0l0ZW1PdXRwdXRTdHJpbmdDcmVhdGUoCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWUsCiAgICAgICAgICAgICAgICBJdGVtICA9PiAkSXRlbSwKICAgICAgICAgICAgICAgIFByaW50ID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJlcGxhY2UgbmV3bGluZXMgd2l0aCA8YnIvPiAoZml4IGZvciBidWcjIDU5MjgpCiAgICAgICAgICAgICRWYWx1ZSA9fiBzeyBcbiB9ezxici8+fWd4bXM7CgogICAgICAgICAgICAjIGNvbnZlcnQgdmFsdWUgdG8gYXNjaWkKICAgICAgICAgICAgJFZhbHVlID0gJFNlbGYtPntIVE1MVXRpbHNPYmplY3R9LT5Ub0FzY2lpKCBTdHJpbmcgPT4gJFZhbHVlICk7CgogICAgICAgICAgICAjIG5ldyByb3cKICAgICAgICAgICAgbXkgJE5ld1JvdyA9IHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCAkSXRlbS0+e05hbWV9ICkgLiAnOicsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWUsCiAgICAgICAgICAgIH07CgogICAgICAgICAgICAjIG91dHB1dCBzcGFjZSwgaWYgbGV2ZWwgd2FzIGdpdmVuCiAgICAgICAgICAgIGlmICggJFBhcmFte0xldmVsfSApIHsKICAgICAgICAgICAgICAgIGZvciAoIDEgLi4gJFBhcmFte0xldmVsfSApIHsKICAgICAgICAgICAgICAgICAgICAkTmV3Um93LT57S2V5fSAgID0gJyAgICAnIC4gJE5ld1Jvdy0+e0tleX07CiAgICAgICAgICAgICAgICAgICAgJE5ld1Jvdy0+e1ZhbHVlfSA9ICcgICAgJyAuICROZXdSb3ctPntWYWx1ZX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIHJvdyBkYXRhCiAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte1RhYmxlRGF0YX0gfSwgJE5ld1JvdzsKCiAgICAgICAgICAgIG5leHQgQ09VTlRFUiBpZiAhJEl0ZW0tPntTdWJ9OwoKICAgICAgICAgICAgIyBzdGFydCByZWN1cnNpb24sIGlmICJTdWIiIHdhcyBmb3VuZAogICAgICAgICAgICAkU2VsZi0+X1BERk91dHB1dFhNTE91dHB1dCgKICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgICA9PiAkUGFyYW17WE1MRGF0YX0tPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlcl0sCiAgICAgICAgICAgICAgICBUYWJsZURhdGEgICAgID0+ICRQYXJhbXtUYWJsZURhdGF9LAogICAgICAgICAgICAgICAgTGV2ZWwgICAgICAgICA9PiAkUGFyYW17TGV2ZWx9ICsgMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfSFRNTE91dHB1dFhNTFN0cnVjdHVyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxEYXRhfTsKICAgIHJldHVybiBpZiAhJFBhcmFte1hNTERlZmluaXRpb259OwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRGF0YX0gbmUgJ0hBU0gnOwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRGVmaW5pdGlvbn0gbmUgJ0FSUkFZJzsKCiAgICAkUGFyYW17TGV2ZWx9IHx8PSAwOwoKICAgIElURU06CiAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17WE1MRGVmaW5pdGlvbn0gfSApIHsKICAgICAgICBDT1VOVEVSOgogICAgICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gJEl0ZW0tPntDb3VudE1heH0gKSB7CgogICAgICAgICAgICAjIHN0b3AgbG9vcCwgaWYgbm8gY29udGVudCB3YXMgZ2l2ZW4KICAgICAgICAgICAgbGFzdCBDT1VOVEVSIGlmICFkZWZpbmVkICRQYXJhbXtYTUxEYXRhfS0+eyAkSXRlbS0+e0tleX0gfS0+WyRDb3VudGVyXS0+e0NvbnRlbnR9OwoKICAgICAgICAgICAgIyBsb29rdXAgdmFsdWUKICAgICAgICAgICAgbXkgJFZhbHVlID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+WE1MVmFsdWVMb29rdXAoCiAgICAgICAgICAgICAgICBJdGVtICA9PiAkSXRlbSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtYTUxEYXRhfS0+eyAkSXRlbS0+e0tleX0gfS0+WyRDb3VudGVyXS0+e0NvbnRlbnR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjcmVhdGUgb3V0cHV0IHN0cmluZwogICAgICAgICAgICAkVmFsdWUgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPklUU01Db25maWdJdGVtT3V0cHV0U3RyaW5nQ3JlYXRlKAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFZhbHVlLAogICAgICAgICAgICAgICAgSXRlbSAgPT4gJEl0ZW0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG91dHB1dCBkYXRhIGJsb2NrCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdWZXJzaW9uUm93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICRJdGVtLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJEl0ZW0tPntEZXNjcmlwdGlvbn0gfHwgJEl0ZW0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICA9PiAkVmFsdWUsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBvdXRwdXQgc3BhY2UsIGlmIGxldmVsIHdhcyBnaXZlbgogICAgICAgICAgICBpZiAoICRQYXJhbXtMZXZlbH0gKSB7CiAgICAgICAgICAgICAgICBmb3IgKCAxIC4uICRQYXJhbXtMZXZlbH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnVmVyc2lvblJvd05hbWVQcmUnICk7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnVmVyc2lvblJvd1ZhbHVlUHJlJyApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBuZXh0IENPVU5URVIgaWYgISRJdGVtLT57U3VifTsKCiAgICAgICAgICAgICMgc3RhcnQgcmVjdXJzaW9uLCBpZiAiU3ViIiB3YXMgZm91bmQKICAgICAgICAgICAgJFNlbGYtPl9IVE1MT3V0cHV0WE1MU3RydWN0dXJlKAogICAgICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgID0+ICRQYXJhbXtYTUxEYXRhfS0+eyAkSXRlbS0+e0tleX0gfS0+WyRDb3VudGVyXSwKICAgICAgICAgICAgICAgIExldmVsICAgICAgICAgPT4gJFBhcmFte0xldmVsfSArIDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gucG0gLSB0aGUgT1RSUyBJVFNNIGNvbmZpZyBpdGVtIHNlYXJjaCBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW07CnVzZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c7CnVzZSBLZXJuZWw6OlN5c3RlbTo6U2VhcmNoUHJvZmlsZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpDU1Y7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgQ29uZmlnT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSBhZGRpdGlvbmFsIG9iamVjdHMKICAgICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0gICAgID0gS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57U2VhcmNoUHJvZmlsZU9iamVjdH0gID0gS2VybmVsOjpTeXN0ZW06OlNlYXJjaFByb2ZpbGUtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntDU1ZPYmplY3R9ICAgICAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6Q1NWLT5uZXcoJVBhcmFtKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKICAgIG15ICRPdXRwdXQ7CgogICAgIyBnZXQgY29uZmlnIGRhdGEKICAgICRTZWxmLT57U3RhcnRIaXR9ID0gaW50KCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdGFydEhpdCcgKSB8fCAxICk7CiAgICAkU2VsZi0+e1NlYXJjaExpbWl0fSA9ICRTZWxmLT57Q29uZmlnfS0+e1NlYXJjaExpbWl0fSB8fCAxMDAwMDsKICAgICRTZWxmLT57U29ydEJ5fSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NvcnRCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydTb3J0Qnk6OkRlZmF1bHQnfQogICAgICAgIHx8ICdOdW1iZXInOwogICAgJFNlbGYtPntPcmRlckJ5fSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ09yZGVyQnknICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnT3JkZXI6OkRlZmF1bHQnfQogICAgICAgIHx8ICdEb3duJzsKICAgICRTZWxmLT57UHJvZmlsZX0gICAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnUHJvZmlsZScgKSAgICAgfHwgJyc7CiAgICAkU2VsZi0+e1NhdmVQcm9maWxlfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NhdmVQcm9maWxlJyApIHx8ICcnOwogICAgJFNlbGYtPntUYWtlTGFzdFNlYXJjaH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdUYWtlTGFzdFNlYXJjaCcgKTsKCiAgICAjIGdldCBjbGFzcyBsaXN0CiAgICBteSAkQ2xhc3NMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICApOwoKICAgICMgY2hlY2sgZm9yIGFjY2VzcyByaWdodHMgb24gdGhlIGNsYXNzZXMKICAgIGZvciBteSAkQ2xhc3NJRCAoIGtleXMgJXskQ2xhc3NMaXN0fSApIHsKICAgICAgICBteSAkSGFzQWNjZXNzID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+UGVybWlzc2lvbigKICAgICAgICAgICAgVHlwZSAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICAgICAgU2NvcGUgICA9PiAnQ2xhc3MnLAogICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lELAogICAgICAgICAgICBVc2VySUQgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBkZWxldGUgJENsYXNzTGlzdC0+eyRDbGFzc0lEfSBpZiAhJEhhc0FjY2VzczsKICAgIH0KCiAgICAjIGdldCBjbGFzcyBpZAogICAgbXkgJENsYXNzSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdDbGFzc0lEJyApOwoKICAgICMgY2hlY2sgaWYgY2xhc3MgaWQgaXMgdmFsaWQKICAgIGlmICggJENsYXNzSUQgJiYgISRDbGFzc0xpc3QtPnskQ2xhc3NJRH0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ0ludmFsaWQgQ2xhc3NJRCEnLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHNpbmdsZSBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKCiAgICAjIGxvYWQgcHJvZmlsZXMgc3RyaW5nIHBhcmFtcwogICAgaWYgKCAoICRDbGFzc0lEICYmICRTZWxmLT57UHJvZmlsZX0gKSAmJiAkU2VsZi0+e1Rha2VMYXN0U2VhcmNofSApIHsKICAgICAgICAlR2V0UGFyYW0gPSAkU2VsZi0+e1NlYXJjaFByb2ZpbGVPYmplY3R9LT5TZWFyY2hQcm9maWxlR2V0KAogICAgICAgICAgICBCYXNlICAgICAgPT4gJ0NvbmZpZ0l0ZW1TZWFyY2gnIC4gJENsYXNzSUQsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VsZi0+e1Byb2ZpbGV9LAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBkZWxldGUgc2VhcmNoIHByb2ZpbGVzCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQUpBWFByb2ZpbGVEZWxldGUnICkgewoKICAgICAgICAjIHJlbW92ZSBvbGQgcHJvZmlsZSBzdHVmZgogICAgICAgICRTZWxmLT57U2VhcmNoUHJvZmlsZU9iamVjdH0tPlNlYXJjaFByb2ZpbGVEZWxldGUoCiAgICAgICAgICAgIEJhc2UgICAgICA9PiAnQ29uZmlnSXRlbVNlYXJjaCcgLiAkQ2xhc3NJRCwKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZWxmLT57UHJvZmlsZX0sCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgKTsKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5KU09ORW5jb2RlKAogICAgICAgICAgICBEYXRhID0+IDEsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5BdHRhY2htZW50KAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJE91dHB1dCwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgaW5pdCBzZWFyY2ggZGlhbG9nIChzZWxlY3QgY2xhc3MpCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQUpBWCcgKSB7CgogICAgICAgICMgZ2VuZXJhdGUgZHJvcGRvd24gZm9yIHNlbGVjdGluZyB0aGUgY2xhc3MKICAgICAgICAjIGF1dG9tYXRpY2FsbHkgc2hvdyBzZWFyY2ggbWFzayBhZnRlciBzZWxlY3RpbmcgYSBjbGFzcyB2aWEgQUpBWAogICAgICAgIG15ICRDbGFzc09wdGlvblN0cmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJENsYXNzTGlzdCwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdTZWFyY2hDbGFzc0lEJywKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkQ2xhc3NJRCB8fCAnJywKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBodG1sIHNlYXJjaCBtYXNrIG91dHB1dAogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NlYXJjaEFKQVgnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzT3B0aW9uU3RyZyA9PiAkQ2xhc3NPcHRpb25TdHJnLAogICAgICAgICAgICAgICAgUHJvZmlsZSAgICAgICAgID0+ICRTZWxmLT57UHJvZmlsZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgY2xhc3MgZmllbGRzIGlmIGNsYXNzIHNwZWNpZmllZAogICAgICAgIGlmICgkQ2xhc3NJRCkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU2VhcmNoQUpBWFNldENsYXNzJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFByb2ZpbGUgPT4gJFNlbGYtPntQcm9maWxlfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCB0ZW1wbGF0ZQogICAgICAgICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudElUU01Db25maWdJdGVtU2VhcmNoJywKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNldCBzZWFyY2ggZmllbGRzIGZvciBzZWxlY3RlZCBjbGFzcwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FKQVhVcGRhdGUnICkgewoKICAgICAgICAjIENsYXNzSUQgaXMgcmVxdWlyZWQgZm9yIHRoZSBzZWFyY2ggbWFzayBhbmQgZm9yIGFjdHVhbCBzZWFyY2hpbmcKICAgICAgICBpZiAoICEkQ2xhc3NJRCApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICdObyBDbGFzc0lEIGlzIGdpdmVuIScsCiAgICAgICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgdXNlciBpcyBhbGxvd2VkIHRvIHNlYXJjaCBjbGFzcwogICAgICAgIG15ICRIYXNBY2Nlc3MgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5QZXJtaXNzaW9uKAogICAgICAgICAgICBUeXBlICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgICAgICBTY29wZSAgID0+ICdDbGFzcycsCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzSUQsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBlcnJvciBzY3JlZW4KICAgICAgICBpZiAoICEkSGFzQWNjZXNzICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05vIGFjY2VzcyByaWdodHMgZm9yIHRoaXMgY2xhc3MgZ2l2ZW4hJywKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbi4nLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgY3VycmVudCBkZWZpbml0aW9uCiAgICAgICAgbXkgJFhNTERlZmluaXRpb24gPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5EZWZpbml0aW9uR2V0KAogICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lELAogICAgICAgICk7CgogICAgICAgICMgYWJvcnQsIGlmIG5vIGRlZmluaXRpb24gaXMgZGVmaW5lZAogICAgICAgIGlmICggISRYTUxEZWZpbml0aW9uLT57RGVmaW5pdGlvbklEfSApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJObyBEZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAkQ2xhc3NJRCEiLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSBAWE1MQXR0cmlidXRlcyA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnTnVtYmVyJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJ05hbWUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAnRGVwbFN0YXRlSURzJywKICAgICAgICAgICAgICAgIFZhbHVlID0+ICdEZXBsb3ltZW50IFN0YXRlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJ0luY2lTdGF0ZUlEcycsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnSW5jaWRlbnQgU3RhdGUnLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIG15ICVHZXRQYXJhbSA9ICRTZWxmLT57U2VhcmNoUHJvZmlsZU9iamVjdH0tPlNlYXJjaFByb2ZpbGVHZXQoCiAgICAgICAgICAgIEJhc2UgICAgICA9PiAnQ29uZmlnSXRlbVNlYXJjaCcgLiAkQ2xhc3NJRCwKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZWxmLT57UHJvZmlsZX0sCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgYXR0cmlidXRlcyB0byBpbmNsdWRlIGluIGF0dHJpYnV0ZXMgc3RyaW5nCiAgICAgICAgaWYgKCAkWE1MRGVmaW5pdGlvbi0+e0RlZmluaXRpb259ICkgewogICAgICAgICAgICAkU2VsZi0+X1hNTFNlYXJjaEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgICAgICAgICBYTUxEZWZpbml0aW9uID0+ICRYTUxEZWZpbml0aW9uLT57RGVmaW5pdGlvblJlZn0sCiAgICAgICAgICAgICAgICBYTUxBdHRyaWJ1dGVzID0+IFxAWE1MQXR0cmlidXRlcywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgYnVpbGQgYXR0cmlidXRlcyBzdHJpbmcgZm9yIGF0dHJpYnV0ZXMgbGlzdAogICAgICAgICRQYXJhbXtBdHRyaWJ1dGVzU3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICA9PiBcQFhNTEF0dHJpYnV0ZXMsCiAgICAgICAgICAgIE5hbWUgICAgID0+ICdBdHRyaWJ1dGUnLAogICAgICAgICAgICBNdWx0aXBsZSA9PiAwLAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgYXR0cmlidXRlcyBzdHJpbmcgZm9yIHJlY292ZXJ5IG9uIGFkZCBvciBzdWJ0cmFjdCBzZWFyY2ggZmllbGRzCiAgICAgICAgJFBhcmFte0F0dHJpYnV0ZXNPcmlnU3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICA9PiBcQFhNTEF0dHJpYnV0ZXMsCiAgICAgICAgICAgIE5hbWUgICAgID0+ICdBdHRyaWJ1dGVPcmlnJywKICAgICAgICAgICAgTXVsdGlwbGUgPT4gMCwKICAgICAgICApOwoKICAgICAgICBteSAlUHJvZmlsZXMgPSAkU2VsZi0+e1NlYXJjaFByb2ZpbGVPYmplY3R9LT5TZWFyY2hQcm9maWxlTGlzdCgKICAgICAgICAgICAgQmFzZSAgICAgID0+ICdDb25maWdJdGVtU2VhcmNoJyAuICRDbGFzc0lELAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgICk7CgogICAgICAgIGRlbGV0ZSAkUHJvZmlsZXN7Jyd9OwogICAgICAgICRQcm9maWxlc3snbGFzdC1zZWFyY2gnfSA9ICctJzsKICAgICAgICAkUGFyYW17UHJvZmlsZXNTdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgPT4gXCVQcm9maWxlcywKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnUHJvZmlsZScsCiAgICAgICAgICAgIElEICAgICAgICAgPT4gJ1NlYXJjaFByb2ZpbGUnLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRTZWxmLT57UHJvZmlsZX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgZGVwbG95bWVudCBzdGF0ZSBsaXN0CiAgICAgICAgbXkgJERlcGxTdGF0ZUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGUnLAogICAgICAgICk7CgogICAgICAgICMgZ2VuZXJhdGUgZHJvcGRvd24gZm9yIHNlbGVjdGluZyB0aGUgd2FudGVkIGRlcGxveW1lbnQgc3RhdGVzCiAgICAgICAgbXkgJEN1ckRlcGxTdGF0ZU9wdGlvblN0cmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgID0+ICREZXBsU3RhdGVMaXN0LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdEZXBsU3RhdGVJRHMnLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRHZXRQYXJhbXtEZXBsU3RhdGVJRHN9IHx8IFtdLAogICAgICAgICAgICBTaXplICAgICAgID0+IDUsCiAgICAgICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBpbmNpZGVudCBzdGF0ZSBsaXN0CiAgICAgICAgbXkgJEluY2lTdGF0ZUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlJywKICAgICAgICApOwoKICAgICAgICAjIGdlbmVyYXRlIGRyb3Bkb3duIGZvciBzZWxlY3RpbmcgdGhlIHdhbnRlZCBpbmNpZGVudCBzdGF0ZXMKICAgICAgICBteSAkQ3VySW5jaVN0YXRlT3B0aW9uU3RyZyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgPT4gJEluY2lTdGF0ZUxpc3QsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0luY2lTdGF0ZUlEcycsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJEdldFBhcmFte0luY2lTdGF0ZUlEc30gfHwgW10sCiAgICAgICAgICAgIFNpemUgICAgICAgPT4gNSwKICAgICAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZ2VuZXJhdGUgUHJldmlvdXNWZXJzaW9uT3B0aW9uU3RyZwogICAgICAgIG15ICRQcmV2aW91c1ZlcnNpb25PcHRpb25TdHJnID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgTmFtZSA9PiAnUHJldmlvdXNWZXJzaW9uU2VhcmNoJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAwID0+ICdObycsCiAgICAgICAgICAgICAgICAxID0+ICdZZXMnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRHZXRQYXJhbXtQcmV2aW91c1ZlcnNpb25TZWFyY2h9IHx8ICcwJywKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIG91dHB1dCBmb3JtYXQgc3RyaW5nCiAgICAgICAgJFBhcmFte1Jlc3VsdEZvcm1TdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTm9ybWFsID0+ICdOb3JtYWwnLAogICAgICAgICAgICAgICAgUHJpbnQgID0+ICdQcmludCcsCiAgICAgICAgICAgICAgICBDU1YgICAgPT4gJ0NTVicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE5hbWUgPT4gJ1Jlc3VsdEZvcm0nLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRHZXRQYXJhbXtSZXN1bHRGb3JtfSB8fCAnTm9ybWFsJywKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBSkFYQ29udGVudCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICAgICAgICAgICA9PiAkQ2xhc3NJRCwKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXNTdHJnICAgICAgICAgICAgPT4gJFBhcmFte0F0dHJpYnV0ZXNTdHJnfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZU9wdGlvblN0cmcgICAgPT4gJEN1ckRlcGxTdGF0ZU9wdGlvblN0cmcsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVPcHRpb25TdHJnICAgID0+ICRDdXJJbmNpU3RhdGVPcHRpb25TdHJnLAogICAgICAgICAgICAgICAgUHJldmlvdXNWZXJzaW9uT3B0aW9uU3RyZyA9PiAkUHJldmlvdXNWZXJzaW9uT3B0aW9uU3RyZywKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXNTdHJnICAgICAgICAgICAgPT4gJFBhcmFte0F0dHJpYnV0ZXNTdHJnfSwKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXNPcmlnU3RyZyAgICAgICAgPT4gJFBhcmFte0F0dHJpYnV0ZXNPcmlnU3RyZ30sCiAgICAgICAgICAgICAgICBSZXN1bHRGb3JtU3RyZyAgICAgICAgICAgID0+ICRQYXJhbXtSZXN1bHRGb3JtU3RyZ30sCiAgICAgICAgICAgICAgICBQcm9maWxlc1N0cmcgICAgICAgICAgICAgID0+ICRQYXJhbXtQcm9maWxlc1N0cmd9LAogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICAgICAgICAgICA9PiAkR2V0UGFyYW17TnVtYmVyfSB8fCAnJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICAgICAgPT4gJEdldFBhcmFte05hbWV9IHx8ICcnLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IHhtbCBzZWFyY2ggZm9ybQogICAgICAgIGlmICggJFhNTERlZmluaXRpb24tPntEZWZpbml0aW9ufSApIHsKICAgICAgICAgICAgJFNlbGYtPl9YTUxTZWFyY2hGb3JtT3V0cHV0KAogICAgICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkWE1MRGVmaW5pdGlvbi0+e0RlZmluaXRpb25SZWZ9LAogICAgICAgICAgICAgICAgWE1MQXR0cmlidXRlcyA9PiBcQFhNTEF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICBHZXRQYXJhbSAgICAgID0+IFwlR2V0UGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNob3cgYXR0cmlidXRlcwogICAgICAgIG15ICRBdHRyaWJ1dGVJc1VzZWQgPSAwOwogICAgICAgIEtFWToKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlR2V0UGFyYW0gKSB7CiAgICAgICAgICAgIG5leHQgS0VZIGlmICEkS2V5OwogICAgICAgICAgICBuZXh0IEtFWSBpZiAhZGVmaW5lZCAkR2V0UGFyYW17JEtleX07CiAgICAgICAgICAgIG5leHQgS0VZIGlmICRHZXRQYXJhbXskS2V5fSBlcSAnJzsKCiAgICAgICAgICAgICRBdHRyaWJ1dGVJc1VzZWQgPSAxOwoKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NlYXJjaEFKQVhTaG93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAkS2V5LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IHRlbXBsYXRlCiAgICAgICAgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gnLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgcGVyZm9ybSBzZWFyY2gKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTZWFyY2gnICkgewoKICAgICAgICBteSAkU2VhcmNoRGlhbG9nID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VhcmNoRGlhbG9nJyApOwoKICAgICAgICAjIGZpbGwgdXAgcHJvZmlsZSBuYW1lIChlLmcuIHdpdGggbGFzdC1zZWFyY2gpCiAgICAgICAgaWYgKCAhJFNlbGYtPntQcm9maWxlfSB8fCAhJFNlbGYtPntTYXZlUHJvZmlsZX0gKSB7CiAgICAgICAgICAgICRTZWxmLT57UHJvZmlsZX0gPSAnbGFzdC1zZWFyY2gnOwogICAgICAgIH0KCiAgICAgICAgIyBzdG9yZSBsYXN0IG92ZXJ2aWV3IHNjcmVlbgogICAgICAgIG15ICRVUkwKICAgICAgICAgICAgPSAiQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2g7UHJvZmlsZT0kU2VsZi0+e1Byb2ZpbGV9OyIKICAgICAgICAgICAgLiAiVGFrZUxhc3RTZWFyY2g9MTtTdGFydEhpdD0kU2VsZi0+e1N0YXJ0SGl0fTtTdWJhY3Rpb249U2VhcmNoOyIKICAgICAgICAgICAgLiAiT3JkZXJCeT0kU2VsZi0+e09yZGVyQnl9O1NvcnRCeT0kU2VsZi0+e1NvcnRCeX0iOwoKICAgICAgICBpZiAoJENsYXNzSUQpIHsKICAgICAgICAgICAgJFVSTCAuPSAiO0NsYXNzSUQ9JENsYXNzSUQiOwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPntTZXNzaW9uT2JqZWN0fS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5PdmVydmlldycsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVVJMLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPntTZXNzaW9uT2JqZWN0fS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5WaWV3JywKICAgICAgICAgICAgVmFsdWUgICAgID0+ICRVUkwsCiAgICAgICAgKTsKCiAgICAgICAgIyBDbGFzc0lEIGlzIHJlcXVpcmVkIGZvciB0aGUgc2VhcmNoIG1hc2sgYW5kIGZvciBhY3R1YWwgc2VhcmNoaW5nCiAgICAgICAgaWYgKCAhJENsYXNzSUQgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIHVzZXIgaXMgYWxsb3dlZCB0byBzZWFyY2ggY2xhc3MKICAgICAgICBteSAkSGFzQWNjZXNzID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+UGVybWlzc2lvbigKICAgICAgICAgICAgVHlwZSAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICAgICAgU2NvcGUgICA9PiAnQ2xhc3MnLAogICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lELAogICAgICAgICAgICBVc2VySUQgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgZXJyb3Igc2NyZWVuCiAgICAgICAgaWYgKCAhJEhhc0FjY2VzcyApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICdObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuIScsCiAgICAgICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGN1cnJlbnQgZGVmaW5pdGlvbgogICAgICAgIG15ICRYTUxEZWZpbml0aW9uID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+RGVmaW5pdGlvbkdldCgKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NJRCwKICAgICAgICApOwoKICAgICAgICAjIGFib3J0LCBpZiBubyBkZWZpbml0aW9uIGlzIGRlZmluZWQKICAgICAgICBpZiAoICEkWE1MRGVmaW5pdGlvbi0+e0RlZmluaXRpb25JRH0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiTm8gRGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJENsYXNzSUQhIiwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbi4nLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc2NhbGFyIHNlYXJjaCBhdHRyaWJ1dGVzIChzcGVjaWFsIGhhbmRsaW5nIGZvciBOdW1iZXIgYW5kIE5hbWUpCiAgICAgICAgRk9STVZBTFVFOgogICAgICAgIGZvciBteSAkRm9ybVZhbHVlIChxdyhOdW1iZXIgTmFtZSkpIHsKCiAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJEZvcm1WYWx1ZSApOwoKICAgICAgICAgICAgIyBtdXN0IGJlIGRlZmluZWQgYW5kIG5vdCBiZSBhbiBlbXB0eSBzdHJpbmcKICAgICAgICAgICAgIyBCVVQgdGhlIG51bWJlciAwIGlzIGFuIGFsbG93ZWQgdmFsdWUKICAgICAgICAgICAgbmV4dCBGT1JNVkFMVUUgaWYgIWRlZmluZWQgJFZhbHVlOwogICAgICAgICAgICBuZXh0IEZPUk1WQUxVRSBpZiAkVmFsdWUgZXEgJyc7CgogICAgICAgICAgICAkR2V0UGFyYW17JEZvcm1WYWx1ZX0gPSAkVmFsdWU7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGVyIHNjYWxhciBzZWFyY2ggYXR0cmlidXRlcwogICAgICAgIEZPUk1WQUxVRToKICAgICAgICBmb3IgbXkgJEZvcm1WYWx1ZSAocXcoUHJldmlvdXNWZXJzaW9uU2VhcmNoIFJlc3VsdEZvcm0pKSB7CgogICAgICAgICAgICBteSAkVmFsdWUgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRGb3JtVmFsdWUgKTsKCiAgICAgICAgICAgIG5leHQgRk9STVZBTFVFIGlmICEkVmFsdWU7CgogICAgICAgICAgICAkR2V0UGFyYW17JEZvcm1WYWx1ZX0gPSAkVmFsdWU7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhcnJheSBzZWFyY2ggYXR0cmlidXRlcwogICAgICAgIEZPUk1BUlJBWToKICAgICAgICBmb3IgbXkgJEZvcm1BcnJheSAocXcoRGVwbFN0YXRlSURzIEluY2lTdGF0ZUlEcykpIHsKCiAgICAgICAgICAgIG15IEBBcnJheSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRBcnJheSggUGFyYW0gPT4gJEZvcm1BcnJheSApOwoKICAgICAgICAgICAgbmV4dCBGT1JNQVJSQVkgaWYgIUBBcnJheTsKCiAgICAgICAgICAgICRHZXRQYXJhbXskRm9ybUFycmF5fSA9IFxAQXJyYXk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB4bWwgc2VhcmNoIGZvcm0KICAgICAgICBteSAkWE1MRm9ybURhdGEgPSBbXTsKICAgICAgICBteSAkWE1MR2V0UGFyYW0gPSBbXTsKICAgICAgICAkU2VsZi0+X1hNTFNlYXJjaEZvcm1HZXQoCiAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJFhNTERlZmluaXRpb24tPntEZWZpbml0aW9uUmVmfSwKICAgICAgICAgICAgWE1MRm9ybURhdGEgICA9PiAkWE1MRm9ybURhdGEsCiAgICAgICAgICAgIFhNTEdldFBhcmFtICAgPT4gJFhNTEdldFBhcmFtLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCBAeyRYTUxGb3JtRGF0YX0gKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXtXaGF0fSA9ICRYTUxGb3JtRGF0YTsKICAgICAgICB9CgogICAgICAgICMgc2F2ZSBzZWFyY2ggcHJvZmlsZSAodW5kZXIgbGFzdC1zZWFyY2ggb3IgcmVhbCBwcm9maWxlIG5hbWUpCiAgICAgICAgJFNlbGYtPntTYXZlUHJvZmlsZX0gPSAxOwoKICAgICAgICAjIHJlbWVtYmVyIGxhc3Qgc2VhcmNoIHZhbHVlcyBvbmx5IGlmIHNlYXJjaCBpcyBjYWxsZWQgZnJvbSBhIHNlYXJjaCBkaWFsb2cKICAgICAgICAjIG5vdCBmcm9tIHJlc3VsdHMgcGFnZQogICAgICAgIGlmICggJFNlbGYtPntTYXZlUHJvZmlsZX0gJiYgJFNlbGYtPntQcm9maWxlfSAmJiAkU2VhcmNoRGlhbG9nICkgewoKICAgICAgICAgICAgIyByZW1vdmUgb2xkIHByb2ZpbGUgc3R1ZmYKICAgICAgICAgICAgJFNlbGYtPntTZWFyY2hQcm9maWxlT2JqZWN0fS0+U2VhcmNoUHJvZmlsZURlbGV0ZSgKICAgICAgICAgICAgICAgIEJhc2UgICAgICA9PiAnQ29uZmlnSXRlbVNlYXJjaCcgLiAkQ2xhc3NJRCwKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VsZi0+e1Byb2ZpbGV9LAogICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgaW5zZXJ0IG5ldyBwcm9maWxlIHBhcmFtcwogICAgICAgICAgICBmb3IgbXkgJEtleSAoIGtleXMgJUdldFBhcmFtICkgewogICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17JEtleX0gJiYgJEtleSBuZSAnV2hhdCcgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntTZWFyY2hQcm9maWxlT2JqZWN0fS0+U2VhcmNoUHJvZmlsZUFkZCgKICAgICAgICAgICAgICAgICAgICAgICAgQmFzZSAgICAgID0+ICdDb25maWdJdGVtU2VhcmNoJyAuICRDbGFzc0lELAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlbGYtPntQcm9maWxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgID0+ICRLZXksCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkR2V0UGFyYW17JEtleX0sCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpbnNlcnQgbmV3IHByb2ZpbGUgcGFyYW1zIGFsc28gZnJvbSBYTUxmb3JtCiAgICAgICAgICAgIGlmICggQHskWE1MR2V0UGFyYW19ICkgewogICAgICAgICAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKCBAeyRYTUxHZXRQYXJhbX0gKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBrZXlzICV7JFBhcmFtZXRlcn0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJFBhcmFtZXRlci0+eyRLZXl9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntTZWFyY2hQcm9maWxlT2JqZWN0fS0+U2VhcmNoUHJvZmlsZUFkZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlICAgICAgPT4gJ0NvbmZpZ0l0ZW1TZWFyY2gnIC4gJENsYXNzSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZWxmLT57UHJvZmlsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgID0+ICRLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRQYXJhbWV0ZXItPnskS2V5fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRTZWFyY2hSZXN1bHRMaXN0ID0gW107CgogICAgICAgICMgc3RhcnQgc2VhcmNoIGlmIGNhbGxlZCBmcm9tIGEgc2VhcmNoIGRpYWxvZyBvciBmcm9tIGEgcmVzdXRscyBwYWdlCiAgICAgICAgaWYgKCAkU2VhcmNoRGlhbG9nIHx8ICRTZWxmLT57VGFrZUxhc3RTZWFyY2h9ICkgewoKICAgICAgICAgICAgIyBzdGFydCBzZWFyY2gKICAgICAgICAgICAgJFNlYXJjaFJlc3VsdExpc3QgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFsgJFNlbGYtPntTb3J0Qnl9IF0sCiAgICAgICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFsgJFNlbGYtPntPcmRlckJ5fSBdLAogICAgICAgICAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAkU2VsZi0+e1NlYXJjaExpbWl0fSwKICAgICAgICAgICAgICAgIENsYXNzSURzICAgICAgICAgPT4gWyRDbGFzc0lEXSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHBhcmFtIG9ubHkgaWYgY2FsbGVkIGZyb20gYSBzZWFyY2ggZGlhbG9nLCBvdGhlcndpc2UgaXQgbXVzdCBiZSBhbHJlYWR5IGluICVHZXRQYXJhbQogICAgICAgICMgZnJvbSBhIGxvYWRlZCBwcm9maWxlCiAgICAgICAgaWYgKCRTZWFyY2hEaWFsb2cpIHsKICAgICAgICAgICAgJEdldFBhcmFte1Jlc3VsdEZvcm19ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnUmVzdWx0Rm9ybScgKTsKICAgICAgICB9CgogICAgICAgICMgQ1NWIG91dHB1dAogICAgICAgIGlmICggJEdldFBhcmFte1Jlc3VsdEZvcm19IGVxICdDU1YnICkgewogICAgICAgICAgICBteSBAQ1NWRGF0YTsKICAgICAgICAgICAgbXkgQENTVkhlYWQ7CgogICAgICAgICAgICBDT05GSUdJVEVNSUQ6CiAgICAgICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICggQHskU2VhcmNoUmVzdWx0TGlzdH0gKSB7CgogICAgICAgICAgICAgICAgIyBjaGVjayBmb3IgYWNjZXNzIHJpZ2h0cwogICAgICAgICAgICAgICAgbXkgJEhhc0FjY2VzcyA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgICAgU2NvcGUgID0+ICdJdGVtJywKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIFR5cGUgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgISRIYXNBY2Nlc3M7CgogICAgICAgICAgICAgICAgIyBnZXQgdmVyc2lvbgogICAgICAgICAgICAgICAgbXkgJExhc3RWZXJzaW9uID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkdldCgKICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhR2V0ICAgPT4gMCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjc3YgcXVvdGUKICAgICAgICAgICAgICAgIGlmICggIUBDU1ZIZWFkICkgewogICAgICAgICAgICAgICAgICAgIEBDU1ZIZWFkID0gQHsgJFNlbGYtPntDb25maWd9LT57U2VhcmNoQ1NWRGF0YX0gfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHN0b3JlIGRhdGEKICAgICAgICAgICAgICAgIG15IEBEYXRhOwogICAgICAgICAgICAgICAgZm9yIChxdyhDbGFzcyBJbmNpU3RhdGUgTmFtZSBOdW1iZXIgRGVwbFN0YXRlIFZlcnNpb25JRCBDcmVhdGVUaW1lKSkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQERhdGEsICRMYXN0VmVyc2lvbi0+eyRffTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHB1c2ggQENTVkRhdGEsIFxARGF0YTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjc3YgcXVvdGUKICAgICAgICAgICAgIyB0cmFuc2xhdGUgbm9uIGV4aXN0aW5nIGhlYWRlciBtYXkgcmVzdWx0IGluIGEgZ2FyYmFnZSBmaWxlCiAgICAgICAgICAgIGlmICggIUBDU1ZIZWFkICkgewogICAgICAgICAgICAgICAgQENTVkhlYWQgPSBAeyAkU2VsZi0+e0NvbmZpZ30tPntTZWFyY2hDU1ZEYXRhfSB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHRyYW5zbGF0ZSBoZWFkZXJzCiAgICAgICAgICAgIGZvciBteSAkSGVhZGVyIChAQ1NWSGVhZCkgewoKICAgICAgICAgICAgICAgICMgcmVwbGFjZSBGQVFOdW1iZXIgaGVhZGVyIHdpdGggdGhlIGN1cnJlbnQgRkFRSG9vayBmcm9tIGNvbmZpZwogICAgICAgICAgICAgICAgaWYgKCAkSGVhZGVyIGVxICdDb25maWdJdGVtTnVtYmVyJyApIHsKICAgICAgICAgICAgICAgICAgICAkSGVhZGVyID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0lUU01Db25maWdJdGVtOjpIb29rJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkSGVhZGVyID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJEhlYWRlcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYXNzYWJsZSBDU1YgZGF0YQogICAgICAgICAgICBteSAkQ1NWID0gJFNlbGYtPntDU1ZPYmplY3R9LT5BcnJheTJDU1YoCiAgICAgICAgICAgICAgICBIZWFkICAgICAgPT4gXEBDU1ZIZWFkLAogICAgICAgICAgICAgICAgRGF0YSAgICAgID0+IFxAQ1NWRGF0YSwKICAgICAgICAgICAgICAgIFNlcGFyYXRvciA9PiAkU2VsZi0+e1VzZXJDU1ZTZXBhcmF0b3J9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyByZXR1cm4gY3N2IHRvIGRvd25sb2FkCiAgICAgICAgICAgIG15ICRDU1ZGaWxlID0gJ2NvbmZpZ2l0ZW1fc2VhcmNoJzsKICAgICAgICAgICAgbXkgKCAkcywgJG0sICRoLCAkRCwgJE0sICRZICkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE0gPSBzcHJpbnRmKCAiJTAyZCIsICRNICk7CiAgICAgICAgICAgICREID0gc3ByaW50ZiggIiUwMmQiLCAkRCApOwogICAgICAgICAgICAkaCA9IHNwcmludGYoICIlMDJkIiwgJGggKTsKICAgICAgICAgICAgJG0gPSBzcHJpbnRmKCAiJTAyZCIsICRtICk7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAkQ1NWRmlsZSAuICJfIiAuICIkWS0kTS0kRCIgLiAiXyIgLiAiJGgtJG0uY3N2IiwKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICJ0ZXh0L2NzdjsgY2hhcnNldD0iIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57VXNlckNoYXJzZXR9LAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJENTViwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcHJpbnQgb3V0cHV0ICggUERGIG9yIEhUTUwgKHByaW50IG9ubHkpICkKICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXtSZXN1bHRGb3JtfSBlcSAnUHJpbnQnICkgewoKICAgICAgICAgICAgbXkgQFBERkRhdGE7CiAgICAgICAgICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6UERGOwogICAgICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6UERGLT5uZXcoICV7JFNlbGZ9ICk7CgogICAgICAgICAgICBDT05GSUdJVEVNSUQ6CiAgICAgICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICggQHskU2VhcmNoUmVzdWx0TGlzdH0gKSB7CgogICAgICAgICAgICAgICAgIyBjaGVjayBmb3IgYWNjZXNzIHJpZ2h0cwogICAgICAgICAgICAgICAgbXkgJEhhc0FjY2VzcyA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgICAgU2NvcGUgID0+ICdJdGVtJywKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIFR5cGUgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgISRIYXNBY2Nlc3M7CgogICAgICAgICAgICAgICAgIyBnZXQgdmVyc2lvbgogICAgICAgICAgICAgICAgbXkgJExhc3RWZXJzaW9uID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkdldCgKICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhR2V0ICAgPT4gMCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgcGRmIHJvd3MKICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntQREZPYmplY3R9ICkgewogICAgICAgICAgICAgICAgICAgIG15IEBQREZSb3c7CiAgICAgICAgICAgICAgICAgICAgZm9yIChxdyhDbGFzcyBJbmNpU3RhdGUgTmFtZSBOdW1iZXIgRGVwbFN0YXRlIFZlcnNpb25JRCBDcmVhdGVUaW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBQREZSb3csICRMYXN0VmVyc2lvbi0+eyRffTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAUERGRGF0YSwgXEBQREZSb3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBhZGQgdGFibGUgYmxvY2sKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsgJXskTGFzdFZlcnNpb259IH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBQREYgT3V0cHV0CiAgICAgICAgICAgIGlmICggJFNlbGYtPntQREZPYmplY3R9ICkgewogICAgICAgICAgICAgICAgbXkgJFRpdGxlID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0NvbmZpZ3VyYXRpb24gSXRlbScpIC4gJyAnCiAgICAgICAgICAgICAgICAgICAgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnU2VhcmNoJyk7CiAgICAgICAgICAgICAgICBteSAkUHJpbnRlZEJ5ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ3ByaW50ZWQgYnknKTsKICAgICAgICAgICAgICAgIG15ICRQYWdlICAgICAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnUGFnZScpOwogICAgICAgICAgICAgICAgbXkgJFRpbWUgICAgICA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KCBUZW1wbGF0ZSA9PiAnJEVudnsiVGltZSJ9JyApOwogICAgICAgICAgICAgICAgbXkgJFVybCAgICAgICA9ICcnOwogICAgICAgICAgICAgICAgaWYgKCAkRU5We1JFUVVFU1RfVVJJfSApIHsKICAgICAgICAgICAgICAgICAgICAkVXJsCiAgICAgICAgICAgICAgICAgICAgICAgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0h0dHBUeXBlJykgLiAnOi8vJwogICAgICAgICAgICAgICAgICAgICAgICAuICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGUUROJykKICAgICAgICAgICAgICAgICAgICAgICAgLiAkRU5We1JFUVVFU1RfVVJJfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGdldCBtYXhpbXVtIG51bWJlciBvZiBwYWdlcwogICAgICAgICAgICAgICAgbXkgJE1heFBhZ2VzID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1BERjo6TWF4UGFnZXMnKTsKICAgICAgICAgICAgICAgIGlmICggISRNYXhQYWdlcyB8fCAkTWF4UGFnZXMgPCAxIHx8ICRNYXhQYWdlcyA+IDEwMDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJE1heFBhZ2VzID0gMTAwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY3JlYXRlIHRoZSBoZWFkZXIKICAgICAgICAgICAgICAgIG15ICRDZWxsRGF0YTsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bMF0tPntDb250ZW50fQogICAgICAgICAgICAgICAgICAgID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0NsYXNzJyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzBdLT57Rm9udH0gPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzFdLT57Q29udGVudH0KICAgICAgICAgICAgICAgICAgICA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdJbmNpZGVudCBTdGF0ZScpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlsxXS0+e0ZvbnR9ID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlsyXS0+e0NvbnRlbnR9CiAgICAgICAgICAgICAgICAgICAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnTmFtZScpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlsyXS0+e0ZvbnR9ID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlszXS0+e0NvbnRlbnR9CiAgICAgICAgICAgICAgICAgICAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnTnVtYmVyJyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzNdLT57Rm9udH0gPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzRdLT57Q29udGVudH0KICAgICAgICAgICAgICAgICAgICA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdEZXBsb3ltZW50IFN0YXRlJyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzRdLT57Rm9udH0gPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzVdLT57Q29udGVudH0KICAgICAgICAgICAgICAgICAgICA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdWZXJzaW9uJyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzVdLT57Rm9udH0gPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzZdLT57Q29udGVudH0KICAgICAgICAgICAgICAgICAgICA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdDcmVhdGUgVGltZScpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPls2XS0+e0ZvbnR9ID0gJ1Byb3BvcnRpb25hbEJvbGQnOwoKICAgICAgICAgICAgICAgICMgY3JlYXRlIHRoZSBjb250ZW50IGFycmF5CiAgICAgICAgICAgICAgICBteSAkQ291bnRlclJvdyA9IDE7CiAgICAgICAgICAgICAgICBmb3IgbXkgJFJvdyAoQFBERkRhdGEpIHsKICAgICAgICAgICAgICAgICAgICBteSAkQ291bnRlckNvbHVtbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRDb250ZW50ICggQHskUm93fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bJENvdW50ZXJSb3ddLT5bJENvdW50ZXJDb2x1bW5dLT57Q29udGVudH0gPSAkQ29udGVudDsKICAgICAgICAgICAgICAgICAgICAgICAgJENvdW50ZXJDb2x1bW4rKzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJENvdW50ZXJSb3crKzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIG91dHB1dCAnTm8gUmVzdWx0JywgaWYgbm8gY29udGVudCB3YXMgZ2l2ZW4KICAgICAgICAgICAgICAgIGlmICggISRDZWxsRGF0YS0+WzBdLT5bMF0gKSB7CiAgICAgICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlswXS0+e0NvbnRlbnR9CiAgICAgICAgICAgICAgICAgICAgICAgID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ05vIFJlc3VsdCEnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHBhZ2UgcGFyYW1zCiAgICAgICAgICAgICAgICBteSAlUGFnZVBhcmFtOwogICAgICAgICAgICAgICAgJFBhZ2VQYXJhbXtQYWdlT3JpZW50YXRpb259ID0gJ2xhbmRzY2FwZSc7CiAgICAgICAgICAgICAgICAkUGFnZVBhcmFte01hcmdpblRvcH0gICAgICAgPSAzMDsKICAgICAgICAgICAgICAgICRQYWdlUGFyYW17TWFyZ2luUmlnaHR9ICAgICA9IDQwOwogICAgICAgICAgICAgICAgJFBhZ2VQYXJhbXtNYXJnaW5Cb3R0b219ICAgID0gNDA7CiAgICAgICAgICAgICAgICAkUGFnZVBhcmFte01hcmdpbkxlZnR9ICAgICAgPSA0MDsKICAgICAgICAgICAgICAgICRQYWdlUGFyYW17SGVhZGVyUmlnaHR9ICAgICA9ICRUaXRsZTsKICAgICAgICAgICAgICAgICRQYWdlUGFyYW17Rm9vdGVyTGVmdH0gICAgICA9ICRVcmw7CiAgICAgICAgICAgICAgICAkUGFnZVBhcmFte0hlYWRsaW5lTGVmdH0gICAgPSAkVGl0bGU7CiAgICAgICAgICAgICAgICAkUGFnZVBhcmFte0hlYWRsaW5lUmlnaHR9ICAgPSAkUHJpbnRlZEJ5IC4gJyAnCiAgICAgICAgICAgICAgICAgICAgLiAkU2VsZi0+e1VzZXJGaXJzdG5hbWV9IC4gJyAnCiAgICAgICAgICAgICAgICAgICAgLiAkU2VsZi0+e1VzZXJMYXN0bmFtZX0gLiAnICgnCiAgICAgICAgICAgICAgICAgICAgLiAkU2VsZi0+e1VzZXJFbWFpbH0gLiAnKSAnCiAgICAgICAgICAgICAgICAgICAgLiAkVGltZTsKCiAgICAgICAgICAgICAgICAjIHRhYmxlIHBhcmFtcwogICAgICAgICAgICAgICAgbXkgJVRhYmxlUGFyYW07CiAgICAgICAgICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX0gICAgICAgICAgICA9ICRDZWxsRGF0YTsKICAgICAgICAgICAgICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgICAgID0gJ0N1dCc7CiAgICAgICAgICAgICAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgICAgICA9IDY7CiAgICAgICAgICAgICAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgICAgICA9IDA7CiAgICAgICAgICAgICAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3JFdmVufSA9ICcjQUFBQUFBJzsKICAgICAgICAgICAgICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvck9kZH0gID0gJyNEREREREQnOwogICAgICAgICAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICAgICAgPSAxOwogICAgICAgICAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICAgICAgPSAzOwogICAgICAgICAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICAgICAgPSAzOwoKICAgICAgICAgICAgICAgICMgY3JlYXRlIG5ldyBwZGYgZG9jdW1lbnQKICAgICAgICAgICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+RG9jdW1lbnROZXcoCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdQcm9kdWN0JykgLiAnOiAnIC4gJFRpdGxlLAogICAgICAgICAgICAgICAgICAgIEVuY29kZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntVc2VyQ2hhcnNldH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc3RhcnQgdGFibGUgb3V0cHV0CiAgICAgICAgICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBhZ2VOZXcoICVQYWdlUGFyYW0sIEZvb3RlclJpZ2h0ID0+ICRQYWdlIC4gJyAxJywgKTsKICAgICAgICAgICAgICAgIGZvciAoIDIgLi4gJE1heFBhZ2VzICkgewoKICAgICAgICAgICAgICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAgICAgICAgICAgICAlVGFibGVQYXJhbSA9ICRTZWxmLT57UERGT2JqZWN0fS0+VGFibGUoICVUYWJsZVBhcmFtLCApOwoKICAgICAgICAgICAgICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIGFub3RoZXIgcGFnZQogICAgICAgICAgICAgICAgICAgIGlmICggJFRhYmxlUGFyYW17U3RhdGV9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntQREZPYmplY3R9LT5QYWdlTmV3KCAlUGFnZVBhcmFtLCBGb290ZXJSaWdodCA9PiAkUGFnZSAuICcgJyAuICRfLCApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHJldHVybiB0aGUgcGRmIGRvY3VtZW50CiAgICAgICAgICAgICAgICBteSAkRmlsZW5hbWUgPSAnY29uZmlnaXRlbV9zZWFyY2gnOwogICAgICAgICAgICAgICAgbXkgKCAkcywgJG0sICRoLCAkRCwgJE0sICRZICkKICAgICAgICAgICAgICAgICAgICA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICAgICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJE0gPSBzcHJpbnRmKCAiJTAyZCIsICRNICk7CiAgICAgICAgICAgICAgICAkRCA9IHNwcmludGYoICIlMDJkIiwgJEQgKTsKICAgICAgICAgICAgICAgICRoID0gc3ByaW50ZiggIiUwMmQiLCAkaCApOwogICAgICAgICAgICAgICAgJG0gPSBzcHJpbnRmKCAiJTAyZCIsICRtICk7CiAgICAgICAgICAgICAgICBteSAkUERGU3RyaW5nID0gJFNlbGYtPntQREZPYmplY3R9LT5Eb2N1bWVudE91dHB1dCgpOwogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXR0YWNobWVudCgKICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAkRmlsZW5hbWUgLiAiXyIgLiAiJFktJE0tJEQiIC4gIl8iIC4gIiRoLSRtLnBkZiIsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gImFwcGxpY2F0aW9uL3BkZiIsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFBERlN0cmluZywKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG91dHB1dCBwcmludGFibGUgaHRtbCByZXN1bHQgcGFnZQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPlByaW50SGVhZGVyKCBXaWR0aCA9PiA4MDAgKTsKICAgICAgICAgICAgICAgIGlmICggQHskU2VhcmNoUmVzdWx0TGlzdH0gPT0gJFNlbGYtPntTZWFyY2hMaW1pdH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFBhcmFte1dhcm5pbmd9ID0gJyRUZXh0eyJSZWFjaGVkIG1heC4gY291bnQgb2YgJXMgc2VhcmNoIGhpdHMhIiwgIicKICAgICAgICAgICAgICAgICAgICAgICAgLiAkU2VsZi0+e1NlYXJjaExpbWl0fSAuICcifSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaFJlc3VsdFByaW50JywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBhZGQgZm9vdGVyCiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UHJpbnRGb290ZXIoKTsKCiAgICAgICAgICAgICAgICAjIHJldHVybiBvdXRwdXQKICAgICAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG5vcm1hbCBIVE1MIG91dHB1dAogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBzdGFydCBodG1sIHBhZ2UKICAgICAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UHJpbnQoIE91dHB1dCA9PiBcJE91dHB1dCApOwogICAgICAgICAgICAkT3V0cHV0ID0gJyc7CgogICAgICAgICAgICAkU2VsZi0+e0ZpbHRlcn0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdGaWx0ZXInICkgfHwgJyc7CiAgICAgICAgICAgICRTZWxmLT57Vmlld30gICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1ZpZXcnICkgICB8fCAnJzsKCiAgICAgICAgICAgICMgc2hvdyBjb25maWcgaXRlbXMKICAgICAgICAgICAgbXkgJExpbmtQYWdlID0gJ0ZpbHRlcj0nCiAgICAgICAgICAgICAgICAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e0ZpbHRlcn0gKQogICAgICAgICAgICAgICAgLiAnO1ZpZXc9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAgICAgICAgIC4gJztTb3J0Qnk9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1NvcnRCeX0gKQogICAgICAgICAgICAgICAgLiAnO09yZGVyQnk9JwogICAgICAgICAgICAgICAgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntPcmRlckJ5fSApCiAgICAgICAgICAgICAgICAuICc7UHJvZmlsZT0nIC4gJFNlbGYtPntQcm9maWxlfSAuICc7VGFrZUxhc3RTZWFyY2g9MTtTdWJhY3Rpb249U2VhcmNoJwogICAgICAgICAgICAgICAgLiAnO0NsYXNzSUQ9JyAuICRDbGFzc0lECiAgICAgICAgICAgICAgICAuICc7JzsKICAgICAgICAgICAgbXkgJExpbmtTb3J0ID0gJ0ZpbHRlcj0nCiAgICAgICAgICAgICAgICAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e0ZpbHRlcn0gKQogICAgICAgICAgICAgICAgLiAnO1ZpZXc9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAgICAgICAgIC4gJztQcm9maWxlPScgLiAkU2VsZi0+e1Byb2ZpbGV9IC4gJztUYWtlTGFzdFNlYXJjaD0xO1N1YmFjdGlvbj1TZWFyY2gnCiAgICAgICAgICAgICAgICAuICc7Q2xhc3NJRD0nIC4gJENsYXNzSUQKICAgICAgICAgICAgICAgIC4gJzsnOwogICAgICAgICAgICBteSAkTGlua0ZpbHRlciA9ICdUYWtlTGFzdFNlYXJjaD0xO1N1YmFjdGlvbj1TZWFyY2g7UHJvZmlsZT0nCiAgICAgICAgICAgICAgICAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1Byb2ZpbGV9ICkKICAgICAgICAgICAgICAgIC4gJztDbGFzc0lEPScKICAgICAgICAgICAgICAgIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRDbGFzc0lEICkKICAgICAgICAgICAgICAgIC4gJzsnOwogICAgICAgICAgICBteSAkTGlua0JhY2sgPSAnU3ViYWN0aW9uPUxvYWRQcm9maWxlO1Byb2ZpbGU9JwogICAgICAgICAgICAgICAgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntQcm9maWxlfSApCiAgICAgICAgICAgICAgICAuICc7Q2xhc3NJRD0nCiAgICAgICAgICAgICAgICAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkQ2xhc3NJRCApCiAgICAgICAgICAgICAgICAuICc7VGFrZUxhc3RTZWFyY2g9MTsnOwoKICAgICAgICAgICAgIyBmaW5kIG91dCB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSBzaG93bgogICAgICAgICAgICBteSBAU2hvd0NvbHVtbnM7CiAgICAgICAgICAgIGlmICggJFNlbGYtPntDb25maWd9LT57U2hvd0NvbHVtbnN9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IGFsbCBwb3NzaWJsZSBjb2x1bW5zIGZyb20gY29uZmlnCiAgICAgICAgICAgICAgICBteSAlUG9zc2libGVDb2x1bW4gPSAleyAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gfTsKCiAgICAgICAgICAgICAgICAjIGdldCB0aGUgY29sdW1uIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHNob3duCiAgICAgICAgICAgICAgICBDT0xVTU5OQU1FOgogICAgICAgICAgICAgICAgZm9yIG15ICROYW1lICgga2V5cyAlUG9zc2libGVDb2x1bW4gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBDT0xVTU5OQU1FIGlmICEkUG9zc2libGVDb2x1bW57JE5hbWV9OwogICAgICAgICAgICAgICAgICAgIHB1c2ggQFNob3dDb2x1bW5zLCAkTmFtZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgdGhlIGNvbmZpZ3VyZWQgY29sdW1ucyBhbmQgcmVvcmdhbml6ZSB0aGVtIGJ5IGNsYXNzIG5hbWUKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgSXNBcnJheVJlZldpdGhEYXRhKCAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc0J5Q2xhc3N9ICkKICAgICAgICAgICAgICAgICYmICRDbGFzc0lECiAgICAgICAgICAgICkgewoKICAgICAgICAgICAgICAgIG15ICVDb2x1bW5CeUNsYXNzOwogICAgICAgICAgICAgICAgZm9yIG15ICROYW1lICggQHsgJFNlbGYtPntDb25maWd9LT57U2hvd0NvbHVtbnNCeUNsYXNzfSB9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIGV4dHJhY3QgdGhlIGNsYXNzIG5hbWUgYW5kIHRoZSBjb2x1bW4gbmFtZQogICAgICAgICAgICAgICAgICAgIGlmICggJE5hbWUgPX4gbXsgXEEgKFteOl0rKSA6OiAoLispIFx6IH14bXMgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBteSAoJENsYXNzLCAkQ29sdW1uKSAgPSAoJDEsICQyKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgY3JlYXRlIG5ldyBlbnRyeQogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRDb2x1bW5CeUNsYXNzeyRDbGFzc30gfSwgJENvbHVtbjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiB0aGVyZSBpcyBhIHNwZWNpZmljIGNvbHVtbiBjb25maWcgZm9yIHRoZSBzZWxlY3RlZCBjbGFzcwogICAgICAgICAgICAgICAgbXkgJFNlbGVjdGVkQ2xhc3MgPSAkQ2xhc3NMaXN0LT57ICRDbGFzc0lEIH07CiAgICAgICAgICAgICAgICBpZiAoICRDb2x1bW5CeUNsYXNzeyRTZWxlY3RlZENsYXNzfSApIHsKICAgICAgICAgICAgICAgICAgICBAU2hvd0NvbHVtbnMgPSBAeyAkQ29sdW1uQnlDbGFzc3skU2VsZWN0ZWRDbGFzc30gfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJENsYXNzTmFtZSA9ICRDbGFzc0xpc3QtPnskQ2xhc3NJRH07CiAgICAgICAgICAgIG15ICRUaXRsZQogICAgICAgICAgICAgICAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnQ29uZmlnIEl0ZW0gU2VhcmNoIFJlc3VsdHMnKQogICAgICAgICAgICAgICAgLiAnICcKICAgICAgICAgICAgICAgIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0NsYXNzJykKICAgICAgICAgICAgICAgIC4gJyAnCiAgICAgICAgICAgICAgICAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCRDbGFzc05hbWUpOwoKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPklUU01Db25maWdJdGVtTGlzdFNob3coCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSURzID0+ICRTZWFyY2hSZXN1bHRMaXN0LAogICAgICAgICAgICAgICAgVG90YWwgICAgICAgICA9PiBzY2FsYXIgQHskU2VhcmNoUmVzdWx0TGlzdH0sCiAgICAgICAgICAgICAgICBWaWV3ICAgICAgICAgID0+ICRTZWxmLT57Vmlld30sCiAgICAgICAgICAgICAgICBGaWx0ZXIgICAgICAgID0+ICRDbGFzc0lELAogICAgICAgICAgICAgICAgRW52ICAgICAgICAgICA9PiAkU2VsZiwKICAgICAgICAgICAgICAgIExpbmtQYWdlICAgICAgPT4gJExpbmtQYWdlLAogICAgICAgICAgICAgICAgTGlua1NvcnQgICAgICA9PiAkTGlua1NvcnQsCiAgICAgICAgICAgICAgICBMaW5rRmlsdGVyICAgID0+ICRMaW5rRmlsdGVyLAogICAgICAgICAgICAgICAgTGlua0JhY2sgICAgICA9PiAkTGlua0JhY2ssCiAgICAgICAgICAgICAgICBQcm9maWxlICAgICAgID0+ICRTZWxmLT57UHJvZmlsZX0sCiAgICAgICAgICAgICAgICBUaXRsZU5hbWUgICAgID0+ICRUaXRsZSwKICAgICAgICAgICAgICAgIFNob3dDb2x1bW5zICAgPT4gXEBTaG93Q29sdW1ucywKICAgICAgICAgICAgICAgIFNvcnRCeSAgICAgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57U29ydEJ5fSApLAogICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntPcmRlckJ5fSApLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICA9PiAkQ2xhc3NJRCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYnVpbGQgZm9vdGVyCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgIH0KICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNhbGwgc2VhcmNoIGRpYWxvZyBmcm9tIHNlYXJjaCBlbXB0eSBzY3JlZW4KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2UgewoKICAgICAgICAjIHNob3cgZGVmYXVsdCBzZWFyY2ggc2NyZWVuCiAgICAgICAgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU2VhcmNoJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBQcm9maWxlID0+ICRTZWxmLT57UHJvZmlsZX0sCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lELAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IHRlbXBsYXRlCiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudElUU01Db25maWdJdGVtU2VhcmNoJywKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQp9CgpzdWIgX1hNTFNlYXJjaEZvcm1PdXRwdXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlR2V0UGFyYW0gPSAleyAkUGFyYW17R2V0UGFyYW19IH07CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIHJldHVybiBpZiAhJFBhcmFte1hNTERlZmluaXRpb259OwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRGVmaW5pdGlvbn0gbmUgJ0FSUkFZJzsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTEF0dHJpYnV0ZXN9IG5lICdBUlJBWSc7CgogICAgJFBhcmFte0xldmVsfSB8fD0gMDsKICAgIElURU06CiAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17WE1MRGVmaW5pdGlvbn0gfSApIHsKCiAgICAgICAgIyBzZXQgcHJlZml4CiAgICAgICAgbXkgJElucHV0S2V5ID0gJEl0ZW0tPntLZXl9OwogICAgICAgIG15ICROYW1lICAgICA9ICRJdGVtLT57TmFtZX07CiAgICAgICAgaWYgKCAkUGFyYW17UHJlZml4fSApIHsKICAgICAgICAgICAgJElucHV0S2V5ID0gJFBhcmFte1ByZWZpeH0gLiAnOjonIC4gJElucHV0S2V5OwogICAgICAgICAgICAkTmFtZSAgICAgPSAkUGFyYW17UHJlZml4TmFtZX0gLiAnOjonIC4gJE5hbWU7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBhdHRyaWJ1dGUsIGlmIG1hcmtlZCBhcyBzZWFyY2hhYmxlCiAgICAgICAgaWYgKCAkSXRlbS0+e1NlYXJjaGFibGV9ICkgewogICAgICAgICAgICBteSAkVmFsdWU7CgogICAgICAgICAgICAjIGRhdGUgdHlwZSBmaWVsZHMgbXVzdCB0byBnZXQgYWxsIGRhdGUgcGFyYW1ldGVycwogICAgICAgICAgICBpZiAoICRJdGVtLT57SW5wdXR9LT57VHlwZX0gZXEgJ0RhdGUnICkgewogICAgICAgICAgICAgICAgJFZhbHVlID0KICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5ICAgICAgICAgICAgICAgICAgICAgID0+ICRHZXRQYXJhbXskSW5wdXRLZXl9LAogICAgICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdGFydDo6RGF5JyA9PiAkR2V0UGFyYW17ICRJbnB1dEtleSAuICc6OlRpbWVTdGFydDo6RGF5JyB9LAogICAgICAgICAgICAgICAgICAgICRJbnB1dEtleQogICAgICAgICAgICAgICAgICAgICAgICAuICc6OlRpbWVTdGFydDo6TW9udGgnID0+ICRHZXRQYXJhbXsgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpNb250aCcgfSwKICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6OlllYXInID0+ICRHZXRQYXJhbXsgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpZZWFyJyB9LAogICAgICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpEYXknICAgPT4gJEdldFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6RGF5JyB9LAogICAgICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpNb250aCcgPT4gJEdldFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6TW9udGgnIH0sCiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6OlllYXInICA9PiAkR2V0UGFyYW17ICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpZZWFyJyB9LAogICAgICAgICAgICAgICAgICAgIH0gfHwgJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZGF0ZS10aW1lIHR5cGUgZmllbGRzIG11c3QgZ2V0IGFsbCBkYXRlIGFuZCB0aW1lIHBhcmFtZXRlcnMKICAgICAgICAgICAgZWxzaWYgKCAkSXRlbS0+e0lucHV0fS0+e1R5cGV9IGVxICdEYXRlVGltZScgKSB7CiAgICAgICAgICAgICAgICAkVmFsdWUgPQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgPT4gJEdldFBhcmFteyRJbnB1dEtleX0sCiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJzo6VGltZVN0YXJ0OjpNaW51dGUnID0+ICRHZXRQYXJhbXsgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpNaW51dGUnIH0sCiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpIb3VyJyA9PiAkR2V0UGFyYW17ICRJbnB1dEtleSAuICc6OlRpbWVTdGFydDo6SG91cicgfSwKICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6OkRheScgID0+ICRHZXRQYXJhbXsgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpEYXknIH0sCiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJzo6VGltZVN0YXJ0OjpNb250aCcgPT4gJEdldFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6Ok1vbnRoJyB9LAogICAgICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdGFydDo6WWVhcicgPT4gJEdldFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6OlllYXInIH0sCiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJzo6VGltZVN0b3A6Ok1pbnV0ZScgPT4gJEdldFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6TWludXRlJyB9LAogICAgICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpIb3VyJyAgPT4gJEdldFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6SG91cicgfSwKICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6RGF5JyAgID0+ICRHZXRQYXJhbXsgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6OkRheScgfSwKICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6TW9udGgnID0+ICRHZXRQYXJhbXsgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6Ok1vbnRoJyB9LAogICAgICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpZZWFyJyAgPT4gJEdldFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6WWVhcicgfSwKICAgICAgICAgICAgICAgICAgICB9IHx8ICcnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG90aGVyIGtpbmRzIG9mIGZpZWxkcyBjYW4gZ2V0IGl0cyB2YWx1ZSBkaXJlY3RseQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRWYWx1ZSA9ICRHZXRQYXJhbXskSW5wdXRLZXl9IHx8ICcnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNyZWF0ZSBzZWFyY2ggaW5wdXQgZWxlbWVudAogICAgICAgICAgICBteSAkSW5wdXRTdHJpbmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPklUU01Db25maWdJdGVtU2VhcmNoSW5wdXRDcmVhdGUoCiAgICAgICAgICAgICAgICBLZXkgICA9PiAkSW5wdXRLZXksCiAgICAgICAgICAgICAgICBJdGVtICA9PiAkSXRlbSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0IGF0dHJpYnV0ZSByb3cKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0F0dHJpYnV0ZVJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgICA9PiAkSW5wdXRLZXksCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJE5hbWUsCiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJEl0ZW0tPntEZXNjcmlwdGlvbn0gfHwgJEl0ZW0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBJbnB1dFN0cmluZyA9PiAkSW5wdXRTdHJpbmcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcHVzaCBAeyAkUGFyYW17WE1MQXR0cmlidXRlc30gfSwgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJElucHV0S2V5LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJE5hbWUsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBuZXh0IElURU0gaWYgISRJdGVtLT57U3VifTsKCiAgICAgICAgIyBzdGFydCByZWN1cnNpb24sIGlmICJTdWIiIHdhcyBmb3VuZAogICAgICAgICRTZWxmLT5fWE1MU2VhcmNoRm9ybU91dHB1dCgKICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgIFhNTEF0dHJpYnV0ZXMgPT4gJFBhcmFte1hNTEF0dHJpYnV0ZXN9LAogICAgICAgICAgICBMZXZlbCAgICAgICAgID0+ICRQYXJhbXtMZXZlbH0gKyAxLAogICAgICAgICAgICBQcmVmaXggICAgICAgID0+ICRJbnB1dEtleSwKICAgICAgICAgICAgUHJlZml4TmFtZSAgICA9PiAkTmFtZSwKICAgICAgICAgICAgR2V0UGFyYW0gICAgICA9PiBcJUdldFBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfWE1MU2VhcmNoRm9ybUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxEZWZpbml0aW9ufTsKICAgIHJldHVybiBpZiAhJFBhcmFte1hNTEZvcm1EYXRhfTsKICAgIHJldHVybiBpZiAhJFBhcmFte1hNTEdldFBhcmFtfTsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERlZmluaXRpb259IG5lICdBUlJBWSc7CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxGb3JtRGF0YX0gbmUgJ0FSUkFZJzsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTEdldFBhcmFtfSBuZSAnQVJSQVknOwoKICAgICRQYXJhbXtMZXZlbH0gfHw9IDA7CgogICAgSVRFTToKICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtYTUxEZWZpbml0aW9ufSB9ICkgewoKICAgICAgICAjIGNyZWF0ZSBpbnB1dGtleQogICAgICAgIG15ICRJbnB1dEtleSA9ICRJdGVtLT57S2V5fTsKICAgICAgICBpZiAoICRQYXJhbXtQcmVmaXh9ICkgewogICAgICAgICAgICAkSW5wdXRLZXkgPSAkUGFyYW17UHJlZml4fSAuICc6OicgLiAkSW5wdXRLZXk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzZWFyY2ggZm9ybSBkYXRhCiAgICAgICAgbXkgJFZhbHVlcyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SVRTTUNvbmZpZ0l0ZW1TZWFyY2hGb3JtRGF0YUdldCgKICAgICAgICAgICAgS2V5ICAgPT4gJElucHV0S2V5LAogICAgICAgICAgICBJdGVtICA9PiAkSXRlbSwKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFteyRJbnB1dEtleX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgc2VhcmNoIGtleQogICAgICAgIG15ICRTZWFyY2hLZXkgPSAkSW5wdXRLZXk7CiAgICAgICAgJFNlYXJjaEtleSA9fiBzeyA6OiB9e1wnXH1bJV1ce1wnfXhtc2c7CiAgICAgICAgJFNlYXJjaEtleSA9ICJbMV17J1ZlcnNpb24nfVsxXXsnJFNlYXJjaEtleSd9WyVdeydDb250ZW50J30iOwoKICAgICAgICAjIElUU01Db25maWdJdGVtU2VhcmNoRm9ybURhdGFHZXQoKSBjYW4gcmV0dXJuIHN0cmluZywgYXJyYXlyZWYgb3IgaGFzaHJlZgogICAgICAgIGlmICggcmVmICRWYWx1ZXMgZXEgJ0FSUkFZJyApIHsKCiAgICAgICAgICAgICMgZmlsdGVyIGVtcHR5IGVsZW1lbnRzCiAgICAgICAgICAgIG15IEBTZWFyY2hWYWx1ZXMgPSBncmVwIHskX30gQHskVmFsdWVzfTsKCiAgICAgICAgICAgIGlmIChAU2VhcmNoVmFsdWVzKSB7CiAgICAgICAgICAgICAgICBwdXNoIEB7ICRQYXJhbXtYTUxGb3JtRGF0YX0gfSwgewogICAgICAgICAgICAgICAgICAgICRTZWFyY2hLZXkgPT4gXEBTZWFyY2hWYWx1ZXMsCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte1hNTEdldFBhcmFtfSB9LCB7CiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5ID0+IFxAU2VhcmNoVmFsdWVzLAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCRWYWx1ZXMpIHsKCiAgICAgICAgICAgICMgZS5nLiBmb3IgRGF0ZSBiZXR3ZWVuIHNlYXJjaGVzCiAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte1hNTEZvcm1EYXRhfSB9LCB7CiAgICAgICAgICAgICAgICAkU2VhcmNoS2V5ID0+ICRWYWx1ZXMsCiAgICAgICAgICAgIH07CgogICAgICAgICAgICBpZiAoIHJlZiAkVmFsdWVzIGVxICdIQVNIJyApIHsKICAgICAgICAgICAgICAgIGlmICggJEl0ZW0tPntJbnB1dH0tPntUeXBlfSBlcSAnRGF0ZScgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkVmFsdWVzLT57Jy1iZXR3ZWVuJ30gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGdldCB0aW1lIGVsZW1ldCB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgbXkgKCAkU3RhcnREYXRlLCAkU3RvcERhdGUgKSA9IEB7ICRWYWx1ZXMtPnsnLWJldHdlZW4nfSB9OwogICAgICAgICAgICAgICAgICAgICAgICBteSAoICRTdGFydFllYXIsICRTdGFydE1vbnRoLCAkU3RhcnREYXkgKSA9IHNwbGl0KCAvLS8sICRTdGFydERhdGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgKCAkU3RvcFllYXIsICAkU3RvcE1vbnRoLCAgJFN0b3BEYXkgKSAgPSBzcGxpdCggLy0vLCAkU3RvcERhdGUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc3RvcmUgdGltZSBlbG1lbnQgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte1hNTEdldFBhcmFtfSB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpEYXknICAgPT4gJFN0YXJ0RGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpNb250aCcgPT4gJFN0YXJ0TW9udGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6OlllYXInICA9PiAkU3RhcnRZZWFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6OkRheScgICAgPT4gJFN0b3BEYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6TW9udGgnICA9PiAkU3RvcE1vbnRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6OlllYXInICAgPT4gJFN0b3BZZWFyLAogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJEl0ZW0tPntJbnB1dH0tPntUeXBlfSBlcSAnRGF0ZVRpbWUnICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJFZhbHVlcy0+eyctYmV0d2Vlbid9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXQgdGltZSBlbGVtZXQgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICggJFN0YXJ0RGF0ZVRpbWUsICRTdG9wRGF0ZVRpbWUgKSA9IEB7ICRWYWx1ZXMtPnsnLWJldHdlZW4nfSB9OwogICAgICAgICAgICAgICAgICAgICAgICBteSAoICRTdGFydERhdGUsICRTdGFydFRpbWUgKSA9IHNwbGl0KCAvXHMvLCAkU3RhcnREYXRlVGltZSApOwogICAgICAgICAgICAgICAgICAgICAgICBteSAoICRTdGFydFllYXIsICRTdGFydE1vbnRoLCAgJFN0YXJ0RGF5ICkgICAgPSBzcGxpdCggLy0vLCAgJFN0YXJ0RGF0ZSApOwogICAgICAgICAgICAgICAgICAgICAgICBteSAoICRTdGFydEhvdXIsICRTdGFydE1pbnV0ZSwgJFN0YXJ0U2Vjb25kICkgPSBzcGxpdCggL1w6LywgJFN0YXJ0VGltZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgKCAkU3RvcERhdGUsICRTdG9wVGltZSApID0gc3BsaXQoIC9ccy8sICRTdG9wRGF0ZVRpbWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgKCAkU3RvcFllYXIsICRTdG9wTW9udGgsICAkU3RvcERheSApICAgID0gc3BsaXQoIC8tLywgICRTdG9wRGF0ZSApOwogICAgICAgICAgICAgICAgICAgICAgICBteSAoICRTdG9wSG91ciwgJFN0b3BNaW51dGUsICRTdG9wU2Vjb25kICkgPSBzcGxpdCggL1w6LywgJFN0b3BUaW1lICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHN0b3JlIHRpbWUgZWxtZW50IHZhbHVlcwogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRQYXJhbXtYTUxHZXRQYXJhbX0gfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5ICAgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6Ok1pbnV0ZScgPT4gJFN0YXJ0TWludXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpIb3VyJyAgID0+ICRTdGFydEhvdXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6OkRheScgICAgPT4gJFN0YXJ0RGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpNb250aCcgID0+ICRTdGFydE1vbnRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpZZWFyJyAgID0+ICRTdGFydFllYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6TWludXRlJyAgPT4gJFN0b3BNaW51dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6SG91cicgICAgPT4gJFN0b3BIb3VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6OkRheScgICAgID0+ICRTdG9wRGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6Ok1vbnRoJyAgID0+ICRTdG9wTW9udGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6WWVhcicgICAgPT4gJFN0b3BZZWFyLAogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte1hNTEdldFBhcmFtfSB9LCB7CiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5ID0+ICRWYWx1ZXMsCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgbmV4dCBJVEVNIGlmICEkSXRlbS0+e1N1Yn07CgogICAgICAgICMgc3RhcnQgcmVjdXJzaW9uLCBpZiAiU3ViIiB3YXMgZm91bmQKICAgICAgICAkU2VsZi0+X1hNTFNlYXJjaEZvcm1HZXQoCiAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICBYTUxGb3JtRGF0YSAgID0+ICRQYXJhbXtYTUxGb3JtRGF0YX0sCiAgICAgICAgICAgIFhNTEdldFBhcmFtICAgPT4gJFBhcmFte1hNTEdldFBhcmFtfSwKICAgICAgICAgICAgTGV2ZWwgICAgICAgICA9PiAkUGFyYW17TGV2ZWx9ICsgMSwKICAgICAgICAgICAgUHJlZml4ICAgICAgICA9PiAkSW5wdXRLZXksCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9YTUxTZWFyY2hBdHRyaWJ1dGVzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIHJldHVybiBpZiAhJFBhcmFte1hNTERlZmluaXRpb259OwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRGVmaW5pdGlvbn0gbmUgJ0FSUkFZJzsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTEF0dHJpYnV0ZXN9IG5lICdBUlJBWSc7CgogICAgJFBhcmFte0xldmVsfSB8fD0gMDsKICAgIElURU06CiAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17WE1MRGVmaW5pdGlvbn0gfSApIHsKCiAgICAgICAgIyBzZXQgcHJlZml4CiAgICAgICAgbXkgJElucHV0S2V5ID0gJEl0ZW0tPntLZXl9OwogICAgICAgIG15ICROYW1lICAgICA9ICRJdGVtLT57TmFtZX07CiAgICAgICAgaWYgKCAkUGFyYW17UHJlZml4fSApIHsKICAgICAgICAgICAgJElucHV0S2V5ID0gJFBhcmFte1ByZWZpeH0gLiAnOjonIC4gJElucHV0S2V5OwogICAgICAgICAgICAkTmFtZSAgICAgPSAkUGFyYW17UHJlZml4TmFtZX0gLiAnOjonIC4gJE5hbWU7CiAgICAgICAgfQoKICAgICAgICAjIHN0b3JlIGF0dHJpYnV0ZSwgaWYgbWFya2VkIGFzIHNlYXJjaGFibGUKICAgICAgICBpZiAoICRJdGVtLT57U2VhcmNoYWJsZX0gKSB7CiAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte1hNTEF0dHJpYnV0ZXN9IH0sIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICRJbnB1dEtleSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICROYW1lLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgbmV4dCBJVEVNIGlmICEkSXRlbS0+e1N1Yn07CgogICAgICAgICMgc3RhcnQgcmVjdXJzaW9uLCBpZiAiU3ViIiB3YXMgZm91bmQKICAgICAgICAkU2VsZi0+X1hNTFNlYXJjaEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICBYTUxBdHRyaWJ1dGVzID0+ICRQYXJhbXtYTUxBdHRyaWJ1dGVzfSwKICAgICAgICAgICAgTGV2ZWwgICAgICAgICA9PiAkUGFyYW17TGV2ZWx9ICsgMSwKICAgICAgICAgICAgUHJlZml4ICAgICAgICA9PiAkSW5wdXRLZXksCiAgICAgICAgICAgIFByZWZpeE5hbWUgICAgPT4gJE5hbWUsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKMTsK
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tLnBtIC0gdGhlIE9UUlMgSVRTTSBjb25maWcgaXRlbSB6b29tIG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Db25maWdJdGVtWm9vbTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c7CnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW07CnVzZSBLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdDsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgQ29uZmlnT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KICAgICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0gICAgID0gS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57TGlua09iamVjdH0gICAgICAgICAgID0gS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QtPm5ldyglUGFyYW0pOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJENvbmZpZ0l0ZW1JRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbmZpZ0l0ZW1JRCcgKSB8fCAwOwogICAgbXkgJFZlcnNpb25JRCAgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1ZlcnNpb25JRCcgKSAgICB8fCAwOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkQ29uZmlnSXRlbUlEICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICJObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hIiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBhY2Nlc3MgcmlnaHRzCiAgICBteSAkSGFzQWNjZXNzID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+UGVybWlzc2lvbigKICAgICAgICBTY29wZSAgPT4gJ0l0ZW0nLAogICAgICAgIEl0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgVHlwZSAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgKTsKCiAgICBpZiAoICEkSGFzQWNjZXNzICkgewoKICAgICAgICAjIGVycm9yIHBhZ2UKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJywKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBzaG93IHZlcnNpb25zCiAgICAkUGFyYW17U2hvd1ZlcnNpb25zfSA9IDA7CiAgICBpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Nob3dWZXJzaW9ucycgKSApIHsKICAgICAgICAkUGFyYW17U2hvd1ZlcnNpb25zfSA9IDE7CiAgICB9CgogICAgIyBnZXQgY29udGVudAogICAgbXkgJENvbmZpZ0l0ZW0gPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgKTsKICAgIGlmICggISRDb25maWdJdGVtLT57Q29uZmlnSXRlbUlEfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ29uZmlnSXRlbUlEICRDb25maWdJdGVtSUQgbm90IGZvdW5kIGluIGRhdGFiYXNlISIsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbi4nLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdmVyc2lvbiBsaXN0CiAgICBteSAkVmVyc2lvbkxpc3QgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5WZXJzaW9uWm9vbUxpc3QoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICApOwogICAgaWYgKCAhJFZlcnNpb25MaXN0LT5bMF0tPntWZXJzaW9uSUR9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICJObyBWZXJzaW9uIGZvdW5kIGZvciBDb25maWdJdGVtSUQgJENvbmZpZ0l0ZW1JRCEiLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgc2V0IHZlcnNpb24gaWQKICAgIGlmICggISRWZXJzaW9uSUQgKSB7CiAgICAgICAgJFZlcnNpb25JRCA9ICRWZXJzaW9uTGlzdC0+Wy0xXS0+e1ZlcnNpb25JRH07CiAgICB9CiAgICBpZiAoICRWZXJzaW9uSUQgbmUgJFZlcnNpb25MaXN0LT5bLTFdLT57VmVyc2lvbklEfSApIHsKICAgICAgICAkUGFyYW17U2hvd1ZlcnNpb25zfSA9IDE7CiAgICB9CgogICAgIyBzZXQgdmVyc2lvbiBpZCBpbiBwYXJhbSBoYXNoIChvbmx5IGZvciBtZW51IG1vZHVsZSkKICAgIGlmICgkVmVyc2lvbklEKSB7CiAgICAgICAgJFBhcmFte1ZlcnNpb25JRH0gPSAkVmVyc2lvbklEOwogICAgfQoKICAgICMgcnVuIGNvbmZpZyBpdGVtIG1lbnUgbW9kdWxlcwogICAgaWYgKCByZWYgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0lUU01Db25maWdJdGVtOjpGcm9udGVuZDo6TWVudU1vZHVsZScpIGVxICdIQVNIJyApIHsKICAgICAgICBteSAlTWVudXMgICA9ICV7ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKSB9OwogICAgICAgIG15ICRDb3VudGVyID0gMDsKICAgICAgICBmb3IgbXkgJE1lbnUgKCBzb3J0IGtleXMgJU1lbnVzICkgewoKICAgICAgICAgICAgIyBsb2FkIG1vZHVsZQogICAgICAgICAgICBpZiAoICRTZWxmLT57TWFpbk9iamVjdH0tPlJlcXVpcmUoICRNZW51c3skTWVudX0tPntNb2R1bGV9ICkgKSB7CiAgICAgICAgICAgICAgICBteSAkT2JqZWN0ID0gJE1lbnVzeyRNZW51fS0+e01vZHVsZX0tPm5ldygKICAgICAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFNlbGYtPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNldCBjbGFzc2VzCiAgICAgICAgICAgICAgICBpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9ICkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9IGVxICdQb3BVcCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRNZW51c3skTWVudX0tPntNZW51Q2xhc3N9ID0gJ0FzUG9wdXAnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9IGVxICdCYWNrJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51fS0+e01lbnVDbGFzc30gPSAnSGlzdG9yeUJhY2snOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBydW4gbW9kdWxlCiAgICAgICAgICAgICAgICAkQ291bnRlciA9ICRPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAkQ29uZmlnSXRlbSwKICAgICAgICAgICAgICAgICAgICBDb3VudGVyICAgID0+ICRDb3VudGVyLAogICAgICAgICAgICAgICAgICAgIENvbmZpZyAgICAgPT4gJE1lbnVzeyRNZW51fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBidWlsZCB2ZXJzaW9uIHRyZWUKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1RyZWUnICk7CiAgICBteSAkQ291bnRlciA9IDE7CiAgICBpZiAoICEkUGFyYW17U2hvd1ZlcnNpb25zfSAmJiAkVmVyc2lvbklEIGVxICRWZXJzaW9uTGlzdC0+Wy0xXS0+e1ZlcnNpb25JRH0gKSB7CiAgICAgICAgJENvdW50ZXIgICAgID0gQHskVmVyc2lvbkxpc3R9OwogICAgICAgICRWZXJzaW9uTGlzdCA9IFsgJFZlcnNpb25MaXN0LT5bLTFdIF07CiAgICB9CgogICAgIyBnZXQgbGFzdCB2ZXJzaW9uCiAgICBteSAkTGFzdFZlcnNpb24gPSAkVmVyc2lvbkxpc3QtPlstMV07CgogICAgIyBzZXQgaW5jaWRlbnQgc2lnbmFsCiAgICBteSAlSW5jaVNpZ25hbHMgPSAoCiAgICAgICAgb3BlcmF0aW9uYWwgPT4gJ2dyZWVubGVkJywKICAgICAgICB3YXJuaW5nICAgICA9PiAneWVsbG93bGVkJywKICAgICAgICBpbmNpZGVudCAgICA9PiAncmVkbGVkJywKICAgICk7CgogICAgIyBvdXRwdXQgdmVyc2lvbiB0cmVlIGhlYWRlcgogICAgaWYgKCAkUGFyYW17U2hvd1ZlcnNpb25zfSApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdDb2xsYXBzZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0V4cGFuZCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG91dHB1dCB2ZXJzaW9uIHRyZWUKICAgIGZvciBteSAkVmVyc2lvbkhhc2ggKCBAeyRWZXJzaW9uTGlzdH0gKSB7CgogICAgICAgIG15ICVVc2VySW5mbyA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgPT4gJFZlcnNpb25IYXNoLT57Q3JlYXRlQnl9LAogICAgICAgICAgICBDYWNoZWQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdUcmVlSXRlbScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJVVzZXJJbmZvLAogICAgICAgICAgICAgICAgJXskQ29uZmlnSXRlbX0sCiAgICAgICAgICAgICAgICAleyRWZXJzaW9uSGFzaH0sCiAgICAgICAgICAgICAgICBDb3VudCAgICAgID0+ICRDb3VudGVyLAogICAgICAgICAgICAgICAgSW5jaVNpZ25hbCA9PiAkSW5jaVNpZ25hbHN7ICRWZXJzaW9uSGFzaC0+e0luY2lTdGF0ZVR5cGV9IH0sCiAgICAgICAgICAgICAgICBBY3RpdmUgICAgID0+ICRWZXJzaW9uSGFzaC0+e1ZlcnNpb25JRH0gZXEgJFZlcnNpb25JRCA/ICdBY3RpdmUnIDogJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJENvdW50ZXIrKzsKICAgIH0KCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVmFsdWUgPT4gJENvbmZpZ0l0ZW0tPntOdW1iZXJ9ICk7CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICMgZ2V0IHZlcnNpb24KICAgIG15ICRWZXJzaW9uID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkdldCgKICAgICAgICBWZXJzaW9uSUQgPT4gJFZlcnNpb25JRCwKICAgICk7CgogICAgaWYgKAogICAgICAgICRWZXJzaW9uCiAgICAgICAgJiYgcmVmICRWZXJzaW9uIGVxICdIQVNIJwogICAgICAgICYmICRWZXJzaW9uLT57WE1MRGVmaW5pdGlvbn0KICAgICAgICAmJiAkVmVyc2lvbi0+e1hNTERhdGF9CiAgICAgICAgJiYgcmVmICRWZXJzaW9uLT57WE1MRGVmaW5pdGlvbn0gZXEgJ0FSUkFZJwogICAgICAgICYmIHJlZiAkVmVyc2lvbi0+e1hNTERhdGF9ICAgICAgIGVxICdBUlJBWScKICAgICAgICAmJiAkVmVyc2lvbi0+e1hNTERhdGF9LT5bMV0KICAgICAgICAmJiByZWYgJFZlcnNpb24tPntYTUxEYXRhfS0+WzFdIGVxICdIQVNIJwogICAgICAgICYmICRWZXJzaW9uLT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259CiAgICAgICAgJiYgcmVmICRWZXJzaW9uLT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259IGVxICdBUlJBWScKICAgICAgICApCiAgICB7CgogICAgICAgICMgdHJhbnNmb3JtIGFzY2lpIHRvIGh0bWwKICAgICAgICAkVmVyc2lvbi0+e05hbWV9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkVmVyc2lvbi0+e05hbWV9LAogICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICAgICBMaW5rRmVhdHVyZSAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IG5hbWUKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdEYXRhJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGhlIG5hbWUgb2YgdGhpcyBjb25maWcgaXRlbScsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICA9PiAkVmVyc2lvbi0+e05hbWV9LAogICAgICAgICAgICAgICAgSWRlbnRhdGlvbiAgPT4gMTAsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgZGVwbG95bWVudCBzdGF0ZQogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0RhdGEnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdEZXBsb3ltZW50IFN0YXRlJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJywKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KAogICAgICAgICAgICAgICAgICAgICRWZXJzaW9uLT57RGVwbFN0YXRlfSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBJZGVudGF0aW9uID0+IDEwLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IGluY2lkZW50IHN0YXRlCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRGF0YScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ0luY2lkZW50IFN0YXRlJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbScsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgKICAgICAgICAgICAgICAgICAgICAkVmVyc2lvbi0+e0luY2lTdGF0ZX0sCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgSWRlbnRhdGlvbiA9PiAxMCwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIHN0YXJ0IHhtbCBvdXRwdXQKICAgICAgICAkU2VsZi0+X1hNTE91dHB1dCgKICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkVmVyc2lvbi0+e1hNTERlZmluaXRpb259LAogICAgICAgICAgICBYTUxEYXRhICAgICAgID0+ICRWZXJzaW9uLT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259LT5bMV0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjcmVhdGUgdXNlciBkYXRhCiAgICBteSAlQ3JlYXRlVXNlciA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgIFVzZXJJRCA9PiAkQ29uZmlnSXRlbS0+e0NyZWF0ZUJ5fSwKICAgICAgICBDYWNoZWQgPT4gMSwKICAgICk7CiAgICBmb3IgbXkgJFBvc3RmaXggKHF3KFVzZXJMb2dpbiBVc2VyRmlyc3RuYW1lIFVzZXJMYXN0bmFtZSkpIHsKICAgICAgICAkQ29uZmlnSXRlbS0+eyAnQ3JlYXRlJyAuICRQb3N0Zml4IH0gPSAkQ3JlYXRlVXNlcnskUG9zdGZpeH07CiAgICB9CgogICAgIyBnZXQgY2hhbmdlIHVzZXIgZGF0YQogICAgbXkgJUNoYW5nZVVzZXIgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5HZXRVc2VyRGF0YSgKICAgICAgICBVc2VySUQgPT4gJENvbmZpZ0l0ZW0tPntDaGFuZ2VCeX0sCiAgICAgICAgQ2FjaGVkID0+IDEsCiAgICApOwogICAgZm9yIG15ICRQb3N0Zml4IChxdyhVc2VyTG9naW4gVXNlckZpcnN0bmFtZSBVc2VyTGFzdG5hbWUpKSB7CiAgICAgICAgJENvbmZpZ0l0ZW0tPnsgJ0NoYW5nZScgLiAkUG9zdGZpeCB9ID0gJENoYW5nZVVzZXJ7JFBvc3RmaXh9OwogICAgfQoKICAgICMgb3V0cHV0IG1ldGEgYmxvY2sKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnTWV0YScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICV7JExhc3RWZXJzaW9ufSwKICAgICAgICAgICAgJXskQ29uZmlnSXRlbX0sCiAgICAgICAgICAgIEN1ckluY2lTaWduYWwgPT4gJEluY2lTaWduYWxzeyAkTGFzdFZlcnNpb24tPntDdXJJbmNpU3RhdGVUeXBlfSB9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgZ2V0IGxpbmtlZCBvYmplY3RzCiAgICBteSAkTGlua0xpc3RXaXRoRGF0YSA9ICRTZWxmLT57TGlua09iamVjdH0tPkxpbmtMaXN0V2l0aERhdGEoCiAgICAgICAgT2JqZWN0ID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgS2V5ICAgID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgU3RhdGUgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgbGluayB0YWJsZSB2aWV3IG1vZGUKICAgIG15ICRMaW5rVGFibGVWaWV3TW9kZSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdMaW5rT2JqZWN0OjpWaWV3TW9kZScpOwoKICAgICMgY3JlYXRlIHRoZSBsaW5rIHRhYmxlCiAgICBteSAkTGlua1RhYmxlU3RyZyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua09iamVjdFRhYmxlQ3JlYXRlKAogICAgICAgIExpbmtMaXN0V2l0aERhdGEgPT4gJExpbmtMaXN0V2l0aERhdGEsCiAgICAgICAgVmlld01vZGUgICAgICAgICA9PiAkTGlua1RhYmxlVmlld01vZGUsCiAgICApOwoKICAgICMgb3V0cHV0IHRoZSBsaW5rIHRhYmxlCiAgICBpZiAoJExpbmtUYWJsZVN0cmcpIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMaW5rVGFibGUnIC4gJExpbmtUYWJsZVZpZXdNb2RlLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIExpbmtUYWJsZVN0cmcgPT4gJExpbmtUYWJsZVN0cmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBteSBAQXR0YWNobWVudHMgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtQXR0YWNobWVudExpc3QoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICApOwoKICAgIGlmIChAQXR0YWNobWVudHMpIHsKCiAgICAgICAgIyBnZXQgdGhlIG1ldGFkYXRhIG9mIHRoZSAxc3QgYXR0YWNobWVudAogICAgICAgIG15ICRGaXJzdEF0dGFjaG1lbnQgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtQXR0YWNobWVudEdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIEZpbGVuYW1lICAgICA9PiAkQXR0YWNobWVudHNbMF0sCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQXR0YWNobWVudHMnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgID0+ICRGaXJzdEF0dGFjaG1lbnQtPntGaWxlbmFtZX0sCiAgICAgICAgICAgICAgICBGaWxlc2l6ZSAgICAgPT4gJEZpcnN0QXR0YWNobWVudC0+e0ZpbGVzaXplfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIHRoZSAxc3QgYXR0YWNobWVudCB3YXMgZGlyZWN0bHkgcmVuZGVyZWQgaW50byB0aGUgMXN0IHJvdydzIHJpZ2h0IGNlbGwsIGFsbCBmdXJ0aGVyCiAgICAgICAgIyBhdHRhY2htZW50cyBhcmUgcmVuZGVyZWQgaW50byBhIHNlcGFyYXRlIHJvdwogICAgICAgIEFUVEFDSE1FTlQ6CiAgICAgICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICMgc2tpcCB0aGUgMXN0IGF0dGFjaG1lbnQKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICRBdHRhY2htZW50IGVxICRBdHRhY2htZW50c1swXTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBtZXRhZGF0YSBvZiB0aGUgY3VycmVudCBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICRBdHRhY2htZW50RGF0YSA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1BdHRhY2htZW50R2V0KAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICAgPT4gJEF0dGFjaG1lbnQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQXR0YWNobWVudFJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICAgPT4gJEF0dGFjaG1lbnREYXRhLT57RmlsZW5hbWV9LAogICAgICAgICAgICAgICAgICAgIEZpbGVzaXplICAgICA9PiAkQXR0YWNobWVudERhdGEtPntGaWxlc2l6ZX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGhhbmRsZSBEb3dubG9hZEF0dGFjaG1lbnQKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdEb3dubG9hZEF0dGFjaG1lbnQnICkgewoKICAgICAgICAjIGdldCBkYXRhIGZvciBhdHRhY2htZW50CiAgICAgICAgbXkgJEZpbGVuYW1lID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnRmlsZW5hbWUnICk7CiAgICAgICAgbXkgJEF0dGFjaG1lbnREYXRhID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+Q29uZmlnSXRlbUF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBGaWxlbmFtZSAgICAgPT4gJEZpbGVuYW1lLAogICAgICAgICk7CgogICAgICAgICMgcmV0dXJuIGVycm9yIGlmIGZpbGUgZG9lcyBub3QgZXhpc3QKICAgICAgICBpZiAoICEkQXR0YWNobWVudERhdGEgKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHN1Y2ggYXR0YWNobWVudCAoJEZpbGVuYW1lKSEiLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICV7JEF0dGFjaG1lbnREYXRhfSwKICAgICAgICAgICAgVHlwZSA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHN0b3JlIGxhc3Qgc2NyZWVuCiAgICAkU2VsZi0+e1Nlc3Npb25PYmplY3R9LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5WaWV3JywKICAgICAgICBWYWx1ZSAgICAgPT4gJFNlbGYtPntSZXF1ZXN0ZWRVUkx9LAogICAgKTsKCiAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAleyRMYXN0VmVyc2lvbn0sCiAgICAgICAgICAgICV7JENvbmZpZ0l0ZW19LAogICAgICAgICAgICBDdXJJbmNpU2lnbmFsID0+ICRJbmNpU2lnbmFsc3sgJExhc3RWZXJzaW9uLT57Q3VySW5jaVN0YXRlVHlwZX0gfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCBmb290ZXIKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9YTUxPdXRwdXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGF0YX07CiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxEZWZpbml0aW9ufTsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERhdGF9IG5lICdIQVNIJzsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERlZmluaXRpb259IG5lICdBUlJBWSc7CgogICAgJFBhcmFte0xldmVsfSB8fD0gMDsKCiAgICBJVEVNOgogICAgZm9yIG15ICRJdGVtICggQHsgJFBhcmFte1hNTERlZmluaXRpb259IH0gKSB7CiAgICAgICAgQ09VTlRFUjoKICAgICAgICBmb3IgbXkgJENvdW50ZXIgKCAxIC4uICRJdGVtLT57Q291bnRNYXh9ICkgewoKICAgICAgICAgICAgIyBzdG9wIGxvb3AsIGlmIG5vIGNvbnRlbnQgd2FzIGdpdmVuCiAgICAgICAgICAgIGxhc3QgQ09VTlRFUiBpZiAhZGVmaW5lZCAkUGFyYW17WE1MRGF0YX0tPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlcl0tPntDb250ZW50fTsKCiAgICAgICAgICAgICMgbG9va3VwIHZhbHVlCiAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlhNTFZhbHVlTG9va3VwKAogICAgICAgICAgICAgICAgSXRlbSAgPT4gJEl0ZW0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17WE1MRGF0YX0tPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlcl0tPntDb250ZW50fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY3JlYXRlIG91dHB1dCBzdHJpbmcKICAgICAgICAgICAgJFZhbHVlID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5JVFNNQ29uZmlnSXRlbU91dHB1dFN0cmluZ0NyZWF0ZSgKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZSwKICAgICAgICAgICAgICAgIEl0ZW0gID0+ICRJdGVtLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjYWxjdWxhdGUgaW5kZW50YXRpb24gZm9yIGxlZnQtcGFkZGluZyBjc3MgYmFzZWQgb24gMTVweCBwZXIgbGV2ZWwgYW5kIDEwcHggYXMgZGVmYXVsdAogICAgICAgICAgICBteSAkSW5kZW50YXRpb24gPSAxMDsKCiAgICAgICAgICAgIGlmICggJFBhcmFte0xldmVsfSApIHsKICAgICAgICAgICAgICAgICRJbmRlbnRhdGlvbiArPSAxNSAqICRQYXJhbXtMZXZlbH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgb3V0cHV0IGRhdGEgYmxvY2sKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0RhdGEnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJEl0ZW0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAkSXRlbS0+e0Rlc2NyaXB0aW9ufSB8fCAkSXRlbS0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgID0+ICRWYWx1ZSwKICAgICAgICAgICAgICAgICAgICBJbmRlbnRhdGlvbiA9PiAkSW5kZW50YXRpb24sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzdGFydCByZWN1cnNpb24sIGlmICJTdWIiIHdhcyBmb3VuZAogICAgICAgICAgICBpZiAoICRJdGVtLT57U3VifSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT5fWE1MT3V0cHV0KAogICAgICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgPT4gJFBhcmFte1hNTERhdGF9LT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLAogICAgICAgICAgICAgICAgICAgIExldmVsICAgICAgICAgPT4gJFBhcmFte0xldmVsfSArIDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbUxheW91dEN1c3RvbWVyLnBtIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW1MYXlvdXRDdXN0b21lcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbUxheW91dEN1c3RvbWVyIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBsYXlvdXQgZnVuY3Rpb25zIG9mIGN1c3RvbWVyIG9iamVjdHMKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgJEJhY2tlbmRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW1MYXlvdXRDdXN0b21lci0+bmV3KAogICAgICAgICVQYXJhbSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0ICgKICAgICAgICBxdyhDb25maWdPYmplY3QgRW5jb2RlT2JqZWN0IExvZ09iamVjdCBNYWluT2JqZWN0IFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCkKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPnskT2JqZWN0fSA9ICRQYXJhbXskT2JqZWN0fSB8fCBkaWUgIkdvdCBubyAkT2JqZWN0ISI7CiAgICB9CgogICAgIyBjcmVhdGUgYWRkaXRpb25hbCBvYmplY3RzCiAgICAkU2VsZi0+e0N1c3RvbWVyVXNlck9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyLT5uZXcoICV7JFNlbGZ9ICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBPdXRwdXRTdHJpbmdDcmVhdGUoKQoKY3JlYXRlIG91dHB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+T3V0cHV0U3RyaW5nQ3JlYXRlKAogICAgICAgIFZhbHVlID0+IDExLCAgICAgICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgT3V0cHV0U3RyaW5nQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyB0cmFuc2Zvcm0gYXNjaWkgdG8gaHRtbAogICAgJFBhcmFte1ZhbHVlfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICBUZXh0ID0+ICRQYXJhbXtWYWx1ZX0gfHwgJycsCiAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICk7CgogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1pdGVtIEZvcm1EYXRhR2V0KCkKCmdldCBmb3JtIGRhdGEgYXMgaGFzaCByZWZlcmVuY2UKCiAgICBteSAkRm9ybURhdGFSZWYgPSAkQmFja2VuZE9iamVjdC0+Rm9ybURhdGFHZXQoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJUZvcm1EYXRhOwoKICAgICMgZ2V0IHNlbGVjdGVkIGN1c3RvbWVyIHVzZXIKICAgICRGb3JtRGF0YXtWYWx1ZX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9ICk7CgogICAgIyBjaGVjayBzZWFyY2ggYnV0dG9uCiAgICBpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpCdXR0b25TZWFyY2gnICkgKSB7CiAgICAgICAgJFBhcmFte0l0ZW19LT57Rm9ybX0tPnsgJFBhcmFte0tleX0gfS0+e1NlYXJjaH0KICAgICAgICAgICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6U2VhcmNoJyApOwogICAgfQoKICAgICMgY2hlY2sgc2VsZWN0IGJ1dHRvbgogICAgZWxzaWYgKCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6QnV0dG9uU2VsZWN0JyApICkgewogICAgICAgICRGb3JtRGF0YXtWYWx1ZX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6U2VsZWN0JyApOwogICAgfQoKICAgICMgY2hlY2sgY2xlYXIgYnV0dG9uCiAgICBlbHNpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpCdXR0b25DbGVhcicgKSApIHsKICAgICAgICAkRm9ybURhdGF7VmFsdWV9ID0gJyc7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyByZXNldCB2YWx1ZSBpZiBzZWFyY2ggZmllbGQgaXMgZW1wdHkKICAgICAgICBpZiAoCiAgICAgICAgICAgICEkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6U2VhcmNoJyApCiAgICAgICAgICAgICYmIGRlZmluZWQgJEZvcm1EYXRhe1ZhbHVlfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkRm9ybURhdGF7VmFsdWV9ID0gJyc7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHJlcXVpcmVkIG9wdGlvbgogICAgICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57UmVxdWlyZWR9ICYmICEkRm9ybURhdGF7VmFsdWV9ICkgewogICAgICAgICAgICAkUGFyYW17SXRlbX0tPntGb3JtfS0+eyAkUGFyYW17S2V5fSB9LT57SW52YWxpZH0gPSAxOwogICAgICAgICAgICAkRm9ybURhdGF7SW52YWxpZH0gPSAxOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXCVGb3JtRGF0YTsKfQoKPWl0ZW0gSW5wdXRDcmVhdGUoKQoKY3JlYXRlIGEgaW5wdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPklucHV0Q3JlYXRlKAogICAgICAgIEtleSA9PiAnSXRlbTo6MTo6Tm9kZTo6MycsCiAgICAgICAgVmFsdWUgPT4gMTEsICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIElucHV0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkVmFsdWUgPSAnJzsKICAgIGlmICggZGVmaW5lZCAkUGFyYW17VmFsdWV9ICkgewogICAgICAgICRWYWx1ZSA9ICRQYXJhbXtWYWx1ZX07CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1ZhbHVlRGVmYXVsdH0gKSB7CiAgICAgICAgJFZhbHVlID0gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VmFsdWVEZWZhdWx0fTsKICAgIH0KICAgIG15ICRDbGFzcyAgICA9ICdXNTBwYyBJVFNNQ3VzdG9tZXJTZWFyY2gnOwogICAgbXkgJFNlYXJjaCAgID0gJyc7CiAgICBteSAkUmVxdWlyZWQgPSAkUGFyYW17UmVxdWlyZWR9IHx8ICcnOwogICAgbXkgJEludmFsaWQgID0gJFBhcmFte0ludmFsaWR9IHx8ICcnOwogICAgbXkgJEl0ZW1JZCAgID0gJFBhcmFte0l0ZW1JZH0gfHwgJyc7CgogICAgaWYgKCRSZXF1aXJlZCkgewogICAgICAgICRDbGFzcyAuPSAnIFZhbGlkYXRlX1JlcXVpcmVkJzsKICAgIH0KCiAgICBpZiAoJEludmFsaWQpIHsKICAgICAgICAkQ2xhc3MgLj0gJyBTZXJ2ZXJFcnJvcic7CiAgICB9CgogICAgIyBjcmVhdGUgY3VzdG9tZXIgc3RyaW5nCiAgICBpZiAoJFZhbHVlKSB7CgogICAgICAgICMgZ2V0IGN1c3RvbWVyIGRhdGEKICAgICAgICBteSAlQ3VzdG9tZXJTZWFyY2hMaXN0ID0gJFNlbGYtPntDdXN0b21lclVzZXJPYmplY3R9LT5DdXN0b21lclNlYXJjaCgKICAgICAgICAgICAgU2VhcmNoID0+ICRWYWx1ZSwKICAgICAgICApOwoKICAgICAgICAjIHRyYW5zZm9ybSBhc2NpaSB0byBodG1sCiAgICAgICAgJFNlYXJjaCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICAgICAgVGV4dCA9PiAkQ3VzdG9tZXJTZWFyY2hMaXN0eyRWYWx1ZX0gfHwgJycsCiAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNyZWF0ZSBzdHJpbmcKICAgIG15ICRTdHJpbmcKICAgICAgICA9ICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInCiAgICAgICAgLiAkUGFyYW17S2V5fQogICAgICAgIC4gJyIgdmFsdWU9IicKICAgICAgICAuICRWYWx1ZQogICAgICAgIC4gJyIgaWQ9IicKICAgICAgICAuICRJdGVtSWQgLiAnU2VsZWN0ZWQnCiAgICAgICAgLiAnIi8+JwogICAgICAgIC4gJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSInCiAgICAgICAgLiAkUGFyYW17S2V5fQogICAgICAgIC4gJzo6U2VhcmNoIiBjbGFzcz0iJwogICAgICAgIC4gJENsYXNzCiAgICAgICAgLiAnIiBpZD0iJwogICAgICAgIC4gJEl0ZW1JZAogICAgICAgIC4gJyIgdmFsdWU9IicKICAgICAgICAuICRTZWFyY2ggLiAnIi8+JzsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWl0ZW0gU2VhcmNoRm9ybURhdGFHZXQoKQoKZ2V0IHNlYXJjaCBmb3JtIGRhdGEKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoRm9ybURhdGFHZXQoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17S2V5fSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgS2V5IScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZm9ybSBkYXRhCiAgICBteSAkVmFsdWU7CiAgICBpZiAoICRQYXJhbXtWYWx1ZX0gKSB7CiAgICAgICAgJFZhbHVlID0gJFBhcmFte1ZhbHVlfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRWYWx1ZSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gKTsKICAgIH0KICAgIHJldHVybiAkVmFsdWU7Cn0KCj1pdGVtIFNlYXJjaElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIHNlYXJjaCBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoSW5wdXRDcmVhdGUoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICk7Cgo9Y3V0CgpzdWIgU2VhcmNoSW5wdXRDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRLZXkgPSAkUGFyYW17S2V5fTsKCiAgICAjIGhhc2ggd2l0aCB2YWx1ZXMgZm9yIHRoZSBpbnB1dCBmaWVsZAogICAgbXkgJUZvcm1EYXRhOwoKICAgIGlmICggJFBhcmFte1ZhbHVlfSApIHsKICAgICAgICAkRm9ybURhdGF7VmFsdWV9ID0gJFBhcmFte1ZhbHVlfTsKICAgIH0KCiAgICAjIGNyZWF0ZSBpbnB1dCBmaWVsZAogICAgbXkgJElucHV0U3RyaW5nID0gJFNlbGYtPklucHV0Q3JlYXRlKAogICAgICAgICVGb3JtRGF0YSwKICAgICAgICBLZXkgICAgPT4gJFBhcmFte0tleX0sCiAgICAgICAgSXRlbSAgID0+ICRQYXJhbXtJdGVtfSwKICAgICAgICBJdGVtSWQgPT4gJFBhcmFte0tleX0sCiAgICApOwoKICAgIHJldHVybiAkSW5wdXRTdHJpbmc7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbUxheW91dEN1c3RvbWVyQ29tcGFueS5wbSAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtTGF5b3V0Q3VzdG9tZXJDb21wYW55OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpDdXN0b21lckNvbXBhbnk7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtTGF5b3V0Q3VzdG9tZXJDb21wYW55IC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBsYXlvdXQgZnVuY3Rpb25zIG9mIGN1c3RvbWVyIGNvbXBhbnkgb2JqZWN0cwoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICAkQmFja2VuZE9iamVjdCA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbUxheW91dEN1c3RvbWVyQ29tcGFueS0+bmV3KAogICAgICAgICVQYXJhbSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0ICgKICAgICAgICBxdyhDb25maWdPYmplY3QgRW5jb2RlT2JqZWN0IExvZ09iamVjdCBNYWluT2JqZWN0IFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCkKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPnskT2JqZWN0fSA9ICRQYXJhbXskT2JqZWN0fSB8fCBkaWUgIkdvdCBubyAkT2JqZWN0ISI7CiAgICB9CgogICAgIyBjcmVhdGUgYWRkaXRpb25hbCBvYmplY3RzCiAgICAkU2VsZi0+e0N1c3RvbWVyQ29tcGFueU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJDb21wYW55LT5uZXcoICV7JFNlbGZ9ICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBPdXRwdXRTdHJpbmdDcmVhdGUoKQoKY3JlYXRlIG91dHB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+T3V0cHV0U3RyaW5nQ3JlYXRlKAogICAgICAgIFZhbHVlID0+IDExLCAgICAgICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgT3V0cHV0U3RyaW5nQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyB0cmFuc2Zvcm0gYXNjaWkgdG8gaHRtbAogICAgJFBhcmFte1ZhbHVlfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICBUZXh0ID0+ICRQYXJhbXtWYWx1ZX0gfHwgJycsCiAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICk7CgogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1pdGVtIEZvcm1EYXRhR2V0KCkKCmdldCBmb3JtIGRhdGEgYXMgaGFzaCByZWZlcmVuY2UKCiAgICBteSAkRm9ybURhdGFSZWYgPSAkQmFja2VuZE9iamVjdC0+Rm9ybURhdGFHZXQoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJUZvcm1EYXRhOwoKICAgICMgZ2V0IGZvcm0gZGF0YQogICAgJEZvcm1EYXRhe1ZhbHVlfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gKTsKCiAgICAjIHNldCBpbnZhbGlkIHBhcmFtCiAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1JlcXVpcmVkfSAmJiAhJEZvcm1EYXRhe1ZhbHVlfSApIHsKICAgICAgICAkRm9ybURhdGF7SW52YWxpZH0gPSAxOwogICAgICAgICRQYXJhbXtJdGVtfS0+e0Zvcm19LT57ICRQYXJhbXtLZXl9IH0tPntJbnZhbGlkfSA9IDE7CiAgICB9CgogICAgcmV0dXJuIFwlRm9ybURhdGE7Cn0KCnN1YiBJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFNlbGVjdGVkSUQgPSAkUGFyYW17VmFsdWV9IHx8ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1ZhbHVlRGVmYXVsdH0gfHwgJyc7CgogICAgbXkgJENTU0NsYXNzID0gJyc7CiAgICBteSAkUmVxdWlyZWQgPSAkUGFyYW17UmVxdWlyZWR9OwogICAgbXkgJEludmFsaWQgID0gJFBhcmFte0ludmFsaWR9OwogICAgbXkgJEl0ZW1JZCAgID0gJFBhcmFte0l0ZW1JZH07CgogICAgaWYgKCRSZXF1aXJlZCkgewogICAgICAgICRDU1NDbGFzcyAuPSAnVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgfQoKICAgIGlmICgkSW52YWxpZCkgewogICAgICAgICRDU1NDbGFzcyAuPSAnIFNlcnZlckVycm9yJzsKICAgIH0KCiAgICAjIGdldCBjbGFzcyBsaXN0CiAgICBteSAlQ29tcGFueUxpc3QgPSAkU2VsZi0+e0N1c3RvbWVyQ29tcGFueU9iamVjdH0tPkN1c3RvbWVyQ29tcGFueUxpc3QoKTsKCiAgICAjIGdlbmVyYXRlIHN0cmluZwogICAgbXkgJFN0cmluZyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlQ29tcGFueUxpc3QsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICRQYXJhbXtLZXl9LAogICAgICAgIElEICAgICAgICAgICA9PiAkSXRlbUlkLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkU2VsZWN0ZWRJRCwKICAgICAgICBDbGFzcyAgICAgICAgPT4gJENTU0NsYXNzLAogICAgKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWl0ZW0gU2VhcmNoRm9ybURhdGFHZXQoKQoKZ2V0IHNlYXJjaCBmb3JtIGRhdGEKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoRm9ybURhdGFHZXQoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17S2V5fSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgS2V5IScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZm9ybSBkYXRhCiAgICBteSAkVmFsdWU7CiAgICBpZiAoICRQYXJhbXtWYWx1ZX0gKSB7CiAgICAgICAgJFZhbHVlID0gJFBhcmFte1ZhbHVlfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRWYWx1ZSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gKTsKICAgIH0KICAgIHJldHVybiAkVmFsdWU7Cn0KCj1pdGVtIFNlYXJjaElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIHNlYXJjaCBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoSW5wdXRDcmVhdGUoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICk7Cgo9Y3V0CgpzdWIgU2VhcmNoSW5wdXRDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRWYWx1ZXMgPSAkU2VsZi0+U2VhcmNoRm9ybURhdGFHZXQoJVBhcmFtKTsKCiAgICAjIGdldCBjb21wYW55IGRhdGEKICAgIG15ICVDb21wYW55TGlzdCA9ICRTZWxmLT57Q3VzdG9tZXJDb21wYW55T2JqZWN0fS0+Q3VzdG9tZXJDb21wYW55TGlzdCgpOwoKICAgICMgZ2VuZXJhdGUgc3RyaW5nCiAgICBteSAkU3RyaW5nID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcJUNvbXBhbnlMaXN0LAogICAgICAgIE5hbWUgICAgICAgID0+ICRQYXJhbXtLZXl9LAogICAgICAgIFNpemUgICAgICAgID0+IDUsCiAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgIFNlbGVjdGVkSUQgID0+ICRWYWx1ZXMsCiAgICApOwoKICAgIHJldHVybiAkU3RyaW5nOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAoK
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbUxheW91dERhdGUucG0gLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbUxheW91dERhdGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtTGF5b3V0RGF0ZSAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgbGF5b3V0IGZ1bmN0aW9ucyBvZiBkYXRlIG9iamVjdHMuCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtTGF5b3V0RGF0ZS0+bmV3KAogICAgICAgICVQYXJhbSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhDb25maWdPYmplY3QgRW5jb2RlT2JqZWN0IExvZ09iamVjdCBNYWluT2JqZWN0IFBhcmFtT2JqZWN0IExheW91dE9iamVjdCkpIHsKICAgICAgICAkU2VsZi0+eyRPYmplY3R9ID0gJFBhcmFteyRPYmplY3R9IHx8IGRpZSAiR290IG5vICRPYmplY3QhIjsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIE91dHB1dFN0cmluZ0NyZWF0ZSgpCgpjcmVhdGUgb3V0cHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5PdXRwdXRTdHJpbmdDcmVhdGUoCiAgICAgICAgVmFsdWUgPT4gJzIwMDctMDEtMDEnLCAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIE91dHB1dFN0cmluZ0NyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAnJyBpZiAhJFBhcmFte1ZhbHVlfTsKCiAgICAkUGFyYW17VmFsdWV9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGUgPT4gJyREYXRleyIkUURhdGF7IkRhdGUifSJ9JywKICAgICAgICBEYXRhICAgICA9PiB7CiAgICAgICAgICAgIERhdGUgPT4gJFBhcmFte1ZhbHVlfSAuICcgMDA6MDA6MDAnLAogICAgICAgIH0sCiAgICApOwogICAgJFBhcmFte1ZhbHVlfSA9fiBzLzAwOjAwOjAwLy87CgogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX0gfHwgJyc7Cn0KCj1pdGVtIEZvcm1EYXRhR2V0KCkKCmdldCBmb3JtIGRhdGEgYXMgaGFzaCByZWZlcmVuY2UKCiAgICBteSAkRm9ybURhdGFSZWYgPSAkQmFja2VuZE9iamVjdC0+Rm9ybURhdGFHZXQoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJUZvcm1EYXRhOwoKICAgICMgZ2V0IGZvcm0gZGF0YQogICAgbXkgJERheSAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OkRheScgKTsKICAgIG15ICRNb250aCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpNb250aCcgKTsKICAgIG15ICRZZWFyICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpZZWFyJyApOwoKICAgIGlmICggJERheSAmJiAkTW9udGggJiYgJFllYXIgKSB7CiAgICAgICAgJEZvcm1EYXRhe1ZhbHVlfSA9IHNwcmludGYgJyUwMmQtJTAyZC0lMDJkJywgJFllYXIsICRNb250aCwgJERheTsKICAgIH0KCiAgICAjIHNldCBpbnZhbGlkIHBhcmFtCiAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1JlcXVpcmVkfSAmJiAhJEZvcm1EYXRhe1ZhbHVlfSApIHsKICAgICAgICAkRm9ybURhdGF7SW52YWxpZH0gPSAxOwogICAgICAgICRQYXJhbXtJdGVtfS0+e0Zvcm19LT57ICRQYXJhbXtLZXl9IH0tPntJbnZhbGlkfSA9IDE7CiAgICB9CgogICAgcmV0dXJuIFwlRm9ybURhdGE7Cn0KCj1pdGVtIElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIGlucHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5JbnB1dENyZWF0ZSgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIFZhbHVlID0+ICcyMDA3LTAzLTI2JywgICAgICAjIChvcHRpb25hbCkKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJVZhbHVlczsKICAgIGlmICggJFBhcmFte1ZhbHVlfSB8fCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZURlZmF1bHR9ICkgewogICAgICAgIG15ICRWYWx1ZSA9ICRQYXJhbXtWYWx1ZX0gfHwgJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VmFsdWVEZWZhdWx0fTsKCiAgICAgICAgaWYgKCAkVmFsdWUgPX4gL14oXGRcZFxkXGQpLShcZFxkfFxkKS0oXGRcZHxcZCkkL2kgKSB7CiAgICAgICAgICAgICRWYWx1ZXN7ICRQYXJhbXtLZXl9IC4gJzo6WWVhcicgfSAgPSAkMTsKICAgICAgICAgICAgJFZhbHVlc3sgJFBhcmFte0tleX0gLiAnOjpNb250aCcgfSA9ICQyOwogICAgICAgICAgICAkVmFsdWVzeyAkUGFyYW17S2V5fSAuICc6OkRheScgfSAgID0gJDM7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRTdHJpbmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICBQcmVmaXggICAgICAgICAgID0+ICRQYXJhbXtLZXl9IC4gJzo6JywKICAgICAgICBGb3JtYXQgICAgICAgICAgID0+ICdEYXRlSW5wdXRGb3JtYXQnLAogICAgICAgIFllYXJQZXJpb2RQYXN0ICAgPT4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57WWVhclBlcmlvZFBhc3R9IHx8IDEwLAogICAgICAgIFllYXJQZXJpb2RGdXR1cmUgPT4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57WWVhclBlcmlvZEZ1dHVyZX0gfHwgMTAsCiAgICAgICAgJVZhbHVlcywKICAgICk7CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCj1pdGVtIFNlYXJjaEZvcm1EYXRhR2V0KCkKCmdldCBzZWFyY2ggZm9ybSBkYXRhCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPlNlYXJjaEZvcm1EYXRhR2V0KAogICAgICAgIEtleSA9PiAnSXRlbTo6MTo6Tm9kZTo6MycsCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgU2VhcmNoRm9ybURhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGZvcm0gZGF0YQogICAgbXkgJFVzZWQ7CiAgICBteSAkU3RhcnREYXk7CiAgICBteSAkU3RhcnRNb250aDsKICAgIG15ICRTdGFydFllYXI7CiAgICBteSAkU3RvcERheTsKICAgIG15ICRTdG9wTW9udGg7CiAgICBteSAkU3RvcFllYXI7CgogICAgaWYgKCAkUGFyYW17VmFsdWV9ICkgewogICAgICAgICRVc2VkICAgICAgID0gJFBhcmFte1ZhbHVlfS0+eyAkUGFyYW17S2V5fSB9OwogICAgICAgICRTdGFydERheSAgID0gJFBhcmFte1ZhbHVlfS0+eyAkUGFyYW17S2V5fSAuICc6OlRpbWVTdGFydDo6RGF5JyB9OwogICAgICAgICRTdGFydE1vbnRoID0gJFBhcmFte1ZhbHVlfS0+eyAkUGFyYW17S2V5fSAuICc6OlRpbWVTdGFydDo6TW9udGgnIH07CiAgICAgICAgJFN0YXJ0WWVhciAgPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0YXJ0OjpZZWFyJyB9OwogICAgICAgICRTdG9wRGF5ICAgID0gJFBhcmFte1ZhbHVlfS0+eyAkUGFyYW17S2V5fSAuICc6OlRpbWVTdG9wOjpEYXknIH07CiAgICAgICAgJFN0b3BNb250aCAgPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0b3A6Ok1vbnRoJyB9OwogICAgICAgICRTdG9wWWVhciAgID0gJFBhcmFte1ZhbHVlfS0+eyAkUGFyYW17S2V5fSAuICc6OlRpbWVTdG9wOjpZZWFyJyB9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFVzZWQgICAgICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9ICk7CiAgICAgICAgJFN0YXJ0RGF5ICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0YXJ0OjpEYXknICk7CiAgICAgICAgJFN0YXJ0TW9udGggPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0YXJ0OjpNb250aCcgKTsKICAgICAgICAkU3RhcnRZZWFyICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpUaW1lU3RhcnQ6OlllYXInICk7CiAgICAgICAgJFN0b3BEYXkgICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0b3A6OkRheScgKTsKICAgICAgICAkU3RvcE1vbnRoICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpUaW1lU3RvcDo6TW9udGgnICk7CiAgICAgICAgJFN0b3BZZWFyICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0b3A6OlllYXInICk7CiAgICB9CiAgICBpZiAoCiAgICAgICAgJFVzZWQKICAgICAgICAmJiAkU3RhcnREYXkgJiYgJFN0YXJ0TW9udGggJiYgJFN0YXJ0WWVhcgogICAgICAgICYmICRTdG9wRGF5ICAmJiAkU3RvcE1vbnRoICAmJiAkU3RvcFllYXIKICAgICAgICApCiAgICB7CiAgICAgICAgbXkgJFN0YXJ0RGF0ZSA9IHNwcmludGYgJyUwMmQtJTAyZC0lMDJkJywgJFN0YXJ0WWVhciwgJFN0YXJ0TW9udGgsICRTdGFydERheTsKICAgICAgICBteSAkU3RvcERhdGUgID0gc3ByaW50ZiAnJTAyZC0lMDJkLSUwMmQnLCAkU3RvcFllYXIsICAkU3RvcE1vbnRoLCAgJFN0b3BEYXk7CgogICAgICAgIHJldHVybiB7ICctYmV0d2VlbicgPT4gWyAkU3RhcnREYXRlLCAkU3RvcERhdGUgXSB9OwogICAgfQoKICAgIHJldHVybiBbXTsgICAgIyBubyBjb25kaXRpb25zIGJ5IGRlZmF1bHQKfQoKPWl0ZW0gU2VhcmNoSW5wdXRDcmVhdGUoKQoKY3JlYXRlIGEgc2VhcmNoIGlucHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5TZWFyY2hJbnB1dENyZWF0ZSgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIFNlYXJjaElucHV0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGp1c3QgZm9yIGNvbnZlbmllbmNlCiAgICBteSAkS2V5ICAgICAgICAgPSAkUGFyYW17S2V5fTsKICAgIG15ICRQcmVmaXhTdGFydCA9ICRLZXkgLiAnOjpUaW1lU3RhcnQ6Oic7CiAgICBteSAkUHJlZml4U3RvcCAgPSAkS2V5IC4gJzo6VGltZVN0b3A6Oic7CgogICAgIyBnZXQgdGltZSByZWxhdGVkIHBhcmFtcwogICAgbXkgJUdldFBhcmFtOwoKICAgIGlmICggJFBhcmFte1ZhbHVlfSApIHsKICAgICAgICAlR2V0UGFyYW0gPSAleyAkUGFyYW17VmFsdWV9IH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICRHZXRQYXJhbXskS2V5fSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJEtleSApOwogICAgICAgIGZvciBteSAkVGltZVR5cGUgKCAkUHJlZml4U3RhcnQsICRQcmVmaXhTdG9wICkgewogICAgICAgICAgICBmb3IgbXkgJFBhcnQgKHF3KCBZZWFyIE1vbnRoIERheSApKSB7CiAgICAgICAgICAgICAgICBteSAkUGFyYW1LZXkgPSAkVGltZVR5cGUgLiAkUGFydDsKICAgICAgICAgICAgICAgIG15ICRQYXJhbVZhbCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtS2V5ICk7CgogICAgICAgICAgICAgICAgIyByZW1vdmUgd2hpdGUgc3BhY2Ugb24gdGhlIHN0YXJ0IGFuZCBlbmQKICAgICAgICAgICAgICAgIGlmICgkUGFyYW1WYWwpIHsKICAgICAgICAgICAgICAgICAgICAkUGFyYW1WYWwgPX4gc3sgXEEgXHMrIH17fXhtczsKICAgICAgICAgICAgICAgICAgICAkUGFyYW1WYWwgPX4gc3sgXHMrIFx6IH17fXhtczsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHN0b3JlIGluICVHZXRQYXJhbQogICAgICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbUtleX0gPSAkUGFyYW1WYWw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBCdWlsZCBzZWxlY3Rpb24gZm9yIHRoZSBzdGFydCBhbmQgc3RvcCB0aW1lLgogICAgIyBOb3RlIHRoYXQgc2VhcmNoaW5nIGlzIGJ5IGRhdGUsIHdoaWxlIGlucHV0IGlzIGJ5IHRpbWUgYXMgd2VsbAogICAgbXkgJFRpbWVTdGFydFNlbGVjdGlvblN0cmluZyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgIFByZWZpeCAgICAgICAgICAgPT4gJFByZWZpeFN0YXJ0LAogICAgICAgIEZvcm1hdCAgICAgICAgICAgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsCiAgICAgICAgWWVhclBlcmlvZFBhc3QgICA9PiAxMCwKICAgICAgICBZZWFyUGVyaW9kRnV0dXJlID0+IDEwLAogICAgICAgICVHZXRQYXJhbSwKICAgICk7CiAgICBteSAkVGltZVN0b3BTZWxlY3Rpb25TdHJpbmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICBPcHRpb25hbCAgICAgICAgID0+IDAsCiAgICAgICAgUHJlZml4ICAgICAgICAgICA9PiAkUHJlZml4U3RvcCwKICAgICAgICBGb3JtYXQgICAgICAgICAgID0+ICdEYXRlSW5wdXRGb3JtYXQnLAogICAgICAgIFllYXJQZXJpb2RQYXN0ICAgPT4gMTAsCiAgICAgICAgWWVhclBlcmlvZEZ1dHVyZSA9PiAxMCwKICAgICAgICAlR2V0UGFyYW0sCiAgICApOwoKICAgIG15ICRDaGVja2JveCA9IHFxezxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IiRLZXkiIHZhbHVlPSIxIi8+fTsKICAgIG15ICRCZXR3ZWVuICA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdCZXR3ZWVuJyk7CiAgICBteSAkQW5kICAgICAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnYW5kJyk7CgogICAgcmV0dXJuICI8ZGl2PiAkQ2hlY2tib3ggJEJldHdlZW4gJFRpbWVTdGFydFNlbGVjdGlvblN0cmluZyA8L2Rpdj4iCiAgICAgICAgLiAiPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMjdweDtcIj4kQW5kPC9zcGFuPiAkVGltZVN0b3BTZWxlY3Rpb25TdHJpbmciOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbUxheW91dERhdGVUaW1lLnBtIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW1MYXlvdXREYXRlVGltZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW1MYXlvdXREYXRlVGltZSAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgbGF5b3V0IGZ1bmN0aW9ucyBvZiBkYXRldGltZSBvYmplY3RzLgoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICAkQmFja2VuZE9iamVjdCA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbUxheW91dERhdGVUaW1lLT5uZXcoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KENvbmZpZ09iamVjdCBFbmNvZGVPYmplY3QgTG9nT2JqZWN0IE1haW5PYmplY3QgUGFyYW1PYmplY3QgTGF5b3V0T2JqZWN0KSkgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gT3V0cHV0U3RyaW5nQ3JlYXRlKCkKCmNyZWF0ZSBvdXRwdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPk91dHB1dFN0cmluZ0NyZWF0ZSgKICAgICAgICBWYWx1ZSA9PiAnMjAwNy0wMS0wMSAxMjowMCcsICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgT3V0cHV0U3RyaW5nQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICcnIGlmICEkUGFyYW17VmFsdWV9OwoKICAgICRQYXJhbXtWYWx1ZX0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZSA9PiAnJFRpbWVMb25neyIkUURhdGF7IkRhdGUifSJ9JywKICAgICAgICBEYXRhICAgICA9PiB7CiAgICAgICAgICAgIERhdGUgPT4gJFBhcmFte1ZhbHVlfSAuICc6MDAnLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAkUGFyYW17VmFsdWV9IHx8ICcnOwp9Cgo9aXRlbSBGb3JtRGF0YUdldCgpCgpnZXQgZm9ybSBkYXRhIGFzIGhhc2ggcmVmZXJlbmNlCgogICAgbXkgJEZvcm1EYXRhUmVmID0gJEJhY2tlbmRPYmplY3QtPkZvcm1EYXRhR2V0KAogICAgICAgIEtleSA9PiAnSXRlbTo6MTo6Tm9kZTo6MycsCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgRm9ybURhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICVGb3JtRGF0YTsKCiAgICAjIGdldCBmb3JtIGRhdGEKICAgIG15ICREYXkgICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6RGF5JyApOwogICAgbXkgJE1vbnRoICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpNb250aCcgKTsKICAgIG15ICRZZWFyICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6WWVhcicgKTsKICAgIG15ICRIb3VyICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6SG91cicgKSB8fCAwOwogICAgbXkgJE1pbnV0ZSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpNaW51dGUnICkgfHwgMDsKCiAgICBpZiAoICREYXkgJiYgJE1vbnRoICYmICRZZWFyICkgewogICAgICAgICRGb3JtRGF0YXtWYWx1ZX0gPSBzcHJpbnRmICclMDJkLSUwMmQtJTAyZCAlMDJkOiUwMmQnLCAkWWVhciwgJE1vbnRoLCAkRGF5LCAkSG91ciwgJE1pbnV0ZTsKICAgIH0KCiAgICAjIHNldCBpbnZhbGlkIHBhcmFtCiAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1JlcXVpcmVkfSAmJiAhJEZvcm1EYXRhe1ZhbHVlfSApIHsKICAgICAgICAkRm9ybURhdGF7SW52YWxpZH0gPSAxOwogICAgICAgICRQYXJhbXtJdGVtfS0+e0Zvcm19LT57ICRQYXJhbXtLZXl9IH0tPntJbnZhbGlkfSA9IDE7CiAgICB9CgogICAgcmV0dXJuIFwlRm9ybURhdGE7Cn0KCj1pdGVtIElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIGlucHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5JbnB1dENyZWF0ZSgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIFZhbHVlID0+ICcyMDA3LTAzLTI2IDEyOjAwJywgICMgKG9wdGlvbmFsKQogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIElucHV0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAlVmFsdWVzOwogICAgaWYgKCAkUGFyYW17VmFsdWV9IHx8ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1ZhbHVlRGVmYXVsdH0gKSB7CiAgICAgICAgbXkgJFZhbHVlID0gJFBhcmFte1ZhbHVlfSB8fCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZURlZmF1bHR9OwoKICAgICAgICBpZiAoICRWYWx1ZSA9fiAvXihcZFxkXGRcZCktKFxkXGR8XGQpLShcZFxkfFxkKSAoXGRcZHxcZCk6KFxkXGR8XGQpJC9pICkgewogICAgICAgICAgICAkVmFsdWVzeyAkUGFyYW17S2V5fSAuICc6OlllYXInIH0gICA9ICQxOwogICAgICAgICAgICAkVmFsdWVzeyAkUGFyYW17S2V5fSAuICc6Ok1vbnRoJyB9ICA9ICQyOwogICAgICAgICAgICAkVmFsdWVzeyAkUGFyYW17S2V5fSAuICc6OkRheScgfSAgICA9ICQzOwogICAgICAgICAgICAkVmFsdWVzeyAkUGFyYW17S2V5fSAuICc6OkhvdXInIH0gICA9ICQ0OwogICAgICAgICAgICAkVmFsdWVzeyAkUGFyYW17S2V5fSAuICc6Ok1pbnV0ZScgfSA9ICQ1OwogICAgICAgIH0KICAgIH0KCiAgICBteSAkU3RyaW5nID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgUHJlZml4ICAgICAgICAgICA9PiAkUGFyYW17S2V5fSAuICc6OicsCiAgICAgICAgRm9ybWF0ICAgICAgICAgICA9PiAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgWWVhclBlcmlvZFBhc3QgICA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntZZWFyUGVyaW9kUGFzdH0gfHwgMTAsCiAgICAgICAgWWVhclBlcmlvZEZ1dHVyZSA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntZZWFyUGVyaW9kRnV0dXJlfSB8fCAxMCwKICAgICAgICAlVmFsdWVzLAogICAgKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWl0ZW0gU2VhcmNoRm9ybURhdGFHZXQoKQoKZ2V0IHNlYXJjaCBmb3JtIGRhdGEKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoRm9ybURhdGFHZXQoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFVzZWQ7CiAgICBteSAkU3RhcnRNaW51dGU7CiAgICBteSAkU3RhcnRIb3VyOwogICAgbXkgJFN0YXJ0RGF5OwogICAgbXkgJFN0YXJ0TW9udGg7CiAgICBteSAkU3RhcnRZZWFyOwogICAgbXkgJFN0b3BNaW51dGU7CiAgICBteSAkU3RvcEhvdXI7CiAgICBteSAkU3RvcERheTsKICAgIG15ICRTdG9wTW9udGg7CiAgICBteSAkU3RvcFllYXI7CgogICAgIyBnZXQgZm9ybSBkYXRhCiAgICBpZiAoICRQYXJhbXtWYWx1ZX0gKSB7CiAgICAgICAgJFVzZWQgICAgICAgID0gJFBhcmFte1ZhbHVlfS0+eyAkUGFyYW17S2V5fSB9OwogICAgICAgICRTdGFydE1pbnV0ZSA9ICRQYXJhbXtWYWx1ZX0tPnsgJFBhcmFte0tleX0gLiAnOjpUaW1lU3RhcnQ6Ok1pbnV0ZScgfTsKICAgICAgICAkU3RhcnRIb3VyICAgPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0YXJ0OjpIb3VyJyB9OwogICAgICAgICRTdGFydERheSAgICA9ICRQYXJhbXtWYWx1ZX0tPnsgJFBhcmFte0tleX0gLiAnOjpUaW1lU3RhcnQ6OkRheScgfTsKICAgICAgICAkU3RhcnRNb250aCAgPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0YXJ0OjpNb250aCcgfTsKICAgICAgICAkU3RhcnRZZWFyICAgPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0YXJ0OjpZZWFyJyB9OwogICAgICAgICRTdG9wTWludXRlICA9ICRQYXJhbXtWYWx1ZX0tPnsgJFBhcmFte0tleX0gLiAnOjpUaW1lU3RvcDo6TWludXRlJyB9OwogICAgICAgICRTdG9wSG91ciAgICA9ICRQYXJhbXtWYWx1ZX0tPnsgJFBhcmFte0tleX0gLiAnOjpUaW1lU3RvcDo6SG91cicgfTsKICAgICAgICAkU3RvcERheSAgICAgPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0b3A6OkRheScgfTsKICAgICAgICAkU3RvcE1vbnRoICAgPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0b3A6Ok1vbnRoJyB9OwogICAgICAgICRTdG9wWWVhciAgICA9ICRQYXJhbXtWYWx1ZX0tPnsgJFBhcmFte0tleX0gLiAnOjpUaW1lU3RvcDo6WWVhcicgfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRVc2VkID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSApOwogICAgICAgICRTdGFydE1pbnV0ZQogICAgICAgICAgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpUaW1lU3RhcnQ6Ok1pbnV0ZScgKSB8fCAwMDsKICAgICAgICAkU3RhcnRIb3VyID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OlRpbWVTdGFydDo6SG91cicgKQogICAgICAgICAgICB8fCAwMDsKICAgICAgICAkU3RhcnREYXkgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpUaW1lU3RhcnQ6OkRheScgKTsKICAgICAgICAkU3RhcnRNb250aCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpUaW1lU3RhcnQ6Ok1vbnRoJyApOwogICAgICAgICRTdGFydFllYXIgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OlRpbWVTdGFydDo6WWVhcicgKTsKICAgICAgICAkU3RvcE1pbnV0ZSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpUaW1lU3RvcDo6TWludXRlJyApCiAgICAgICAgICAgIHx8IDU5OwogICAgICAgICRTdG9wSG91ciA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpUaW1lU3RvcDo6SG91cicgKQogICAgICAgICAgICB8fCAyMzsKICAgICAgICAkU3RvcERheSAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OlRpbWVTdG9wOjpEYXknICk7CiAgICAgICAgJFN0b3BNb250aCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpUaW1lU3RvcDo6TW9udGgnICk7CiAgICAgICAgJFN0b3BZZWFyICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpUaW1lU3RvcDo6WWVhcicgKTsKICAgIH0KCiAgICBpZiAoCiAgICAgICAgJFVzZWQKICAgICAgICAmJiAkU3RhcnRNaW51dGUgJiYgJFN0YXJ0SG91ciAmJiAkU3RhcnREYXkgJiYgJFN0YXJ0TW9udGggJiYgJFN0YXJ0WWVhcgogICAgICAgICYmICRTdG9wTWludXRlICAmJiAkU3RvcEhvdXIgICYmICRTdG9wRGF5ICAmJiAkU3RvcE1vbnRoICAmJiAkU3RvcFllYXIKICAgICAgICApCiAgICB7CgogICAgICAgICMgYWRkIGhvdXIsIG1pbnV0ZXMgYW5kIHNlY29uZHMsCiAgICAgICAgIyBzbyB0aGF0IHRoYXQgdGhlIGZpcnN0IGFuZCB0aGUgbGFzdCBkYXkgaXMgc2VsZWN0ZWQgYXMgd2VsbAogICAgICAgIG15ICRTdGFydERhdGUgPSBzcHJpbnRmICclMDJkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6MDAnCiAgICAgICAgICAgICwgJFN0YXJ0WWVhciwgJFN0YXJ0TW9udGgsICRTdGFydERheSwgJFN0YXJ0SG91ciwgJFN0YXJ0TWludXRlOwogICAgICAgIG15ICRTdG9wRGF0ZSA9IHNwcmludGYgJyUwMmQtJTAyZC0lMDJkICUwMmQ6JTAyZDo1OScKICAgICAgICAgICAgLCAkU3RvcFllYXIsICRTdG9wTW9udGgsICRTdG9wRGF5LCAkU3RvcEhvdXIsICRTdG9wTWludXRlOwoKICAgICAgICByZXR1cm4geyAnLWJldHdlZW4nID0+IFsgJFN0YXJ0RGF0ZSwgJFN0b3BEYXRlIF0gfTsKICAgIH0KCiAgICByZXR1cm4gW107ICAgICMgbm8gY29uZGl0aW9ucyBieSBkZWZhdWx0Cn0KCj1pdGVtIFNlYXJjaElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIHNlYXJjaCBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoSW5wdXRDcmVhdGUoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBqdXN0IGZvciBjb252ZW5pZW5jZQogICAgbXkgJEtleSAgICAgICAgID0gJFBhcmFte0tleX07CiAgICBteSAkUHJlZml4U3RhcnQgPSAkS2V5IC4gJzo6VGltZVN0YXJ0OjonOwogICAgbXkgJFByZWZpeFN0b3AgID0gJEtleSAuICc6OlRpbWVTdG9wOjonOwoKICAgICMgZ2V0IHRpbWUgcmVsYXRlZCBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKCiAgICBpZiAoICRQYXJhbXtWYWx1ZX0gKSB7CiAgICAgICAgJUdldFBhcmFtID0gJXsgJFBhcmFte1ZhbHVlfSB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkR2V0UGFyYW17JEtleX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRLZXkgKTsKICAgICAgICBmb3IgbXkgJFRpbWVUeXBlICggJFByZWZpeFN0YXJ0LCAkUHJlZml4U3RvcCApIHsKICAgICAgICAgICAgZm9yIG15ICRQYXJ0IChxdyggWWVhciBNb250aCBEYXkgKSkgewogICAgICAgICAgICAgICAgbXkgJFBhcmFtS2V5ID0gJFRpbWVUeXBlIC4gJFBhcnQ7CiAgICAgICAgICAgICAgICBteSAkUGFyYW1WYWwgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbUtleSApOwoKICAgICAgICAgICAgICAgICMgcmVtb3ZlIHdoaXRlIHNwYWNlIG9uIHRoZSBzdGFydCBhbmQgZW5kCiAgICAgICAgICAgICAgICBpZiAoJFBhcmFtVmFsKSB7CiAgICAgICAgICAgICAgICAgICAgJFBhcmFtVmFsID1+IHN7IFxBIFxzKyB9e314bXM7CiAgICAgICAgICAgICAgICAgICAgJFBhcmFtVmFsID1+IHN7IFxzKyBceiB9e314bXM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBzdG9yZSBpbiAlR2V0UGFyYW0KICAgICAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1LZXl9ID0gJFBhcmFtVmFsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgQnVpbGQgc2VsZWN0aW9uIGZvciB0aGUgc3RhcnQgYW5kIHN0b3AgdGltZS4KICAgIG15ICRUaW1lU3RhcnRTZWxlY3Rpb25TdHJpbmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICBQcmVmaXggICAgICAgICAgID0+ICRQcmVmaXhTdGFydCwKICAgICAgICBGb3JtYXQgICAgICAgICAgID0+ICdEYXRlSW5wdXRGb3JtYXRMb25nJywKICAgICAgICBZZWFyUGVyaW9kUGFzdCAgID0+IDEwLAogICAgICAgIFllYXJQZXJpb2RGdXR1cmUgPT4gMTAsCiAgICAgICAgJUdldFBhcmFtLAogICAgKTsKICAgIG15ICRUaW1lU3RvcFNlbGVjdGlvblN0cmluZyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgIE9wdGlvbmFsICAgICAgICAgPT4gMCwKICAgICAgICBQcmVmaXggICAgICAgICAgID0+ICRQcmVmaXhTdG9wLAogICAgICAgIEZvcm1hdCAgICAgICAgICAgPT4gJ0RhdGVJbnB1dEZvcm1hdExvbmcnLAogICAgICAgIFllYXJQZXJpb2RQYXN0ICAgPT4gMTAsCiAgICAgICAgWWVhclBlcmlvZEZ1dHVyZSA9PiAxMCwKICAgICAgICAlR2V0UGFyYW0sCiAgICApOwoKICAgIG15ICRDaGVja2JveCA9IHFxezxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IiRLZXkiIHZhbHVlPSIxIi8+fTsKICAgIG15ICRCZXR3ZWVuICA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdCZXR3ZWVuJyk7CiAgICBteSAkQW5kICAgICAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnYW5kJyk7CgogICAgcmV0dXJuICI8ZGl2PiAkQ2hlY2tib3ggJEJldHdlZW4gJFRpbWVTdGFydFNlbGVjdGlvblN0cmluZyA8L2Rpdj4iCiAgICAgICAgLiAiPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMjdweDtcIj4gJEFuZCA8L3NwYW4+ICRUaW1lU3RvcFNlbGVjdGlvblN0cmluZyI7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbUxheW91dER1bW15LnBtIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW1MYXlvdXREdW1teTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW1MYXlvdXREdW1teSAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgbGF5b3V0IGZ1bmN0aW9ucyBvZiBkdW1teSBvYmplY3RzCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtTGF5b3V0RHVtbXktPm5ldygKICAgICAgICAlUGFyYW0sCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoQ29uZmlnT2JqZWN0IEVuY29kZU9iamVjdCBMb2dPYmplY3QgTWFpbk9iamVjdCBQYXJhbU9iamVjdCBMYXlvdXRPYmplY3QpKSB7CiAgICAgICAgJFNlbGYtPnskT2JqZWN0fSA9ICRQYXJhbXskT2JqZWN0fSB8fCBkaWUgIkdvdCBubyAkT2JqZWN0ISI7CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBPdXRwdXRTdHJpbmdDcmVhdGUoKQoKY3JlYXRlIG91dHB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+T3V0cHV0U3RyaW5nQ3JlYXRlKCk7Cgo9Y3V0CgpzdWIgT3V0cHV0U3RyaW5nQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbHVlfSApIHsKICAgICAgICAkUGFyYW17VmFsdWV9ID0gJyc7CiAgICB9CgogICAgIyB0cmFuc2xhdGUKICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHJhbnNsYXRpb259ICkgewogICAgICAgICRQYXJhbXtWYWx1ZX0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCggJFBhcmFte1ZhbHVlfSApOwogICAgfQoKICAgIG15ICRMaW5rRmVhdHVyZSAgICA9IDE7CiAgICBteSAkSFRNTFJlc3VsdE1vZGUgPSAxOwoKICAgICMgZG8gbm90IHRyYW5zZm9ybSBsaW5rcyBpbiBwcmludCB2aWV3CiAgICBpZiAoICRQYXJhbXtQcmludH0gKSB7CiAgICAgICAgJExpbmtGZWF0dXJlID0gMDsKCiAgICAgICAgIyBkbyBub3QgY29udmVydCB3aGl0ZXNwYWNlIGFuZCBuZXdsaW5lcyBpbiBQREYgbW9kZQogICAgICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1BERicpICkgewogICAgICAgICAgICAkSFRNTFJlc3VsdE1vZGUgPSAwOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRyYW5zZm9ybSBhc2NpaSB0byBodG1sCiAgICAkUGFyYW17VmFsdWV9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKAogICAgICAgIFRleHQgICAgICAgICAgID0+ICRQYXJhbXtWYWx1ZX0sCiAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gJEhUTUxSZXN1bHRNb2RlLAogICAgICAgIExpbmtGZWF0dXJlICAgID0+ICRMaW5rRmVhdHVyZSwKICAgICk7CgogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1pdGVtIEZvcm1EYXRhR2V0KCkKCmdldCBmb3JtIGRhdGEgYXMgaGFzaCByZWZlcmVuY2UKCiAgICBteSAkRm9ybURhdGFSZWYgPSAkQmFja2VuZE9iamVjdC0+Rm9ybURhdGFHZXQoKTsKCj1jdXQKCnN1YiBGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJUZvcm1EYXRhOwoKICAgICMgZ2V0IGZvcm0gZGF0YQogICAgJEZvcm1EYXRhe1ZhbHVlfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gKTsKCiAgICAjIHNldCBpbnZhbGlkIHBhcmFtCiAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1JlcXVpcmVkfSAmJiAhJEZvcm1EYXRhe1ZhbHVlfSApIHsKICAgICAgICAkRm9ybURhdGF7SW52YWxpZH0gPSAxOwogICAgICAgICRQYXJhbXtJdGVtfS0+e0Zvcm19LT57ICRQYXJhbXtLZXl9IH0tPntJbnZhbGlkfSA9IDE7CiAgICB9CgogICAgcmV0dXJuIFwlRm9ybURhdGE7Cn0KCj1pdGVtIElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIGlucHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5JbnB1dENyZWF0ZSgpOwoKPWN1dAoKc3ViIElucHV0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkVmFsdWUgPSAkUGFyYW17VmFsdWV9OwogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17VmFsdWV9ICkgewogICAgICAgICRWYWx1ZSA9ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1ZhbHVlRGVmYXVsdH0gfHwgJyc7CiAgICB9CgogICAgbXkgJENsYXNzICAgID0gJyc7CiAgICBteSAkU2l6ZSAgICAgPSAnVzUwcGMnOwogICAgbXkgJFJlcXVpcmVkID0gJFBhcmFte1JlcXVpcmVkfTsKICAgIG15ICRJbnZhbGlkICA9ICRQYXJhbXtJbnZhbGlkfTsKICAgIG15ICRJdGVtSWQgICA9ICRQYXJhbXtJdGVtSWR9OwoKICAgIGlmICgkUmVxdWlyZWQpIHsKICAgICAgICAkQ2xhc3MgLj0gJyBWYWxpZGF0ZV9SZXF1aXJlZCc7CiAgICB9CgogICAgaWYgKCRJbnZhbGlkKSB7CiAgICAgICAgJENsYXNzIC49ICcgU2VydmVyRXJyb3InOwogICAgfQogICAgJENsYXNzIC49ICcgJyAuICRTaXplOwogICAgbXkgJFN0cmluZyA9ICI8c3BhbiBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiAxLjNlbTtcIj4iOwogICAgJFN0cmluZwogICAgICAgIC49ICI8aW5wdXQgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCIgdHlwZT1cInRleHRcIiBuYW1lPVwiJFBhcmFte0tleX1cIiBjbGFzcz1cIiRDbGFzc1wiICI7CgogICAgaWYgKCRJdGVtSWQpIHsKICAgICAgICAkU3RyaW5nIC49ICJpZD1cIiRJdGVtSWRcIiAiOwogICAgfQoKICAgIGlmICgkVmFsdWUpIHsKCiAgICAgICAgIyB0cmFuc2xhdGUKICAgICAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1RyYW5zbGF0aW9ufSApIHsKICAgICAgICAgICAgJFZhbHVlID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJFZhbHVlKTsKICAgICAgICB9CgogICAgICAgICMgdHJhbnNmb3JtIGFzY2lpIHRvIGh0bWwKICAgICAgICAkVmFsdWUgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoCiAgICAgICAgICAgIFRleHQgICAgICAgICAgID0+ICRWYWx1ZSwKICAgICAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICRTdHJpbmcgLj0gInZhbHVlPVwiJFZhbHVlXCIgIjsKCiAgICAjIGFkZCBtYXhpbXVtIGxlbmd0aAogICAgaWYgKCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntNYXhMZW5ndGh9ICkgewogICAgICAgICRTdHJpbmcgLj0gIm1heGxlbmd0aD1cIiRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e01heExlbmd0aH1cIiAiOwogICAgfQoKICAgICRTdHJpbmcgLj0gJy8+IDwvc3Bhbj4nOwoKICAgIHJldHVybiAkU3RyaW5nOwp9Cgo9aXRlbSBTZWFyY2hGb3JtRGF0YUdldCgpCgpnZXQgc2VhcmNoIGZvcm0gZGF0YQoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGb3JtRGF0YUdldCgpOwoKPWN1dAoKc3ViIFNlYXJjaEZvcm1EYXRhR2V0IHsKICAgIHJldHVybiBbXTsKfQoKPWl0ZW0gU2VhcmNoSW5wdXRDcmVhdGUoKQoKY3JlYXRlIGEgc2VhcmNoIGlucHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5TZWFyY2hJbnB1dENyZWF0ZSgpOwoKPWN1dAoKc3ViIFNlYXJjaElucHV0Q3JlYXRlIHsKICAgIHJldHVybiAnJm5ic3A7JzsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbUxheW91dEdlbmVyYWxDYXRhbG9nLnBtIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW1MYXlvdXRHZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtTGF5b3V0R2VuZXJhbENhdGFsb2cgLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGxheW91dCBmdW5jdGlvbnMgb2YgZ2VuZXJhbCBjYXRhbG9nIG9iamVjdHMKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgJEJhY2tlbmRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW1MYXlvdXRHZW5lcmFsQ2F0YWxvZy0+bmV3KAogICAgICAgICVQYXJhbSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0ICgKICAgICAgICBxdyhDb25maWdPYmplY3QgRW5jb2RlT2JqZWN0IExvZ09iamVjdCBNYWluT2JqZWN0IFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCkKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPnskT2JqZWN0fSA9ICRQYXJhbXskT2JqZWN0fSB8fCBkaWUgIkdvdCBubyAkT2JqZWN0ISI7CiAgICB9CiAgICAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZy0+bmV3KCAleyRTZWxmfSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gT3V0cHV0U3RyaW5nQ3JlYXRlKCkKCmNyZWF0ZSBvdXRwdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPk91dHB1dFN0cmluZ0NyZWF0ZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgT3V0cHV0U3RyaW5nQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbHVlfSApIHsKICAgICAgICAkUGFyYW17VmFsdWV9ID0gJyc7CiAgICB9CgogICAgIyB0cmFuc2xhdGUKICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHJhbnNsYXRpb259ICkgewogICAgICAgICRQYXJhbXtWYWx1ZX0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCggJFBhcmFte1ZhbHVlfSApOwogICAgfQoKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aXRlbSBGb3JtRGF0YUdldCgpCgpnZXQgZm9ybSBkYXRhIGFzIGhhc2ggcmVmZXJlbmNlCgogICAgbXkgJEZvcm1EYXRhUmVmID0gJEJhY2tlbmRPYmplY3QtPkZvcm1EYXRhR2V0KAogICAgICAgIEtleSA9PiAnSXRlbTo6MTo6Tm9kZTo6MycsCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgRm9ybURhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICVGb3JtRGF0YTsKCiAgICAjIGdldCBmb3JtIGRhdGEKICAgICRGb3JtRGF0YXtWYWx1ZX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9ICk7CgogICAgIyBzZXQgaW52YWxpZCBwYXJhbQogICAgaWYgKCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntSZXF1aXJlZH0gJiYgISRGb3JtRGF0YXtWYWx1ZX0gKSB7CiAgICAgICAgJEZvcm1EYXRhe0ludmFsaWR9ID0gMTsKICAgICAgICAkUGFyYW17SXRlbX0tPntGb3JtfS0+eyAkUGFyYW17S2V5fSB9LT57SW52YWxpZH0gPSAxOwogICAgfQoKICAgIHJldHVybiBcJUZvcm1EYXRhOwp9Cgo9aXRlbSBJbnB1dENyZWF0ZSgpCgpjcmVhdGUgYSBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+SW5wdXRDcmVhdGUoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBWYWx1ZSA9PiAxMSwgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgSW5wdXRDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDU1NDbGFzcyA9ICcnOwogICAgbXkgJFJlcXVpcmVkID0gJFBhcmFte1JlcXVpcmVkfTsKICAgIG15ICRJbnZhbGlkICA9ICRQYXJhbXtJbnZhbGlkfTsKICAgIG15ICRJdGVtSWQgICA9ICRQYXJhbXtJdGVtSWR9OwoKICAgIGlmICgkUmVxdWlyZWQpIHsKICAgICAgICAkQ1NTQ2xhc3MgLj0gJ1ZhbGlkYXRlX1JlcXVpcmVkJzsKICAgIH0KCiAgICBpZiAoJEludmFsaWQpIHsKICAgICAgICAkQ1NTQ2xhc3MgLj0gJyBTZXJ2ZXJFcnJvcic7CiAgICB9CgogICAgIyB0cmFuc2xhdGlvbiBvbiBvciBvZmYKICAgIG15ICRUcmFuc2xhdGlvbiA9IDA7CiAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1RyYW5zbGF0aW9ufSApIHsKICAgICAgICAkVHJhbnNsYXRpb24gPSAxOwogICAgfQoKICAgICMgZ2V0IGNsYXNzIGxpc3QKICAgIG15ICRDbGFzc0xpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57Q2xhc3N9IHx8ICcnLAogICAgKTsKCiAgICAjIHJldmVyc2UgdGhlIGNsYXNzIGxpc3QKICAgIG15ICVSZXZlcnNlQ2xhc3NMaXN0ID0gcmV2ZXJzZSAleyRDbGFzc0xpc3R9OwoKICAgIG15ICRTZWxlY3RlZElEOwoKICAgICMgZ2V0IHRoZSBjdXJyZW50IHZhbHVlCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte1ZhbHVlfSApIHsKICAgICAgICAkU2VsZWN0ZWRJRCA9ICRQYXJhbXtWYWx1ZX07CiAgICB9CgogICAgIyBnZXQgdGhlIGRlZmF1bHQgaWQgYnkgZGVmYXVsdCB2YWx1ZQogICAgZWxzZSB7CiAgICAgICAgJFNlbGVjdGVkSUQgPSAkUmV2ZXJzZUNsYXNzTGlzdHsgJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VmFsdWVEZWZhdWx0fSB8fCAnJyB9IHx8ICcnOwogICAgfQoKICAgICMgZ2VuZXJhdGUgc3RyaW5nCiAgICBteSAkU3RyaW5nID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gJENsYXNzTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJFBhcmFte0tleX0sCiAgICAgICAgSUQgICAgICAgICAgID0+ICRJdGVtSWQsCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgVHJhbnNsYXRpb24gID0+ICRUcmFuc2xhdGlvbiwKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFNlbGVjdGVkSUQsCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICRDU1NDbGFzcywKICAgICk7CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCj1pdGVtIFNlYXJjaEZvcm1EYXRhR2V0KCkKCmdldCBzZWFyY2ggZm9ybSBkYXRhCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPlNlYXJjaEZvcm1EYXRhR2V0KAogICAgICAgIEtleSA9PiAnSXRlbTo6MTo6Tm9kZTo6MycsCiAgICApOwoKPWN1dAoKc3ViIFNlYXJjaEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtLZXl9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBLZXkhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBmb3JtIGRhdGEKICAgIG15IEBWYWx1ZXM7CiAgICBpZiAoICRQYXJhbXtWYWx1ZX0gKSB7CiAgICAgICAgQFZhbHVlcyA9IEB7ICRQYXJhbXtWYWx1ZX0gfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIEBWYWx1ZXMgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0QXJyYXkoIFBhcmFtID0+ICRQYXJhbXtLZXl9ICk7CiAgICB9CgogICAgcmV0dXJuIFxAVmFsdWVzOwp9Cgo9aXRlbSBTZWFyY2hJbnB1dENyZWF0ZSgpCgpjcmVhdGUgYSBzZWFyY2ggaW5wdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPlNlYXJjaElucHV0Q3JlYXRlKAogICAgICAgIEtleSA9PiAnSXRlbTo6MTo6Tm9kZTo6MycsCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgU2VhcmNoSW5wdXRDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRWYWx1ZXMgPSAkU2VsZi0+U2VhcmNoRm9ybURhdGFHZXQoJVBhcmFtKTsKCiAgICAjIHRyYW5zbGF0aW9uIG9uIG9yIG9mZgogICAgbXkgJFRyYW5zbGF0aW9uID0gMDsKICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHJhbnNsYXRpb259ICkgewogICAgICAgICRUcmFuc2xhdGlvbiA9IDE7CiAgICB9CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntDbGFzc30gfHwgJycsCiAgICApOwoKICAgICMgZ2VuZXJhdGUgc3RyaW5nCiAgICBteSAkU3RyaW5nID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiAkQ2xhc3NMaXN0LAogICAgICAgIE5hbWUgICAgICAgID0+ICRQYXJhbXtLZXl9LAogICAgICAgIFNpemUgICAgICAgID0+IDUsCiAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAkVHJhbnNsYXRpb24sCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFZhbHVlcywKICAgICk7CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbUxheW91dEludGVnZXIucG0gLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbUxheW91dEludGVnZXI7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtTGF5b3V0SW50ZWdlciAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgbGF5b3V0IGZ1bmN0aW9ucyBvZiBpbnRlZ2VyIG9iamVjdHMKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgJEJhY2tlbmRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW1MYXlvdXRJbnRlZ2VyLT5uZXcoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KENvbmZpZ09iamVjdCBFbmNvZGVPYmplY3QgTG9nT2JqZWN0IE1haW5PYmplY3QgUGFyYW1PYmplY3QgTGF5b3V0T2JqZWN0KSkgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gT3V0cHV0U3RyaW5nQ3JlYXRlKCkKCmNyZWF0ZSBvdXRwdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPk91dHB1dFN0cmluZ0NyZWF0ZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgICAgICAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIE91dHB1dFN0cmluZ0NyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbHVlfSApIHsKICAgICAgICAkUGFyYW17VmFsdWV9ID0gJyc7CiAgICB9CgogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1pdGVtIEZvcm1EYXRhR2V0KCkKCmdldCBmb3JtIGRhdGEgYXMgaGFzaCByZWZlcmVuY2UKCiAgICBteSAkRm9ybURhdGFSZWYgPSAkQmFja2VuZE9iamVjdC0+Rm9ybURhdGFHZXQoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJUZvcm1EYXRhOwoKICAgICMgZ2V0IGZvcm0gZGF0YQogICAgJEZvcm1EYXRhe1ZhbHVlfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gKTsKCiAgICAjIHNldCBpbnZhbGlkIHBhcmFtCiAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1JlcXVpcmVkfSAmJiAhJEZvcm1EYXRhe1ZhbHVlfSApIHsKICAgICAgICAkRm9ybURhdGF7SW52YWxpZH0gPSAxOwogICAgICAgICRQYXJhbXtJdGVtfS0+e0Zvcm19LT57ICRQYXJhbXtLZXl9IH0tPntJbnZhbGlkfSA9IDE7CiAgICB9CgogICAgcmV0dXJuIFwlRm9ybURhdGE7Cn0KCj1pdGVtIElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIGlucHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5JbnB1dENyZWF0ZSgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIFZhbHVlID0+IDExLCAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgbWluLCBtYXggYW5kIGRlZmF1bHQKICAgIG15ICRWYWx1ZU1pbiA9ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1ZhbHVlTWlufSB8fCAxOwogICAgbXkgJFZhbHVlTWF4ID0gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VmFsdWVNYXh9IHx8IDE7CiAgICBpZiAoICRWYWx1ZU1pbiA+ICRWYWx1ZU1heCApIHsKICAgICAgICAkVmFsdWVNaW4gPSAkVmFsdWVNYXg7CiAgICB9CiAgICBpZiAoCiAgICAgICAgJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VmFsdWVEZWZhdWx0fQogICAgICAgICYmICgKICAgICAgICAgICAgJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VmFsdWVEZWZhdWx0fSA8ICRWYWx1ZU1pbgogICAgICAgICAgICB8fCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZURlZmF1bHR9ID4gJFZhbHVlTWF4CiAgICAgICAgKQogICAgICAgICkKICAgIHsKICAgICAgICAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZURlZmF1bHR9ID0gJyc7CiAgICB9CgogICAgIyBjcmVhdGUgZGF0YSBhcnJheQogICAgbXkgJEludGVnZXJMaXN0ID0gW107CiAgICBmb3IgbXkgJENvdW50ZXIgKCAkVmFsdWVNaW4gLi4gJFZhbHVlTWF4ICkgewogICAgICAgIHB1c2ggQHskSW50ZWdlckxpc3R9LCAkQ291bnRlcjsKICAgIH0KCiAgICAjIGdlbmVyYXRlIHN0cmluZwogICAgbXkgJFN0cmluZyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+ICRJbnRlZ2VyTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJFBhcmFte0tleX0sCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbXtWYWx1ZX0gfHwgJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VmFsdWVEZWZhdWx0fSB8fCAnJywKICAgICk7CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCj1pdGVtIFNlYXJjaEZvcm1EYXRhR2V0KCkKCmdldCBzZWFyY2ggZm9ybSBkYXRhCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPlNlYXJjaEZvcm1EYXRhR2V0KAogICAgICAgIEtleSA9PiAnSXRlbTo6MTo6Tm9kZTo6MycsCiAgICApOwoKPWN1dAoKc3ViIFNlYXJjaEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtLZXl9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBLZXkhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGZvcm0gZGF0YQogICAgbXkgJFZhbHVlOwogICAgaWYgKCAkUGFyYW17VmFsdWV9ICkgewogICAgICAgICRWYWx1ZSA9ICRQYXJhbXtWYWx1ZX07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAkVmFsdWUgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9ICk7CiAgICB9CiAgICByZXR1cm4gJFZhbHVlOwp9Cgo9aXRlbSBTZWFyY2hJbnB1dENyZWF0ZSgpCgpjcmVhdGUgYSBzZWFyY2ggaW5wdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPlNlYXJjaElucHV0Q3JlYXRlKAogICAgICAgIEtleSA9PiAnSXRlbTo6MTo6Tm9kZTo6MycsCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgU2VhcmNoSW5wdXRDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IG1pbiwgbWF4CiAgICBteSAkVmFsdWVNaW4gPSAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZU1pbn0gfHwgMTsKICAgIG15ICRWYWx1ZU1heCA9ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1ZhbHVlTWF4fSB8fCAxOwogICAgaWYgKCAkVmFsdWVNaW4gPiAkVmFsdWVNYXggKSB7CiAgICAgICAgJFZhbHVlTWluID0gJFZhbHVlTWF4OwogICAgfQoKICAgICMgc2V0IHByZXNlbGVjdGVkIHZhbHVlLCBlaXRoZXIgZnJvbSBwcmV2aW91cyBzZWxlY3Rpb24gb3IgdGhlIGRlZmF1bHQKICAgIG15ICRWYWx1ZSA9ICRTZWxmLT5TZWFyY2hGb3JtRGF0YUdldCglUGFyYW0pOwogICAgaWYgKCAhZGVmaW5lZCAkVmFsdWUgKSB7CiAgICAgICAgJFZhbHVlID0gJyc7CiAgICB9CgogICAgIyBjaGVjayB3aGV0aGVyIHRoZSBwcmVzZWxlY3RlZCB2YWx1ZSBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlCiAgICBpZiAoIGRlZmluZWQgJFZhbHVlICYmICggJFZhbHVlIDwgJFZhbHVlTWluIHx8ICRWYWx1ZSA+ICRWYWx1ZU1heCApICkgewogICAgICAgICRWYWx1ZSA9ICcnOwogICAgfQoKICAgICMgY3JlYXRlIGRhdGEgYXJyYXkKICAgIG15IEBJbnRlZ2VyTGlzdCA9ICggJFZhbHVlTWluIC4uICRWYWx1ZU1heCApOwoKICAgICMgZ2VuZXJhdGUgc3RyaW5nCiAgICBteSAkU3RyaW5nID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcQEludGVnZXJMaXN0LAogICAgICAgIE5hbWUgICAgICAgID0+ICRQYXJhbXtLZXl9LAogICAgICAgIFNpemUgICAgICAgID0+IDUsCiAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICBTZWxlY3RlZElEICA9PiAkUGFyYW17VmFsdWV9IHx8ICRWYWx1ZSB8fCAnJywKICAgICAgICBNdWx0aXBsZSAgICA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbUxheW91dFRleHQucG0gLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbUxheW91dFRleHQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtTGF5b3V0VGV4dCAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgbGF5b3V0IGZ1bmN0aW9ucyBvZiB0ZXh0IG9iamVjdHMKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgJEJhY2tlbmRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW1MYXlvdXRUZXh0LT5uZXcoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KENvbmZpZ09iamVjdCBFbmNvZGVPYmplY3QgTG9nT2JqZWN0IE1haW5PYmplY3QgUGFyYW1PYmplY3QgTGF5b3V0T2JqZWN0KSkgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gT3V0cHV0U3RyaW5nQ3JlYXRlKCkKCmNyZWF0ZSBvdXRwdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPk91dHB1dFN0cmluZ0NyZWF0ZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgT3V0cHV0U3RyaW5nQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbHVlfSApIHsKICAgICAgICAkUGFyYW17VmFsdWV9ID0gJyc7CiAgICB9CgogICAgIyB0cmFuc2xhdGUKICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHJhbnNsYXRpb259ICkgewogICAgICAgICRQYXJhbXtWYWx1ZX0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCggJFBhcmFte1ZhbHVlfSApOwogICAgfQoKICAgIG15ICRMaW5rRmVhdHVyZSAgICA9IDE7CiAgICBteSAkSFRNTFJlc3VsdE1vZGUgPSAxOwoKICAgICMgZG8gbm90IHRyYW5zZm9ybSBsaW5rcyBpbiBwcmludCB2aWV3CiAgICBpZiAoICRQYXJhbXtQcmludH0gKSB7CiAgICAgICAgJExpbmtGZWF0dXJlID0gMDsKCiAgICAgICAgIyBkbyBub3QgY29udmVydCB3aGl0ZXNwYWNlIGFuZCBuZXdsaW5lcyBpbiBQREYgbW9kZQogICAgICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1BERicpICkgewogICAgICAgICAgICAkSFRNTFJlc3VsdE1vZGUgPSAwOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRyYW5zZm9ybSBhc2NpaSB0byBodG1sCiAgICAkUGFyYW17VmFsdWV9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKAogICAgICAgIFRleHQgICAgICAgICAgID0+ICRQYXJhbXtWYWx1ZX0sCiAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gJEhUTUxSZXN1bHRNb2RlLAogICAgICAgIExpbmtGZWF0dXJlICAgID0+ICRMaW5rRmVhdHVyZSwKICAgICk7CgogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1pdGVtIEZvcm1EYXRhR2V0KCkKCmdldCBmb3JtIGRhdGEgYXMgaGFzaCByZWZlcmVuY2UKCiAgICBteSAkRm9ybURhdGFSZWYgPSAkQmFja2VuZE9iamVjdC0+Rm9ybURhdGFHZXQoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJUZvcm1EYXRhOwoKICAgICMgZ2V0IGZvcm0gZGF0YQogICAgJEZvcm1EYXRhe1ZhbHVlfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gKTsKCiAgICAjIHNldCBpbnZhbGlkIHBhcmFtCiAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1JlcXVpcmVkfSAmJiAhJEZvcm1EYXRhe1ZhbHVlfSApIHsKICAgICAgICAkRm9ybURhdGF7SW52YWxpZH0gPSAxOwogICAgICAgICRQYXJhbXtJdGVtfS0+e0Zvcm19LT57ICRQYXJhbXtLZXl9IH0tPntJbnZhbGlkfSA9IDE7CiAgICB9CgogICAgIyB2YWx1ZSB3YXMgZW50ZXJlZCBpbiB0aGUgZm9ybSwgYSByZWdleCBpcyBkZWZpbmVkIGFuZCB0aGUgdmFsdWUgZG9lcyBub3QgbWF0Y2ggdGhlIHJlZ2V4CiAgICBpZiAoICRGb3JtRGF0YXtWYWx1ZX0gJiYgJFBhcmFte0l0ZW19LT57SW5wdXR9LT57UmVnRXh9ICYmICRGb3JtRGF0YXtWYWx1ZX0gIX4gbXsgJFBhcmFte0l0ZW19LT57SW5wdXR9LT57UmVnRXh9IH14bXMgKSB7CgogICAgICAgICRGb3JtRGF0YXtJbnZhbGlkfSA9IDE7CiAgICAgICAgJFBhcmFte0l0ZW19LT57Rm9ybX0tPnsgJFBhcmFte0tleX0gfS0+e0ludmFsaWR9ID0gMTsKICAgICAgICAkUGFyYW17SXRlbX0tPntGb3JtfS0+eyAkUGFyYW17S2V5fSB9LT57UmVnRXhFcnJvck1lc3NhZ2V9ID0gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57UmVnRXhFcnJvck1lc3NhZ2V9OwogICAgfQoKICAgIHJldHVybiBcJUZvcm1EYXRhOwp9Cgo9aXRlbSBJbnB1dENyZWF0ZSgpCgpjcmVhdGUgYSBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+SW5wdXRDcmVhdGUoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBWYWx1ZSA9PiAxMSwgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgSW5wdXRDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRWYWx1ZSA9ICRQYXJhbXtWYWx1ZX07CiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtWYWx1ZX0gKSB7CiAgICAgICAgJFZhbHVlID0gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VmFsdWVEZWZhdWx0fSB8fCAnJzsKICAgIH0KCiAgICBteSAkQ2xhc3MgICAgPSAnJzsKICAgIG15ICRTaXplICAgICA9ICdXNTBwYyc7CiAgICBteSAkUmVxdWlyZWQgPSAkUGFyYW17UmVxdWlyZWR9OwogICAgbXkgJEludmFsaWQgID0gJFBhcmFte0ludmFsaWR9OwogICAgbXkgJEl0ZW1JZCAgID0gJFBhcmFte0l0ZW1JZH07CgogICAgaWYgKCRSZXF1aXJlZCkgewogICAgICAgICRDbGFzcyAuPSAnIFZhbGlkYXRlX1JlcXVpcmVkJzsKICAgIH0KCiAgICBpZiAoJEludmFsaWQpIHsKICAgICAgICAkQ2xhc3MgLj0gJyBTZXJ2ZXJFcnJvcic7CiAgICB9CiAgICAkQ2xhc3MgLj0gJyAnIC4gJFNpemU7CiAgICBteSAkU3RyaW5nID0gIjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCIkUGFyYW17S2V5fVwiIGNsYXNzPVwiJENsYXNzXCIgIjsKCiAgICBpZiAoJEl0ZW1JZCkgewogICAgICAgICRTdHJpbmcgLj0gImlkPVwiJEl0ZW1JZFwiICI7CiAgICB9CgogICAgaWYgKCRWYWx1ZSkgewoKICAgICAgICAjIHRyYW5zbGF0ZQogICAgICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHJhbnNsYXRpb259ICkgewogICAgICAgICAgICAkVmFsdWUgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgkVmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgIyB0cmFuc2Zvcm0gYXNjaWkgdG8gaHRtbAogICAgICAgICRWYWx1ZSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgJFN0cmluZyAuPSAidmFsdWU9XCIkVmFsdWVcIiAiOwoKICAgICMgYWRkIG1heGltdW0gbGVuZ3RoCiAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e01heExlbmd0aH0gKSB7CiAgICAgICAgJFN0cmluZyAuPSAibWF4bGVuZ3RoPVwiJFBhcmFte0l0ZW19LT57SW5wdXR9LT57TWF4TGVuZ3RofVwiICI7CiAgICB9CgogICAgJFN0cmluZyAuPSAnLz4gJzsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWl0ZW0gU2VhcmNoRm9ybURhdGFHZXQoKQoKZ2V0IHNlYXJjaCBmb3JtIGRhdGEKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoRm9ybURhdGFHZXQoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17S2V5fSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgS2V5IScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZm9ybSBkYXRhCiAgICBteSAkVmFsdWU7CiAgICBpZiAoICRQYXJhbXtWYWx1ZX0gKSB7CiAgICAgICAgJFZhbHVlID0gJFBhcmFte1ZhbHVlfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRWYWx1ZSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gKTsKICAgIH0KICAgIHJldHVybiAkVmFsdWU7Cn0KCj1pdGVtIFNlYXJjaElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIHNlYXJjaCBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoSW5wdXRDcmVhdGUoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFZhbHVlID0gJFNlbGYtPlNlYXJjaEZvcm1EYXRhR2V0KCVQYXJhbSk7CiAgICBpZiAoICFkZWZpbmVkICRWYWx1ZSApIHsKICAgICAgICAkVmFsdWUgPSAnJzsKICAgIH0KCiAgICBteSAkU3RyaW5nID0gcXF7PGlucHV0IHR5cGU9InRleHQiIG5hbWU9IiRQYXJhbXtLZXl9IiB2YWx1ZT0iJFZhbHVlIiBjbGFzcz0iVzUwcGMiID59OwoKICAgIHJldHVybiAkU3RyaW5nOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbUxheW91dFRleHRBcmVhLnBtIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW1MYXlvdXRUZXh0QXJlYTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW1MYXlvdXRUZXh0QXJlYSAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgbGF5b3V0IGZ1bmN0aW9ucyBvZiB0ZXh0YXJlYSBvYmplY3RzCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtTGF5b3V0VGV4dEFyZWEtPm5ldygKICAgICAgICAlUGFyYW0sCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoQ29uZmlnT2JqZWN0IEVuY29kZU9iamVjdCBMb2dPYmplY3QgTWFpbk9iamVjdCBQYXJhbU9iamVjdCBMYXlvdXRPYmplY3QpKSB7CiAgICAgICAgJFNlbGYtPnskT2JqZWN0fSA9ICRQYXJhbXskT2JqZWN0fSB8fCBkaWUgIkdvdCBubyAkT2JqZWN0ISI7CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBPdXRwdXRTdHJpbmdDcmVhdGUoKQoKY3JlYXRlIG91dHB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+T3V0cHV0U3RyaW5nQ3JlYXRlKAogICAgICAgIFZhbHVlID0+IDExLCAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBPdXRwdXRTdHJpbmdDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0l0ZW19ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBJdGVtIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17VmFsdWV9ICkgewogICAgICAgICRQYXJhbXtWYWx1ZX0gPSAnJzsKICAgIH0KCiAgICAjIHRyYW5zbGF0ZQogICAgaWYgKCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUcmFuc2xhdGlvbn0gKSB7CiAgICAgICAgJFBhcmFte1ZhbHVlfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCAkUGFyYW17VmFsdWV9ICk7CiAgICB9CgogICAgbXkgJExpbmtGZWF0dXJlICAgID0gMTsKICAgIG15ICRIVE1MUmVzdWx0TW9kZSA9IDE7CgogICAgIyBkbyBub3QgdHJhbnNmb3JtIGxpbmtzIGluIHByaW50IHZpZXcKICAgIGlmICggJFBhcmFte1ByaW50fSApIHsKICAgICAgICAkTGlua0ZlYXR1cmUgPSAwOwoKICAgICAgICAjIGRvIG5vdCBjb252ZXJ0IHdoaXRlc3BhY2UgYW5kIG5ld2xpbmVzIGluIFBERiBtb2RlCiAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUERGJykgKSB7CiAgICAgICAgICAgICRIVE1MUmVzdWx0TW9kZSA9IDA7CiAgICAgICAgfQogICAgfQoKICAgICMgdHJhbnNmb3JtIGFzY2lpIHRvIGh0bWwKICAgICRQYXJhbXtWYWx1ZX0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoCiAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJFBhcmFte1ZhbHVlfSwKICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAkSFRNTFJlc3VsdE1vZGUsCiAgICAgICAgTGlua0ZlYXR1cmUgICAgPT4gJExpbmtGZWF0dXJlLAogICAgKTsKCiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWl0ZW0gRm9ybURhdGFHZXQoKQoKZ2V0IGZvcm0gZGF0YSBhcyBoYXNoIHJlZmVyZW5jZQoKICAgIG15ICRGb3JtRGF0YVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5Gb3JtRGF0YUdldCgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAlRm9ybURhdGE7CgogICAgIyBnZXQgZm9ybSBkYXRhCiAgICAkRm9ybURhdGF7VmFsdWV9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSApOwoKICAgICMgc2V0IGludmFsaWQgcGFyYW0KICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57UmVxdWlyZWR9ICYmICEkRm9ybURhdGF7VmFsdWV9ICkgewogICAgICAgICRGb3JtRGF0YXtJbnZhbGlkfSA9IDE7CiAgICAgICAgJFBhcmFte0l0ZW19LT57Rm9ybX0tPnsgJFBhcmFte0tleX0gfS0+e0ludmFsaWR9ID0gMTsKICAgIH0KCiAgICAjIHZhbHVlIHdhcyBlbnRlcmVkIGluIHRoZSBmb3JtLCBhIHJlZ2V4IGlzIGRlZmluZWQgYW5kIHRoZSB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVnZXgKICAgIGlmICggJEZvcm1EYXRhe1ZhbHVlfSAmJiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntSZWdFeH0gJiYgJEZvcm1EYXRhe1ZhbHVlfSAhfiBteyAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntSZWdFeH0gfXhtcyApIHsKCiAgICAgICAgJEZvcm1EYXRhe0ludmFsaWR9ID0gMTsKICAgICAgICAkUGFyYW17SXRlbX0tPntGb3JtfS0+eyAkUGFyYW17S2V5fSB9LT57SW52YWxpZH0gPSAxOwogICAgICAgICRQYXJhbXtJdGVtfS0+e0Zvcm19LT57ICRQYXJhbXtLZXl9IH0tPntSZWdFeEVycm9yTWVzc2FnZX0gPSAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntSZWdFeEVycm9yTWVzc2FnZX07CiAgICB9CgogICAgcmV0dXJuIFwlRm9ybURhdGE7Cn0KCj1pdGVtIElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIGlucHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5JbnB1dENyZWF0ZSgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIFZhbHVlID0+IDExLCAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJENvbHMgPSAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntDb2xzfSB8fCA1ODsKICAgIG15ICRSb3dzID0gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57Um93c30gfHwgMTA7CgogICAgbXkgJFZhbHVlID0gJFBhcmFte1ZhbHVlfTsKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbHVlfSApIHsKICAgICAgICAkVmFsdWUgPSAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZURlZmF1bHR9IHx8ICcnOwogICAgfQoKICAgIG15ICRDbGFzcyAgICA9ICdXNTBwYyc7CiAgICBteSAkUmVxdWlyZWQgPSAkUGFyYW17UmVxdWlyZWR9OwogICAgbXkgJEludmFsaWQgID0gJFBhcmFte0ludmFsaWR9OwogICAgbXkgJEl0ZW1JZCAgID0gJFBhcmFte0l0ZW1JZH07CgogICAgaWYgKCRSZXF1aXJlZCkgewogICAgICAgICRDbGFzcyAuPSAnIFZhbGlkYXRlX1JlcXVpcmVkJzsKICAgIH0KCiAgICBpZiAoJEludmFsaWQpIHsKICAgICAgICAkQ2xhc3MgLj0gJyBTZXJ2ZXJFcnJvcic7CiAgICB9CgogICAgIyB0cmFuc2xhdGUKICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHJhbnNsYXRpb259ICkgewogICAgICAgICRWYWx1ZSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCRWYWx1ZSk7CiAgICB9CiAgICBteSAkU3RyaW5nCiAgICAgICAgPSAiPHRleHRhcmVhIG5hbWU9XCIkUGFyYW17S2V5fVwiIGlkPVwiJEl0ZW1JZFwiIGNvbHM9XCIkQ29sc1wiIHJvd3M9XCIkUm93c1wiIGNsYXNzPVwiJENsYXNzXCI+JFZhbHVlPC90ZXh0YXJlYT4iOwoKICAgIHJldHVybiAkU3RyaW5nOwp9Cgo9aXRlbSBTZWFyY2hGb3JtRGF0YUdldCgpCgpnZXQgc2VhcmNoIGZvcm0gZGF0YQoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGb3JtRGF0YUdldCgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17S2V5fSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgS2V5IScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZm9ybSBkYXRhCiAgICBteSAkVmFsdWU7CiAgICBpZiAoICRQYXJhbXtWYWx1ZX0gKSB7CiAgICAgICAgJFZhbHVlID0gJFBhcmFte1ZhbHVlfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRWYWx1ZSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gKTsKICAgIH0KICAgIHJldHVybiAkVmFsdWU7Cn0KCj1pdGVtIFNlYXJjaElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIHNlYXJjaCBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoSW5wdXRDcmVhdGUoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFZhbHVlID0gJFNlbGYtPlNlYXJjaEZvcm1EYXRhR2V0KCVQYXJhbSk7CiAgICBpZiAoICFkZWZpbmVkICRWYWx1ZSApIHsKICAgICAgICAkVmFsdWUgPSAnJzsKICAgIH0KCiAgICBteSAkU3RyaW5nID0gcXF7PGlucHV0IHR5cGU9InRleHQiIG5hbWU9IiRQYXJhbXtLZXl9IiB2YWx1ZT0iJFZhbHVlIiBjbGFzcz0iVzUwcGMiPn07CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbU1lbnVHZW5lcmljLnBtCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTAgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW1NZW51R2VuZXJpYzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBFbmNvZGVPYmplY3QgTG9nT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBDb25maWdJdGVtT2JqZWN0IFVzZXJJRCkKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPnskT2JqZWN0fSA9ICRQYXJhbXskT2JqZWN0fSB8fCBkaWUgIkdvdCBubyAkT2JqZWN0ISI7CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDb25maWdJdGVtfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyggUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAnTmVlZCBDb25maWdJdGVtIScgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBncmFudCBhY2Nlc3MgYnkgZGVmYXVsdAogICAgbXkgJEFjY2VzcyA9IDE7CgogICAgIyBnZXQgZ3JvdXBzCiAgICBteSAkQWN0aW9uID0gJFBhcmFte0NvbmZpZ30tPntBY3Rpb259OwogICAgaWYgKCAkQWN0aW9uIGVxICdBZ2VudExpbmtPYmplY3QnICkgewoKICAgICAgICAjIFRoZSBMaW5rLWxpbmsgaXMgYSBzcGVjaWFsIGNhc2UsIGFzIGl0IGlzIG5vdCBzcGVjaWZpYyB0byBJVFNNQ29uZmlnSXRlbS4KICAgICAgICAjIEFzIGEgd29ya2Fyb3VuZCB3ZSBoYXJkY29kZSB0aGF0IEFnZW50TGlua09iamVjdCBpcyB0cmVhdGVkIGxpa2UgQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICAgICAkQWN0aW9uID0gJ0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0JzsKICAgIH0KICAgIG15ICRHcm91cHNSbyA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPnskQWN0aW9ufS0+e0dyb3VwUm99IHx8IFtdOwogICAgbXkgJEdyb3Vwc1J3ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyRBY3Rpb259LT57R3JvdXB9ICAgfHwgW107CgogICAgIyBjaGVjayBwZXJtaXNzaW9uCiAgICBpZiAoICRBY3Rpb24gJiYgKCBAeyRHcm91cHNSb30gfHwgQHskR3JvdXBzUnd9ICkgKSB7CgogICAgICAgICMgZGVueSBhY2Nlc3MgYnkgZGVmYXVsdCwgd2hlbiB0aGVyZSBhcmUgZ3JvdXBzIHRvIGNoZWNrCiAgICAgICAgJEFjY2VzcyA9IDA7CgogICAgICAgICMgY2hlY2sgcmVhZCBvbmx5IGdyb3VwcwogICAgICAgIFJPR1JPVVA6CiAgICAgICAgZm9yIG15ICRSb0dyb3VwICggQHskR3JvdXBzUm99ICkgewoKICAgICAgICAgICAgbmV4dCBST0dST1VQIGlmICEkU2VsZi0+e0xheW91dE9iamVjdH0tPnsiVXNlcklzR3JvdXBSb1skUm9Hcm91cF0ifTsKICAgICAgICAgICAgbmV4dCBST0dST1VQIGlmICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+eyJVc2VySXNHcm91cFJvWyRSb0dyb3VwXSJ9IG5lICdZZXMnOwoKICAgICAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgICAgICBsYXN0IFJPR1JPVVA7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHJlYWQgd3JpdGUgZ3JvdXBzCiAgICAgICAgUldHUk9VUDoKICAgICAgICBmb3IgbXkgJFJ3R3JvdXAgKCBAeyRHcm91cHNSd30gKSB7CgogICAgICAgICAgICBuZXh0IFJXR1JPVVAgaWYgISRTZWxmLT57TGF5b3V0T2JqZWN0fS0+eyJVc2VySXNHcm91cFskUndHcm91cF0ifTsKICAgICAgICAgICAgbmV4dCBSV0dST1VQIGlmICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+eyJVc2VySXNHcm91cFskUndHcm91cF0ifSBuZSAnWWVzJzsKCiAgICAgICAgICAgICMgc2V0IGFjY2VzcwogICAgICAgICAgICAkQWNjZXNzID0gMTsKICAgICAgICAgICAgbGFzdCBSV0dST1VQOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9IGlmICEkQWNjZXNzOwoKICAgICMgb3V0cHV0IG1lbnUgYmxvY2sKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ01lbnUnICk7CgogICAgIyBvdXRwdXQgbWVudSBpdGVtCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01lbnVJdGVtJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyAkUGFyYW17Q29uZmlnSXRlbX0gfSwKICAgICAgICAgICAgJXsgJFBhcmFte0NvbmZpZ30gfSwKICAgICAgICB9LAogICAgKTsKICAgICRQYXJhbXtDb3VudGVyfSsrOwoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn07Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwucG0KIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGw7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSBLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IFVzZXJJRCBVc2VyT2JqZWN0IE1haW5PYmplY3QpCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMtPm5ldyggJXskU2VsZn0gKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFBhZ2VTaG93biBTdGFydEhpdCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIG5lZWQgQ29uZmlnSXRlbUlEcwogICAgaWYgKCAhJFBhcmFte0NvbmZpZ0l0ZW1JRHN9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCB0aGUgQ29uZmlnSXRlbUlEcyEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZGVmaW5lIGluY2lkZW50IHNpZ25hbHMsIG5lZWRlZCBmb3Igc2VydmljZXMKICAgIG15ICVJbmNpU2lnbmFscyA9ICgKICAgICAgICBvcGVyYXRpb25hbCA9PiAnZ3JlZW5sZWQnLAogICAgICAgIHdhcm5pbmcgICAgID0+ICd5ZWxsb3dsZWQnLAogICAgICAgIGluY2lkZW50ICAgID0+ICdyZWRsZWQnLAogICAgKTsKCiAgICAjIHN0b3JlIGVpdGhlciBDb25maWdJdGVtIElEcyBMb2NhbGx5CiAgICBteSBAQ29uZmlnSXRlbUlEcyA9IEB7ICRQYXJhbXtDb25maWdJdGVtSURzfSB9OwoKICAgICMgY2hlY2sgU2hvd0NvbHVtbnMgcGFyYW1ldGVyCiAgICBteSBAU2hvd0NvbHVtbnM7CiAgICBpZiAoICRQYXJhbXtTaG93Q29sdW1uc30gJiYgcmVmICRQYXJhbXtTaG93Q29sdW1uc30gZXEgJ0FSUkFZJyApIHsKICAgICAgICBAU2hvd0NvbHVtbnMgPSBAeyAkUGFyYW17U2hvd0NvbHVtbnN9IH07CiAgICB9CgogICAgIyBidWlsZCBjb2x1bW4gaGVhZGVyIGJsb2NrcwogICAgaWYgKEBTaG93Q29sdW1ucykgewogICAgICAgIGZvciBteSAkQ29sdW1uIChAU2hvd0NvbHVtbnMpIHsKCiAgICAgICAgICAgICMgY3JlYXRlIG5lZWRlZCB2ZXJpYWJsZXMKICAgICAgICAgICAgbXkgJENTUyA9ICcnOwogICAgICAgICAgICBteSAkT3JkZXJCeTsKCiAgICAgICAgICAgICMgcmVtb3ZlIElEIGlmIG5lY2VzYXJ5CiAgICAgICAgICAgIGlmICggJFBhcmFte1NvcnRCeX0gKSB7CiAgICAgICAgICAgICAgICAkUGFyYW17U29ydEJ5fQogICAgICAgICAgICAgICAgICAgID0gKCAkUGFyYW17U29ydEJ5fSBlcSAnSW5jaVN0YXRlSUQnICkKICAgICAgICAgICAgICAgICAgICA/ICdDdXJJbmNpU3RhdGUnCiAgICAgICAgICAgICAgICAgICAgOiAoICRQYXJhbXtTb3J0Qnl9IGVxICdEZXBsU3RhdGVJRCcgKSA/ICdDdXJEZXBsU3RhdGUnCiAgICAgICAgICAgICAgICAgICAgOiAoICRQYXJhbXtTb3J0Qnl9IGVxICdDbGFzc0lEJyApICAgICA/ICdDbGFzcycKICAgICAgICAgICAgICAgICAgICA6ICggJFBhcmFte1NvcnRCeX0gZXEgJ0NoYW5nZVRpbWUnICkgID8gJ0xhc3RDaGFuZ2VkJwogICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGFyYW17U29ydEJ5fTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgdGhlIGNvcnJlY3QgU2V0IENTUyBjbGFzcyBhbmQgb3JkZXIgYnkgbGluawogICAgICAgICAgICBpZiAoICRQYXJhbXtTb3J0Qnl9ICYmICggJFBhcmFte1NvcnRCeX0gZXEgJENvbHVtbiApICkgewogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17T3JkZXJCeX0gJiYgKCAkUGFyYW17T3JkZXJCeX0gZXEgJ1VwJyApICkgewogICAgICAgICAgICAgICAgICAgICRPcmRlckJ5ID0gJ0Rvd24nOwogICAgICAgICAgICAgICAgICAgICRDU1MgLj0gJyBTb3J0RGVzY2VuZGluZyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkT3JkZXJCeSA9ICdVcCc7CiAgICAgICAgICAgICAgICAgICAgJENTUyAuPSAnIFNvcnRBc2NlbmRpbmcnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJE9yZGVyQnkgPSAnVXAnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4gLiAnSGVhZGVyJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBDU1MgICAgID0+ICRDU1MsCiAgICAgICAgICAgICAgICAgICAgT3JkZXJCeSA9PiAkT3JkZXJCeSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgWE1MIGNvbHVtbiBoZWFkZXJzIG9ubHkgaWYgdGhlIGZpbHRlciBpcyBub3Qgc2V0IHRvICdhbGwnCiAgICAgICAgIyBhbmQgaWYgdGhlcmUgYXJlIENJcyB0byBzaG93CiAgICAgICAgaWYgKCAkUGFyYW17RmlsdGVyfSAmJiAkUGFyYW17RmlsdGVyfSBuZSAnQWxsJyAmJiBAQ29uZmlnSXRlbUlEcykgewoKICAgICAgICAgICAgIyBnZXQgdGhlIHZlcnNpb24gZGF0YSBvZiB0aGUgZmlyc3QgY29uZmlnIGl0ZW0sIGluY2x1ZGluZyBhbGwgdGhlIFhNTCBkYXRhCiAgICAgICAgICAgICMgdG8gZ2V0IHRoZSBjb2x1bW4gaGVhZGVyIG5hbWVzCiAgICAgICAgICAgIG15ICRDb25maWdJdGVtID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkdldCgKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlEc1swXSwKICAgICAgICAgICAgICAgIFhNTERhdGFHZXQgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjb252ZXJ0IHRoZSBYTUwgZGF0YSBpbnRvIGEgaGFzaAogICAgICAgICAgICBteSAkRXh0ZW5kZWRWZXJzaW9uRGF0YSA9ICRTZWxmLT5fWE1MRGF0YTJIYXNoKAogICAgICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkQ29uZmlnSXRlbS0+e1hNTERlZmluaXRpb259LAogICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgICA9PiAkQ29uZmlnSXRlbS0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufS0+WzFdLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgdGhlIHhtbCBjb2x1bW5zICh0aGV5IGNvbnRhaW4gOjopCiAgICAgICAgICAgIG15IEBYTUxTaG93Q29sdW1ucyA9IGdyZXAgLzo6LywgQFNob3dDb2x1bW5zOwoKICAgICAgICAgICAgQ09MVU1OOgogICAgICAgICAgICBmb3IgbXkgJENvbHVtbiAoIEBYTUxTaG93Q29sdW1ucyApIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIGNvbHVtbiBleGlzdHMgaW4gQ0ktRGF0YQogICAgICAgICAgICAgICAgbmV4dCBDT0xVTU4gaWYgISRFeHRlbmRlZFZlcnNpb25EYXRhLT57JENvbHVtbn0tPntOYW1lfTsKCiAgICAgICAgICAgICAgICAjIHNob3cgdGhlIHhtbCBhdHRyaWJ1dGUgaGVhZGVyCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZFhNTEF0dHJpYnV0ZUhlYWRlcicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgWE1MQXR0cmlidXRlSGVhZGVyID0+ICRFeHRlbmRlZFZlcnNpb25EYXRhLT57JENvbHVtbn0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBteSAkT3V0cHV0ICA9ICcnOwogICAgbXkgJENvdW50ZXIgPSAwOwoKICAgICMgc2hvdyBjb25maWcgaXRlbXMgaWYgdGhlcmUgYXJlIHNvbWUKICAgIGlmIChAQ29uZmlnSXRlbUlEcykgewoKICAgICAgICAjIHRvIHN0b3JlIGFsbCBkYXRhCiAgICAgICAgbXkgJURhdGE7CgogICAgICAgIENvbmZpZ0l0ZW1JRDoKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoQENvbmZpZ0l0ZW1JRHMpIHsKICAgICAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJENvdW50ZXIgPj0gJFBhcmFte1N0YXJ0SGl0fQogICAgICAgICAgICAgICAgJiYgJENvdW50ZXIgPCAoICRQYXJhbXtQYWdlU2hvd259ICsgJFBhcmFte1N0YXJ0SGl0fSApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBhY2Nlc3MgcmlnaHRzCiAgICAgICAgICAgICAgICBteSAkSGFzQWNjZXNzID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+UGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICBTY29wZSAgPT4gJ0l0ZW0nLAogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IENvbmZpZ0l0ZW1JRCBpZiAhJEhhc0FjY2VzczsKCiAgICAgICAgICAgICAgICAjIGdldCBjb25maWcgaXRlbSBkYXRhCiAgICAgICAgICAgICAgICBteSAkQ29uZmlnSXRlbSA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlZlcnNpb25HZXQoCiAgICAgICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YUdldCAgID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG5leHQgQ29uZmlnSXRlbUlEIGlmICEkQ29uZmlnSXRlbTsKCiAgICAgICAgICAgICAgICAjIGNvbnZlcnQgdGhlIFhNTCBkYXRhIGludG8gYSBoYXNoCiAgICAgICAgICAgICAgICBteSAkRXh0ZW5kZWRWZXJzaW9uRGF0YSA9ICRTZWxmLT5fWE1MRGF0YTJIYXNoKAogICAgICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJENvbmZpZ0l0ZW0tPntYTUxEZWZpbml0aW9ufSwKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgID0+ICRDb25maWdJdGVtLT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259LT5bMV0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSB4bWwgY29sdW1ucyAodGhleSBjb250YWluIDo6KQogICAgICAgICAgICAgICAgbXkgQFhNTFNob3dDb2x1bW5zID0gZ3JlcCAvOjovLCBAU2hvd0NvbHVtbnM7CgogICAgICAgICAgICAgICAgIyBzdG9yZSBjb25maWcgaXRlbSBkYXRhLAogICAgICAgICAgICAgICAgJURhdGEgPSAleyRDb25maWdJdGVtfTsKCiAgICAgICAgICAgICAgICAjIGJ1aWxkIHJlY29yZCBibG9jawogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYnVpbGQgY29sdW1uIHJlY29yZCBibG9ja3MKICAgICAgICAgICAgICAgIGlmIChAU2hvd0NvbHVtbnMpIHsKICAgICAgICAgICAgICAgICAgICBDT0xVTU46CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKEBTaG93Q29sdW1ucykgewogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVNpZ25hbCA9PiAkSW5jaVNpZ25hbHN7ICREYXRhe0N1ckluY2lTdGF0ZVR5cGV9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBzaG93IGxpbmtzIGlmIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4gLiAnTGlua1N0YXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiAuICdMaW5rRW5kJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBDT0xVTU46CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKCBAWE1MU2hvd0NvbHVtbnMgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIGNvbHVtbiBleGlzdHMgaW4gQ0ktRGF0YQogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IENPTFVNTiBpZiAhJEV4dGVuZGVkVmVyc2lvbkRhdGEtPnskQ29sdW1ufS0+e05hbWV9OwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IHRvIGFzY2lpIHRleHQgaW4gY2FzZSB0aGUgdmFsdWUgY29udGFpbnMgaHRtbAogICAgICAgICAgICAgICAgICAgICAgICBteSAkVmFsdWUgPSAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0tPlRvQXNjaWkoIFN0cmluZyA9PiAkRXh0ZW5kZWRWZXJzaW9uRGF0YS0+eyRDb2x1bW59LT57VmFsdWV9ICkgfHwgJyc7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgYWxsIHdoaXRlc3BhY2UgYW5kIG5ld2xpbmVzIHRvIHNpbmdsZSBzcGFjZXMKICAgICAgICAgICAgICAgICAgICAgICAgJFZhbHVlID1+IHN7IFxzKyB9eyB9Z3htczsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2hvdyB0aGUgeG1sIGF0dHJpYnV0ZSBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmRYTUxBdHRyaWJ1dGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTEF0dHJpYnV0ZURhdGEgPT4gJFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBpZiB0aGVyZSBhcmUgbm8gY29uZmlnIGl0ZW1zIHRvIHNob3csIGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlIGlzIGRpc3BsYXllZCBpbiB0aGUgdGFibGUKICAgIGVsc2UgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vRGF0YUZvdW5kTXNnJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUb3RhbENvbHVtbnMgPT4gc2NhbGFyIEBTaG93Q29sdW1ucywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgdXNlIHRlbXBsYXRlCiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJFNlbGYtPntWaWV3VHlwZX0sCiAgICAgICAgICAgIENvbHVtbkNvdW50ID0+IHNjYWxhciBAU2hvd0NvbHVtbnMsCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCj1vdmVyCgo9aXRlbSBfWE1MRGF0YTJIYXNoKCkKCnJldHVybnMgYSBoYXNoIHJlZmVyZW5jZSB3aXRoIGFsbCB4bWwgZGF0YSBvZiBhIGNvbmZpZyBpdGVtCgpSZXR1cm4KCiAgICAkRGF0YSA9IHsKICAgICAgICAnSGFyZERpc2s6OjInID0+IHsKICAgICAgICAgICAgVmFsdWUgPT4gJ0hEMicsCiAgICAgICAgICAgIE5hbWUgID0+ICdIYXJkIERpc2snLAogICAgICAgICB9LAogICAgICAgICdDUFU6OjEnID0+IHsKICAgICAgICAgICAgVmFsdWUgPT4gJycsCiAgICAgICAgICAgIE5hbWUgID0+ICdDUFUnLAogICAgICAgIH0sCiAgICAgICAgJ0hhcmREaXNrOjoyOjpDYXBhY2l0eTo6MScgPT4gewogICAgICAgICAgICBWYWx1ZSA9PiAnNzgwIEdCJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0NhcGFjaXR5JywKICAgICAgICB9LAogICAgfTsKCiAgICBteSAkRGF0YSA9IF9YTUxEYXRhMkhhc2goCiAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkVmVyc2lvbi0+e1hNTERlZmluaXRpb259LAogICAgICAgIFhNTERhdGEgICAgICAgPT4gJFZlcnNpb24tPntYTUxEYXRhfS0+WzFdLT57VmVyc2lvbn0tPlsxXSwKICAgICAgICBEYXRhICAgICAgICAgID0+IFwlRGF0YUhhc2hSZWYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbAogICAgICAgIFByZWZpeCAgICAgICAgPT4gJ0hhcmREaXNrOjoxJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsCiAgICApOwoKPWN1dAoKc3ViIF9YTUxEYXRhMkhhc2ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGF0YX07CiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxEZWZpbml0aW9ufTsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERhdGF9IG5lICdIQVNIJzsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERlZmluaXRpb259IG5lICdBUlJBWSc7CgogICAgIyB0byBzdG9yZSB0aGUgcmV0dXJuIGRhdGEKICAgIG15ICREYXRhID0gJFBhcmFte0RhdGF9IHx8IHt9OwoKICAgIElURU06CiAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17WE1MRGVmaW5pdGlvbn0gfSApIHsKICAgICAgICBDT1VOVEVSOgogICAgICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gJEl0ZW0tPntDb3VudE1heH0gKSB7CgogICAgICAgICAgICAjIGxvb2t1cCB2YWx1ZQogICAgICAgICAgICBteSAkVmFsdWUgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5YTUxWYWx1ZUxvb2t1cCgKICAgICAgICAgICAgICAgIEl0ZW0gID0+ICRJdGVtLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1hNTERhdGF9LT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLT57Q29udGVudH0gfHwgJycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNyZWF0ZSBvdXRwdXQgc3RyaW5nCiAgICAgICAgICAgICRWYWx1ZSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SVRTTUNvbmZpZ0l0ZW1PdXRwdXRTdHJpbmdDcmVhdGUoCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWUsCiAgICAgICAgICAgICAgICBJdGVtICA9PiAkSXRlbSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIHByZWZpeAogICAgICAgICAgICBteSAkUHJlZml4ID0gJEl0ZW0tPntLZXl9IC4gJzo6JyAuICRDb3VudGVyOwogICAgICAgICAgICBpZiAoICRQYXJhbXtQcmVmaXh9ICkgewogICAgICAgICAgICAgICAgJFByZWZpeCA9ICRQYXJhbXtQcmVmaXh9IC4gJzo6JyAuICRQcmVmaXg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3RvcmUgdGhlIGl0ZW0gaW4gaGFzaAogICAgICAgICAgICAkRGF0YS0+eyRQcmVmaXh9ID0gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJEl0ZW0tPntOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZSwKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICMgc3RhcnQgcmVjdXJzaW9uLCBpZiAiU3ViIiB3YXMgZm91bmQKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e1N1Yn0gKSB7CiAgICAgICAgICAgICAgICAkRGF0YSA9ICRTZWxmLT5fWE1MRGF0YTJIYXNoKAogICAgICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgPT4gJFBhcmFte1hNTERhdGF9LT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLAogICAgICAgICAgICAgICAgICAgIFByZWZpeCAgICAgICAgPT4gJFByZWZpeCwKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgID0+ICREYXRhLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJERhdGE7Cn0KCjE7Cgo9YmFjawoK
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXRJVFNNQ29uZmlnSXRlbS5wbSAtIHByb3ZpZGVzIGdlbmVyaWMgSFRNTCBvdXRwdXQgZm9yIElUU01Db25maWdJdGVtCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0SVRTTUNvbmZpZ0l0ZW07Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dElUU01Db25maWdJdGVtIC0gYWxsIENvbmZpZ0l0ZW0tcmVsYXRlZCBIVE1MIGZ1bmN0aW9ucwoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgSVRTTSBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQtcmVsYXRlZCBIVE1MIGZ1bmN0aW9ucwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1pdGVtIElUU01Db25maWdJdGVtT3V0cHV0U3RyaW5nQ3JlYXRlKCkKCnJldHVybnMgYSBvdXRwdXQgc3RyaW5nCgogICAgbXkgJFN0cmluZyA9ICRMYXlvdXRPYmplY3QtPklUU01Db25maWdJdGVtT3V0cHV0U3RyaW5nQ3JlYXRlKAogICAgICAgIFZhbHVlID0+IDExLCAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBJdGVtICA9PiAkSXRlbVJlZiwKICAgICAgICBQcmludCA9PiAxLCAgICAgICAgIyAob3B0aW9uYWwsIGRlZmF1bHQgMCkKICAgICk7Cgo9Y3V0CgpzdWIgSVRTTUNvbmZpZ0l0ZW1PdXRwdXRTdHJpbmdDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0l0ZW19ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBJdGVtIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvYWQgYmFja2VuZAogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkU2VsZi0+X0lUU01Mb2FkTGF5b3V0QmFja2VuZCgKICAgICAgICBUeXBlID0+ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1R5cGV9LAogICAgKTsKCiAgICByZXR1cm4gJycgaWYgISRCYWNrZW5kT2JqZWN0OwoKICAgICMgZ2VuZXJhdGUgb3V0cHV0IHN0cmluZwogICAgbXkgJFN0cmluZyA9ICRCYWNrZW5kT2JqZWN0LT5PdXRwdXRTdHJpbmdDcmVhdGUoJVBhcmFtKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWl0ZW0gSVRTTUNvbmZpZ0l0ZW1Gb3JtRGF0YUdldCgpCgpyZXR1cm5zIHRoZSB2YWx1ZXMgZnJvbSB0aGUgaHRtbCBmb3JtIGFzIGhhc2ggcmVmZXJlbmNlCgogICAgbXkgJEZvcm1EYXRhUmVmID0gJExheW91dE9iamVjdC0+SVRTTUNvbmZpZ0l0ZW1Gb3JtRGF0YUdldCgKICAgICAgICBLZXkgICAgICAgICAgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIEl0ZW0gICAgICAgICA9PiAkSXRlbVJlZiwKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBJVFNNQ29uZmlnSXRlbUZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtIENvbmZpZ0l0ZW1JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGxvYWQgYmFja2VuZAogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkU2VsZi0+X0lUU01Mb2FkTGF5b3V0QmFja2VuZCgKICAgICAgICBUeXBlID0+ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1R5cGV9LAogICAgKTsKCiAgICByZXR1cm4ge30gaWYgISRCYWNrZW5kT2JqZWN0OwoKICAgICMgZ2V0IGZvcm0gZGF0YQogICAgbXkgJEZvcm1EYXRhID0gJEJhY2tlbmRPYmplY3QtPkZvcm1EYXRhR2V0KCVQYXJhbSk7CgogICAgcmV0dXJuICRGb3JtRGF0YTsKfQoKPWl0ZW0gSVRTTUNvbmZpZ0l0ZW1JbnB1dENyZWF0ZSgpCgpyZXR1cm5zIGEgaW5wdXQgZmllbGQgaHRtbCBzdHJpbmcKCiAgICBteSAkU3RyaW5nID0gJExheW91dE9iamVjdC0+SVRTTUNvbmZpZ0l0ZW1JbnB1dENyZWF0ZSgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIFZhbHVlID0+IDExLCAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBJVFNNQ29uZmlnSXRlbUlucHV0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbG9hZCBiYWNrZW5kCiAgICBteSAkQmFja2VuZE9iamVjdCA9ICRTZWxmLT5fSVRTTUxvYWRMYXlvdXRCYWNrZW5kKAogICAgICAgIFR5cGUgPT4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHlwZX0sCiAgICApOwoKICAgIHJldHVybiAnJyBpZiAhJEJhY2tlbmRPYmplY3Q7CgogICAgIyBsb29rdXAgaXRlbSB2YWx1ZQogICAgbXkgJFN0cmluZyA9ICRCYWNrZW5kT2JqZWN0LT5JbnB1dENyZWF0ZSglUGFyYW0pOwoKICAgIHJldHVybiAkU3RyaW5nOwp9Cgo9aXRlbSBJVFNNQ29uZmlnSXRlbVNlYXJjaEZvcm1EYXRhR2V0KCkKCnJldHVybnMgdGhlIHZhbHVlcyBmcm9tIHRoZSBzZWFyY2ggaHRtbCBmb3JtCgogICAgbXkgJEFycmF5UmVmID0gJExheW91dE9iamVjdC0+SVRTTUNvbmZpZ0l0ZW1TZWFyY2hGb3JtRGF0YUdldCgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIElUU01Db25maWdJdGVtU2VhcmNoRm9ybURhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBsb2FkIGJhY2tlbmQKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJFNlbGYtPl9JVFNNTG9hZExheW91dEJhY2tlbmQoCiAgICAgICAgVHlwZSA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUeXBlfSwKICAgICk7CgogICAgcmV0dXJuIFtdIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIGdldCBmb3JtIGRhdGEKICAgIG15ICRWYWx1ZXMgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoRm9ybURhdGFHZXQoJVBhcmFtKTsKCiAgICByZXR1cm4gJFZhbHVlczsKfQoKPWl0ZW0gSVRTTUNvbmZpZ0l0ZW1TZWFyY2hJbnB1dENyZWF0ZSgpCgpyZXR1cm5zIGEgc2VhcmNoIGlucHV0IGZpZWxkIGh0bWwgc3RyaW5nCgogICAgbXkgJFN0cmluZyA9ICRMYXlvdXRPYmplY3QtPklUU01Db25maWdJdGVtU2VhcmNoSW5wdXRDcmVhdGUoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBJVFNNQ29uZmlnSXRlbVNlYXJjaElucHV0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbG9hZCBiYWNrZW5kCiAgICBteSAkQmFja2VuZE9iamVjdCA9ICRTZWxmLT5fSVRTTUxvYWRMYXlvdXRCYWNrZW5kKAogICAgICAgIFR5cGUgPT4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHlwZX0sCiAgICApOwoKICAgIHJldHVybiAnJyBpZiAhJEJhY2tlbmRPYmplY3Q7CgogICAgIyBsb29rdXAgaXRlbSB2YWx1ZQogICAgbXkgJFN0cmluZyA9ICRCYWNrZW5kT2JqZWN0LT5TZWFyY2hJbnB1dENyZWF0ZSglUGFyYW0pOwoKICAgIHJldHVybiAkU3RyaW5nOwp9Cgo9aXRlbSBfSVRTTUxvYWRMYXlvdXRCYWNrZW5kKCkKCmxvYWQgYSBpbnB1dCB0eXBlIGJhY2tlbmQgbW9kdWxlCgogICAgJEJhY2tlbmRPYmplY3QgPSAkTGF5b3V0T2JqZWN0LT5fSVRTTUxvYWRMYXlvdXRCYWNrZW5kKAogICAgICAgIFR5cGUgPT4gJ0dlbmVyYWxDYXRhbG9nJywKICAgICk7Cgo9Y3V0CgpzdWIgX0lUU01Mb2FkTGF5b3V0QmFja2VuZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIGlmICggISRQYXJhbXtUeXBlfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVHlwZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRHZW5lcmljTW9kdWxlID0gIktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbUxheW91dCRQYXJhbXtUeXBlfSI7CgogICAgIyBsb2FkIHRoZSBiYWNrZW5kIG1vZHVsZQogICAgaWYgKCAhJFNlbGYtPntNYWluT2JqZWN0fS0+UmVxdWlyZSgkR2VuZXJpY01vZHVsZSkgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBsb2FkIGJhY2tlbmQgbW9kdWxlICRQYXJhbXtUeXBlfSEiCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgbmV3IGluc3RhbmNlCiAgICBteSAkQmFja2VuZE9iamVjdCA9ICRHZW5lcmljTW9kdWxlLT5uZXcoCiAgICAgICAgJXskU2VsZn0sCiAgICAgICAgJVBhcmFtLAogICAgICAgIExheW91dE9iamVjdCA9PiAkU2VsZiwKICAgICk7CgogICAgaWYgKCAhJEJhY2tlbmRPYmplY3QgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYmFja2VuZCBtb2R1bGUgJFBhcmFte1R5cGV9ISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuICRCYWNrZW5kT2JqZWN0Owp9Cgo9aXRlbSBJVFNNQ29uZmlnSXRlbUxpc3RTaG93KCkKClJldHVybnMgYSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXMgc29ydGFibGUgbGlzdCB3aXRoIHBhZ2luYXRpb24uCgpUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gTDxLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0VGlja2V0OjpUaWNrZXRMaXN0U2hvdygpPgppbiBGPEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXRUaWNrZXQucG0+LgoKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5JVFNNQ29uZmlnSXRlbUxpc3RTaG93KAogICAgICAgIENvbmZpZ0l0ZW1JRHMgPT4gJENvbmZpZ0l0ZW1JRHNSZWYsICAgICAgICAgICAgICAgICAgIyB0b3RhbCBsaXN0IG9mIGNvbmZpZyBpdGVtIGlkcywgdGhhdCBjYW4gYmUgbGlzdGVkCiAgICAgICAgVG90YWwgICAgICAgICA9PiBzY2FsYXIgQHsgJENvbmZpZ0l0ZW1JRHNSZWYgfSwgICAgICAjIHRvdGFsIG51bWJlciBvZiBsaXN0IGl0ZW1zLCBjb25maWcgaXRlbXMgaW4gdGhpcyBjYXNlCiAgICAgICAgVmlldyAgICAgICAgICA9PiAkU2VsZi0+e1ZpZXd9LCAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAnU21hbGwnCiAgICAgICAgRmlsdGVyICAgICAgICA9PiAnQWxsJywKICAgICAgICBGaWx0ZXJzICAgICAgID0+IFwlTmF2QmFyRmlsdGVyLAogICAgICAgIEZpbHRlckxpbmsgICAgPT4gJExpbmtGaWx0ZXIsCiAgICAgICAgVGl0bGVOYW1lICAgICA9PiAnT3ZlcnZpZXc6IENvbmZpZyBJdGVtOiBDb21wdXRlcicsCiAgICAgICAgVGl0bGVWYWx1ZSAgICA9PiAkU2VsZi0+e0ZpbHRlcn0sCiAgICAgICAgRW52ICAgICAgICAgICA9PiAkU2VsZiwKICAgICAgICBMaW5rUGFnZSAgICAgID0+ICRMaW5rUGFnZSwKICAgICAgICBMaW5rU29ydCAgICAgID0+ICRMaW5rU29ydCwKICAgICAgICBGcm9udGVuZCAgICAgID0+ICdBZ2VudCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAoQWdlbnR8Q3VzdG9tZXIpLCBkZWZhdWx0OiBBZ2VudCwgaW5kaWNhdGVzIGZyb20gd2hpY2ggZnJvbnRlbmQgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkCiAgICApOwoKPWN1dAoKc3ViIElUU01Db25maWdJdGVtTGlzdFNob3cgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHRha2Ugb2JqZWN0IHJlZiB0byBsb2NhbCwgcmVtb3ZlIGl0IGZyb20gJVBhcmFtIChwcmV2ZW50IG1lbW9yeSBsZWFrKQogICAgbXkgJEVudiA9IGRlbGV0ZSAkUGFyYW17RW52fTsKCiAgICAjIGxvb2t1cCBsYXRlc3QgdXNlZCB2aWV3IG1vZGUKICAgIGlmICggISRQYXJhbXtWaWV3fSAmJiAkU2VsZi0+eyAnVXNlcklUU01Db25maWdJdGVtT3ZlcnZpZXcnIC4gJEVudi0+e0FjdGlvbn0gfSApIHsKICAgICAgICAkUGFyYW17Vmlld30gPSAkU2VsZi0+eyAnVXNlcklUU01Db25maWdJdGVtT3ZlcnZpZXcnIC4gJEVudi0+e0FjdGlvbn0gfTsKICAgIH0KCiAgICAjIHNldCBmcm9udGVuZAogICAgbXkgJEZyb250ZW5kID0gJFBhcmFte0Zyb250ZW5kfSB8fCAnQWdlbnQnOwoKICAgICMgc2V0IGRlZmF1dCB2aWV3IG1vZGUgdG8gJ3NtYWxsJwogICAgbXkgJFZpZXcgPSAkUGFyYW17Vmlld30gfHwgJ1NtYWxsJzsKCiAgICAjIHN0b3JlIGxhdGVzdCB2aWV3IG1vZGUKICAgICRTZWxmLT57U2Vzc2lvbk9iamVjdH0tPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnVXNlcklUU01Db25maWdJdGVtT3ZlcnZpZXcnIC4gJEVudi0+e0FjdGlvbn0sCiAgICAgICAgVmFsdWUgICAgID0+ICRWaWV3LAogICAgKTsKCiAgICAjIGdldCBiYWNrZW5kIGZyb20gY29uZmlnCiAgICBteSAkQmFja2VuZHMgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpPdmVydmlldycpOwogICAgaWYgKCAhJEJhY2tlbmRzICkgewogICAgICAgIHJldHVybiAkRW52LT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnTmVlZCBjb25maWcgb3B0aW9uIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6T3ZlcnZpZXcnLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBmb3IgaGFzaC1yZWYKICAgIGlmICggcmVmICRCYWNrZW5kcyBuZSAnSEFTSCcgKSB7CiAgICAgICAgcmV0dXJuICRFbnYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICdDb25maWcgb3B0aW9uIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6T3ZlcnZpZXcgbmVlZHMgdG8gYmUgYSBIQVNIIHJlZiEnLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBmb3IgY29uZmlnIGtleQogICAgaWYgKCAhJEJhY2tlbmRzLT57JFZpZXd9ICkgewogICAgICAgIHJldHVybiAkRW52LT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAiTm8gY29uZmlnIG9wdGlvbiBmb3VuZCBmb3IgdGhlIHZpZXcgJyRWaWV3JyEiLAogICAgICAgICk7CiAgICB9CgogICAgIyBuYXYgYmFyCiAgICBteSAkU3RhcnRIaXQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oCiAgICAgICAgUGFyYW0gPT4gJ1N0YXJ0SGl0JywKICAgICkgfHwgMTsKCiAgICAjIGdldCBwZXJzb25hbCBwYWdlIHNob3duIGNvdW50CiAgICBteSAkUGFnZVNob3duUHJlZmVyZW5jZXNLZXkgPSAnVXNlckNvbmZpZ0l0ZW1PdmVydmlldycgLiAkVmlldyAuICdQYWdlU2hvd24nOwogICAgbXkgJFBhZ2VTaG93biAgICAgICAgICAgICAgID0gJFNlbGYtPnskUGFnZVNob3duUHJlZmVyZW5jZXNLZXl9IHx8IDEwOwogICAgbXkgJEdyb3VwICAgICAgICAgICAgICAgICAgID0gJ0NvbmZpZ0l0ZW1PdmVydmlldycgLiAkVmlldyAuICdQYWdlU2hvd24nOwoKICAgICMgY2hlY2sgc3RhcnQgb3B0aW9uLCBpZiBoaWdoZXIgdGhlbiBlbGVtZW50cyBhdmFpbGFibGUsIHNldAogICAgIyBpdCB0byB0aGUgbGFzdCBvdmVydmlldyBwYWdlIChUaGFua3MgdG8gU3RlZmFuIFNjaG1pZHQhKQogICAgaWYgKCAkU3RhcnRIaXQgPiAkUGFyYW17VG90YWx9ICkgewogICAgICAgIG15ICRQYWdlcyA9IGludCggKCAkUGFyYW17VG90YWx9IC8gJFBhZ2VTaG93biApICsgMC45OTk5OSApOwogICAgICAgICRTdGFydEhpdCA9ICggKCAkUGFnZXMgLSAxICkgKiAkUGFnZVNob3duICkgKyAxOwogICAgfQoKICAgICMgZ2V0IGRhdGEgc2VsZWN0aW9uCiAgICBteSAlRGF0YTsKICAgIG15ICRDb25maWcgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUHJlZmVyZW5jZXNHcm91cHMnKTsKICAgIGlmICggJENvbmZpZyAmJiAkQ29uZmlnLT57JEdyb3VwfSAmJiAkQ29uZmlnLT57JEdyb3VwfS0+e0RhdGF9ICkgewogICAgICAgICVEYXRhID0gJXsgJENvbmZpZy0+eyRHcm91cH0tPntEYXRhfSB9OwogICAgfQoKICAgICMgc2V0IHBhZ2UgbGltaXQgYW5kIGJ1aWxkIHBhZ2UgbmF2CiAgICBteSAkTGltaXQgPSAkUGFyYW17TGltaXR9IHx8IDIwXzAwMDsKICAgIG15ICVQYWdlTmF2ID0gJEVudi0+e0xheW91dE9iamVjdH0tPlBhZ2VOYXZCYXIoCiAgICAgICAgTGltaXQgICAgID0+ICRMaW1pdCwKICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgIFBhZ2VTaG93biA9PiAkUGFnZVNob3duLAogICAgICAgIEFsbEhpdHMgICA9PiAkUGFyYW17VG90YWx9IHx8IDAsCiAgICAgICAgQWN0aW9uICAgID0+ICdBY3Rpb249JyAuICRFbnYtPntMYXlvdXRPYmplY3R9LT57QWN0aW9ufSwKICAgICAgICBMaW5rICAgICAgPT4gJFBhcmFte0xpbmtQYWdlfSwKICAgICk7CgogICAgIyBidWlsZCBzaG93biB0aWNrZXQgYSBwYWdlCiAgICAkUGFyYW17UmVxdWVzdGVkVVJMfSAgICA9ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IjsKICAgICRQYXJhbXtHcm91cH0gICAgICAgICAgID0gJEdyb3VwOwogICAgJFBhcmFte1ByZWZlcmVuY2VzS2V5fSAgPSAkUGFnZVNob3duUHJlZmVyZW5jZXNLZXk7CiAgICAkUGFyYW17UGFnZVNob3duU3RyaW5nfSA9ICRTZWxmLT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAkUGFnZVNob3duUHJlZmVyZW5jZXNLZXksCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFBhZ2VTaG93biwKICAgICAgICBEYXRhICAgICAgICA9PiBcJURhdGEsCiAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICk7CgogICAgIyBidWlsZCBuYXZiYXIgY29udGVudAogICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyJywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICMgYmFjayBsaW5rCiAgICBpZiAoICRQYXJhbXtMaW5rQmFja30gKSB7CiAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclBhZ2VCYWNrJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZmlsdGVycwogICAgaWYgKCAkUGFyYW17RmlsdGVyc30gKSB7CgogICAgICAgICMgZ2V0IGdpdmVuIGZpbHRlcnMKICAgICAgICBteSBATmF2QmFyRmlsdGVyczsKICAgICAgICBmb3IgbXkgJFByaW8gKCBzb3J0IGtleXMgJXsgJFBhcmFte0ZpbHRlcnN9IH0gKSB7CiAgICAgICAgICAgIHB1c2ggQE5hdkJhckZpbHRlcnMsICRQYXJhbXtGaWx0ZXJzfS0+eyRQcmlvfTsKICAgICAgICB9CgogICAgICAgICMgYnVpbGQgZmlsdGVyIGNvbnRlbnQKICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyRmlsdGVyJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBsb29wIG92ZXIgZmlsdGVycwogICAgICAgIG15ICRDb3VudCA9IDA7CiAgICAgICAgZm9yIG15ICRGaWx0ZXIgKEBOYXZCYXJGaWx0ZXJzKSB7CgogICAgICAgICAgICAjIGluY3JlbWVudCBmaWx0ZXIgY291bnQgYW5kIGJ1aWxkIGZpbHRlciBpdGVtCiAgICAgICAgICAgICRDb3VudCsrOwogICAgICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhckZpbHRlckl0ZW0nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICV7JEZpbHRlcn0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBmaWx0ZXIgaXMgc2VsZWN0ZWQKICAgICAgICAgICAgaWYgKCAkRmlsdGVyLT57RmlsdGVyfSBlcSAkUGFyYW17RmlsdGVyfSApIHsKICAgICAgICAgICAgICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhckZpbHRlckl0ZW1TZWxlY3RlZCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgJXskRmlsdGVyfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWROb3QnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgbG9vcCBvdmVyIGNvbmZpZ3VyZWQgYmFja2VuZHMKICAgIGZvciBteSAkQmFja2VuZCAoIGtleXMgJXskQmFja2VuZHN9ICkgewoKICAgICAgICAjIGJ1aWxkIG5hdmJhciB2aWV3IG1vZGUKICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyVmlld01vZGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICV7ICRCYWNrZW5kcy0+eyRCYWNrZW5kfSB9LAogICAgICAgICAgICAgICAgRmlsdGVyID0+ICRQYXJhbXtGaWx0ZXJ9LAogICAgICAgICAgICAgICAgVmlldyAgID0+ICRCYWNrZW5kLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgY3VycmVudCB2aWV3IGlzIGNvbmZpZ3VyZWQgaW4gYmFja2VuZAogICAgICAgIGlmICggJFZpZXcgZXEgJEJhY2tlbmQgKSB7CiAgICAgICAgICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyVmlld01vZGVTZWxlY3RlZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEJhY2tlbmRzLT57JEJhY2tlbmR9IH0sCiAgICAgICAgICAgICAgICAgICAgRmlsdGVyID0+ICRQYXJhbXtGaWx0ZXJ9LAogICAgICAgICAgICAgICAgICAgIFZpZXcgICA9PiAkQmFja2VuZCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclZpZXdNb2RlTm90U2VsZWN0ZWQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICV7ICRCYWNrZW5kcy0+eyRCYWNrZW5kfSB9LAogICAgICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkUGFyYW17RmlsdGVyfSwKICAgICAgICAgICAgICAgICAgICBWaWV3ICAgPT4gJEJhY2tlbmQsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIHBhZ2UgbmF2IGlzIGF2YWlsYWJsZQogICAgaWYgKCVQYWdlTmF2KSB7CiAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclBhZ2VOYXZCYXInLAogICAgICAgICAgICBEYXRhID0+IFwlUGFnZU5hdiwKICAgICAgICApOwoKICAgICAgICAjIGRvbid0IHNob3cgY29udGV4dCBzZXR0aW5ncyBpbiBBSkFYIGNhc2UgKGUuIGcuIGluIGN1c3RvbWVyIHRpY2tldCBoaXN0b3J5KSwKICAgICAgICAjICAgYmVjYXVzZSB0aGUgc3VibWl0IHdpdGggcGFnZSByZWxvYWQgd2lsbCBub3Qgd29yayB0aGVyZQogICAgICAgIGlmICggISRQYXJhbXtBSkFYfSApIHsKICAgICAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQ29udGV4dFNldHRpbmdzJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYWdlTmF2LAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgYnVpbGQgaHRtbCBjb250ZW50CiAgICBteSAkT3V0cHV0TmF2QmFyID0gJEVudi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcicsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIGNyZWF0ZSBvdXRwdXQKICAgIG15ICRPdXRwdXRSYXcgPSAnJzsKICAgIGlmICggISRQYXJhbXtPdXRwdXR9ICkgewogICAgICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5QcmludCgKICAgICAgICAgICAgT3V0cHV0ID0+IFwkT3V0cHV0TmF2QmFyLAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkT3V0cHV0UmF3IC49ICRPdXRwdXROYXZCYXI7CiAgICB9CgogICAgIyBsb2FkIG1vZHVsZQogICAgaWYgKCAhJFNlbGYtPntNYWluT2JqZWN0fS0+UmVxdWlyZSggJEJhY2tlbmRzLT57JFZpZXd9LT57TW9kdWxlfSApICkgewogICAgICAgIHJldHVybiAkRW52LT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcigpOwogICAgfQoKICAgICMgY2hlY2sgZm9yIGJhY2tlbmQgb2JqZWN0CiAgICBteSAkT2JqZWN0ID0gJEJhY2tlbmRzLT57JFZpZXd9LT57TW9kdWxlfS0+bmV3KCAleyRFbnZ9ICk7CiAgICByZXR1cm4gaWYgISRPYmplY3Q7CgogICAgIyBydW4gbW9kdWxlCiAgICBteSAkT3V0cHV0ID0gJE9iamVjdC0+UnVuKAogICAgICAgICVQYXJhbSwKICAgICAgICBMaW1pdCAgICAgPT4gJExpbWl0LAogICAgICAgIFN0YXJ0SGl0ICA9PiAkU3RhcnRIaXQsCiAgICAgICAgUGFnZVNob3duID0+ICRQYWdlU2hvd24sCiAgICAgICAgQWxsSGl0cyAgID0+ICRQYXJhbXtUb3RhbH0gfHwgMCwKICAgICAgICBGcm9udGVuZCAgPT4gJEZyb250ZW5kLAogICAgKTsKCiAgICAjIGNyZWF0ZSBvdXRwdXQKICAgIGlmICggISRQYXJhbXtPdXRwdXR9ICkgewogICAgICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5QcmludCgKICAgICAgICAgICAgT3V0cHV0ID0+IFwkT3V0cHV0LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkT3V0cHV0UmF3IC49ICRPdXRwdXQ7CiAgICB9CgogICAgIyBjcmVhdGUgb3ZlcnZpZXcgbmF2IGJhcgogICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyJywKICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIHJldHVybiBjb250ZW50IGlmIGF2YWlsYWJsZQogICAgcmV0dXJuICRPdXRwdXRSYXc7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0SVRTTUNvbmZpZ0l0ZW0ucG0gLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMaW5rT2JqZWN0SVRTTUNvbmZpZ0l0ZW07Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHM7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3RJVFNNQ29uZmlnSXRlbSAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgbGF5b3V0IGZ1bmN0aW9ucyBvZiBsaW5rIG9iamVjdCAoY29uZmlnIGl0ZW0pCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3RJVFNNQ29uZmlnSXRlbS0+bmV3KAogICAgICAgICVQYXJhbSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0ICgKICAgICAgICBxdyhDb25maWdPYmplY3QgTG9nT2JqZWN0IE1haW5PYmplY3QgREJPYmplY3QgVXNlck9iamVjdCBFbmNvZGVPYmplY3QKICAgICAgICBRdWV1ZU9iamVjdCBHcm91cE9iamVjdCBQYXJhbU9iamVjdCBUaW1lT2JqZWN0IExhbmd1YWdlT2JqZWN0IFVzZXJMYW5ndWFnZSBVc2VySUQpCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9ICAgICAgICAgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0LT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZy0+bmV3KCAleyRTZWxmfSApOwogICAgJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0tPm5ldyggJXskU2VsZn0gKTsKICAgICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fSAgICAgID0gS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscy0+bmV3KCAleyRTZWxmfSApOwoKICAgICMgZGVmaW5lIG5lZWRlZCB2YXJpYWJsZXMKICAgICRTZWxmLT57T2JqZWN0RGF0YX0gPSB7CiAgICAgICAgT2JqZWN0ICAgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICBSZWFsbmFtZSA9PiAnQ29uZmlnSXRlbScsCiAgICB9OwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gVGFibGVDcmVhdGVDb21wbGV4KCkKCnJldHVybiBhbiBhcnJheSB3aXRoIHRoZSBibG9jayBkYXRhCgpSZXR1cm4KCiAgICBAQmxvY2tEYXRhID0gKAogICAgICAgIHsKICAgICAgICAgICAgT2JqZWN0ICAgID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgICAgIEJsb2NrbmFtZSA9PiAnQ29uZmlnSXRlbSBDb21wdXRlcicsCiAgICAgICAgICAgIEhlYWRsaW5lICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnJywKICAgICAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDIwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDb25maWdJdGVtIycsCiAgICAgICAgICAgICAgICAgICAgV2lkdGggICA9PiAxMDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdEZXBsb3ltZW50IFN0YXRlJywKICAgICAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDEzMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnQ3JlYXRlZCcsCiAgICAgICAgICAgICAgICAgICAgV2lkdGggICA9PiAxMzAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJdGVtTGlzdCA9PiBbCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgID0+ICdDdXJJbmNpU2lnbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICAgICAgICA9PiAnMTIzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgICA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcxMjMnLAogICAgICAgICAgICAgICAgICAgICAgICBMaW5rICAgID0+ICdBY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVpvb207Q29uZmlnSXRlbUlEPTEyMycsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAnVGhlIE5hbWUgb2YgdGhlIENvbmZpZyBJdGVtJywKICAgICAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDUwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJ0luIFJlcGFpcicsCiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUaW1lTG9uZycsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzIwMDgtMDEtMDEgMTI6MTI6MDAnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICA9PiAnQ3VySW5jaVNpZ25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgICAgICAgPT4gJzIzNCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgICAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjM0JywKICAgICAgICAgICAgICAgICAgICAgICAgTGluayAgICA9PiAnQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD0yMzQnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJ1RoZSBOYW1lIG9mIHRoZSBDb25maWcgSXRlbSAyMzQnLAogICAgICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAnUHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUaW1lTG9uZycsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzIwMDctMTEtMTEgMTI6MTI6MDAnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICApOwoKICAgIEBCbG9ja0RhdGEgPSAkTGlua09iamVjdC0+VGFibGVDcmVhdGVDb21wbGV4KAogICAgICAgIE9iamVjdExpbmtMaXN0V2l0aERhdGEgPT4gJE9iamVjdExpbmtMaXN0UmVmLAogICAgKTsKCj1jdXQKCnN1YiBUYWJsZUNyZWF0ZUNvbXBsZXggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IHx8IHJlZiAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gbmUgJ0hBU0gnICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBPYmplY3RMaW5rTGlzdFdpdGhEYXRhIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgdGhlIGNvbHVtbiBjb25maWcKICAgIG15ICRDb2x1bW5Db25maWcgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnTGlua09iamVjdDo6SVRTTUNvbmZpZ0l0ZW06OlNob3dDb2x1bW5zQnlDbGFzcycpOwoKICAgICMgZ2V0IHRoZSBjb25maWdlcmVkIGNvbHVtbnMgYW5kIHJlb3JnYW5pemUgdGhlbSBieSBjbGFzcyBuYW1lCiAgICBteSAlQ29sdW1uQnlDbGFzczsKICAgIGlmICggJENvbHVtbkNvbmZpZyAmJiByZWYgJENvbHVtbkNvbmZpZyBlcSAnQVJSQVknICYmIEB7JENvbHVtbkNvbmZpZ30gKSB7CiAgICAgICAgZm9yIG15ICROYW1lICggQHskQ29sdW1uQ29uZmlnfSApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCB0aGUgY2xhc3MgbmFtZSBhbmQgdGhlIGNvbHVtbiBuYW1lCiAgICAgICAgICAgIGlmICggJE5hbWUgPX4gbXsgXEEgKFteOl0rKSA6OiAoLispIFx6IH14bXMgKSB7CiAgICAgICAgICAgICAgICBteSAoJENsYXNzLCAkQ29sdW1uKSAgPSAoJDEsICQyKTsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBuZXcgZW50cnkKICAgICAgICAgICAgICAgIHB1c2ggQHsgJENvbHVtbkJ5Q2xhc3N7JENsYXNzfSB9LCAkQ29sdW1uOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgY29udmVydCB0aGUgbGlzdAogICAgbXkgJUxpbmtMaXN0OwogICAgZm9yIG15ICRMaW5rVHlwZSAoIGtleXMgJXsgJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IH0gKSB7CgogICAgICAgICMgZXh0cmFjdCBsaW5rIHR5cGUgTGlzdAogICAgICAgIG15ICRMaW5rVHlwZUxpc3QgPSAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0tPnskTGlua1R5cGV9OwoKICAgICAgICBmb3IgbXkgJERpcmVjdGlvbiAoIGtleXMgJXskTGlua1R5cGVMaXN0fSApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCBkaXJlY3Rpb24gbGlzdAogICAgICAgICAgICBteSAkRGlyZWN0aW9uTGlzdCA9ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufTsKCiAgICAgICAgICAgIENPTkZJR0lURU1JRDoKICAgICAgICAgICAgZm9yIG15ICRDb25maWdJdGVtSUQgKCBrZXlzICV7JERpcmVjdGlvbkxpc3R9ICkgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCBjbGFzcwogICAgICAgICAgICAgICAgbXkgJENsYXNzID0gJERpcmVjdGlvbkxpc3QtPnskQ29uZmlnSXRlbUlEfS0+e0NsYXNzfSB8fCAnJzsKCiAgICAgICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAhJENsYXNzOwoKICAgICAgICAgICAgICAgICRMaW5rTGlzdHskQ2xhc3N9LT57JENvbmZpZ0l0ZW1JRH0tPntEYXRhfSA9ICREaXJlY3Rpb25MaXN0LT57JENvbmZpZ0l0ZW1JRH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbXkgQEJsb2NrRGF0YTsKICAgIGZvciBteSAkQ2xhc3MgKCBzb3J0IHsgbGMgJGEgY21wIGxjICRiIH0ga2V5cyAlTGlua0xpc3QgKSB7CgogICAgICAgICMgZXh0cmFjdCBjb25maWcgaXRlbSBkYXRhCiAgICAgICAgbXkgJENvbmZpZ0l0ZW1MaXN0ID0gJExpbmtMaXN0eyRDbGFzc307CgogICAgICAgICMgdG8gc3RvcmUgdGhlIGNvbHVtbiBoZWFkbGluZQogICAgICAgIG15IEBTaG93Q29sdW1uc0hlYWRsaW5lczsKCiAgICAgICAgIyBjcmVhdGUgdGhlIGl0ZW0gbGlzdAogICAgICAgIG15IEBJdGVtTGlzdDsKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoCiAgICAgICAgICAgIHNvcnQgeyAkQ29uZmlnSXRlbUxpc3QtPnskYX0tPntEYXRhfS0+e05hbWV9IGNtcCAkQ29uZmlnSXRlbUxpc3QtPnskYn0tPntEYXRhfS0+e05hbWV9IH0KICAgICAgICAgICAga2V5cyAleyRDb25maWdJdGVtTGlzdH0KICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCB2ZXJzaW9uIGRhdGEKICAgICAgICAgICAgbXkgJFZlcnNpb24gPSAkQ29uZmlnSXRlbUxpc3QtPnskQ29uZmlnSXRlbUlEfS0+e0RhdGF9OwoKICAgICAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNvbHVtbiBoZWFkbGluZSBhcnJheSBpcyBlbXB0eSBmb3IgZWFjaCBsb29wCiAgICAgICAgICAgIEBTaG93Q29sdW1uc0hlYWRsaW5lcyA9ICgpOwoKICAgICAgICAgICAgIyBnZXQgdGhlIHZlcnNpb24gZGF0YSwgaW5jbHVkaW5nIGFsbCB0aGUgWE1MIGRhdGEKICAgICAgICAgICAgbXkgJFZlcnNpb25YTUxEYXRhID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkdldCgKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgWE1MRGF0YUdldCAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNvbnZlcnQgdGhlIFhNTCBkYXRhIGludG8gYSBoYXNoCiAgICAgICAgICAgIG15ICRFeHRlbmRlZFZlcnNpb25EYXRhID0gJFNlbGYtPl9YTUxEYXRhMkhhc2goCiAgICAgICAgICAgICAgICBYTUxEZWZpbml0aW9uID0+ICRWZXJzaW9uWE1MRGF0YS0+e1hNTERlZmluaXRpb259LAogICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgICA9PiAkVmVyc2lvblhNTERhdGEtPntYTUxEYXRhfS0+WzFdLT57VmVyc2lvbn0tPlsxXSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15IEBJdGVtQ29sdW1ucyA9ICgKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgID0+ICdDdXJJbmNpU2lnbmFsJywKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgICAgICAgID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgICA9PiAkVmVyc2lvbi0+e0N1ckluY2lTdGF0ZX0sCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAkVmVyc2lvbi0+e0N1ckluY2lTdGF0ZVR5cGV9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRWZXJzaW9uLT57TnVtYmVyfSwKICAgICAgICAgICAgICAgICAgICBMaW5rICAgID0+ICckRW52eyJCYXNlbGluayJ9QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD0nCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHRoZXNlIGNvbHVtbnMgd2lsbCBiZSBhZGRlZCBpZiBubyBjbGFzcyBiYXNlZCBjb2x1bW4gY29uZmlnIGlzIGRlZmluZWQKICAgICAgICAgICAgbXkgQEFkZGl0aW9uYWxEZWZhdWx0SXRlbUNvbHVtbnMgPSAoCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJFZlcnNpb24tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICRWZXJzaW9uLT57Q3VyRGVwbFN0YXRlfSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnVGltZUxvbmcnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJFZlcnNpb24tPntDcmVhdGVUaW1lfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGluZGl2aWR1YWwgY29sdW1uIGNvbmZpZyBmb3IgdGhpcyBjbGFzcyBleGlzdHMKICAgICAgICAgICAgaWYgKCAkQ29sdW1uQnlDbGFzc3skQ2xhc3N9ICkgewoKICAgICAgICAgICAgICAgIENPTFVNTjoKICAgICAgICAgICAgICAgIGZvciBteSAkQ29sdW1uICggQHsgJENvbHVtbkJ5Q2xhc3N7JENsYXNzfSB9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIHByb2Nlc3Mgc29tZSBub24teG1sIGF0dHJpYnV0ZXMKICAgICAgICAgICAgICAgICAgICBpZiAoICRWZXJzaW9uLT57JENvbHVtbn0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGhhbmRsZSB0aGUgQ0kgbmFtZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRDb2x1bW4gZXEgJ05hbWUnICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkIHRoZSBjb2x1bW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEl0ZW1Db2x1bW5zLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJFZlcnNpb24tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkIHRoZSBoZWFkbGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAU2hvd0NvbHVtbnNIZWFkbGluZXMsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgc3BlY2lhbCB0cmFuc2xhdGlvbiBoYW5kbGluZwogICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRDb2x1bW4gZXEgJ0N1ckRlcGxTdGF0ZScgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGQgdGhlIGNvbHVtbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBASXRlbUNvbHVtbnMsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAkVmVyc2lvbi0+eyRDb2x1bW59LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFkZCB0aGUgaGVhZGxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQFNob3dDb2x1bW5zSGVhZGxpbmVzLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnRGVwbG95bWVudCBTdGF0ZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIHNwZWNpYWwgdHJhbnNsYXRpb24gaGFuZGxpbmcKICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkQ29sdW1uIGVxICdDdXJJbmNpU3RhdGUnICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkIHRoZSBjb2x1bW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEl0ZW1Db2x1bW5zLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJFZlcnNpb24tPnskQ29sdW1ufSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGQgdGhlIGhlYWRsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBTaG93Q29sdW1uc0hlYWRsaW5lcywgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0luY2lkZW50IFN0YXRlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIyBzcGVjaWFsIHRyYW5zbGF0aW9uIGhhbmRsaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2lmICggJENvbHVtbiBlcSAnQ2xhc3MnICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkIHRoZSBjb2x1bW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEl0ZW1Db2x1bW5zLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJFZlcnNpb24tPnskQ29sdW1ufSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGQgdGhlIGhlYWRsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBTaG93Q29sdW1uc0hlYWRsaW5lcywgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0NsYXNzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgc3BlY2lhbCBkYXRlL3RpbWUgaGFuZGxpbmcKICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkQ29sdW1uIGVxICdDcmVhdGVUaW1lJyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFkZCB0aGUgY29sdW1uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBJdGVtQ29sdW1ucywgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RpbWVMb25nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRWZXJzaW9uLT57Q3JlYXRlVGltZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkIHRoZSBoZWFkbGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAU2hvd0NvbHVtbnNIZWFkbGluZXMsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDcmVhdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQ09MVU1OOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IHRvIGFzY2lpIHRleHQgaW4gY2FzZSB0aGUgdmFsdWUgY29udGFpbnMgaHRtbAogICAgICAgICAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fS0+VG9Bc2NpaSggU3RyaW5nID0+ICRFeHRlbmRlZFZlcnNpb25EYXRhLT57JENvbHVtbn0tPntWYWx1ZX0gKSB8fCAnJzsKCiAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IGFsbCB3aGl0ZXNwYWNlIGFuZCBuZXdsaW5lcyB0byBzaW5nbGUgc3BhY2VzCiAgICAgICAgICAgICAgICAgICAgJFZhbHVlID1+IHN7IFxzKyB9eyB9Z3htczsKCiAgICAgICAgICAgICAgICAgICAgIyBhZGQgdGhlIGNvbHVtbgogICAgICAgICAgICAgICAgICAgIHB1c2ggQEl0ZW1Db2x1bW5zLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAkVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAgICAgIyBhZGQgdGhlIGhlYWRsaW5lCiAgICAgICAgICAgICAgICAgICAgcHVzaCBAU2hvd0NvbHVtbnNIZWFkbGluZXMsIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkRXh0ZW5kZWRWZXJzaW9uRGF0YS0+eyRDb2x1bW59LT57TmFtZX0gfHwgJycsCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpbmRpdmlkdWFsIGNvbHVtbiBjb25maWcgZm9yIHRoaXMgY2xhc3MgZG9lcyBub3QgZXhpc3QsIHNvIHRoZSBkZWZhdWx0IGNvbHVtbnMgd2lsbCBiZSB1c2VkCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgYWRkIHRoZSBkZWZhdWx0IGNvbHVtbnMKICAgICAgICAgICAgICAgIHB1c2ggQEl0ZW1Db2x1bW5zLCBAQWRkaXRpb25hbERlZmF1bHRJdGVtQ29sdW1uczsKCiAgICAgICAgICAgICAgICAjIGFkZCB0aGUgZGVmYXVsdCBjb2x1bW4gaGVhZGxpbmVzCiAgICAgICAgICAgICAgICBAU2hvd0NvbHVtbnNIZWFkbGluZXMgPSAoCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnRGVwbG95bWVudCBTdGF0ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMTMwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDcmVhdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgV2lkdGggICA9PiAxMzAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1c2ggQEl0ZW1MaXN0LCBcQEl0ZW1Db2x1bW5zOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGlmICFASXRlbUxpc3Q7CgogICAgICAgICMgZGVmaW5lIHRoZSBibG9jayBkYXRhCiAgICAgICAgbXkgJUJsb2NrID0gKAogICAgICAgICAgICBPYmplY3QgICAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0sCiAgICAgICAgICAgIEJsb2NrbmFtZSA9PiAkU2VsZi0+e09iamVjdERhdGF9LT57UmVhbG5hbWV9IC4gJyAoJyAuICRDbGFzcyAuICcpJywKICAgICAgICAgICAgSGVhZGxpbmUgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdJbmNpZGVudCBTdGF0ZScsCiAgICAgICAgICAgICAgICAgICAgV2lkdGggICA9PiAyMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnQ29uZmlnSXRlbSMnLAogICAgICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMTAwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSXRlbUxpc3QgPT4gXEBJdGVtTGlzdCwKICAgICAgICApOwoKICAgICAgICAjIGFkZCB0aGUgY29sdW1uIGhlYWRsaW5lcwogICAgICAgIHB1c2ggQHsgJEJsb2Nre0hlYWRsaW5lfSB9LCBAU2hvd0NvbHVtbnNIZWFkbGluZXM7CgogICAgICAgIHB1c2ggQEJsb2NrRGF0YSwgXCVCbG9jazsKICAgIH0KCiAgICByZXR1cm4gQEJsb2NrRGF0YTsKfQoKPWl0ZW0gVGFibGVDcmVhdGVTaW1wbGUoKQoKcmV0dXJuIGEgaGFzaCB3aXRoIHRoZSBsaW5rIG91dHB1dCBkYXRhCgpSZXR1cm4KCiAgICAlTGlua091dHB1dERhdGEgPSAoCiAgICAgICAgTm9ybWFsOjpTb3VyY2UgPT4gewogICAgICAgICAgICBJVFNNQ29uZmlnSXRlbSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnQ0k6NTU1NTUnLAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgPT4gJ0NvbmZpZ0l0ZW0jIDU1NTU1NTogVGhlIGNvbmZpZyBpdGVtIG5hbWUnLAogICAgICAgICAgICAgICAgICAgIENzcyAgICAgPT4gJ3N0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaCInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDSToyMjIyMicsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAnQ29uZmlnSXRlbSMgMjIyMjI6IFRpdGxlIG9mIGNvbmZpZyBuYW1lIDIyMjIyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBQYXJlbnRDaGlsZDo6VGFyZ2V0ID0+IHsKICAgICAgICAgICAgSVRTTUNvbmZpZ0l0ZW0gPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0NJOjc3Nzc3JywKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgID0+ICdDb25maWdJdGVtIyA3Nzc3NzogQ29uZmlnSXRlbSBuYW1lJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICk7CgogICAgJUxpbmtPdXRwdXREYXRhID0gJExpbmtPYmplY3QtPlRhYmxlQ3JlYXRlU2ltcGxlKAogICAgICAgIE9iamVjdExpbmtMaXN0V2l0aERhdGEgPT4gJE9iamVjdExpbmtMaXN0UmVmLAogICAgKTsKCj1jdXQKCnN1YiBUYWJsZUNyZWF0ZVNpbXBsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfHwgcmVmICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE9iamVjdExpbmtMaXN0V2l0aERhdGEhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAlTGlua091dHB1dERhdGE7CiAgICBmb3IgbXkgJExpbmtUeXBlICgga2V5cyAleyAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfSApIHsKCiAgICAgICAgIyBleHRyYWN0IGxpbmsgdHlwZSBMaXN0CiAgICAgICAgbXkgJExpbmtUeXBlTGlzdCA9ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfS0+eyRMaW5rVHlwZX07CgogICAgICAgIGZvciBteSAkRGlyZWN0aW9uICgga2V5cyAleyRMaW5rVHlwZUxpc3R9ICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IGRpcmVjdGlvbiBsaXN0CiAgICAgICAgICAgIG15ICREaXJlY3Rpb25MaXN0ID0gJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259OwoKICAgICAgICAgICAgbXkgQEl0ZW1MaXN0OwogICAgICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlzICV7JERpcmVjdGlvbkxpc3R9ICkgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCBjb25maWcgaXRlbSBkYXRhCiAgICAgICAgICAgICAgICBteSAkVmVyc2lvbiA9ICREaXJlY3Rpb25MaXN0LT57JENvbmZpZ0l0ZW1JRH07CgogICAgICAgICAgICAgICAgIyBkZWZpbmUgaXRlbSBkYXRhCiAgICAgICAgICAgICAgICBteSAlSXRlbSA9ICgKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDSTonIC4gJFZlcnNpb24tPntOdW1iZXJ9LAogICAgICAgICAgICAgICAgICAgIFRpdGxlID0+ICJDb25maWdJdGVtIyAkVmVyc2lvbi0+e051bWJlcn0gKCRWZXJzaW9uLT57Q2xhc3N9KTogJFZlcnNpb24tPntOYW1lfSIsCiAgICAgICAgICAgICAgICAgICAgTGluayAgPT4gJyRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVpvb207Q29uZmlnSXRlbUlEPScKICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBwdXNoIEBJdGVtTGlzdCwgXCVJdGVtOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFkZCBpdGVtIGxpc3QgdG8gbGluayBvdXRwdXQgZGF0YQogICAgICAgICAgICAkTGlua091dHB1dERhdGF7ICRMaW5rVHlwZSAuICc6OicgLiAkRGlyZWN0aW9uIH0tPntJVFNNQ29uZmlnSXRlbX0gPSBcQEl0ZW1MaXN0OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJUxpbmtPdXRwdXREYXRhOwp9Cgo9aXRlbSBDb250ZW50U3RyaW5nQ3JlYXRlKCkKCnJldHVybiBhIG91dHB1dCBzdHJpbmcKCiAgICBteSAkU3RyaW5nID0gJExheW91dE9iamVjdC0+Q29udGVudFN0cmluZ0NyZWF0ZSgKICAgICAgICBDb250ZW50RGF0YSA9PiAkSGFzaFJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgQ29udGVudFN0cmluZ0NyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17Q29udGVudERhdGF9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKCBQcmlvcml0eSA9PiAnZXJyb3InLCBNZXNzYWdlID0+ICdOZWVkIENvbnRlbnREYXRhIScgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBleHRyYWN0IGNvbnRlbnQKICAgIG15ICRDb250ZW50ID0gJFBhcmFte0NvbnRlbnREYXRhfTsKCiAgICByZXR1cm4gaWYgJENvbnRlbnQtPntUeXBlfSBuZSAnQ3VySW5jaVNpZ25hbCc7CgogICAgIyBzZXQgaW5jaWRlbnQgc2lnbmFsCiAgICBteSAlSW5jaVNpZ25hbHMgPSAoCiAgICAgICAgaW5jaWRlbnQgICAgPT4gJ3JlZGxlZCcsCiAgICAgICAgb3BlcmF0aW9uYWwgPT4gJ2dyZWVubGVkJywKICAgICAgICB1bmtub3duICAgICA9PiAnZ3JheWxlZCcsCiAgICAgICAgd2FybmluZyAgICAgPT4gJ3llbGxvd2xlZCcsCiAgICApOwoKICAgICMgaW52ZXN0aWdhdGUgY3VycmVudCBpbmNpZGVudCBzaWduYWwKICAgICRDb250ZW50LT57Q3VySW5jaVN0YXRlVHlwZX0gfHw9ICd1bmtub3duJzsKICAgIG15ICRDdXJJbmNpU2lnbmFsID0gJEluY2lTaWduYWxzeyAkQ29udGVudC0+e0N1ckluY2lTdGF0ZVR5cGV9IH07CiAgICAkQ3VySW5jaVNpZ25hbCB8fD0gJEluY2lTaWduYWxze3Vua25vd259OwoKICAgIG15ICRTdHJpbmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZSA9PiAnPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCIgdGl0bGU9IiRRRGF0YXsiQ3VySW5jaVN0YXRlIn0iPiAnCiAgICAgICAgICAgIC4gJzxzcGFuIGNsYXNzPSIkUURhdGF7IkN1ckluY2lTaWduYWwifSI+PC9zcGFuPiA8L2Rpdj4nLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBDdXJJbmNpU2lnbmFsID0+ICRDdXJJbmNpU2lnbmFsLAogICAgICAgICAgICBDdXJJbmNpU3RhdGUgPT4gJENvbnRlbnQtPntDb250ZW50fSB8fCAnJywKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWl0ZW0gU2VsZWN0YWJsZU9iamVjdExpc3QoKQoKcmV0dXJuIGFuIGFycmF5IGhhc2ggd2l0aCBzZWxlY3RhYmxlIG9iamVjdHMKClJldHVybgoKICAgIEBTZWxlY3RhYmxlT2JqZWN0TGlzdCA9ICgKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgICAgID0+ICctJywKICAgICAgICAgICAgVmFsdWUgICAgPT4gJ0NvbmZpZ0l0ZW0nLAogICAgICAgICAgICBEaXNhYmxlZCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnSVRTTUNvbmZpZ0l0ZW06OjI1JywKICAgICAgICAgICAgVmFsdWUgPT4gJ0NvbmZpZ0l0ZW06OkNvbXB1dGVyJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0lUU01Db25maWdJdGVtOjoyNicsCiAgICAgICAgICAgIFZhbHVlID0+ICdDb25maWdJdGVtOjpTb2Z0d2FyZScsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdJVFNNQ29uZmlnSXRlbTo6MjcnLAogICAgICAgICAgICBWYWx1ZSA9PiAnQ29uZmlnSXRlbTo6TmV0d29yaycsCiAgICAgICAgfSwKICAgICk7CgogICAgQFNlbGVjdGFibGVPYmplY3RMaXN0ID0gJExpbmtPYmplY3QtPlNlbGVjdGFibGVPYmplY3RMaXN0KAogICAgICAgIFNlbGVjdGVkID0+ICRJZGVudGlmaWVyLCAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIFNlbGVjdGFibGVPYmplY3RMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBkZWZpbmUgaGVhZGxpbmUKICAgIG15IEBPYmplY3RTZWxlY3RMaXN0OwoKICAgICMgZ2V0IGNsYXNzIGxpc3QKICAgIG15ICRDbGFzc0xpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICk7CgogICAgcmV0dXJuIGlmICEkQ2xhc3NMaXN0OwogICAgcmV0dXJuIGlmIHJlZiAkQ2xhc3NMaXN0IG5lICdIQVNIJzsKCiAgICAjIGdldCB0aGUgY29uZmlnIHdpdGggdGhlIGRlZmF1bHQgc3Vib2JqZWN0cwogICAgbXkgJERlZmF1bHRTdWJvYmplY3QgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnTGlua09iamVjdDo6RGVmYXVsdFN1Yk9iamVjdCcpIHx8IHt9OwoKICAgIENMQVNTSUQ6CiAgICBmb3IgbXkgJENsYXNzSUQgKCBzb3J0IHsgbGMgJENsYXNzTGlzdC0+eyRhfSBjbXAgbGMgJENsYXNzTGlzdC0+eyRifSB9IGtleXMgJXskQ2xhc3NMaXN0fSApIHsKCiAgICAgICAgIyBzaG93IGNsYXNzIG9ubHkgaWYgdXNlciBoYXMgYWNjZXNzIHJpZ2h0cwogICAgICAgIG15ICRIYXNBY2Nlc3MgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5QZXJtaXNzaW9uKAogICAgICAgICAgICBTY29wZSAgID0+ICdDbGFzcycsCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzSUQsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgID0+ICdybycsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBDTEFTU0lEIGlmICEkSGFzQWNjZXNzOwoKICAgICAgICBteSAkQ2xhc3MgPSAkQ2xhc3NMaXN0LT57JENsYXNzSUR9IHx8ICcnOwogICAgICAgIG15ICRJZGVudGlmaWVyID0gJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0gLiAnOjonIC4gJENsYXNzSUQ7CgogICAgICAgICMgc2V0IHNlbGVjdGVkIGZsYWcKICAgICAgICBteSAkU2VsZWN0ZWQ7CiAgICAgICAgaWYgKCAkUGFyYW17U2VsZWN0ZWR9ICkgewoKICAgICAgICAgICAgaWYgKCAkUGFyYW17U2VsZWN0ZWR9IGVxICRJZGVudGlmaWVyICkgewogICAgICAgICAgICAgICAgJFNlbGVjdGVkID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAkUGFyYW17U2VsZWN0ZWR9IGVxICRTZWxmLT57T2JqZWN0RGF0YX0tPntPYmplY3R9CiAgICAgICAgICAgICAgICAmJiAkRGVmYXVsdFN1Ym9iamVjdC0+eyAkU2VsZi0+e09iamVjdERhdGF9LT57T2JqZWN0fSB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGV4dHJhY3QgZGVmYXVsdCBjbGFzcyBuYW1lCiAgICAgICAgICAgICAgICBteSAkRGVmYXVsdENsYXNzID0gJERlZmF1bHRTdWJvYmplY3QtPntJVFNNQ29uZmlnSXRlbX0gfHwgJyc7CgogICAgICAgICAgICAgICAgIyBjaGVjayBjbGFzcwogICAgICAgICAgICAgICAgaWYgKCAkRGVmYXVsdENsYXNzIGVxICRDbGFzcyApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZWN0ZWQgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSByb3cKICAgICAgICBteSAlUm93ID0gKAogICAgICAgICAgICBLZXkgICAgICA9PiAkSWRlbnRpZmllciwKICAgICAgICAgICAgVmFsdWUgICAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e1JlYWxuYW1lfSAuICc6OicgLiAkQ2xhc3MsCiAgICAgICAgICAgIFNlbGVjdGVkID0+ICRTZWxlY3RlZCwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBPYmplY3RTZWxlY3RMaXN0LCBcJVJvdzsKICAgIH0KCiAgICAjIG9ubHkgYWRkIGhlYWRsaW5lIGlmIHRoZXJlIGFyZSBjb25maWdpdGVtIGNsYXNzZXMKICAgICMgd2hlcmUgdGhlIHVzZXIgaGFzIHRoZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGVtCiAgICBpZiAoQE9iamVjdFNlbGVjdExpc3QpIHsKCiAgICAgICAgIyBhZGQgaGVhZGxpbmUgYXMgZmlyc3QgYXJyYXkgZWxlbWVudAogICAgICAgIHVuc2hpZnQgQE9iamVjdFNlbGVjdExpc3QsIHsKICAgICAgICAgICAgS2V5ICAgICAgPT4gJy0nLAogICAgICAgICAgICBWYWx1ZSAgICA9PiAkU2VsZi0+e09iamVjdERhdGF9LT57UmVhbG5hbWV9LAogICAgICAgICAgICBEaXNhYmxlZCA9PiAxLAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIEBPYmplY3RTZWxlY3RMaXN0Owp9Cgo9aXRlbSBTZWFyY2hPcHRpb25MaXN0KCkKCnJldHVybiBhbiBhcnJheSBoYXNoIHdpdGggc2VhcmNoIG9wdGlvbnMKClJldHVybgoKICAgIEBTZWFyY2hPcHRpb25MaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdOdW1iZXInLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJ0NvbmZpZ0l0ZW0jJywKICAgICAgICAgICAgSW5wdXRTdHJnID0+ICRGb3JtU3RyaW5nLAogICAgICAgICAgICBGb3JtRGF0YSAgPT4gJzEyMzQnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICBJbnB1dFN0cmcgPT4gJEZvcm1TdHJpbmcsCiAgICAgICAgICAgIEZvcm1EYXRhICA9PiAnQmxhQmxhJywKICAgICAgICB9LAogICAgKTsKCiAgICBAU2VhcmNoT3B0aW9uTGlzdCA9ICRMaW5rT2JqZWN0LT5TZWFyY2hPcHRpb25MaXN0KAogICAgICAgIFN1Yk9iamVjdCA9PiAnMjUnLCAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIFNlYXJjaE9wdGlvbkxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNlYXJjaCBvcHRpb24gbGlzdAogICAgbXkgQFNlYXJjaE9wdGlvbkxpc3QgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgID0+ICdOdW1iZXInLAogICAgICAgICAgICBOYW1lID0+ICdDb25maWdJdGVtIycsCiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgID0+ICdOYW1lJywKICAgICAgICAgICAgTmFtZSA9PiAnTmFtZScsCiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgID0+ICdEZXBsU3RhdGVJRHMnLAogICAgICAgICAgICBOYW1lID0+ICdEZXBsb3ltZW50IFN0YXRlJywKICAgICAgICAgICAgVHlwZSA9PiAnTGlzdCcsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgPT4gJ0luY2lTdGF0ZUlEcycsCiAgICAgICAgICAgIE5hbWUgPT4gJ0luY2lkZW50IFN0YXRlJywKICAgICAgICAgICAgVHlwZSA9PiAnTGlzdCcsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgb2JqZWN0IGRlcGVuZGVuY2UgYXR0cmlidXRlcwogICAgI2lmICggJFBhcmFte1N1Yk9iamVjdH0gKSB7CiAgICAjCiAgICAjICAgICMgZ2V0IGNsYXNzIGxpc3QKICAgICMgICAgbXkgJENsYXNzTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICMgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICAjICAgICk7CiAgICAjCiAgICAjICAgIGlmICggJENsYXNzTGlzdCAmJiAkQ2xhc3NMaXN0IGVxICdIQVNIJyApIHsKICAgICMKICAgICMgICAgICAgICMgYWRkIGhlcmUgdGhlIHNlYXJjaCBhdHRyaWJ1dGVzIG9mIHRoZSBzdWJvYmplY3QhCiAgICAjICAgIH0KICAgICN9CgogICAgIyBhZGQgZm9ybWtleQogICAgZm9yIG15ICRSb3cgKEBTZWFyY2hPcHRpb25MaXN0KSB7CiAgICAgICAgJFJvdy0+e0Zvcm1LZXl9ID0gJ1NFQVJDSDo6JyAuICRSb3ctPntLZXl9OwogICAgfQoKICAgICMgYWRkIGZvcm0gZGF0YSBhbmQgaW5wdXQgc3RyaW5nCiAgICBST1c6CiAgICBmb3IgbXkgJFJvdyAoQFNlYXJjaE9wdGlvbkxpc3QpIHsKCiAgICAgICAgIyBwcmVwYXJlIHRleHQgaW5wdXQgZmllbGRzCiAgICAgICAgaWYgKCAkUm93LT57VHlwZX0gZXEgJ1RleHQnICkgewoKICAgICAgICAgICAgIyBnZXQgZm9ybSBkYXRhCiAgICAgICAgICAgICRSb3ctPntGb3JtRGF0YX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRSb3ctPntGb3JtS2V5fSApOwoKICAgICAgICAgICAgIyBwYXJzZSB0aGUgaW5wdXQgdGV4dCBibG9jawogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnSW5wdXRUZXh0JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAkUm93LT57Rm9ybUtleX0sCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJFJvdy0+e0Zvcm1EYXRhfSB8fCAnJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFkZCB0aGUgaW5wdXQgc3RyaW5nCiAgICAgICAgICAgICRSb3ctPntJbnB1dFN0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0xpbmtPYmplY3QnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBST1c7CiAgICAgICAgfQoKICAgICAgICAjIHByZXBhcmUgbGlzdCBib3hlcwogICAgICAgIGlmICggJFJvdy0+e1R5cGV9IGVxICdMaXN0JyApIHsKCiAgICAgICAgICAgICMgZ2V0IGZvcm0gZGF0YQogICAgICAgICAgICBteSBARm9ybURhdGEgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0QXJyYXkoIFBhcmFtID0+ICRSb3ctPntGb3JtS2V5fSApOwogICAgICAgICAgICAkUm93LT57Rm9ybURhdGF9ID0gXEBGb3JtRGF0YTsKCiAgICAgICAgICAgICMgcHJlcGFyZSBkZXBsb3ltZW50IHN0YXRlIGxpc3QKICAgICAgICAgICAgbXkgJUxpc3REYXRhOwogICAgICAgICAgICBpZiAoICRSb3ctPntLZXl9IGVxICdEZXBsU3RhdGVJRHMnICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IGRlcGxveW1lbnQgc3RhdGUgbGlzdAogICAgICAgICAgICAgICAgbXkgJERlcGxTdGF0ZUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYWRkIGxpc3QKICAgICAgICAgICAgICAgIGlmICggJERlcGxTdGF0ZUxpc3QgJiYgcmVmICREZXBsU3RhdGVMaXN0IGVxICdIQVNIJyApIHsKICAgICAgICAgICAgICAgICAgICAlTGlzdERhdGEgPSAleyREZXBsU3RhdGVMaXN0fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBwcmVwYXJlIGluY2lkZW50IHN0YXRlIGxpc3QKICAgICAgICAgICAgZWxzaWYgKCAkUm93LT57S2V5fSBlcSAnSW5jaVN0YXRlSURzJyApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBpbmNpZGVudCBzdGF0ZSBsaXN0CiAgICAgICAgICAgICAgICBteSAkSW5jaVN0YXRlTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICAgICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYWRkIGxpc3QKICAgICAgICAgICAgICAgIGlmICggJEluY2lTdGF0ZUxpc3QgJiYgcmVmICRJbmNpU3RhdGVMaXN0IGVxICdIQVNIJyApIHsKICAgICAgICAgICAgICAgICAgICAlTGlzdERhdGEgPSAleyRJbmNpU3RhdGVMaXN0fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhZGQgdGhlIGlucHV0IHN0cmluZwogICAgICAgICAgICAkUm93LT57SW5wdXRTdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBEYXRhICAgICAgID0+IFwlTGlzdERhdGEsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICRSb3ctPntGb3JtS2V5fSwKICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJFJvdy0+e0Zvcm1EYXRhfSwKICAgICAgICAgICAgICAgIFNpemUgICAgICAgPT4gMywKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgUk9XOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gQFNlYXJjaE9wdGlvbkxpc3Q7Cn0KCj1pdGVtIF9YTUxEYXRhMkhhc2goKQoKcmV0dXJucyBhIGhhc2ggcmVmZXJlbmNlIHdpdGggYWxsIHhtbCBkYXRhIG9mIGEgY29uZmlnIGl0ZW0KClJldHVybgoKICAgICREYXRhID0gewogICAgICAgICdIYXJkRGlzazo6MicgPT4gewogICAgICAgICAgICBWYWx1ZSA9PiAnSEQyJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0hhcmQgRGlzaycsCiAgICAgICAgIH0sCiAgICAgICAgJ0NQVTo6MScgPT4gewogICAgICAgICAgICBWYWx1ZSA9PiAnJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0NQVScsCiAgICAgICAgfSwKICAgICAgICAnSGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxJyA9PiB7CiAgICAgICAgICAgIFZhbHVlID0+ICc3ODAgR0InLAogICAgICAgICAgICBOYW1lICA9PiAnQ2FwYWNpdHknLAogICAgICAgIH0sCiAgICB9OwoKICAgIG15ICREYXRhID0gJExpbmtPYmplY3QtPl9YTUxEYXRhMkhhc2goCiAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkVmVyc2lvbi0+e1hNTERlZmluaXRpb259LAogICAgICAgIFhNTERhdGEgICAgICAgPT4gJFZlcnNpb24tPntYTUxEYXRhfS0+WzFdLT57VmVyc2lvbn0tPlsxXSwKICAgICAgICBEYXRhICAgICAgICAgID0+IFwlRGF0YUhhc2hSZWYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbAogICAgICAgIFByZWZpeCAgICAgICAgPT4gJ0hhcmREaXNrOjoxJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsCiAgICApOwoKPWN1dAoKc3ViIF9YTUxEYXRhMkhhc2ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGF0YX07CiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxEZWZpbml0aW9ufTsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERhdGF9IG5lICdIQVNIJzsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERlZmluaXRpb259IG5lICdBUlJBWSc7CgogICAgIyB0byBzdG9yZSB0aGUgcmV0dXJuIGRhdGEKICAgIG15ICREYXRhID0gJFBhcmFte0RhdGF9IHx8IHt9OwoKICAgIElURU06CiAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17WE1MRGVmaW5pdGlvbn0gfSApIHsKICAgICAgICBDT1VOVEVSOgogICAgICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gJEl0ZW0tPntDb3VudE1heH0gKSB7CgogICAgICAgICAgICAjIGxvb2t1cCB2YWx1ZQogICAgICAgICAgICBteSAkVmFsdWUgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5YTUxWYWx1ZUxvb2t1cCgKICAgICAgICAgICAgICAgIEl0ZW0gID0+ICRJdGVtLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1hNTERhdGF9LT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLT57Q29udGVudH0gfHwgJycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNyZWF0ZSBvdXRwdXQgc3RyaW5nCiAgICAgICAgICAgICRWYWx1ZSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SVRTTUNvbmZpZ0l0ZW1PdXRwdXRTdHJpbmdDcmVhdGUoCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWUsCiAgICAgICAgICAgICAgICBJdGVtICA9PiAkSXRlbSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIHByZWZpeAogICAgICAgICAgICBteSAkUHJlZml4ID0gJEl0ZW0tPntLZXl9IC4gJzo6JyAuICRDb3VudGVyOwogICAgICAgICAgICBpZiAoICRQYXJhbXtQcmVmaXh9ICkgewogICAgICAgICAgICAgICAgJFByZWZpeCA9ICRQYXJhbXtQcmVmaXh9IC4gJzo6JyAuICRQcmVmaXg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3RvcmUgdGhlIGl0ZW0gaW4gaGFzaAogICAgICAgICAgICAkRGF0YS0+eyRQcmVmaXh9ID0gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJEl0ZW0tPntOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZSwKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICMgc3RhcnQgcmVjdXJzaW9uLCBpZiAiU3ViIiB3YXMgZm91bmQKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e1N1Yn0gKSB7CiAgICAgICAgICAgICAgICAkRGF0YSA9ICRTZWxmLT5fWE1MRGF0YTJIYXNoKAogICAgICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgPT4gJFBhcmFte1hNTERhdGF9LT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLAogICAgICAgICAgICAgICAgICAgIFByZWZpeCAgICAgICAgPT4gJFByZWZpeCwKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgID0+ICREYXRhLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJERhdGE7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIEFkbWluSVRTTUNvbmZpZ0l0ZW0uZHRsIC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciBBZG1pbklUU01Db25maWdJdGVtCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXcgLS0+CjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxPiRUZXh0eyJDb25maWcgSXRlbSBNYW5hZ2VtZW50In08L2gxPgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkFjdGlvbnMifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSdDb250ZW50Jz4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9ImdldCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iRGVmaW5pdGlvbkNoYW5nZSIvPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+JERhdGF7IkNsYXNzT3B0aW9uU3RyZyJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiQWRkIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiRUZXh0eyJDaGFuZ2UgY2xhc3MgZGVmaW5pdGlvbiJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgo8IS0tZHRsOmJsb2NrOkFjdGlvbk92ZXJ2aWV3LS0+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9IiBjbGFzcz0iQ2FsbEZvckFjdGlvbiI+PHNwYW4+JFRleHR7IkdvIHRvIG92ZXJ2aWV3In08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS1kdGw6YmxvY2s6QWN0aW9uT3ZlcnZpZXctLT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdMaXN0IC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJMaXN0In08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IkNvbmZpZyBJdGVtIn0gJFRleHR7IkNsYXNzIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3RSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifSZTdWJhY3Rpb249RGVmaW5pdGlvbkxpc3QmQ2xhc3NJRD0kUURhdGF7IkNsYXNzSUQifSI+JFFEYXRheyJOYW1lIn08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3RSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3QgLS0+CjwhLS0gZHRsOmJsb2NrOkRlZmluaXRpb25MaXN0IC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJMaXN0In08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ilc1MHBjIj4kVGV4dHsiQ29uZmlnIEl0ZW0ifSAkVGV4dHsiQ2xhc3MifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlZlcnNpb24ifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IkNyZWF0ZWQgYnkifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IkNyZWF0ZWQifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOkRlZmluaXRpb25MaXN0Um93IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn0mU3ViYWN0aW9uPURlZmluaXRpb25WaWV3JkRlZmluaXRpb25JRD0kUURhdGF7IkRlZmluaXRpb25JRCJ9Ij4kUURhdGF7IkNsYXNzIn08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRRRGF0YXsiVmVyc2lvbiJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkUURhdGF7IlVzZXJMb2dpbiJ9ICgkUXVvdGV7IiREYXRheyJVc2VyRmlyc3RuYW1lIn0gJERhdGF7IlVzZXJMYXN0bmFtZSJ9In0pIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJVc2VyTG9naW4iLCIxNSJ9ICgkUXVvdGV7IiREYXRheyJVc2VyRmlyc3RuYW1lIn0gJERhdGF7IlVzZXJMYXN0bmFtZSJ9IiwiMTUifSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFRpbWVMb25neyIkUURhdGF7IkNyZWF0ZVRpbWUifSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6RGVmaW5pdGlvbkxpc3RSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpEZWZpbml0aW9uTGlzdCAtLT4KPCEtLSBkdGw6YmxvY2s6RGVmaW5pdGlvblZpZXcgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IlZpZXcifTogPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgoKICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IkNvbmZpZyBJdGVtIn0gJFRleHR7IkNsYXNzIn06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7IkNsYXNzIn0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiVmVyc2lvbiJ9OiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJWZXJzaW9uIn0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiQ3JlYXRlZCBieSJ9OiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJVc2VyTG9naW4ifSAoJFF1b3RleyIkRGF0YXsiVXNlckZpcnN0bmFtZSJ9ICREYXRheyJVc2VyTGFzdG5hbWUifSJ9KQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJDcmVhdGVkIn06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAkVGltZUxvbmd7IiRRRGF0YXsiQ3JlYXRlVGltZSJ9In0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiRGVmaW5pdGlvbiJ9OiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IkRlZmluaXRpb25TdHJpbmcifQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RGVmaW5pdGlvblZpZXcgLS0+CjwhLS0gZHRsOmJsb2NrOkRlZmluaXRpb25DaGFuZ2UgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkNoYW5nZSJ9OiA8L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iRGVmaW5pdGlvblNhdmUiLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDbGFzc0lEIiB2YWx1ZT0iJFFEYXRheyJDbGFzc0lEIn0iLz4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJDb25maWcgSXRlbSJ9ICRUZXh0eyJDbGFzcyJ9OiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7IkNsYXNzIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkRlZmluaXRpb24iPiRUZXh0eyJEZWZpbml0aW9uIn06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJEZWZpbml0aW9uIiBpZD0iRGVmaW5pdGlvbiIgcm93cz0iJFFEYXRheyJSb3dzIn0iIGNvbHM9IjgwIiB3cmFwPSJvZmYiPiRRRGF0YXsiRGVmaW5pdGlvbiJ9PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSIgdHlwZT0ic3VibWl0IiBpZD0iU3VibWl0IiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9Ij4kVGV4dHsiU3VibWl0In08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9Ij4kVGV4dHsiQ2FuY2VsIn08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpEZWZpbml0aW9uQ2hhbmdlIC0tPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlldyAtLT4K
IyAtLQojIEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQuZHRsIC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciBBZ2VudElUU01Db25maWdJdGVtQWRkCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CiAgICA8aDE+JFRleHR7IkFkZCJ9OiAkVGV4dHsiQ29uZmlnIEl0ZW0ifTwvaDE+CgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+PGxhYmVsIGZvcj0iRmlsdGVyQ2xhc3NlcyI+JFRleHR7IkZpbHRlciBmb3IgQ2xhc3NlcyJ9PC9sYWJlbD48L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkZpbHRlckNsYXNzZXMiIGNsYXNzPSJXNTBwYyIgbmFtZT0iRmlsdGVyQ2xhc3NlcyIgdmFsdWU9IiIgdGl0bGU9IiRUZXh0eyJGaWx0ZXIgZm9yIENsYXNzZXMifSIgLz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkhpbnQifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAkVGV4dHsiU2VsZWN0IGEgQ2xhc3MgZnJvbSB0aGUgbGlzdCB0byBjcmVhdGUgYSBuZXcgQ29uZmlnIEl0ZW0uIn0KICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiTGlzdCJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiIGlkPSJDbGFzc2VzIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVzEwMHBjIj4kVGV4dHsiQ2xhc3MifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iRmlsdGVyTWVzc2FnZSBIaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRUZXh0eyJObyBtYXRjaGVzIGZvdW5kLiJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdJdGVtTGlzdCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQ7Q2xhc3NJRD0kUURhdGF7IkNsYXNzSUQifSI+JFRleHR7IiREYXRheyJOYW1lIn0ifTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3SXRlbUxpc3QgLS0+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwvZGl2PgoKPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgQ29yZS5VSS5UYWJsZS5Jbml0VGFibGVGaWx0ZXIoJCgnI0ZpbHRlckNsYXNzZXMnKSwgJCgnI0NsYXNzZXMnKSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo=
IyAtLQojIEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgo8IS0tZHRsOmJsb2NrOlN0YXJ0Tm9ybWFsLS0+CjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyTGFzdCI+CiAgICA8aDE+JFRleHR7IkVkaXQifTogJFRleHR7IkNvbmZpZyBJdGVtIn06ICRUZXh0eyIkRGF0YXsiTnVtYmVyIn0ifSAtICRUZXh0eyJDbGFzcyJ9OiAkUURhdGF7IkNsYXNzIn08L2gxPgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CjwhLS1kdGw6YmxvY2s6U3RhcnROb3JtYWwtLT4KJEluY2x1ZGV7IkFnZW50SVRTTUN1c3RvbWVyU2VhcmNoIn0KICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9IkNsYXNzSXRlbSIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiIGlkPSJDbGFzc0l0ZW0iPgo8IS0tZHRsOmJsb2NrOlN0YXJ0U21hbGwtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iTGF5b3V0UG9wdXAgQVJJQVJvbGVNYWluIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgxPiRUZXh0eyJFZGl0In06ICRUZXh0eyJDb25maWcgSXRlbSJ9OiAkVGV4dHsiJERhdGF7Ik51bWJlciJ9In0gLSAkVGV4dHsiQ2xhc3MifTogJFFEYXRheyJDbGFzcyJ9PC9oMT4KICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiIGhyZWY9IiMiPiRUZXh0eyJDYW5jZWwgJiBjbG9zZSB3aW5kb3cifTwvYT4KICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlNjcmVlblR5cGUiIHZhbHVlPSJQb3B1cCIvPgo8IS0tZHRsOmJsb2NrOlN0YXJ0U21hbGwtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iVmVyc2lvblNhdmUiLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDbGFzc0lEIiB2YWx1ZT0iJFFEYXRheyJDbGFzc0lEIn0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDb25maWdJdGVtSUQiIHZhbHVlPSIkUURhdGF7IkNvbmZpZ0l0ZW1JRCJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRHVwbGljYXRlSUQiIHZhbHVlPSIkUURhdGF7IkR1cGxpY2F0ZUlEIn0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJGb3JtSUQiIHZhbHVlPSIkUURhdGF7IkZvcm1JRCJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgo8IS0tIGR0bDpibG9jazpSb3dOYW1lIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJOYW1lIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiTmFtZSJ9OiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgaWQ9Ik5hbWUiIGNsYXNzPSJXNTBwYyBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7IlJvd05hbWVJbnZhbGlkIn0iIG1heGxlbmd0aD0iMjUwIiB2YWx1ZT0iJFFEYXRheyJOYW1lIn0iIHRpdGxlPSIkVGV4dHsiVGhlIG5hbWUgb2YgdGhpcyBjb25maWcgaXRlbSJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIiA+PHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOlJvd05hbWVFcnJvckRlZmF1bHQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6Um93TmFtZUVycm9yRGVmYXVsdCAtLT4KPCEtLSBkdGw6YmxvY2s6Um93TmFtZUVycm9yRHVwbGljYXRlcyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPiRUZXh0eyJOYW1lIGlzIGFscmVhZHkgaW4gdXNlIGJ5IHRoZSBDb25maWdJdGVtcyB3aXRoIHRoZSBmb2xsb3dpbmcgTnVtYmVyKHMpOiAlcyIsICIkUURhdGF7IkR1cGxpY2F0ZXMifSJ9PC9wPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpSb3dOYW1lRXJyb3JEdXBsaWNhdGVzIC0tPgo8IS0tIGR0bDpibG9jazpSb3dOYW1lRXJyb3JSZWdFeCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPiRUZXh0eyIkRGF0YXsiUmVnRXhFcnJvck1lc3NhZ2UifSJ9PC9wPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpSb3dOYW1lRXJyb3JSZWdFeCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6Um93TmFtZSAtLT4KPCEtLSBkdGw6YmxvY2s6Um93RGVwbFN0YXRlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJEZXBsU3RhdGVJRCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IkRlcGxveW1lbnQgU3RhdGUifTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IkRlcGxTdGF0ZU9wdGlvblN0cmcifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRGVwbFN0YXRlSURFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiID48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkRlcGxTdGF0ZUlEU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6Um93RGVwbFN0YXRlIC0tPgo8IS0tIGR0bDpibG9jazpSb3dJbmNpU3RhdGUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkluY2lTdGF0ZUlEIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiSW5jaWRlbnQgU3RhdGUifTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IkluY2lTdGF0ZU9wdGlvblN0cmcifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iSW5jaVN0YXRlSURFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiID48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkluY2lTdGF0ZUlEU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6Um93SW5jaVN0YXRlIC0tPgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+Cgo8IS0tIGR0bDpibG9jazpYTUxSb3cgLS0+CjwhLS0gZHRsOmJsb2NrOlhNTFJvd0ZpZWxkc2V0U3RhcnQgLS0+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgo8IS0tIGR0bDpibG9jazpYTUxSb3dGaWVsZHNldFN0YXJ0IC0tPgo8IS0tIGR0bDpibG9jazpYTUxSb3dWYWx1ZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICREYXRheyJMYWJlbENsYXNzIn0gJERhdGF7IkxhYmVsRm9yIn0+CjwhLS0gZHRsOmJsb2NrOlhNTFJvd1ZhbHVlQ29udGVudFJlcXVpcmVkIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4KPCEtLSBkdGw6YmxvY2s6WE1MUm93VmFsdWVDb250ZW50UmVxdWlyZWQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiJERhdGF7Ik5hbWUifSJ9OgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSIkRGF0YXsiQ2xhc3MifSBGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiSW5wdXRTdHJpbmcifQo8IS0tIGR0bDpibG9jazpYTUxSb3dWYWx1ZUNvbnRlbnREZWxldGUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJEaXNhYmxlVmFsaWRhdGlvbiBSZW1vdmUiIHR5cGU9InN1Ym1pdCIgbmFtZT0iJFFEYXRheyJJbnB1dEtleSJ9OjpEZWxldGUiIHZhbHVlPSIkVGV4dHsiRGVsZXRlIn0iPiRUZXh0eyJEZWxldGUifTwvYnV0dG9uPgo8IS0tIGR0bDpibG9jazpYTUxSb3dWYWx1ZUNvbnRlbnREZWxldGUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSIkUURhdGF7Ikl0ZW1JRCJ9RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIiA+PHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOlhNTFJvd1ZhbHVlU2VydmVyRXJyb3IgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSIkUURhdGF7Ikl0ZW1JRCJ9U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6WE1MUm93VmFsdWVTZXJ2ZXJFcnJvciAtLT4KPCEtLSBkdGw6YmxvY2s6WE1MUm93VmFsdWVSZWdFeEVycm9yIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iJFFEYXRheyJJdGVtSUQifVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IiREYXRheyJSZWdFeEVycm9yTWVzc2FnZSJ9In08L3A+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOlhNTFJvd1ZhbHVlUmVnRXhFcnJvciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlhNTFJvd1ZhbHVlIC0tPgoKPCEtLSBkdGw6YmxvY2s6WE1MUm93QWRkQ29udGVudCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICREYXRheyJDbGFzcyJ9IGZvcj0iJFFEYXRheyJJdGVtSUQifSI+JFRleHR7IiREYXRheyJOYW1lIn0ifTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iRGlzYWJsZVZhbGlkYXRpb24gQWRkIiBpZD0iJFFEYXRheyJJdGVtSUQifSIgdHlwZT0ic3VibWl0IiBuYW1lPSIkUURhdGF7IklucHV0S2V5In06OkFkZCIgdmFsdWU9IiRUZXh0eyJBZGQifSIgdGl0bGU9IiRUZXh0eyIkRGF0YXsiRGVzY3JpcHRpb24ifSJ9IiA+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpYTUxSb3dBZGRDb250ZW50IC0tPgoKPCEtLSBkdGw6YmxvY2s6WE1MUm93RmllbGRzZXRFbmQgLS0+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KPCEtLSBkdGw6YmxvY2s6WE1MUm93RmllbGRzZXRFbmQgLS0+CjwhLS0gZHRsOmJsb2NrOlhNTFJvdyAtLT4KCjwhLS0gZHRsOmJsb2NrOkF0dGFjaG1lbnRVcGxvYWQgLS0+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IkF0dGFjaG1lbnQifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+CjwhLS0gZHRsOmJsb2NrOkF0dGFjaG1lbnQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7IkZpbGVuYW1lIn0gKCRRRGF0YXsiRmlsZXNpemUifSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGlkPSJBdHRhY2htZW50RGVsZXRlJFFEYXRheyJGaWxlSUQifSIgbmFtZT0iQXR0YWNobWVudERlbGV0ZSRRRGF0YXsiRmlsZUlEIn0iIHZhbHVlPSIkVGV4dHsiRGVsZXRlIn0iPiRUZXh0eyJEZWxldGUifTwvYnV0dG9uPgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgJCgnI0F0dGFjaG1lbnREZWxldGUkUURhdGF7IkZpbGVJRCJ9JykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkRpc2FibGVWYWxpZGF0aW9uKCQoJyNBdHRhY2htZW50RGVsZXRlJFFEYXRheyJGaWxlSUQifScpLmNsb3Nlc3QoJ2Zvcm0nKSk7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOkF0dGFjaG1lbnQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iRmlsZVVwbG9hZCIgaWQ9IkZpbGVVcGxvYWQiIHR5cGU9ImZpbGUiIHNpemU9IjQwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJBdHRhY2htZW50VXBsb2FkIiBuYW1lPSJBdHRhY2htZW50VXBsb2FkIiB2YWx1ZT0iMCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcjRmlsZVVwbG9hZCcpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHZhciAkRm9ybSA9ICQoJyNGaWxlVXBsb2FkJykuY2xvc2VzdCgnZm9ybScpOwogICAgICAgIENvcmUuRm9ybS5WYWxpZGF0ZS5EaXNhYmxlVmFsaWRhdGlvbigkRm9ybSk7CiAgICAgICAgJEZvcm0uZmluZCgnI0F0dGFjaG1lbnRVcGxvYWQnKS52YWwoJzEnKS5lbmQoKS5zdWJtaXQoKTsKICAgIH0pOwovL11dPjwvc2NyaXB0Pgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CjwhLS0gZHRsOmJsb2NrOkF0dGFjaG1lbnRVcGxvYWQgLS0+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5hbWU9IlN1Ym1pdFNhdmUiIGNsYXNzPSJQcmltYXJ5IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiU2F2ZSJ9Ij4kVGV4dHsiU3VibWl0In08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgoKPCEtLSBkdGw6YmxvY2s6RW5kU21hbGwgLS0+CiAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpFbmRTbWFsbCAtLT4KICAgICAgICA8L2Zvcm0+CjwhLS0gZHRsOmJsb2NrOkVuZE5vcm1hbCAtLT4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RW5kTm9ybWFsIC0tPgoKCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgICAgICAgICAkKCcuRGlzYWJsZVZhbGlkYXRpb24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgICAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkRpc2FibGVWYWxpZGF0aW9uKCQoJyNDbGFzc0l0ZW0nKSk7CiAgICAgICAgICAgICAgICAvLyBmaXggZm9yIFNhZmFyaTogcmFjZSBjb25kaXRpb24gd2l0aCBzdWJtaXQgaW4gQ29yZS5Gb3JtLlZhbGlkYXRlLmpzCiAgICAgICAgICAgICAgICAvLyBmaXhlZCBpbiBPVFJTIDMuMC41LCB0aGlzIGxpbmUgcmVtYWlucyBoZXJlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zCiAgICAgICAgICAgICAgICAkKCcjQ2xhc3NJdGVtJykucmVtb3ZlQ2xhc3MoJ1ByZXZlbnRNdWx0aXBsZVN1Ym1pdHMnKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+Cg==
IyAtLQojIEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgaGlzdG9yeQojIENvcHlyaWdodCAoQykgMjAwMS0yMDEwIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS0gc3RhcnQgZm9ybSAtLT4KPGRpdiBjbGFzcz0iTGF5b3V0UG9wdXAgQVJJQVJvbGVNYWluIj4KCiAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgIDxoMT4KICAgICAgICAgICAgJFRleHR7Ikhpc3Rvcnkgb2YifSBDb25maWcgSXRlbTogJERhdGF7Ik5hbWUifQogICAgICAgIDwvaDE+CiAgICAgICAgPHA+CiAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJDYW5jZWxDbG9zZVBvcHVwIj4kVGV4dHsiQ2FuY2VsICYgY2xvc2Ugd2luZG93In08L2E+CiAgICAgICAgPC9wPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4KICAgICAgICAgICAgICAgICAgICAkVGV4dHsiSGlzdG9yeSBDb250ZW50In0KICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBzdW1tYXJ5PSJDb25maWd1cmF0aW9uIEl0ZW0gSGlzdG9yeSIgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IkFjdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJDb21tZW50In0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7Ilpvb20ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiVXNlciJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJDcmVhdGV0aW1lIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOlJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRdW90ZXsiJERhdGF7Ikhpc3RvcnlUeXBlIn0ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkUURhdGF7IkNvbW1lbnQifSI+JFFEYXRheyJDb21tZW50IiwiMTAwIn08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgIGNsYXNzPSJMaW5rWm9vbVZpZXcgQXNCbG9jayIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9JERhdGF7IkNvbmZpZ0l0ZW1JRCJ9O1ZlcnNpb25JRD0kRGF0YXsiVmVyc2lvbklEIn0iPiRUZXh0eyJab29tIHZpZXcifTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFF1b3RleyIkRGF0YXsiVXNlckxvZ2luIn0ifSAoJFF1b3RleyIkRGF0YXsiVXNlckZpcnN0bmFtZSJ9ICREYXRheyJVc2VyTGFzdG5hbWUifSIsIjIwIn0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lTG9uZ3siJERhdGF7IkNyZWF0ZVRpbWUifSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2Pgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgJCgnYS5MaW5rWm9vbVZpZXcnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICB3aW5kb3cub3BlbmVyLkNvcmUuVUkuUG9wdXAuRmlyZVBvcHVwRXZlbnQoJ1VSTCcsIHsgVVJMOiAkKHRoaXMpLmF0dHIoJ2hyZWYnKX0pOwogICAgICAgIHdpbmRvdy5jbG9zZSgpOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iRm9vdGVyIj4KICAgIDwvZGl2Pgo8L2Rpdj4KPCEtLSBlbmQgZm9ybSAtLT4K
IyAtLQojIEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhci5kdGwgLSBodG1sIGZvciBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgdGFibGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMCBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyIC0tPgo8ZGl2IGNsYXNzPSJPdmVydmlld0JveCBBUklBUm9sZU1haW4gJFFEYXRheyJWaWV3In0iPgogICAgPGgxPiRUZXh0eyIkRGF0YXsiVGl0bGVOYW1lIn0ifTogJFRleHR7IiREYXRheyJUaXRsZVZhbHVlIn0ifTwvaDE+CgogICAgJERhdGF7IkRhdGFJblRoZU1pZGRsZSJ9CgogICAgPGRpdiBjbGFzcz0iT3ZlcnZpZXdDb250cm9sIiBpZD0iT3ZlcnZpZXdDb250cm9sIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250cm9sUm93Ij4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJGaWx0ZXIgLS0+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IlRhYnMiPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhckZpbHRlckl0ZW0gLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkIC0tPgogICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iQWN0aXZlICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJGaWx0ZXJMaW5rIn1GaWx0ZXI9JExRRGF0YXsiRmlsdGVyIn0iPiRUZXh0eyIkRGF0YXsiTmFtZSJ9In08c3Bhbj4kUURhdGF7IkNvdW50In08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkIC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhckZpbHRlckl0ZW1TZWxlY3RlZE5vdCAtLT4KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IiRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJGaWx0ZXJMaW5rIn1GaWx0ZXI9JExRRGF0YXsiRmlsdGVyIn0iPiRUZXh0eyIkRGF0YXsiTmFtZSJ9In08c3Bhbj4kUURhdGF7IkNvdW50In08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkTm90IC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhckZpbHRlckl0ZW1TcGxpdCAtLT4KICAgICAgICAgICAgICAgICAgICAtCjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNwbGl0IC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhckZpbHRlckl0ZW0gLS0+CiAgICAgICAgICAgICAgICA8L3VsPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhckZpbHRlciAtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJQYWdlQmFjayAtLT4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iVGFicyI+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iSVRTTUNvbmZpZ0l0ZW1TZWFyY2giIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtCYWNrIn0iPiRUZXh0eyJDaGFuZ2Ugc2VhcmNoIG9wdGlvbnMifTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNJVFNNQ29uZmlnSXRlbVNlYXJjaCcpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgSVRTTS5BZ2VudC5Db25maWdJdGVtLlNlYXJjaC5PcGVuU2VhcmNoRGlhbG9nKCAnQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCcsICckUURhdGF7IlByb2ZpbGUifScsICckUURhdGF7IkNsYXNzSUQifScgKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclBhZ2VCYWNrIC0tPgoKPCEtLSBkdGw6YmxvY2s6Q29udGV4dFNldHRpbmdzIC0tPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJDb250ZXh0RnVuY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IkNvbnRleHRTZXR0aW5ncyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGlkPSJTaG93Q29udGV4dFNldHRpbmdzRGlhbG9nIiB0aXRsZT0iJFRleHR7IkNvbnRleHQgU2V0dGluZ3MifSI+PHNwYW4+JFRleHR7IkNvbnRleHQgU2V0dGluZ3MifTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICAgICAgPGRpdiBpZD0iQ29udGV4dFNldHRpbmdzRGlhbG9nQ29udGFpbmVyIiBjbGFzcz0iSGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGlkPSJDb250ZXh0U2V0dGluZ3NEaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJBZ2VudFByZWZlcmVuY2VzIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlVwZGF0ZSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJHcm91cCIgdmFsdWU9IiRRRGF0YXsiR3JvdXAifSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJSZWRpcmVjdFVSTCIgdmFsdWU9IiRRRGF0YXsiUmVxdWVzdGVkVVJMIn0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iJFFEYXRheyJQcmVmZXJlbmNlc0tleSJ9Ij4kVGV4dHsiQ29uZmlnIEl0ZW1zIHBlciBwYWdlIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiUGFnZVNob3duU3RyaW5nIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgIDwvZGl2PgoKPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgLy8gYmluZCB0aGUgQ29udGV4dFNldHRpbmdzRGlhbG9nQ29udGFpbmVyCiAgICAkKCcjU2hvd0NvbnRleHRTZXR0aW5nc0RpYWxvZycpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coJCgnI0NvbnRleHRTZXR0aW5nc0RpYWxvZ0NvbnRhaW5lcicpLCAnJEpTVGV4dHsiU2V0dGluZ3MifScsICcyMCUnLCAnQ2VudGVyJywgdHJ1ZSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIExhYmVsOiAnJEpTVGV4dHsiU3VibWl0In0nLAogICAgICAgICAgICAgICAgICAgIFR5cGU6ICdTdWJtaXQnLAogICAgICAgICAgICAgICAgICAgIENsYXNzOiAnUHJpbWFyeScKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICk7CiAgICAgICAgRXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICBFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjwhLS0gZHRsOmJsb2NrOkNvbnRleHRTZXR0aW5ncyAtLT4KCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJBY3Rpb25Sb3ciPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iT3ZlcnZpZXdBY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICAkRGF0YXsiQWN0aW9uUm93In0KICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Ik92ZXJ2aWV3Wm9vbSI+Cgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclZpZXdNb2RlIC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclZpZXdNb2RlU2VsZWN0ZWQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iQWN0aXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSIkUURhdGF7Ik5hbWUifSIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtGaWx0ZXI9JExRRGF0YXsiRmlsdGVyIn07Vmlldz0kTFFEYXRheyJWaWV3In07JERhdGF7IkxpbmtGaWx0ZXIifSIgdGl0bGU9IiRUZXh0eyIkRGF0YXsiTmFtZSJ9In0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbWFnZU1vZGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTmFtZVNob3J0Ij4kVGV4dHsiJERhdGF7Ik5hbWVTaG9ydCJ9In08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJOYW1lTG9uZyI+JFRleHR7IiREYXRheyJOYW1lIn0ifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyVmlld01vZGVTZWxlY3RlZCAtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJWaWV3TW9kZU5vdFNlbGVjdGVkIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iJFFEYXRheyJOYW1lIn0iIG5hbWU9Ik92ZXJ2aWV3Q29udHJvbCIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtGaWx0ZXI9JExRRGF0YXsiRmlsdGVyIn07Vmlldz0kTFFEYXRheyJWaWV3In07JERhdGF7IkxpbmtGaWx0ZXIifSIgdGl0bGU9IiRUZXh0eyIkRGF0YXsiTmFtZSJ9In0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbWFnZU1vZGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTmFtZVNob3J0Ij4kVGV4dHsiJERhdGF7Ik5hbWVTaG9ydCJ9In08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJOYW1lTG9uZyI+JFRleHR7IiREYXRheyJOYW1lIn0ifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyVmlld01vZGVOb3RTZWxlY3RlZCAtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJWaWV3TW9kZSAtLT4KICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJQYWdpbmF0aW9uIj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJQYWdlTmF2QmFyIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiUmVzdWx0TG9uZyJ9CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJTaXRlTmF2QmFyTG9uZyJ9CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyUGFnZU5hdkJhciAtLT4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXJMZWZ0Ij48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgojIHNvcnQgb3JkZXIgYmFyIGlmIG5lZWRlZAogICAgICAgICAgICAgICAgJERhdGF7IlNvcnRPcmRlckJhciJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhciAtLT4K
IyAtLQojIEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsLmR0bCAtIGh0bWwgZm9yIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyB0YWJsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgQ29yZS5VSS5BY3Rpb25Sb3cuSW5pdCgpOwovL11dPjwvc2NyaXB0Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KCjxkaXYgaWQ9Ik92ZXJ2aWV3Qm9keSIgY2xhc3M9Ik92ZXJ2aWV3IFRpY2tldExpc3QiPgogICAgPHRhYmxlIGNsYXNzPSJUYWJsZVNtYWxsIiBzdW1tYXJ5PSJBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUiPgogICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgPHRyPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDdXJJbmNpU2lnbmFsSGVhZGVyIC0tPgogICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPiRUZXh0eyJTdGF0ZSJ9PC9zcGFuPgogICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3VySW5jaVNpZ25hbEhlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTnVtYmVySGVhZGVyIC0tPgogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJOdW1iZXIgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTskRGF0YXsiTGlua1NvcnQifTtTb3J0Qnk9TnVtYmVyO09yZGVyQnk9JExRRGF0YXsiT3JkZXJCeSJ9Ij4kQ29uZmlneyJJVFNNQ29uZmlnSXRlbTo6SG9vayJ9PC9hPgogICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTnVtYmVySGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmROYW1lSGVhZGVyIC0tPgogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJOYW1lICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtTb3J0In07U29ydEJ5PU5hbWU7T3JkZXJCeT0kTFFEYXRheyJPcmRlckJ5In0iPiRUZXh0eyJOYW1lIn08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpSZWNvcmROYW1lSGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDbGFzc0hlYWRlciAtLT4KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2xhc3MgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTskRGF0YXsiTGlua1NvcnQifTtTb3J0Qnk9Q2xhc3NJRDtPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JFRleHR7IkNsYXNzIn08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDbGFzc0hlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3VyRGVwbFN0YXRlSGVhZGVyIC0tPgogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDdXJEZXBsU3RhdGUgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTskRGF0YXsiTGlua1NvcnQifTtTb3J0Qnk9RGVwbFN0YXRlSUQ7T3JkZXJCeT0kTFFEYXRheyJPcmRlckJ5In0iPiRUZXh0eyJEZXBsb3ltZW50IFN0YXRlIn08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDdXJEZXBsU3RhdGVIZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZEN1ckRlcGxTdGF0ZVR5cGVIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IkRlcGxveW1lbnQgU3RhdGUgVHlwZSJ9PC9zcGFuPgogICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3VyRGVwbFN0YXRlVHlwZUhlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3VySW5jaVN0YXRlSGVhZGVyIC0tPgogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDdXJJbmNpU3RhdGUgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTskRGF0YXsiTGlua1NvcnQifTtTb3J0Qnk9SW5jaVN0YXRlSUQ7T3JkZXJCeT0kTFFEYXRheyJPcmRlckJ5In0iPiRUZXh0eyJDdXJyZW50IEluY2lkZW50IFN0YXRlIn08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDdXJJbmNpU3RhdGVIZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZEN1ckluY2lTdGF0ZVR5cGVIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IkN1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSJ9PC9zcGFuPgogICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3VySW5jaVN0YXRlVHlwZUhlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkWE1MQXR0cmlidXRlSGVhZGVyIC0tPgogICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPiRUZXh0eyIkRGF0YXsiWE1MQXR0cmlidXRlSGVhZGVyIn0ifTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZFhNTEF0dHJpYnV0ZUhlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTGFzdENoYW5nZWRIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ikxhc3RDaGFuZ2VkICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtTb3J0In07U29ydEJ5PUNoYW5nZVRpbWU7T3JkZXJCeT0kTFFEYXRheyJPcmRlckJ5In0iPiRUZXh0eyJMYXN0IGNoYW5nZWQifTwvYT4KICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZExhc3RDaGFuZ2VkSGVhZGVyIC0tPgogICAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGhlYWQ+CiAgICAgICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpOb0RhdGFGb3VuZE1zZyAtLT4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IiRRRGF0YXsiVG90YWxDb2x1bW5zIn0iPgogICAgICAgICAgICAgICAgICAgICRUZXh0eyJObyBkYXRhIGZvdW5kLiJ9CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpOb0RhdGFGb3VuZE1zZyAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkIC0tPgogICAgICAgICAgICA8dHIgY2xhc3M9Ik1hc3RlckFjdGlvbiI+CjwhLS0gZHRsOmJsb2NrOlJlY29yZEN1ckluY2lTaWduYWwgLS0+CiAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IiRUZXh0eyIkRGF0YXsiQ3VySW5jaVN0YXRlIn0ifSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSIkUURhdGF7IkN1ckluY2lTaWduYWwifSI+IiRUZXh0eyIkRGF0YXsiQ3VySW5jaVN0YXRlIn0ifSI8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDdXJJbmNpU2lnbmFsIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmROdW1iZXIgLS0+CiAgICAgICAgICAgICAgICA8dGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlckxpbmtTdGFydCAtLT4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD0kTFFEYXRheyJDb25maWdJdGVtSUQifSIgdGl0bGU9IiRMUURhdGF7Ik51bWJlciJ9IiBjbGFzcz0iTWFzdGVyQWN0aW9uTGluayI+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlckxpbmtTdGFydCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJOdW1iZXIifQo8IS0tIGR0bDpibG9jazpSZWNvcmROdW1iZXJMaW5rRW5kIC0tPgogICAgICAgICAgICAgICAgICAgIDwvYT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTnVtYmVyTGlua0VuZCAtLT4KICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTmFtZSAtLT4KICAgICAgICAgICAgICAgIDx0ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTmFtZUxpbmtTdGFydCAtLT4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD0kTFFEYXRheyJDb25maWdJdGVtSUQifSIgdGl0bGU9IiRMUURhdGF7Ik5hbWUifSIgY2xhc3M9Ik1hc3RlckFjdGlvbkxpbmsiPgo8IS0tIGR0bDpibG9jazpSZWNvcmROYW1lTGlua1N0YXJ0IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkUURhdGF7Ik5hbWUifSI+JFFEYXRheyJOYW1lIiwiNDAifTwvZGl2Pgo8IS0tIGR0bDpibG9jazpSZWNvcmROYW1lTGlua0VuZCAtLT4KICAgICAgICAgICAgICAgICAgICA8L2E+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5hbWVMaW5rRW5kIC0tPgogICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTmFtZSAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ2xhc3MgLS0+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iJFRleHR7IiREYXRheyJDbGFzcyJ9In0iPiRUZXh0eyIkRGF0YXsiQ2xhc3MifSJ9PC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDbGFzcyAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3VyRGVwbFN0YXRlIC0tPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IiRUZXh0eyIkRGF0YXsiQ3VyRGVwbFN0YXRlIn0ifSI+JFRleHR7IiREYXRheyJDdXJEZXBsU3RhdGUifSJ9PC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDdXJEZXBsU3RhdGUgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZEN1ckRlcGxTdGF0ZVR5cGUgLS0+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iJFRleHR7IiREYXRheyJDdXJEZXBsU3RhdGVUeXBlIn0ifSI+JFRleHR7IiREYXRheyJDdXJEZXBsU3RhdGVUeXBlIn0ifTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3VyRGVwbFN0YXRlVHlwZSAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3VySW5jaVN0YXRlIC0tPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IiRUZXh0eyIkRGF0YXsiQ3VySW5jaVN0YXRlIn0ifSI+JFRleHR7IiREYXRheyJDdXJJbmNpU3RhdGUifSJ9PC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDdXJJbmNpU3RhdGUgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZEN1ckluY2lTdGF0ZVR5cGUgLS0+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iJFRleHR7IiREYXRheyJDdXJJbmNpU3RhdGVUeXBlIn0ifSI+JFRleHR7IiREYXRheyJDdXJJbmNpU3RhdGVUeXBlIn0ifTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3VySW5jaVN0YXRlVHlwZSAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkWE1MQXR0cmlidXRlIC0tPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IiRRRGF0YXsiWE1MQXR0cmlidXRlRGF0YSJ9Ij4kUURhdGF7IlhNTEF0dHJpYnV0ZURhdGEifTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkWE1MQXR0cmlidXRlIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRMYXN0Q2hhbmdlZCAtLT4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkVGltZUxvbmd7IiRRRGF0YXsiQ3JlYXRlVGltZSJ9In0iPiRUaW1lTG9uZ3siJFFEYXRheyJDcmVhdGVUaW1lIn0ifTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTGFzdENoYW5nZWQgLS0+CiAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlJlY29yZCAtLT4KICAgICAgICA8L3Rib2R5PgogICAgPC90YWJsZT4KPC9kaXY+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJy5NYXN0ZXJBY3Rpb24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHZhciAkTWFzdGVyQWN0aW9uTGluayA9ICQodGhpcykuZmluZCgnLk1hc3RlckFjdGlvbkxpbmsnKTsKICAgICAgICAvLyBvbmx5IGFjdCBpZiB0aGUgbGluayB3YXMgbm90IGNsaWNrZWQgZGlyZWN0bHkKICAgICAgICBpZiAoRXZlbnQudGFyZ2V0ICE9PSAkTWFzdGVyQWN0aW9uTGluay5nZXQoMCkpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gJE1hc3RlckFjdGlvbkxpbmsuYXR0cignaHJlZicpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo=
IyAtLQojIEFnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5kdGwgLSBwcm92aWRlcyBIVE1MIHByaW50IHZpZXcKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgo8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMSIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KICAgIDx0cj4KICAgICAgICA8dGQgY2xhc3M9Im1haW5oZWFkIj4kVGV4dHsiQ29uZmlnSXRlbSJ9PC90ZD4KICAgIDwvdHI+CjwvdGFibGU+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMTAiIHdpZHRoPSIxMDAlIj4KICAgIDx0cj4KICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPgogICAgICAgICAgICAkVGV4dHsiQ29uZmlnSXRlbS1JbmZvIn06CiAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIzIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IkNsYXNzIn06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFFEYXRheyJDbGFzcyJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJDcmVhdGVkIn06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFRpbWVMb25neyIkRGF0YXsiQ3JlYXRlVGltZSJ9In08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJDb25maWdJdGVtIn06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFFEYXRheyJDdXJyZW50TmFtZSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJDcmVhdGVkIGJ5In06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFFEYXRheyJDcmVhdGVCeVVzZXJMb2dpbiJ9ICgkUURhdGF7IkNyZWF0ZUJ5VXNlckZpcnN0bmFtZSJ9ICRRRGF0YXsiQ3JlYXRlQnlVc2VyTGFzdG5hbWUifSk8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJDdXJyZW50IERlcGxveW1lbnQgU3RhdGUifTo8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4kVGV4dHsiJERhdGF7IkN1ckRlcGxTdGF0ZSJ9In08L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7Ikxhc3QgY2hhbmdlZCJ9OjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiRUaW1lTG9uZ3siJERhdGF7IkNoYW5nZVRpbWUifSJ9PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiQ3VycmVudCBJbmNpZGVudCBTdGF0ZSJ9OjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiRUZXh0eyIkRGF0YXsiQ3VySW5jaVN0YXRlIn0ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiTGFzdCBjaGFuZ2VkIGJ5In06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFFEYXRheyJDaGFuZ2VCeVVzZXJMb2dpbiJ9ICgkUURhdGF7IkNoYW5nZUJ5VXNlckZpcnN0bmFtZSJ9ICRRRGF0YXsiQ2hhbmdlQnlVc2VyTGFzdG5hbWUifSk8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L3RkPgogICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6TGluayAtLT4KICAgIDx0cj4KICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPgogICAgICAgICAgICAkVGV4dHsiTGlua2VkLU9iamVjdCJ9OgogICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjUwJSIgdmFsaWduPSJ0b3AiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMyIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KPCEtLSBkdGw6YmxvY2s6TGlua1R5cGUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgdmFsaWduPSJ0b3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSIgd2lkdGg9IjIwJSI+JFRleHR7IiREYXRheyJMaW5rVHlwZU5hbWUifSJ9OjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPgo8IS0tIGR0bDpibG9jazpMaW5rVHlwZVJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IkxpbmtTdHJnIn08YnI+CjwhLS0gZHRsOmJsb2NrOkxpbmtUeXBlUm93IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpMaW5rVHlwZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L3RkPgogICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6TGluayAtLT4KPC90YWJsZT4KPCEtLSBkdGw6YmxvY2s6VmVyc2lvbiAtLT4KPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjY0MCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBiZ2NvbG9yPSIjMDAwMDAwIiBjbGFzcz0iY29udGFpbmVyIj4KICAgIDx0cj4KICAgICAgICA8dGQ+CiAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI2NDAiIGNlbGxwYWRkaW5nPSIxMCIgY2VsbHNwYWNpbmc9IjEiIGJnY29sb3I9IiNmZmZmZmYiPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgYmdjb2xvcj0iI2ZmZmZmZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTAwJSIgY2xhc3M9ImNvbnRlbnRrZXkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiVmVyc2lvbiJ9Jm5ic3A7JFFEYXRheyJWZXJzaW9uTnVtYmVyIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5IiB3aWR0aD0iMjUlIj4kVGV4dHsiQ3JlYXRlZCJ9OjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiRUaW1lTG9uZ3siJERhdGF7IkNyZWF0ZVRpbWUifSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiQ3JlYXRlZCBieSJ9OjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiRRRGF0YXsiQ3JlYXRlQnlVc2VyTG9naW4ifSAoJFFEYXRheyJDcmVhdGVCeVVzZXJGaXJzdG5hbWUifSAkUURhdGF7IkNyZWF0ZUJ5VXNlckxhc3RuYW1lIn0pPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4mbmJzcDs8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4mbmJzcDs8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJOYW1lIn06PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFFEYXRheyJOYW1lIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJEZXBsb3ltZW50IFN0YXRlIn06PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFRleHR7IiREYXRheyJEZXBsU3RhdGUifSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiSW5jaWRlbnQgU3RhdGUifTo8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4kVGV4dHsiJERhdGF7IkluY2lTdGF0ZSJ9In08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6VmVyc2lvblJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPgo8IS0tIGR0bDpibG9jazpWZXJzaW9uUm93TmFtZVByZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CjwhLS0gZHRsOmJsb2NrOlZlcnNpb25Sb3dOYW1lUHJlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiJERhdGF7Ik5hbWUifSJ9OiZuYnNwOyZuYnNwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPgo8IS0tIGR0bDpibG9jazpWZXJzaW9uUm93VmFsdWVQcmUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwo8IS0tIGR0bDpibG9jazpWZXJzaW9uUm93VmFsdWVQcmUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJWYWx1ZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlZlcnNpb25Sb3cgLS0+CjwhLS0gZHRsOmJsb2NrOkF0dGFjaG1lbnRzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IkF0dGFjaG1lbnRzIn06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiRmlsZW5hbWUifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpBdHRhY2htZW50cyAtLT4KPCEtLSBkdGw6YmxvY2s6QXR0YWNobWVudFJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiRmlsZW5hbWUifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpBdHRhY2htZW50Um93IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgo8L3RhYmxlPgo8IS0tIGR0bDpibG9jazpWZXJzaW9uIC0tPgo=
IyAtLQojIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2guZHRsIC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPCEtLSBkdGw6YmxvY2s6U2VhcmNoQUpBWCAtLT4KPGRpdiBjbGFzcz0iSW5uZXJDb250ZW50Ij4KICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsIGZvcj0iQ2xhc3MiPiRUZXh0eyJDbGFzcyJ9PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCIgaWQ9J0RpdkNsYXNzSUQnPgogICAgICAgICAgICAkRGF0YXsiQ2xhc3NPcHRpb25TdHJnIn0KICAgICAgICA8L2Rpdj4KICAgIDwvZmllbGRzZXQ+CjwvZGl2PgoKPGRpdiBjbGFzcz0iSW5uZXJDb250ZW50IiBpZD0iQUpBWFVwZGF0ZSI+CgogICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBpZD0iU2VhcmNoRm9ybSI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iLz4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTZWFyY2giLz4KCiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgSGlkZGVuIiBpZD0nSVRTTVNlYXJjaFByb2ZpbGUnPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiU2VhcmNoIHRlbXBsYXRlIn08L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iU2VhcmNoUHJvZmlsZSIgbmFtZT0iU2VhcmNoUHJvZmlsZSIgdmFsdWU9IiRRRGF0YXsiUHJvZmlsZSJ9Ii8+CgogICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iU2VhcmNoUHJvZmlsZU5ldyIgdmFsdWU9IiRUZXh0eyJDcmVhdGUgTmV3In0iPiRUZXh0eyJDcmVhdGUgTmV3In08L2J1dHRvbj4KCiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJTZWFyY2hQcm9maWxlRGVsZXRlIiBjbGFzcz0iSGlkZGVuIiB2YWx1ZT0iJFRleHR7IkRlbGV0ZSJ9Ij4kVGV4dHsiRGVsZXRlIn08L2J1dHRvbj4KCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJTZWFyY2hQcm9maWxlQWRkQmxvY2siPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJQcm9maWxlTmFtZSIgaWQ9IlNlYXJjaFByb2ZpbGVBZGROYW1lIi8+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHRpdGxlPSIkVGV4dHsiQ3JlYXRlIFRlbXBsYXRlIn0iIGlkPSJTZWFyY2hQcm9maWxlQWRkQWN0aW9uIj4kVGV4dHsiQ3JlYXRlIE5ldyBUZW1wbGF0ZSJ9PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU2F2ZVByb2ZpbGUiIHZhbHVlPSIxIi8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9maWVsZHNldD4KCiAgICA8L2Zvcm0+CjwvZGl2PgoKPGRpdiBjbGFzcz0iQ29udGVudEZvb3RlciBDZW50ZXIiPgogICAgPGJ1dHRvbiBpZD0iU2VhcmNoRm9ybVN1Ym1pdCIgY2xhc3M9IlByaW1hcnkgSGlkZGVuIiB2YWx1ZT0iUnVuIFNlYXJjaCI+JFRleHR7IlJ1biBTZWFyY2gifTwvYnV0dG9uPgo8L2Rpdj4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCi8qZ2xvYmFsIElUU006IHRydWUgKi8KICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpewogICAgICAgICQoJyNTZWFyY2hDbGFzc0lEJykuYmluZCgnY2hhbmdlJywgZnVuY3Rpb24oKXsKICAgICAgICAgICAgaWYgKCAkKCcjU2VhcmNoQ2xhc3NJRCcpLnZhbCgpICE9PSAiIiApewogICAgICAgICAgICAgICAgSVRTTS5BZ2VudC5Db25maWdJdGVtLlNlYXJjaC5Mb2FkUHJvZmlsZSggJCgnI1NlYXJjaFByb2ZpbGUnKS52YWwoKSApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGUnKS5hdHRyKCJpZCIsICJTZWFyY2hQcm9maWxlT2xkIik7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0sIDE1MCk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmJsb2NrOlNlYXJjaEFKQVggLS0+Cgo8IS0tIGR0bDpibG9jazpTZWFyY2hBSkFYU2V0Q2xhc3MgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwovKmdsb2JhbCBJVFNNOiB0cnVlICovCiAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKXsKICAgICAgICAgICAgSVRTTS5BZ2VudC5Db25maWdJdGVtLlNlYXJjaC5Mb2FkUHJvZmlsZSggIiRRRGF0YXsiUHJvZmlsZSJ9IiApOwogICAgfSwgMTUwKTsKLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6YmxvY2s6U2VhcmNoQUpBWFNldENsYXNzIC0tPgoKPCEtLSBkdGw6YmxvY2s6U2VhcmNoIC0tPgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwovKmdsb2JhbCBJVFNNOiB0cnVlICovCiAgICBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uU2VhcmNoLk9wZW5TZWFyY2hEaWFsb2coICckRW52eyJBY3Rpb24ifScsICIkUURhdGF7IlByb2ZpbGUifSIsICIkUURhdGF7IkNsYXNzSUQifSIgKTsKLy9dXT48L3NjcmlwdD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8IS0tIGR0bDpibG9jazpTZWFyY2ggLS0+CgoKPCEtLSBkdGw6YmxvY2s6QUpBWENvbnRlbnQgLS0+Cjxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgaWQ9IlNlYXJjaEZvcm0iPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlNlYXJjaCIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ2xhc3NJRCIgdmFsdWU9IiRRRGF0YXsiQ2xhc3NJRCJ9Ij4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlNlYXJjaERpYWxvZyIgdmFsdWU9JzEnPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRW1wdHlTZWFyY2giIHZhbHVlPSIkUURhdGF7IkVtcHR5U2VhcmNoIn0iIGlkPSJFbXB0eVNlYXJjaCIvPgogICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgSGlkZGVuIiBpZD0nSVRTTVNlYXJjaFByb2ZpbGUnPgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8bGFiZWw+JFRleHR7IlNlYXJjaCB0ZW1wbGF0ZSJ9OjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAkRGF0YXsiUHJvZmlsZXNTdHJnIn0KCiAgICAgICAgICAgIDxidXR0b24gaWQ9IlNlYXJjaFByb2ZpbGVOZXciIHZhbHVlPSIkVGV4dHsiQ3JlYXRlIE5ldyJ9Ij4kVGV4dHsiQ3JlYXRlIE5ldyJ9PC9idXR0b24+CgogICAgICAgICAgICA8YnV0dG9uIGlkPSJTZWFyY2hQcm9maWxlRGVsZXRlIiBjbGFzcz0iSGlkZGVuIiB2YWx1ZT0iJFRleHR7IkRlbGV0ZSJ9Ij4kVGV4dHsiRGVsZXRlIn08L2J1dHRvbj4KCiAgICAgICAgICAgIDxkaXYgaWQ9IlNlYXJjaFByb2ZpbGVBZGRCbG9jayI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iUHJvZmlsZU5hbWUiIGlkPSJTZWFyY2hQcm9maWxlQWRkTmFtZSIvPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHRpdGxlPSIkVGV4dHsiQ3JlYXRlIFRlbXBsYXRlIn0iIGlkPSJTZWFyY2hQcm9maWxlQWRkQWN0aW9uIj4kVGV4dHsiQ3JlYXRlIE5ldyBUZW1wbGF0ZSJ9PC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8bGFiZWw+JFRleHR7IlNhdmUgY2hhbmdlcyBpbiB0ZW1wbGF0ZSJ9OjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IlNhdmVQcm9maWxlIiBpZD0iU2F2ZVByb2ZpbGUiIHZhbHVlPSIxIi8+CiAgICAgICAgPC9kaXY+CgogICAgPC9maWVsZHNldD4KCiAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBIaWRkZW4iIGlkPSdJVFNNU2VhcmNoRmllbGRzJz4KICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSIgaWQ9IlNlYXJjaEluc2VydCI+PC9maWVsZHNldD4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsPiRUZXh0eyJBZGQgYW5vdGhlciBhdHRyaWJ1dGUifTo8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgJERhdGF7IkF0dHJpYnV0ZXNTdHJnIn0KICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJBZGQiIHZhbHVlPSJBZGQiIHRpdGxlPSJBZGQgZW50cnkiPiRUZXh0eyJBZGQifTwvYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsIGZvcj0iUHJldmlvdXNWZXJzaW9uU2VhcmNoIj4kVGV4dHsiQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/In08L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgJERhdGF7IlByZXZpb3VzVmVyc2lvbk9wdGlvblN0cmcifQogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsPiRUZXh0eyJPdXRwdXQifTo8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgJERhdGF7IlJlc3VsdEZvcm1TdHJnIn0KICAgICAgICA8L2Rpdj4KICAgIDwvZmllbGRzZXQ+CjwvZm9ybT4KPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgSGlkZGVuIiBpZD0iU2VhcmNoQXR0cmlidXRlc0hpZGRlbiI+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICA8bGFiZWwgZm9yPSJOdW1iZXIiIGlkPSJMYWJlbE51bWJlciI+JFRleHR7Ik51bWJlciJ9ICRUZXh0eyIoZS4gZy4gMTAqNTE1NSBvciAxMDU2NTgqKSJ9OjwvbGFiZWw+CiAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ik51bWJlciIgdmFsdWU9IiRRRGF0YXsiTnVtYmVyIn0iIGNsYXNzPSJXNTBwYyIgLz4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9IlJlbW92ZSIgdmFsdWU9IlJlbW92ZSIgdGl0bGU9IiRUZXh0eyJSZW1vdmUgdGhpcyBlbnRyeSJ9Ij4kVGV4dHsiUmVtb3ZlIn08L2J1dHRvbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDxsYWJlbCBmb3I9Ik5hbWUiIGlkPSJMYWJlbE5hbWUiPiRUZXh0eyJOYW1lIn06PC9sYWJlbD4KICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgdmFsdWU9IiRRRGF0YXsiTmFtZSJ9IiBjbGFzcz0iVzUwcGMiIC8+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJSZW1vdmUiIHZhbHVlPSJSZW1vdmUiIHRpdGxlPSIkVGV4dHsiUmVtb3ZlIHRoaXMgZW50cnkifSI+JFRleHR7IlJlbW92ZSJ9PC9idXR0b24+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICA8bGFiZWwgZm9yPSJEZXBsU3RhdGVJRHMiIGlkPSJMYWJlbERlcGxTdGF0ZUlEcyI+JFRleHR7IkRlcGxveW1lbnQgU3RhdGUifTo8L2xhYmVsPgogICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICREYXRheyJDdXJEZXBsU3RhdGVPcHRpb25TdHJnIn0KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9IlJlbW92ZSIgdmFsdWU9IlJlbW92ZSIgdGl0bGU9IiRUZXh0eyJSZW1vdmUgdGhpcyBlbnRyeSJ9Ij4kVGV4dHsiUmVtb3ZlIn08L2J1dHRvbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDxsYWJlbCBmb3I9IkluY2lTdGF0ZUlEcyIgaWQ9IkxhYmVsSW5jaVN0YXRlSURzIj4kVGV4dHsiSW5jaWRlbnQgU3RhdGUifTo8L2xhYmVsPgogICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICREYXRheyJDdXJJbmNpU3RhdGVPcHRpb25TdHJnIn0KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9IlJlbW92ZSIgdmFsdWU9IlJlbW92ZSIgdGl0bGU9IiRUZXh0eyJSZW1vdmUgdGhpcyBlbnRyeSJ9Ij4kVGV4dHsiUmVtb3ZlIn08L2J1dHRvbj4KICAgIDwvZGl2PgoKPCEtLSBkdGw6YmxvY2s6QXR0cmlidXRlUm93IC0tPgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPGxhYmVsIGZvcj0iJFRleHR7IiREYXRheyJLZXkifSJ9IiBpZD0iTGFiZWwkRGF0YXsiS2V5In0iIHRpdGxlPSIkVGV4dHsiJERhdGF7IkRlc2NyaXB0aW9uIn0ifSI+JFRleHR7IiREYXRheyJOYW1lIn0ifTo8L2xhYmVsPgogICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICREYXRheyJJbnB1dFN0cmluZyJ9CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJSZW1vdmUiIHZhbHVlPSJSZW1vdmUiIHRpdGxlPSIkVGV4dHsiUmVtb3ZlIHRoaXMgZW50cnkifSI+JFRleHR7IlJlbW92ZSJ9PC9idXR0b24+CiAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6QXR0cmlidXRlUm93IC0tPgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgJERhdGF7IkF0dHJpYnV0ZXNPcmlnU3RyZyJ9CjwvZmllbGRzZXQ+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKLypnbG9iYWwgSVRTTTogdHJ1ZSAqLwogICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCl7CjwhLS0gZHRsOmJsb2NrOlNlYXJjaEFKQVhTaG93IC0tPgogICAgICAgIElUU00uQWdlbnQuQ29uZmlnSXRlbS5TZWFyY2guU2VhcmNoQXR0cmlidXRlQWRkKCckUURhdGF7IkF0dHJpYnV0ZSJ9Jyk7CiAgICAgICAgSVRTTS5BZ2VudC5Db25maWdJdGVtLlNlYXJjaC5BZGRpdGlvbmFsQXR0cmlidXRlU2VsZWN0aW9uUmVidWlsZCgpOwo8IS0tIGR0bDpibG9jazpTZWFyY2hBSkFYU2hvdyAtLT4KICAgIH0sIDApOwovL11dPjwvc2NyaXB0Pgo8IS0tIGR0bDpibG9jazpBSkFYQ29udGVudCAtLT4K
IyAtLQojIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2hSZXN1bHRQcmludC5kdGwgLSBodG1sIGZvciBjb25maWcgaXRlbSBzZWFyY2ggcmVzdWx0cyAocHJpbnQgb25seSkKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMCBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgo8IS0tIHN0YXJ0IGZvcm0gLS0+CjxpPiREYXRheyJXYXJuaW5nIn08L2k+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgogICAgPHRyPgogICAgICAgIDx0ZCBjbGFzcz0ibWFpbmhlYWQiPiRUZXh0eyJTZWFyY2gifTwvdGQ+CiAgICA8L3RyPgo8L3RhYmxlPgo8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0Ij4KICAgIDx0cj4KICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRib2R5Ij4KICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMyI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMCUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiQ2xhc3MifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxNSUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiSW5jaWRlbnQgU3RhdGUifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIyMCUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiTmFtZSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjE1JSIgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJOdW1iZXIifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxNSUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiRGVwbG95bWVudCBTdGF0ZSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjUlIiBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IlZlcnNpb24ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIyMCUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiQ3JlYXRlVGltZSJ9PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlJlY29yZCAtLT4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFFEYXRheyJDbGFzcyJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFFEYXRheyJJbmNpU3RhdGUifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiRRRGF0YXsiTmFtZSIsIjMwIn08L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4kUURhdGF7Ik51bWJlciJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFFEYXRheyJEZXBsU3RhdGUiLCIzMCJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFFEYXRheyJWZXJzaW9uSUQiLCIxNSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFRpbWVMb25neyIkRGF0YXsiQ3JlYXRlVGltZSJ9In08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkIC0tPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgo8L3RhYmxlPgo8IS0tIGVuZCBmb3JtIC0tPgo=
IyAtLQojIEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiI+CiAgICA8ZGl2IGNsYXNzPSJDbGVhckxlZnQiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iSGVhZGxpbmUiPgogICAgICAgIDxkaXYgY2xhc3M9IkZsYWciIHRpdGxlPSIkVGV4dHsiJERhdGF7IkN1ckluY2lTdGF0ZSJ9In0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iJFFEYXRheyJDdXJJbmNpU2lnbmFsIn0iPjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8aDEgdGl0bGU9IiRUZXh0eyJDb25maWd1cmF0aW9uIEl0ZW0ifTogJFFEYXRheyJOdW1iZXIifSAmbmRhc2g7ICRRRGF0YXsiTmFtZSIsICI0MCJ9Ij4KICAgICAgICAgICAgJFRleHR7IkNvbmZpZ3VyYXRpb24gSXRlbSJ9OiAkUURhdGF7Ik51bWJlciJ9IDxzcGFuPiZtZGFzaDs8L3NwYW4+ICRRRGF0YXsiTmFtZSIsICI2MCJ9CiAgICAgICAgPC9oMT4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJMYXN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KPCEtLSBkdGw6YmxvY2s6TWV0YSAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24ifTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCBUaWdodCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiQ2xhc3MifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPiRUZXh0eyIkRGF0YXsiQ2xhc3MifSJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiTmFtZSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+JFFEYXRheyJOYW1lIiwiMjUifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IkN1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+JFRleHR7IiREYXRheyJDdXJEZXBsU3RhdGUifSJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiQ3VycmVudCBJbmNpZGVudCBTdGF0ZSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlZhbHVlIiB0aXRsZT0iJFRleHR7IiREYXRheyJDdXJJbmNpU3RhdGUifSJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZsYWcgU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSIkUURhdGF7IkN1ckluY2lTaWduYWwifSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiJERhdGF7IkN1ckluY2lTdGF0ZSJ9In0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJDcmVhdGVkIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4kVGltZUxvbmd7IiREYXRheyJDcmVhdGVUaW1lIn0ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IkNyZWF0ZWQgYnkifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJDcmVhdGVVc2VyRmlyc3RuYW1lIn0gJFFEYXRheyJDcmVhdGVVc2VyTGFzdG5hbWUifQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJMYXN0IGNoYW5nZWQifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPiRUaW1lTG9uZ3siJERhdGF7IkNoYW5nZVRpbWUifSJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiTGFzdCBjaGFuZ2VkIGJ5In06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiQ2hhbmdlVXNlckZpcnN0bmFtZSJ9ICRRRGF0YXsiQ2hhbmdlVXNlckxhc3RuYW1lIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6TWV0YSAtLT4KPCEtLSBkdGw6YmxvY2s6TGlua1RhYmxlU2ltcGxlIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgRG9udFByaW50Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJMaW5rZWQgT2JqZWN0cyJ9PC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgJERhdGF7IkxpbmtUYWJsZVN0cmcifQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpMaW5rVGFibGVTaW1wbGUgLS0+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPgogICAgICAgICAgICAgICAgPGgyPjwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJBY3Rpb25Sb3ciPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25zIj4KPCEtLSBkdGw6YmxvY2s6TWVudSAtLT4KPCEtLSBkdGw6YmxvY2s6TWVudUl0ZW0gLS0+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9JERhdGF7IkxpbmsifSIgY2xhc3M9IiRRRGF0YXsiTWVudUNsYXNzIn0iIHRpdGxlPSIkVGV4dHsiJERhdGF7IkRlc2NyaXB0aW9uIn0ifSI+JFRleHR7IiREYXRheyJOYW1lIn0ifTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpNZW51SXRlbSAtLT4KPCEtLSBkdGw6YmxvY2s6TWVudSAtLT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGlkPSJJVFNNVHJlZSI+CjwhLS0gZHRsOmJsb2NrOlRyZWUgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJJVFNNVGFibGUiICBjbGFzcz0iVGlja2V0TGlzdCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udHJvbFJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IklUU01JdGVtVmlldyBJY29ucyI+CjwhLS0gZHRsOmJsb2NrOkV4cGFuZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJPbmVJVFNNSXRlbSBBY3RpdmUiIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVpvb207Q29uZmlnSXRlbUlEPSRMUURhdGF7IkNvbmZpZ0l0ZW1JRCJ9O1Nob3dWZXJzaW9ucz0wIiB0aXRsZT0iJFRleHR7IlNob3cgb25lIHZlcnNpb24ifSI+PHNwYW4+JFRleHR7IlNob3cgb25lIHZlcnNpb24ifTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQWxsSVRTTUl0ZW1zIiBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD0kTFFEYXRheyJDb25maWdJdGVtSUQifTtTaG93VmVyc2lvbnM9MSIgdGl0bGU9IiRUZXh0eyJTaG93IGFsbCB2ZXJzaW9ucyJ9Ij48c3Bhbj4kVGV4dHsiU2hvdyBhbGwgdmVyc2lvbnMifTwvc3Bhbj48L2E+CjwhLS0gZHRsOmJsb2NrOkV4cGFuZCAtLT4KPCEtLSBkdGw6YmxvY2s6Q29sbGFwc2UgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iT25lSVRTTUl0ZW0iIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVpvb207Q29uZmlnSXRlbUlEPSRMUURhdGF7IkNvbmZpZ0l0ZW1JRCJ9O1Nob3dWZXJzaW9ucz0wIiB0aXRsZT0iJFRleHR7IlNob3cgb25lIHZlcnNpb24ifSI+PHNwYW4+JFRleHR7IlNob3cgb25lIHZlcnNpb24ifTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQWxsSVRTTUl0ZW1zIEFjdGl2ZSIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9JExRRGF0YXsiQ29uZmlnSXRlbUlEIn07U2hvd1ZlcnNpb25zPTEiIHRpdGxlPSIkVGV4dHsiU2hvdyBhbGwgdmVyc2lvbnMifSI+PHNwYW4+JFRleHR7IlNob3cgYWxsIHZlcnNpb25zIn08L3NwYW4+PC9hPgo8IS0tIGR0bDpibG9jazpDb2xsYXBzZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iSVRTTVRhYmxlQm9keSIgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNjcm9sbGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iVGFibGVTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PHNwYW4+JFRleHR7IlZlcnNpb24gSW5jaWRlbnQgU3RhdGUifTwvc3Bhbj48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuPiRUZXh0eyJWZXJzaW9uIE51bWJlciJ9PC9zcGFuPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PHNwYW4+JFRleHR7Ik5hbWUifTwvc3Bhbj48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuPiRUZXh0eyJDcmVhdGVkIGJ5In08L3NwYW4+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48c3Bhbj4kVGV4dHsiQ2hhbmdlZCJ9PC9zcGFuPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOlRyZWVJdGVtIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IiRRRGF0YXsiQWN0aXZlIn0gTWFzdGVyQWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iJFRleHR7IiREYXRheyJJbmNpU3RhdGUifSJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGbGFnIFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IiRRRGF0YXsiSW5jaVNpZ25hbCJ9Ij4kUURhdGF7IkluY2lTdGF0ZSJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7IkNvdW50In0uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJBc0Jsb2NrIE1hc3RlckFjdGlvbkxpbmsiIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVpvb207Q29uZmlnSXRlbUlEPSRMUURhdGF7IkNvbmZpZ0l0ZW1JRCJ9O1ZlcnNpb25JRD0kTFFEYXRheyJWZXJzaW9uSUQifTtTaG93VmVyc2lvbnM9JExRRGF0YXsiU2hvd1ZlcnNpb25zIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7Ik5hbWUifSAoJFRleHR7IiREYXRheyJEZXBsU3RhdGUifSJ9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJVc2VyTG9naW4iLCIzMCJ9ICgkUXVvdGV7IiREYXRheyJVc2VyRmlyc3RuYW1lIn0gJERhdGF7IlVzZXJMYXN0bmFtZSJ9IiwiMzAifSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWVMb25neyIkUURhdGF7IkNyZWF0ZVRpbWUifSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpUcmVlSXRlbSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhhbmRsZSB1aS1yZXNpemFibGUtaGFuZGxlIHVpLXJlc2l6YWJsZS1zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiPiRUZXh0eyJSZXNpemUifTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6VHJlZSAtLT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9IklUU01JdGVtcyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRCb3ggU3BhY2luZ1RvcCBFeHBhbmRlZCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTGlnaHRSb3cgSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+PGEgaHJlZj0iIyIgdGl0bGU9IiRUZXh0eyJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQuIn0iPjxzcGFuPjwvc3Bhbj48L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyJ9PC9oMj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaXRoUGFkZGluZyBDb250ZW50IE5vRG91YmxlQm9yZGVycyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiUHJvcGVydHkifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiVmFsdWUifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOkRhdGEgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlcyNXBjIiBzdHlsZT0icGFkZGluZy1sZWZ0OiAkVGV4dHsiJERhdGF7IkluZGVudGF0aW9uIn0ifXB4OyIgdGl0bGU9IiRUZXh0eyIkRGF0YXsiRGVzY3JpcHRpb24ifSJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyIkRGF0YXsiTmFtZSJ9In06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OiAkVGV4dHsiJERhdGF7IkluZGVudGF0aW9uIn0ifXB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiVmFsdWUifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOkRhdGEgLS0+CjwhLS0gZHRsOmJsb2NrOkF0dGFjaG1lbnRzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJXMjVwYyIgdGl0bGU9IiRUZXh0eyJBdHRhY2htZW50cyJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJBdHRhY2htZW50cyJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDtGaWxlbmFtZT0kTFFEYXRheyJGaWxlbmFtZSJ9O0NvbmZpZ0l0ZW1JRD0kTFFEYXRheyJDb25maWdJdGVtSUQifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJGaWxlbmFtZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJFFEYXRheyJGaWxlc2l6ZSJ9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOkF0dGFjaG1lbnRzIC0tPgo8IS0tIGR0bDpibG9jazpBdHRhY2htZW50Um93IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJXMjVwYyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDtGaWxlbmFtZT0kTFFEYXRheyJGaWxlbmFtZSJ9O0NvbmZpZ0l0ZW1JRD0kTFFEYXRheyJDb25maWdJdGVtSUQifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJGaWxlbmFtZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJFFEYXRheyJGaWxlc2l6ZSJ9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOkF0dGFjaG1lbnRSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpMaW5rVGFibGVDb21wbGV4IC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICREYXRheyJMaW5rVGFibGVTdHJnIn0KICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkxpbmtUYWJsZUNvbXBsZXggLS0+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgoKPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwovKmdsb2JhbCBJVFNNOiB0cnVlICovCiAgICBJVFNNLkFnZW50Llpvb20uSW5pdCgkRW52eyJVc2VyQ29uZmlnSXRlbVpvb21UYWJsZUhlaWdodCJ9KTsKCiAgICAkKCd1bC5BY3Rpb25zIGEuQXNQb3B1cCcpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgQ29yZS5VSS5Qb3B1cC5PcGVuUG9wdXAoJCh0aGlzKS5hdHRyKCdocmVmJyksICdBY3Rpb24nKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKCiAgICAkKCd1bC5BY3Rpb25zIGEuSGlzdG9yeUJhY2snKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIGhpc3RvcnkuYmFjaygpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwoKICAgICQoJy5NYXN0ZXJBY3Rpb24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHZhciAkTWFzdGVyQWN0aW9uTGluayA9ICQodGhpcykuZmluZCgnLk1hc3RlckFjdGlvbkxpbmsnKTsKICAgICAgICAvLyBvbmx5IGFjdCBpZiB0aGUgbGluayB3YXMgbm90IGNsaWNrZWQgZGlyZWN0bHkKICAgICAgICBpZiAoRXZlbnQudGFyZ2V0ICE9PSAkTWFzdGVyQWN0aW9uTGluay5nZXQoMCkpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gJE1hc3RlckFjdGlvbkxpbmsuYXR0cignaHJlZicpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L09iamVjdEJhY2tlbmQvSVRTTUNvbmZpZ0l0ZW0ucG0gLSBpbXBvcnQvZXhwb3J0IGJhY2tlbmQgZm9yIElUU01Db25maWdJdGVtCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpJVFNNQ29uZmlnSXRlbTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBMaXN0OjpVdGlsIHF3KG1pbik7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nOwp1c2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOwp1c2UgS2VybmVsOjpTeXN0ZW06OlRpbWU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpJVFNNQ29uZmlnSXRlbSAtIGltcG9ydC9leHBvcnQgYmFja2VuZCBmb3IgSVRTTUNvbmZpZ0l0ZW0KCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGZ1bmN0aW9ucyB0byBpbXBvcnQgYW5kIGV4cG9ydCBJVFNNIGNvbmZpZyBpdGVtcy4KCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6Q29uZmlnOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpFbmNvZGU7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkRCOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpMb2c7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok1haW47CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6SVRTTUNvbmZpZ0l0ZW07CgogICAgbXkgJENvbmZpZ09iamVjdCA9IEtlcm5lbDo6Q29uZmlnLT5uZXcoKTsKICAgIG15ICRFbmNvZGVPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICApOwogICAgbXkgJExvZ09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpMb2ctPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICk7CiAgICBteSAkTWFpbk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpNYWluLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICApOwogICAgbXkgJERCT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgKTsKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6SVRTTUNvbmZpZ0l0ZW0tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgICAgICAgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgICAgICAgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgICAgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgICAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgICAgICAgICA9PiAkTWFpbk9iamVjdCwKICAgICAgICBJbXBvcnRFeHBvcnRPYmplY3QgPT4gJEltcG9ydEV4cG9ydE9iamVjdCwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhDb25maWdPYmplY3QgRW5jb2RlT2JqZWN0IExvZ09iamVjdCBEQk9iamVjdCBNYWluT2JqZWN0IEltcG9ydEV4cG9ydE9iamVjdCkpCiAgICB7CiAgICAgICAgJFNlbGYtPnskT2JqZWN0fSA9ICRQYXJhbXskT2JqZWN0fSB8fCBkaWUgIkdvdCBubyAkT2JqZWN0ISI7CiAgICB9CgogICAgIyBjcmVhdGUgYWRkaXRpb25hbCBvYmplY3RzCiAgICAkU2VsZi0+e1RpbWVPYmplY3R9ICAgICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lLT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9ICAgICA9IEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbS0+bmV3KCAleyRTZWxmfSApOwogICAgJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2ctPm5ldyggJXskU2VsZn0gKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIE9iamVjdEF0dHJpYnV0ZXNHZXQoKQoKZ2V0IHRoZSBvYmplY3QgYXR0cmlidXRlcyBvZiBhbiBvYmplY3QgYXMgYSByZWYgdG8gYW4gYXJyYXkgb2YgaGFzaCByZWZlcmVuY2VzCgogICAgbXkgJEF0dHJpYnV0ZXMgPSAkT2JqZWN0QmFja2VuZC0+T2JqZWN0QXR0cmlidXRlc0dldCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0QXR0cmlidXRlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdAogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGNsYXNzIGxpc3QKICAgIG15ICRDbGFzc0xpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICkgfHwge307CgogICAgbXkgJEF0dHJpYnV0ZXMgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ2xhc3NJRCcsCiAgICAgICAgICAgIE5hbWUgID0+ICdDbGFzcycsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkQ2xhc3NMaXN0LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ291bnRNYXgnLAogICAgICAgICAgICBOYW1lICA9PiAnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgVmFsdWVEZWZhdWx0ID0+ICcxMCcsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFJlZ2V4ICAgICAgICA9PiBxcnsgXEEgXGQrIFx6IH14bXMsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgIFNpemUgICAgICAgICA9PiA1LAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoICAgID0+IDUsCiAgICAgICAgICAgICAgICBEYXRhVHlwZSAgICAgPT4gJ0ludGVnZXJCaWdnZXJUaGFuWmVybycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCcsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0NoZWNrYm94JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgXTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZXM7Cn0KCj1pdGVtIE1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KCkKCmdldCB0aGUgbWFwcGluZyBhdHRyaWJ1dGVzIG9mIGFuIG9iamVjdCBhcyBhcnJheS9oYXNoIHJlZmVyZW5jZQoKICAgIG15ICRBdHRyaWJ1dGVzID0gJE9iamVjdEJhY2tlbmQtPk1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IG9iamVjdCBkYXRhCiAgICBteSAkT2JqZWN0RGF0YSA9ICRTZWxmLT57SW1wb3J0RXhwb3J0T2JqZWN0fS0+T2JqZWN0RGF0YUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gW10gaWYgISRPYmplY3REYXRhOwogICAgcmV0dXJuIFtdIGlmIHJlZiAkT2JqZWN0RGF0YSBuZSAnSEFTSCc7CiAgICByZXR1cm4gW10gaWYgISRPYmplY3REYXRhLT57Q2xhc3NJRH07CgogICAgIyBnZXQgZGVmaW5pdGlvbgogICAgbXkgJFhNTERlZmluaXRpb24gPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5EZWZpbml0aW9uR2V0KAogICAgICAgIENsYXNzSUQgPT4gJE9iamVjdERhdGEtPntDbGFzc0lEfSwKICAgICk7CgogICAgcmV0dXJuIFtdIGlmICEkWE1MRGVmaW5pdGlvbjsKICAgIHJldHVybiBbXSBpZiByZWYgJFhNTERlZmluaXRpb24gbmUgJ0hBU0gnOwogICAgcmV0dXJuIFtdIGlmICEkWE1MRGVmaW5pdGlvbi0+e0RlZmluaXRpb25SZWZ9OwogICAgcmV0dXJuIFtdIGlmIHJlZiAkWE1MRGVmaW5pdGlvbi0+e0RlZmluaXRpb25SZWZ9IG5lICdBUlJBWSc7CgogICAgbXkgJEVsZW1lbnRMaXN0ID0gWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ051bWJlcicsCiAgICAgICAgICAgIFZhbHVlID0+ICdOdW1iZXInLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnTmFtZScsCiAgICAgICAgICAgIFZhbHVlID0+ICdOYW1lJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgIFZhbHVlID0+ICdEZXBsb3ltZW50IFN0YXRlJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgIFZhbHVlID0+ICdJbmNpZGVudCBTdGF0ZScsCiAgICAgICAgfSwKICAgIF07CgogICAgIyBhZGQgeG1sIGVsZW1lbnRzCiAgICAkU2VsZi0+X01hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgIFhNTERlZmluaXRpb24gPT4gJFhNTERlZmluaXRpb24tPntEZWZpbml0aW9uUmVmfSwKICAgICAgICBFbGVtZW50TGlzdCAgID0+ICRFbGVtZW50TGlzdCwKICAgICAgICBDb3VudE1heExpbWl0ID0+ICRPYmplY3REYXRhLT57Q291bnRNYXh9IHx8IDEwLAogICAgKTsKCiAgICBteSAkQXR0cmlidXRlcyA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdLZXknLAogICAgICAgICAgICBOYW1lICA9PiAnS2V5JywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRFbGVtZW50TGlzdCwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0lkZW50aWZpZXInLAogICAgICAgICAgICBOYW1lICA9PiAnSWRlbnRpZmllcicsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0NoZWNrYm94JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgXTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZXM7Cn0KCj1pdGVtIFNlYXJjaEF0dHJpYnV0ZXNHZXQoKQoKZ2V0IHRoZSBzZWFyY2ggb2JqZWN0IGF0dHJpYnV0ZXMgb2YgYW4gb2JqZWN0IGFzIGFycmF5L2hhc2ggcmVmZXJlbmNlCgogICAgbXkgJEF0dHJpYnV0ZUxpc3QgPSAkT2JqZWN0QmFja2VuZC0+U2VhcmNoQXR0cmlidXRlc0dldCgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFNlYXJjaEF0dHJpYnV0ZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IG9iamVjdCBkYXRhCiAgICBteSAkT2JqZWN0RGF0YSA9ICRTZWxmLT57SW1wb3J0RXhwb3J0T2JqZWN0fS0+T2JqZWN0RGF0YUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gW10gaWYgISRPYmplY3REYXRhOwogICAgcmV0dXJuIFtdIGlmIHJlZiAkT2JqZWN0RGF0YSBuZSAnSEFTSCc7CiAgICByZXR1cm4gW10gaWYgISRPYmplY3REYXRhLT57Q2xhc3NJRH07CgogICAgIyBnZXQgZGVmaW5pdGlvbgogICAgbXkgJFhNTERlZmluaXRpb24gPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5EZWZpbml0aW9uR2V0KAogICAgICAgIENsYXNzSUQgPT4gJE9iamVjdERhdGEtPntDbGFzc0lEfSwKICAgICk7CgogICAgcmV0dXJuIFtdIGlmICEkWE1MRGVmaW5pdGlvbjsKICAgIHJldHVybiBbXSBpZiByZWYgJFhNTERlZmluaXRpb24gbmUgJ0hBU0gnOwogICAgcmV0dXJuIFtdIGlmICEkWE1MRGVmaW5pdGlvbi0+e0RlZmluaXRpb25SZWZ9OwogICAgcmV0dXJuIFtdIGlmIHJlZiAkWE1MRGVmaW5pdGlvbi0+e0RlZmluaXRpb25SZWZ9IG5lICdBUlJBWSc7CgogICAgIyBnZXQgZGVwbG95bWVudCBzdGF0ZSBsaXN0CiAgICBteSAkRGVwbFN0YXRlTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICkgfHwge307CgogICAgIyBnZXQgaW5jaWRlbnQgc3RhdGUgbGlzdAogICAgbXkgJEluY2lTdGF0ZUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgKSB8fCB7fTsKCiAgICBteSAkQXR0cmlidXRlTGlzdCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdOdW1iZXInLAogICAgICAgICAgICBOYW1lICA9PiAnTnVtYmVyJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIFNpemUgICAgICA9PiA4MCwKICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiAyNTUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdOYW1lJywKICAgICAgICAgICAgTmFtZSAgPT4gJ05hbWUnLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgID0+IDgwLAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDI1NSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0RlcGxTdGF0ZUlEcycsCiAgICAgICAgICAgIE5hbWUgID0+ICdEZXBsb3ltZW50IFN0YXRlJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiAkRGVwbFN0YXRlTGlzdCwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICBTaXplICAgICAgICA9PiA1LAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0luY2lTdGF0ZUlEcycsCiAgICAgICAgICAgIE5hbWUgID0+ICdJbmNpZGVudCBTdGF0ZScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgPT4gJEluY2lTdGF0ZUxpc3QsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgICAgPT4gNSwKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIF07CgogICAgIyBhZGQgeG1sIGF0dHJpYnV0ZXMKICAgICRTZWxmLT5fU2VhcmNoQXR0cmlidXRlc0dldCgKICAgICAgICBYTUxEZWZpbml0aW9uID0+ICRYTUxEZWZpbml0aW9uLT57RGVmaW5pdGlvblJlZn0sCiAgICAgICAgQXR0cmlidXRlTGlzdCA9PiAkQXR0cmlidXRlTGlzdCwKICAgICk7CgogICAgcmV0dXJuICRBdHRyaWJ1dGVMaXN0Owp9Cgo9aXRlbSBFeHBvcnREYXRhR2V0KCkKCmdldCBleHBvcnQgZGF0YSBhcyAyRC1hcnJheS1oYXNoIHJlZmVyZW5jZQoKICAgIG15ICRFeHBvcnREYXRhID0gJE9iamVjdEJhY2tlbmQtPkV4cG9ydERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBFeHBvcnREYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBvYmplY3QgZGF0YQogICAgbXkgJE9iamVjdERhdGEgPSAkU2VsZi0+e0ltcG9ydEV4cG9ydE9iamVjdH0tPk9iamVjdERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBvYmplY3QgZGF0YQogICAgaWYgKCAhJE9iamVjdERhdGEgfHwgcmVmICRPYmplY3REYXRhIG5lICdIQVNIJyApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIG9iamVjdCBkYXRhIGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJFBhcmFte1RlbXBsYXRlSUR9IiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBjbGFzcyBsaXN0CiAgICBteSAkQ2xhc3NMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICApOwoKICAgIHJldHVybiBpZiAhJENsYXNzTGlzdCB8fCByZWYgJENsYXNzTGlzdCBuZSAnSEFTSCc7CgogICAgIyBjaGVjayB0aGUgY2xhc3MgaWQKICAgIGlmICggISRPYmplY3REYXRhLT57Q2xhc3NJRH0gfHwgISRDbGFzc0xpc3QtPnsgJE9iamVjdERhdGEtPntDbGFzc0lEfSB9ICkgewoKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHZhbGlkIGNsYXNzIGlkIGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJFBhcmFte1RlbXBsYXRlSUR9IiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCB0aGUgbWFwcGluZyBsaXN0CiAgICBteSAkTWFwcGluZ0xpc3QgPSAkU2VsZi0+e0ltcG9ydEV4cG9ydE9iamVjdH0tPk1hcHBpbmdMaXN0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgdGhlIG1hcHBpbmcgbGlzdAogICAgaWYgKCAhJE1hcHBpbmdMaXN0IHx8IHJlZiAkTWFwcGluZ0xpc3QgbmUgJ0FSUkFZJyB8fCAhQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHZhbGlkIG1hcHBpbmcgbGlzdCBmb3VuZCBmb3IgdGhlIHRlbXBsYXRlIGlkICRQYXJhbXtUZW1wbGF0ZUlEfSIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIG1hcHBpbmcgb2JqZWN0IGxpc3QKICAgIG15IEBNYXBwaW5nT2JqZWN0TGlzdDsKICAgIGZvciBteSAkTWFwcGluZ0lEICggQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAjIGdldCBtYXBwaW5nIG9iamVjdCBkYXRhCiAgICAgICAgbXkgJE1hcHBpbmdPYmplY3REYXRhID0gJFNlbGYtPntJbXBvcnRFeHBvcnRPYmplY3R9LT5NYXBwaW5nT2JqZWN0RGF0YUdldCgKICAgICAgICAgICAgTWFwcGluZ0lEID0+ICRNYXBwaW5nSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIG1hcHBpbmcgb2JqZWN0IGRhdGEKICAgICAgICBpZiAoICEkTWFwcGluZ09iamVjdERhdGEgfHwgcmVmICRNYXBwaW5nT2JqZWN0RGF0YSBuZSAnSEFTSCcgKSB7CgogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gdmFsaWQgbWFwcGluZyBsaXN0IGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJFBhcmFte1RlbXBsYXRlSUR9IiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcHVzaCBATWFwcGluZ09iamVjdExpc3QsICRNYXBwaW5nT2JqZWN0RGF0YTsKICAgIH0KCiAgICAjIGdldCBzZWFyY2ggZGF0YQogICAgbXkgJFNlYXJjaERhdGEgPSAkU2VsZi0+e0ltcG9ydEV4cG9ydE9iamVjdH0tPlNlYXJjaERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkU2VhcmNoRGF0YSB8fCByZWYgJFNlYXJjaERhdGEgbmUgJ0hBU0gnOwoKICAgICMgZ2V0IGRlcGxveW1lbnQgc3RhdGUgbGlzdAogICAgbXkgJERlcGxTdGF0ZUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICApOwoKICAgICMgY2hlY2sgZGVwbG95bWVudCBzdGF0ZSBsaXN0CiAgICBpZiAoICEkRGVwbFN0YXRlTGlzdCB8fCByZWYgJERlcGxTdGF0ZUxpc3QgbmUgJ0hBU0gnICkgewoKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGdldCB0aGUgZ2VuZXJhbCBjYXRhbG9nIGxpc3QgSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgaW5jaWRlbnQgc3RhdGUgbGlzdAogICAgbXkgJEluY2lTdGF0ZUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgKTsKCiAgICAjIGNoZWNrIGluY2lkZW50IHN0YXRlIGxpc3QKICAgIGlmICggISRJbmNpU3RhdGVMaXN0IHx8IHJlZiAkSW5jaVN0YXRlTGlzdCBuZSAnSEFTSCcgKSB7CgogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgZ2V0IHRoZSBnZW5lcmFsIGNhdGFsb2cgbGlzdCBJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgY3VycmVudCBkZWZpbml0aW9uIG9mIHRoaXMgY2xhc3MKICAgIG15ICREZWZpbml0aW9uRGF0YSA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkRlZmluaXRpb25HZXQoCiAgICAgICAgQ2xhc3NJRCA9PiAkT2JqZWN0RGF0YS0+e0NsYXNzSUR9LAogICAgICAgIFVzZXJJRCAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIG15ICVTZWFyY2hQYXJhbXM7CgogICAgIyBhZGQgbnVtYmVyIHRvIHRoZSBzZWFyY2ggcGFyYW1zCiAgICBpZiAoICRTZWFyY2hEYXRhLT57TnVtYmVyfSApIHsKICAgICAgICAkU2VhcmNoUGFyYW1ze051bWJlcn0gPSBkZWxldGUgJFNlYXJjaERhdGEtPntOdW1iZXJ9OwogICAgfQoKICAgICMgYWRkIG5hbWUgdG8gdGhlIHNlYXJjaCBwYXJhbXMKICAgIGlmICggJFNlYXJjaERhdGEtPntOYW1lfSApIHsKICAgICAgICAkU2VhcmNoUGFyYW1ze05hbWV9ID0gZGVsZXRlICRTZWFyY2hEYXRhLT57TmFtZX07CiAgICB9CgogICAgIyBhZGQgZGVwbG95bWVudCBzdGF0ZSB0byB0aGUgc2VhcmNoIHBhcmFtcwogICAgaWYgKCAkU2VhcmNoRGF0YS0+e0RlcGxTdGF0ZUlEc30gKSB7CiAgICAgICAgbXkgQERlcGxTdGF0ZUlEcyA9IHNwbGl0ICcjIyMjIycsICRTZWFyY2hEYXRhLT57RGVwbFN0YXRlSURzfTsKICAgICAgICAkU2VhcmNoUGFyYW1ze0RlcGxTdGF0ZUlEc30gPSBcQERlcGxTdGF0ZUlEczsKICAgICAgICBkZWxldGUgJFNlYXJjaERhdGEtPntEZXBsU3RhdGVJRHN9OwogICAgfQoKICAgICMgYWRkIGluY2lkZW50IHN0YXRlIHRvIHRoZSBzZWFyY2ggcGFyYW1zCiAgICBpZiAoICRTZWFyY2hEYXRhLT57SW5jaVN0YXRlSURzfSApIHsKICAgICAgICBteSBASW5jaVN0YXRlSURzID0gc3BsaXQgJyMjIyMjJywgJFNlYXJjaERhdGEtPntJbmNpU3RhdGVJRHN9OwogICAgICAgICRTZWFyY2hQYXJhbXN7SW5jaVN0YXRlSURzfSA9IFxASW5jaVN0YXRlSURzOwogICAgICAgIGRlbGV0ZSAkU2VhcmNoRGF0YS0+e0luY2lTdGF0ZUlEc307CiAgICB9CgogICAgIyBhZGQgYWxsIFhNTCBkYXRhIHRvIHRoZSBzZWFyY2ggcGFyYW1zCiAgICBteSBAU2VhcmNoUGFyYW1zV2hhdDsKICAgICRTZWxmLT5fRXhwb3J0WE1MU2VhcmNoRGF0YVByZXBhcmUoCiAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkRGVmaW5pdGlvbkRhdGEtPntEZWZpbml0aW9uUmVmfSwKICAgICAgICBXaGF0ICAgICAgICAgID0+IFxAU2VhcmNoUGFyYW1zV2hhdCwKICAgICAgICBTZWFyY2hEYXRhICAgID0+ICRTZWFyY2hEYXRhLAogICAgKTsKCiAgICAjIGFkZCBYTUwgc2VhcmNoIHBhcmFtcyB0byB0aGUgc2VhcmNoIGhhc2gKICAgIGlmIChAU2VhcmNoUGFyYW1zV2hhdCkgewogICAgICAgICRTZWFyY2hQYXJhbXN7V2hhdH0gPSBcQFNlYXJjaFBhcmFtc1doYXQ7CiAgICB9CgogICAgIyBzZWFyY2ggdGhlIGNvbmZpZyBpdGVtcwogICAgbXkgJENvbmZpZ0l0ZW1MaXN0ID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+Q29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKAogICAgICAgICVTZWFyY2hQYXJhbXMsCiAgICAgICAgQ2xhc3NJRHMgICAgICAgICAgICAgID0+IFsgJE9iamVjdERhdGEtPntDbGFzc0lEfSBdLAogICAgICAgIFByZXZpb3VzVmVyc2lvblNlYXJjaCA9PiAwLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgbXkgQEV4cG9ydERhdGE7CiAgICBDT05GSUdJVEVNSUQ6CiAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIEB7JENvbmZpZ0l0ZW1MaXN0fSApIHsKCiAgICAgICAgIyBnZXQgbGFzdCB2ZXJzaW9uCiAgICAgICAgbXkgJFZlcnNpb25EYXRhID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgISRWZXJzaW9uRGF0YTsKICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiByZWYgJFZlcnNpb25EYXRhIG5lICdIQVNIJzsKCiAgICAgICAgIyB0cmFuc2xhdGUgeG1sZGF0YSB0byBhIDJkIGhhc2gKICAgICAgICBteSAlWE1MRGF0YTJEOwogICAgICAgICRTZWxmLT5fRXhwb3J0WE1MRGF0YVByZXBhcmUoCiAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJERlZmluaXRpb25EYXRhLT57RGVmaW5pdGlvblJlZn0sCiAgICAgICAgICAgIFhNTERhdGEgICAgICAgPT4gJFZlcnNpb25EYXRhLT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259LT5bMV0sCiAgICAgICAgICAgIFhNTERhdGEyRCAgICAgPT4gXCVYTUxEYXRhMkQsCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgZGF0YSB0byB0aGUgZXhwb3J0IGRhdGEgYXJyYXkKICAgICAgICBteSBASXRlbTsKICAgICAgICBNQVBQSU5HT0JKRUNUOgogICAgICAgIGZvciBteSAkTWFwcGluZ09iamVjdCAoQE1hcHBpbmdPYmplY3RMaXN0KSB7CgogICAgICAgICAgICAjIGV4dHJhY3Qga2V5CiAgICAgICAgICAgIG15ICRLZXkgPSAkTWFwcGluZ09iamVjdC0+e0tleX07CgogICAgICAgICAgICAjIGhhbmRsZSBlbXB0eSBrZXkKICAgICAgICAgICAgaWYgKCAhJEtleSApIHsKICAgICAgICAgICAgICAgIHB1c2ggQEl0ZW0sICcnOwogICAgICAgICAgICAgICAgbmV4dCBNQVBQSU5HT0JKRUNUOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGhhbmRsZSBjb25maWcgaXRlbSBudW1iZXIKICAgICAgICAgICAgaWYgKCAkS2V5IGVxICdOdW1iZXInICkgewogICAgICAgICAgICAgICAgcHVzaCBASXRlbSwgJFZlcnNpb25EYXRhLT57TnVtYmVyfTsKICAgICAgICAgICAgICAgIG5leHQgTUFQUElOR09CSkVDVDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBoYW5kbGUgY3VycmVudCBjb25maWcgaXRlbSBuYW1lCiAgICAgICAgICAgIGlmICggJEtleSBlcSAnTmFtZScgKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBJdGVtLCAkVmVyc2lvbkRhdGEtPntOYW1lfTsKICAgICAgICAgICAgICAgIG5leHQgTUFQUElOR09CSkVDVDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBoYW5kbGUgZGVwbG95bWVudCBzdGF0ZQogICAgICAgICAgICBpZiAoICRLZXkgZXEgJ0RlcGxTdGF0ZScgKSB7CiAgICAgICAgICAgICAgICAkVmVyc2lvbkRhdGEtPntEZXBsU3RhdGVJRH0gfHw9ICdEVU1NWSc7CiAgICAgICAgICAgICAgICBwdXNoIEBJdGVtLCAkRGVwbFN0YXRlTGlzdC0+eyAkVmVyc2lvbkRhdGEtPntEZXBsU3RhdGVJRH0gfTsKICAgICAgICAgICAgICAgIG5leHQgTUFQUElOR09CSkVDVDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBoYW5kbGUgaW5jaWRlbnQgc3RhdGUKICAgICAgICAgICAgaWYgKCAkS2V5IGVxICdJbmNpU3RhdGUnICkgewogICAgICAgICAgICAgICAgJFZlcnNpb25EYXRhLT57SW5jaVN0YXRlSUR9IHx8PSAnRFVNTVknOwogICAgICAgICAgICAgICAgcHVzaCBASXRlbSwgJEluY2lTdGF0ZUxpc3QtPnsgJFZlcnNpb25EYXRhLT57SW5jaVN0YXRlSUR9IH07CiAgICAgICAgICAgICAgICBuZXh0IE1BUFBJTkdPQkpFQ1Q7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaGFuZGxlIGFsbCBYTUwgZGF0YSBlbGVtZW50cwogICAgICAgICAgICBwdXNoIEBJdGVtLCAkWE1MRGF0YTJEeyRLZXl9OwogICAgICAgIH0KCiAgICAgICAgcHVzaCBARXhwb3J0RGF0YSwgXEBJdGVtOwogICAgfQoKICAgIHJldHVybiBcQEV4cG9ydERhdGE7Cn0KCj1pdGVtIEltcG9ydERhdGFTYXZlKCkKCmltcG9ydHMgYSBzaW5nbGUgZW50aXR5IG9mIHRoZSBpbXBvcnQgZGF0YS4gVGhlIEM8VGVtcGxhdGVJRD4gcG9pbnRzIHRvIHRoZSBkZWZpbml0aW9uCm9mIHRoZSBjdXJyZW50IGltcG9ydC4gQzxJbXBvcnREYXRhUm93PiBob2xkcyB0aGUgZGF0YS4gQzxDb3VudGVyPiBpcyBvbmx5IHVzZWQgaW4KZXJyb3IgbWVzc2FnZXMsIGZvciBpbmRpY2F0aW5nIHdoaWNoIGl0ZW0gd2FzIG5vdCBpbXBvcnRlZCBzdWNjZXNzZnVsbHkuCgpUaGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBjb25maWcgaXRlbSB3aWxsIG5ldmVyIGJlIGRlbGV0ZWQuIFdoZW4gdGhlcmUgYXJlIG5vCmNoYW5nZXMgaW4gdGhlIGRhdGEsIHRoZSBpbXBvcnQgd2lsbCBiZSBza2lwcGVkLiBXaGVuIHRoZXJlIGlzIG5ldyBvciBjaGFuZ2VkIGRhdGEsCnRoZW4gYSBuZXcgY29uZmlnIGl0ZW0gb3IgYSBuZXcgdmVyc2lvbiBpcyBjcmVhdGVkLgoKSW4gdGhlIGNhc2Ugb2YgY2hhbmdlZCBkYXRhLCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIGNvbmZpZyBpdGVtIHdpbGwgY29udGFpbiB0aGUKYXR0cmlidXRlcyBvZiB0aGUgQzxJbXBvcnREYXRhUm93PiBwbHVzIHRoZSBvbGQgYXR0cmlidXRlcyB0aGF0IGFyZQpub3QgcGFydCBvZiB0aGUgaW1wb3J0IGRlZmluaXRpb24uClRodXMgSW1wb3J0RGF0YVNhdmUoKSBndWFyYW50ZWVzIHRvIG5vdCBvdmVyd3JpdGUgdW5kZWNsYXJlZCBhdHRyaWJ1dGVzLgoKVGhlIGJlaGF2aW9yIHdoZW4gaW1wb3J0ZWQgYXR0cmlidXRlcyBhcmUgZW1wdHkgZGVwZW5kcyBvbiB0aGUgc2V0dGluZyBpbiB0aGUgb2JqZWN0IGRhdGEuCldoZW4gQzxFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzPiBpcyBub3Qgc2V0LCB0aGVuIGVtcHR5IHZhbHVlcyB3aWxsIHdpcGUgb3V0CnRoZSBvbGQgZGF0YS4gVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gV2hlbiBDPEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXM+IGlzIHNldCwKdGhlbiBlbXB0eSB2YWx1ZXMgd2lsbCBsZWF2ZSB0aGUgb2xkIHZhbHVlcy4KClRoZSBkZWNpc2lvbiB3aGF0IGNvbnN0aXR1dGUgYW4gZW1wdHkgdmFsdWUgaXMgYSBiaXQgaGFpcnkuCkhlcmUgYXJlIHRoZSBydWxlcy4KRmllbGRzIHRoYXQgYXJlIG5vdCBldmVuIG1lbnRpb25lZCBpbiB0aGUgSW1wb3J0IGRlZmluaXRpb24gYXJlIGVtcHR5LiBUaGVzZSBhcmUgdGhlICdub3QgZGVmaW5lZCcgZmllbGRzLgpFbXB0eSBzdHJpbmdzIGFuZCB1bmRlZmluZWQgdmFsdWVzIGNvbnN0aXR1dGUgZW1wdHkgZmllbGRzLgpGaWVsZHMgd2l0aCB3aXRoIG9ubHkgb25lIG9yIG1vcmUgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFyZSBub3QgZW1wdHkuCkZpZWxkcyB3aXRoIHRoZSBkaWdpdCAnMCcgYXJlIG5vdCBlbXB0eS4KCiAgICBteSAoICRDb25maWdJdGVtSUQsICRSZXRDb2RlICkgPSAkT2JqZWN0QmFja2VuZC0+SW1wb3J0RGF0YVNhdmUoCiAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAxMjMsCiAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiAkQXJyYXlSZWYsCiAgICAgICAgQ291bnRlciAgICAgICA9PiAzNjcsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKCkFuIGVtcHR5IEM8Q29uZmlnSXRlbUlEPiBpbmRpY2F0ZXMgZmFpbHVyZS4gT3RoZXJ3aXNlIGl0IGluZGljYXRlcyB0aGUKbG9jYXRpb24gb2YgdGhlIGltcG9ydGVkIGRhdGEuCkM8UmV0Q29kZT4gaXMgZWl0aGVyICdDcmVhdGVkJywgJ1VwZGF0ZWQnIG9yICdTa2lwcGVkJy4gJ0NyZWF0ZWQnIG1lYW5zIHRoYXQgYSBuZXcKY29uZmlnIGl0ZW0gaGFzIGJlZW4gY3JlYXRlZC4gJ1VwZGF0ZWQnIG1lYW5zIHRoYXQgYSBuZXcgdmVyc2lvbiBoYXMgYmVlbiBhZGRlZCB0bwphbiBleGlzdGluZyBjb25maWcgaXRlbS4gJ1NraXBwZWQnIG1lYW5zIHRoYXQgbm8gbmV3IHZlcnNpb24gaGFzIGJlZW4gY3JlYXRlZCwKYXMgdGhlIG5ldyBkYXRhIGlzIGlkZW50aWNhbCB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgYW4gZXhpc3RpbmcgY29uZmlnIGl0ZW0uCgpObyBjb2RlcyBoYXZlIHlldCBiZWVuIGRlZmluZWQgZm9yIHRoZSBmYWlsdXJlIGNhc2UuCgo9Y3V0CgpzdWIgSW1wb3J0RGF0YVNhdmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBJbXBvcnREYXRhUm93IENvdW50ZXIgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGltcG9ydCBkYXRhIHJvdwogICAgaWYgKCByZWYgJFBhcmFte0ltcG9ydERhdGFSb3d9IG5lICdBUlJBWScgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgLiAiSW1wb3J0RGF0YVJvdyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgb2JqZWN0IGRhdGEKICAgIG15ICRPYmplY3REYXRhID0gJFNlbGYtPntJbXBvcnRFeHBvcnRPYmplY3R9LT5PYmplY3REYXRhR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgb2JqZWN0IGRhdGEKICAgIGlmICggISRPYmplY3REYXRhIHx8IHJlZiAkT2JqZWN0RGF0YSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgLiAiTm8gb2JqZWN0IGRhdGEgZm91bmQgZm9yIHRoZSB0ZW1wbGF0ZSBpZCAnJFBhcmFte1RlbXBsYXRlSUR9JyIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBqdXN0IGZvciBjb252ZW5pZW5jZQogICAgbXkgJEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgPSAkT2JqZWN0RGF0YS0+e0VtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXN9OwoKICAgICMgZ2V0IGNsYXNzIGxpc3QKICAgIG15ICRDbGFzc0xpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICk7CgogICAgIyBjaGVjayBjbGFzcyBsaXN0CiAgICBpZiAoICEkQ2xhc3NMaXN0IHx8IHJlZiAkQ2xhc3NMaXN0IG5lICdIQVNIJyApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAuICJDYW4ndCBnZXQgdGhlIGdlbmVyYWwgY2F0YWxvZyBsaXN0IElUU006OkNvbmZpZ0l0ZW06OkNsYXNzIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIHRoZSBjbGFzcyBpZAogICAgaWYgKCAhJE9iamVjdERhdGEtPntDbGFzc0lEfSB8fCAhJENsYXNzTGlzdC0+eyAkT2JqZWN0RGF0YS0+e0NsYXNzSUR9IH0gKSB7CgogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgIC4gIk5vIGNsYXNzIGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJyRQYXJhbXtUZW1wbGF0ZUlEfSciLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IHRoZSBtYXBwaW5nIGxpc3QKICAgIG15ICRNYXBwaW5nTGlzdCA9ICRTZWxmLT57SW1wb3J0RXhwb3J0T2JqZWN0fS0+TWFwcGluZ0xpc3QoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayB0aGUgbWFwcGluZyBsaXN0CiAgICBpZiAoICEkTWFwcGluZ0xpc3QgfHwgcmVmICRNYXBwaW5nTGlzdCBuZSAnQVJSQVknIHx8ICFAeyRNYXBwaW5nTGlzdH0gKSB7CgogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgIC4gIk5vIHZhbGlkIG1hcHBpbmcgbGlzdCBmb3VuZCBmb3IgdGhlIHRlbXBsYXRlIGlkICckUGFyYW17VGVtcGxhdGVJRH0nIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSB0aGUgbWFwcGluZyBvYmplY3QgbGlzdAogICAgbXkgQE1hcHBpbmdPYmplY3RMaXN0OwogICAgZm9yIG15ICRNYXBwaW5nSUQgKCBAeyRNYXBwaW5nTGlzdH0gKSB7CgogICAgICAgICMgZ2V0IG1hcHBpbmcgb2JqZWN0IGRhdGEKICAgICAgICBteSAkTWFwcGluZ09iamVjdERhdGEgPSAkU2VsZi0+e0ltcG9ydEV4cG9ydE9iamVjdH0tPk1hcHBpbmdPYmplY3REYXRhR2V0KAogICAgICAgICAgICBNYXBwaW5nSUQgPT4gJE1hcHBpbmdJRCwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgbWFwcGluZyBvYmplY3QgZGF0YQogICAgICAgIGlmICggISRNYXBwaW5nT2JqZWN0RGF0YSB8fCByZWYgJE1hcHBpbmdPYmplY3REYXRhIG5lICdIQVNIJyApIHsKCiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgICAgICAuICJObyBtYXBwaW5nIG9iamVjdCBkYXRhIGZvdW5kIGZvciB0aGUgbWFwcGluZyBpZCAnJE1hcHBpbmdJRCciLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBwdXNoIEBNYXBwaW5nT2JqZWN0TGlzdCwgJE1hcHBpbmdPYmplY3REYXRhOwogICAgfQoKICAgICMgY2hlY2sgYW5kIHJlbWVtYmVyIHRoZSBJZGVudGlmaWVycwogICAgIyB0aGUgSWRlbnRpZmllcnMgaWRlbnRpZnkgdGhlIGNvbmZpZyBpdGVtIHRoYXQgc2hvdWxkIGJlIHVwZGF0ZWQKICAgIG15ICVJZGVudGlmaWVyOwogICAgbXkgJFJvd0luZGV4ID0gMDsKICAgIE1BUFBJTkdPQkpFQ1REQVRBOgogICAgZm9yIG15ICRNYXBwaW5nT2JqZWN0RGF0YSAoQE1hcHBpbmdPYmplY3RMaXN0KSB7CgogICAgICAgIG5leHQgTUFQUElOR09CSkVDVERBVEEgaWYgISRNYXBwaW5nT2JqZWN0RGF0YS0+e0lkZW50aWZpZXJ9OwoKICAgICAgICAjIGNoZWNrIGlmIGlkZW50aWZpZXIgYWxyZWFkeSBleGlzdHMKICAgICAgICBpZiAoICRJZGVudGlmaWVyeyAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9IH0gKSB7CgogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgLiAiJyRNYXBwaW5nT2JqZWN0RGF0YS0+e0tleX0nIGhhcyBiZWVuIHVzZWQgbXVsdGlwbGUgdGltZXMgYXMgYW4gaWRlbnRpZmllciIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgc2V0IGlkZW50aWZpZXIgdmFsdWUKICAgICAgICAkSWRlbnRpZmllcnsgJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSB9ID0gJFBhcmFte0ltcG9ydERhdGFSb3d9LT5bJFJvd0luZGV4XTsKCiAgICAgICAgbmV4dCBNQVBQSU5HT0JKRUNUREFUQSBpZiAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9ICYmICRQYXJhbXtJbXBvcnREYXRhUm93fS0+WyRSb3dJbmRleF07CgogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgIC4gIklkZW50aWZpZXIgZmllbGQgaXMgZW1wdHkiLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnRpbnVlIHsKICAgICAgICAkUm93SW5kZXgrKzsKICAgIH0KCiAgICAjIGdldCBkZXBsb3ltZW50IHN0YXRlIGxpc3QKICAgIG15ICREZXBsU3RhdGVMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGUnLAogICAgKTsKCiAgICAjIGNoZWNrIGRlcGxveW1lbnQgc3RhdGUgbGlzdAogICAgaWYgKCAhJERlcGxTdGF0ZUxpc3QgfHwgcmVmICREZXBsU3RhdGVMaXN0IG5lICdIQVNIJyApIHsKCiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgLiAiQ2FuJ3QgZ2V0IHRoZSBnZW5lcmFsIGNhdGFsb2cgbGlzdCBJVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHJldmVyc2UgdGhlIGRlcGxveW1lbnQgc3RhdGUgbGlzdAogICAgbXkgJURlcGxTdGF0ZUxpc3RSZXZlcnNlID0gcmV2ZXJzZSAleyREZXBsU3RhdGVMaXN0fTsKCiAgICAjIGdldCBpbmNpZGVudCBzdGF0ZSBsaXN0CiAgICBteSAkSW5jaVN0YXRlTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICApOwoKICAgICMgY2hlY2sgaW5jaWRlbnQgc3RhdGUgbGlzdAogICAgaWYgKCAhJEluY2lTdGF0ZUxpc3QgfHwgcmVmICRJbmNpU3RhdGVMaXN0IG5lICdIQVNIJyApIHsKCiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgLiAiQ2FuJ3QgZ2V0IHRoZSBnZW5lcmFsIGNhdGFsb2cgbGlzdCBJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHJldmVyc2UgdGhlIGluY2lkZW50IHN0YXRlIGxpc3QKICAgIG15ICVJbmNpU3RhdGVMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJXskSW5jaVN0YXRlTGlzdH07CgogICAgIyBnZXQgY3VycmVudCBkZWZpbml0aW9uIG9mIHRoaXMgY2xhc3MKICAgIG15ICREZWZpbml0aW9uRGF0YSA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkRlZmluaXRpb25HZXQoCiAgICAgICAgQ2xhc3NJRCA9PiAkT2JqZWN0RGF0YS0+e0NsYXNzSUR9LAogICAgICAgIFVzZXJJRCAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZGVmaW5pdGlvbiBkYXRhCiAgICBpZiAoICEkRGVmaW5pdGlvbkRhdGEgfHwgcmVmICREZWZpbml0aW9uRGF0YSBuZSAnSEFTSCcgKSB7CgogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgIC4gIkNhbid0IGdldCB0aGUgZGVmaW5pdGlvbiBvZiBjbGFzcyBpZCAkT2JqZWN0RGF0YS0+e0NsYXNzSUR9IiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHRyeSB0byBnZXQgY29uZmlnIGl0ZW0gaWRzLCB3aGVuIHRoZXJlIGFyZSBpZGVudGlmaWVycwogICAgbXkgJENvbmZpZ0l0ZW1JRDsKICAgIGlmICglSWRlbnRpZmllcikgewoKICAgICAgICBteSAlU2VhcmNoUGFyYW1zOwoKICAgICAgICAjIGFkZCBudW1iZXIgdG8gdGhlIHNlYXJjaCBwYXJhbXMKICAgICAgICBpZiAoICRJZGVudGlmaWVye051bWJlcn0gKSB7CiAgICAgICAgICAgICRTZWFyY2hQYXJhbXN7TnVtYmVyfSA9IGRlbGV0ZSAkSWRlbnRpZmllcntOdW1iZXJ9OwogICAgICAgIH0KCiAgICAgICAgIyBhZGQgbmFtZSB0byB0aGUgc2VhcmNoIHBhcmFtcwogICAgICAgIGlmICggJElkZW50aWZpZXJ7TmFtZX0gKSB7CiAgICAgICAgICAgICRTZWFyY2hQYXJhbXN7TmFtZX0gPSBkZWxldGUgJElkZW50aWZpZXJ7TmFtZX07CiAgICAgICAgfQoKICAgICAgICAjIGFkZCBkZXBsb3ltZW50IHN0YXRlIHRvIHRoZSBzZWFyY2ggcGFyYW1zCiAgICAgICAgaWYgKCAkSWRlbnRpZmllcntEZXBsU3RhdGV9ICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IGRlcGxveW1lbnQgc3RhdGUgaWQKICAgICAgICAgICAgbXkgJERlcGxTdGF0ZUlEID0gJERlcGxTdGF0ZUxpc3RSZXZlcnNleyAkSWRlbnRpZmllcntEZXBsU3RhdGV9IH0gfHwgJyc7CgogICAgICAgICAgICBpZiAoICEkRGVwbFN0YXRlSUQgKSB7CgogICAgICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgICAgICAgICAuICJUaGUgZGVwbG95bWVudCBzdGF0ZSAnJElkZW50aWZpZXJ7RGVwbFN0YXRlfScgaXMgaW52YWxpZCIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VhcmNoUGFyYW1ze0RlcGxTdGF0ZUlEc30gPSBbJERlcGxTdGF0ZUlEXTsKICAgICAgICAgICAgZGVsZXRlICRJZGVudGlmaWVye0RlcGxTdGF0ZX07CiAgICAgICAgfQoKICAgICAgICAjIGFkZCBpbmNpZGVudCBzdGF0ZSB0byB0aGUgc2VhcmNoIHBhcmFtcwogICAgICAgIGlmICggJElkZW50aWZpZXJ7SW5jaVN0YXRlfSApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCBpbmNpZGVudCBzdGF0ZSBpZAogICAgICAgICAgICBteSAkSW5jaVN0YXRlSUQgPSAkSW5jaVN0YXRlTGlzdFJldmVyc2V7ICRJZGVudGlmaWVye0luY2lTdGF0ZX0gfSB8fCAnJzsKCiAgICAgICAgICAgIGlmICggISRJbmNpU3RhdGVJRCApIHsKCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgICAgIC4gIlRoZSBpbmNpZGVudCBzdGF0ZSAnJElkZW50aWZpZXJ7SW5jaVN0YXRlfScgaXMgaW52YWxpZCIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VhcmNoUGFyYW1ze0luY2lTdGF0ZUlEc30gPSBbJEluY2lTdGF0ZUlEXTsKICAgICAgICAgICAgZGVsZXRlICRJZGVudGlmaWVye0luY2lTdGF0ZX07CiAgICAgICAgfQoKICAgICAgICAjIGFkZCBhbGwgWE1MIGRhdGEgdG8gdGhlIHNlYXJjaCBwYXJhbXMKICAgICAgICBteSBAU2VhcmNoUGFyYW1zV2hhdDsKICAgICAgICAkU2VsZi0+X0ltcG9ydFhNTFNlYXJjaERhdGFQcmVwYXJlKAogICAgICAgICAgICBYTUxEZWZpbml0aW9uID0+ICREZWZpbml0aW9uRGF0YS0+e0RlZmluaXRpb25SZWZ9LAogICAgICAgICAgICBXaGF0ICAgICAgICAgID0+IFxAU2VhcmNoUGFyYW1zV2hhdCwKICAgICAgICAgICAgSWRlbnRpZmllciAgICA9PiBcJUlkZW50aWZpZXIsCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgWE1MIHNlYXJjaCBwYXJhbXMgdG8gdGhlIHNlYXJjaCBoYXNoCiAgICAgICAgaWYgKEBTZWFyY2hQYXJhbXNXaGF0KSB7CiAgICAgICAgICAgICRTZWFyY2hQYXJhbXN7V2hhdH0gPSBcQFNlYXJjaFBhcmFtc1doYXQ7CiAgICAgICAgfQoKICAgICAgICAjIHNlYXJjaCBleGlzdGluZyBjb25maWcgaXRlbSB3aXRoIHRoZSBzYW1lIGlkZW50aWZpZXJzCiAgICAgICAgbXkgJENvbmZpZ0l0ZW1MaXN0ID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+Q29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKAogICAgICAgICAgICAlU2VhcmNoUGFyYW1zLAogICAgICAgICAgICBDbGFzc0lEcyAgICAgICAgICAgICAgPT4gWyAkT2JqZWN0RGF0YS0+e0NsYXNzSUR9IF0sCiAgICAgICAgICAgIFByZXZpb3VzVmVyc2lvblNlYXJjaCA9PiAwLAogICAgICAgICAgICBVc2luZ1dpbGRjYXJkcyAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggc2NhbGFyIEB7JENvbmZpZ0l0ZW1MaXN0fSA+IDEgKSB7CgogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgLiAiSWRlbnRpZmllciBmaWVsZHMgTk9UIHVuaXF1ZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1MaXN0LT5bMF07CiAgICB9CgogICAgIyBnZXQgdmVyc2lvbiBkYXRhIG9mIHRoZSBjb25maWcgaXRlbQogICAgbXkgJFZlcnNpb25EYXRhID0ge307CiAgICBpZiAoJENvbmZpZ0l0ZW1JRCkgewoKICAgICAgICAjIGdldCBsYXRlc3QgdmVyc2lvbgogICAgICAgICRWZXJzaW9uRGF0YSA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlZlcnNpb25HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICk7CgogICAgICAgICMgcmVtb3ZlIGVtcHR5IHhtbCBkYXRhCiAgICAgICAgaWYgKAogICAgICAgICAgICAhJFZlcnNpb25EYXRhLT57WE1MRGF0YX0KICAgICAgICAgICAgfHwgcmVmICRWZXJzaW9uRGF0YS0+e1hNTERhdGF9IG5lICdBUlJBWScKICAgICAgICAgICAgfHwgIUB7ICRWZXJzaW9uRGF0YS0+e1hNTERhdGF9IH0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgZGVsZXRlICRWZXJzaW9uRGF0YS0+e1hNTERhdGF9OwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCB1cCBmaWVsZHMgaW4gVmVyc2lvbkRhdGEgYW5kIGluIHRoZSBYTUwgYXR0cmlidXRlcwogICAgbXkgJVhNTERhdGEyRDsKICAgICRSb3dJbmRleCA9IDA7CiAgICBmb3IgbXkgJE1hcHBpbmdPYmplY3REYXRhIChATWFwcGluZ09iamVjdExpc3QpIHsKCiAgICAgICAgIyBqdXN0IGZvciBjb252ZW5pZW5jZQogICAgICAgIG15ICRLZXkgICA9ICRNYXBwaW5nT2JqZWN0RGF0YS0+e0tleX07CiAgICAgICAgbXkgJFZhbHVlID0gJFBhcmFte0ltcG9ydERhdGFSb3d9LT5bICRSb3dJbmRleCsrIF07CgogICAgICAgIGlmICggJEtleSBlcSAnTnVtYmVyJyApIHsKCiAgICAgICAgICAgICMgZG8gbm90aGluZwogICAgICAgICAgICAjIEltcG9ydCBkb2VzIG5vdCBvdmVycmlkZSB0aGUgY29uZmlnIGl0ZW0gbnVtYmVyCiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEtleSBlcSAnTmFtZScgKSB7CgogICAgICAgICAgICBpZiAoICRFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzICYmICggIWRlZmluZWQgJFZhbHVlIHx8ICRWYWx1ZSBlcSAnJyApICkgewoKICAgICAgICAgICAgICAgICMgZG8gbm90aGluZywga2VlcCB0aGUgb2xkIHZhbHVlCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoICEkVmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiVGhlIG5hbWUgJyRWYWx1ZScgaXMgaW52YWxpZCEiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRWZXJzaW9uRGF0YS0+eyRLZXl9ID0gJFZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEtleSBlcSAnRGVwbFN0YXRlJyApIHsKCiAgICAgICAgICAgIGlmICggJEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgJiYgKCAhZGVmaW5lZCAkVmFsdWUgfHwgJFZhbHVlIGVxICcnICkgKSB7CgogICAgICAgICAgICAgICAgIyBkbyBub3RoaW5nLCBrZWVwIHRoZSBvbGQgdmFsdWUKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIGV4dHJhY3QgZGVwbG95bWVudCBzdGF0ZSBpZAogICAgICAgICAgICAgICAgbXkgJERlcGxTdGF0ZUlEID0gJERlcGxTdGF0ZUxpc3RSZXZlcnNleyRWYWx1ZX0gfHwgJyc7CiAgICAgICAgICAgICAgICBpZiAoICEkRGVwbFN0YXRlSUQgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiVGhlIGRlcGxveW1lbnQgc3RhdGUgJyRWYWx1ZScgaXMgaW52YWxpZCEiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRWZXJzaW9uRGF0YS0+e0RlcGxTdGF0ZUlEfSA9ICREZXBsU3RhdGVJRDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRLZXkgZXEgJ0luY2lTdGF0ZScgKSB7CgogICAgICAgICAgICBpZiAoICRFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzICYmICggIWRlZmluZWQgJFZhbHVlIHx8ICRWYWx1ZSBlcSAnJyApICkgewoKICAgICAgICAgICAgICAgICMgZG8gbm90aGluZywga2VlcCB0aGUgb2xkIHZhbHVlCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBleHRyYWN0IHRoZSBkZXBsb3ltZW50IHN0YXRlIGlkCiAgICAgICAgICAgICAgICBteSAkSW5jaVN0YXRlSUQgPSAkSW5jaVN0YXRlTGlzdFJldmVyc2V7JFZhbHVlfSB8fCAnJzsKICAgICAgICAgICAgICAgIGlmICggISRJbmNpU3RhdGVJRCApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJUaGUgaW5jaWRlbnQgc3RhdGUgJyRWYWx1ZScgaXMgaW52YWxpZCEiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRWZXJzaW9uRGF0YS0+e0luY2lTdGF0ZUlEfSA9ICRJbmNpU3RhdGVJRDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgaGFuZGxlIHhtbCBkYXRhCiAgICAgICAgICAgICRYTUxEYXRhMkR7JEtleX0gPSAkVmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IHVwIGVtcHR5IGNvbnRhaW5lciwgaW4gY2FzZSB0aGVyZSBpcyBubyBwcmV2aW91cyBkYXRhCiAgICAkVmVyc2lvbkRhdGEtPntYTUxEYXRhfS0+WzFdLT57VmVyc2lvbn0tPlsxXSB8fD0ge307CgogICAgIyBFZGl0IFhNTERhdGFQcmV2LCBzbyB0aGF0IHRoZSB2YWx1ZXMgaW4gWE1MRGF0YTJEIHRha2UgcHJlY2VkZW5jZS4KICAgIG15ICRNZXJnZU9rID0gJFNlbGYtPl9JbXBvcnRYTUxEYXRhTWVyZ2UoCiAgICAgICAgWE1MRGVmaW5pdGlvbiAgICAgICAgICAgICAgICA9PiAkRGVmaW5pdGlvbkRhdGEtPntEZWZpbml0aW9uUmVmfSwKICAgICAgICBYTUxEYXRhUHJldiAgICAgICAgICAgICAgICAgID0+ICRWZXJzaW9uRGF0YS0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufS0+WzFdLAogICAgICAgIFhNTERhdGEyRCAgICAgICAgICAgICAgICAgICAgPT4gXCVYTUxEYXRhMkQsCiAgICAgICAgRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyA9PiAkRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcywKICAgICk7CgogICAgIyBiYWlsIG91dCwgd2hlbiB0aGUgd2FzIGEgcHJvYmxlbSBpbiBfSW1wb3J0WE1MRGF0YU1lcmdlKCkKICAgIGlmICggISRNZXJnZU9rICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgIC4gIkNvdWxkIG5vdCBwcmVwYXJlIHRoZSBpbnB1dCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRSZXRDb2RlID0gJENvbmZpZ0l0ZW1JRCA/ICdDaGFuZ2VkJyA6ICdDcmVhdGVkJzsKCiAgICAjIGNoZWNrIGlmIHRoZSBmZWF0dXJlIHRvIGNoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIGlzIGVuYWJsZWQKICAgIGlmICgKICAgICAgICBJc1N0cmluZ1dpdGhEYXRhKCAkVmVyc2lvbkRhdGEtPntOYW1lfSApCiAgICAgICAgJiYgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1VuaXF1ZUNJTmFtZTo6RW5hYmxlVW5pcXVlbmVzc0NoZWNrJykKICAgICAgICApCiAgICB7CgogICAgICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT57RGVidWd9ID4gMCApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNoZWNraW5nIGZvciBkdXBsaWNhdGUgbmFtZXMgKENsYXNzSUQ6ICRPYmplY3REYXRhLT57Q2xhc3NJRH0sICIKICAgICAgICAgICAgICAgICAgICAuICJOYW1lOiAkVmVyc2lvbkRhdGEtPntOYW1lfSwgQ29uZmlnSXRlbUlEOiAiIC4gJENvbmZpZ0l0ZW1JRCB8fCAnTkVXJyAuICcpJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICROYW1lRHVwbGljYXRlcyA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlVuaXF1ZU5hbWVDaGVjaygKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQgfHwgJ05FVycsCiAgICAgICAgICAgIENsYXNzSUQgICAgICA9PiAkT2JqZWN0RGF0YS0+e0NsYXNzSUR9LAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJFZlcnNpb25EYXRhLT57TmFtZX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzdG9wIHByb2Nlc3NpbmcgaWYgdGhlIG5hbWUgaXMgbm90IHVuaXF1ZQogICAgICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCROYW1lRHVwbGljYXRlcykgKSB7CgogICAgICAgICAgICAjIGJ1aWxkIGEgc3RyaW5nIG9mIGFsbCBkdXBsaWNhdGUgSURzCiAgICAgICAgICAgIG15ICROYW1lRHVwbGljYXRlc1N0cmluZyA9IGpvaW4gJywgJywgQHskTmFtZUR1cGxpY2F0ZXN9OwoKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICJUaGUgbmFtZSAkVmVyc2lvbkRhdGEtPntOYW1lfSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbUlEKHMpOiAiCiAgICAgICAgICAgICAgICAgICAgLiAkTmFtZUR1cGxpY2F0ZXNTdHJpbmcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNldCB0aGUgcmV0dXJuIGNvZGUgdG8gYWxzbyBpbmNsdWRlIHRoZSBkdXBsaWNhdGUgbmFtZQogICAgICAgICAgICAkUmV0Q29kZSA9ICJEdXBsaWNhdGVOYW1lICckVmVyc2lvbkRhdGEtPntOYW1lfSciOwoKICAgICAgICAgICAgIyByZXR1cm4gdW5kZWYgZm9yIHRoZSBjb25maWcgaXRlbSBpZCBzbyBpdCB3aWxsIGJlIGNvdW50ZWQgYXMgJ0ZhaWxlZCcKICAgICAgICAgICAgcmV0dXJuIHVuZGVmLCAkUmV0Q29kZTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJExhdGVzdFZlcnNpb25JRCA9IDA7CiAgICBpZiAoJENvbmZpZ0l0ZW1JRCkgewoKICAgICAgICAjIHRoZSBzcGVjaWZpZWQgY29uZmlnIGl0ZW0gYWxyZWFkeSBleGlzdHMKICAgICAgICAjIGdldCBpZCBvZiB0aGUgbGF0ZXN0IHZlcnNpb24sIGZvciBjaGVja2luZyBsYXRlciB3aGV0aGVyIGEgdmVyc2lvbiB3YXMgY3JlYXRlZAogICAgICAgIG15ICRWZXJzaW9uTGlzdCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlZlcnNpb25MaXN0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICApIHx8IFtdOwogICAgICAgIGlmICggc2NhbGFyIEB7JFZlcnNpb25MaXN0fSApIHsKICAgICAgICAgICAgJExhdGVzdFZlcnNpb25JRCA9ICRWZXJzaW9uTGlzdC0+Wy0xXTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBubyBjb25maWcgaXRlbSB3YXMgZm91bmQsIHNvIGFkZCBuZXcgY29uZmlnIGl0ZW0KICAgICAgICAkQ29uZmlnSXRlbUlEID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+Q29uZmlnSXRlbUFkZCgKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkT2JqZWN0RGF0YS0+e0NsYXNzSUR9LAogICAgICAgICAgICBVc2VySUQgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgdGhlIG5ldyBjb25maWcgaXRlbSBpZAogICAgICAgIGlmICggISRDb25maWdJdGVtSUQgKSB7CgogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgLiAiRXJyb3Igd2hlbiBhZGRpbmcgdGhlIG5ldyBjb25maWcgaXRlbS4iLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgYWRkIG5ldyB2ZXJzaW9uCiAgICBteSAkVmVyc2lvbklEID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkFkZCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJFZlcnNpb25EYXRhLT57TmFtZX0sCiAgICAgICAgRGVmaW5pdGlvbklEID0+ICREZWZpbml0aW9uRGF0YS0+e0RlZmluaXRpb25JRH0sCiAgICAgICAgRGVwbFN0YXRlSUQgID0+ICRWZXJzaW9uRGF0YS0+e0RlcGxTdGF0ZUlEfSwKICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJFZlcnNpb25EYXRhLT57SW5jaVN0YXRlSUR9LAogICAgICAgIFhNTERhdGEgICAgICA9PiAkVmVyc2lvbkRhdGEtPntYTUxEYXRhfSwKICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgdGhlIGltcG9ydCB3YXMgc3VjY2Vzc2Z1bCwgd2hlbiB3ZSBnZXQgYSB2ZXJzaW9uIGlkCiAgICBpZiAoJFZlcnNpb25JRCkgewoKICAgICAgICAjIFdoZW4gVmVyc2lvbkFkZCgpIHJldHVybnMgdGhlIHByZXZpb3VzIGxhdGVzdCB2ZXJzaW9uIElELCB3ZSBrbm93IHRoYXQKICAgICAgICAjIG5vIG5ldyB2ZXJzaW9uIGhhcyBiZWVuIGFkZGVkLgogICAgICAgICMgVGhlIGltcG9ydCBvZiB0aGlzIGNvbmZpZyBpdGVtIGhhcyBiZWVuIHNraXBwZWQuCiAgICAgICAgaWYgKCAkTGF0ZXN0VmVyc2lvbklEICYmICRWZXJzaW9uSUQgPT0gJExhdGVzdFZlcnNpb25JRCApIHsKICAgICAgICAgICAgJFJldENvZGUgPSAnU2tpcHBlZCc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJENvbmZpZ0l0ZW1JRCwgJFJldENvZGU7CiAgICB9CgogICAgaWYgKCAkUmV0Q29kZSBlcSAnQ3JlYXRlZCcgKSB7CgogICAgICAgICMgZGVsZXRlIHRoZSBuZXcgY29uZmlnIGl0ZW0KICAgICAgICAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtRGVsZXRlKAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAuICJFcnJvciB3aGVuIGFkZGluZyB0aGUgbmV3IGNvbmZpZyBpdGVtIHZlcnNpb24uIiwKICAgICk7CgogICAgcmV0dXJuOwp9Cgo9YmVnaW4gSW50ZXJuYWw6Cgo9aXRlbSBfTWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQoKQoKcmVjdXJzaW9uIGZ1bmN0aW9uIGZvciBNYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCgpLgpEZWZpbml0aW9ucyBmb3Igb2JqZWN0IGF0dHJpYnV0ZXMgYXJlIHBhc3NlZCBpbiBDPFhNTERlZmluaXRpb24+LgpUaGUgbmV3IG9iamVjdCBhdHRyaWJ1dGVzIGFyZSBhcHBlbmRlZCB0byBDPEVsZW1lbnRMaXN0Pi4KQzxDb3VudE1heExpbWl0PiBsaW1pdHMgdGhlIG1heCBsZW5ndGggb2YgaW1wb3J0YWJsZSBhcnJheXMuCgogICAgJE9iamVjdEJhY2tlbmQtPl9NYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCgKICAgICAgICBYTUxEZWZpbml0aW9uID0+ICRBcnJheVJlZiwKICAgICAgICBFbGVtZW50TGlzdCAgID0+ICRBcnJheVJlZiwKICAgICAgICBDb3VudE1heExpbWl0ID0+IDEwLAogICAgKTsKCj1jdXQKCnN1YiBfTWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgISRQYXJhbXtDb3VudE1heExpbWl0fTsKICAgIHJldHVybiBpZiAhJFBhcmFte1hNTERlZmluaXRpb259OwogICAgcmV0dXJuIGlmICEkUGFyYW17RWxlbWVudExpc3R9OwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRGVmaW5pdGlvbn0gbmUgJ0FSUkFZJzsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte0VsZW1lbnRMaXN0fSBuZSAnQVJSQVknOwoKICAgIElURU06CiAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17WE1MRGVmaW5pdGlvbn0gfSApIHsKCiAgICAgICAgIyBsaW1pdCB0aGUgbGVuZ3RoIG9mIGltcG9ydGFibGUgYXJyYXlzLCBldmVuIGlmIG1vcmUgZWxlbWVudHMgY2FuIGJlIHNldCB2aWEgdGhlIEdVSQogICAgICAgIG15ICRDb3VudE1heCA9IG1pbiggJEl0ZW0tPntDb3VudE1heH0sICRQYXJhbXtDb3VudE1heExpbWl0fSApOwoKICAgICAgICBDT1VOVDoKICAgICAgICBmb3IgbXkgJENvdW50ICggMSAuLiAkQ291bnRNYXggKSB7CgogICAgICAgICAgICAjIGNyZWF0ZSBrZXkgc3RyaW5nCiAgICAgICAgICAgIG15ICRLZXkgPSAkSXRlbS0+e0tleX0gLiAnOjonIC4gJENvdW50OwoKICAgICAgICAgICAgIyBhZGQgcHJlZml4IHRvIGtleQogICAgICAgICAgICBpZiAoICRQYXJhbXtLZXlQcmVmaXh9ICkgewogICAgICAgICAgICAgICAgJEtleSA9ICRQYXJhbXtLZXlQcmVmaXh9IC4gJzo6JyAuICRLZXk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY3JlYXRlIHZhbHVlIHN0cmluZwogICAgICAgICAgICBteSAkVmFsdWUgPSAkSXRlbS0+e0tleX07CgogICAgICAgICAgICAjIGFkZCBjb3VudCBpZiByZXF1aXJlZAogICAgICAgICAgICBpZiAoICRDb3VudE1heCA+IDEgfHwgJEl0ZW0tPntTdWJ9ICkgewogICAgICAgICAgICAgICAgJFZhbHVlIC49ICc6OicgLiAkQ291bnQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIHByZWZpeCB0byBrZXkKICAgICAgICAgICAgaWYgKCAkUGFyYW17VmFsdWVQcmVmaXh9ICkgewogICAgICAgICAgICAgICAgJFZhbHVlID0gJFBhcmFte1ZhbHVlUHJlZml4fSAuICc6OicgLiAkVmFsdWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIHJvdwogICAgICAgICAgICBteSAlUm93ID0gKAogICAgICAgICAgICAgICAgS2V5ICAgPT4gJEtleSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcHVzaCBAeyAkUGFyYW17RWxlbWVudExpc3R9IH0sIFwlUm93OwoKICAgICAgICAgICAgbmV4dCBDT1VOVCBpZiAhJEl0ZW0tPntTdWJ9OwoKICAgICAgICAgICAgIyBzdGFydCByZWN1cnNpb24KICAgICAgICAgICAgJFNlbGYtPl9NYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCgKICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgRWxlbWVudExpc3QgICA9PiAkUGFyYW17RWxlbWVudExpc3R9LAogICAgICAgICAgICAgICAgS2V5UHJlZml4ICAgICA9PiAkS2V5LAogICAgICAgICAgICAgICAgVmFsdWVQcmVmaXggICA9PiAkVmFsdWUsCiAgICAgICAgICAgICAgICBDb3VudE1heExpbWl0ID0+ICRQYXJhbXtDb3VudE1heExpbWl0fSB8fCAnMTAnLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX1NlYXJjaEF0dHJpYnV0ZXNHZXQoKQoKcmVjdXJzaW9uIGZ1bmN0aW9uIGZvciBNYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCgpCgogICAgJE9iamVjdEJhY2tlbmQtPl9TZWFyY2hBdHRyaWJ1dGVzR2V0KAogICAgICAgIFhNTERlZmluaXRpb24gPT4gJEFycmF5UmVmLAogICAgICAgIEF0dHJpYnV0ZUxpc3QgPT4gJEFycmF5UmVmLAogICAgKTsKCj1jdXQKCnN1YiBfU2VhcmNoQXR0cmlidXRlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxEZWZpbml0aW9ufTsKICAgIHJldHVybiBpZiAhJFBhcmFte0F0dHJpYnV0ZUxpc3R9OwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRGVmaW5pdGlvbn0gbmUgJ0FSUkFZJzsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte0F0dHJpYnV0ZUxpc3R9IG5lICdBUlJBWSc7CgogICAgSVRFTToKICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtYTUxEZWZpbml0aW9ufSB9ICkgewoKICAgICAgICAjIHNldCBwcmVmaXgKICAgICAgICBteSAkS2V5ICA9ICRJdGVtLT57S2V5fTsKICAgICAgICBteSAkTmFtZSA9ICRJdGVtLT57TmFtZX07CgogICAgICAgIGlmICggJFBhcmFte0tleVByZWZpeH0gKSB7CiAgICAgICAgICAgICRLZXkgPSAkUGFyYW17S2V5UHJlZml4fSAuICc6OicgLiAkS2V5OwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkUGFyYW17TmFtZVByZWZpeH0gKSB7CiAgICAgICAgICAgICROYW1lID0gJFBhcmFte05hbWVQcmVmaXh9IC4gJzo6JyAuICROYW1lOwogICAgICAgIH0KCiAgICAgICAgIyBhZGQgYXR0cmlidXRlLCBpZiBtYXJrZWQgYXMgc2VhcmNoYWJsZQogICAgICAgIGlmICggJEl0ZW0tPntTZWFyY2hhYmxlfSApIHsKCiAgICAgICAgICAgIGlmICggJEl0ZW0tPntJbnB1dH0tPntUeXBlfSBlcSAnVGV4dCcgfHwgJEl0ZW0tPntJbnB1dH0tPntUeXBlfSBlcSAnVGV4dEFyZWEnICkgewoKICAgICAgICAgICAgICAgIG15ICVSb3cgPSAoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJEtleSwKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAkTmFtZSwKICAgICAgICAgICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gJEl0ZW0tPntJbnB1dH0tPntJbnB1dH0tPntUcmFuc2xhdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgICAgIFNpemUgICAgICAgID0+ICRJdGVtLT57SW5wdXR9LT57SW5wdXR9LT57U2l6ZX0gfHwgNjAsCiAgICAgICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCAgID0+ICRJdGVtLT57SW5wdXR9LT57SW5wdXR9LT57TWF4TGVuZ3RofSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBwdXNoIEB7ICRQYXJhbXtBdHRyaWJ1dGVMaXN0fSB9LCBcJVJvdzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRJdGVtLT57SW5wdXR9LT57VHlwZX0gZXEgJ0dlbmVyYWxDYXRhbG9nJyApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBnZW5lcmFsIGNhdGFsb2cgbGlzdAogICAgICAgICAgICAgICAgbXkgJEdlbmVyYWxDYXRhbG9nTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICAgICAgICAgICAgICBDbGFzcyA9PiAkSXRlbS0+e0lucHV0fS0+e0NsYXNzfSwKICAgICAgICAgICAgICAgICkgfHwge307CgogICAgICAgICAgICAgICAgbXkgJVJvdyA9ICgKICAgICAgICAgICAgICAgICAgICBLZXkgICA9PiAkS2V5LAogICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICROYW1lLAogICAgICAgICAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgID0+ICRHZW5lcmFsQ2F0YWxvZ0xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+ICRJdGVtLT57SW5wdXR9LT57SW5wdXR9LT57VHJhbnNsYXRpb259LAogICAgICAgICAgICAgICAgICAgICAgICBTaXplICAgICAgICA9PiA1LAogICAgICAgICAgICAgICAgICAgICAgICBNdWx0aXBsZSAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte0F0dHJpYnV0ZUxpc3R9IH0sIFwlUm93OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBuZXh0IElURU0gaWYgISRJdGVtLT57U3VifTsKCiAgICAgICAgIyBzdGFydCByZWN1cnNpb24sIGlmICJTdWIiIHdhcyBmb3VuZAogICAgICAgICRTZWxmLT5fU2VhcmNoQXR0cmlidXRlc0dldCgKICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgIEF0dHJpYnV0ZUxpc3QgPT4gJFBhcmFte0F0dHJpYnV0ZUxpc3R9LAogICAgICAgICAgICBLZXlQcmVmaXggICAgID0+ICRLZXksCiAgICAgICAgICAgIE5hbWVQcmVmaXggICAgPT4gJE5hbWUsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0V4cG9ydFhNTFNlYXJjaERhdGFQcmVwYXJlKCkKCnJlY3Vyc2lvbiBmdW5jdGlvbiB0byBwcmVwYXJlIHRoZSBleHBvcnQgWE1MIHNlYXJjaCBwYXJhbXMKCiAgICAkT2JqZWN0QmFja2VuZC0+X0V4cG9ydFhNTFNlYXJjaERhdGFQcmVwYXJlKAogICAgICAgIFhNTERlZmluaXRpb24gPT4gJEFycmF5UmVmLAogICAgICAgIFdoYXQgICAgICAgICAgPT4gJEFycmF5UmVmLAogICAgICAgIFNlYXJjaERhdGEgICAgPT4gJEhhc2hSZWYsCiAgICApOwoKPWN1dAoKc3ViIF9FeHBvcnRYTUxTZWFyY2hEYXRhUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxEZWZpbml0aW9ufTsKICAgIHJldHVybiBpZiAhJFBhcmFte1doYXR9OwogICAgcmV0dXJuIGlmICEkUGFyYW17U2VhcmNoRGF0YX07CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxEZWZpbml0aW9ufSBuZSAnQVJSQVknOwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17V2hhdH0gbmUgJ0FSUkFZJzsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1NlYXJjaERhdGF9IG5lICdIQVNIJzsKCiAgICBJVEVNOgogICAgZm9yIG15ICRJdGVtICggQHsgJFBhcmFte1hNTERlZmluaXRpb259IH0gKSB7CgogICAgICAgICMgY3JlYXRlIGtleQogICAgICAgIG15ICRLZXkgPSAkUGFyYW17UHJlZml4fSA/ICRQYXJhbXtQcmVmaXh9IC4gJzo6JyAuICRJdGVtLT57S2V5fSA6ICRJdGVtLT57S2V5fTsKCiAgICAgICAgIyBwcmVwYXJlIHZhbHVlCiAgICAgICAgbXkgJFZhbHVlcyA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlhNTEV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgKICAgICAgICAgICAgSXRlbSAgPT4gJEl0ZW0sCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtTZWFyY2hEYXRhfS0+eyRLZXl9LAogICAgICAgICk7CgogICAgICAgIGlmICgkVmFsdWVzKSB7CgogICAgICAgICAgICAjIGNyZWF0ZSBzZWFyY2gga2V5CiAgICAgICAgICAgIG15ICRTZWFyY2hLZXkgPSAkS2V5OwogICAgICAgICAgICAkU2VhcmNoS2V5ID1+IHN7IDo6IH17XCdcfVslXVx7XCd9eG1zZzsKCiAgICAgICAgICAgICMgY3JlYXRlIHNlYXJjaCBoYXNoCiAgICAgICAgICAgIG15ICRTZWFyY2hIYXNoID0gewogICAgICAgICAgICAgICAgJ1sxXXtcJ1ZlcnNpb25cJ31bMV17XCcnIC4gJFNlYXJjaEtleSAuICdcJ31bJV17XCdDb250ZW50XCd9JyA9PiAkVmFsdWVzLAogICAgICAgICAgICB9OwoKICAgICAgICAgICAgcHVzaCBAeyAkUGFyYW17V2hhdH0gfSwgJFNlYXJjaEhhc2g7CiAgICAgICAgfQoKICAgICAgICBuZXh0IElURU0gaWYgISRJdGVtLT57U3VifTsKCiAgICAgICAgIyBzdGFydCByZWN1cnNpb24sIGlmICJTdWIiIHdhcyBmb3VuZAogICAgICAgICRTZWxmLT5fRXhwb3J0WE1MU2VhcmNoRGF0YVByZXBhcmUoCiAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICBXaGF0ICAgICAgICAgID0+ICRQYXJhbXtXaGF0fSwKICAgICAgICAgICAgU2VhcmNoRGF0YSAgICA9PiAkUGFyYW17U2VhcmNoRGF0YX0sCiAgICAgICAgICAgIFByZWZpeCAgICAgICAgPT4gJEtleSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfRXhwb3J0WE1MRGF0YVByZXBhcmUoKQoKcmVjdXJzaW9uIGZ1bmN0aW9uIHRvIHByZXBhcmUgdGhlIGV4cG9ydCBYTUwgZGF0YQoKICAgICRPYmplY3RCYWNrZW5kLT5fRXhwb3J0WE1MRGF0YVByZXBhcmUoCiAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkQXJyYXlSZWYsCiAgICAgICAgWE1MRGF0YSAgICAgICA9PiAkSGFzaFJlZiwKICAgICAgICBYTUxEYXRhMkQgICAgID0+ICRIYXNoUmVmLAogICAgKTsKCj1jdXQKCnN1YiBfRXhwb3J0WE1MRGF0YVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGVmaW5pdGlvbn07CiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxEYXRhfTsKICAgIHJldHVybiBpZiAhJFBhcmFte1hNTERhdGEyRH07CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxEZWZpbml0aW9ufSBuZSAnQVJSQVknOwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRGF0YX0gbmUgJ0hBU0gnOwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRGF0YTJEfSBuZSAnSEFTSCc7CgogICAgaWYgKCAkUGFyYW17UHJlZml4fSApIHsKICAgICAgICAkUGFyYW17UHJlZml4fSAuPSAnOjonOwogICAgfQogICAgJFBhcmFte1ByZWZpeH0gfHw9ICcnOwoKICAgIElURU06CiAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17WE1MRGVmaW5pdGlvbn0gfSApIHsKICAgICAgICBDT1VOVEVSOgogICAgICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gJEl0ZW0tPntDb3VudE1heH0gKSB7CgogICAgICAgICAgICAjIHN0b3AgbG9vcCwgaWYgbm8gY29udGVudCB3YXMgZ2l2ZW4KICAgICAgICAgICAgbGFzdCBDT1VOVEVSIGlmICFkZWZpbmVkICRQYXJhbXtYTUxEYXRhfS0+eyAkSXRlbS0+e0tleX0gfS0+WyRDb3VudGVyXS0+e0NvbnRlbnR9OwoKICAgICAgICAgICAgIyBjcmVhdGUga2V5CiAgICAgICAgICAgIG15ICRLZXkgPSAkUGFyYW17UHJlZml4fSAuICRJdGVtLT57S2V5fSAuICc6OicgLiAkQ291bnRlcjsKCiAgICAgICAgICAgICMgcHJlcGFyZSB2YWx1ZQogICAgICAgICAgICAkUGFyYW17WE1MRGF0YTJEfS0+eyRLZXl9ID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+WE1MRXhwb3J0VmFsdWVQcmVwYXJlKAogICAgICAgICAgICAgICAgSXRlbSAgPT4gJEl0ZW0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17WE1MRGF0YX0tPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlcl0tPntDb250ZW50fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgQ09VTlRFUiBpZiAhJEl0ZW0tPntTdWJ9OwoKICAgICAgICAgICAgIyBzdGFydCByZWN1cnNpb24sIGlmICJTdWIiIHdhcyBmb3VuZAogICAgICAgICAgICAkU2VsZi0+X0V4cG9ydFhNTERhdGFQcmVwYXJlKAogICAgICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgID0+ICRQYXJhbXtYTUxEYXRhfS0+eyAkSXRlbS0+e0tleX0gfS0+WyRDb3VudGVyXSwKICAgICAgICAgICAgICAgIFhNTERhdGEyRCAgICAgPT4gJFBhcmFte1hNTERhdGEyRH0sCiAgICAgICAgICAgICAgICBQcmVmaXggICAgICAgID0+ICRLZXksCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfSW1wb3J0WE1MU2VhcmNoRGF0YVByZXBhcmUoKQoKcmVjdXJzaW9uIGZ1bmN0aW9uIHRvIHByZXBhcmUgdGhlIGltcG9ydCBYTUwgc2VhcmNoIHBhcmFtcwoKICAgICRPYmplY3RCYWNrZW5kLT5fSW1wb3J0WE1MU2VhcmNoRGF0YVByZXBhcmUoCiAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkQXJyYXlSZWYsCiAgICAgICAgV2hhdCAgICAgICAgICA9PiAkQXJyYXlSZWYsCiAgICAgICAgSWRlbnRpZmllciAgICA9PiAkSGFzaFJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgX0ltcG9ydFhNTFNlYXJjaERhdGFQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIHJldHVybiBpZiAhJFBhcmFte1hNTERlZmluaXRpb259OwogICAgcmV0dXJuIGlmICEkUGFyYW17V2hhdH07CiAgICByZXR1cm4gaWYgISRQYXJhbXtJZGVudGlmaWVyfTsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERlZmluaXRpb259IG5lICdBUlJBWSc7CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtXaGF0fSBuZSAnQVJSQVknOwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17SWRlbnRpZmllcn0gbmUgJ0hBU0gnOwoKICAgIElURU06CiAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17WE1MRGVmaW5pdGlvbn0gfSApIHsKCiAgICAgICAgIyBjcmVhdGUga2V5CiAgICAgICAgbXkgJEtleSA9ICRQYXJhbXtQcmVmaXh9ID8gJFBhcmFte1ByZWZpeH0gLiAnOjpcZCs6OicgLiAkSXRlbS0+e0tleX0gOiAkSXRlbS0+e0tleX07CiAgICAgICAgJEtleSAuPSAnOjpcZCsnOwoKICAgICAgICBteSAkSWRlbnRpZmllcktleTsKICAgICAgICBJREVOVElGSUVSS0VZOgogICAgICAgIGZvciBteSAkSWRlbnRLZXkgKCBrZXlzICV7ICRQYXJhbXtJZGVudGlmaWVyfSB9ICkgewoKICAgICAgICAgICAgbmV4dCBJREVOVElGSUVSS0VZIGlmICRJZGVudEtleSAhfiBteyBcQSAkS2V5IFx6IH14bXM7CgogICAgICAgICAgICAkSWRlbnRpZmllcktleSA9ICRJZGVudEtleTsKICAgICAgICB9CgogICAgICAgIGlmICgkSWRlbnRpZmllcktleSkgewoKICAgICAgICAgICAgIyBwcmVwYXJlIHZhbHVlCiAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlhNTEltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgKICAgICAgICAgICAgICAgIEl0ZW0gID0+ICRJdGVtLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte0lkZW50aWZpZXJ9LT57JElkZW50aWZpZXJLZXl9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRWYWx1ZSkgewoKICAgICAgICAgICAgICAgICMgcHJlcGFyZSBrZXkKICAgICAgICAgICAgICAgIG15ICRDb3VudGVyID0gMDsKICAgICAgICAgICAgICAgIHdoaWxlICggJElkZW50aWZpZXJLZXkgPX4gbXsgOjogfXhtcyApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ291bnRlciAlIDIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRJZGVudGlmaWVyS2V5ID1+IHN7IDo6IH17XVx7J314bXM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkSWRlbnRpZmllcktleSA9fiBzeyA6OiB9eydcfVt9eG1zOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBzZWFyY2ggaGFzaAogICAgICAgICAgICAgICAgbXkgJFNlYXJjaEhhc2ggPSB7CiAgICAgICAgICAgICAgICAgICAgJ1sxXXtcJ1ZlcnNpb25cJ31bMV17XCcnIC4gJElkZW50aWZpZXJLZXkgLiAnXXtcJ0NvbnRlbnRcJ30nID0+ICRWYWx1ZSwKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgcHVzaCBAeyAkUGFyYW17V2hhdH0gfSwgJFNlYXJjaEhhc2g7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG5leHQgSVRFTSBpZiAhJEl0ZW0tPntTdWJ9OwoKICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbiwgaWYgIlN1YiIgd2FzIGZvdW5kCiAgICAgICAgJFNlbGYtPl9JbXBvcnRYTUxTZWFyY2hEYXRhUHJlcGFyZSgKICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgIFdoYXQgICAgICAgICAgPT4gJFBhcmFte1doYXR9LAogICAgICAgICAgICBJZGVudGlmaWVyICAgID0+ICRQYXJhbXtJZGVudGlmaWVyfSwKICAgICAgICAgICAgUHJlZml4ICAgICAgICA9PiAkS2V5LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9JbXBvcnRYTUxEYXRhTWVyZ2UoKQoKcmVjdXJzaXZlIGZ1bmN0aW9uIHRvIGlucGxhY2UgZWRpdCB0aGUgaW1wb3J0IFhNTCBkYXRhLgoKICAgIG15ICRNZXJnZU9rID0gJE9iamVjdEJhY2tlbmQtPl9JbXBvcnRYTUxEYXRhTWVyZ2UoCiAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkQXJyYXlSZWYsCiAgICAgICAgWE1MRGF0YVByZXYgICA9PiAkSGFzaFJlZiwKICAgICAgICBYTUxEYXRhMkQgICAgID0+ICRIYXNoUmVmLAogICAgKTsKClRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHdoZXRlciB0aGUgbWVyZ2Ugd2FzIHN1Y2Nlc3NmdWwuCkEgbWVyZ2UgZmFpbHMgd2hlbiBmb3IgZXhhbXBsZSBhIGdlbmVyYWwgY2F0YWxvZyBpdGVtIG5hbWUgY2FuJ3QgYmUgbWFwcGVkIHRvIGFuIGlkLgoKPWN1dAoKc3ViIF9JbXBvcnRYTUxEYXRhTWVyZ2UgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGVmaW5pdGlvbn07CiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxEYXRhMkR9OwogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGF0YVByZXZ9OwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRGVmaW5pdGlvbn0gbmUgJ0FSUkFZJzsgICAgIyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgY29uZmlnIGl0ZW0gY2xhc3MKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERhdGEyRH0gbmUgJ0hBU0gnOyAgICAgICAgICMgaGFzaCB3aXRoIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBpbXBvcnRlZAogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRGF0YVByZXZ9IG5lICdIQVNIJzsgICAgICAgIyBoYXNoIHdpdGggY3VycmVudCB2YWx1ZXMgb2YgdGhlIGNvbmZpZyBpdGVtCgogICAgbXkgJFhNTERhdGEgPSAkUGFyYW17WE1MRGF0YVByZXZ9OwoKICAgICMgZGVmYXVsdCB2YWx1ZSBmb3IgcHJlZml4CiAgICAkUGFyYW17UHJlZml4fSB8fD0gJyc7CgogICAgSVRFTToKICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtYTUxEZWZpbml0aW9ufSB9ICkgewoKICAgICAgICBDT1VOVEVSOgogICAgICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gJEl0ZW0tPntDb3VudE1heH0gKSB7CgogICAgICAgICAgICAjIGNyZWF0ZSBpbnB1dGtleQogICAgICAgICAgICBteSAkS2V5ID0gJFBhcmFte1ByZWZpeH0gLiAkSXRlbS0+e0tleX0gLiAnOjonIC4gJENvdW50ZXI7CgogICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbiwgaWYgIlN1YiIgd2FzIGZvdW5kCiAgICAgICAgICAgIGlmICggJEl0ZW0tPntTdWJ9ICkgewogICAgICAgICAgICAgICAgJFhNTERhdGEtPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlcl0KICAgICAgICAgICAgICAgICAgICB8fD0ge307ICAgICMgZW1wdHkgY29udGFpbmVyLCBpbiBjYXNlIHRoZXJlIGlzIG5vIHByZXZpb3VzIGRhdGEKICAgICAgICAgICAgICAgIG15ICRNZXJnZU9rID0gJFNlbGYtPl9JbXBvcnRYTUxEYXRhTWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiAgICAgICAgICAgICAgICA9PiAkSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YTJEICAgICAgICAgICAgICAgICAgICA9PiAkUGFyYW17WE1MRGF0YTJEfSwKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhUHJldiAgICAgICAgICAgICAgICAgID0+ICRYTUxEYXRhLT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLAogICAgICAgICAgICAgICAgICAgIFByZWZpeCAgICAgICAgICAgICAgICAgICAgICAgPT4gJEtleSAuICc6OicsCiAgICAgICAgICAgICAgICAgICAgRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyA9PiAkUGFyYW17RW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlc30sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHJldHVybiBpZiAhJE1lcmdlT2s7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgV2hlbiB0aGUgZGF0YSBwb2ludCBpcyBub3QgcGFydCBvZiB0aGUgaW5wdXQgZGVmaW5pdGlvbiwKICAgICAgICAgICAgIyB0aGVuIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIHNldHRpbmcuCiAgICAgICAgICAgICMgRmFsc2UgdmFsdWVzIGFyZSBPSy4KICAgICAgICAgICAgbmV4dCBDT1VOVEVSIHVubGVzcyBleGlzdHMgJFBhcmFte1hNTERhdGEyRH0tPnskS2V5fTsKCiAgICAgICAgICAgIGlmICggJFBhcmFte0VtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXN9ICkgewoKICAgICAgICAgICAgICAgICMgZG8gbm90IG92ZXJyaWRlIG9sZCB2YWx1ZSB3aXRoIGFuIGVtcHR5IGZpZWxkIGlzIGltcG9ydGVkCiAgICAgICAgICAgICAgICBuZXh0IENPVU5URVIgaWYgIWRlZmluZWQgJFBhcmFte1hNTERhdGEyRH0tPnskS2V5fTsKICAgICAgICAgICAgICAgIG5leHQgQ09VTlRFUiBpZiAkUGFyYW17WE1MRGF0YTJEfS0+eyRLZXl9IGVxICcnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHByZXBhcmUgdmFsdWUKICAgICAgICAgICAgbXkgJFZhbHVlID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+WE1MSW1wb3J0VmFsdWVQcmVwYXJlKAogICAgICAgICAgICAgICAgSXRlbSAgPT4gJEl0ZW0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17WE1MRGF0YTJEfS0+eyRLZXl9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBsZXQgbWVyZ2UgZmFpbCwgd2hlbiBhIHZhbHVlIGNhbm5vdCBiZSBwcmVwYXJlZAogICAgICAgICAgICByZXR1cm4gaWYgIWRlZmluZWQgJFZhbHVlOwoKICAgICAgICAgICAgIyBzYXZlIHRoZSBwcmVwYXJlZCB2YWx1ZQogICAgICAgICAgICAkWE1MRGF0YS0+eyAkSXRlbS0+e0tleX0gfS0+WyRDb3VudGVyXS0+e0NvbnRlbnR9ID0gJFZhbHVlOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKMTsKCj1lbmQgSW50ZXJuYWw6Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoaHR0cDovL290cnMub3JnLykuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0ucG0gLSBhbGwgY29uZmlnIGl0ZW0gZnVuY3Rpb24KIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6RXZlbnRIYW5kbGVyOwp1c2UgS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nOwp1c2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpEZWZpbml0aW9uOwp1c2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpIaXN0b3J5Owp1c2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpOdW1iZXI7CnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb247CnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlZlcnNpb247CnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlhNTDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Owp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2U7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VGltZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpVc2VyOwp1c2UgS2VybmVsOjpTeXN0ZW06OlhNTDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWaXJ0dWFsRlM7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCnVzZSB2YXJzIHF3KEBJU0EpOwoKQElTQSA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OkRlZmluaXRpb24nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6SGlzdG9yeScsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpOdW1iZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6UGVybWlzc2lvbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpWZXJzaW9uJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlhNTCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkV2ZW50SGFuZGxlcicsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtIC0gY29uZmlnIGl0ZW0gbGliCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBjb25maWcgaXRlbSBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpDb25maWc7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkVuY29kZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TG9nOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpEQjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TWFpbjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW07CgogICAgbXkgJENvbmZpZ09iamVjdCA9IEtlcm5lbDo6Q29uZmlnLT5uZXcoKTsKICAgIG15ICRFbmNvZGVPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICApOwogICAgbXkgJExvZ09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpMb2ctPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICk7CiAgICBteSAkTWFpbk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpNYWluLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICApOwogICAgbXkgJERCT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgKTsKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgREJPYmplY3QgICAgID0+ICREQk9iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoREJPYmplY3QgQ29uZmlnT2JqZWN0IEVuY29kZU9iamVjdCBMb2dPYmplY3QgTWFpbk9iamVjdCkpIHsKICAgICAgICAkU2VsZi0+eyRPYmplY3R9ID0gJFBhcmFteyRPYmplY3R9IHx8IGRpZSAiR290IG5vICRPYmplY3QhIjsKICAgIH0KCiAgICAjIGNyZWF0ZSBhZGRpdGlvbmFsIG9iamVjdHMKICAgICRTZWxmLT57VGltZU9iamVjdH0gICAgICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlRpbWUtPm5ldyggJXskU2VsZn0gKTsKICAgICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nLT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+e0xpbmtPYmplY3R9ICAgICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0LT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+e1VzZXJPYmplY3R9ICAgICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpVc2VyLT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+e1NlcnZpY2VPYmplY3R9ICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlLT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+e1hNTE9iamVjdH0gICAgICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpYTUwtPm5ldyggJXskU2VsZn0gKTsKICAgICRTZWxmLT57VmlydHVhbEZTT2JqZWN0fSAgICAgID0gS2VybmVsOjpTeXN0ZW06OlZpcnR1YWxGUy0+bmV3KCAleyRTZWxmfSApOwoKICAgICMgaW5pdCBvZiBldmVudCBoYW5kbGVyCiAgICAkU2VsZi0+RXZlbnRIYW5kbGVySW5pdCgKICAgICAgICBDb25maWcgICAgID0+ICdJVFNNQ29uZmlnSXRlbTo6RXZlbnRNb2R1bGVQb3N0JywKICAgICAgICBCYXNlT2JqZWN0ID0+ICdDb25maWdJdGVtT2JqZWN0JywKICAgICAgICBPYmplY3RzICAgID0+IHsKICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBDb25maWdJdGVtQ291bnQoKQoKY291bnQgYWxsIHJlY29yZHMgb2YgYSBjb25maWcgaXRlbSBjbGFzcwoKICAgIG15ICRDb3VudCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQ291bnQoCiAgICAgICAgQ2xhc3NJRCA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIENvbmZpZ0l0ZW1Db3VudCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17Q2xhc3NJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENsYXNzSUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBzdGF0ZSBsaXN0CiAgICBteSAkU3RhdGVMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgIENsYXNzICAgICAgID0+ICdJVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGUnLAogICAgICAgIFByZWZlcmVuY2VzID0+IHsKICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSA9PiBbICdwcmVwcm9kdWN0aXZlJywgJ3Byb2R1Y3RpdmUnIF0sCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuIDAgaWYgISV7JFN0YXRlTGlzdH07CgogICAgIyBjcmVhdGUgc3RhdGUgc3RyaW5nCiAgICBteSAkRGVwbFN0YXRlU3RyaW5nID0gam9pbiBxeywgfSwga2V5cyAleyRTdGF0ZUxpc3R9OwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBDT1VOVChpZCkgRlJPTSBjb25maWdpdGVtIFdIRVJFIGNsYXNzX2lkID0gPyBBTkQgIgogICAgICAgICAgICAuICJjdXJfZGVwbF9zdGF0ZV9pZCBJTiAoICREZXBsU3RhdGVTdHJpbmcgKSIsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0NsYXNzSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkQ291bnQgPSAwOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQ291bnQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkQ291bnQ7Cn0KCj1pdGVtIENvbmZpZ0l0ZW1SZXN1bHRMaXN0KCkKCnJldHVybiBhIGNvbmZpZyBpdGVtIGxpc3QgYXMgYXJyYXkgaGFzaCByZWZlcmVuY2UKCiAgICBteSAkQ29uZmlnSXRlbUxpc3RSZWYgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbVJlc3VsdExpc3QoCiAgICAgICAgQ2xhc3NJRCA9PiAxMjMsCiAgICAgICAgU3RhcnQgICA9PiAxMDAsCiAgICAgICAgTGltaXQgICA9PiA1MCwKICAgICk7Cgo9Y3V0CgpzdWIgQ29uZmlnSXRlbVJlc3VsdExpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NsYXNzSUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDbGFzc0lEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgc3RhdGUgbGlzdAogICAgbXkgJFN0YXRlTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gWyAncHJlcHJvZHVjdGl2ZScsICdwcm9kdWN0aXZlJyBdLAogICAgICAgIH0sCiAgICApOwoKICAgICMgY3JlYXRlIHN0YXRlIHN0cmluZwogICAgbXkgJERlcGxTdGF0ZVN0cmluZyA9IGpvaW4gcXssIH0sIGtleXMgJXskU3RhdGVMaXN0fTsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQgRlJPTSBjb25maWdpdGVtICIKICAgICAgICAgICAgLiAiV0hFUkUgY2xhc3NfaWQgPSA/IEFORCBjdXJfZGVwbF9zdGF0ZV9pZCBJTiAoICREZXBsU3RhdGVTdHJpbmcgKSAiCiAgICAgICAgICAgIC4gIk9SREVSIEJZIGNoYW5nZV90aW1lIERFU0MiLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDbGFzc0lEfSBdLAogICAgICAgIFN0YXJ0ID0+ICRQYXJhbXtTdGFydH0sCiAgICAgICAgTGltaXQgPT4gJFBhcmFte0xpbWl0fSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBAQ29uZmlnSXRlbUlETGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAQ29uZmlnSXRlbUlETGlzdCwgJFJvd1swXTsKICAgIH0KCiAgICAjIGdldCBsYXN0IHZlcnNpb25zIGRhdGEKICAgIG15IEBDb25maWdJdGVtTGlzdDsKICAgIGZvciBteSAkQ29uZmlnSXRlbUlEIChAQ29uZmlnSXRlbUlETGlzdCkgewoKICAgICAgICAjIGdldCB2ZXJzaW9uIGRhdGEKICAgICAgICBteSAkTGFzdFZlcnNpb24gPSAkU2VsZi0+VmVyc2lvbkdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIFhNTERhdGFHZXQgICA9PiAwLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1MaXN0LCAkTGFzdFZlcnNpb247CiAgICB9CgogICAgcmV0dXJuIFxAQ29uZmlnSXRlbUxpc3Q7Cn0KCj1pdGVtIENvbmZpZ0l0ZW1HZXQoKQoKcmV0dXJuIGEgY29uZmlnIGl0ZW0gYXMgaGFzaCByZWZlcmVuY2UKCiAgICBteSAkQ29uZmlnSXRlbSA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsCiAgICAgICAgQ2FjaGUgICAgICAgID0+IDAsICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEgKDB8MSkKICAgICk7CgpBIGhhc2hyZWYgd2l0aCB0aGUgZm9sbG93aW5nIGtleXMgaXMgcmV0dXJuZWQ6CgogICAgJENvbmZpZ0l0ZW17Q29uZmlnSXRlbUlEfQogICAgJENvbmZpZ0l0ZW17TnVtYmVyfQogICAgJENvbmZpZ0l0ZW17Q2xhc3NJRH0KICAgICRDb25maWdJdGVte0NsYXNzfQogICAgJENvbmZpZ0l0ZW17TGFzdFZlcnNpb25JRH0KICAgICRDb25maWdJdGVte0N1ckRlcGxTdGF0ZUlEfQogICAgJENvbmZpZ0l0ZW17Q3VyRGVwbFN0YXRlfQogICAgJENvbmZpZ0l0ZW17Q3VyRGVwbFN0YXRlVHlwZX0KICAgICRDb25maWdJdGVte0N1ckluY2lTdGF0ZUlEfQogICAgJENvbmZpZ0l0ZW17Q3VySW5jaVN0YXRlfQogICAgJENvbmZpZ0l0ZW17Q3VySW5jaVN0YXRlVHlwZX0KICAgICRDb25maWdJdGVte0NyZWF0ZVRpbWV9CiAgICAkQ29uZmlnSXRlbXtDcmVhdGVCeX0KICAgICRDb25maWdJdGVte0NoYW5nZVRpbWV9CiAgICAkQ29uZmlnSXRlbXtDaGFuZ2VCeX0KCj1jdXQKCnN1YiBDb25maWdJdGVtR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDb25maWdJdGVtSUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDb25maWdJdGVtSUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGVuYWJsZSBjYWNoZSBwZXIgZGVmYXVsdAogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17Q2FjaGV9ICkgewogICAgICAgICRQYXJhbXtDYWNoZX0gPSAxOwogICAgfQoKICAgICMgY2hlY2sgaWYgcmVzdWx0IGlzIGFscmVhZHkgY2FjaGVkCiAgICByZXR1cm4gJFNlbGYtPntDYWNoZX0tPntDb25maWdJdGVtR2V0fS0+eyAkUGFyYW17Q29uZmlnSXRlbUlEfSB9CiAgICAgICAgaWYgJFBhcmFte0NhY2hlfSAmJiAkU2VsZi0+e0NhY2hlfS0+e0NvbmZpZ0l0ZW1HZXR9LT57ICRQYXJhbXtDb25maWdJdGVtSUR9IH07CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBjb25maWdpdGVtX251bWJlciwgY2xhc3NfaWQsIGxhc3RfdmVyc2lvbl9pZCwgJwogICAgICAgICAgICAuICdjdXJfZGVwbF9zdGF0ZV9pZCwgY3VyX2luY2lfc3RhdGVfaWQsICcKICAgICAgICAgICAgLiAnY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSAnCiAgICAgICAgICAgIC4gJ0ZST00gY29uZmlnaXRlbSBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDb25maWdJdGVtSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlQ29uZmlnSXRlbTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJENvbmZpZ0l0ZW17Q29uZmlnSXRlbUlEfSAgID0gJFJvd1swXTsKICAgICAgICAkQ29uZmlnSXRlbXtOdW1iZXJ9ICAgICAgICAgPSAkUm93WzFdOwogICAgICAgICRDb25maWdJdGVte0NsYXNzSUR9ICAgICAgICA9ICRSb3dbMl07CiAgICAgICAgJENvbmZpZ0l0ZW17TGFzdFZlcnNpb25JRH0gID0gJFJvd1szXTsKICAgICAgICAkQ29uZmlnSXRlbXtDdXJEZXBsU3RhdGVJRH0gPSAkUm93WzRdOwogICAgICAgICRDb25maWdJdGVte0N1ckluY2lTdGF0ZUlEfSA9ICRSb3dbNV07CiAgICAgICAgJENvbmZpZ0l0ZW17Q3JlYXRlVGltZX0gICAgID0gJFJvd1s2XTsKICAgICAgICAkQ29uZmlnSXRlbXtDcmVhdGVCeX0gICAgICAgPSAkUm93WzddOwogICAgICAgICRDb25maWdJdGVte0NoYW5nZVRpbWV9ICAgICA9ICRSb3dbOF07CiAgICAgICAgJENvbmZpZ0l0ZW17Q2hhbmdlQnl9ICAgICAgID0gJFJvd1s5XTsKICAgIH0KCiAgICAjIGNoZWNrIGNvbmZpZyBpdGVtCiAgICBpZiAoICEkQ29uZmlnSXRlbXtDb25maWdJdGVtSUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gc3VjaCBDb25maWdJdGVtSUQgKCRQYXJhbXtDb25maWdJdGVtSUR9KSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGNsYXNzIGxpc3QKICAgIG15ICRDbGFzc0xpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICk7CgogICAgJENvbmZpZ0l0ZW17Q2xhc3N9ID0gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbXtDbGFzc0lEfSB9OwoKICAgIHJldHVybiBcJUNvbmZpZ0l0ZW0gaWYgISRDb25maWdJdGVte0N1ckRlcGxTdGF0ZUlEfSB8fCAhJENvbmZpZ0l0ZW17Q3VySW5jaVN0YXRlSUR9OwoKICAgICMgZ2V0IGRlcGxveW1lbnQgc3RhdGUgZnVuY3Rpb25hbGl0eQogICAgbXkgJERlcGxTdGF0ZSA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtR2V0KAogICAgICAgIEl0ZW1JRCA9PiAkQ29uZmlnSXRlbXtDdXJEZXBsU3RhdGVJRH0sCiAgICApOwoKICAgICRDb25maWdJdGVte0N1ckRlcGxTdGF0ZX0gICAgID0gJERlcGxTdGF0ZS0+e05hbWV9OwogICAgJENvbmZpZ0l0ZW17Q3VyRGVwbFN0YXRlVHlwZX0gPSAkRGVwbFN0YXRlLT57RnVuY3Rpb25hbGl0eX07CgogICAgIyBnZXQgaW5jaWRlbnQgc3RhdGUgZnVuY3Rpb25hbGl0eQogICAgbXkgJEluY2lTdGF0ZSA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtR2V0KAogICAgICAgIEl0ZW1JRCA9PiAkQ29uZmlnSXRlbXtDdXJJbmNpU3RhdGVJRH0sCiAgICApOwoKICAgICRDb25maWdJdGVte0N1ckluY2lTdGF0ZX0gICAgID0gJEluY2lTdGF0ZS0+e05hbWV9OwogICAgJENvbmZpZ0l0ZW17Q3VySW5jaVN0YXRlVHlwZX0gPSAkSW5jaVN0YXRlLT57RnVuY3Rpb25hbGl0eX07CgogICAgIyBjYWNoZSB0aGUgcmVzdWx0CiAgICAkU2VsZi0+e0NhY2hlfS0+e0NvbmZpZ0l0ZW1HZXR9LT57ICRQYXJhbXtDb25maWdJdGVtSUR9IH0gPSBcJUNvbmZpZ0l0ZW07CgogICAgcmV0dXJuIFwlQ29uZmlnSXRlbTsKfQoKPWl0ZW0gQ29uZmlnSXRlbUFkZCgpCgphZGQgYSBuZXcgY29uZmlnIGl0ZW0KCiAgICBteSAkQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BZGQoCiAgICAgICAgTnVtYmVyICA9PiAnMTExJywgICMgKG9wdGlvbmFsKQogICAgICAgIENsYXNzSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgQ29uZmlnSXRlbUFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDbGFzc0lEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgKTsKCiAgICByZXR1cm4gaWYgISRDbGFzc0xpc3Q7CiAgICByZXR1cm4gaWYgcmVmICRDbGFzc0xpc3QgbmUgJ0hBU0gnOwoKICAgICMgY2hlY2sgdGhlIGNsYXNzIGlkCiAgICBpZiAoICEkQ2xhc3NMaXN0LT57ICRQYXJhbXtDbGFzc0lEfSB9ICkgewoKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05vIHZhbGlkIGNsYXNzIGlkIGdpdmVuIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgY29uZmlnIGl0ZW0gbnVtYmVyCiAgICBpZiAoICRQYXJhbXtOdW1iZXJ9ICkgewoKICAgICAgICAjIGZpbmQgZXhpc3RpbmcgY29uZmlnIGl0ZW0gbnVtYmVyCiAgICAgICAgbXkgJEV4aXN0cyA9ICRTZWxmLT5Db25maWdJdGVtTnVtYmVyTG9va3VwKAogICAgICAgICAgICBDb25maWdJdGVtTnVtYmVyID0+ICRQYXJhbXtOdW1iZXJ9LAogICAgICAgICk7CgogICAgICAgIGlmICgkRXhpc3RzKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdDb25maWcgaXRlbSBudW1iZXIgYWxyZWFkeSBleGlzdHMhJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGNyZWF0ZSBjb25maWcgaXRlbSBudW1iZXIKICAgICAgICAkUGFyYW17TnVtYmVyfSA9ICRTZWxmLT5Db25maWdJdGVtTnVtYmVyQ3JlYXRlKAogICAgICAgICAgICBUeXBlICAgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdJVFNNQ29uZmlnSXRlbTo6TnVtYmVyR2VuZXJhdG9yJyksCiAgICAgICAgICAgIENsYXNzSUQgPT4gJFBhcmFte0NsYXNzSUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBpbnNlcnQgbmV3IGNvbmZpZyBpdGVtCiAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGNvbmZpZ2l0ZW0gJwogICAgICAgICAgICAuICcoY29uZmlnaXRlbV9udW1iZXIsIGNsYXNzX2lkLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KSAnCiAgICAgICAgICAgIC4gJ1ZBTFVFUyAoPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17TnVtYmVyfSwgXCRQYXJhbXtDbGFzc0lEfSwgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0gXSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkU3VjY2VzczsKCiAgICAjIGZpbmQgaWQgb2YgbmV3IGl0ZW0KICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkIEZST00gY29uZmlnaXRlbSBXSEVSRSAnCiAgICAgICAgICAgIC4gJ2NvbmZpZ2l0ZW1fbnVtYmVyID0gPyBBTkQgY2xhc3NfaWQgPSA/IE9SREVSIEJZIGlkIERFU0MnLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte051bWJlcn0sIFwkUGFyYW17Q2xhc3NJRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRDb25maWdJdGVtSUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRDb25maWdJdGVtSUQgPSAkUm93WzBdOwogICAgfQoKICAgICMgdHJpZ2dlciBDb25maWdJdGVtQ3JlYXRlCiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdDb25maWdJdGVtQ3JlYXRlJywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBDb21tZW50ICAgICAgPT4gJENvbmZpZ0l0ZW1JRCAuICclJScgLiAkUGFyYW17TnVtYmVyfSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuICRDb25maWdJdGVtSUQ7Cn0KCj1pdGVtIENvbmZpZ0l0ZW1EZWxldGUoKQoKZGVsZXRlIGFuIGV4aXN0aW5nIGNvbmZpZyBpdGVtCgogICAgbXkgJFRydWUgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbURlbGV0ZSgKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBDb25maWdJdGVtRGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENvbmZpZ0l0ZW1JRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZGVsZXRlIGFsbCBsaW5rcyB0byB0aGlzIGNvbmZpZyBpdGVtIGZpcnN0LCBiZWZvcmUgZGVsZXRpbmcgdGhlIHZlcnNpb25zCiAgICByZXR1cm4gaWYgISRTZWxmLT57TGlua09iamVjdH0tPkxpbmtEZWxldGVBbGwoCiAgICAgICAgT2JqZWN0ID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgS2V5ICAgID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBkZWxldGUgZXhpc3RpbmcgdmVyc2lvbnMKICAgICRTZWxmLT5WZXJzaW9uRGVsZXRlKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGEgbGlzdCBvZiBhbGwgYXR0YWNobWVudHMKICAgIG15IEBFeGlzdGluZ0F0dGFjaG1lbnRzID0gJFNlbGYtPkNvbmZpZ0l0ZW1BdHRhY2htZW50TGlzdCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICApOwoKICAgICMgZGVsZXRlIGFsbCBhdHRhY2htZW50cyBvZiB0aGlzIGNvbmZpZyBpdGVtCiAgICBGSUxFTkFNRToKICAgIGZvciBteSAkRmlsZW5hbWUgKEBFeGlzdGluZ0F0dGFjaG1lbnRzKSB7CgogICAgICAgICMgZGVsZXRlIHRoZSBhdHRhY2htZW50CiAgICAgICAgbXkgJERlbGV0aW9uU3VjY2VzcyA9ICRTZWxmLT5Db25maWdJdGVtQXR0YWNobWVudERlbGV0ZSgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICBGaWxlbmFtZSAgICAgPT4gJEZpbGVuYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJERlbGV0aW9uU3VjY2VzcyApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlVua25vd24gcHJvYmxlbSB3aGVuIGRlbGV0aW5nIGF0dGFjaG1lbnQgJEZpbGVuYW1lIG9mIENvbmZpZ0l0ZW0gIgogICAgICAgICAgICAgICAgICAgIC4gIiRQYXJhbXtDb25maWdJdGVtSUR9LiBQbGVhc2UgY2hlY2sgdGhlIFZpcnR1YWxGUyBiYWNrZW5kIGZvciBzdGFsZSAiCiAgICAgICAgICAgICAgICAgICAgLiAiZmlsZXMhIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyB0cmlnZ2VyIENvbmZpZ0l0ZW1EZWxldGUgZXZlbnQKICAgICMgdGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIGRlbGV0aW5nIHRoZSBjb25maWcgaXRlbSBmcm9tIHRoZSBkYXRhYmFzZSwKICAgICMgYmVjYXVzZSBvZiBhIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgaW4gdGhlIGNvbmZpZ2l0ZW1faGlzdG9yeSB0YWJsZQogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnQ29uZmlnSXRlbURlbGV0ZScsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIENvbW1lbnQgICAgICA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBkZWxldGUgY29uZmlnIGl0ZW0KICAgIG15ICRTdWNjZXNzID0gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGNvbmZpZ2l0ZW0gV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDb25maWdJdGVtSUR9IF0sCiAgICApOwoKICAgIHJldHVybiAkU3VjY2VzczsKfQoKPWl0ZW0gQ29uZmlnSXRlbUF0dGFjaG1lbnRBZGQoKQoKYWRkcyBhbiBhdHRhY2htZW50IHRvIGEgY29uZmlnIGl0ZW0KCiAgICBteSAkU3VjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQXR0YWNobWVudEFkZCgKICAgICAgICBDb25maWdJdGVtSUQgICAgPT4gMSwKICAgICAgICBGaWxlbmFtZSAgICAgICAgPT4gJ2ZpbGVuYW1lJywKICAgICAgICBDb250ZW50ICAgICAgICAgPT4gJ2NvbnRlbnQnLAogICAgICAgIENvbnRlbnRUeXBlICAgICA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIENvbmZpZ0l0ZW1BdHRhY2htZW50QWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhDb25maWdJdGVtSUQgRmlsZW5hbWUgQ29udGVudCBDb250ZW50VHlwZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgd3JpdGUgdG8gdmlydHVhbCBmcwogICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+e1ZpcnR1YWxGU09iamVjdH0tPldyaXRlKAogICAgICAgIEZpbGVuYW1lICAgID0+ICJDb25maWdJdGVtLyRQYXJhbXtDb25maWdJdGVtSUR9LyRQYXJhbXtGaWxlbmFtZX0iLAogICAgICAgIE1vZGUgICAgICAgID0+ICdiaW5hcnknLAogICAgICAgIENvbnRlbnQgICAgID0+IFwkUGFyYW17Q29udGVudH0sCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBDb250ZW50SUQgICAgPT4gJFBhcmFte0NvbnRlbnRJRH0sCiAgICAgICAgICAgIENvbnRlbnRUeXBlICA9PiAkUGFyYW17Q29udGVudFR5cGV9LAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGNoZWNrIGZvciBlcnJvcgogICAgaWYgKCRTdWNjZXNzKSB7CgogICAgICAgICMgdHJpZ2dlciBBdHRhY2htZW50QWRkLUV2ZW50CiAgICAgICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICAgICAgRXZlbnQgPT4gJ0F0dGFjaG1lbnRBZGRQb3N0JywKICAgICAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICAgICAgQ29tbWVudCAgICAgID0+ICRQYXJhbXtGaWxlbmFtZX0sCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgPT4gJ0F0dGFjaG1lbnRBZGQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2Fubm90IGFkZCBhdHRhY2htZW50IGZvciBjb25maWcgaXRlbSAkUGFyYW17Q29uZmlnSXRlbUlEfSIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb25maWdJdGVtQXR0YWNobWVudERlbGV0ZSgpCgpEZWxldGUgdGhlIGdpdmVuIGZpbGUgZnJvbSB0aGUgdmlydHVhbCBmaWxlc3lzdGVtLgoKICAgIG15ICRTdWNjZXNzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BdHRhY2htZW50RGVsZXRlKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsICAgICAgICAgICAgICAgIyB1c2VkIGluIGV2ZW50IGhhbmRsaW5nLCBlLmcuIGZvciBsb2dnaW5nIHRoZSBoaXN0b3J5CiAgICAgICAgRmlsZW5hbWUgICAgID0+ICdQcm9qZWN0cGxhbi5wZGYnLCAjIGlkZW50aWZpZXMgdGhlIGF0dGFjaG1lbnQgKHRvZ2V0aGVyIHdpdGggdGhlIENvbmZpZ0l0ZW1JRCkKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgQ29uZmlnSXRlbUF0dGFjaG1lbnREZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KENvbmZpZ0l0ZW1JRCBGaWxlbmFtZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgYWRkIHByZWZpeAogICAgbXkgJEZpbGVuYW1lID0gJ0NvbmZpZ0l0ZW0vJyAuICRQYXJhbXtDb25maWdJdGVtSUR9IC4gJy8nIC4gJFBhcmFte0ZpbGVuYW1lfTsKCiAgICAjIGRlbGV0ZSBmaWxlCiAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT57VmlydHVhbEZTT2JqZWN0fS0+RGVsZXRlKAogICAgICAgIEZpbGVuYW1lID0+ICRGaWxlbmFtZSwKICAgICk7CgogICAgIyBjaGVjayBmb3IgZXJyb3IKICAgIGlmICgkU3VjY2VzcykgewoKICAgICAgICAjIHRyaWdnZXIgQXR0YWNobWVudERlbGV0ZVBvc3QtRXZlbnQKICAgICAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgICAgICBFdmVudCA9PiAnQXR0YWNobWVudERlbGV0ZVBvc3QnLAogICAgICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBDb21tZW50ICAgICAgPT4gJFBhcmFte0ZpbGVuYW1lfSwKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICA9PiAnQXR0YWNobWVudERlbGV0ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW5ub3QgZGVsZXRlIGF0dGFjaG1lbnQgJEZpbGVuYW1lISIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAkU3VjY2VzczsKfQoKPWl0ZW0gQ29uZmlnSXRlbUF0dGFjaG1lbnRHZXQoKQoKVGhpcyBtZXRob2QgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBvbmUgc3BlY2lmaWMgYXR0YWNobWVudC4KCiAgICBteSAkQXR0YWNobWVudCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQXR0YWNobWVudEdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gNCwKICAgICAgICBGaWxlbmFtZSAgICAgPT4gJ3Rlc3QudHh0JywKICAgICk7CgpyZXR1cm5zCgogICAgewogICAgICAgIFByZWZlcmVuY2VzID0+IHsKICAgICAgICAgICAgQWxsUHJlZmVyZW5jZXMgPT4gJ3Rlc3QnLAogICAgICAgIH0sCiAgICAgICAgRmlsZW5hbWUgICAgPT4gJ3Rlc3QudHh0JywKICAgICAgICBDb250ZW50ICAgICA9PiAnY29udGVudCcsCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgIEZpbGVzaXplICAgID0+ICcxMjMgS0J5dGVzJywKICAgICAgICBUeXBlICAgICAgICA9PiAnYXR0YWNobWVudCcsCiAgICB9Cgo9Y3V0CgpzdWIgQ29uZmlnSXRlbUF0dGFjaG1lbnRHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ29uZmlnSXRlbUlEIEZpbGVuYW1lKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFkZCBwcmVmaXgKICAgIG15ICRGaWxlbmFtZSA9ICdDb25maWdJdGVtLycgLiAkUGFyYW17Q29uZmlnSXRlbUlEfSAuICcvJyAuICRQYXJhbXtGaWxlbmFtZX07CgogICAgIyBmaW5kIGFsbCBhdHRhY2htZW50cyBvZiB0aGlzIGNvbmZpZyBpdGVtCiAgICBteSBAQXR0YWNobWVudHMgPSAkU2VsZi0+e1ZpcnR1YWxGU09iamVjdH0tPkZpbmQoCiAgICAgICAgRmlsZW5hbWUgICAgPT4gJEZpbGVuYW1lLAogICAgICAgIFByZWZlcmVuY2VzID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgcmV0dXJuIGVycm9yIGlmIGZpbGUgZG9lcyBub3QgZXhpc3QKICAgIGlmICggIUBBdHRhY2htZW50cyApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHN1Y2ggYXR0YWNobWVudCAoJEZpbGVuYW1lKSEiLAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGRhdGEgZm9yIGF0dGFjaG1lbnQKICAgIG15ICVBdHRhY2htZW50RGF0YSA9ICRTZWxmLT57VmlydHVhbEZTT2JqZWN0fS0+UmVhZCgKICAgICAgICBGaWxlbmFtZSA9PiAkRmlsZW5hbWUsCiAgICAgICAgTW9kZSAgICAgPT4gJ2JpbmFyeScsCiAgICApOwoKICAgIG15ICRBdHRhY2htZW50SW5mbyA9IHsKICAgICAgICAlQXR0YWNobWVudERhdGEsCiAgICAgICAgRmlsZW5hbWUgICAgPT4gJFBhcmFte0ZpbGVuYW1lfSwKICAgICAgICBDb250ZW50ICAgICA9PiAkeyAkQXR0YWNobWVudERhdGF7Q29udGVudH0gfSwKICAgICAgICBDb250ZW50VHlwZSA9PiAkQXR0YWNobWVudERhdGF7UHJlZmVyZW5jZXN9LT57Q29udGVudFR5cGV9LAogICAgICAgIFR5cGUgICAgICAgID0+ICdhdHRhY2htZW50JywKICAgICAgICBGaWxlc2l6ZSAgICA9PiAkQXR0YWNobWVudERhdGF7UHJlZmVyZW5jZXN9LT57RmlsZXNpemV9LAogICAgfTsKCiAgICByZXR1cm4gJEF0dGFjaG1lbnRJbmZvOwp9Cgo9aXRlbSBDb25maWdJdGVtQXR0YWNobWVudExpc3QoKQoKUmV0dXJucyBhbiBhcnJheSB3aXRoIGFsbCBhdHRhY2htZW50cyBvZiB0aGUgZ2l2ZW4gY29uZmlnIGl0ZW0uCgogICAgbXkgQEF0dGFjaG1lbnRzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BdHRhY2htZW50TGlzdCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLAogICAgKTsKCnJldHVybnMKCiAgICBAQXR0YWNobWVudHMgPSAoCiAgICAgICAgJ2ZpbGVuYW1lLnR4dCcsCiAgICAgICAgJ290aGVyX2ZpbGUucGRmJywKICAgICk7Cgo9Y3V0CgpzdWIgQ29uZmlnSXRlbUF0dGFjaG1lbnRMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDb25maWdJdGVtSUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDb25maWdJdGVtSUQhJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBmaW5kIGFsbCBhdHRhY2htZW50cyBvZiB0aGlzIGNvbmZpZyBpdGVtCiAgICBteSBAQXR0YWNobWVudHMgPSAkU2VsZi0+e1ZpcnR1YWxGU09iamVjdH0tPkZpbmQoCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgfSwKICAgICk7CgogICAgZm9yIG15ICRGaWxlbmFtZSAoQEF0dGFjaG1lbnRzKSB7CgogICAgICAgICMgcmVtb3ZlIGV4dHJhIGluZm9ybWF0aW9uIGZyb20gZmlsZW5hbWUKICAgICAgICAkRmlsZW5hbWUgPX4gc3sgXEEgQ29uZmlnSXRlbSAvIFxkKyAvIH17fXhtczsKICAgIH0KCiAgICByZXR1cm4gQEF0dGFjaG1lbnRzOwp9Cgo9aXRlbSBDb25maWdJdGVtQXR0YWNobWVudEV4aXN0cygpCgpDaGVja3MgaWYgYSBmaWxlIHdpdGggYSBnaXZlbiBmaWxlbmFtZSBleGlzdHMuCgogICAgbXkgJEV4aXN0cyA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQXR0YWNobWVudEV4aXN0cygKICAgICAgICBGaWxlbmFtZSA9PiAndGVzdC50eHQnLAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgQ29uZmlnSXRlbUF0dGFjaG1lbnRFeGlzdHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZpbGVuYW1lIENvbmZpZ0l0ZW1JRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBpZiAhJFNlbGYtPntWaXJ0dWFsRlNPYmplY3R9LT5GaW5kKAogICAgICAgIEZpbGVuYW1lID0+ICdDb25maWdJdGVtLycgLiAkUGFyYW17Q29uZmlnSXRlbUlEfSAuICcvJyAuICRQYXJhbXtGaWxlbmFtZX0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoKQoKcmV0dXJuIGEgY29uZmlnIGl0ZW0gbGlzdCBhcyBhbiBhcnJheSByZWZlcmVuY2UKCiAgICBteSAkQ29uZmlnSXRlbUlEcyA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoCiAgICAgICAgTnVtYmVyICAgICAgID0+ICdUaGUgQ29uZmlnSXRlbSBOdW1iZXInLCAgIyAob3B0aW9uYWwpCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdUaGUgTmFtZScsICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQ2xhc3NJRHMgICAgID0+IFs5LCA4LCA3LCA2XSwgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRGVwbFN0YXRlSURzID0+IFsxLCAyLCAzLCA0XSwgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgSW5jaVN0YXRlSURzID0+IFsxLCAyLCAzLCA0XSwgICAgICAgICAgICAgIyAob3B0aW9uYWwpCgogICAgICAgICMgY29uZmlnIGl0ZW1zIHdpdGggY3JlYXRlZCB0aW1lIGFmdGVyIC4uLgogICAgICAgIENvbmZpZ0l0ZW1DcmVhdGVUaW1lTmV3ZXJEYXRlID0+ICcyMDA2LTAxLTA5IDAwOjAwOjAxJywgICMgKG9wdGlvbmFsKQogICAgICAgICMgY29uZmlnIGl0ZW1zIHdpdGggY3JlYXRlZCB0aW1lIGJlZm9yZSB0aGVuIC4uLi4KICAgICAgICBDb25maWdJdGVtQ3JlYXRlVGltZU9sZGVyRGF0ZSA9PiAnMjAwNi0wMS0xOSAyMzo1OTo1OScsICAjIChvcHRpb25hbCkKCiAgICAgICAgIyBjb25maWcgaXRlbXMgd2l0aCBjaGFuZ2VkIHRpbWUgYWZ0ZXIgLi4uCiAgICAgICAgQ29uZmlnSXRlbUNoYW5nZVRpbWVOZXdlckRhdGUgPT4gJzIwMDYtMDEtMDkgMDA6MDA6MDEnLCAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBjb25maWcgaXRlbXMgd2l0aCBjaGFuZ2VkIHRpbWUgYmVmb3JlIHRoZW4gLi4uLgogICAgICAgIENvbmZpZ0l0ZW1DaGFuZ2VUaW1lT2xkZXJEYXRlID0+ICcyMDA2LTAxLTE5IDIzOjU5OjU5JywgICMgKG9wdGlvbmFsKQoKICAgICAgICBXaGF0ID0+IFsKICAgICAgICAgICAgIyBlYWNoIGFycmF5IGVsZW1lbnQgaXMgYSBhbmQgY29uZGl0aW9uCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICMgb3IgY29uZGl0aW9uIGluIGhhc2gKICAgICAgICAgICAgICAgICJbJV17J0VsZW1lbnRBJ31bJV17J0VsZW1lbnRCJ31bJV17J0NvbnRlbnQnfSIgPT4gJyVjb250ZW50QSUnLAogICAgICAgICAgICAgICAgIlslXXsnRWxlbWVudEEnfVslXXsnRWxlbWVudEMnfVslXXsnQ29udGVudCd9IiA9PiAnJWNvbnRlbnRBJScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJbJV17J0VsZW1lbnRBJ31bJV17J0VsZW1lbnRCJ31bJV17J0NvbnRlbnQnfSIgPT4gJyVjb250ZW50QiUnLAogICAgICAgICAgICAgICAgIlslXXsnRWxlbWVudEEnfVslXXsnRWxlbWVudEMnfVslXXsnQ29udGVudCd9IiA9PiAnJWNvbnRlbnRCJScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICMgdXNlIGFycmF5IHJlZmVyZW5jZSBpZiBkaWZmZXJlbnQgY29udGVudCB3aXRoIHNhbWUga2V5IHdhcyBzZWFyY2hlZAogICAgICAgICAgICAgICAgIlslXXsnRWxlbWVudEEnfVslXXsnRWxlbWVudEInfVslXXsnQ29udGVudCd9IiA9PiBbJyVjb250ZW50QyUnLCAnJWNvbnRlbnREJScsICclY29udGVudEUlJ10sCiAgICAgICAgICAgICAgICAiWyVdeydFbGVtZW50QSd9WyVdeydFbGVtZW50Qyd9WyVdeydDb250ZW50J30iID0+IFsnJWNvbnRlbnRDJScsICclY29udGVudEQlJywgJyVjb250ZW50RSUnXSwKICAgICAgICAgICAgfSwKICAgICAgICBdLAoKICAgICAgICBQcmV2aW91c1ZlcnNpb25TZWFyY2ggPT4gMSwgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDAgKDB8MSkKCiAgICAgICAgT3JkZXJCeSA9PiBbICdDb25maWdJdGVtSUQnLCAnTnVtYmVyJyBdLCAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgZGVmYXVsdDogWyAnQ29uZmlnSXRlbUlEJyBdCiAgICAgICAgIyAoQ29uZmlnSXRlbUlELCBOdW1iZXIsIENsYXNzSUQsIERlcGxTdGF0ZUlELCBJbmNpU3RhdGVJRCwKICAgICAgICAjIENyZWF0ZVRpbWUsIENyZWF0ZUJ5LCBDaGFuZ2VUaW1lLCBDaGFuZ2VCeSkKCiAgICAgICAgIyBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBPcmRlckJ5OgogICAgICAgICMgVGhlIE9yZGVyQnlEaXJlY3Rpb24gY2FuIGJlIHNwZWNpZmllZCBmb3IgZWFjaCBPcmRlckJ5IGF0dHJpYnV0ZS4KICAgICAgICAjIFRoZSBwYWlyaW5nIGlzIG1hZGUgYnkgdGhlIGFycmF5IGluZGljZXMuCgogICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWyAnRG93bicsICdVcCcgXSwgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgZGVmYXVsdDogWyAnRG93bicgXQogICAgICAgICMgKERvd24gfCBVcCkKCiAgICAgICAgTGltaXQgICAgICAgICAgPT4gMTIyLCAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNpbmdXaWxkY2FyZHMgPT4gMCwgICAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMQogICAgKTsKCj1jdXQKCnN1YiBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNldCBsaW1pdAogICAgbXkgJExpbWl0ID0gJFBhcmFte0xpbWl0fTsKICAgICRQYXJhbXtMaW1pdH0gPSB1bmRlZjsKCiAgICAjIGNvbmZpZyBpdGVtIHNlYXJjaCBpcyByZXF1aXJlZCBpZiBvbmUgb2YgdGhlc2UgcGFyYW1zIGlzIGdpdmVuCiAgICBteSBAQ29uZmlnSXRlbVNlYXJjaFBhcmFtcyA9ICgKICAgICAgICAnQ29uZmlnSXRlbUNyZWF0ZVRpbWVOZXdlckRhdGUnLAogICAgICAgICdDb25maWdJdGVtQ3JlYXRlVGltZU9sZGVyRGF0ZScsCiAgICAgICAgJ0NvbmZpZ0l0ZW1DaGFuZ2VUaW1lTmV3ZXJEYXRlJywKICAgICAgICAnQ29uZmlnSXRlbUNoYW5nZVRpbWVPbGRlckRhdGUnLAogICAgKTsKCiAgICAjIGNoZWNrLCBpZiBjb25maWcgaXRlbSBzZWFyY2ggaXMgcmVxdWlyZWQKICAgIG15ICVSZXF1aXJlZFNlYXJjaDsKICAgIENPTkZJR0lURU1QQVJBTToKICAgIGZvciBteSAkQ29uZmlnSXRlbVBhcmFtIChAQ29uZmlnSXRlbVNlYXJjaFBhcmFtcykgewogICAgICAgIG5leHQgQ09ORklHSVRFTVBBUkFNIGlmICEkUGFyYW17JENvbmZpZ0l0ZW1QYXJhbX07CgogICAgICAgICRSZXF1aXJlZFNlYXJjaHtDb25maWdJdGVtfSA9IDE7CiAgICAgICAgbGFzdCBDT05GSUdJVEVNUEFSQU07CiAgICB9CgogICAgIyBzcGVjaWFsIGhhbmRsaW5nIGZvciBjb25maWcgaXRlbSBudW1iZXIKICAgICMgbnVtYmVyIDAgaXMgYWxsb3dlZCBidXQgbm90IHRoZSBlbXB0eSBzdHJpbmcKICAgIGlmICggZGVmaW5lZCAkUGFyYW17TnVtYmVyfSAmJiAkUGFyYW17TnVtYmVyfSBuZSAnJyApIHsKICAgICAgICAkUmVxdWlyZWRTZWFyY2h7Q29uZmlnSXRlbX0gPSAxOwogICAgfQoKICAgICMgdmVyc2lvbiBzZWFyY2ggaXMgcmVxdWlyZWQgaWYgTmFtZSwgV2hhdCBvciBQcmV2aW91c1ZlcnNpb25TZWFyY2ggaXMgZ2l2ZW4KICAgIGlmICgKICAgICAgICAoIGRlZmluZWQgJFBhcmFte05hbWV9ICYmICRQYXJhbXtOYW1lfSBuZSAnJyApCiAgICAgICAgfHwgKCBkZWZpbmVkICRQYXJhbXtXaGF0fSAmJiAkUGFyYW17V2hhdH0gbmUgJycgKQogICAgICAgIHx8ICRQYXJhbXtQcmV2aW91c1ZlcnNpb25TZWFyY2h9CiAgICAgICAgKQogICAgewogICAgICAgICRSZXF1aXJlZFNlYXJjaHtWZXJzaW9ufSA9IDE7CiAgICB9CgogICAgIyB2ZXJzaW9uIHNlYXJjaCBpcyBhbHNvIHJlcXVpcmVkIGlmIHNvcnRpbmcgYnkgbmFtZSAoZml4IGZvciBidWcgIzcwNzIpCiAgICBPUkRFUkJZOgogICAgZm9yIG15ICRPcmRlckJ5ICggQHsgJFBhcmFte09yZGVyQnl9IH0gKSB7CiAgICAgICAgaWYgKCAkT3JkZXJCeSBlcSAnTmFtZScgKSB7CiAgICAgICAgICAgICRSZXF1aXJlZFNlYXJjaHtWZXJzaW9ufSA9IDE7CiAgICAgICAgICAgIGxhc3QgT1JERVJCWTsKICAgICAgICB9CiAgICB9CgogICAgIyB4bWwgdmVyc2lvbiBzZWFyY2ggaXMgcmVxdWlyZWQgaWYgV2hhdCBpcyBnaXZlbgogICAgaWYgKCBkZWZpbmVkICRQYXJhbXtXaGF0fSAmJiAkUGFyYW17V2hhdH0gbmUgJycgKSB7CiAgICAgICAgJFJlcXVpcmVkU2VhcmNoe1hNTFZlcnNpb259ID0gMTsKICAgIH0KCiAgICAjIHVzZSBjb25maWcgaXRlbSBzZWFyY2ggYXMgZmFsbGJhY2sKICAgIGlmICggISVSZXF1aXJlZFNlYXJjaCApIHsKICAgICAgICAkUmVxdWlyZWRTZWFyY2h7Q29uZmlnSXRlbX0gPSAxOwogICAgfQoKICAgICMgc3RhcnQgY29uZmlnIGl0ZW0gc2VhcmNoCiAgICBteSAlQ29uZmlnSXRlbUxpc3RzOwogICAgaWYgKCAkUmVxdWlyZWRTZWFyY2h7Q29uZmlnSXRlbX0gKSB7CgogICAgICAgICMgc2VhcmNoIGNvbmZpZyBpdGVtcwogICAgICAgICRDb25maWdJdGVtTGlzdHN7Q29uZmlnSXRlbX0gPSAkU2VsZi0+Q29uZmlnSXRlbVNlYXJjaCglUGFyYW0pOwoKICAgICAgICByZXR1cm4gaWYgISRDb25maWdJdGVtTGlzdHN7Q29uZmlnSXRlbX07CiAgICAgICAgcmV0dXJuIGlmIHJlZiAkQ29uZmlnSXRlbUxpc3Rze0NvbmZpZ0l0ZW19IG5lICdBUlJBWSc7CiAgICAgICAgcmV0dXJuIFtdIGlmICFAeyAkQ29uZmlnSXRlbUxpc3Rze0NvbmZpZ0l0ZW19IH07CiAgICB9CgogICAgIyBzdGFydCB2ZXJzaW9uIHNlYXJjaAogICAgaWYgKCAkUmVxdWlyZWRTZWFyY2h7VmVyc2lvbn0gKSB7CgogICAgICAgICMgc2VhcmNoIHZlcnNpb25zCiAgICAgICAgJENvbmZpZ0l0ZW1MaXN0c3tWZXJzaW9ufSA9ICRTZWxmLT5WZXJzaW9uU2VhcmNoKCVQYXJhbSk7CgogICAgICAgIHJldHVybiBpZiAhJENvbmZpZ0l0ZW1MaXN0c3tWZXJzaW9ufTsKICAgICAgICByZXR1cm4gaWYgcmVmICRDb25maWdJdGVtTGlzdHN7VmVyc2lvbn0gbmUgJ0FSUkFZJzsKICAgICAgICByZXR1cm4gW10gaWYgIUB7ICRDb25maWdJdGVtTGlzdHN7VmVyc2lvbn0gfTsKICAgIH0KCiAgICAjIHN0YXJ0IHhtbCB2ZXJzaW9uIHNlYXJjaAogICAgaWYgKCAkUmVxdWlyZWRTZWFyY2h7WE1MVmVyc2lvbn0gKSB7CgogICAgICAgICMgc2VhcmNoIHhtbCB2ZXJzaW9ucwogICAgICAgIG15ICRYTUxWZXJzaW9uTGlzdCA9ICRTZWxmLT5fWE1MVmVyc2lvblNlYXJjaCglUGFyYW0pOwoKICAgICAgICByZXR1cm4gaWYgISRYTUxWZXJzaW9uTGlzdDsKICAgICAgICByZXR1cm4gaWYgcmVmICRYTUxWZXJzaW9uTGlzdCBuZSAnSEFTSCc7CiAgICAgICAgcmV0dXJuIFtdIGlmICEleyRYTUxWZXJzaW9uTGlzdH07CgogICAgICAgICMgZ2V0IGNvbmZpZyBpdGVtIGlkcwogICAgICAgIG15ICVDb25maWdJdGVtTGlzdFRtcDsKICAgICAgICBmb3IgbXkgJFZlcnNpb25JRCAoIGtleXMgJXskWE1MVmVyc2lvbkxpc3R9ICkgewogICAgICAgICAgICBteSAkQ29uZmlnSXRlbUlEID0gJFNlbGYtPlZlcnNpb25Db25maWdJdGVtSURHZXQoCiAgICAgICAgICAgICAgICBWZXJzaW9uSUQgPT4gJFZlcnNpb25JRCwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1MaXN0VG1weyRDb25maWdJdGVtSUR9ID0gMTsKICAgICAgICB9CgogICAgICAgICMgYWRkIGlkcyB0byBjb25maWcgaXRlbSBsaXN0CiAgICAgICAgJENvbmZpZ0l0ZW1MaXN0c3tYTUxWZXJzaW9ufSA9IFwlQ29uZmlnSXRlbUxpc3RUbXA7CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIHJlc3VsdCBsaXN0CiAgICBteSBAUmVzdWx0TGlzdDsKICAgIGlmICggJFJlcXVpcmVkU2VhcmNoe0NvbmZpZ0l0ZW19ICYmICRSZXF1aXJlZFNlYXJjaHtWZXJzaW9ufSApIHsKCiAgICAgICAgbXkgJVZlcnNpb25UZW1wTGlzdDsKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIEB7ICRDb25maWdJdGVtTGlzdHN7VmVyc2lvbn0gfSApIHsKICAgICAgICAgICAgJFZlcnNpb25UZW1wTGlzdHskQ29uZmlnSXRlbUlEfSA9IDE7CiAgICAgICAgfQoKICAgICAgICBDT05GSUdJVEVNSUQ6CiAgICAgICAgZm9yIG15ICRDb25maWdJdGVtSUQgKCBAeyAkQ29uZmlnSXRlbUxpc3Rze0NvbmZpZ0l0ZW19IH0gKSB7CgogICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAhJFZlcnNpb25UZW1wTGlzdHskQ29uZmlnSXRlbUlEfTsKCiAgICAgICAgICAgIHB1c2ggQFJlc3VsdExpc3QsICRDb25maWdJdGVtSUQ7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkUmVxdWlyZWRTZWFyY2h7Q29uZmlnSXRlbX0gKSB7CiAgICAgICAgQFJlc3VsdExpc3QgPSBAeyAkQ29uZmlnSXRlbUxpc3Rze0NvbmZpZ0l0ZW19IH07CiAgICB9CiAgICBlbHNpZiAoICRSZXF1aXJlZFNlYXJjaHtWZXJzaW9ufSApIHsKICAgICAgICBAUmVzdWx0TGlzdCA9IEB7ICRDb25maWdJdGVtTGlzdHN7VmVyc2lvbn0gfTsKICAgIH0KCiAgICAjIGNvbnNpZGVyIHRoZSBYTUwgcmVzdWx0CiAgICBpZiAoICRSZXF1aXJlZFNlYXJjaHtYTUxWZXJzaW9ufSApIHsKICAgICAgICBAUmVzdWx0TGlzdCA9IGdyZXAgeyAkQ29uZmlnSXRlbUxpc3Rze1hNTFZlcnNpb259LT57JF99IH0gQFJlc3VsdExpc3Q7CiAgICB9CgogICAgIyBjb25zaWRlciBsaW1pdAogICAgaWYgKCAkTGltaXQgJiYgJExpbWl0IDwgc2NhbGFyIEBSZXN1bHRMaXN0ICkgewoKICAgICAgICAjIGV4dHJhY3QgdGhlIGxpbWl0ZWQgaWRzCiAgICAgICAgJExpbWl0LS07CiAgICAgICAgQFJlc3VsdExpc3QgPSBAUmVzdWx0TGlzdFsgMCAuLiAkTGltaXQgXTsKICAgIH0KCiAgICByZXR1cm4gXEBSZXN1bHRMaXN0Owp9Cgo9aXRlbSBDb25maWdJdGVtU2VhcmNoKCkKCnJldHVybiBhIGNvbmZpZyBpdGVtIGxpc3QgYXMgYW4gYXJyYXkgcmVmZXJlbmNlCgogICAgbXkgJENvbmZpZ0l0ZW1JRHMgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbVNlYXJjaCgKICAgICAgICBOdW1iZXIgICAgICAgPT4gJ1RoZSBDb25maWdJdGVtIE51bWJlcicsICAjIChvcHRpb25hbCkKICAgICAgICBDbGFzc0lEcyAgICAgPT4gWzksIDgsIDcsIDZdLCAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBEZXBsU3RhdGVJRHMgPT4gWzEsIDIsIDMsIDRdLCAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBJbmNpU3RhdGVJRHMgPT4gWzEsIDIsIDMsIDRdLCAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDcmVhdGVCeSAgICAgPT4gWzEsIDIsIDNdLCAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDaGFuZ2VCeSAgICAgPT4gWzMsIDIsIDFdLCAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgIyBjb25maWcgaXRlbXMgd2l0aCBjcmVhdGVkIHRpbWUgYWZ0ZXIgLi4uCiAgICAgICAgQ29uZmlnSXRlbUNyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJzIwMDYtMDEtMDkgMDA6MDA6MDEnLCAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBjb25maWcgaXRlbXMgd2l0aCBjcmVhdGVkIHRpbWUgYmVmb3JlIHRoZW4gLi4uLgogICAgICAgIENvbmZpZ0l0ZW1DcmVhdGVUaW1lT2xkZXJEYXRlID0+ICcyMDA2LTAxLTE5IDIzOjU5OjU5JywgICMgKG9wdGlvbmFsKQoKICAgICAgICAjIGNvbmZpZyBpdGVtcyB3aXRoIGNoYW5nZWQgdGltZSBhZnRlciAuLi4KICAgICAgICBDb25maWdJdGVtQ2hhbmdlVGltZU5ld2VyRGF0ZSA9PiAnMjAwNi0wMS0wOSAwMDowMDowMScsICAjIChvcHRpb25hbCkKICAgICAgICAjIGNvbmZpZyBpdGVtcyB3aXRoIGNoYW5nZWQgdGltZSBiZWZvcmUgdGhlbiAuLi4uCiAgICAgICAgQ29uZmlnSXRlbUNoYW5nZVRpbWVPbGRlckRhdGUgPT4gJzIwMDYtMDEtMTkgMjM6NTk6NTknLCAgIyAob3B0aW9uYWwpCgogICAgICAgIE9yZGVyQnkgPT4gWyAnQ29uZmlnSXRlbUlEJywgJ051bWJlcicgXSwgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjIGRlZmF1bHQ6IFsgJ0NvbmZpZ0l0ZW1JRCcgXQogICAgICAgICMgKENvbmZpZ0l0ZW1JRCwgTnVtYmVyLCBDbGFzc0lELCBEZXBsU3RhdGVJRCwgSW5jaVN0YXRlSUQsCiAgICAgICAgIyBDcmVhdGVUaW1lLCBDcmVhdGVCeSwgQ2hhbmdlVGltZSwgQ2hhbmdlQnkpCgogICAgICAgICMgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgT3JkZXJCeToKICAgICAgICAjIFRoZSBPcmRlckJ5RGlyZWN0aW9uIGNhbiBiZSBzcGVjaWZpZWQgZm9yIGVhY2ggT3JkZXJCeSBhdHRyaWJ1dGUuCiAgICAgICAgIyBUaGUgcGFpcmluZyBpcyBtYWRlIGJ5IHRoZSBhcnJheSBpbmRpY2VzLgoKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFsgJ0Rvd24nLCAnVXAnIF0sICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjIGRlZmF1bHQ6IFsgJ0Rvd24nIF0KICAgICAgICAjIChEb3duIHwgVXApCgogICAgICAgIExpbWl0ICAgICAgICAgID0+IDEyMiwgICMgKG9wdGlvbmFsKQogICAgICAgIFVzaW5nV2lsZGNhcmRzID0+IDAsICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEKICAgICk7Cgo9Y3V0CgpzdWIgQ29uZmlnSXRlbVNlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdmVyaWZ5IHRoYXQgYWxsIHBhc3NlZCBhcnJheSBwYXJhbWV0ZXJzIGNvbnRhaW4gYW4gYXJyYXlyZWYKICAgIEFSR1VNRU5UOgogICAgZm9yIG15ICRBcmd1bWVudCAoCiAgICAgICAgcXcoCiAgICAgICAgT3JkZXJCeQogICAgICAgIE9yZGVyQnlEaXJlY3Rpb24KICAgICAgICApCiAgICAgICAgKQogICAgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRQYXJhbXskQXJndW1lbnR9IHx8PSBbXTsKCiAgICAgICAgICAgIG5leHQgQVJHVU1FTlQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoIHJlZiAkUGFyYW17JEFyZ3VtZW50fSBuZSAnQVJSQVknICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJEFyZ3VtZW50IG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWZpbmUgb3JkZXIgdGFibGUKICAgIG15ICVPcmRlckJ5VGFibGUgPSAoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICdpZCcsCiAgICAgICAgTnVtYmVyICAgICAgID0+ICdjb25maWdpdGVtX251bWJlcicsCiAgICAgICAgQ2xhc3NJRCAgICAgID0+ICdjbGFzc19pZCcsCiAgICAgICAgRGVwbFN0YXRlSUQgID0+ICdjdXJfZGVwbF9zdGF0ZV9pZCcsCiAgICAgICAgSW5jaVN0YXRlSUQgID0+ICdjdXJfaW5jaV9zdGF0ZV9pZCcsCiAgICAgICAgQ3JlYXRlVGltZSAgID0+ICdjcmVhdGVfdGltZScsCiAgICAgICAgQ3JlYXRlQnkgICAgID0+ICdjcmVhdGVfYnknLAogICAgICAgIENoYW5nZVRpbWUgICA9PiAnY2hhbmdlX3RpbWUnLAogICAgICAgIENoYW5nZUJ5ICAgICA9PiAnY2hhbmdlX2J5JywKICAgICk7CgogICAgIyBjaGVjayBpZiBPcmRlckJ5IGNvbnRhaW5zIG9ubHkgdW5pcXVlIHZhbGlkIHZhbHVlcwogICAgbXkgJU9yZGVyQnlTZWVuOwogICAgT1JERVJCWToKICAgIGZvciBteSAkT3JkZXJCeSAoIEB7ICRQYXJhbXtPcmRlckJ5fSB9ICkgewoKICAgICAgICBuZXh0IE9SREVSQlkgaWYgJE9yZGVyQnkgZXEgJ05hbWUnOwoKICAgICAgICBpZiAoICEkT3JkZXJCeSB8fCAhJE9yZGVyQnlUYWJsZXskT3JkZXJCeX0gfHwgJE9yZGVyQnlTZWVueyRPcmRlckJ5fSApIHsKCiAgICAgICAgICAgICMgZm91bmQgYW4gZXJyb3IKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk9yZGVyQnkgY29udGFpbnMgaW52YWxpZCB2YWx1ZSAnJE9yZGVyQnknICIKICAgICAgICAgICAgICAgICAgICAuICdvciB0aGUgdmFsdWUgaXMgdXNlZCBtb3JlIHRoYW4gb25jZSEnLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIHJlbWVtYmVyIHRoZSB2YWx1ZSB0byBjaGVjayBpZiBpdCBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlCiAgICAgICAgJE9yZGVyQnlTZWVueyRPcmRlckJ5fSA9IDE7CiAgICB9CgogICAgIyBjaGVjayBpZiBPcmRlckJ5RGlyZWN0aW9uIGFycmF5IGNvbnRhaW5zIG9ubHkgJ1VwJyBvciAnRG93bicKICAgIERJUkVDVElPTjoKICAgIGZvciBteSAkRGlyZWN0aW9uICggQHsgJFBhcmFte09yZGVyQnlEaXJlY3Rpb259IH0gKSB7CgogICAgICAgICMgb25seSAnVXAnIG9yICdEb3duJyBhbGxvd2VkCiAgICAgICAgbmV4dCBESVJFQ1RJT04gaWYgJERpcmVjdGlvbiBlcSAnVXAnOwogICAgICAgIG5leHQgRElSRUNUSU9OIGlmICREaXJlY3Rpb24gZXEgJ0Rvd24nOwoKICAgICAgICAjIGZvdW5kIGFuIGVycm9yCiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJPcmRlckJ5RGlyZWN0aW9uIGNhbiBvbmx5IGNvbnRhaW4gJ1VwJyBvciAnRG93bichIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlcwogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17VXNpbmdXaWxkY2FyZHN9ICkgewogICAgICAgICRQYXJhbXtVc2luZ1dpbGRjYXJkc30gPSAxOwogICAgfQoKICAgICMgZ2V0IGxpa2UgZXNjYXBlIHN0cmluZyBuZWVkZWQgZm9yIHNvbWUgZGF0YWJhc2VzIChlLmcuIG9yYWNsZSkKICAgIG15ICRMaWtlRXNjYXBlU3RyaW5nID0gJFNlbGYtPntEQk9iamVjdH0tPkdldERhdGFiYXNlRnVuY3Rpb24oJ0xpa2VFc2NhcGVTdHJpbmcnKTsKCiAgICAjIGFzc2VtYmxlIHRoZSBPUkRFUiBCWSBjbGF1c2UKICAgIG15IEBTUUxPcmRlckJ5OwogICAgbXkgJENvdW50ID0gMDsKICAgIE9SREVSQlk6CiAgICBmb3IgbXkgJE9yZGVyQnkgKCBAeyAkUGFyYW17T3JkZXJCeX0gfSApIHsKCiAgICAgICAgbmV4dCBPUkRFUkJZIGlmICRPcmRlckJ5IGVxICdOYW1lJzsKCiAgICAgICAgIyBzZXQgdGhlIGRlZmF1bHQgb3JkZXIgZGlyZWN0aW9uCiAgICAgICAgbXkgJERpcmVjdGlvbiA9ICdERVNDJzsKCiAgICAgICAgIyBhZGQgdGhlIGdpdmVuIG9yZGVyIGRpcmVjdGlvbgogICAgICAgIGlmICggJFBhcmFte09yZGVyQnlEaXJlY3Rpb259LT5bJENvdW50XSApIHsKICAgICAgICAgICAgaWYgKCAkUGFyYW17T3JkZXJCeURpcmVjdGlvbn0tPlskQ291bnRdIGVxICdVcCcgKSB7CiAgICAgICAgICAgICAgICAkRGlyZWN0aW9uID0gJ0FTQyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUGFyYW17T3JkZXJCeURpcmVjdGlvbn0tPlskQ291bnRdIGVxICdEb3duJyApIHsKICAgICAgICAgICAgICAgICREaXJlY3Rpb24gPSAnREVTQyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYWRkIFNRTAogICAgICAgIHB1c2ggQFNRTE9yZGVyQnksICIkT3JkZXJCeVRhYmxleyRPcmRlckJ5fSAkRGlyZWN0aW9uIjsKCiAgICB9CiAgICBjb250aW51ZSB7CiAgICAgICAgJENvdW50Kys7CiAgICB9CgogICAgIyBpZiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIG9yZGVyaW5nIGlzIG5vdCBkZXRlcm1pbmVkCiAgICAjIHdlIGFkZCBhbiBhc2NlbmRpbmcgb3JkZXJpbmcgYnkgaWQKICAgIGlmICggIWdyZXAgeyAkXyBlcSAnQ29uZmlnSXRlbUlEJyB9ICggQHsgJFBhcmFte09yZGVyQnl9IH0gKSApIHsKICAgICAgICBwdXNoIEBTUUxPcmRlckJ5LCAiJE9yZGVyQnlUYWJsZXtDb25maWdJdGVtSUR9IEFTQyI7CiAgICB9CgogICAgIyBhZGQgbnVtYmVyIHRvIHNxbCB3aGVyZSBhcnJheQogICAgbXkgQFNRTFdoZXJlOwogICAgaWYgKCBkZWZpbmVkICRQYXJhbXtOdW1iZXJ9ICYmICRQYXJhbXtOdW1iZXJ9IG5lICcnICkgewoKICAgICAgICAjIHF1b3RlCiAgICAgICAgJFBhcmFte051bWJlcn0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtOdW1iZXJ9ICk7CgogICAgICAgIGlmICggJFBhcmFte1VzaW5nV2lsZGNhcmRzfSApIHsKCiAgICAgICAgICAgICMgcHJlcGFyZSBsaWtlIHN0cmluZwogICAgICAgICAgICAkU2VsZi0+X1ByZXBhcmVMaWtlU3RyaW5nKCBcJFBhcmFte051bWJlcn0gKTsKCiAgICAgICAgICAgIHB1c2ggQFNRTFdoZXJlLAogICAgICAgICAgICAgICAgIkxPV0VSKGNvbmZpZ2l0ZW1fbnVtYmVyKSBMSUtFIExPV0VSKCckUGFyYW17TnVtYmVyfScpICRMaWtlRXNjYXBlU3RyaW5nIjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHB1c2ggQFNRTFdoZXJlLCAiTE9XRVIoY29uZmlnaXRlbV9udW1iZXIpID0gTE9XRVIoJyRQYXJhbXtOdW1iZXJ9JykiOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBhcnJheSBwYXJhbXMKICAgIG15ICVBcnJheVBhcmFtcyA9ICgKICAgICAgICBDbGFzc0lEcyAgICAgPT4gJ2NsYXNzX2lkJywKICAgICAgICBEZXBsU3RhdGVJRHMgPT4gJ2N1cl9kZXBsX3N0YXRlX2lkJywKICAgICAgICBJbmNpU3RhdGVJRHMgPT4gJ2N1cl9pbmNpX3N0YXRlX2lkJywKICAgICAgICBDcmVhdGVCeSAgICAgPT4gJ2NyZWF0ZV9ieScsCiAgICAgICAgQ2hhbmdlQnkgICAgID0+ICdjaGFuZ2VfYnknLAogICAgKTsKCiAgICBBUlJBWVBBUkFNOgogICAgZm9yIG15ICRBcnJheVBhcmFtICgga2V5cyAlQXJyYXlQYXJhbXMgKSB7CgogICAgICAgIG5leHQgQVJSQVlQQVJBTSBpZiAhJFBhcmFteyRBcnJheVBhcmFtfTsKCiAgICAgICAgaWYgKCByZWYgJFBhcmFteyRBcnJheVBhcmFtfSBuZSAnQVJSQVknICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJEFycmF5UGFyYW0gbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBBUlJBWVBBUkFNIGlmICFAeyAkUGFyYW17JEFycmF5UGFyYW19IH07CgogICAgICAgICMgcXVvdGUgYXMgaW50ZWdlcgogICAgICAgIGZvciBteSAkT25lUGFyYW0gKCBAeyAkUGFyYW17JEFycmF5UGFyYW19IH0gKSB7CiAgICAgICAgICAgICRPbmVQYXJhbSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJE9uZVBhcmFtLCAnSW50ZWdlcicgKTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIHN0cmluZwogICAgICAgIG15ICRJblN0cmluZyA9IGpvaW4gcXssIH0sIEB7ICRQYXJhbXskQXJyYXlQYXJhbX0gfTsKCiAgICAgICAgbmV4dCBBUlJBWVBBUkFNIGlmICEkSW5TdHJpbmc7CgogICAgICAgIHB1c2ggQFNRTFdoZXJlLCAiJEFycmF5UGFyYW1zeyAkQXJyYXlQYXJhbSB9IElOICgkSW5TdHJpbmcpIjsKICAgIH0KCiAgICAjIHNldCB0aW1lIHBhcmFtcwogICAgbXkgJVRpbWVQYXJhbXMgPSAoCiAgICAgICAgQ29uZmlnSXRlbUNyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJ2NyZWF0ZV90aW1lID49JywKICAgICAgICBDb25maWdJdGVtQ3JlYXRlVGltZU9sZGVyRGF0ZSA9PiAnY3JlYXRlX3RpbWUgPD0nLAogICAgICAgIENvbmZpZ0l0ZW1DaGFuZ2VUaW1lTmV3ZXJEYXRlID0+ICdjaGFuZ2VfdGltZSA+PScsCiAgICAgICAgQ29uZmlnSXRlbUNoYW5nZVRpbWVPbGRlckRhdGUgPT4gJ2NoYW5nZV90aW1lIDw9JywKICAgICk7CgogICAgVElNRVBBUkFNOgogICAgZm9yIG15ICRUaW1lUGFyYW0gKCBrZXlzICVUaW1lUGFyYW1zICkgewoKICAgICAgICBuZXh0IFRJTUVQQVJBTSBpZiAhJFBhcmFteyRUaW1lUGFyYW19OwoKICAgICAgICBpZiAoICRQYXJhbXskVGltZVBhcmFtfSAhfiBteyBcQSBcZFxkXGRcZC1cZFxkLVxkXGQgXHMgXGRcZDpcZFxkOlxkXGQgXHogfXhtcyApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkludmFsaWQgZGF0ZSBmb3JtYXQgZm91bmQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBxdW90ZQogICAgICAgICRQYXJhbXskVGltZVBhcmFtfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRUaW1lUGFyYW19ICk7CgogICAgICAgIHB1c2ggQFNRTFdoZXJlLCAiJFRpbWVQYXJhbXN7ICRUaW1lUGFyYW0gfSAnJFBhcmFteyAkVGltZVBhcmFtIH0nIjsKICAgIH0KCiAgICAjIGNyZWF0ZSB3aGVyZSBzdHJpbmcKICAgIG15ICRXaGVyZVN0cmluZyA9IEBTUUxXaGVyZSA/ICcgV0hFUkUgJyAuIGpvaW4gcXsgQU5EIH0sIEBTUUxXaGVyZSA6ICcnOwoKICAgICMgc2V0IGxpbWl0CiAgICBpZiAoICRQYXJhbXtMaW1pdH0gKSB7CiAgICAgICAgJFBhcmFte0xpbWl0fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte0xpbWl0fSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgbXkgJFNRTCA9ICJTRUxFQ1QgaWQgRlJPTSBjb25maWdpdGVtICRXaGVyZVN0cmluZyAiOwoKICAgICMgYWRkIHRoZSBPUkRFUiBCWSBjbGF1c2UKICAgIGlmIChAU1FMT3JkZXJCeSkgewogICAgICAgICRTUUwgLj0gJ09SREVSIEJZICc7CiAgICAgICAgJFNRTCAuPSBqb2luICcsICcsIEBTUUxPcmRlckJ5OwogICAgICAgICRTUUwgLj0gJyAnOwogICAgfQoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAkU1FMLAogICAgICAgIExpbWl0ID0+ICRQYXJhbXtMaW1pdH0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQENvbmZpZ0l0ZW1MaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBDb25maWdJdGVtTGlzdCwgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gXEBDb25maWdJdGVtTGlzdDsKfQoKPWl0ZW0gQ3VySW5jaVN0YXRlUmVjYWxjKCkKCnJlY2FsY3VsYXRlcyB0aGUgY3VycmVudCBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtIGFuZCBhbGwgbGlua2VkIGNvbmZpZyBpdGVtcwoKICAgIG15ICRTdWNjZXNzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkN1ckluY2lTdGF0ZVJlY2FsYygKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBDdXJJbmNpU3RhdGVSZWNhbGMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENvbmZpZ0l0ZW1JRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGluY2lkZW50IGxpbmsgdHlwZSBmcm9tIGNvbmZpZwogICAgbXkgJExpbmtUeXBlID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0lUU006OkNvcmU6OkluY2lkZW50TGlua1R5cGUnKTsKCiAgICAjIHJlbWVtYmVyIHRoZSBzY2FubmVkIGNvbmZpZyBpdGVtcwogICAgbXkgJVNjYW5uZWRDb25maWdJdGVtSURzOwoKICAgICMgZmluZCBhbGwgY29uZmlnIGl0ZW1zIHdpdGggYW4gaW5jaWRlbnQgc3RhdGUKICAgICRTZWxmLT5fRmluZEluY2lDb25maWdJdGVtcygKICAgICAgICBDb25maWdJdGVtSUQgICAgICAgICA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICBMaW5rVHlwZSAgICAgICAgICAgICA9PiAkTGlua1R5cGUsCiAgICAgICAgU2Nhbm5lZENvbmZpZ0l0ZW1JRHMgPT4gXCVTY2FubmVkQ29uZmlnSXRlbUlEcywKICAgICk7CgogICAgIyBpbnZlc3RpZ2F0ZSBhbGwgY29uZmlnIGl0ZW1zIHdpdGggYSB3YXJuaW5nIHN0YXRlCiAgICBDT05GSUdJVEVNSUQ6CiAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIGtleXMgJVNjYW5uZWRDb25maWdJdGVtSURzICkgewoKICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAkU2Nhbm5lZENvbmZpZ0l0ZW1JRHN7JENvbmZpZ0l0ZW1JRH0tPntUeXBlfSBuZSAnaW5jaWRlbnQnOwoKICAgICAgICAkU2VsZi0+X0ZpbmRXYXJuQ29uZmlnSXRlbXMoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCAgICAgICAgID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIExpbmtUeXBlICAgICAgICAgICAgID0+ICRMaW5rVHlwZSwKICAgICAgICAgICAgU2Nhbm5lZENvbmZpZ0l0ZW1JRHMgPT4gXCVTY2FubmVkQ29uZmlnSXRlbUlEcywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBsaXN0IG9mIHdhcm5pbmdzCiAgICBteSAkV2FyblN0YXRlTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBGdW5jdGlvbmFsaXR5ID0+ICd3YXJuaW5nJywKICAgICAgICB9LAogICAgKTsKCiAgICBteSAlUmV2ZXJzZVdhcm5TdGF0ZUxpc3QgPSByZXZlcnNlICV7JFdhcm5TdGF0ZUxpc3R9OwogICAgbXkgQFNvcnRlZFdhcm5MaXN0ICAgICAgID0gc29ydCBrZXlzICVSZXZlcnNlV2FyblN0YXRlTGlzdDsKICAgIG15ICRXYXJuaW5nU3RhdGVJRAogICAgICAgID0gJFJldmVyc2VXYXJuU3RhdGVMaXN0e1dhcm5pbmd9IHx8ICRSZXZlcnNlV2FyblN0YXRlTGlzdHsgJFNvcnRlZFdhcm5MaXN0WzBdIH07CgogICAgIyB0byBzdG9yZSB0aGUgcmVsYXRpb24gYmV0d2VlbiBzZXJ2aWNlcyBhbmQgbGlua2VkIENJcwogICAgbXkgJVNlcnZpY2VDSVJlbGF0aW9uOwoKICAgIENPTkZJR0lURU1JRDoKICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICgga2V5cyAlU2Nhbm5lZENvbmZpZ0l0ZW1JRHMgKSB7CgogICAgICAgICMgZXh0cmFjdCBpbmNpZGVudCBzdGF0ZSB0eXBlCiAgICAgICAgbXkgJEluY2lTdGF0ZVR5cGUgPSAkU2Nhbm5lZENvbmZpZ0l0ZW1JRHN7JENvbmZpZ0l0ZW1JRH17VHlwZX07CgogICAgICAgICMgZmluZCBhbGwgbGlua2VkIHNlcnZpY2VzIG9mIHRoaXMgQ0kKICAgICAgICBteSAlTGlua2VkU2VydmljZUlEcyA9ICRTZWxmLT57TGlua09iamVjdH0tPkxpbmtLZXlMaXN0V2l0aERhdGEoCiAgICAgICAgICAgIE9iamVjdDEgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICAgICAgS2V5MSAgICA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBPYmplY3QyID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgU3RhdGUgICA9PiAnVmFsaWQnLAogICAgICAgICAgICBUeXBlICAgID0+ICRMaW5rVHlwZSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgIFNFUlZJQ0VJRDoKICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIGtleXMgJUxpbmtlZFNlcnZpY2VJRHMgKSB7CgogICAgICAgICAgICAjIHJlbWVtYmVyIHRoZSBDSXMgdGhhdCBhcmUgbGlua2VkIHdpdGggdGhpcyBzZXJ2aWNlCiAgICAgICAgICAgIHB1c2ggQHsgJFNlcnZpY2VDSVJlbGF0aW9ueyRTZXJ2aWNlSUR9IH0sICRDb25maWdJdGVtSUQ7CiAgICAgICAgfQoKICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAkSW5jaVN0YXRlVHlwZSBlcSAnaW5jaWRlbnQnOwoKICAgICAgICBteSAkQ3VySW5jaVN0YXRlSUQgPSAkV2FybmluZ1N0YXRlSUQ7CiAgICAgICAgaWYgKCAkSW5jaVN0YXRlVHlwZSBlcSAnb3BlcmF0aW9uYWwnICkgewoKICAgICAgICAgICAgIyBnZXQgbGFzdCB2ZXJzaW9uCiAgICAgICAgICAgIG15ICRMYXN0VmVyc2lvbiA9ICRTZWxmLT5WZXJzaW9uR2V0KAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICBYTUxEYXRhR2V0ICAgPT4gMCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRDdXJJbmNpU3RhdGVJRCA9ICRMYXN0VmVyc2lvbi0+e0luY2lTdGF0ZUlEfTsKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiVVBEQVRFIGNvbmZpZ2l0ZW0gU0VUIGN1cl9pbmNpX3N0YXRlX2lkID0gJEN1ckluY2lTdGF0ZUlEICIKICAgICAgICAgICAgICAgIC4gIldIRVJFIGlkID0gJENvbmZpZ0l0ZW1JRCIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCB0aGUgY3VycmVudCBpbmNpZGVudCBzdGF0ZSB0eXBlIGZvciBlYWNoIHNlcnZpY2UgKGluZmx1ZW5jZWQgYnkgbGlua2VkIENJcykKICAgIFNFUlZJQ0VJRDoKICAgIGZvciBteSAkU2VydmljZUlEICgga2V5cyAlU2VydmljZUNJUmVsYXRpb24gKSB7CgogICAgICAgICMgc2V0IGRlZmF1bHQgaW5jaWRlbnQgc3RhdGUgdHlwZQogICAgICAgIG15ICRDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcyA9ICdvcGVyYXRpb25hbCc7CgogICAgICAgICMgaW52ZXN0aWdhdGUgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgb2YgZWFjaCBjb25maWcgaXRlbQogICAgICAgIENPTkZJR0lURU1JRDoKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIEB7ICRTZXJ2aWNlQ0lSZWxhdGlvbnskU2VydmljZUlEfSB9ICkgewoKICAgICAgICAgICAgIyBnZXQgY29uZmlnIGl0ZW0gZGF0YQogICAgICAgICAgICBteSAkQ29uZmlnSXRlbURhdGEgPSAkU2VsZi0+Q29uZmlnSXRlbUdldCgKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgQ2FjaGUgICAgICAgID0+IDAsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAkQ29uZmlnSXRlbURhdGEtPntDdXJEZXBsU3RhdGVUeXBlfSBuZSAncHJvZHVjdGl2ZSc7CiAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmICRDb25maWdJdGVtRGF0YS0+e0N1ckluY2lTdGF0ZVR5cGV9IGVxICdvcGVyYXRpb25hbCc7CgogICAgICAgICAgICAjIGNoZWNrIGlmIHNlcnZpY2UgbXVzdCBiZSBzZXQgdG8gJ3dhcm5pbmcnCiAgICAgICAgICAgIGlmICggJENvbmZpZ0l0ZW1EYXRhLT57Q3VySW5jaVN0YXRlVHlwZX0gZXEgJ3dhcm5pbmcnICkgewogICAgICAgICAgICAgICAgJEN1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzID0gJ3dhcm5pbmcnOwogICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgaWYgc2VydmljZSBtdXN0IGJlIHNldCB0byAnaW5jaWRlbnQnCiAgICAgICAgICAgIGlmICggJENvbmZpZ0l0ZW1EYXRhLT57Q3VySW5jaVN0YXRlVHlwZX0gZXEgJ2luY2lkZW50JyApIHsKICAgICAgICAgICAgICAgICRDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcyA9ICdpbmNpZGVudCc7CiAgICAgICAgICAgICAgICBsYXN0IENPTkZJR0lURU1JRDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgdHlwZSBmcm9tIENJcyBvZiB0aGUgc2VydmljZQogICAgICAgICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VQcmVmZXJlbmNlc1NldCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgIEtleSAgICAgICA9PiAnQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMnLAogICAgICAgICAgICBWYWx1ZSAgICAgPT4gJEN1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzLAogICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb25maWdJdGVtTG9va3VwKCkKClRoaXMgbWV0aG9kIGRvZXMgYSBsb29rdXAgZm9yIGEgY29uZmlnaXRlbS4gSWYgYSBjb25maWdpdGVtIGlkIGlzIGdpdmVuLAppdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGNvbmZpZ2l0ZW0uIElmIGEgY29uZmlnaXRlbSBudW1iZXIgaXMgZ2l2ZW4sCnRoZSBhcHByb3ByaWF0ZSBpZCBpcyByZXR1cm5lZC4KCiAgICBteSAkTnVtYmVyID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1Mb29rdXAoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+IDEyMzQsCiAgICApOwoKICAgIG15ICRJRCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtTG9va3VwKAogICAgICAgIENvbmZpZ0l0ZW1OdW1iZXIgPT4gMTAwMDAwMSwKICAgICk7Cgo9Y3V0CgpzdWIgQ29uZmlnSXRlbUxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICgkS2V5KSA9IGdyZXAgeyAkUGFyYW17JF99IH0gcXcoQ29uZmlnSXRlbUlEIENvbmZpZ0l0ZW1OdW1iZXIpOwoKICAgICMgY2hlY2sgZm9yIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJEtleSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ29uZmlnSXRlbUlEIG9yIENvbmZpZ0l0ZW1OdW1iZXIhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGlmIHJlc3VsdCBpcyBjYWNoZWQgcmV0dXJuIHRoYXQgcmVzdWx0CiAgICByZXR1cm4gJFNlbGYtPntDYWNoZX0tPntDb25maWdJdGVtTG9va3VwfS0+eyRLZXl9LT57ICRQYXJhbXskS2V5fSB9CiAgICAgICAgaWYgJFNlbGYtPntDYWNoZX0tPntDb25maWdJdGVtTG9va3VwfS0+eyRLZXl9LT57ICRQYXJhbXskS2V5fSB9OwoKICAgICMgc2V0IHRoZSBhcHByb3ByaWF0ZSBTUUwgc3RhdGVtZW50CiAgICBteSAkU1FMID0gJ1NFTEVDVCBjb25maWdpdGVtX251bWJlciBGUk9NIGNvbmZpZ2l0ZW0gV0hFUkUgaWQgPSA/JzsKCiAgICBpZiAoICRLZXkgZXEgJ0NvbmZpZ0l0ZW1OdW1iZXInICkgewogICAgICAgICRTUUwgPSAnU0VMRUNUIGlkIEZST00gY29uZmlnaXRlbSBXSEVSRSBjb25maWdpdGVtX251bWJlciA9ID8nOwogICAgfQoKICAgICMgZmV0Y2ggdGhlIHJlcXVlc3RlZCB2YWx1ZQogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAkU1FMLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXskS2V5fSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgIG15ICRWYWx1ZTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFZhbHVlID0gJFJvd1swXTsKICAgIH0KCiAgICAkU2VsZi0+e0NhY2hlfS0+e0NvbmZpZ0l0ZW1Mb29rdXB9LT57JEtleX0tPnsgJFBhcmFteyRLZXl9IH0gPSAkVmFsdWU7CgogICAgcmV0dXJuICRWYWx1ZTsKfQoKPWl0ZW0gVW5pcXVlTmFtZUNoZWNrKCkKClRoaXMgbWV0aG9kIGNoZWNrcyBhbGwgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMsIHdoZXRoZXIgdGhlIGdpdmVuIG5hbWUgZG9lcyBhbHJlYWR5IGV4aXN0CndpdGhpbiB0aGUgc2FtZSBjb25maWcgaXRlbSBjbGFzcyBvciBhbW9uZ3N0IGFsbCBjbGFzc2VzLCBkZXBlbmRpbmcgb24gdGhlIFN5c0NvbmZpZyB2YWx1ZSBvZgpVbmlxdWVDSU5hbWU6OlVuaXF1ZW5lc3NDaGVja1Njb3BlIChDbGFzcyBvciBHbG9iYWwpLgoKVGhpcyBtZXRob2QgcmVxdWlyZXMgMyBwYXJhbWV0ZXJzOiBDb25maWdJdGVtSUQsIE5hbWUgYW5kIENsYXNzCiJDb25maWdJdGVtSUQiICBpcyB0aGUgSUQgb2YgdGhlIENvbmZpZ0l0ZW0sIHdoaWNoIGlzIHRvIGJlIGNoZWNrZWQgZm9yIHVuaXF1ZW5lc3MKIk5hbWUiICAgICAgICAgIGlzIHRoZSBjb25maWcgaXRlbSBuYW1lIHRvIGJlIGNoZWNrZWQgZm9yIHVuaXF1ZW5lc3MKIkNsYXNzSUQiICAgICAgIGlzIHRoZSBJRCBvZiB0aGUgY29uZmlnIGl0ZW0ncyBjbGFzcwoKQWxsIHBhcmFtZXRlcnMgYXJlIG1hbmRhdG9yeS4KCm15ICREdXBsaWNhdGVOYW1lcyA9ICRDb25maWdJdGVtT2JqZWN0LT5VbmlxdWVOYW1lQ2hlY2soCiAgICBDb25maWdJdGVtSUQgPT4gJzczJwogICAgTmFtZSAgICAgICAgID0+ICdQQyMwMDUnLAogICAgQ2xhc3NJRCAgICAgID0+ICczMicsCik7CgpUaGUgZ2l2ZW4gbmFtZSBpcyBub3QgdW5pcXVlCm15ICROYW1lRHVwbGljYXRlcyA9IFsgNSwgMzUsIDQ4LCBdOyAgICAjIElEcyBvZiBDb25maWdJdGVtcyB3aXRoIHRoZSBzYW1lIG5hbWUKClRoZSBnaXZlbiBuYW1lIGlzIHVuaXF1ZQpteSAkTmFtZUR1cGxpY2F0ZXMgPSBbXTsKCj1jdXQKCnN1YiBVbmlxdWVOYW1lQ2hlY2sgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIGZvciBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhDb25maWdJdGVtSUQgTmFtZSBDbGFzc0lEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk1pc3NpbmcgcGFyYW1ldGVyICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIENvbmZpZ0l0ZW1JRCBwYXJhbSBmb3IgdmFsaWQgZm9ybWF0CiAgICBpZiAoCiAgICAgICAgIUlzSW50ZWdlciggJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKQogICAgICAgICYmICggSXNTdHJpbmdXaXRoRGF0YSggJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSAmJiAkUGFyYW17Q29uZmlnSXRlbUlEfSBuZSAnTkVXJyApCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIENvbmZpZ0l0ZW1JRCBwYXJhbWV0ZXIgbmVlZHMgdG8gYmUgYW4gaW50ZWdlciBvciAnTkVXJyIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBOYW1lIHBhcmFtIGZvciB2YWxpZCBmb3JtYXQKICAgIGlmICggIUlzU3RyaW5nV2l0aERhdGEoICRQYXJhbXtOYW1lfSApICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIE5hbWUgcGFyYW1ldGVyIG5lZWRzIHRvIGJlIGEgc3RyaW5nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBDbGFzc0lEIHBhcmFtIGZvciB2YWxpZCBmb3JtYXQKICAgIGlmICggIUlzSW50ZWdlciggJFBhcmFte0NsYXNzSUR9ICkgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgQ2xhc3NJRCBwYXJhbWV0ZXIgbmVlZHMgdG8gYmUgYW4gaW50ZWdlciIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgKTsKCiAgICAjIGNoZWNrIGNsYXNzIGxpc3QgZm9yIHZhbGlkaXR5CiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkQ2xhc3NMaXN0KSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlVuYWJsZSB0byByZXRyaWV2ZSBhIHZhbGlkIGNsYXNzIGxpc3QhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCB0aGUgY2xhc3MgbmFtZSBmcm9tIHRoZSBjbGFzcyBsaXN0CiAgICBteSAkQ2xhc3MgPSAkQ2xhc3NMaXN0LT57ICRQYXJhbXtDbGFzc0lEfSB9OwoKICAgICMgY2hlY2sgY2xhc3MgZm9yIHZhbGlkaXR5CiAgICBpZiAoICFJc1N0cmluZ1dpdGhEYXRhKCRDbGFzcykgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJVbmFibGUgdG8gZGV0ZXJtaW5lIGEgY29uZmlnIGl0ZW0gY2xhc3MgdXNpbmcgdGhlIGdpdmVuIENsYXNzSUQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGVsc2lmICggJFNlbGYtPntDb25maWdPYmplY3R9LT57RGVidWd9ID4gMCApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlJlc29sdmVkIENsYXNzSUQgJFBhcmFte0NsYXNzSUR9IHRvIGNsYXNzICRDbGFzcyIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB0aGUgdW5pcXVlbmVzcyBzY29wZSBmcm9tIFN5c0NvbmZpZwogICAgbXkgJFNjb3BlID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1VuaXF1ZUNJTmFtZTo6VW5pcXVlbmVzc0NoZWNrU2NvcGUnKTsKCiAgICAjIGNoZWNrIHNjb3BlIGZvciB2YWxpZGl0eQogICAgaWYgKCAhSXNTdHJpbmdXaXRoRGF0YSgkU2NvcGUpICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIGNvbmZpZ3VyYXRpb24gb2YgVW5pcXVlQ0lOYW1lOjpVbmlxdWVuZXNzQ2hlY2tTY29wZSBpcyBpbnZhbGlkISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCAkU2NvcGUgbmUgJ2dsb2JhbCcgJiYgJFNjb3BlIG5lICdjbGFzcycgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJVbmlxdWVDSU5hbWU6OlVuaXF1ZW5lc3NDaGVja1Njb3BlIGlzICRTY29wZSwgYnV0IG11c3QgYmUgZWl0aGVyICIKICAgICAgICAgICAgICAgIC4gIidnbG9iYWwnIG9yICdjbGFzcychIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+e0RlYnVnfSA+IDAgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgc2NvcGUgZm9yIGNoZWNraW5nIHRoZSB1bmlxdWVuZXNzIGlzICRTY29wZSIsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAlU2VhcmNoQ3JpdGVyaWE7CgogICAgIyBhZGQgdGhlIGNvbmZpZyBpdGVtIGNsYXNzIHRvIHRoZSBzZWFyY2ggY3JpdGVyaWEgaWYgdGhlIHVuaXF1ZW5lc3Mgc2NvcGUgaXMgbm90IGdsb2JhbAogICAgaWYgKCAkU2NvcGUgbmUgJ2dsb2JhbCcgKSB7CiAgICAgICAgJFNlYXJjaENyaXRlcmlhe0NsYXNzSURzfSA9IFsgJFBhcmFte0NsYXNzSUR9IF07CiAgICB9CgogICAgJFNlYXJjaENyaXRlcmlhe05hbWV9ID0gJFBhcmFte05hbWV9OwoKICAgICMgc2VhcmNoIGZvciBhIGNvbmZpZyBpdGVtIG1hdGNoaW5nIHRoZSBnaXZlbiBuYW1lCiAgICBteSAkQ29uZmlnSXRlbSA9ICRTZWxmLT5Db25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoJVNlYXJjaENyaXRlcmlhKTsKCiAgICAjIHJlbW92ZSB0aGUgcHJvdmlkZWQgQ29uZmlnSXRlbUlEIGZyb20gdGhlIHJlc3VsdHMsIG90aGVyd2lzZSB0aGUgZHVwbGljYXRlIGNoZWNrIHdvdWxkIGZhaWwKICAgICMgYmVjYXVzZSB0aGUgQ29uZmlnSXRlbSBpdHNlbGYgaXMgZm91bmQgYXMgZHVwbGljYXRlCiAgICBteSBARHVwbGljYXRlcyA9IG1hcCB7JF99IGdyZXAgeyAkXyBuZSAkUGFyYW17Q29uZmlnSXRlbUlEfSB9IEB7JENvbmZpZ0l0ZW19OwoKICAgICMgaWYgYSBjb25maWcgaXRlbSB3YXMgZm91bmQsIHRoZSBnaXZlbiBuYW1lIGlzIG5vdCB1bmlxdWUKICAgICMgaWYgbm8gY29uZmlnIGl0ZW0gd2FzIGZvdW5kLCB0aGUgZ2l2ZW4gbmFtZSBpcyB1bmlxdWUKCiAgICAjIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZm9yIGR1cGxpY2F0ZXMKICAgIHJldHVybiBcQER1cGxpY2F0ZXM7Cn0KCj1iZWdpbiBJbnRlcm5hbDoKCj1pdGVtIF9GaW5kSW5jaUNvbmZpZ0l0ZW1zKCkKCmZpbmQgYWxsIGNvbmZpZyBpdGVtcyB3aXRoIGFuIGluY2lkZW50IHN0YXRlCgogICAgJENvbmZpZ0l0ZW1PYmplY3QtPl9GaW5kSW5jaUNvbmZpZ0l0ZW1zKAogICAgICAgIENvbmZpZ0l0ZW1JRCAgICAgICAgID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgTGlua1R5cGUgICAgICAgICAgICAgPT4gJExpbmtUeXBlLAogICAgICAgIFNjYW5uZWRDb25maWdJdGVtSURzID0+IFwlU2Nhbm5lZENvbmZpZ0l0ZW1JRHMsCiAgICApOwoKPWN1dAoKc3ViIF9GaW5kSW5jaUNvbmZpZ0l0ZW1zIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIHJldHVybiBpZiAhJFBhcmFte0NvbmZpZ0l0ZW1JRH07CgogICAgIyBpZ25vcmUgYWxyZWFkeSBzY2FubmVkIGlkcyAoaW5maW5pdGUgbG9vcCBwcm90ZWN0aW9uKQogICAgcmV0dXJuIGlmICRQYXJhbXtTY2FubmVkQ29uZmlnSXRlbUlEc30tPnsgJFBhcmFte0NvbmZpZ0l0ZW1JRH0gfTsKCiAgICAkUGFyYW17U2Nhbm5lZENvbmZpZ0l0ZW1JRHN9LT57ICRQYXJhbXtDb25maWdJdGVtSUR9IH0tPntUeXBlfSA9ICdvcGVyYXRpb25hbCc7CgogICAgIyBmaW5kIGFsbCBsaW5rZWQgY29uZmlnIGl0ZW1zIChjaGlsZHMpCiAgICBteSAlTGlua2VkQ29uZmlnSXRlbUlEcyA9ICRTZWxmLT57TGlua09iamVjdH0tPkxpbmtLZXlMaXN0KAogICAgICAgIE9iamVjdDEgICA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgIEtleTEgICAgICA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICBPYmplY3QyICAgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICBTdGF0ZSAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBUeXBlICAgICAgPT4gJFBhcmFte0xpbmtUeXBlfSwKICAgICAgICBEaXJlY3Rpb24gPT4gJ0JvdGgnLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICAjIGFkZCBvd24gY29uZmlnIGl0ZW0gaWQgdG8gbGlzdCBvZiBsaW5rZWQgY29uZmlnIGl0ZW1zCiAgICBteSBAQ29uZmlnSXRlbUlEcyA9ICggJFBhcmFte0NvbmZpZ0l0ZW1JRH0sIGtleXMgJUxpbmtlZENvbmZpZ0l0ZW1JRHMgKTsKCiAgICBDT05GSUdJVEVNSUQ6CiAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoQENvbmZpZ0l0ZW1JRHMpIHsKCiAgICAgICAgIyBnZXQgY29uZmlnIGl0ZW0gZGF0YQogICAgICAgIG15ICRDb25maWdJdGVtID0gJFNlbGYtPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBDYWNoZSAgICAgICAgPT4gMCwKICAgICAgICApOwoKICAgICAgICAjIHNldCBpbmNpZGVudCBzdGF0ZQogICAgICAgIGlmICggJENvbmZpZ0l0ZW0tPntDdXJJbmNpU3RhdGVUeXBlfSBlcSAnaW5jaWRlbnQnICkgewogICAgICAgICAgICAkUGFyYW17U2Nhbm5lZENvbmZpZ0l0ZW1JRHN9LT57JENvbmZpZ0l0ZW1JRH0tPntUeXBlfSA9ICdpbmNpZGVudCc7CiAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEOwogICAgICAgIH0KCiAgICAgICAgIyBzdGFydCByZWN1cnNpb24KICAgICAgICAkU2VsZi0+X0ZpbmRJbmNpQ29uZmlnSXRlbXMoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCAgICAgICAgID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIExpbmtUeXBlICAgICAgICAgICAgID0+ICRQYXJhbXtMaW5rVHlwZX0sCiAgICAgICAgICAgIFNjYW5uZWRDb25maWdJdGVtSURzID0+ICRQYXJhbXtTY2FubmVkQ29uZmlnSXRlbUlEc30sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0ZpbmRXYXJuQ29uZmlnSXRlbXMoKQoKZmluZCBhbGwgY29uZmlnIGl0ZW1zIHdpdGggYSB3YXJuaW5nCgogICAgJENvbmZpZ0l0ZW1PYmplY3QtPl9GaW5kV2FybkNvbmZpZ0l0ZW1zKAogICAgICAgIENvbmZpZ0l0ZW1JRCAgICAgICAgID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgTGlua1R5cGUgICAgICAgICAgICAgPT4gJExpbmtUeXBlLAogICAgICAgIFNjYW5uZWRDb25maWdJdGVtSURzID0+ICRTY2FubmVkQ29uZmlnSXRlbUlEcywKICAgICk7Cgo9Y3V0CgpzdWIgX0ZpbmRXYXJuQ29uZmlnSXRlbXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17Q29uZmlnSXRlbUlEfTsKCiAgICAjIGlnbm9yZSBhbHJlYWR5IHNjYW5uZWQgaWRzIChpbmZpbml0ZSBsb29wIHByb3RlY3Rpb24pCiAgICByZXR1cm4gaWYgJFBhcmFte1NjYW5uZWRDb25maWdJdGVtSURzfS0+eyAkUGFyYW17Q29uZmlnSXRlbUlEfSB9LT57RmluZFdhcm59OwogICAgJFBhcmFte1NjYW5uZWRDb25maWdJdGVtSURzfS0+eyAkUGFyYW17Q29uZmlnSXRlbUlEfSB9LT57RmluZFdhcm59ID0gMTsKCiAgICAjIGZpbmQgYWxsIGxpbmtlZCBjb25maWcgaXRlbXMgKHBhcmVudHMpCiAgICBteSAlTGlua2VkQ29uZmlnSXRlbUlEcyA9ICRTZWxmLT57TGlua09iamVjdH0tPkxpbmtLZXlMaXN0KAogICAgICAgIE9iamVjdDEgICA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgIEtleTEgICAgICA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICBPYmplY3QyICAgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICBTdGF0ZSAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBUeXBlICAgICAgPT4gJFBhcmFte0xpbmtUeXBlfSwKICAgICAgICBEaXJlY3Rpb24gPT4gJ0JvdGgnLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICBDT05GSUdJVEVNSUQ6CiAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIGtleXMgJUxpbmtlZENvbmZpZ0l0ZW1JRHMgKSB7CgogICAgICAgICMgc3RhcnQgcmVjdXJzaW9uCiAgICAgICAgJFNlbGYtPl9GaW5kV2FybkNvbmZpZ0l0ZW1zKAogICAgICAgICAgICBDb25maWdJdGVtSUQgICAgICAgICA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBMaW5rVHlwZSAgICAgICAgICAgICA9PiAkUGFyYW17TGlua1R5cGV9LAogICAgICAgICAgICBTY2FubmVkQ29uZmlnSXRlbUlEcyA9PiAkUGFyYW17U2Nhbm5lZENvbmZpZ0l0ZW1JRHN9LAogICAgICAgICk7CgogICAgICAgIG5leHQgQ09ORklHSVRFTUlECiAgICAgICAgICAgIGlmICRQYXJhbXtTY2FubmVkQ29uZmlnSXRlbUlEc30tPnskQ29uZmlnSXRlbUlEfS0+e1R5cGV9CiAgICAgICAgICAgICYmICRQYXJhbXtTY2FubmVkQ29uZmlnSXRlbUlEc30tPnskQ29uZmlnSXRlbUlEfS0+e1R5cGV9IGVxICdpbmNpZGVudCc7CgogICAgICAgICMgc2V0IHdhcm5pbmcgc3RhdGUKICAgICAgICAkUGFyYW17U2Nhbm5lZENvbmZpZ0l0ZW1JRHN9LT57JENvbmZpZ0l0ZW1JRH0tPntUeXBlfSA9ICd3YXJuaW5nJzsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX1ByZXBhcmVMaWtlU3RyaW5nKCkKCmludGVybmFsIGZ1bmN0aW9uIHRvIHByZXBhcmUgbGlrZSBzdHJpbmdzCgogICAgJENvbmZpZ0l0ZW1PYmplY3QtPl9QcmVwYXJlTGlrZVN0cmluZyggJFN0cmluZ1JlZiApOwoKPWN1dAoKc3ViIF9QcmVwYXJlTGlrZVN0cmluZyB7CiAgICBteSAoICRTZWxmLCAkVmFsdWUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAhJFZhbHVlOwogICAgcmV0dXJuIGlmIHJlZiAkVmFsdWUgbmUgJ1NDQUxBUic7CgogICAgIyBRdW90ZQogICAgJHskVmFsdWV9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkeyRWYWx1ZX0sICdMaWtlJyApOwoKICAgICMgcmVwbGFjZSAqIHdpdGggJQogICAgJHskVmFsdWV9ID1+IHN7IFwqKyB9eyV9eG1zZzsKCiAgICByZXR1cm47Cn0KCjE7Cgo9ZW5kIEludGVybmFsOgoKPWJhY2sKCj1oZWFkMSBJVFNNIENvbmZpZyBJdGVtIGV2ZW50czoKCkNvbmZpZ0l0ZW1DcmVhdGUsIFZlcnNpb25DcmVhdGUsIERlcGxveW1lbnRTdGF0ZVVwZGF0ZSwgSW5jaWRlbnRTdGF0ZVVwZGF0ZSwKQ29uZmlnSXRlbURlbGV0ZSwgTGlua0FkZCwgTGlua0RlbGV0ZSwgRGVmaW5pdGlvblVwZGF0ZSwgTmFtZVVwZGF0ZSwgVmFsdWVVcGRhdGUKRGVmaW5pdGlvbkNyZWF0ZSwgVmVyc2lvbkRlbGV0ZQoKPWN1dAoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoaHR0cDovL290cnMub3JnLykuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vRGVmaW5pdGlvbi5wbSAtIHN1YiBtb2R1bGUgb2YgSVRTTUNvbmZpZ0l0ZW0ucG0gd2l0aCBkZWZpbml0aW9uIGZ1bmN0aW9ucwojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpEZWZpbml0aW9uOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6RGVmaW5pdGlvbiAtIHN1YiBtb2R1bGUgb2YgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBkZWZpbml0aW9uIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBEZWZpbml0aW9uTGlzdCgpCgpyZXR1cm4gYSBjb25maWcgaXRlbSBkZWZpbml0aW9uIGxpc3QgYXMgYXJyYXloYXNoIHJlZmVyZW5jZQoKICAgIG15ICREZWZpbml0aW9uTGlzdFJlZiA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uTGlzdCgKICAgICAgICBDbGFzc0lEID0+IDEyMywKICAgICk7CgpyZXR1cm5zCgogICAgbXkgJERlZmluaXRpb25MaXN0UmVmID0gWwogICAgICAgICAgewogICAgICAgICAgICAnVmVyc2lvbicgICAgICA9PiAnMScsCiAgICAgICAgICAgICdDcmVhdGVUaW1lJyAgID0+ICcyMDEyLTA2LTEyIDE0OjA5OjQzJywKICAgICAgICAgICAgJ0RlZmluaXRpb25JRCcgPT4gJzEnLAogICAgICAgICAgICAnQ3JlYXRlQnknICAgICA9PiAnMTIzJywKICAgICAgICAgICAgJ0RlZmluaXRpb24nICAgPT4gJ1sKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gXCdWZW5kb3JcJywKICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFwnVmVuZG9yXCcsCiAgICAgICAgICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiBcJ1RleHRcJywKICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZSA9PiA1MCwKICAgICAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDUwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiBcJ0Rlc2NyaXB0aW9uXCcsCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBcJ0Rlc2NyaXB0aW9uXCcsCiAgICAgICAgICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiBcJ1RleHRBcmVhXCcsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+IFwnVHlwZVwnLAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gXCdUeXBlXCcsCiAgICAgICAgICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiBcJ0dlbmVyYWxDYXRhbG9nXCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzID0+IFwnSVRTTTo6Q29uZmlnSXRlbTo6Q29tcHV0ZXI6OlR5cGVcJywKICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIC4uLiBldGMgLi4uCiAgICAgICAgICAgIF07JywKICAgICAgICAgIH0KICAgICAgICBdOwoKPWN1dAoKc3ViIERlZmluaXRpb25MaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDbGFzc0lEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ2xhc3NJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgY29uZmlnaXRlbV9kZWZpbml0aW9uLCB2ZXJzaW9uLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5ICcKICAgICAgICAgICAgLiAnRlJPTSBjb25maWdpdGVtX2RlZmluaXRpb24gV0hFUkUgY2xhc3NfaWQgPSA/IE9SREVSIEJZIHZlcnNpb24nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NsYXNzSUR9IF0sCiAgICApOwoKICAgIG15IEBEZWZpbml0aW9uTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJURlZmluaXRpb247CiAgICAgICAgJERlZmluaXRpb257RGVmaW5pdGlvbklEfSA9ICRSb3dbMF07CiAgICAgICAgJERlZmluaXRpb257RGVmaW5pdGlvbn0gICA9ICRSb3dbMV07CiAgICAgICAgJERlZmluaXRpb257VmVyc2lvbn0gICAgICA9ICRSb3dbMl07CiAgICAgICAgJERlZmluaXRpb257Q3JlYXRlVGltZX0gICA9ICRSb3dbM107CiAgICAgICAgJERlZmluaXRpb257Q3JlYXRlQnl9ICAgICA9ICRSb3dbNF07CgogICAgICAgIHB1c2ggQERlZmluaXRpb25MaXN0LCBcJURlZmluaXRpb247CiAgICB9CgogICAgcmV0dXJuIFxARGVmaW5pdGlvbkxpc3Q7Cn0KCj1pdGVtIERlZmluaXRpb25HZXQoKQoKcmV0dXJuIGEgY29uZmlnIGl0ZW0gZGVmaW5pdGlvbiBhcyBoYXNoIHJlZmVyZW5jZQoKUmV0dXJuCiAgICAkRGVmaW5pdGlvbi0+e0RlZmluaXRpb25JRH0KICAgICREZWZpbml0aW9uLT57Q2xhc3NJRH0KICAgICREZWZpbml0aW9uLT57Q2xhc3N9CiAgICAkRGVmaW5pdGlvbi0+e0RlZmluaXRpb259CiAgICAkRGVmaW5pdGlvbi0+e0RlZmluaXRpb25SZWZ9CiAgICAkRGVmaW5pdGlvbi0+e1ZlcnNpb259CiAgICAkRGVmaW5pdGlvbi0+e0NyZWF0ZVRpbWV9CiAgICAkRGVmaW5pdGlvbi0+e0NyZWF0ZUJ5fQoKICAgIG15ICREZWZpbml0aW9uUmVmID0gJENvbmZpZ0l0ZW1PYmplY3QtPkRlZmluaXRpb25HZXQoCiAgICAgICAgRGVmaW5pdGlvbklEID0+IDEyMywKICAgICk7CgogICAgb3IKCiAgICBteSAkRGVmaW5pdGlvblJlZiA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uR2V0KAogICAgICAgIENsYXNzSUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBEZWZpbml0aW9uR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtEZWZpbml0aW9uSUR9ICYmICEkUGFyYW17Q2xhc3NJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIERlZmluaXRpb25JRCBvciBDbGFzc0lEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVmaW5pdGlvbklEfSApIHsKCiAgICAgICAgIyBjaGVjayBpZiByZXN1bHQgaXMgYWxyZWFkeSBjYWNoZWQKICAgICAgICByZXR1cm4gJFNlbGYtPntDYWNoZX0tPntEZWZpbml0aW9uR2V0fS0+eyAkUGFyYW17RGVmaW5pdGlvbklEfSB9CiAgICAgICAgICAgIGlmICRTZWxmLT57Q2FjaGV9LT57RGVmaW5pdGlvbkdldH0tPnsgJFBhcmFte0RlZmluaXRpb25JRH0gfTsKCiAgICAgICAgIyBhc2sgZGF0YWJhc2UKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIGNsYXNzX2lkLCBjb25maWdpdGVtX2RlZmluaXRpb24sIHZlcnNpb24sIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnkgJwogICAgICAgICAgICAgICAgLiAnRlJPTSBjb25maWdpdGVtX2RlZmluaXRpb24gV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0RlZmluaXRpb25JRH0gXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgYXNrIGRhdGFiYXNlCiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBjbGFzc19pZCwgY29uZmlnaXRlbV9kZWZpbml0aW9uLCB2ZXJzaW9uLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5ICcKICAgICAgICAgICAgICAgIC4gJ0ZST00gY29uZmlnaXRlbV9kZWZpbml0aW9uICcKICAgICAgICAgICAgICAgIC4gJ1dIRVJFIGNsYXNzX2lkID0gPyBPUkRFUiBCWSB2ZXJzaW9uIERFU0MnLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17Q2xhc3NJRH0gXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJURlZmluaXRpb247CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICREZWZpbml0aW9ue0RlZmluaXRpb25JRH0gPSAkUm93WzBdOwogICAgICAgICREZWZpbml0aW9ue0NsYXNzSUR9ICAgICAgPSAkUm93WzFdOwogICAgICAgICREZWZpbml0aW9ue0RlZmluaXRpb259ICAgPSAkUm93WzJdOwogICAgICAgICREZWZpbml0aW9ue1ZlcnNpb259ICAgICAgPSAkUm93WzNdOwogICAgICAgICREZWZpbml0aW9ue0NyZWF0ZVRpbWV9ICAgPSAkUm93WzRdOwogICAgICAgICREZWZpbml0aW9ue0NyZWF0ZUJ5fSAgICAgPSAkUm93WzVdOwoKICAgICAgICAkRGVmaW5pdGlvbntEZWZpbml0aW9uUmVmfSA9IGV2YWwgJERlZmluaXRpb257RGVmaW5pdGlvbn07CiAgICB9CgogICAgcmV0dXJuIHt9IGlmICEkRGVmaW5pdGlvbntEZWZpbml0aW9uSUR9OwoKICAgICMgcHJlcGFyZSBkZWZpbml0aW9uCiAgICBpZiAoICREZWZpbml0aW9ue0RlZmluaXRpb25SZWZ9ICYmIHJlZiAkRGVmaW5pdGlvbntEZWZpbml0aW9uUmVmfSBlcSAnQVJSQVknICkgewogICAgICAgICRTZWxmLT5fRGVmaW5pdGlvblByZXBhcmUoCiAgICAgICAgICAgIERlZmluaXRpb25SZWYgPT4gJERlZmluaXRpb257RGVmaW5pdGlvblJlZn0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICREZWZpbml0aW9ue0RlZmluaXRpb25SZWZ9ID0gJyc7CiAgICB9CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgKTsKCiAgICAjIGFkZCBjbGFzcwogICAgJERlZmluaXRpb257Q2xhc3N9ID0gJENsYXNzTGlzdC0+eyAkRGVmaW5pdGlvbntDbGFzc0lEfSB9OwoKICAgICMgY2FjaGUgdGhlIHJlc3VsdAogICAgJFNlbGYtPntDYWNoZX0tPntEZWZpbml0aW9uR2V0fS0+eyAkRGVmaW5pdGlvbntEZWZpbml0aW9uSUR9IH0gPSBcJURlZmluaXRpb247CgogICAgcmV0dXJuIFwlRGVmaW5pdGlvbjsKfQoKPWl0ZW0gRGVmaW5pdGlvbkFkZCgpCgphZGQgYSBuZXcgZGVmaW5pdGlvbgoKICAgIG15ICREZWZpbml0aW9uSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+RGVmaW5pdGlvbkFkZCgKICAgICAgICBDbGFzc0lEICAgID0+IDEyMywKICAgICAgICBEZWZpbml0aW9uID0+ICd0aGUgZGVmaW5pdGlvbiBjb2RlJywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIERlZmluaXRpb25BZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2xhc3NJRCBEZWZpbml0aW9uIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBkZWZpbml0aW9uCiAgICBteSAkQ2hlY2sgPSAkU2VsZi0+RGVmaW5pdGlvbkNoZWNrKAogICAgICAgIERlZmluaXRpb24gPT4gJFBhcmFte0RlZmluaXRpb259LAogICAgKTsKCiAgICByZXR1cm4gaWYgISRDaGVjazsKCiAgICAjIGdldCBsYXN0IGRlZmluaXRpb24KICAgIG15ICRMYXN0RGVmaW5pdGlvbiA9ICRTZWxmLT5EZWZpbml0aW9uR2V0KAogICAgICAgIENsYXNzSUQgPT4gJFBhcmFte0NsYXNzSUR9LAogICAgKTsKCiAgICAjIHN0b3AgYWRkLCBpZiBkZWZpbml0aW9uIHdhcyBub3QgY2hhbmdlZAogICAgaWYgKCAkTGFzdERlZmluaXRpb24tPntEZWZpbml0aW9uSUR9ICYmICRMYXN0RGVmaW5pdGlvbi0+e0RlZmluaXRpb259IGVxICRQYXJhbXtEZWZpbml0aW9ufSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGFkZCBuZXcgZGVmaW5pdGlvbiEgVGhlIGRlZmluaXRpb24gd2FzIG5vdCBjaGFuZ2VkLiIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgdmVyc2lvbgogICAgbXkgJFZlcnNpb24gPSAxOwogICAgaWYgKCAkTGFzdERlZmluaXRpb24tPntWZXJzaW9ufSApIHsKICAgICAgICAkVmVyc2lvbiA9ICRMYXN0RGVmaW5pdGlvbi0+e1ZlcnNpb259OwogICAgICAgICRWZXJzaW9uKys7CiAgICB9CgogICAgIyBpbnNlcnQgbmV3IGRlZmluaXRpb24KICAgIG15ICRTdWNjZXNzID0gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gY29uZmlnaXRlbV9kZWZpbml0aW9uICcKICAgICAgICAgICAgLiAnKGNsYXNzX2lkLCBjb25maWdpdGVtX2RlZmluaXRpb24sIHZlcnNpb24sIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnkpIFZBTFVFUyAnCiAgICAgICAgICAgIC4gJyg/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyknLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NsYXNzSUR9LCBcJFBhcmFte0RlZmluaXRpb259LCBcJFZlcnNpb24sIFwkUGFyYW17VXNlcklEfSBdLAogICAgKTsKCiAgICByZXR1cm4gaWYgISRTdWNjZXNzOwoKICAgICMgZ2V0IGlkIG9mIG5ldyBkZWZpbml0aW9uCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCBGUk9NIGNvbmZpZ2l0ZW1fZGVmaW5pdGlvbiBXSEVSRSAnCiAgICAgICAgICAgIC4gJ2NsYXNzX2lkID0gPyBBTkQgdmVyc2lvbiA9ID8gJwogICAgICAgICAgICAuICdPUkRFUiBCWSB2ZXJzaW9uIERFU0MnLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NsYXNzSUR9LCBcJFZlcnNpb24gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICREZWZpbml0aW9uSUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICREZWZpbml0aW9uSUQgPSAkUm93WzBdOwogICAgfQoKICAgICMgdHJpZ2dlciBEZWZpbml0aW9uQ3JlYXRlIGV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdEZWZpbml0aW9uQ3JlYXRlJywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgIENvbW1lbnQgPT4gJERlZmluaXRpb25JRCwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuICREZWZpbml0aW9uSUQ7Cn0KCj1pdGVtIERlZmluaXRpb25DaGVjaygpCgpjaGVjayB0aGUgc3ludGF4IG9mIGEgbmV3IGRlZmluaXRpb24KCiAgICBteSAkVHJ1ZSA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uQ2hlY2soCiAgICAgICAgRGVmaW5pdGlvbiAgICAgID0+ICd0aGUgZGVmaW5pdGlvbiBjb2RlJywKICAgICAgICBDaGVja1N1YkVsZW1lbnQgPT4gMSwgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsLCBkZWZhdWx0IDAsIHRvIGNoZWNrIHN1YiBlbGVtZW50cyByZWN1cnNpdmVseSkKICAgICk7Cgo9Y3V0CgpzdWIgRGVmaW5pdGlvbkNoZWNrIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtEZWZpbml0aW9ufSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgRGVmaW5pdGlvbiEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgaWYgY2hlY2sgc3ViIGVsZW1lbnRzIGlzIGVuYWJsZWQsIHdlIG11c3Qgbm90IGV2YWx1YXRlIHRoZSBleHByZXNzaW9uCiAgICAjIGJlY2F1c2UgdGhpcyBoYXMgYmVlbiBkb25lIGluIGFuIGVhcmxpZXIgcmVjdXJzaW9uIHN0ZXAgYWxyZWFkeQogICAgbXkgJERlZmluaXRpb247CiAgICBpZiAoICRQYXJhbXtDaGVja1N1YkVsZW1lbnR9ICkgewogICAgICAgICREZWZpbml0aW9uID0gJFBhcmFte0RlZmluaXRpb259OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJERlZmluaXRpb24gPSBldmFsICRQYXJhbXtEZWZpbml0aW9ufTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGRlZmluaXRpb24gZXhpc3RzIGF0IGFsbAogICAgaWYgKCAhJERlZmluaXRpb24gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdJbnZhbGlkIERlZmluaXRpb24hIFlvdSBoYXZlIGFuIHN5bnRheCBlcnJvciBpbiB0aGUgZGVmaW5pdGlvbi4nLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZGVmaW5pdGlvbiBtdXN0IGJlIGFuIGFycmF5CiAgICBpZiAoIHJlZiAkRGVmaW5pdGlvbiBuZSAnQVJSQVknICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnSW52YWxpZCBEZWZpbml0aW9uISBEZWZpbml0aW9uIGlzIG5vdCBhbiBhcnJheSByZWZlcmVuY2UuJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGVhY2ggZGVmaW5pdGlvbiBhdHRyaWJ1dGUKICAgIGZvciBteSAkQXR0cmlidXRlICggQHskRGVmaW5pdGlvbn0gKSB7CgogICAgICAgICMgZWFjaCBkZWZpbml0aW9uIGF0dHJpYnV0ZSBtdXN0IGJlIGEgaGFzaCByZWZlcmVuY2Ugd2l0aCBkYXRhCiAgICAgICAgaWYgKCAhJEF0dHJpYnV0ZSB8fCByZWYgJEF0dHJpYnV0ZSBuZSAnSEFTSCcgfHwgISV7JEF0dHJpYnV0ZX0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAnSW52YWxpZCBEZWZpbml0aW9uISBBdCBsZWFzdCBvbmUgZGVmaW5pdGlvbiBhdHRyaWJ1dGUgaXMgbm90IGEgaGFzaCByZWZlcmVuY2UuJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyByZWN1cnNpb24gY2hlY2sgZm9yIFN1Yi1FbGVtZW50cwogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7JEF0dHJpYnV0ZX0gKSB7CgogICAgICAgICAgICBteSAkVmFsdWUgPSAkQXR0cmlidXRlLT57JEtleX07CgogICAgICAgICAgICBpZiAoICRLZXkgZXEgJ1N1YicgJiYgcmVmICRWYWx1ZSBlcSAnQVJSQVknICkgewoKICAgICAgICAgICAgICAgICMgY2hlY2sgdGhlIHN1YiBhcnJheQogICAgICAgICAgICAgICAgbXkgJENoZWNrID0gJFNlbGYtPkRlZmluaXRpb25DaGVjaygKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICAgICAgICAgIENoZWNrU3ViRWxlbWVudCA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoICEkQ2hlY2sgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIFN1Yi1EZWZpbml0aW9uIG9mIGVsZW1lbnQgd2l0aCB0aGUga2V5ICckQXR0cmlidXRlLT57S2V5fScuIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0RlZmluaXRpb25QcmVwYXJlKCkKClByZXBhcmUgdGhlIHN5bnRheCBvZiBhIG5ldyBkZWZpbml0aW9uCgogICAgbXkgJFRydWUgPSAkQ29uZmlnSXRlbU9iamVjdC0+X0RlZmluaXRpb25QcmVwYXJlKAogICAgICAgIERlZmluaXRpb25SZWYgPT4gJEFycmF5UmVmLAogICAgKTsKCj1jdXQKCnN1YiBfRGVmaW5pdGlvblByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIGRlZmluaXRpb24KICAgIGlmICggISRQYXJhbXtEZWZpbml0aW9uUmVmfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgRGVmaW5pdGlvblJlZiEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtEZWZpbml0aW9uUmVmfSB9ICkgewoKICAgICAgICAjIHNldCBDb3VudE1pbgogICAgICAgIGlmICggIWRlZmluZWQgJEl0ZW0tPntDb3VudE1pbn0gKSB7CiAgICAgICAgICAgICRJdGVtLT57Q291bnRNaW59ID0gMTsKICAgICAgICB9CgogICAgICAgICMgc2V0IENvdW50TWF4CiAgICAgICAgJEl0ZW0tPntDb3VudE1heH0gfHw9IDE7CgogICAgICAgICMgc2V0IENvdW50TWluCiAgICAgICAgaWYgKCAkSXRlbS0+e0NvdW50TWlufSA+ICRJdGVtLT57Q291bnRNYXh9ICkgewogICAgICAgICAgICAkSXRlbS0+e0NvdW50TWlufSA9ICRJdGVtLT57Q291bnRNYXh9OwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgQ291bnREZWZhdWx0CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkSXRlbS0+e0NvdW50RGVmYXVsdH0gKSB7CiAgICAgICAgICAgICRJdGVtLT57Q291bnREZWZhdWx0fSA9IDE7CiAgICAgICAgfQogICAgICAgIGlmICggJEl0ZW0tPntDb3VudERlZmF1bHR9IDwgJEl0ZW0tPntDb3VudE1pbn0gKSB7CiAgICAgICAgICAgICRJdGVtLT57Q291bnREZWZhdWx0fSA9ICRJdGVtLT57Q291bnRNaW59OwogICAgICAgIH0KICAgICAgICBpZiAoICRJdGVtLT57Q291bnREZWZhdWx0fSA+ICRJdGVtLT57Q291bnRNYXh9ICkgewogICAgICAgICAgICAkSXRlbS0+e0NvdW50RGVmYXVsdH0gPSAkSXRlbS0+e0NvdW50TWF4fTsKICAgICAgICB9CgogICAgICAgICMgc3RhcnQgcmVjdXJzaW9uLCBpZiAiU3ViIiBpcyBkZWZpbmVkLgogICAgICAgIGlmICggJEl0ZW0tPntTdWJ9ICYmIHJlZiAkSXRlbS0+e1N1Yn0gZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgJFNlbGYtPl9EZWZpbml0aW9uUHJlcGFyZSgKICAgICAgICAgICAgICAgIERlZmluaXRpb25SZWYgPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZGVsZXRlICRJdGVtLT57U3VifTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoaHR0cDovL290cnMub3JnLykuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vSGlzdG9yeS5wbSAtIG1vZHVsZSBmb3IgSVRTTUNvbmZpZ0l0ZW0ucG0gd2l0aCBoaXN0b3J5IGZ1bmN0aW9ucwojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpIaXN0b3J5OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6SGlzdG9yeSAtIG1vZHVsZSBmb3IgSVRTTUNvbmZpZ0l0ZW0ucG0gd2l0aCBoaXN0b3J5IGZ1bmN0aW9ucwoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgaGlzdG9yeSBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gSGlzdG9yeUdldCgpCgpSZXR1cm5zIGFuIGFycmF5IHJlZmVyZW5jZSB3aXRoIGFsbCBoaXN0b3J5IGVudHJpZXMgZm9yIHRoZSBnaXZlbiBjb25maWcgaXRlbS4KRWFjaCBhcnJheSBlbGVtZW50IGlzIGEgaGFzaCByZWZlcmVuY2UgcmVwcmVzZW50aW5nIG9uZSBoaXN0b3J5IGVudHJ5LgoKVGhlc2UgaGFzaCByZWZlcmVuY2VzIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQ6CgogICAgJEluZm97SGlzdG9yeUVudHJ5SUR9CiAgICAkSW5mb3tDb25maWdJdGVtSUR9CiAgICAkSW5mb3tIaXN0b3J5VHlwZX0KICAgICRJbmZve0hpc3RvcnlUeXBlSUR9CiAgICAkSW5mb3tDb21tZW50fQogICAgJEluZm97Q3JlYXRlZEJ5fQogICAgJEluZm97Q3JlYXRlVGltZX0KICAgICRJbmZve1VzZXJJRH0KICAgICRJbmZve1VzZXJMb2dpbn0KICAgICRJbmZve1VzZXJMYXN0bmFtZX0KICAgICRJbmZve1VzZXJGaXJzdG5hbWV9CgogICAgbXkgJEluZm8gPSAkQ29uZmlnSXRlbU9iamVjdC0+SGlzdG9yeUdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzNCwKICAgICk7Cgo9Y3V0CgpzdWIgSGlzdG9yeUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoQ29uZmlnSXRlbUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgaWYgY2FjaGVkIHJlc3VsdCBleGlzdHMsIHJldHVybiB0aGF0IHJlc3VsdAogICAgcmV0dXJuICRTZWxmLT57Q2FjaGV9LT57Q0lWZXJzaW9uc30tPnsgJFBhcmFte0NvbmZpZ0l0ZW1JRH0gfQogICAgICAgIGlmICRTZWxmLT57Q2FjaGV9LT57Q0lWZXJzaW9uc30tPnsgJFBhcmFte0NvbmZpZ0l0ZW1JRH0gfTsKCiAgICAjIGZldGNoIHNvbWUgZGF0YSBmcm9tIGhpc3RvcnkgZm9yIGdpdmVuIGNvbmZpZyBpdGVtCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGNoLmlkLCBjaC5jb25maWdpdGVtX2lkLCBjaC5jb250ZW50LCBjaC50eXBlX2lkLCAnCiAgICAgICAgICAgIC4gJ2NoLmNyZWF0ZV9ieSwgY2guY3JlYXRlX3RpbWUsIGNodC5uYW1lICcKICAgICAgICAgICAgLiAnRlJPTSBjb25maWdpdGVtX2hpc3RvcnkgY2gsIGNvbmZpZ2l0ZW1faGlzdG9yeV90eXBlIGNodCAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGNoLnR5cGVfaWQgPSBjaHQuaWQgQU5EIGNoLmNvbmZpZ2l0ZW1faWQgPSA/ICcKICAgICAgICAgICAgLiAnT1JERVIgQlkgY2guaWQnLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NvbmZpZ0l0ZW1JRH0gXSwKICAgICk7CgogICAgIyBzYXZlIGRhdGEgZnJvbSBoaXN0b3J5IGluIGFycmF5CiAgICBteSBARW50cmllczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJVRtcCA9ICgKICAgICAgICAgICAgSGlzdG9yeUVudHJ5SUQgPT4gJFJvd1swXSwKICAgICAgICAgICAgQ29uZmlnSXRlbUlEICAgPT4gJFJvd1sxXSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgPT4gJFJvd1syXSwKICAgICAgICAgICAgSGlzdG9yeVR5cGVJRCAgPT4gJFJvd1szXSwKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJFJvd1s0XSwKICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJFJvd1s1XSwKICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgPT4gJFJvd1s2XSwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBFbnRyaWVzLCBcJVRtcDsKICAgIH0KCiAgICAjIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzZXIgd2hvIGNyZWF0ZWQgaGlzdG9yeSBlbnRyaWVzCiAgICBmb3IgbXkgJEVudHJ5IChARW50cmllcykgewoKICAgICAgICAjIGdldCB1c2VyIGluZm9ybWF0aW9uCiAgICAgICAgbXkgJVVzZXJJbmZvID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkRW50cnktPntDcmVhdGVCeX0sCiAgICAgICAgICAgIENhY2hlZCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgc2F2ZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBoaXN0b3J5IGVudHJ5CiAgICAgICAgJEVudHJ5LT57VXNlcklEfSAgICAgICAgPSAkVXNlckluZm97VXNlcklEfTsKICAgICAgICAkRW50cnktPntVc2VyTG9naW59ICAgICA9ICRVc2VySW5mb3tVc2VyTG9naW59OwogICAgICAgICRFbnRyeS0+e1VzZXJGaXJzdG5hbWV9ID0gJFVzZXJJbmZve1VzZXJGaXJzdG5hbWV9OwogICAgICAgICRFbnRyeS0+e1VzZXJMYXN0bmFtZX0gID0gJFVzZXJJbmZve1VzZXJMYXN0bmFtZX07CiAgICB9CgogICAgIyBzYXZlIHJlc3VsdCBpbiBjYWNoZQogICAgJFNlbGYtPntDYWNoZX0tPntDSVZlcnNpb25zfS0+eyAkUGFyYW17Q29uZmlnSXRlbUlEfSB9ID0gXEBFbnRyaWVzOwoKICAgIHJldHVybiBcQEVudHJpZXM7Cn0KCj1pdGVtIEhpc3RvcnlFbnRyeUdldCgpCgpSZXR1cm5zIGEgaGFzaCByZWZlcmVuY2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBoaXN0b3J5IGVudHJ5LgpUaGUgaGFzaCByZWZlcmVuY2UgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dDoKCiAgICAkSW5mb3tIaXN0b3J5RW50cnlJRH0KICAgICRJbmZve0NvbmZpZ0l0ZW1JRH0KICAgICRJbmZve0hpc3RvcnlUeXBlfQogICAgJEluZm97SGlzdG9yeVR5cGVJRH0KICAgICRJbmZve0NvbW1lbnR9CiAgICAkSW5mb3tDcmVhdGVCeX0KICAgICRJbmZve0NyZWF0ZVRpbWV9CiAgICAkSW5mb3tVc2VySUR9CiAgICAkSW5mb3tVc2VyTG9naW59CiAgICAkSW5mb3tVc2VyTGFzdG5hbWV9CiAgICAkSW5mb3tVc2VyRmlyc3RuYW1lfQoKICAgIG15ICRJbmZvID0gJENvbmZpZ0l0ZW1PYmplY3QtPkhpc3RvcnlFbnRyeUdldCgKICAgICAgICBIaXN0b3J5RW50cnlJRCA9PiAxMjM0LAogICAgKTsKCj1jdXQKCnN1YiBIaXN0b3J5RW50cnlHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KEhpc3RvcnlFbnRyeUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgaWYgY2FjaGVkIHJlc3VsdCBleGlzdHMsIHJldHVybiB0aGF0IHJlc3VsdAogICAgaWYgKCAkU2VsZi0+e0NhY2hlfS0+e1ZlcnNpb25zfS0+eyAkUGFyYW17SGlzdG9yeUVudHJ5SUR9IH0gKSB7CiAgICAgICAgbXkgKCRDb25maWdJdGVtSUQpID0ga2V5cyAleyAkU2VsZi0+e0NhY2hlfS0+e1ZlcnNpb25zfS0+eyAkUGFyYW17SGlzdG9yeUVudHJ5SUR9IH0gfTsKICAgICAgICByZXR1cm4gJFNlbGYtPntDYWNoZX0tPntWZXJzaW9uc30tPnsgJFBhcmFte0hpc3RvcnlFbnRyeUlEfSB9LT57JENvbmZpZ0l0ZW1JRH07CiAgICB9CgogICAgIyBmZXRjaCBhIHNpbmdsZSBlbnRyeSBmcm9tIGhpc3RvcnkKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgY2guaWQsIGNoLmNvbmZpZ2l0ZW1faWQsIGNoLmNvbnRlbnQsIGNoLnR5cGVfaWQsICcKICAgICAgICAgICAgLiAnY2guY3JlYXRlX2J5LCBjaC5jcmVhdGVfdGltZSwgY2h0Lm5hbWUgJwogICAgICAgICAgICAuICdGUk9NIGNvbmZpZ2l0ZW1faGlzdG9yeSBjaCwgY29uZmlnaXRlbV9oaXN0b3J5X3R5cGUgY2h0ICcKICAgICAgICAgICAgLiAnV0hFUkUgY2gudHlwZV9pZCA9IGNodC5pZCBBTkQgY2guaWQgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17SGlzdG9yeUVudHJ5SUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgbXkgJUVudHJ5OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgJUVudHJ5ID0gKAogICAgICAgICAgICBIaXN0b3J5RW50cnlJRCA9PiAkUm93WzBdLAogICAgICAgICAgICBDb25maWdJdGVtSUQgICA9PiAkUm93WzFdLAogICAgICAgICAgICBDb21tZW50ICAgICAgICA9PiAkUm93WzJdLAogICAgICAgICAgICBIaXN0b3J5VHlwZUlEICA9PiAkUm93WzNdLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAkUm93WzRdLAogICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAkUm93WzVdLAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgICA9PiAkUm93WzZdLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdXNlciBkYXRhIGZvciB0aGlzIGVudHJ5CiAgICBteSAlVXNlckluZm8gPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5HZXRVc2VyRGF0YSgKICAgICAgICBVc2VySUQgPT4gJEVudHJ5e0NyZWF0ZUJ5fSwKICAgICAgICBDYWNoZWQgPT4gMSwKICAgICk7CgogICAgJEVudHJ5e1VzZXJJRH0gICAgICAgID0gJFVzZXJJbmZve1VzZXJJRH07CiAgICAkRW50cnl7VXNlckxvZ2lufSAgICAgPSAkVXNlckluZm97VXNlckxvZ2lufTsKICAgICRFbnRyeXtVc2VyRmlyc3RuYW1lfSA9ICRVc2VySW5mb3tVc2VyRmlyc3RuYW1lfTsKICAgICRFbnRyeXtVc2VyTGFzdG5hbWV9ICA9ICRVc2VySW5mb3tVc2VyTGFzdG5hbWV9OwoKICAgICRTZWxmLT57Q2FjaGV9LT57VmVyc2lvbnN9LT57ICRQYXJhbXtIaXN0b3J5RW50cnlJRH0gfS0+eyAkRW50cnl7Q29uZmlnSXRlbUlEfSB9ID0gXCVFbnRyeTsKCiAgICByZXR1cm4gXCVFbnRyeTsKfQoKPWl0ZW0gSGlzdG9yeUFkZCgpCgpBZGRzIGEgc2luZ2xlIGhpc3RvcnkgZW50cnkgdG8gdGhlIGhpc3RvcnkuCgogICAgJENvbmZpZ0l0ZW1PYmplY3QtPkhpc3RvcnlBZGQoCiAgICAgICAgQ29uZmlnSXRlbUlEICA9PiAxMjM0LAogICAgICAgIEhpc3RvcnlUeXBlICAgPT4gJ05ld0NvbmZpZ0l0ZW0nLCAjIGVpdGhlciBIaXN0b3J5VHlwZSBvciBIaXN0b3J5VHlwZUlEIGlzIG5lZWRlZAogICAgICAgIEhpc3RvcnlUeXBlSUQgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgQ29tbWVudCAgICAgICA9PiAnQW55IHVzZWZ1bCBpbmZvcm1hdGlvbicsCiAgICApOwoKPWN1dAoKc3ViIEhpc3RvcnlBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KENvbmZpZ0l0ZW1JRCBVc2VySUQgQ29tbWVudCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICEoICRQYXJhbXtIaXN0b3J5VHlwZX0gfHwgJFBhcmFte0hpc3RvcnlUeXBlSUR9ICkgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEhpc3RvcnlUeXBlIG9yIEhpc3RvcnlUeXBlSUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBoaXN0b3J5IHR5cGUgaWQgZnJvbSBoaXN0b3J5IHR5cGUgaWYgaGlzdG9yeSB0eXBlIGlzIGdpdmVuLgogICAgaWYgKCAkUGFyYW17SGlzdG9yeVR5cGV9ICkgewogICAgICAgIG15ICRJZCA9ICRTZWxmLT5IaXN0b3J5VHlwZUxvb2t1cCggSGlzdG9yeVR5cGUgPT4gJFBhcmFte0hpc3RvcnlUeXBlfSApOwoKICAgICAgICBpZiAoICEkSWQgKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdJbnZhbGlkIGhpc3RvcnkgdHlwZSBnaXZlbiEnLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkUGFyYW17SGlzdG9yeVR5cGVJRH0gPSAkSWQ7CiAgICB9CgogICAgIyBpZiBoaXN0b3J5IHR5cGUgaXMgZ2l2ZW4KICAgIGVsc2lmICggJFBhcmFte0hpc3RvcnlUeXBlSUR9ICkgewogICAgICAgIG15ICROYW1lID0gJFNlbGYtPkhpc3RvcnlUeXBlTG9va3VwKCBIaXN0b3J5VHlwZUlEID0+ICRQYXJhbXtIaXN0b3J5VHlwZUlEfSApOwoKICAgICAgICBpZiAoICEkTmFtZSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0ludmFsaWQgaGlzdG9yeSB0eXBlIGlkIGdpdmVuIScsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiBnaXZlbiBjb25maWcgaXRlbSBpZCBwb2ludHMgdG8gYW4gZXhpc3RpbmcgY29uZmlnIGl0ZW0gbnVtYmVyCiAgICBpZiAoICRQYXJhbXtDb25maWdJdGVtSUR9ICkgewoKICAgICAgICBteSAkTnVtYmVyID0gJFNlbGYtPkNvbmZpZ0l0ZW1Mb29rdXAoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkTnVtYmVyICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnSW52YWxpZCBjb25maWcgaXRlbSBpZCBnaXZlbiEnLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZGVsZXRlIGNhY2hlZCByZXN1bHRzCiAgICBkZWxldGUgJFNlbGYtPntDYWNoZX0tPntDSVZlcnNpb25zfS0+eyAkUGFyYW17Q29uZmlnSXRlbUlEfSB9OwoKICAgICMgaW5zZXJ0IGhpc3RvcnkgZW50cnkKICAgIHJldHVybiAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBjb25maWdpdGVtX2hpc3RvcnkgKCBjb25maWdpdGVtX2lkLCBjb250ZW50LCBjcmVhdGVfYnksICcKICAgICAgICAgICAgLiAnY3JlYXRlX3RpbWUsIHR5cGVfaWQgKSBWQUxVRVMgKCA/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyApJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFwkUGFyYW17SGlzdG9yeVR5cGVJRH0sCiAgICAgICAgXSwKICAgICk7Cn0KCj1pdGVtIEhpc3RvcnlEZWxldGUoKQoKRGVsZXRlcyBjb21wbGV0ZSBoaXN0b3J5IGZvciBhIGdpdmVuIGNvbmZpZyBpdGVtCgogICAgJENvbmZpZ0l0ZW1PYmplY3QtPkhpc3RvcnlEZWxldGUoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgSGlzdG9yeURlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoQ29uZmlnSXRlbUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZGVsZXRlIGNhY2hlZCByZXN1bHRzCiAgICBkZWxldGUgJFNlbGYtPntDYWNoZX0tPntDSVZlcnNpb259LT57ICRQYXJhbXtDb25maWdJdGVtSUR9IH07CiAgICBmb3IgbXkgJFZlcnNpb25OciAoIGtleXMgJXsgJFNlbGYtPntDYWNoZX0tPntWZXJzaW9uc30gfSApIHsKICAgICAgICBteSAoJENhY2hlQ29uZmlnSXRlbSkgPSBrZXlzICV7ICRTZWxmLT57Q2FjaGV9LT57VmVyc2lvbnN9LT57JFZlcnNpb25Ocn0gfTsKICAgICAgICBkZWxldGUgJFNlbGYtPntDYWNoZX0tPntWZXJzaW9uc30tPnskVmVyc2lvbk5yfSBpZiAkQ2FjaGVDb25maWdJdGVtIGVxICRQYXJhbXtDb25maWdJdGVtSUR9OwogICAgfQoKICAgICMgZGVsZXRlIGhpc3RvcnkgZm9yIGdpdmVuIGNvbmZpZyBpdGVtCiAgICByZXR1cm4gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGNvbmZpZ2l0ZW1faGlzdG9yeSBXSEVSRSBjb25maWdpdGVtX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q29uZmlnSXRlbUlEfSBdLAogICAgKTsKfQoKPWl0ZW0gSGlzdG9yeUVudHJ5RGVsZXRlKCkKCkRlbGV0ZXMgYSBzaW5nbGUgaGlzdG9yeSBlbnRyeS4KCiAgICAkQ29uZmlnSXRlbU9iamVjdC0+SGlzdG9yeUVudHJ5RGVsZXRlKAogICAgICAgIEhpc3RvcnlFbnRyeUlEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgSGlzdG9yeUVudHJ5RGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhIaXN0b3J5RW50cnlJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlbGV0ZSBzaW5nbGUgZW50cnkKICAgIHJldHVybiAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gY29uZmlnaXRlbV9oaXN0b3J5IFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17SGlzdG9yeUVudHJ5SUR9IF0sCiAgICApOwp9Cgo9aXRlbSBIaXN0b3J5VHlwZUxvb2t1cCgpCgpUaGlzIG1ldGhvZCBkb2VzIGEgbG9va3VwIGZvciBhIGhpc3RvcnkgdHlwZS4gSWYgYSBoaXN0b3J5IHR5cGUgaWQgaXMgZ2l2ZW4sCml0IHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGhpc3RvcnkgdHlwZS4gSWYgYSBoaXN0b3J5IHR5cGUgaXMgZ2l2ZW4sIHRoZSBhcHByb3ByaWF0ZQppZCBpcyByZXR1cm5lZC4KCiAgICBteSAkTmFtZSA9ICRDb25maWdJdGVtT2JqZWN0LT5IaXN0b3J5VHlwZUxvb2t1cCgKICAgICAgICBIaXN0b3J5VHlwZUlEID0+IDEyMzQsCiAgICApOwoKICAgIG15ICRJZCA9ICRDb25maWdJdGVtT2JqZWN0LT5IaXN0b3J5VHlwZUxvb2t1cCgKICAgICAgICBIaXN0b3J5VHlwZSA9PiAnQ29uZmlnSXRlbUNyZWF0ZScsCiAgICApOwoKPWN1dAoKc3ViIEhpc3RvcnlUeXBlTG9va3VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgKCRLZXkpID0gZ3JlcCB7ICRQYXJhbXskX30gfSBxdyhIaXN0b3J5VHlwZUlEIEhpc3RvcnlUeXBlKTsKCiAgICAjIGNoZWNrIGZvciBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRLZXkgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEhpc3RvcnlUeXBlSUQgb3IgSGlzdG9yeVR5cGUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGlmIHJlc3VsdCBpcyBjYWNoZWQgcmV0dXJuIHRoYXQgcmVzdWx0CiAgICByZXR1cm4gJFNlbGYtPntDYWNoZX0tPntIaXN0b3J5VHlwZUxvb2t1cH0tPnsgJFBhcmFteyRLZXl9IH0KICAgICAgICBpZiAkU2VsZi0+e0NhY2hlfS0+e0hpc3RvcnlUeXBlTG9va3VwfS0+eyAkUGFyYW17JEtleX0gfTsKCiAgICAjIHNldCB0aGUgYXBwcm9wcmlhdGUgU1FMIHN0YXRlbWVudAogICAgbXkgJFNRTCA9ICdTRUxFQ1QgbmFtZSBGUk9NIGNvbmZpZ2l0ZW1faGlzdG9yeV90eXBlIFdIRVJFIGlkID0gPyc7CgogICAgaWYgKCAkS2V5IGVxICdIaXN0b3J5VHlwZScgKSB7CiAgICAgICAgJFNRTCA9ICdTRUxFQ1QgaWQgRlJPTSBjb25maWdpdGVtX2hpc3RvcnlfdHlwZSBXSEVSRSBuYW1lID0gPyc7CiAgICB9CgogICAgIyBmZXRjaCB0aGUgcmVxdWVzdGVkIHZhbHVlCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFteyRLZXl9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgbXkgJFZhbHVlOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkVmFsdWUgPSAkUm93WzBdOwogICAgfQoKICAgICMgc2F2ZSB2YWx1ZSBpbiBjYWNoZQogICAgJFNlbGYtPntDYWNoZX0tPntIaXN0b3J5VHlwZUxvb2t1cH0tPnsgJFBhcmFteyRLZXl9IH0gPSAkVmFsdWU7CgogICAgcmV0dXJuICRWYWx1ZTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vTnVtYmVyLnBtIC0gc3ViIG1vZHVsZSBvZiBJVFNNQ29uZmlnSXRlbS5wbSB3aXRoIG51bWJlciBmdW5jdGlvbnMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6TnVtYmVyOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHZhcnMgcXcoQElTQSk7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpOdW1iZXIgLSBzdWIgbW9kdWxlIG9mIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbQoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgY29uZmlnIGl0ZW0gbnVtYmVyIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBDb25maWdJdGVtTnVtYmVyTG9va3VwKCkKCnJldHVybiBjb25maWcgaXRlbSBpZCBvciBjb25maWcgaXRlbSBudW1iZXIKCiAgICBteSAkQ29uZmlnSXRlbU51bWJlciA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtTnVtYmVyTG9va3VwKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsCiAgICApOwoKICAgIG9yCgogICAgbXkgJENvbmZpZ0l0ZW1JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtTnVtYmVyTG9va3VwKAogICAgICAgIENvbmZpZ0l0ZW1OdW1iZXIgPT4gJzEyMzQ1NDMyMScsCiAgICApOwoKPWN1dAoKc3ViIENvbmZpZ0l0ZW1OdW1iZXJMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NvbmZpZ0l0ZW1JRH0gJiYgISRQYXJhbXtDb25maWdJdGVtTnVtYmVyfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ29uZmlnSXRlbUlEIG9yIENvbmZpZ0l0ZW1OdW1iZXIhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtDb25maWdJdGVtSUR9ICkgewoKICAgICAgICAjIGNoZWNrIGlmIHJlc3VsdCBpcyBhbHJlYWR5IGNhY2hlZAogICAgICAgIHJldHVybiAkU2VsZi0+e0NhY2hlfS0+e0NvbmZpZ0l0ZW1OdW1iZXJMb29rdXB9LT57SUR9LT57ICRQYXJhbXtDb25maWdJdGVtSUR9IH0KICAgICAgICAgICAgaWYgJFNlbGYtPntDYWNoZX0tPntDb25maWdJdGVtTnVtYmVyTG9va3VwfS0+e0lEfS0+eyAkUGFyYW17Q29uZmlnSXRlbUlEfSB9OwoKICAgICAgICAjIGFzayBkYXRhYmFzZQogICAgICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGNvbmZpZ2l0ZW1fbnVtYmVyIEZST00gY29uZmlnaXRlbSBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17Q29uZmlnSXRlbUlEfSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIG15ICRDb25maWdJdGVtTnVtYmVyOwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyID0gJFJvd1swXTsKICAgICAgICB9CgogICAgICAgICMgY2FjaGUgdGhlIHJlc3VsdAogICAgICAgICRTZWxmLT57Q2FjaGV9LT57Q29uZmlnSXRlbU51bWJlckxvb2t1cH0tPntJRH0tPnsgJFBhcmFte0NvbmZpZ0l0ZW1JRH0gfQogICAgICAgICAgICA9ICRDb25maWdJdGVtTnVtYmVyOwoKICAgICAgICByZXR1cm4gJENvbmZpZ0l0ZW1OdW1iZXI7CiAgICB9CgogICAgIyBjaGVjayBpZiByZXN1bHQgaXMgYWxyZWFkeSBjYWNoZWQKICAgIHJldHVybiAkU2VsZi0+e0NhY2hlfS0+e0NvbmZpZ0l0ZW1OdW1iZXJMb29rdXB9LT57TnVtYmVyfS0+eyAkUGFyYW17Q29uZmlnSXRlbU51bWJlcn0gfQogICAgICAgIGlmICRTZWxmLT57Q2FjaGV9LT57Q29uZmlnSXRlbU51bWJlckxvb2t1cH0tPntOdW1iZXJ9LT57ICRQYXJhbXtDb25maWdJdGVtTnVtYmVyfSB9OwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gY29uZmlnaXRlbSBXSEVSRSBjb25maWdpdGVtX251bWJlciA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDb25maWdJdGVtTnVtYmVyfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJENvbmZpZ0l0ZW1JRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJENvbmZpZ0l0ZW1JRCA9ICRSb3dbMF07CiAgICB9CgogICAgIyBjYWNoZSB0aGUgcmVzdWx0CiAgICAkU2VsZi0+e0NhY2hlfS0+e0NvbmZpZ0l0ZW1OdW1iZXJMb29rdXB9LT57TnVtYmVyfS0+eyAkUGFyYW17Q29uZmlnSXRlbU51bWJlcn0gfQogICAgICAgID0gJENvbmZpZ0l0ZW1JRDsKCiAgICByZXR1cm4gJENvbmZpZ0l0ZW1JRDsKfQoKPWl0ZW0gQ29uZmlnSXRlbU51bWJlckNyZWF0ZSgpCgpjcmVhdGUgYSBuZXcgY29uZmlnIGl0ZW0gbnVtYmVyCgogICAgbXkgJE51bWJlciA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtTnVtYmVyQ3JlYXRlKAogICAgICAgIFR5cGUgICAgPT4gJ0F1dG9JbmNyZW1lbnQnLAogICAgICAgIENsYXNzSUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBDb25maWdJdGVtTnVtYmVyQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFR5cGUgQ2xhc3NJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBsb2FkIGJhY2tlbmQKICAgIGlmICggISRTZWxmLT57TWFpbk9iamVjdH0tPlJlcXVpcmUoICRQYXJhbXtUeXBlfSApICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgbG9hZCBjb25maWcgaXRlbSBudW1iZXIgZ2VuZXJhdG9yIGJhY2tlbmQgbW9kdWxlICRQYXJhbXtUeXBlfSEgJEAiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9hZCBiYWNrZW5kCiAgICBwdXNoIEBJU0EsICRQYXJhbXtUeXBlfTsKCiAgICAjIGNyZWF0ZSBudW1iZXIKICAgIG15ICROdW1iZXIgPSAkU2VsZi0+X0NvbmZpZ0l0ZW1OdW1iZXJDcmVhdGUoJVBhcmFtKTsKCiAgICByZXR1cm4gJE51bWJlcjsKfQoKPWl0ZW0gQ3VycmVudENvdW50ZXJHZXQoKQoKcmV0dXJuIHRoZSBjdXJyZW50IGNvdW50ZXIgb2YgYSBjbGFzcwoKICAgIG15ICRDb3VudGVyID0gJENvbmZpZ0l0ZW1PYmplY3QtPkN1cnJlbnRDb3VudGVyR2V0KAogICAgICAgIENsYXNzSUQgPT4gMTIzLAogICAgICAgIFR5cGUgICAgPT4gJ0F1dG9JbmNyZW1lbnQnLAogICAgKTsKCj1jdXQKCnN1YiBDdXJyZW50Q291bnRlckdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDbGFzc0lEIFR5cGUpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgYXNrIHRoZSBkYXRhYmFzZQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgY291bnRlciBGUk9NIGNvbmZpZ2l0ZW1fY291bnRlciBXSEVSRSAnCiAgICAgICAgICAgIC4gJ2NsYXNzX2lkID0gPyBBTkQgY291bnRlcl90eXBlID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q2xhc3NJRH0sIFwkUGFyYW17VHlwZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICROdW1iZXI7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICROdW1iZXIgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkTnVtYmVyOwp9Cgo9aXRlbSBDdXJyZW50Q291bnRlclNldCgpCgpzZXQgdGhlIGN1cnJlbnQgY291bnRlciBvZiBhIGNsYXNzCgogICAgbXkgJFRydWUgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q3VycmVudENvdW50ZXJTZXQoCiAgICAgICAgQ2xhc3NJRCA9PiAxMjMsCiAgICAgICAgVHlwZSAgICA9PiAnQXV0b0luY3JlbWVudCcsCiAgICAgICAgQ291bnRlciA9PiAnMTInLAogICAgKTsKCj1jdXQKCnN1YiBDdXJyZW50Q291bnRlclNldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDbGFzc0lEIFR5cGUgQ291bnRlcikpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWxldGUgb2xkIGNvdW50ZXIKICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSBjb25maWdpdGVtX2NvdW50ZXIgV0hFUkUgY2xhc3NfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDbGFzc0lEfSBdLAogICAgKTsKCiAgICAjIHNldCBuZXcgY291bnRlcgogICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gY29uZmlnaXRlbV9jb3VudGVyICcKICAgICAgICAgICAgLiAnKGNsYXNzX2lkLCBjb3VudGVyX3R5cGUsIGNvdW50ZXIpIFZBTFVFUyAoPywgPywgPyknLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NsYXNzSUR9LCBcJFBhcmFte1R5cGV9LCBcJFBhcmFte0NvdW50ZXJ9IF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vUGVybWlzc2lvbi5wbSAtIG1vZHVsZSBmb3IgSVRTTUNvbmZpZ0l0ZW0ucG0gd2l0aCBQZXJtaXNzaW9uIGZ1bmN0aW9ucwojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpQZXJtaXNzaW9uOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6UGVybWlzc2lvbiAtIG1vZHVsZSBmb3IgSVRTTUNvbmZpZ0l0ZW0ucG0gd2l0aCBQZXJtaXNzaW9uIGZ1bmN0aW9ucwoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgUGVybWlzc2lvbiBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gUGVybWlzc2lvbigpCgpyZXR1cm5zIHdoZXRoZXIgdGhlIHVzZXIgaGFzIHBlcm1pc3Npb25zIG9yIG5vdAoKICAgIG15ICRBY2Nlc3MgPSAkQ29uZmlnSXRlbU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgICA9PiAncm8nLAogICAgICAgIFNjb3BlICAgID0+ICdDbGFzcycsICMgQ2xhc3MgfHwgSXRlbQogICAgICAgIENsYXNzSUQgID0+IDEyMywgICAgICMgaWYgU2NvcGUgaXMgJ0NsYXNzJwogICAgICAgIEl0ZW1JRCAgID0+IDEyMywgICAgICMgaWYgU2NvcGUgaXMgJ0l0ZW0nCiAgICAgICAgVXNlcklEICAgPT4gMTIzLAogICAgKTsKCm9yIHdpdGhvdXQgbG9nZ2luZywgZm9yIGV4YW1wbGUgZm9yIHRvIGNoZWNrIGlmIGEgbGluay9hY3Rpb24gc2hvdWxkIGJlIHNob3duCgogICAgbXkgJEFjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICAgID0+ICdybycsCiAgICAgICAgU2NvcGUgICAgPT4gJ0NsYXNzJywgIyBDbGFzcyB8fCBJdGVtCiAgICAgICAgQ2xhc3NJRCAgPT4gMTIzLCAgICAgIyBpZiBTY29wZSBpcyAnQ2xhc3MnCiAgICAgICAgSXRlbUlEICAgPT4gMTIzLCAgICAgIyBpZiBTY29wZSBpcyAnSXRlbScKICAgICAgICBMb2dObyAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgUGVybWlzc2lvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVHlwZSBTY29wZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBmb3IgZXhpc3RlbmNlIG9mIEl0ZW1JRCBvciBDbGFzc0lEIGRlcGVuZGVudAogICAgIyBvbiB0aGUgU2NvcGUKICAgIGlmICgKICAgICAgICAoICRQYXJhbXtTY29wZX0gZXEgJ0NsYXNzJyBhbmQgISRQYXJhbXtDbGFzc0lEfSApCiAgICAgICAgfHwgKCAkUGFyYW17U2NvcGV9IGVxICdJdGVtJyBhbmQgISRQYXJhbXtJdGVtSUR9ICkKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIENsYXNzSUQgaWYgU2NvcGUgaXMgJ0NsYXNzJyBvciBJdGVtSUQgaWYgU2NvcGUgaXMgJ0l0ZW0nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBydW4gYWxsIElUU01Db25maWdJdGVtIFBlcm1pc3Npb24gbW9kdWxlcwogICAgaWYgKAogICAgICAgIHJlZiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCggJ0lUU01Db25maWdJdGVtOjpQZXJtaXNzaW9uOjonIC4gJFBhcmFte1Njb3BlfSApIGVxICdIQVNIJwogICAgICAgICkKICAgIHsKICAgICAgICBteSAlTW9kdWxlcwogICAgICAgICAgICA9ICV7ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCAnSVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb246OicgLiAkUGFyYW17U2NvcGV9ICkgfTsKICAgICAgICBmb3IgbXkgJE1vZHVsZSAoIHNvcnQga2V5cyAlTW9kdWxlcyApIHsKCiAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgbmV4dCBpZiAhJFNlbGYtPntNYWluT2JqZWN0fS0+UmVxdWlyZSggJE1vZHVsZXN7JE1vZHVsZX0tPntNb2R1bGV9ICk7CgogICAgICAgICAgICAjIGNyZWF0ZSBvYmplY3QKICAgICAgICAgICAgbXkgJE1vZHVsZU9iamVjdCA9ICRNb2R1bGVzeyRNb2R1bGV9LT57TW9kdWxlfS0+bmV3KAogICAgICAgICAgICAgICAgQ29uZmlnT2JqZWN0ICAgICAgICAgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LAogICAgICAgICAgICAgICAgTG9nT2JqZWN0ICAgICAgICAgICAgPT4gJFNlbGYtPntMb2dPYmplY3R9LAogICAgICAgICAgICAgICAgREJPYmplY3QgICAgICAgICAgICAgPT4gJFNlbGYtPntEQk9iamVjdH0sCiAgICAgICAgICAgICAgICBNYWluT2JqZWN0ICAgICAgICAgICA9PiAkU2VsZi0+e01haW5PYmplY3R9LAogICAgICAgICAgICAgICAgRW5jb2RlT2JqZWN0ICAgICAgICAgPT4gJFNlbGYtPntFbmNvZGVPYmplY3R9LAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbU9iamVjdCAgICAgPT4gJFNlbGYsCiAgICAgICAgICAgICAgICBVc2VyT2JqZWN0ICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJPYmplY3R9LAogICAgICAgICAgICAgICAgRGVidWcgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntEZWJ1Z30sCiAgICAgICAgICAgICAgICBHZW5lcmFsQ2F0YWxvZ09iamVjdCA9PiAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZXhlY3V0ZSBSdW4oKQogICAgICAgICAgICBteSAkQWNjZXNzT2sgPSAkTW9kdWxlT2JqZWN0LT5SdW4oJVBhcmFtKTsKCiAgICAgICAgICAgICMgY2hlY2sgZ3JhbnRlZCBvcHRpb24gKHNob3VsZCBJIHNheSBvaykKICAgICAgICAgICAgaWYgKCAkQWNjZXNzT2sgJiYgJE1vZHVsZXN7JE1vZHVsZX0tPntHcmFudGVkfSApIHsKCiAgICAgICAgICAgICAgICAjIGFjY2VzcyBvawogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmV0dXJuIGJlY2F1c2UgYWNjZXNzIGlzIGZhbHNlIGJ1dCBpdCdzIHJlcXVpcmVkCiAgICAgICAgICAgIGlmICggISRBY2Nlc3NPayAmJiAkTW9kdWxlc3skTW9kdWxlfS0+e1JlcXVpcmVkfSApIHsKICAgICAgICAgICAgICAgIGlmICggISRQYXJhbXtMb2dOb30gKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiUGVybWlzc2lvbiBkZW5pZWQgYmVjYXVzZSBtb2R1bGUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiKCRNb2R1bGVzeyRNb2R1bGV9LT57TW9kdWxlfSkgaXMgcmVxdWlyZWQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiKFVzZXJJRDogJFBhcmFte1VzZXJJRH0gJyRQYXJhbXtUeXBlfScgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAib24gJFBhcmFte1Njb3BlfTogIiAuICRQYXJhbXsgJFBhcmFte1Njb3BlfSAuICdJRCcgfSAuICIpISIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFjY2VzcyBub3Qgb2sKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGRvbid0IGdyYW50IGFjY2VzcwogICAgaWYgKCAhJFBhcmFte0xvZ05vfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJQZXJtaXNzaW9uIGRlbmllZCAoVXNlcklEOiAkUGFyYW17VXNlcklEfSAnJFBhcmFte1R5cGV9JyAiCiAgICAgICAgICAgICAgICAuICJvbiAkUGFyYW17U2NvcGV9OiAiIC4gJFBhcmFteyAkUGFyYW17U2NvcGV9IC4gJ0lEJyB9IC4gIikhIiwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybjsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vVmVyc2lvbi5wbSAtIHN1YiBtb2R1bGUgb2YgSVRTTUNvbmZpZ0l0ZW0ucG0gd2l0aCB2ZXJzaW9uIGZ1bmN0aW9ucwojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpWZXJzaW9uOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7Cgp1c2UgU3RvcmFibGU7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpWZXJzaW9uIC0gc3ViIG1vZHVsZSBvZiBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0KCj1oZWFkMSBTWU5PUFNJUwoKQWxsIHZlcnNpb24gZnVuY3Rpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIFZlcnNpb25ab29tTGlzdCgpCgpyZXR1cm4gYSBjb25maWcgaXRlbSB2ZXJzaW9uIGxpc3QgYXMgYXJyYXloYXNoIHJlZmVyZW5jZQoKICAgIG15ICRWZXJzaW9uTGlzdFJlZiA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uWm9vbUxpc3QoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgVmVyc2lvblpvb21MaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDb25maWdJdGVtSUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDb25maWdJdGVtSUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBjb25maWcgaXRlbQogICAgbXkgJENvbmZpZ0l0ZW0gPSAkU2VsZi0+Q29uZmlnSXRlbUdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICApOwoKICAgICMgZ2V0IHZlcnNpb24gem9vbSBsaXN0CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgbmFtZSwgZGVwbF9zdGF0ZV9pZCwgaW5jaV9zdGF0ZV9pZCwgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSAnCiAgICAgICAgICAgIC4gJ0ZST00gY29uZmlnaXRlbV92ZXJzaW9uIFdIRVJFIGNvbmZpZ2l0ZW1faWQgPSA/IE9SREVSIEJZIGlkJywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDb25maWdJdGVtSUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQFZlcnNpb25MaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBteSAlVmVyc2lvbjsKICAgICAgICAkVmVyc2lvbntWZXJzaW9uSUR9ICAgPSAkUm93WzBdOwogICAgICAgICRWZXJzaW9ue05hbWV9ICAgICAgICA9ICRSb3dbMV07CiAgICAgICAgJFZlcnNpb257RGVwbFN0YXRlSUR9ID0gJFJvd1syXTsKICAgICAgICAkVmVyc2lvbntJbmNpU3RhdGVJRH0gPSAkUm93WzNdOwogICAgICAgICRWZXJzaW9ue0NyZWF0ZVRpbWV9ICA9ICRSb3dbNF07CiAgICAgICAgJFZlcnNpb257Q3JlYXRlQnl9ICAgID0gJFJvd1s1XTsKCiAgICAgICAgcHVzaCBAVmVyc2lvbkxpc3QsIFwlVmVyc2lvbjsKICAgIH0KCiAgICBmb3IgbXkgJFZlcnNpb24gKEBWZXJzaW9uTGlzdCkgewoKICAgICAgICAjIGdldCBkZXBsb3ltZW50IHN0YXRlIGZ1bmN0aW9uYWxpdHkKICAgICAgICBteSAkRGVwbFN0YXRlID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1HZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkVmVyc2lvbi0+e0RlcGxTdGF0ZUlEfSwKICAgICAgICApOwoKICAgICAgICAkVmVyc2lvbi0+e0RlcGxTdGF0ZX0gICAgID0gJERlcGxTdGF0ZS0+e05hbWV9OwogICAgICAgICRWZXJzaW9uLT57RGVwbFN0YXRlVHlwZX0gPSAkRGVwbFN0YXRlLT57RnVuY3Rpb25hbGl0eX07CgogICAgICAgICMgZ2V0IGluY2lkZW50IHN0YXRlIGZ1bmN0aW9uYWxpdHkKICAgICAgICBteSAkSW5jaVN0YXRlID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1HZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkVmVyc2lvbi0+e0luY2lTdGF0ZUlEfSwKICAgICAgICApOwoKICAgICAgICAkVmVyc2lvbi0+e0luY2lTdGF0ZX0gICAgID0gJEluY2lTdGF0ZS0+e05hbWV9OwogICAgICAgICRWZXJzaW9uLT57SW5jaVN0YXRlVHlwZX0gPSAkSW5jaVN0YXRlLT57RnVuY3Rpb25hbGl0eX07CgogICAgICAgICMgYWRkIGNvbmZpZyBpdGVtIGRhdGEKICAgICAgICAkVmVyc2lvbi0+e0NsYXNzSUR9ICAgICAgICAgID0gJENvbmZpZ0l0ZW0tPntDbGFzc0lEfTsKICAgICAgICAkVmVyc2lvbi0+e0NsYXNzfSAgICAgICAgICAgID0gJENvbmZpZ0l0ZW0tPntDbGFzc307CiAgICAgICAgJFZlcnNpb24tPntOdW1iZXJ9ICAgICAgICAgICA9ICRDb25maWdJdGVtLT57TnVtYmVyfTsKICAgICAgICAkVmVyc2lvbi0+e0N1ckRlcGxTdGF0ZUlEfSAgID0gJENvbmZpZ0l0ZW0tPntDdXJEZXBsU3RhdGVJRH07CiAgICAgICAgJFZlcnNpb24tPntDdXJEZXBsU3RhdGV9ICAgICA9ICRDb25maWdJdGVtLT57Q3VyRGVwbFN0YXRlfTsKICAgICAgICAkVmVyc2lvbi0+e0N1ckRlcGxTdGF0ZVR5cGV9ID0gJENvbmZpZ0l0ZW0tPntDdXJEZXBsU3RhdGVUeXBlfTsKICAgICAgICAkVmVyc2lvbi0+e0N1ckluY2lTdGF0ZUlEfSAgID0gJENvbmZpZ0l0ZW0tPntDdXJJbmNpU3RhdGVJRH07CiAgICAgICAgJFZlcnNpb24tPntDdXJJbmNpU3RhdGV9ICAgICA9ICRDb25maWdJdGVtLT57Q3VySW5jaVN0YXRlfTsKICAgICAgICAkVmVyc2lvbi0+e0N1ckluY2lTdGF0ZVR5cGV9ID0gJENvbmZpZ0l0ZW0tPntDdXJJbmNpU3RhdGVUeXBlfTsKICAgIH0KCiAgICByZXR1cm4gXEBWZXJzaW9uTGlzdDsKfQoKPWl0ZW0gVmVyc2lvbkxpc3QoKQoKcmV0dXJuIGEgY29uZmlnIGl0ZW0gdmVyc2lvbiBsaXN0IGFzIGFycmF5IHJlZmVyZW5jZQoKICAgIG15ICRWZXJzaW9uTGlzdFJlZiA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uTGlzdCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBWZXJzaW9uTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17Q29uZmlnSXRlbUlEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ29uZmlnSXRlbUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgdmVyc2lvbiBsaXN0CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICdTRUxFQ1QgaWQgRlJPTSBjb25maWdpdGVtX3ZlcnNpb24gV0hFUkUgY29uZmlnaXRlbV9pZCA9ID8gT1JERVIgQlkgaWQnLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NvbmZpZ0l0ZW1JRH0gXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBAVmVyc2lvbkxpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQFZlcnNpb25MaXN0LCAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBcQFZlcnNpb25MaXN0Owp9Cgo9aXRlbSBWZXJzaW9uR2V0KCkKCnJldHVybnMgYSB2ZXJzaW9uIG9mIGEgY29uZmlnIGl0ZW0gYXMgaGFzaCByZWZlcmVuY2UuClRoZSByZXR1cm5lZCBoYXNoIGNvbnRhaW5zIGZvbGxvd2luZyBhdHRyaWJ1dGVzLgoKICAgICRWZXJzaW9ue1ZlcnNpb25JRH0KICAgICRWZXJzaW9ue0NvbmZpZ0l0ZW1JRH0KICAgICRWZXJzaW9ue051bWJlcn0KICAgICRWZXJzaW9ue0NsYXNzSUR9CiAgICAkVmVyc2lvbntDbGFzc30KICAgICRWZXJzaW9ue0xhc3RWZXJzaW9uSUR9CiAgICAkVmVyc2lvbntOYW1lfQogICAgJFZlcnNpb257RGVmaW5pdGlvbklEfQogICAgJFZlcnNpb257RGVwbFN0YXRlSUR9CiAgICAkVmVyc2lvbntEZXBsU3RhdGV9CiAgICAkVmVyc2lvbntEZXBsU3RhdGVUeXBlfQogICAgJFZlcnNpb257Q3VyRGVwbFN0YXRlSUR9CiAgICAkVmVyc2lvbntDdXJEZXBsU3RhdGV9CiAgICAkVmVyc2lvbntDdXJEZXBsU3RhdGVUeXBlfQogICAgJFZlcnNpb257SW5jaVN0YXRlSUR9CiAgICAkVmVyc2lvbntJbmNpU3RhdGV9CiAgICAkVmVyc2lvbntJbmNpU3RhdGVUeXBlfQogICAgJFZlcnNpb257Q3VySW5jaVN0YXRlSUR9CiAgICAkVmVyc2lvbntDdXJJbmNpU3RhdGV9CiAgICAkVmVyc2lvbntDdXJJbmNpU3RhdGVUeXBlfQogICAgJFZlcnNpb257WE1MRGVmaW5pdGlvbn0KICAgICRWZXJzaW9ue1hNTERhdGF9CiAgICAkVmVyc2lvbntDcmVhdGVUaW1lfQogICAgJFZlcnNpb257Q3JlYXRlQnl9CgogICAgbXkgJFZlcnNpb25SZWYgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkdldCgKICAgICAgICBWZXJzaW9uSUQgID0+IDEyMywKICAgICAgICBYTUxEYXRhR2V0ID0+IDEsICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEgKDB8MSkKICAgICk7CgogICAgb3IKCiAgICBteSAkVmVyc2lvblJlZiA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsCiAgICApOwoKV2hlbiB0aGUgZGF0ZSBmcm9tIHRoZSBYTUwgc3RvcmFnZSBpcyBub3QgbmVlZGVkIHRoZW4gZmV0Y2hpbmcgdGhlIFhNTCBkYXRhIGNhbiBiZQpleHBsaWNpdGx5IHR1cm5lZCBvZmYgYnkgcGFzc2luZyBYTUxEYXRhR2V0ID0+IDAuCgogICAgbXkgJFZlcnNpb25SZWYgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLAogICAgICAgIFhNTERhdGFHZXQgICA9PiAwLAogICAgKTsKClRoZSByZXN1bHQgb2YgdGhpcyBjYWxsIGlzIG5vdCBjYWNoZWQsIGFzIHRoZSBuZXh0IGNhbGwgdG8gVmVyc2lvbkdldCgpIG1pZ2h0IG5lZWQKdGhlIFhNTCBkYXRhLiBPbiB0aGUgb3RoZXIgaGFuZCwgd2hlbiB0aGUgY2FjaGUgaXMgYWxyZWFkeSBmaWxsZWQsIHRoZSBjYWNoZWQKdmVyc2lvbiBoYXNoIGlzIHJldHVybmVkIHdpdGggdGhlIFhNTCBkYXRhLiBTbyB5b3UgZ2V0IG1vcmUgdGhhbiB5b3UgYXNrZWQgZm9yLCB3aGljaCBpc24ndAphIGJhZCB0aGluZy4KCj1jdXQKCnN1YiBWZXJzaW9uR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtWZXJzaW9uSUR9ICYmICEkUGFyYW17Q29uZmlnSXRlbUlEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVmVyc2lvbklEIG9yIENvbmZpZ0l0ZW1JRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1hNTERhdGFHZXR9ICkgewogICAgICAgICRQYXJhbXtYTUxEYXRhR2V0fSA9IDE7CiAgICB9CgogICAgaWYgKCAkUGFyYW17VmVyc2lvbklEfSApIHsKCiAgICAgICAgIyBjaGVjayBpZiByZXN1bHQgaXMgYWxyZWFkeSBjYWNoZWQKICAgICAgICBpZiAoICRTZWxmLT57Q2FjaGV9LT57VmVyc2lvbkdldH0tPnsgJFBhcmFte1ZlcnNpb25JRH0gfSApIHsKCiAgICAgICAgICAgICMgcmV0dXJuIGEgY2xvbmUgb2YgdGhlIGNhY2hlLCBhcyB0aGUgY2FsbGVyIHNob3VsZCBub3QgYmUgYWJsZSBkbyBjaGFuZ2UgdGhlIGNhY2hlCiAgICAgICAgICAgIHJldHVybiBTdG9yYWJsZTo6ZGNsb25lKCAkU2VsZi0+e0NhY2hlfS0+e1ZlcnNpb25HZXR9LT57ICRQYXJhbXtWZXJzaW9uSUR9IH0gKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHZlcnNpb24KICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIGNvbmZpZ2l0ZW1faWQsIG5hbWUsIGRlZmluaXRpb25faWQsICcKICAgICAgICAgICAgICAgIC4gJ2RlcGxfc3RhdGVfaWQsIGluY2lfc3RhdGVfaWQsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnkgJwogICAgICAgICAgICAgICAgLiAnRlJPTSBjb25maWdpdGVtX3ZlcnNpb24gV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1ZlcnNpb25JRH0gXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgZ2V0IHZlcnNpb24KICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIGNvbmZpZ2l0ZW1faWQsIG5hbWUsIGRlZmluaXRpb25faWQsICcKICAgICAgICAgICAgICAgIC4gJ2RlcGxfc3RhdGVfaWQsIGluY2lfc3RhdGVfaWQsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnkgJwogICAgICAgICAgICAgICAgLiAnRlJPTSBjb25maWdpdGVtX3ZlcnNpb24gJwogICAgICAgICAgICAgICAgLiAnV0hFUkUgY29uZmlnaXRlbV9pZCA9ID8gT1JERVIgQlkgaWQgREVTQycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDb25maWdJdGVtSUR9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVWZXJzaW9uOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkVmVyc2lvbntWZXJzaW9uSUR9ICAgID0gJFJvd1swXTsKICAgICAgICAkVmVyc2lvbntDb25maWdJdGVtSUR9ID0gJFJvd1sxXTsKICAgICAgICAkVmVyc2lvbntOYW1lfSAgICAgICAgID0gJFJvd1syXTsKICAgICAgICAkVmVyc2lvbntEZWZpbml0aW9uSUR9ID0gJFJvd1szXTsKICAgICAgICAkVmVyc2lvbntEZXBsU3RhdGVJRH0gID0gJFJvd1s0XTsKICAgICAgICAkVmVyc2lvbntJbmNpU3RhdGVJRH0gID0gJFJvd1s1XTsKICAgICAgICAkVmVyc2lvbntDcmVhdGVUaW1lfSAgID0gJFJvd1s2XTsKICAgICAgICAkVmVyc2lvbntDcmVhdGVCeX0gICAgID0gJFJvd1s3XTsKICAgIH0KCiAgICAjIGNoZWNrIHZlcnNpb24KICAgIGlmICggISRWZXJzaW9ue1ZlcnNpb25JRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdObyBzdWNoIGNvbmZpZyBpdGVtIHZlcnNpb24hJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBkZXBsb3ltZW50IHN0YXRlIGZ1bmN0aW9uYWxpdHkKICAgIG15ICREZXBsU3RhdGUgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUdldCgKICAgICAgICBJdGVtSUQgPT4gJFZlcnNpb257RGVwbFN0YXRlSUR9LAogICAgKTsKCiAgICAkVmVyc2lvbntEZXBsU3RhdGV9ICAgICA9ICREZXBsU3RhdGUtPntOYW1lfTsKICAgICRWZXJzaW9ue0RlcGxTdGF0ZVR5cGV9ID0gJERlcGxTdGF0ZS0+e0Z1bmN0aW9uYWxpdHl9OwoKICAgICMgZ2V0IGluY2lkZW50IHN0YXRlIGZ1bmN0aW9uYWxpdHkKICAgIG15ICRJbmNpU3RhdGUgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUdldCgKICAgICAgICBJdGVtSUQgPT4gJFZlcnNpb257SW5jaVN0YXRlSUR9LAogICAgKTsKCiAgICAkVmVyc2lvbntJbmNpU3RhdGV9ICAgICA9ICRJbmNpU3RhdGUtPntOYW1lfTsKICAgICRWZXJzaW9ue0luY2lTdGF0ZVR5cGV9ID0gJEluY2lTdGF0ZS0+e0Z1bmN0aW9uYWxpdHl9OwoKICAgICMgZ2V0IGNvbmZpZyBpdGVtCiAgICBteSAkQ29uZmlnSXRlbSA9ICRTZWxmLT5Db25maWdJdGVtR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkVmVyc2lvbntDb25maWdJdGVtSUR9LAogICAgICAgIENhY2hlICAgICAgICA9PiAwLAogICAgKTsKCiAgICAjIGNoZWNrIGNvbmZpZyBpdGVtIGRhdGEKICAgIGlmICggISRDb25maWdJdGVtIHx8IHJlZiAkQ29uZmlnSXRlbSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBnZXQgY29uZmlnIGl0ZW0gJFZlcnNpb257Q29uZmlnSXRlbUlEfSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRWZXJzaW9ue0NsYXNzSUR9ICAgICAgICAgID0gJENvbmZpZ0l0ZW0tPntDbGFzc0lEfTsKICAgICRWZXJzaW9ue0NsYXNzfSAgICAgICAgICAgID0gJENvbmZpZ0l0ZW0tPntDbGFzc307CiAgICAkVmVyc2lvbntMYXN0VmVyc2lvbklEfSAgICA9ICRDb25maWdJdGVtLT57TGFzdFZlcnNpb25JRH07CiAgICAkVmVyc2lvbntOdW1iZXJ9ICAgICAgICAgICA9ICRDb25maWdJdGVtLT57TnVtYmVyfTsKICAgICRWZXJzaW9ue0N1ckRlcGxTdGF0ZUlEfSAgID0gJENvbmZpZ0l0ZW0tPntDdXJEZXBsU3RhdGVJRH07CiAgICAkVmVyc2lvbntDdXJEZXBsU3RhdGV9ICAgICA9ICRDb25maWdJdGVtLT57Q3VyRGVwbFN0YXRlfTsKICAgICRWZXJzaW9ue0N1ckRlcGxTdGF0ZVR5cGV9ID0gJENvbmZpZ0l0ZW0tPntDdXJEZXBsU3RhdGVUeXBlfTsKICAgICRWZXJzaW9ue0N1ckluY2lTdGF0ZUlEfSAgID0gJENvbmZpZ0l0ZW0tPntDdXJJbmNpU3RhdGVJRH07CiAgICAkVmVyc2lvbntDdXJJbmNpU3RhdGV9ICAgICA9ICRDb25maWdJdGVtLT57Q3VySW5jaVN0YXRlfTsKICAgICRWZXJzaW9ue0N1ckluY2lTdGF0ZVR5cGV9ID0gJENvbmZpZ0l0ZW0tPntDdXJJbmNpU3RhdGVUeXBlfTsKCiAgICAjIGRvIG5vdCBjYWNoZSB0aGUgdmVyc2lvbiB3aXRob3V0IHRoZSBYTUwgZGF0YSwKICAgICMgdGhlIG5leHQgY2FsbGVyIG1pZ2h0IG5lZWQgdGhlIFhNTCBkYXRhCiAgICByZXR1cm4gXCVWZXJzaW9uIGlmICEkUGFyYW17WE1MRGF0YUdldH07CgogICAgIyBnZXQgeG1sIGRlZmluaXRpb24KICAgIG15ICREZWZpbml0aW9uID0gJFNlbGYtPkRlZmluaXRpb25HZXQoCiAgICAgICAgRGVmaW5pdGlvbklEID0+ICRWZXJzaW9ue0RlZmluaXRpb25JRH0sCiAgICApOwogICAgJFZlcnNpb257WE1MRGVmaW5pdGlvbn0gPSAkRGVmaW5pdGlvbi0+e0RlZmluaXRpb25SZWZ9OwoKICAgICMgZ2V0IHhtbCBkYXRhCiAgICAkVmVyc2lvbntYTUxEYXRhfSA9ICRTZWxmLT5fWE1MVmVyc2lvbkdldCgKICAgICAgICBDbGFzc0lEICAgPT4gJENvbmZpZ0l0ZW0tPntDbGFzc0lEfSwKICAgICAgICBWZXJzaW9uSUQgPT4gJFZlcnNpb257VmVyc2lvbklEfSwKICAgICk7CgogICAgIyBjYWNoZSB0aGUgcmVzdWx0CiAgICAkU2VsZi0+e0NhY2hlfS0+e1ZlcnNpb25HZXR9LT57ICRWZXJzaW9ue1ZlcnNpb25JRH0gfSA9IFwlVmVyc2lvbjsKCiAgICAjIHJldHVybiBhIGNsb25lIG9mIHRoZSBjYWNoZSwgYXMgdGhlIGNhbGxlciBzaG91bGQgbm90IGJlIGFibGUgdG8gY2hhbmdlIHRoZSBjYWNoZQogICAgcmV0dXJuIFN0b3JhYmxlOjpkY2xvbmUoICRTZWxmLT57Q2FjaGV9LT57VmVyc2lvbkdldH0tPnsgJFZlcnNpb257VmVyc2lvbklEfSB9ICk7Cn0KCj1pdGVtIFZlcnNpb25Db25maWdJdGVtSURHZXQoKQoKcmV0dXJuIHRoZSBjb25maWcgaXRlbSBpZCBvZiBhIHZlcnNpb24KCiAgICBteSAkQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25Db25maWdJdGVtSURHZXQoCiAgICAgICAgVmVyc2lvbklEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgVmVyc2lvbkNvbmZpZ0l0ZW1JREdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VmVyc2lvbklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVmVyc2lvbklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBpZiByZXN1bHQgaXMgYWxyZWFkeSBjYWNoZWQKICAgIHJldHVybiAkU2VsZi0+e0NhY2hlfS0+e1ZlcnNpb25Db25maWdJdGVtSURHZXR9LT57ICRQYXJhbXtWZXJzaW9uSUR9IH0KICAgICAgICBpZiAkU2VsZi0+e0NhY2hlfS0+e1ZlcnNpb25Db25maWdJdGVtSURHZXR9LT57ICRQYXJhbXtWZXJzaW9uSUR9IH07CgogICAgIyBnZXQgY29uZmlnIGl0ZW0gaWQKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgY29uZmlnaXRlbV9pZCBGUk9NIGNvbmZpZ2l0ZW1fdmVyc2lvbiBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtWZXJzaW9uSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkQ29uZmlnSXRlbUlEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQ29uZmlnSXRlbUlEID0gJFJvd1swXTsKICAgIH0KCiAgICAjIGNhY2hlIHRoZSByZXN1bHQKICAgICRTZWxmLT57Q2FjaGV9LT57VmVyc2lvbkNvbmZpZ0l0ZW1JREdldH0tPnsgJFBhcmFte1ZlcnNpb25JRH0gfSA9ICRDb25maWdJdGVtSUQ7CgogICAgcmV0dXJuICRDb25maWdJdGVtSUQ7Cn0KCj1pdGVtIFZlcnNpb25BZGQoKQoKYWRkIGEgbmV3IHZlcnNpb24KCiAgICBteSAkVmVyc2lvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+IDEyMywKICAgICAgICBOYW1lICAgICAgICAgPT4gJ1RoZSBOYW1lJywKICAgICAgICBEZWZpbml0aW9uSUQgPT4gMTIxMiwKICAgICAgICBEZXBsU3RhdGVJRCAgPT4gOCwKICAgICAgICBJbmNpU3RhdGVJRCAgPT4gNCwKICAgICAgICBYTUxEYXRhICAgICAgPT4gJEFycmF5SGFzaFJlZiwgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBWZXJzaW9uQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhDb25maWdJdGVtSUQgTmFtZSBEZWZpbml0aW9uSUQgRGVwbFN0YXRlSUQgSW5jaVN0YXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEF0dHJpYnV0ZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGRlcGxveW1lbnQgc3RhdGUgbGlzdAogICAgbXkgJERlcGxTdGF0ZUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICApOwoKICAgIHJldHVybiBpZiAhJERlcGxTdGF0ZUxpc3Q7CiAgICByZXR1cm4gaWYgcmVmICREZXBsU3RhdGVMaXN0IG5lICdIQVNIJzsKCiAgICAjIGNoZWNrIHRoZSBkZXBsb3ltZW50IHN0YXRlIGlkCiAgICBpZiAoICEkRGVwbFN0YXRlTGlzdC0+eyAkUGFyYW17RGVwbFN0YXRlSUR9IH0gKSB7CgogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTm8gdmFsaWQgZGVwbG95bWVudCBzdGF0ZSBpZCBnaXZlbiEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGluY2lkZW50IHN0YXRlIGxpc3QKICAgIG15ICRJbmNpU3RhdGVMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlJywKICAgICk7CgogICAgcmV0dXJuIGlmICEkSW5jaVN0YXRlTGlzdDsKICAgIHJldHVybiBpZiByZWYgJEluY2lTdGF0ZUxpc3QgbmUgJ0hBU0gnOwoKICAgICMgY2hlY2sgdGhlIGluY2lkZW50IHN0YXRlIGlkCiAgICBpZiAoICEkSW5jaVN0YXRlTGlzdC0+eyAkUGFyYW17SW5jaVN0YXRlSUR9IH0gKSB7CgogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTm8gdmFsaWQgaW5jaWRlbnQgc3RhdGUgaWQgZ2l2ZW4hJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBWZXJzaW9uTGlzdAogICAgbXkgJFZlcnNpb25MaXN0ID0gJFNlbGYtPlZlcnNpb25MaXN0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICk7CgogICAgbXkgJENvbmZpZ0l0ZW1JbmZvID0ge307CgogICAgaWYgKCBAeyRWZXJzaW9uTGlzdH0gKSB7CgogICAgICAgICMgZ2V0IG9sZCB2ZXJzaW9uIGluZm8gZm9yIGNvbXBhcmlzb25zIHdpdGggY3VycmVudCB2ZXJzaW9uCiAgICAgICAgIyB0aGlzIGlzIG5lZWRlZCB0byB0cmlnZ2VyIHNvbWUgZXZlbnRzCiAgICAgICAgJENvbmZpZ0l0ZW1JbmZvID0gJFNlbGYtPlZlcnNpb25HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgWE1MRGF0YUdldCAgID0+IDAsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGdldCBjb25maWcgaXRlbQogICAgICAgICRDb25maWdJdGVtSW5mbyA9ICRTZWxmLT5Db25maWdJdGVtR2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gaWYgISRDb25maWdJdGVtSW5mbzsKICAgIHJldHVybiBpZiByZWYgJENvbmZpZ0l0ZW1JbmZvIG5lICdIQVNIJzsKCiAgICAjIGNoZWNrLCB3aGV0aGVyIHRoZSBmZWF0dXJlIHRvIGNoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIGlzIGVuYWJsZWQKICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1VuaXF1ZUNJTmFtZTo6RW5hYmxlVW5pcXVlbmVzc0NoZWNrJykgKSB7CgogICAgICAgIG15ICROYW1lRHVwbGljYXRlcyA9ICRTZWxmLT5VbmlxdWVOYW1lQ2hlY2soCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgQ2xhc3NJRCAgICAgID0+ICRDb25maWdJdGVtSW5mby0+e0NsYXNzSUR9LAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJFBhcmFte05hbWV9LAogICAgICAgICk7CgogICAgICAgICMgc3RvcCBwcm9jZXNzaW5nIGlmIHRoZSBuYW1lIGlzIG5vdCB1bmlxdWUKICAgICAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkTmFtZUR1cGxpY2F0ZXMpICkgewoKICAgICAgICAgICAgIyBidWlsZCBhIHN0cmluZyBvZiBhbGwgZHVwbGljYXRlIElEcwogICAgICAgICAgICBteSAkRHVwbGljYXRlcyA9IGpvaW4gJywgJywgQHskTmFtZUR1cGxpY2F0ZXN9OwoKICAgICAgICAgICAgIyB3cml0ZSBhbiBlcnJvciBsb2cgbWVzc2FnZSBjb250YWluaW5nIGFsbCB0aGUgZHVwbGljYXRlIElEcwogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIG5hbWUgJFBhcmFte05hbWV9IGlzIGFscmVhZHkgaW4gdXNlIChDb25maWdJdGVtSURzOiAkRHVwbGljYXRlcykhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkRXZlbnRzID0gJFNlbGYtPl9HZXRFdmVudHMoCiAgICAgICAgUGFyYW0gICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICBDb25maWdJdGVtSW5mbyA9PiAkQ29uZmlnSXRlbUluZm8sCiAgICApOwoKICAgIG15ICRSZXR1cm5WZXJzaW9uSUQgPSBzY2FsYXIgQHskVmVyc2lvbkxpc3R9ID8gJFZlcnNpb25MaXN0LT5bLTFdIDogMDsKICAgIHJldHVybiAkUmV0dXJuVmVyc2lvbklEIGlmICEoICRFdmVudHMgJiYga2V5cyAleyRFdmVudHN9ICk7CgogICAgIyBpbnNlcnQgbmV3IHZlcnNpb24KICAgIG15ICRTdWNjZXNzID0gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gY29uZmlnaXRlbV92ZXJzaW9uICcKICAgICAgICAgICAgLiAnKGNvbmZpZ2l0ZW1faWQsIG5hbWUsIGRlZmluaXRpb25faWQsICcKICAgICAgICAgICAgLiAnZGVwbF9zdGF0ZV9pZCwgaW5jaV9zdGF0ZV9pZCwgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSkgVkFMVUVTICcKICAgICAgICAgICAgLiAnKD8sID8sID8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgXCRQYXJhbXtOYW1lfSwKICAgICAgICAgICAgXCRQYXJhbXtEZWZpbml0aW9uSUR9LAogICAgICAgICAgICBcJFBhcmFte0RlcGxTdGF0ZUlEfSwKICAgICAgICAgICAgXCRQYXJhbXtJbmNpU3RhdGVJRH0sCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwKICAgICAgICBdLAogICAgKTsKCiAgICByZXR1cm4gaWYgISRTdWNjZXNzOwoKICAgICMgZGVsZXRlIGNhY2hlCiAgICBmb3IgbXkgJFZlcnNpb25JRCAoIEB7JFZlcnNpb25MaXN0fSApIHsKICAgICAgICBkZWxldGUgJFNlbGYtPntDYWNoZX0tPntWZXJzaW9uR2V0fS0+eyRWZXJzaW9uSUR9OwogICAgfQoKICAgICMgZ2V0IGlkIG9mIG5ldyB2ZXJzaW9uCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgY3JlYXRlX3RpbWUgRlJPTSBjb25maWdpdGVtX3ZlcnNpb24gV0hFUkUgJwogICAgICAgICAgICAuICdjb25maWdpdGVtX2lkID0gPyBPUkRFUiBCWSBpZCBERVNDJywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17Q29uZmlnSXRlbUlEfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFZlcnNpb25JRDsKICAgIG15ICRDcmVhdGVUaW1lOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkVmVyc2lvbklEICA9ICRSb3dbMF07CiAgICAgICAgJENyZWF0ZVRpbWUgPSAkUm93WzFdOwogICAgfQoKICAgICMgY2hlY2sgdmVyc2lvbiBpZAogICAgaWYgKCAhJFZlcnNpb25JRCApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGdldCB0aGUgbmV3IHZlcnNpb24gaWQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGFkZCB4bWwgZGF0YQogICAgaWYgKCAkUGFyYW17WE1MRGF0YX0gJiYgcmVmICRQYXJhbXtYTUxEYXRhfSBlcSAnQVJSQVknICkgewogICAgICAgICRTZWxmLT5fWE1MVmVyc2lvbkFkZCgKICAgICAgICAgICAgQ2xhc3NJRCAgICAgID0+ICRDb25maWdJdGVtSW5mby0+e0NsYXNzSUR9LAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIFZlcnNpb25JRCAgICA9PiAkVmVyc2lvbklELAogICAgICAgICAgICBYTUxEYXRhICAgICAgPT4gJFBhcmFte1hNTERhdGF9LAogICAgICAgICk7CiAgICB9CgogICAgIyB1cGRhdGUgbGFzdF92ZXJzaW9uX2lkLCBjdXJfZGVwbF9zdGF0ZV9pZCwgY3VyX2luY2lfc3RhdGVfaWQsIGNoYW5nZV90aW1lIGFuZCBjaGFuZ2VfYnkKICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gJ1VQREFURSBjb25maWdpdGVtIFNFVCBsYXN0X3ZlcnNpb25faWQgPSA/LCAnCiAgICAgICAgICAgIC4gJ2N1cl9kZXBsX3N0YXRlX2lkID0gPywgY3VyX2luY2lfc3RhdGVfaWQgPSA/LCAnCiAgICAgICAgICAgIC4gJ2NoYW5nZV90aW1lID0gPywgY2hhbmdlX2J5ID0gPyAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkVmVyc2lvbklELAogICAgICAgICAgICBcJFBhcmFte0RlcGxTdGF0ZUlEfSwKICAgICAgICAgICAgXCRQYXJhbXtJbmNpU3RhdGVJRH0sCiAgICAgICAgICAgIFwkQ3JlYXRlVGltZSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBcJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgXSwKICAgICk7CgogICAgIyB0cmlnZ2VyIFZlcnNpb25DcmVhdGUgZXZlbnQKICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ1ZlcnNpb25DcmVhdGUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICBDb21tZW50ICAgICAgPT4gJFZlcnNpb25JRCwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjb21wYXJlIGN1cnJlbnQgYW5kIG9sZCB2YWx1ZXMKICAgIGlmICggJEV2ZW50cy0+e1ZhbHVlVXBkYXRlfSApIHsKICAgICAgICAkU2VsZi0+X0V2ZW50SGFuZGxlckZvckNoYW5nZWRYTUxWYWx1ZXMoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgVXBkYXRlVmFsdWVzID0+ICRFdmVudHMtPntWYWx1ZVVwZGF0ZX0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgdHJpZ2dlciBkZWZpbml0aW9uIHVwZGF0ZSBldmVudAogICAgaWYgKCAkRXZlbnRzLT57RGVmaW5pdGlvblVwZGF0ZX0gKSB7CiAgICAgICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICAgICAgRXZlbnQgPT4gJ0RlZmluaXRpb25VcGRhdGUnLAogICAgICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBDb21tZW50ICAgICAgPT4gJEV2ZW50cy0+e0RlZmluaXRpb25VcGRhdGV9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIG9sZCBhbmQgbmV3IG5hbWUKICAgIGlmICggJEV2ZW50cy0+e05hbWVVcGRhdGV9ICkgewogICAgICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgICAgIEV2ZW50ID0+ICdOYW1lVXBkYXRlJywKICAgICAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICAgICAgQ29tbWVudCAgICAgID0+ICRFdmVudHMtPntOYW1lVXBkYXRlfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyB0cmlnZ2VyIGluY2lkZW50IHN0YXRlIHVwZGF0ZSBldmVudAogICAgaWYgKCAkRXZlbnRzLT57SW5jaWRlbnRTdGF0ZVVwZGF0ZX0gKSB7CiAgICAgICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICAgICAgRXZlbnQgPT4gJ0luY2lkZW50U3RhdGVVcGRhdGUnLAogICAgICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBDb21tZW50ICAgICAgPT4gJEV2ZW50cy0+e0luY2lkZW50U3RhdGVVcGRhdGV9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRyaWdnZXIgZGVwbG95bWVudCBzdGF0ZSB1cGRhdGUgZXZlbnQKICAgIGlmICggJEV2ZW50cy0+e0RlcGxveW1lbnRTdGF0ZVVwZGF0ZX0gKSB7CiAgICAgICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICAgICAgRXZlbnQgPT4gJ0RlcGxveW1lbnRTdGF0ZVVwZGF0ZScsCiAgICAgICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgICAgIENvbW1lbnQgICAgICA9PiAkRXZlbnRzLT57RGVwbG95bWVudFN0YXRlVXBkYXRlfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyByZWNhbGN1bGF0ZSB0aGUgY3VycmVudCBpbmNpZGVudCBzdGF0ZSBvZiBhbGwgbGlua2VkIGNvbmZpZyBpdGVtcwogICAgJFNlbGYtPkN1ckluY2lTdGF0ZVJlY2FsYygKICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICApOwoKICAgIHJldHVybiAkVmVyc2lvbklEOwp9Cgo9aXRlbSBWZXJzaW9uRGVsZXRlKCkKCmRlbGV0ZSBhbiBleGlzdGluZyB2ZXJzaW9uIG9yIHZlcnNpb25zCgogICAgbXkgJFRydWUgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkRlbGV0ZSgKICAgICAgICBWZXJzaW9uSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgIG15ICRUcnVlID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25EZWxldGUoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+IDMyMSwKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgVmVyc2lvbkRlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoICEkUGFyYW17VmVyc2lvbklEfSAmJiAhJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFZlcnNpb25JRCBvciBDb25maWdJdGVtSUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkVmVyc2lvbkxpc3QgPSBbXTsKICAgIGlmICggJFBhcmFte1ZlcnNpb25JRH0gKSB7CgogICAgICAgIHB1c2ggQHskVmVyc2lvbkxpc3R9LCAkUGFyYW17VmVyc2lvbklEfTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGdldCB2ZXJzaW9uIGxpc3QKICAgICAgICAkVmVyc2lvbkxpc3QgPSAkU2VsZi0+VmVyc2lvbkxpc3QoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxIGlmICFzY2FsYXIgQHskVmVyc2lvbkxpc3R9OwoKICAgIG15ICRTdWNjZXNzOwogICAgZm9yIG15ICRWZXJzaW9uSUQgKCBAeyRWZXJzaW9uTGlzdH0gKSB7CgogICAgICAgICMgZGVsZXRlIHRoZSB4bWwgdmVyc2lvbiBkYXRhCiAgICAgICAgJFNlbGYtPl9YTUxWZXJzaW9uRGVsZXRlKAogICAgICAgICAgICBWZXJzaW9uSUQgPT4gJFZlcnNpb25JRCwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHZlcnNpb24KICAgICAgICAkU3VjY2VzcyA9ICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgU1FMICA9PiAiREVMRVRFIEZST00gY29uZmlnaXRlbV92ZXJzaW9uIFdIRVJFIGlkID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFZlcnNpb25JRCBdLAogICAgICAgICk7CgogICAgICAgICMgdHJpZ2dlciBWZXJzaW9uRGVsZXRlIGV2ZW50IHdoZW4gZGVsZXRpb24gd2FzIHN1Y2Nlc3NmdWwKICAgICAgICBpZiAoJFN1Y2Nlc3MpIHsKCiAgICAgICAgICAgICMgZ2V0IGNvbmZpZyBpdGVtIGlkIGZvciB2ZXJzaW9uIChuZWVkZWQgZm9yIGV2ZW50IGhhbmRsaW5nKQogICAgICAgICAgICBteSAkQ29uZmlnSXRlbUlEID0gJFBhcmFte0NvbmZpZ0l0ZW1JRH07CiAgICAgICAgICAgIGlmICggJFBhcmFte1ZlcnNpb25JRH0gKSB7CiAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbUlEID0gJFNlbGYtPlZlcnNpb25Db25maWdJdGVtSURHZXQoCiAgICAgICAgICAgICAgICAgICAgVmVyc2lvbklEID0+ICRQYXJhbXtWZXJzaW9uSUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICAgICAgICAgIEV2ZW50ID0+ICdWZXJzaW9uRGVsZXRlJywKICAgICAgICAgICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ICAgICAgPT4gJFZlcnNpb25JRCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGRlbGV0ZSBjYWNoZQogICAgICAgICAgICBkZWxldGUgJFNlbGYtPntDYWNoZX0tPntWZXJzaW9uR2V0fS0+eyRWZXJzaW9uSUR9OwogICAgICAgICAgICBkZWxldGUgJFNlbGYtPntDYWNoZX0tPntWZXJzaW9uQ29uZmlnSXRlbUlER2V0fS0+eyRWZXJzaW9uSUR9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJFN1Y2Nlc3M7Cn0KCj1pdGVtIFZlcnNpb25TZWFyY2goKQoKcmV0dXJuIGEgY29uZmlnIGl0ZW0gbGlzdCBhcyBhbiBhcnJheSByZWZlcmVuY2UKCiAgICBteSAkQ29uZmlnSXRlbUlEcyA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uU2VhcmNoKAogICAgICAgIE5hbWUgICAgICAgICA9PiAnVGhlIE5hbWUnLCAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIENsYXNzSURzICAgICA9PiBbIDksIDgsIDcsIDYgXSwgICMgKG9wdGlvbmFsKQogICAgICAgIERlcGxTdGF0ZUlEcyA9PiBbIDMyMSwgMTIzIF0sICAgICMgKG9wdGlvbmFsKQogICAgICAgIEluY2lTdGF0ZUlEcyA9PiBbIDMyMSwgMTIzIF0sICAgICMgKG9wdGlvbmFsKQoKICAgICAgICBQcmV2aW91c1ZlcnNpb25TZWFyY2ggPT4gMSwgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDAgKDB8MSkKCiAgICAgICAgT3JkZXJCeSA9PiBbICdDb25maWdJdGVtSUQnLCAnTnVtYmVyJyBdLCAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgZGVmYXVsdDogWyAnQ29uZmlnSXRlbUlEJyBdCiAgICAgICAgIyAoQ29uZmlnSXRlbUlELCBOYW1lLCBOdW1iZXIsIENsYXNzSUQsIERlcGxTdGF0ZUlELCBJbmNpU3RhdGVJRAogICAgICAgICMgQ3JlYXRlVGltZSwgQ3JlYXRlQnksIENoYW5nZVRpbWUsIENoYW5nZUJ5KQoKICAgICAgICAjIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIE9yZGVyQnk6CiAgICAgICAgIyBUaGUgT3JkZXJCeURpcmVjdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGZvciBlYWNoIE9yZGVyQnkgYXR0cmlidXRlLgogICAgICAgICMgVGhlIHBhaXJpbmcgaXMgbWFkZSBieSB0aGUgYXJyYXkgaW5kaWNlcy4KCiAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbICdVcCcsICdEb3duJyBdLCAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBkZWZhdWx0OiBbICdVcCcgXQogICAgICAgICMgKERvd24gfCBVcCkKCiAgICAgICAgTGltaXQgICAgICAgICAgPT4gMTIyLCAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNpbmdXaWxkY2FyZHMgPT4gMCwgICAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMQogICAgKTsKCj1jdXQKCnN1YiBWZXJzaW9uU2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1VzaW5nV2lsZGNhcmRzfSApIHsKICAgICAgICAkUGFyYW17VXNpbmdXaWxkY2FyZHN9ID0gMTsKICAgIH0KCiAgICAjIHZlcmlmeSB0aGF0IGFsbCBwYXNzZWQgYXJyYXkgcGFyYW1ldGVycyBjb250YWluIGFuIGFycmF5cmVmCiAgICBBUkdVTUVOVDoKICAgIGZvciBteSAkQXJndW1lbnQgKAogICAgICAgIHF3KAogICAgICAgIE9yZGVyQnkKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uCiAgICAgICAgKQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSB8fD0gW107CgogICAgICAgICAgICBuZXh0IEFSR1VNRU5UOwogICAgICAgIH0KCiAgICAgICAgaWYgKCByZWYgJFBhcmFteyRBcmd1bWVudH0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRBcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgb3JkZXIgYW5kIG9yZGVyIGRpcmVjdGlvbgogICAgaWYgKCAhQHsgJFBhcmFte09yZGVyQnl9IH0gKSB7CiAgICAgICAgJFBhcmFte09yZGVyQnl9ID0gWydDb25maWdJdGVtSUQnXTsKICAgIH0KICAgIGlmICggIUB7ICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufSB9ICkgewogICAgICAgICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufSA9IFsnVXAnXTsKICAgIH0KCiAgICAjIGRlZmluZSBvcmRlciB0YWJsZQogICAgbXkgJU9yZGVyQnlUYWJsZSA9ICgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJ3ZyLmNvbmZpZ2l0ZW1faWQnLAogICAgICAgIE5hbWUgICAgICAgICA9PiAndnIubmFtZScsCiAgICAgICAgTnVtYmVyICAgICAgID0+ICdjaS5jb25maWdpdGVtX251bWJlcicsCiAgICAgICAgQ2xhc3NJRCAgICAgID0+ICdjaS5jbGFzc19pZCcsCiAgICAgICAgRGVwbFN0YXRlSUQgID0+ICd2ci5kZXBsX3N0YXRlX2lkJywKICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJ3ZyLmluY2lfc3RhdGVfaWQnLAogICAgICAgIENyZWF0ZVRpbWUgICA9PiAnY2kuY3JlYXRlX3RpbWUnLAogICAgICAgIENyZWF0ZUJ5ICAgICA9PiAnY2kuY3JlYXRlX2J5JywKCiAgICAgICAgIyB0aGUgY2hhbmdlIHRpbWUgb2YgdGhlIENJIGlzIHRoZSBzYW1lIGFzIHRoZSBjcmVhdGUgdGltZSBvZiB0aGUgdmVyc2lvbiEKICAgICAgICBDaGFuZ2VUaW1lID0+ICd2ci5jcmVhdGVfdGltZScsCgogICAgICAgIENoYW5nZUJ5ID0+ICdjaS5jaGFuZ2VfYnknLAogICAgKTsKCiAgICAjIGNoZWNrIGlmIE9yZGVyQnkgY29udGFpbnMgb25seSB1bmlxdWUgdmFsaWQgdmFsdWVzCiAgICBteSAlT3JkZXJCeVNlZW47CiAgICBmb3IgbXkgJE9yZGVyQnkgKCBAeyAkUGFyYW17T3JkZXJCeX0gfSApIHsKCiAgICAgICAgaWYgKCAhJE9yZGVyQnkgfHwgISRPcmRlckJ5VGFibGV7JE9yZGVyQnl9IHx8ICRPcmRlckJ5U2VlbnskT3JkZXJCeX0gKSB7CgogICAgICAgICAgICAjIGZvdW5kIGFuIGVycm9yCiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJPcmRlckJ5IGNvbnRhaW5zIGludmFsaWQgdmFsdWUgJyRPcmRlckJ5JyAiCiAgICAgICAgICAgICAgICAgICAgLiAnb3IgdGhlIHZhbHVlIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2UhJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyByZW1lbWJlciB0aGUgdmFsdWUgdG8gY2hlY2sgaWYgaXQgYXBwZWFycyBtb3JlIHRoYW4gb25jZQogICAgICAgICRPcmRlckJ5U2VlbnskT3JkZXJCeX0gPSAxOwogICAgfQoKICAgICMgY2hlY2sgaWYgT3JkZXJCeURpcmVjdGlvbiBhcnJheSBjb250YWlucyBvbmx5ICdVcCcgb3IgJ0Rvd24nCiAgICBESVJFQ1RJT046CiAgICBmb3IgbXkgJERpcmVjdGlvbiAoIEB7ICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufSB9ICkgewoKICAgICAgICAjIG9ubHkgJ1VwJyBvciAnRG93bicgYWxsb3dlZAogICAgICAgIG5leHQgRElSRUNUSU9OIGlmICREaXJlY3Rpb24gZXEgJ1VwJzsKICAgICAgICBuZXh0IERJUkVDVElPTiBpZiAkRGlyZWN0aW9uIGVxICdEb3duJzsKCiAgICAgICAgIyBmb3VuZCBhbiBlcnJvcgogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiT3JkZXJCeURpcmVjdGlvbiBjYW4gb25seSBjb250YWluICdVcCcgb3IgJ0Rvd24nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBhc3NlbWJsZSB0aGUgT1JERVIgQlkgY2xhdXNlCiAgICBteSBAU1FMT3JkZXJCeTsKICAgIG15ICRDb3VudCA9IDA7CiAgICBteSBAT3JkZXJCeVNlbGVjdENvbHVtbnM7CiAgICBmb3IgbXkgJE9yZGVyQnkgKCBAeyAkUGFyYW17T3JkZXJCeX0gfSApIHsKCiAgICAgICAgIyBzZXQgdGhlIGRlZmF1bHQgb3JkZXIgZGlyZWN0aW9uCiAgICAgICAgbXkgJERpcmVjdGlvbiA9ICdERVNDJzsKCiAgICAgICAgIyBhZGQgdGhlIGdpdmVuIG9yZGVyIGRpcmVjdGlvbgogICAgICAgIGlmICggJFBhcmFte09yZGVyQnlEaXJlY3Rpb259LT5bJENvdW50XSApIHsKICAgICAgICAgICAgaWYgKCAkUGFyYW17T3JkZXJCeURpcmVjdGlvbn0tPlskQ291bnRdIGVxICdVcCcgKSB7CiAgICAgICAgICAgICAgICAkRGlyZWN0aW9uID0gJ0FTQyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUGFyYW17T3JkZXJCeURpcmVjdGlvbn0tPlskQ291bnRdIGVxICdEb3duJyApIHsKICAgICAgICAgICAgICAgICREaXJlY3Rpb24gPSAnREVTQyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYWRkIFNRTAogICAgICAgIHB1c2ggQFNRTE9yZGVyQnksICAgICAgICAgICAiJE9yZGVyQnlUYWJsZXskT3JkZXJCeX0gJERpcmVjdGlvbiI7CiAgICAgICAgcHVzaCBAT3JkZXJCeVNlbGVjdENvbHVtbnMsICRPcmRlckJ5VGFibGV7JE9yZGVyQnl9OwoKICAgIH0KICAgIGNvbnRpbnVlIHsKICAgICAgICAkQ291bnQrKzsKICAgIH0KCiAgICAjIGdldCBsaWtlIGVzY2FwZSBzdHJpbmcgbmVlZGVkIGZvciBzb21lIGRhdGFiYXNlcyAoZS5nLiBvcmFjbGUpCiAgICBteSAkTGlrZUVzY2FwZVN0cmluZyA9ICRTZWxmLT57REJPYmplY3R9LT5HZXREYXRhYmFzZUZ1bmN0aW9uKCdMaWtlRXNjYXBlU3RyaW5nJyk7CgogICAgIyBhZGQgbmFtZSB0byBzcWwgd2hlcmUgYXJyYXkKICAgIG15IEBTUUxXaGVyZTsKICAgIGlmICggZGVmaW5lZCAkUGFyYW17TmFtZX0gJiYgZGVmaW5lZCAkUGFyYW17TmFtZX0gbmUgJycgKSB7CgogICAgICAgICMgZHVwbGljYXRlIHRoZSBuYW1lCiAgICAgICAgbXkgJE5hbWUgPSAkUGFyYW17TmFtZX07CgogICAgICAgICMgcXVvdGUKICAgICAgICAkTmFtZSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSgkTmFtZSk7CgogICAgICAgIGlmICggJFBhcmFte1VzaW5nV2lsZGNhcmRzfSApIHsKCiAgICAgICAgICAgICMgcHJlcGFyZSBsaWtlIHN0cmluZwogICAgICAgICAgICAkU2VsZi0+X1ByZXBhcmVMaWtlU3RyaW5nKCBcJE5hbWUgKTsKCiAgICAgICAgICAgIHB1c2ggQFNRTFdoZXJlLCAiTE9XRVIodnIubmFtZSkgTElLRSBMT1dFUignJE5hbWUnKSAkTGlrZUVzY2FwZVN0cmluZyI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBwdXNoIEBTUUxXaGVyZSwgIkxPV0VSKHZyLm5hbWUpID0gTE9XRVIoJyROYW1lJykiOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBhcnJheSBwYXJhbXMKICAgIG15ICVBcnJheVBhcmFtcyA9ICgKICAgICAgICBDbGFzc0lEcyAgICAgPT4gJ2NpLmlkID0gdnIuY29uZmlnaXRlbV9pZCBBTkQgY2kuY2xhc3NfaWQnLAogICAgICAgIERlcGxTdGF0ZUlEcyA9PiAndnIuZGVwbF9zdGF0ZV9pZCcsCiAgICAgICAgSW5jaVN0YXRlSURzID0+ICd2ci5pbmNpX3N0YXRlX2lkJywKICAgICk7CgogICAgQVJSQVlQQVJBTToKICAgIGZvciBteSAkQXJyYXlQYXJhbSAoIGtleXMgJUFycmF5UGFyYW1zICkgewoKICAgICAgICBuZXh0IEFSUkFZUEFSQU0gaWYgISRQYXJhbXskQXJyYXlQYXJhbX07CgogICAgICAgIGlmICggcmVmICRQYXJhbXskQXJyYXlQYXJhbX0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRBcnJheVBhcmFtIG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIG5leHQgQVJSQVlQQVJBTSBpZiAhQHsgJFBhcmFteyRBcnJheVBhcmFtfSB9OwoKICAgICAgICAjIHF1b3RlIGFzIGludGVnZXIKICAgICAgICBmb3IgbXkgJE9uZVBhcmFtICggQHsgJFBhcmFteyRBcnJheVBhcmFtfSB9ICkgewogICAgICAgICAgICAkT25lUGFyYW0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRPbmVQYXJhbSwgJ0ludGVnZXInICk7CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSBzdHJpbmcKICAgICAgICBteSAkSW5TdHJpbmcgPSBqb2luIHF7LCB9LCBAeyAkUGFyYW17JEFycmF5UGFyYW19IH07CgogICAgICAgIHB1c2ggQFNRTFdoZXJlLCAiJEFycmF5UGFyYW1zeyAkQXJyYXlQYXJhbSB9IElOICgkSW5TdHJpbmcpIjsKICAgIH0KCiAgICAjIGFkZCBwcmV2aW91cyB2ZXJzaW9uIHBhcmFtCiAgICBpZiAoICEkUGFyYW17UHJldmlvdXNWZXJzaW9uU2VhcmNofSApIHsKICAgICAgICBwdXNoIEBTUUxXaGVyZSwgJ2NpLmxhc3RfdmVyc2lvbl9pZCA9IHZyLmlkJzsKICAgIH0KCiAgICAjIGNyZWF0ZSB3aGVyZSBzdHJpbmcKICAgIG15ICRXaGVyZVN0cmluZyA9IEBTUUxXaGVyZSA/ICcgV0hFUkUgJyAuIGpvaW4gcXsgQU5EIH0sIEBTUUxXaGVyZSA6ICcnOwoKICAgICMgc2V0IGxpbWl0LCBxdW90ZSBhcyBpbnRlZ2VyCiAgICBpZiAoICRQYXJhbXtMaW1pdH0gKSB7CiAgICAgICAgJFBhcmFte0xpbWl0fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte0xpbWl0fSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgIyBhZGQgdGhlIG9yZGVyIGJ5IGNvbHVtbnMgYWxzbyB0byB0aGUgc2VsZWN0ZWQgY29sdW1ucwogICAgbXkgJE9yZGVyQnlTZWxlY3RTdHJpbmcgPSAnJzsKICAgIGlmIChAT3JkZXJCeVNlbGVjdENvbHVtbnMpIHsKICAgICAgICAkT3JkZXJCeVNlbGVjdFN0cmluZyA9IGpvaW4gJywgJywgQE9yZGVyQnlTZWxlY3RDb2x1bW5zOwogICAgICAgICRPcmRlckJ5U2VsZWN0U3RyaW5nID0gJywgJyAuICRPcmRlckJ5U2VsZWN0U3RyaW5nOwogICAgfQoKICAgICMgYnVpbGQgU1FMCiAgICBteSAkU1FMID0gIlNFTEVDVCBESVNUSU5DVCB2ci5jb25maWdpdGVtX2lkICRPcmRlckJ5U2VsZWN0U3RyaW5nICIKICAgICAgICAuICdGUk9NIGNvbmZpZ2l0ZW0gY2ksIGNvbmZpZ2l0ZW1fdmVyc2lvbiB2ciAnCiAgICAgICAgLiAkV2hlcmVTdHJpbmc7CgogICAgIyBhZGQgdGhlIE9SREVSIEJZIGNsYXVzZQogICAgaWYgKEBTUUxPcmRlckJ5KSB7CiAgICAgICAgJFNRTCAuPSAnIE9SREVSIEJZICc7CiAgICAgICAgJFNRTCAuPSBqb2luICcsICcsIEBTUUxPcmRlckJ5OwogICAgICAgICRTUUwgLj0gJyAnOwogICAgfQoKICAgICMgYXNrIHRoZSBkYXRhYmFzZQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICBMaW1pdCA9PiAkUGFyYW17TGltaXR9LAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBDb25maWdJdGVtTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAQ29uZmlnSXRlbUxpc3QsICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIFxAQ29uZmlnSXRlbUxpc3Q7Cn0KCj1iZWdpbiBJbnRlcm5hbDoKCj1pdGVtIF9HZXRFdmVudHMoKQoKVGhpcyBtZXRob2QgY2hlY2tzIHdoYXQgdmFsdWVzIHdlcmUgY2hhbmdlZCBhbmQgd2hhdCBldmVudHMgaGF2ZSB0byBiZSB0cmlnZ2VyZWQuCkl0IHJldHVybnMgYSBoYXNoIHJlZmVyZW5jZSB3aXRoIGFsbCBldmVudCBuYW1lcyBhcyBrZXlzIHRoYXQgc2hvdWxkIGJlIHRyaWdnZXJlZC4KCiAgICBteSAkRXZlbnRzID0gJENJT2JqZWN0LT5fR2V0RXZlbnRzKAogICAgICAgIFBhcmFtID0+IHsKICAgICAgICAgICAgRGVwbFN0YXRlSUQgPT4gMTIzLAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnSXRlbUluZm8gPT4gewogICAgICAgICAgICBEZXBsU3RhdGVJRCA9PiAyMzQsCiAgICAgICAgfSwKICAgICk7CgogICAgcHJpbnQga2V5cyAleyRFdmVudHN9OyAjIHByaW50cyAiRGVwbG95bWVudFN0YXRlVXBkYXRlIgoKPWN1dAoKc3ViIF9HZXRFdmVudHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KENvbmZpZ0l0ZW1JbmZvIFBhcmFtKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRFdmVudHMgPSB7fTsKCiAgICAjIGNoZWNrIG9sZCBhbmQgbmV3IG5hbWUKICAgIG15ICRPbGROYW1lID0gJFBhcmFte0NvbmZpZ0l0ZW1JbmZvfS0+e05hbWV9IHx8ICcnOwogICAgbXkgJE5ld05hbWUgPSAkUGFyYW17UGFyYW19LT57TmFtZX0gICAgICAgICAgfHwgJyc7CgogICAgaWYgKCAkT2xkTmFtZSBuZSAkTmV3TmFtZSApIHsKICAgICAgICAkRXZlbnRzLT57TmFtZVVwZGF0ZX0gPSAkTmV3TmFtZSAuICclJScgLiAkT2xkTmFtZTsKICAgIH0KCiAgICAjIGlmIGRlcGxfc3RhdGUgaXMgdXBkYXRlZAogICAgbXkgJExhc3REZXBsU3RhdGVJRCA9ICRQYXJhbXtDb25maWdJdGVtSW5mb30tPntEZXBsU3RhdGVJRH0gfHwgJyc7CiAgICBteSAkQ3VyRGVwbFN0YXRlSUQgID0gJFBhcmFte1BhcmFtfS0+e0RlcGxTdGF0ZUlEfSAgICAgICAgICB8fCAnJzsKCiAgICBpZiAoICRMYXN0RGVwbFN0YXRlSUQgbmUgJEN1ckRlcGxTdGF0ZUlEICkgewogICAgICAgICRFdmVudHMtPntEZXBsb3ltZW50U3RhdGVVcGRhdGV9ID0gJEN1ckRlcGxTdGF0ZUlEIC4gJyUlJyAuICRMYXN0RGVwbFN0YXRlSUQ7CiAgICB9CgogICAgIyBpZiBpbmNpc3RhdGUgaXMgdXBkYXRlZAogICAgbXkgJExhc3RJbmNpU3RhdGVJRCA9ICRQYXJhbXtDb25maWdJdGVtSW5mb30tPntJbmNpU3RhdGVJRH0gfHwgJyc7CiAgICBteSAkQ3VySW5jaVN0YXRlSUQgID0gJFBhcmFte1BhcmFtfS0+e0luY2lTdGF0ZUlEfSAgICAgICAgICB8fCAnJzsKCiAgICBpZiAoICRMYXN0SW5jaVN0YXRlSUQgbmUgJEN1ckluY2lTdGF0ZUlEICkgewogICAgICAgICRFdmVudHMtPntJbmNpZGVudFN0YXRlVXBkYXRlfSA9ICRDdXJJbmNpU3RhdGVJRCAuICclJScgLiAkTGFzdEluY2lTdGF0ZUlEOwogICAgfQoKICAgICMgY2hlY2sgb2xkIGFuZCBuZXcgZGVmaW5pdGlvbl9pZAogICAgbXkgJE9sZERlZmluaXRpb25JRCA9ICRQYXJhbXtDb25maWdJdGVtSW5mb30tPntEZWZpbml0aW9uSUR9IHx8ICcnOwogICAgbXkgJE5ld0RlZmluaXRpb25JRCA9ICRQYXJhbXtQYXJhbX0tPntEZWZpbml0aW9uSUR9ICAgICAgICAgIHx8ICcnOwoKICAgIGlmICggJE9sZERlZmluaXRpb25JRCBuZSAkTmV3RGVmaW5pdGlvbklEICkgewogICAgICAgICRFdmVudHMtPntEZWZpbml0aW9uVXBkYXRlfSA9ICROZXdEZWZpbml0aW9uSUQ7CiAgICB9CgogICAgIyBjaGVjayBmb3IgY2hhbmdlcyBpbiBYTUwgZGF0YQogICAgaWYgKCAkUGFyYW17UGFyYW19LT57WE1MRGF0YX0gJiYgcmVmICRQYXJhbXtQYXJhbX0tPntYTUxEYXRhfSBlcSAnQVJSQVknICkgewogICAgICAgIG15ICVVcGRhdGVWYWx1ZXMgPSAkU2VsZi0+X0ZpbmRDaGFuZ2VkWE1MVmFsdWVzKAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte1BhcmFtfS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIE5ld1hNTERhdGEgICA9PiAkUGFyYW17UGFyYW19LT57WE1MRGF0YX0sCiAgICAgICAgKTsKICAgICAgICBpZiAoIGtleXMgJVVwZGF0ZVZhbHVlcyApIHsKICAgICAgICAgICAgJEV2ZW50cy0+e1ZhbHVlVXBkYXRlfSA9IFwlVXBkYXRlVmFsdWVzOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJEV2ZW50czsKfQoKPWl0ZW0gX0V2ZW50SGFuZGxlckZvckNoYW5nZWRYTUxWYWx1ZXMoKQoKVGhpcyBtZXRob2QgY2FsbHMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIGVhY2ggY2hhbmdlZCB2YWx1ZSBvZiB0aGUgY29uZmlnIGl0ZW0uClRoZSBjaGFuZ2VkIHZhbHVlcyBhcmUgcGFzc2VkIGluIEM8VXBkYXRlVmFsdWVzPiBhcyBhbiBoYXNocmVmIHdpdGggdGFna2V5cyBhcyBrZXlzLgpQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgb25seSBoYW5kbGVzIHZhbHVlcyBpbnNpZGUgdGhlIFhNTCBzdHJ1Y3R1cmUsIG5vdCBnZW5lcmFsCmF0dHJpYnV0ZXMgbGlrZSBDPEN1ckluY2lTdGF0ZT4uCgogICAgbXkgJFN1Y2Nlc3MgPSAkQ29uZmlnSXRlbU9iamVjdC0+X0V2ZW50SGFuZGxlckZvckNoYW5nZWRYTUxWYWx1ZXMoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+IDEyMywKICAgICAgICBVcGRhdGVWYWx1ZXMgPT4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J1ZlbmRvcid9WzFdIiA9PiAnT2xkVmVuZG9yJSVOZXdWZW5kb3InLAogICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J1R5cGUnfVsxXSIgICA9PiAnMTI3JSUxMjgnLAogICAgICAgICAgICB9CiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIF9FdmVudEhhbmRsZXJGb3JDaGFuZ2VkWE1MVmFsdWVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhVcGRhdGVWYWx1ZXMgQ29uZmlnSXRlbUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRyaWdnZXIgVmFsdWVVcGRhdGUgZXZlbnQgZm9yIGVhY2ggY2hhbmdlZCB2YWx1ZQogICAgZm9yIG15ICRLZXkgKCBrZXlzICV7ICRQYXJhbXtVcGRhdGVWYWx1ZXN9IH0gKSB7CiAgICAgICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICAgICAgRXZlbnQgPT4gJ1ZhbHVlVXBkYXRlJywKICAgICAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICAgICAgQ29tbWVudCAgICAgID0+ICRLZXkgLiAnJSUnIC4gJFBhcmFte1VwZGF0ZVZhbHVlc30tPnskS2V5fSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9GaW5kQ2hhbmdlZFhNTFZhbHVlcygpCgpjb21wYXJlcyB0aGUgbmV3IHhtbCBkYXRhIEM8TmV3WE1MRGF0YT4gd2l0aCB0aGUgeG1sIGRhdGEgb2YgdGhlIGxhdGVzdCB2ZXJzaW9uCm9mIHRoZSBjb25maWcgaXRlbSBDPENvbmZpZ0l0ZW1JRD4uIE5vdGUgdGhhdCB0aGUgbmV3IFhNTCBkYXRhIGRvZXMgbm90IGNvbnRhaW4gdGFnIGtleXMuCkFsbCB2YWx1ZXMgb2YgdGhlIHR3byBkYXRhIHNldHMgYXJlIGNvbXBhcmVkLgpXaGVuIGEgY2hhbmdlZCB2YWx1ZSBpcyBlbmNvdW50ZXJlZCwgdGhlIHRhZyBrZXkgYW5kIHRoZSBvbGQgYW5kIHRoZSBuZXcgdmFsdWUgYXJlIHN0b3JlZCBpbiBhIGhhc2guClRoZSBoYXNoIHdpdGggdGhlIHVwZGF0YSB2YWx1ZXMgaXMgcmV0dXJuZWQuCgogICAgbXkgJVVwZGF0ZVZhbHVlcyA9ICRDb25maWdJdGVtT2JqZWN0LT5fRmluZENoYW5nZWRYTUxWYWx1ZXMoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+IDEyMywKICAgICAgICBOZXdYTUxEYXRhICAgPT4KICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJ1ZlcnNpb24nID0+CiAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdPd25lcicgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQnID0+ICcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICk7CgpUaGUgcmV0dXJuZWQgaGFzaCBsb29rcyBsaWtlOgoKICAgICVVcGRhdGVWYWx1ZXMgPSAoCiAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J1ZlbmRvcid9WzFdIiA9PiAnT2xkVmVuZG9yJSVOZXdWZW5kb3InLAogICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeydUeXBlJ31bMV0iICAgPT4gJzEyNyUlMTI4JywKICAgICk7CgpUaGUga2V5IGlzIGEgdGFnIGtleS4gVGhlIHZhbHVlcyBjb250YWlucyB0aGUgb2xkIGFuZCB0aGUgbmV3IFhNTCB2YWx1ZS4KCj1jdXQKCnN1YiBfRmluZENoYW5nZWRYTUxWYWx1ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIGZvciBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhDb25maWdJdGVtSUQgTmV3WE1MRGF0YSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBhIGxpc3Qgd2l0aCBhbGwgdmVyc2lvbm51bWJlcnMgdGhhdCBleGlzdCBmb3IgdGhlCiAgICAjIGdpdmVuIGNvbmZpZyBpdGVtCiAgICBteSAkVmVyc2lvbkxpc3QgPSAkU2VsZi0+VmVyc2lvbkxpc3QoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgKTsKCiAgICAjIHNraXAgdGhlIGNoZWNrIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHZlcnNpb24gb2YgdGhlIGl0ZW0KICAgIHJldHVybiBpZiAhQHskVmVyc2lvbkxpc3R9OwoKICAgICMgZ2V0IG9sZCB2ZXJzaW9uCiAgICBteSAkT2xkVmVyc2lvbiA9ICRTZWxmLT5WZXJzaW9uR2V0KAogICAgICAgIFZlcnNpb25JRCA9PiAkVmVyc2lvbkxpc3QtPlstMV0sCiAgICApOwoKICAgICMgdGhlIHNob3J0IG5hbWVzIGZvciBuZXcgYW5kIG9sZCB4bWwgZGF0YSBhcmUgdXNlZCBpbiB0aGUgJ2V2YWwnIGJlbG93CiAgICBteSAkTmV3WE1MRGF0YSA9ICRQYXJhbXtOZXdYTUxEYXRhfTsKICAgIG15ICRPbGRYTUxEYXRhID0gJE9sZFZlcnNpb24tPntYTUxEYXRhfTsKCiAgICAjIGdldCBhbGwgdGFna2V5cyBpbiBuZXcgYW5kIG9sZCBYTUwgZGF0YQogICAgIyB1c2UgYSBzaWRlIGVmZmVjdCBvZiBYTUxIYXNoMkQoKSwgd2hpY2ggYWRkcyB0aGUgdGFnIGtleXMgdG8gdGhlIHBhc3NlZCBpbiBkYXRhIHN0cnVjdHVyZQogICAgJFNlbGYtPntYTUxPYmplY3R9LT5YTUxIYXNoMkQoIFhNTEhhc2ggPT4gJE5ld1hNTERhdGEgKTsKICAgIG15IEBUYWdLZXlzID0gJFNlbGYtPl9HcmFiVGFnS2V5cyggRGF0YSA9PiBbICRPbGRYTUxEYXRhLCAkTmV3WE1MRGF0YSBdICk7CgogICAgIyBnZXQgYW4gdW5pcXVlIGxpc3Qgb2YgYWxsIHRhZyBrZXlzCiAgICBteSAlVW5pcXVlVGFnS2V5cyA9IG1hcCB7ICRfID0+IDEgfSBAVGFnS2V5czsKCiAgICAjIGRvIHRoZSBjaGVjawogICAgbXkgJVVwZGF0ZVZhbHVlczsKICAgIGZvciBteSAkVGFnS2V5ICggc29ydCBrZXlzICVVbmlxdWVUYWdLZXlzICkgewogICAgICAgIG15ICROZXdDb250ZW50ID0gZXZhbCAnJE5ld1hNTERhdGEtPicgLiAkVGFnS2V5IC4gJy0+e0NvbnRlbnR9JyB8fCAnJzsKICAgICAgICBteSAkT2xkQ29udGVudCA9IGV2YWwgJyRPbGRYTUxEYXRhLT4nIC4gJFRhZ0tleSAuICctPntDb250ZW50fScgfHwgJyc7CgogICAgICAgIGlmICggJE5ld0NvbnRlbnQgbmUgJE9sZENvbnRlbnQgKSB7CgogICAgICAgICAgICAjIGEgY2hhbmdlIHdhcyBmb3VuZAogICAgICAgICAgICAkVXBkYXRlVmFsdWVzeyRUYWdLZXl9ID0gam9pbiAnJSUnLCAkT2xkQ29udGVudCwgJE5ld0NvbnRlbnQ7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlVXBkYXRlVmFsdWVzOwp9Cgo9aXRlbSBfR3JhYlRhZ0tleXMoKQoKcmVjdXJzaXZlbHkgc2NhbnMgYSBwZXJsIGRhdGFzdHJ1Y3R1cmUgZm9yIHRoZSBoYXNoIGtleSAnVGFnS2V5JyBhbmQgcmV0dXJucyBhCmxpc3Qgb2YgYWxsIHRoZSB2YWx1ZXMgZm9yIHRoYXQga2V5LgoKICAgIG15IEBUYWdLZXlzID0gJENvbmZpZ0l0ZW1PYmplY3QtPl9HcmFiVGFnS2V5cygKICAgICAgICBEYXRhID0+ICRYTUxIYXNoUmVmZXJlbnosCiAgICApOwoKPWN1dAoKc3ViIF9HcmFiVGFnS2V5cyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAoKSBpZiAhJFBhcmFte0RhdGF9OwoKICAgIG15IEBUYWdLZXlzOwogICAgaWYgKCByZWYgJFBhcmFte0RhdGF9IGVxICdBUlJBWScgKSB7CgogICAgICAgIEVMRU06CiAgICAgICAgZm9yIG15ICRFbGVtICggQHsgJFBhcmFte0RhdGF9IH0gKSB7CgogICAgICAgICAgICBuZXh0IEVMRU0gaWYgISRFbGVtOwogICAgICAgICAgICBuZXh0IEVMRU0gaWYgIXJlZiAkRWxlbTsKCiAgICAgICAgICAgIHB1c2ggQFRhZ0tleXMsICRTZWxmLT5fR3JhYlRhZ0tleXMoIERhdGEgPT4gJEVsZW0gKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoIHJlZiAkUGFyYW17RGF0YX0gZXEgJ0hBU0gnICkgewoKICAgICAgICBmb3IgbXkgJEtleSAoIGtleXMgJXsgJFBhcmFte0RhdGF9IH0gKSB7CgogICAgICAgICAgICBpZiAoICRLZXkgZXEgJ1RhZ0tleScgKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBUYWdLZXlzLCAkUGFyYW17RGF0YX0tPnskS2V5fTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoIHJlZiAkUGFyYW17RGF0YX0tPnskS2V5fSApIHsKICAgICAgICAgICAgICAgIHB1c2ggQFRhZ0tleXMsICRTZWxmLT5fR3JhYlRhZ0tleXMoIERhdGEgPT4gJFBhcmFte0RhdGF9LT57JEtleX0gKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gQFRhZ0tleXM7Cn0KCjE7Cgo9ZW5kIEludGVybmFsOgoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vWE1MLnBtIC0gc3ViIG1vZHVsZSBvZiBJVFNNQ29uZmlnSXRlbS5wbSB3aXRoIHhtbCBmdW5jdGlvbnMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MIC0gc3ViIG1vZHVsZSBvZiBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0KCj1oZWFkMSBTWU5PUFNJUwoKQWxsIHhtbCBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gWE1MVmFsdWVMb29rdXAoKQoKbG9va3VwIGEgeG1sIHZhbHVlCgogICAgbXkgJFZhbHVlID0gJENvbmZpZ0l0ZW1PYmplY3QtPlhNTFZhbHVlTG9va3VwKAogICAgICAgIEl0ZW0gID0+ICRJdGVtUmVmLAogICAgICAgIFZhbHVlID0+IDUsCiAgICApOwoKPWN1dAoKc3ViIFhNTFZhbHVlTG9va3VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSB8fCAoICRQYXJhbXtJdGVtfSAmJiByZWYgJFBhcmFte0l0ZW19IG5lICdIQVNIJyApICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBJdGVtIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb2FkIGJhY2tlbmQKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJFNlbGYtPl9Mb2FkWE1MVHlwZUJhY2tlbmQoCiAgICAgICAgVHlwZSA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUeXBlfSwKICAgICk7CgogICAgcmV0dXJuICcnIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIGxvb2t1cCBpdGVtIHZhbHVlCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+VmFsdWVMb29rdXAoJVBhcmFtKTsKCiAgICByZXR1cm4gJFZhbHVlOwp9Cgo9aXRlbSBYTUxTdGF0c0F0dHJpYnV0ZUNyZWF0ZSgpCgpjcmVhdGUgYSBhdHRyaWJ1dGUgYXJyYXkgZm9yIHRoZSBzdGF0cyBmcmFtZXdvcmsKCiAgICBteSAkVmFsdWUgPSAkQ29uZmlnSXRlbU9iamVjdC0+WE1MU3RhdHNBdHRyaWJ1dGVDcmVhdGUoCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgWE1MU3RhdHNBdHRyaWJ1dGVDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0l0ZW19ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBJdGVtIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb2FkIGJhY2tlbmQKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJFNlbGYtPl9Mb2FkWE1MVHlwZUJhY2tlbmQoCiAgICAgICAgVHlwZSA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUeXBlfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIGNyZWF0ZSBzdGF0cyBhdHRyaWJ1dGUgYXJyYXkKICAgIG15ICRBdHRyaWJ1dGUgPSAkQmFja2VuZE9iamVjdC0+U3RhdHNBdHRyaWJ1dGVDcmVhdGUoJVBhcmFtKTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZTsKfQoKPWl0ZW0gWE1MRXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgeG1sIHNlYXJjaCBkYXRhIGZvciBleHBvcnQKCiAgICBteSAkQXJyYXlSZWYgPSAkQ29uZmlnSXRlbU9iamVjdC0+WE1MRXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKAogICAgICAgIEl0ZW0gID0+ICRJdGVtUmVmLAogICAgICAgIFZhbHVlID0+IDUsCiAgICApOwoKPWN1dAoKc3ViIFhNTEV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17SXRlbX0gfHwgKCAkUGFyYW17SXRlbX0gJiYgcmVmICRQYXJhbXtJdGVtfSBuZSAnSEFTSCcgKSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9hZCBiYWNrZW5kCiAgICBteSAkQmFja2VuZE9iamVjdCA9ICRTZWxmLT5fTG9hZFhNTFR5cGVCYWNrZW5kKAogICAgICAgIFR5cGUgPT4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHlwZX0sCiAgICApOwoKICAgIHJldHVybiBpZiAhJEJhY2tlbmRPYmplY3Q7CgogICAgIyBwcmVwYXJlIHZhbHVlCiAgICBteSAkQXJyYXkgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKCVQYXJhbSk7CgogICAgcmV0dXJuICRBcnJheTsKfQoKPWl0ZW0gWE1MRXhwb3J0VmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgeG1sIGRhdGEgZm9yIGV4cG9ydAoKICAgIG15ICRWYWx1ZSA9ICRDb25maWdJdGVtT2JqZWN0LT5YTUxFeHBvcnRWYWx1ZVByZXBhcmUoCiAgICAgICAgSXRlbSAgPT4gJEl0ZW1SZWYsCiAgICAgICAgVmFsdWUgPT4gNSwKICAgICk7Cgo9Y3V0CgpzdWIgWE1MRXhwb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSB8fCAoICRQYXJhbXtJdGVtfSAmJiByZWYgJFBhcmFte0l0ZW19IG5lICdIQVNIJyApICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBJdGVtIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb2FkIGJhY2tlbmQKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJFNlbGYtPl9Mb2FkWE1MVHlwZUJhY2tlbmQoCiAgICAgICAgVHlwZSA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUeXBlfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIHByZXBhcmUgdmFsdWUKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5FeHBvcnRWYWx1ZVByZXBhcmUoJVBhcmFtKTsKCiAgICByZXR1cm4gJFZhbHVlOwp9Cgo9aXRlbSBYTUxJbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSB4bWwgc2VhcmNoIGRhdGEgZm9yIGltcG9ydAoKICAgIG15ICRBcnJheVJlZiA9ICRDb25maWdJdGVtT2JqZWN0LT5YTUxJbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoCiAgICAgICAgSXRlbSAgPT4gJEl0ZW1SZWYsCiAgICAgICAgVmFsdWUgPT4gNSwKICAgICk7Cgo9Y3V0CgpzdWIgWE1MSW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSB8fCAoICRQYXJhbXtJdGVtfSAmJiByZWYgJFBhcmFte0l0ZW19IG5lICdIQVNIJyApICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBJdGVtIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb2FkIGJhY2tlbmQKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJFNlbGYtPl9Mb2FkWE1MVHlwZUJhY2tlbmQoCiAgICAgICAgVHlwZSA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUeXBlfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIHByZXBhcmUgdmFsdWUKICAgIG15ICRBcnJheSA9ICRCYWNrZW5kT2JqZWN0LT5JbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoJVBhcmFtKTsKCiAgICByZXR1cm4gJEFycmF5Owp9Cgo9aXRlbSBYTUxJbXBvcnRWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSB4bWwgZGF0YSBmb3IgaW1wb3J0CgogICAgbXkgJFZhbHVlID0gJENvbmZpZ0l0ZW1PYmplY3QtPlhNTEltcG9ydFZhbHVlUHJlcGFyZSgKICAgICAgICBJdGVtICA9PiAkSXRlbVJlZiwKICAgICAgICBWYWx1ZSA9PiA1LAogICAgKTsKCj1jdXQKCnN1YiBYTUxJbXBvcnRWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0l0ZW19IHx8IHJlZiAkUGFyYW17SXRlbX0gbmUgJ0hBU0gnICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBJdGVtIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb2FkIGJhY2tlbmQKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJFNlbGYtPl9Mb2FkWE1MVHlwZUJhY2tlbmQoCiAgICAgICAgVHlwZSA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUeXBlfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIHByZXBhcmUgdmFsdWUKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5JbXBvcnRWYWx1ZVByZXBhcmUoJVBhcmFtKTsKCiAgICByZXR1cm4gJFZhbHVlOwp9Cgo9aXRlbSBfWE1MVmVyc2lvblNlYXJjaCgpCgpTZWFyY2ggeG1sIGRhdGEgb2YgYSB2ZXJzaW9uIGFuZCByZXR1cm4gYSBoYXNoIHJlZmVyZW5jZS4KVGhlIEM8V2hhdD4gcGFyYW1ldGVyIGlzIGEgYml0IGxpa2UgdGhlIHBhcmFtZXRlciB1c2VkIGluIEw8U1FMOjpBYnN0cmFjdD4uClRoZSByZXR1cm5lZCBoYXNoIHJlZmVyZW5jZSBoYXMgQzxWZXJzaW9uSUQ+cyBhcyBrZXlzIGFuZCBDPDE+IGFzIHZhbHVlLgoKICAgIG15ICRWZXJzaW9uSURzID0gJENvbmZpZ0l0ZW1PYmplY3QtPl9YTUxWZXJzaW9uU2VhcmNoKAogICAgICAgIENsYXNzSURzID0+IFsxLCAyLCAzXSwgICMgKG9wdGlvbmFsKQoKICAgICAgICBXaGF0ID0+IFsKICAgICAgICAgICAgIyBlYWNoIGFycmF5IGVsZW1lbnQgaXMgYSBhbmQgY29uZGl0aW9uCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICMgb3IgY29uZGl0aW9uIGluIGhhc2gKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJCJ31bJV17J0NvbnRlbnQnfSIgPT4gJyVjb250ZW50QSUnLAogICAgICAgICAgICAgICAgIlslXXsnVmVyc2lvbid9WyVdeydDb25maWdJdGVtQXR0ckMnfVslXXsnQ29udGVudCd9IiA9PiAnJWNvbnRlbnRBJScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJCJ31bJV17J0NvbnRlbnQnfSIgPT4gJyVjb250ZW50QiUnLAogICAgICAgICAgICAgICAgIlslXXsnVmVyc2lvbid9WyVdeydDb25maWdJdGVtQXR0ckMnfVslXXsnQ29udGVudCd9IiA9PiAnJWNvbnRlbnRCJScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICMgdXNlIGFycmF5IHJlZmVyZW5jZSBpZiBkaWZmZXJlbnQgY29udGVudCB3aXRoIHNhbWUga2V5IHdhcyBzZWFyY2hlZAogICAgICAgICAgICAgICAgIlslXXsnVmVyc2lvbid9WyVdeydDb25maWdJdGVtQXR0ckInfVslXXsnQ29udGVudCd9IiA9PiBbCiAgICAgICAgICAgICAgICAgICAgJyVjb250ZW50QyUnLAogICAgICAgICAgICAgICAgICAgICclY29udGVudEQlJywKICAgICAgICAgICAgICAgICAgICAnJWNvbnRlbnRFJScsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIlslXXsnVmVyc2lvbid9WyVdeydDb25maWdJdGVtQXR0ckMnfVslXXsnQ29udGVudCd9IiA9PiBbCiAgICAgICAgICAgICAgICAgICAgJyVjb250ZW50QyUnLAogICAgICAgICAgICAgICAgICAgICclY29udGVudEQlJywKICAgICAgICAgICAgICAgICAgICAnJWNvbnRlbnRFJScsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAjIHVzZSBoYXNoIHJlZmVyZW5jZSBmb3Igc3BlY2lmeWluZyBjb21wYXJpc29uIG9wcywgYXBhcnQgZnJvbSB0aGUgZGVmYXVsdCAnTElLRScKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJCJ31bJV17J0NvbnRlbnQnfSIgPT4geyAnPCcgICAgICAgID0+ICdhbHBoYWJldGljYWxseV9sb3dlcl9vcl9lcXVhbCcgfSwKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJCJ31bJV17J0NvbnRlbnQnfSIgPT4geyAnPD0nICAgICAgID0+ICdhbHBoYWJldGljYWxseV9sZXNzX29yX2VxdWFsJyB9LAogICAgICAgICAgICAgICAgIlslXXsnVmVyc2lvbid9WyVdeydDb25maWdJdGVtQXR0ckInfVslXXsnQ29udGVudCd9IiA9PiB7ICc9JyAgICAgICAgPT4gJ2V4YWN0X21hdGNoJyB9LAogICAgICAgICAgICAgICAgIlslXXsnVmVyc2lvbid9WyVdeydDb25maWdJdGVtQXR0ckInfVslXXsnQ29udGVudCd9IiA9PiB7ICc+PScgICAgICAgPT4gJ2FscGhhYmV0aWNhbGx5X2xhcmdlcl9vcl9lcXVhbCcgfSwKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJCJ31bJV17J0NvbnRlbnQnfSIgPT4geyAnPicgICAgICAgID0+ICdhbHBoYWJldGljYWxseV9sYXJnZXInIH0sCiAgICAgICAgICAgICAgICAiWyVdeydWZXJzaW9uJ31bJV17J0NvbmZpZ0l0ZW1BdHRyQid9WyVdeydDb250ZW50J30iID0+IHsgJy1iZXR3ZWVuJyA9PiBbICdsb3dlcl9ib3VuZCcsICd1cHBlcl9ib3VuZCcgXSB9LAogICAgICAgICAgICB9LAogICAgICAgIF0sCgogICAgICAgIFByZXZpb3VzVmVyc2lvblNlYXJjaCA9PiAxLCAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMCAoMHwxKQogICAgKTsKCj1jdXQKCnN1YiBfWE1MVmVyc2lvblNlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17V2hhdH0gfHwgcmVmICRQYXJhbXtXaGF0fSBuZSAnQVJSQVknICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBXaGF0IGFzIGFycmF5IHJlZmVyZW5jZSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggISRQYXJhbXtDbGFzc0lEc30gfHwgcmVmICRQYXJhbXtDbGFzc0lEc30gbmUgJ0FSUkFZJyB8fCAhQHsgJFBhcmFte0NsYXNzSURzfSB9ICkgewoKICAgICAgICAjIGdldCBjbGFzcyBsaXN0CiAgICAgICAgbXkgJENsYXNzTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICAgICApOwoKICAgICAgICBAeyAkUGFyYW17Q2xhc3NJRHN9IH0gPSBrZXlzICV7JENsYXNzTGlzdH07CiAgICB9CgogICAgIyBzZWFyY2ggaW4gYWN0aXZlIHZlcnNpb25zCiAgICBteSAlVmVyc2lvbklEczsKICAgIGZvciBteSAkQ2xhc3NJRCAoIEB7ICRQYXJhbXtDbGFzc0lEc30gfSApIHsKCiAgICAgICAgIyBzdGFydCB4bWwgc2VhcmNoCiAgICAgICAgbXkgQEtleXMgPSAkU2VsZi0+X1hNTEhhc2hTZWFyY2goCiAgICAgICAgICAgIFR5cGUgPT4gIklUU006OkNvbmZpZ0l0ZW06OiRDbGFzc0lEIiwKICAgICAgICAgICAgV2hhdCA9PiAkUGFyYW17V2hhdH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgYWxsIGlkcyB0byB2ZXJzaW9uIGlkIGhhc2gKICAgICAgICBmb3IgbXkgJFZlcnNpb25JRCAoQEtleXMpIHsKICAgICAgICAgICAgJFZlcnNpb25JRHN7JFZlcnNpb25JRH0gPSAxOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXCVWZXJzaW9uSURzIGlmICEkUGFyYW17UHJldmlvdXNWZXJzaW9uU2VhcmNofTsKCiAgICAjIHNlYXJjaCBhbHNvIGluIG9sZCB2ZXJzaW9ucyAoYXJjaGl2KQogICAgZm9yIG15ICRDbGFzc0lEICggQHsgJFBhcmFte0NsYXNzSURzfSB9ICkgewoKICAgICAgICAjIHN0YXJ0IHhtbCBzZWFyY2gKICAgICAgICBteSBAS2V5cyA9ICRTZWxmLT5fWE1MSGFzaFNlYXJjaCgKICAgICAgICAgICAgVHlwZSA9PiAiSVRTTTo6Q29uZmlnSXRlbTo6QXJjaGl2OjokQ2xhc3NJRCIsCiAgICAgICAgICAgIFdoYXQgPT4gJFBhcmFte1doYXR9LAogICAgICAgICk7CgogICAgICAgICMgYWRkIGFsbCBpZHMgdG8gdmVyc2lvbiBpZCBoYXNoCiAgICAgICAgZm9yIG15ICRWZXJzaW9uSUQgKEBLZXlzKSB7CiAgICAgICAgICAgICRWZXJzaW9uSURzeyRWZXJzaW9uSUR9ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFwlVmVyc2lvbklEczsKfQoKPWl0ZW0gX1hNTFZlcnNpb25HZXQoKQoKZ2V0IHRoZSB4bWwgZGF0YSBvZiBhIHZlcnNpb24KCiAgICBteSAkQXJyYXlSZWYgPSAkQ29uZmlnSXRlbU9iamVjdC0+X1hNTFZlcnNpb25HZXQoCiAgICAgICAgQ2xhc3NJRCAgID0+IDEsCiAgICAgICAgVmVyc2lvbklEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgX1hNTFZlcnNpb25HZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2xhc3NJRCBWZXJzaW9uSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdmVyc2lvbgogICAgbXkgQFhNTCA9ICRTZWxmLT57WE1MT2JqZWN0fS0+WE1MSGFzaEdldCgKICAgICAgICBUeXBlID0+ICJJVFNNOjpDb25maWdJdGVtOjokUGFyYW17Q2xhc3NJRH0iLAogICAgICAgIEtleSAgPT4gJFBhcmFte1ZlcnNpb25JRH0sCiAgICApOwoKICAgIHJldHVybiBcQFhNTCBpZiBAWE1MOwoKICAgICMgZ2V0IHZlcnNpb24gZnJvbSBhcmNoaXYKICAgIEBYTUwgPSAkU2VsZi0+e1hNTE9iamVjdH0tPlhNTEhhc2hHZXQoCiAgICAgICAgVHlwZSA9PiAiSVRTTTo6Q29uZmlnSXRlbTo6QXJjaGl2OjokUGFyYW17Q2xhc3NJRH0iLAogICAgICAgIEtleSAgPT4gJFBhcmFte1ZlcnNpb25JRH0sCiAgICApOwoKICAgIHJldHVybiBcQFhNTDsKfQoKPWl0ZW0gX1hNTFZlcnNpb25BZGQoKQoKYWRkIHRoZSB4bWwgZGF0YSBvZiBhIG5ldyB2ZXJzaW9uIGFuZCBtb3ZlIG9sZCB4bWwgdmVyc2lvbnMgaW4gYXJjaGl2IGNsYXNzCgogICAgbXkgJFhNTElEID0gJENvbmZpZ0l0ZW1PYmplY3QtPl9YTUxWZXJzaW9uQWRkKAogICAgICAgIENsYXNzSUQgICAgICA9PiAxLAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAyMjIsCiAgICAgICAgVmVyc2lvbklEICAgID0+IDEyMywKICAgICAgICBYTUxEYXRhICAgICAgPT4gJEFycmF5UmVmLAogICAgKTsKCj1jdXQKCnN1YiBfWE1MVmVyc2lvbkFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDbGFzc0lEIENvbmZpZ0l0ZW1JRCBWZXJzaW9uSUQgWE1MRGF0YSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFkZCB4bWwgdmVyc2lvbgogICAgbXkgJFhNTElEID0gJFNlbGYtPntYTUxPYmplY3R9LT5YTUxIYXNoQWRkKAogICAgICAgIFR5cGUgICAgPT4gIklUU006OkNvbmZpZ0l0ZW06OiRQYXJhbXtDbGFzc0lEfSIsCiAgICAgICAgS2V5ICAgICA9PiAkUGFyYW17VmVyc2lvbklEfSwKICAgICAgICBYTUxIYXNoID0+ICRQYXJhbXtYTUxEYXRhfSwKICAgICk7CgogICAgIyBnZXQgbGFzdCB2ZXJzaW9ucwogICAgbXkgJE9sZFZlcnNpb25JRHMgPSAkU2VsZi0+VmVyc2lvbkxpc3QoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgKTsKCiAgICAjIEZpbmQgVmVyc2lvbiB0byBtb3ZlCiAgICBteSAkTW92ZVZlcnNpb247CiAgICBPTERWRVJTSU9OSUQ6CiAgICBmb3IgbXkgJE9sZFZlcnNpb25JRCAoIEB7JE9sZFZlcnNpb25JRHN9ICkgewogICAgICAgIGxhc3QgT0xEVkVSU0lPTklEIGlmICRPbGRWZXJzaW9uSUQgZXEgJFBhcmFte1ZlcnNpb25JRH07CgogICAgICAgICRNb3ZlVmVyc2lvbiA9ICRPbGRWZXJzaW9uSUQ7CiAgICB9CgogICAgcmV0dXJuICRYTUxJRCBpZiAhJE1vdmVWZXJzaW9uOwoKICAgICMgbW92ZSBvbGQgdmVyc2lvbiBpbiBhcmNoaXYKICAgICRTZWxmLT57WE1MT2JqZWN0fS0+WE1MSGFzaE1vdmUoCiAgICAgICAgT2xkVHlwZSA9PiAiSVRTTTo6Q29uZmlnSXRlbTo6JFBhcmFte0NsYXNzSUR9IiwKICAgICAgICBPbGRLZXkgID0+ICRNb3ZlVmVyc2lvbiwKICAgICAgICBOZXdUeXBlID0+ICJJVFNNOjpDb25maWdJdGVtOjpBcmNoaXY6OiRQYXJhbXtDbGFzc0lEfSIsCiAgICAgICAgTmV3S2V5ICA9PiAkTW92ZVZlcnNpb24sCiAgICApOwoKICAgIHJldHVybiAkWE1MSUQ7Cn0KCj1pdGVtIF9YTUxWZXJzaW9uRGVsZXRlKCkKCmRlbGV0ZSB0aGUgeG1sIGRhdGEgb2YgYSB2ZXJzaW9uCgogICAgbXkgJFRydWUgPSAkQ29uZmlnSXRlbU9iamVjdC0+X1hNTFZlcnNpb25EZWxldGUoCiAgICAgICAgVmVyc2lvbklEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgX1hNTFZlcnNpb25EZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVmVyc2lvbklEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB2ZXJzaW9uIGRhdGEKICAgIG15ICRWZXJzaW9uID0gJFNlbGYtPlZlcnNpb25HZXQoCiAgICAgICAgVmVyc2lvbklEID0+ICRQYXJhbXtWZXJzaW9uSUR9LAogICAgKTsKCiAgICByZXR1cm4gaWYgISRWZXJzaW9uOwoKICAgICMgZGVsZXRlIHhtbCBkYXRhIGZyb20gYSB2ZXJzaW9uCiAgICAkU2VsZi0+e1hNTE9iamVjdH0tPlhNTEhhc2hEZWxldGUoCiAgICAgICAgVHlwZSA9PiAiSVRTTTo6Q29uZmlnSXRlbTo6JFZlcnNpb24tPntDbGFzc0lEfSIsCiAgICAgICAgS2V5ICA9PiAkUGFyYW17VmVyc2lvbklEfSwKICAgICk7CgogICAgIyBkZWxldGUgeG1sIGRhdGEgZnJvbSBhcmNoaXYKICAgICRTZWxmLT57WE1MT2JqZWN0fS0+WE1MSGFzaERlbGV0ZSgKICAgICAgICBUeXBlID0+ICJJVFNNOjpDb25maWdJdGVtOjpBcmNoaXY6OiRWZXJzaW9uLT57Q2xhc3NJRH0iLAogICAgICAgIEtleSAgPT4gJFBhcmFte1ZlcnNpb25JRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfTG9hZFhNTFR5cGVCYWNrZW5kKCkKCmxvYWQgYSB4bWwgaXRlbSBtb2R1bGUKCiAgICAkQmFja2VuZE9iamVjdCA9ICRDb25maWdJdGVtT2JqZWN0LT5fTG9hZFhNTFR5cGVCYWNrZW5kKAogICAgICAgIFR5cGUgPT4gJ0dlbmVyYWxDYXRhbG9nJywKICAgICk7Cgo9Y3V0CgpzdWIgX0xvYWRYTUxUeXBlQmFja2VuZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIGlmICggISRQYXJhbXtUeXBlfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVHlwZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgaWYgb2JqZWN0IGlzIGFscmVhZHkgY2FjaGVkCiAgICByZXR1cm4gJFNlbGYtPntDYWNoZX0tPntMb2FkWE1MVHlwZUJhY2tlbmR9LT57ICRQYXJhbXtUeXBlfSB9CiAgICAgICAgaWYgJFNlbGYtPntDYWNoZX0tPntMb2FkWE1MVHlwZUJhY2tlbmR9LT57ICRQYXJhbXtUeXBlfSB9OwoKICAgIG15ICRHZW5lcmljTW9kdWxlID0gIktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjokUGFyYW17VHlwZX0iOwoKICAgICMgbG9hZCB0aGUgYmFja2VuZCBtb2R1bGUKICAgIGlmICggISRTZWxmLT57TWFpbk9iamVjdH0tPlJlcXVpcmUoJEdlbmVyaWNNb2R1bGUpICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgbG9hZCBiYWNrZW5kIG1vZHVsZSAkUGFyYW17VHlwZX0hIgogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIG5ldyBpbnN0YW5jZQogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkR2VuZXJpY01vZHVsZS0+bmV3KAogICAgICAgICV7JFNlbGZ9LAogICAgICAgICVQYXJhbSwKICAgICk7CgogICAgaWYgKCAhJEJhY2tlbmRPYmplY3QgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYmFja2VuZCBtb2R1bGUgJFBhcmFte1R5cGV9ISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjYWNoZSB0aGUgb2JqZWN0CiAgICAkU2VsZi0+e0NhY2hlfS0+e0xvYWRYTUxUeXBlQmFja2VuZH0tPnsgJFBhcmFte1R5cGV9IH0gPSAkQmFja2VuZE9iamVjdDsKCiAgICByZXR1cm4gJEJhY2tlbmRPYmplY3Q7Cn0KCj1pdGVtIF9YTUxIYXNoU2VhcmNoKCkKClNlYXJjaCBhIHhtbCBoYXNoIGZyb20gZGF0YWJhc2UuClRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIEtlcm5lbDo6U3lzdGVtOjpYTUxIYXNoU2VhcmNoLCBidXQgaGFzIHN1cHBvcnQgZm9yIHNvbWUgZXh0cmEgZmVhdHVyZXMuCkEgc3BlY2lmaWMgb3BlcmF0b3IgY2FuIGJlIHNwZWNpZmllZCBpbiBhIGhhc2guClRoZSBzeW50YXggaXMgYmFzZWQgb24gTDxTUUw6OkFic3RyYWN0Pi4KCiAgICBteSBAS2V5cyA9ICRDb25maWdJdGVtT2JqZWN0LT5fWE1MSGFzaFNlYXJjaCgKICAgICAgICBUeXBlID0+ICdTb21lVHlwZScsCiAgICAgICAgV2hhdCA9PiBbCiAgICAgICAgICAgICMgZWFjaCBhcnJheSBlbGVtZW50IGlzIGEgYW5kIGNvbmRpdGlvbgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAjIG9yIGNvbmRpdGlvbiBpbiBoYXNoCiAgICAgICAgICAgICAgICAiWyVdeydWZXJzaW9uJ31bJV17J0NvbmZpZ0l0ZW1BdHRyQid9WyVdeydDb250ZW50J30iID0+ICclY29udGVudEElJywKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJDJ31bJV17J0NvbnRlbnQnfSIgPT4gJyVjb250ZW50QSUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiWyVdeydWZXJzaW9uJ31bJV17J0NvbmZpZ0l0ZW1BdHRyQid9WyVdeydDb250ZW50J30iID0+ICclY29udGVudEIlJywKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJDJ31bJV17J0NvbnRlbnQnfSIgPT4gJyVjb250ZW50QiUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAjIHVzZSBhcnJheSByZWZlcmVuY2UgaWYgZGlmZmVyZW50IGNvbnRlbnQgd2l0aCBzYW1lIGtleSB3YXMgc2VhcmNoZWQKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJCJ31bJV17J0NvbnRlbnQnfSIgPT4gWyclY29udGVudEMlJywgJyVjb250ZW50RCUnLCAnJWNvbnRlbnRFJSddLAogICAgICAgICAgICAgICAgIlslXXsnVmVyc2lvbid9WyVdeydDb25maWdJdGVtQXR0ckMnfVslXXsnQ29udGVudCd9IiA9PiBbJyVjb250ZW50QyUnLCAnJWNvbnRlbnREJScsICclY29udGVudEUlJ10sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICMgdXNlIGhhc2ggcmVmZXJlbmNlIGZvciBzcGVjaWZ5aW5nIGNvbXBhcmlzb24gb3BzLCBhcGFydCBmcm9tIHRoZSBkZWZhdWx0ICdMSUtFJwogICAgICAgICAgICAgICAgIlslXXsnVmVyc2lvbid9WyVdeydDb25maWdJdGVtQXR0ckInfVslXXsnQ29udGVudCd9IiA9PiB7ICc8JyAgICAgICAgID0+ICdhbHBoYWJldGljYWxseV9sb3dlcl9vcl9lcXVhbCcgfSwKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJCJ31bJV17J0NvbnRlbnQnfSIgPT4geyAnPD0nICAgICAgICA9PiAnYWxwaGFiZXRpY2FsbHlfbGVzc19vcl9lcXVhbCcgfSwKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJCJ31bJV17J0NvbnRlbnQnfSIgPT4geyAnPScgICAgICAgICA9PiAnZXhhY3RfbWF0Y2gnIH0sCiAgICAgICAgICAgICAgICAiWyVdeydWZXJzaW9uJ31bJV17J0NvbmZpZ0l0ZW1BdHRyQid9WyVdeydDb250ZW50J30iID0+IHsgJyE9JyAgICAgICAgPT4gJ2V4YWN0X21hdGNoJyB9LAogICAgICAgICAgICAgICAgIlslXXsnVmVyc2lvbid9WyVdeydDb25maWdJdGVtQXR0ckInfVslXXsnQ29udGVudCd9IiA9PiB7ICc+PScgICAgICAgID0+ICdhbHBoYWJldGljYWxseV9sYXJnZXJfb3JfZXF1YWwnIH0sCiAgICAgICAgICAgICAgICAiWyVdeydWZXJzaW9uJ31bJV17J0NvbmZpZ0l0ZW1BdHRyQid9WyVdeydDb250ZW50J30iID0+IHsgJz4nICAgICAgICAgPT4gJ2FscGhhYmV0aWNhbGx5X2xhcmdlcicgfSwKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJCJ31bJV17J0NvbnRlbnQnfSIgPT4geyAnLWJldHdlZW4nICA9PiBbICdsb3dlcl9ib3VuZCcsICd1cHBlcl9ib3VuZCcgXSB9LAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICApOwoKPWN1dAoKc3ViIF9YTUxIYXNoU2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtUeXBlfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVHlwZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGxpa2UgZXNjYXBlIHN0cmluZyBuZWVkZWQgZm9yIHNvbWUgZGF0YWJhc2VzIChlLmcuIG9yYWNsZSkKICAgIG15ICRMaWtlRXNjYXBlU3RyaW5nID0gJFNlbGYtPntEQk9iamVjdH0tPkdldERhdGFiYXNlRnVuY3Rpb24oJ0xpa2VFc2NhcGVTdHJpbmcnKTsKCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJ1NFTEVDVCBESVNUSU5DVCh4bWxfa2V5KSBGUk9NIHhtbF9zdG9yYWdlIFdIRVJFIHhtbF90eXBlID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17VHlwZX0gXSwKICAgICk7CgogICAgIyB0aGUga2V5cyBvZiB0aGlzIGhhc2ggd2lsbCBiZSByZXR1cm5lZAogICAgbXkgJUhhc2g7CgogICAgIyBpbml0aWFsbHkgYWxsIGtleXMgd2l0aCB0aGUgY29ycmVjdCB0eXBlIGFyZSBwb3NzaWJsZQogICAgd2hpbGUgKCBteSBARGF0YSA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEhhc2h7ICREYXRhWzBdIH0gPSAxOwogICAgfQoKICAgIGlmICggJFBhcmFte1doYXR9ICYmIHJlZiAkUGFyYW17V2hhdH0gZXEgJ0FSUkFZJyApIHsKCiAgICAgICAgbXkgJU9wSXNTdXBwb3J0ZWQgPSBtYXAgeyAkXyA9PiAxIH0gKCAnPCcsICc8PScsICc9JywgJyE9JywgJz49JywgJz4nLCAnLWJldHdlZW4nICk7CgogICAgICAgICMgdGhlIGFycmF5IGVsZW1lbnRzIGFyZSAnYW5kJyBjb21iaW5lZAogICAgICAgIGZvciBteSAkQW5kICggQHsgJFBhcmFte1doYXR9IH0gKSB7CgogICAgICAgICAgICAjIHRoZSBrZXkvdmFsdWUgcGFpcnMgYXJlICdvcicgY29tYmluZWQKICAgICAgICAgICAgbXkgQE9yQ29uZGl0aW9uczsKICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXskQW5kfSApIHsKICAgICAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRBbmQtPnskS2V5fTsKCiAgICAgICAgICAgICAgICAkU2VsZi0+X1ByZXBhcmVMaWtlU3RyaW5nKCBcJEtleSApOwoKICAgICAgICAgICAgICAgIGlmICggJFZhbHVlICYmIHJlZiAkVmFsdWUgZXEgJ0FSUkFZJyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyB3aGVuIGFuIGFycmF5IG9mIHBvc3NpYmxlIHZhbHVlcyBpcyBnaXZlbiwKICAgICAgICAgICAgICAgICAgICAjIHdlIHVzZSAnTElLRSctY29uZGl0aW9ucyBhbmQgY29tYmluZSB0aGVtIHdpdGggJ09SJwogICAgICAgICAgICAgICAgICAgIGZvciBteSAkRWxlbWVudCAoIEB7JFZhbHVlfSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT5fUHJlcGFyZUxpa2VTdHJpbmcoIFwkRWxlbWVudCApOwoKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAT3JDb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAoeG1sX2NvbnRlbnRfa2V5IExJS0UgJyRLZXknICRMaWtlRXNjYXBlU3RyaW5nICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkFORCB4bWxfY29udGVudF92YWx1ZSBMSUtFICckRWxlbWVudCcgJExpa2VFc2NhcGVTdHJpbmcpIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRWYWx1ZSAmJiByZWYgJFZhbHVlIGVxICdIQVNIJyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBhIGhhc2hyZWYgaW5kaWNhdGVzIGEgc3BlY2lmaWMgY29tcGFyaXNvbiBvcAogICAgICAgICAgICAgICAgICAgICMgY3VycmVudGx5IG9ubHkgYSBzaW5nbGUgb3AsIHdpdGggYSBzaW5nbGUgdmFsdWUsIGlzIHN1cHBvcnRlZAoKICAgICAgICAgICAgICAgICAgICAjIFVuZGVyIE9yYWNsZSB0aGUgYXR0cmlidXRlICd4bWxfY29udGVudF92YWx1ZScgaXMgYSBDTE9CLAogICAgICAgICAgICAgICAgICAgICMgYSBDaGFyYWN0ZXIgTG9jYXRvciBPYmplY3QuIFdoaWxlIHNlbGVjdGlvbiB3aXRoIExJS0UgaXMgcG9zc2libGUsCiAgICAgICAgICAgICAgICAgICAgIyB0aGUgYWxwaGFiZXRpY2FsIGNvbXBhcmlzb24gb3BzIGFyZSBub3Qgc3VwcG9ydGVkLgogICAgICAgICAgICAgICAgICAgICMgU2VlIGh0dHA6Ly9kb3dubG9hZC5vcmFjbGUuY29tL2RvY3MvY2QvQjEyMDM3XzAxL2FwcGRldi4xMDEvYjEwNzk2L1wKICAgICAgICAgICAgICAgICAgICAjIGFkbG9iX3NxLmh0bSMxMDA2MjE1CiAgICAgICAgICAgICAgICAgICAgIyBBcyBhIHdvcmthcm91bmQgd2UgY2FzdCB0aGUgQ0xPQiB0byBhIFZBUkNIQVIyIHdpdGggVE9fQ0hBUigpLgogICAgICAgICAgICAgICAgICAgIG15ICR4bWxfY29udGVudF92YWx1ZSA9ICd4bWxfY29udGVudF92YWx1ZSc7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0RCT2JqZWN0fS0+R2V0RGF0YWJhc2VGdW5jdGlvbignVHlwZScpIGVxICdvcmFjbGUnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkeG1sX2NvbnRlbnRfdmFsdWUgPSAnVE9fQ0hBUih4bWxfY29udGVudF92YWx1ZSknOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbXkgKCRPcCkgPSBrZXlzICV7JFZhbHVlfTsKICAgICAgICAgICAgICAgICAgICBteSAkRWxlbWVudCA9ICRWYWx1ZS0+eyRPcH07CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkT3AgJiYgJE9wIGVxICctYmV0d2VlbicgJiYgcmVmICRFbGVtZW50IGVxICdBUlJBWScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRMb3dlckJvdW5kID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkRWxlbWVudC0+WzBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRVcHBlckJvdW5kID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkRWxlbWVudC0+WzFdICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQE9yQ29uZGl0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKCB4bWxfY29udGVudF9rZXkgTElLRSAnJEtleScgJExpa2VFc2NhcGVTdHJpbmcgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiQU5EICR4bWxfY29udGVudF92YWx1ZSA+PSAnJExvd2VyQm91bmQnICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkFORCAkeG1sX2NvbnRlbnRfdmFsdWUgPD0gJyRVcHBlckJvdW5kJyApIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkT3AgJiYgJE9wSXNTdXBwb3J0ZWR7JE9wfSAmJiAhcmVmICRFbGVtZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRWxlbWVudCA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSgkRWxlbWVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQE9yQ29uZGl0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKCB4bWxfY29udGVudF9rZXkgTElLRSAnJEtleScgJExpa2VFc2NhcGVTdHJpbmcgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiQU5EICR4bWxfY29udGVudF92YWx1ZSAkT3AgJyRFbGVtZW50JyApIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdHb3QgdW5leHBlY3RlZCBkYXRhIGluIHNlYXJjaCEnLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBPckNvbmRpdGlvbnMsICcoIDEgPSAxICknOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIHdoZW4gYSBzaW5nbGUgIHBvc3NpYmxlIHZhbHVlIGlzIGdpdmVuLAogICAgICAgICAgICAgICAgICAgICMgd2UgdXNlIGEgJ0xJS0UnLWNvbmRpdGlvbgogICAgICAgICAgICAgICAgICAgICRTZWxmLT5fUHJlcGFyZUxpa2VTdHJpbmcoIFwkVmFsdWUgKTsKCiAgICAgICAgICAgICAgICAgICAgcHVzaCBAT3JDb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAiICh4bWxfY29udGVudF9rZXkgTElLRSAnJEtleScgJExpa2VFc2NhcGVTdHJpbmcgIgogICAgICAgICAgICAgICAgICAgICAgICAuICJBTkQgeG1sX2NvbnRlbnRfdmFsdWUgTElLRSAnJFZhbHVlJyAkTGlrZUVzY2FwZVN0cmluZykiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFzc2VtYmxlIHRoZSBTUUwKICAgICAgICAgICAgbXkgJFNRTCA9ICdTRUxFQ1QgRElTVElOQ1QoeG1sX2tleSkgRlJPTSB4bWxfc3RvcmFnZSBXSEVSRSB4bWxfdHlwZSA9ID8gJzsKICAgICAgICAgICAgaWYgKEBPckNvbmRpdGlvbnMpIHsKICAgICAgICAgICAgICAgICRTUUwgLj0gJ0FORCAoICcgLiBqb2luKCAnIE9SICcsIEBPckNvbmRpdGlvbnMgKSAuICcgKSc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZXhlY3V0ZQogICAgICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1R5cGV9IF0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBjdXJyZW50IGtleSBzZXQsIGFuZCB0aGUga2V5cyBmcm9tIHRoZSBsYXN0ICdTRUxFQ1QnCiAgICAgICAgICAgICMgb25seSB0aGUga2V5cyB3aGljaCBhcmUgaW4gYWxsIHJlc3VsdHMgc3Vydml2ZQogICAgICAgICAgICBteSAlSGFzaE5ldzsKICAgICAgICAgICAgd2hpbGUgKCBteSBARGF0YSA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICAgICBpZiAoICRIYXNoeyAkRGF0YVswXSB9ICkgewogICAgICAgICAgICAgICAgICAgICRIYXNoTmV3eyAkRGF0YVswXSB9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAlSGFzaCA9ICVIYXNoTmV3OwogICAgICAgIH0KICAgIH0KCiAgICBteSBAS2V5cyA9IGtleXMgJUhhc2g7CgogICAgcmV0dXJuIEBLZXlzOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vRXZlbnQvRG9IaXN0b3J5LnBtIC0gYSBldmVudCBtb2R1bGUgZm9yIGNvbmZpZyBpdGVtcwojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpFdmVudDo6RG9IaXN0b3J5OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OkV2ZW50OjpEb0hpc3RvcnkgLSBFdmVudCBoYW5kbGVyIHRoYXQgZG9lcyB0aGUgaGlzdG9yeQoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgZXZlbnQgaGFuZGxlciBmdW5jdGlvbnMgZm9yIGhpc3RvcnkuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpDb25maWc7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkVuY29kZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TG9nOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpEQjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TWFpbjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6VGltZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OkV2ZW50OjpEb0hpc3Rvcnk7CgogICAgbXkgJENvbmZpZ09iamVjdCA9IEtlcm5lbDo6Q29uZmlnLT5uZXcoKTsKICAgIG15ICRFbmNvZGVPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICApOwogICAgbXkgJExvZ09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpMb2ctPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICk7CiAgICBteSAkVGltZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICApOwogICAgbXkgJE1haW5PYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6TWFpbi0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgKTsKICAgIG15ICREQk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpEQi0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgICA9PiAkTWFpbk9iamVjdCwKICAgICk7CiAgICBteSAkRG9IaXN0b3J5T2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpFdmVudDo6RG9IaXN0b3J5LT5uZXcoCiAgICAgICAgQ29uZmlnSXRlbU9iamVjdCA9PiAkQ29uZmlnSXRlbU9iamVjdCwKICAgICAgICBDb25maWdPYmplY3QgICAgID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgREJPYmplY3QgICAgICAgICA9PiAkREJPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ICAgICA9PiAkRW5jb2RlT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICAgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgICAgID0+ICRNYWluT2JqZWN0LAogICAgICAgIFRpbWVPYmplY3QgICAgICAgPT4gJFRpbWVPYmplY3QsCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgREJPYmplY3QgTWFpbk9iamVjdCBFbmNvZGVPYmplY3QgVGltZU9iamVjdCkpIHsKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9IHx8IGRpZSAiR290IG5vICROZWVkZWQhIjsKICAgIH0KCiAgICAjIGNyZWF0ZSBuZWVkZWQgb2JqZWN0cwogICAgJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbS0+bmV3KCAleyRTZWxmfSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gUnVuKCkKClRoaXMgbWV0aG9kIGhhbmRsZXMgdGhlIGV2ZW50LgoKICAgICREb0hpc3RvcnlPYmplY3QtPlJ1bigKICAgICAgICBFdmVudCA9PiAnQ29uZmlnSXRlbUNyZWF0ZScsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICBDb21tZW50ICAgICAgPT4gJ25ldyB2YWx1ZTogMScsCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBhcyBEZWZpbml0aW9uQ3JlYXRlIGRvZXMgbm90IGJlbG9uZyB0byBhbiBpdGVtLCB3ZSBkb24ndCBjcmVhdGUKICAgICMgYSBoaXN0b3J5IGVudHJ5CiAgICBpZiAoICRQYXJhbXtFdmVudH0gJiYgJFBhcmFte0V2ZW50fSBlcSAnRGVmaW5pdGlvbkNyZWF0ZScgKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRGF0YSBFdmVudCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkdWUgdG8gY29uc2lzdGVuY3kgd2l0aCB0aWNrZXQgaGlzdG9yeSwgd2UgbmVlZCBIaXN0b3J5VHlwZQogICAgJFBhcmFte0hpc3RvcnlUeXBlfSA9ICRQYXJhbXtFdmVudH07CgogICAgIyBkaXNwYXRjaCB0YWJsZSBmb3IgYWxsIGV2ZW50cwogICAgbXkgJURpc3BhdGNoZXIgPSAoCiAgICAgICAgQ29uZmlnSXRlbUNyZWF0ZSAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgQ29uZmlnSXRlbURlbGV0ZSAgICAgID0+IFwmX0NvbmZpZ0l0ZW1EZWxldGUsCiAgICAgICAgTGlua0FkZCAgICAgICAgICAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgTGlua0RlbGV0ZSAgICAgICAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgTmFtZVVwZGF0ZSAgICAgICAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgSW5jaWRlbnRTdGF0ZVVwZGF0ZSAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgRGVwbG95bWVudFN0YXRlVXBkYXRlID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgRGVmaW5pdGlvblVwZGF0ZSAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgVmVyc2lvbkNyZWF0ZSAgICAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgVmFsdWVVcGRhdGUgICAgICAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgRGVmaW5pdGlvbkNyZWF0ZSAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgVmVyc2lvbkRlbGV0ZSAgICAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgQXR0YWNobWVudEFkZFBvc3QgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgQXR0YWNobWVudERlbGV0ZVBvc3QgID0+IFwmX0hpc3RvcnlBZGQsCiAgICApOwoKICAgICMgZXJyb3IgaGFuZGxpbmcKICAgIGlmICggIWV4aXN0cyAkRGlzcGF0Y2hlcnsgJFBhcmFte0V2ZW50fSB9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnbm9uIGV4aXN0YW50IGhpc3RvcnkgdHlwZTogJyAuICRQYXJhbXtFdmVudH0sCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2FsbCBjYWxsYmFjawogICAgbXkgJFN1YiA9ICREaXNwYXRjaGVyeyAkUGFyYW17RXZlbnR9IH07CiAgICAkU2VsZi0+JFN1YigKICAgICAgICAlUGFyYW0sCiAgICAgICAgJXsgJFBhcmFte0RhdGF9IH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfQ29uZmlnSXRlbURlbGV0ZSgpCgpoaXN0b3J5J3MgZXZlbnQgaGFuZGxlciBmb3IgQ29uZmlnSXRlbURlbGV0ZQoKPWN1dAoKc3ViIF9Db25maWdJdGVtRGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBkZWxldGUgaGlzdG9yeQogICAgJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+SGlzdG9yeURlbGV0ZSgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfSGlzdG9yeUFkZCgpCgpoaXN0b3J5J3MgZGVmYXVsdCBldmVudCBoYW5kbGVyLgoKPWN1dAoKc3ViIF9IaXN0b3J5QWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBhZGQgaGlzdG9yeSBlbnRyeQogICAgJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+SGlzdG9yeUFkZCgKICAgICAgICAlUGFyYW0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vTnVtYmVyL0F1dG9JbmNyZW1lbnQucG0gLSBjb25maWcgaXRlbSBudW1iZXIgYmFja2VuZCBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6TnVtYmVyOjpBdXRvSW5jcmVtZW50OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6TnVtYmVyOjpBdXRvSW5jcmVtZW50IC0gY29uZmlnIGl0ZW0gbnVtYmVyIGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBhdXRvIGluY3JlbWVudCBjb25maWcgaXRlbSBudW1iZXIgZnVuY3Rpb25zCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBfQ29uZmlnSXRlbU51bWJlckNyZWF0ZSgpCgpjcmVhdGUgYSBuZXcgY29uZmlnIGl0ZW0gbnVtYmVyCgogICAgbXkgJE51bWJlciA9ICRCYWNrZW5kT2JqZWN0LT5fQ29uZmlnSXRlbU51bWJlckNyZWF0ZSgKICAgICAgICBDbGFzc0lEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgX0NvbmZpZ0l0ZW1OdW1iZXJDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NsYXNzSUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDbGFzc0lEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgc3lzdGVtIGlkCiAgICBteSAkU3lzdGVtSUQgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU3lzdGVtSUQnKTsKCiAgICAjIGdldCBjdXJyZW50IGNvdW50ZXIKICAgIG15ICRDdXJyZW50Q291bnRlciA9ICRTZWxmLT5DdXJyZW50Q291bnRlckdldCgKICAgICAgICBDbGFzc0lEID0+ICRQYXJhbXtDbGFzc0lEfSwKICAgICAgICBUeXBlICAgID0+ICdBdXRvSW5jcmVtZW50JywKICAgICkgfHwgMDsKCiAgICBDSVBIRVI6CiAgICBmb3IgbXkgJENpcGhlciAoIDEgLi4gMV8wMDBfMDAwXzAwMCApIHsKCiAgICAgICAgIyBjcmVhdGUgbmV3IG51bWJlcgogICAgICAgIG15ICROdW1iZXIgPSAkU3lzdGVtSUQgLiAkUGFyYW17Q2xhc3NJRH0gLiBzcHJpbnRmKCAiJTA2ZCIsICggJEN1cnJlbnRDb3VudGVyICsgJENpcGhlciApICk7CgogICAgICAgICMgZmluZCBleGlzdGluZyBudW1iZXIKICAgICAgICBteSAkRHVwbGljYXRlID0gJFNlbGYtPkNvbmZpZ0l0ZW1OdW1iZXJMb29rdXAoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1OdW1iZXIgPT4gJE51bWJlciwKICAgICAgICApOwoKICAgICAgICBuZXh0IENJUEhFUiBpZiAkRHVwbGljYXRlOwoKICAgICAgICAjIHNldCBjb3VudGVyCiAgICAgICAgJFNlbGYtPkN1cnJlbnRDb3VudGVyU2V0KAogICAgICAgICAgICBDbGFzc0lEID0+ICRQYXJhbXtDbGFzc0lEfSwKICAgICAgICAgICAgVHlwZSAgICA9PiAnQXV0b0luY3JlbWVudCcsCiAgICAgICAgICAgIENvdW50ZXIgPT4gKCAkQ3VycmVudENvdW50ZXIgKyAkQ2lwaGVyICksCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICROdW1iZXI7CiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vUGVybWlzc2lvbi9DbGFzc0dyb3VwQ2hlY2sucG0gLSBjaGVjayBpZiBhIHVzZXIgYmVsb25ncyB0byBhIGdyb3VwCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb246OkNsYXNzR3JvdXBDaGVjazsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6R3JvdXA7Cgp1c2UgdmFycyBxdyhASVNBKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb246OkNsYXNzR3JvdXBDaGVjayAtIGNoZWNrIGlmIGEgdXNlciBiZWxvbmdzIHRvIGEgZ3JvdXAKCj1oZWFkMSBTWU5PUFNJUwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6Q29uZmlnOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpFbmNvZGU7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkxvZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6REI7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok1haW47CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb246OkNsYXNzR3JvdXBDaGVjazsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gS2VybmVsOjpDb25maWctPm5ldygpOwogICAgbXkgJEVuY29kZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpFbmNvZGUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICk7CiAgICBteSAkTG9nT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgKTsKICAgIG15ICRNYWluT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06Ok1haW4tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkREJPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6REItPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgICA9PiAkTWFpbk9iamVjdCwKICAgICk7CiAgICBteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2ctPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgICA9PiAkTWFpbk9iamVjdCwKICAgICk7CiAgICBteSAkQ2hlY2tPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb246OkNsYXNzR3JvdXBDaGVjay0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCAgICAgICAgID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ICAgICAgICAgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgICAgICAgICA9PiAkTG9nT2JqZWN0LAogICAgICAgIERCT2JqZWN0ICAgICAgICAgICAgID0+ICREQk9iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgICAgICAgICA9PiAkTWFpbk9iamVjdCwKICAgICAgICBDb25maWdJdGVtT2JqZWN0ICAgICA9PiAkQ29uZmlnSXRlbU9iamVjdCwKICAgICAgICBHZW5lcmFsQ2F0YWxvZ09iamVjdCA9PiAkR2VuZXJhbENhdGFsb2dPYmplY3QsCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgREJPYmplY3QgTWFpbk9iamVjdCBFbmNvZGVPYmplY3QgQ29uZmlnSXRlbU9iamVjdCBHZW5lcmFsQ2F0YWxvZ09iamVjdCkKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPnskT2JqZWN0fSA9ICRQYXJhbXskT2JqZWN0fSB8fCBkaWUgIkdvdCBubyAkT2JqZWN0ISI7CiAgICB9CgogICAgJFNlbGYtPntHcm91cE9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6R3JvdXAtPm5ldyggJXskU2VsZn0gKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFJ1bigpCgp0aGlzIG1ldGhvZCBkb2VzIHRoZSBjaGVjayBpZiB0aGUgdXNlIGJlbG9uZ3MgdG8gYSBnaXZlbiBncm91cAoKICAgIG15ICRIYXNBY2Nlc3MgPSAkQ2hlY2tPYmplY3QtPlJ1bigKICAgICAgICBVc2VySUQgID0+IDEyMywKICAgICAgICBUeXBlICAgID0+ICdybycsCiAgICAgICAgQ2xhc3NJRCA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3M6OkNvbXB1dGVyJywKICAgICk7Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhVc2VySUQgVHlwZSBDbGFzc0lEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IENsYXNzIGRhdGEKICAgIG15ICRDbGFzc0l0ZW0gPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUdldCggSXRlbUlEID0+ICRQYXJhbXtDbGFzc0lEfSApOwoKICAgICMgZ2V0IHVzZXIgZ3JvdXBzCiAgICBteSBAR3JvdXBJRHMgPSAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBUeXBlICAgPT4gJFBhcmFte1R5cGV9LAogICAgICAgIFJlc3VsdCA9PiAnSUQnLAogICAgICAgIENhY2hlZCA9PiAxLAogICAgKTsKCiAgICAjIGxvb2tpbmcgZm9yIGdyb3VwIGlkLCByZXR1cm4gYWNjZXNzIGlmIHVzZXIgaXMgaW4gZ3JvdXAKICAgIGZvciBteSAkR3JvdXBJRCAoQEdyb3VwSURzKSB7CiAgICAgICAgcmV0dXJuIDEgaWYgJENsYXNzSXRlbS0+e1Blcm1pc3Npb259ICYmICRHcm91cElEIGVxICRDbGFzc0l0ZW0tPntQZXJtaXNzaW9ufTsKICAgIH0KCiAgICAjIHJldHVybiBubyBhY2Nlc3MKICAgIHJldHVybjsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgU29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vUGVybWlzc2lvbi9JdGVtQ2xhc3NHcm91cENoZWNrLnBtIC0gY2hlY2sgaWYgYSB1c2VyIGNhbiBhY2Nlc3MgYW4gaXRlbQojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpQZXJtaXNzaW9uOjpJdGVtQ2xhc3NHcm91cENoZWNrOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpHcm91cDsKCnVzZSB2YXJzIHF3KEBJU0EpOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6UGVybWlzc2lvbjo6SXRlbUNsYXNzR3JvdXBDaGVjayAtIGNoZWNrIGlmIGEgdXNlciBjYW4gYWNjZXNzIGFuIGl0ZW0KCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGNvbmZpZyBpdGVtIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OkNvbmZpZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpMb2c7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkRCOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpNYWluOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW07CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpQZXJtaXNzaW9uOjpJdGVtQ2xhc3NHcm91cENoZWNrOwoKICAgIG15ICRDb25maWdPYmplY3QgPSBLZXJuZWw6OkNvbmZpZy0+bmV3KCk7CiAgICBteSAkRW5jb2RlT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkVuY29kZS0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgKTsKICAgIG15ICRMb2dPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6TG9nLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICApOwogICAgbXkgJE1haW5PYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6TWFpbi0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgKTsKICAgIG15ICREQk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpEQi0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgICA9PiAkTWFpbk9iamVjdCwKICAgICk7CiAgICBteSAkQ29uZmlnSXRlbU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbS0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgICAgIERCT2JqZWN0ICAgICA9PiAkREJPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgKTsKICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgICAgIERCT2JqZWN0ICAgICA9PiAkREJPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgKTsKICAgIG15ICRDaGVja09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6UGVybWlzc2lvbjo6SXRlbUNsYXNzR3JvdXBDaGVjay0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCAgICAgICAgID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ICAgICAgICAgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgICAgICAgICA9PiAkTG9nT2JqZWN0LAogICAgICAgIERCT2JqZWN0ICAgICAgICAgICAgID0+ICREQk9iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgICAgICAgICA9PiAkTWFpbk9iamVjdCwKICAgICAgICBDb25maWdJdGVtT2JqZWN0ICAgICA9PiAkQ29uZmlnSXRlbU9iamVjdCwKICAgICAgICBHZW5lcmFsQ2F0YWxvZ09iamVjdCA9PiAkR2VuZXJhbENhdGFsb2dPYmplY3QsCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgREJPYmplY3QgTWFpbk9iamVjdCBFbmNvZGVPYmplY3QgQ29uZmlnSXRlbU9iamVjdCBHZW5lcmFsQ2F0YWxvZ09iamVjdCkKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPnskT2JqZWN0fSA9ICRQYXJhbXskT2JqZWN0fSB8fCBkaWUgIkdvdCBubyAkT2JqZWN0ISI7CiAgICB9CgogICAgJFNlbGYtPntHcm91cE9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6R3JvdXAtPm5ldyggJXskU2VsZn0gKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFJ1bigpCgp0aGlzIG1ldGhvZCBkb2VzIHRoZSBjaGVjayBpZiB0aGUgdXNlciBjYW4gYWNjZXNzIGFuIGl0ZW0KCiAgICBteSAkSGFzQWNjZXNzID0gJENoZWNrT2JqZWN0LT5SdW4oCiAgICAgICAgVXNlcklEID0+IDEyMywKICAgICAgICBUeXBlICAgPT4gJ3JvJywKICAgICAgICBJdGVtSUQgPT4gMzQ1LAogICAgKTsKCj1jdXQKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFVzZXJJRCBUeXBlIEl0ZW1JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjb25maWcgaXRlbSBkYXRhCiAgICBteSAkQ29uZmlnSXRlbSA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtJdGVtSUR9LAogICAgKTsKCiAgICAjIGdldCBDbGFzcyBkYXRhCiAgICBteSAkQ2xhc3NJdGVtID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1HZXQoCiAgICAgICAgSXRlbUlEID0+ICRDb25maWdJdGVtLT57Q2xhc3NJRH0KICAgICk7CgogICAgIyBnZXQgdXNlciBncm91cHMKICAgIG15IEBHcm91cElEcyA9ICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIFR5cGUgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgUmVzdWx0ID0+ICdJRCcsCiAgICAgICAgQ2FjaGVkID0+IDEsCiAgICApOwoKICAgICMgbG9va2luZyBmb3IgZ3JvdXAgaWQsIHJldHVybiBhY2Nlc3MgaWYgdXNlciBpcyBpbiBncm91cAogICAgZm9yIG15ICRHcm91cElEIChAR3JvdXBJRHMpIHsKICAgICAgICByZXR1cm4gMSBpZiAkQ2xhc3NJdGVtLT57UGVybWlzc2lvbn0gJiYgJEdyb3VwSUQgZXEgJENsYXNzSXRlbS0+e1Blcm1pc3Npb259OwogICAgfQoKICAgICMgcmV0dXJuIG5vIGFjY2VzcwogICAgcmV0dXJuOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBTb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vWE1ML1R5cGUvQ3VzdG9tZXIucG0gLSB4bWwgYmFja2VuZCBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpDdXN0b21lcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpDdXN0b21lciAtIHhtbCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgeG1sIGZ1bmN0aW9ucyBvZiBjdXN0b21lciBvYmplY3RzCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OkNvbmZpZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpMb2c7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkRCOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpNYWluOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gS2VybmVsOjpDb25maWctPm5ldygpOwogICAgbXkgJEVuY29kZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpFbmNvZGUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICk7CiAgICBteSAkTG9nT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgKTsKICAgIG15ICRNYWluT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06Ok1haW4tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkREJPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6REItPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgICA9PiAkTWFpbk9iamVjdCwKICAgICk7CiAgICAkQmFja2VuZE9iamVjdCA9ICRDb25maWdJdGVtT2JqZWN0LT5fTG9hZFhNTFR5cGVCYWNrZW5kKAogICAgICAgIFR5cGUgPT4gJ0N1c3RvbWVyJywKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhEQk9iamVjdCBDb25maWdPYmplY3QgRW5jb2RlT2JqZWN0IExvZ09iamVjdCBNYWluT2JqZWN0KSkgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQogICAgJFNlbGYtPntDdXN0b21lclVzZXJPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlci0+bmV3KCAleyRTZWxmfSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gVmFsdWVMb29rdXAoKQoKZ2V0IHRoZSB4bWwgZGF0YSBvZiBhIHZlcnNpb24KCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+VmFsdWVMb29rdXAoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBWYWx1ZUxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAnJyBpZiAhJFBhcmFte1ZhbHVlfTsKCiAgICBteSAlQ3VzdG9tZXJTZWFyY2hMaXN0ID0gJFNlbGYtPntDdXN0b21lclVzZXJPYmplY3R9LT5DdXN0b21lclNlYXJjaCgKICAgICAgICBTZWFyY2ggPT4gJFBhcmFte1ZhbHVlfSwKICAgICk7CgogICAgcmV0dXJuICRDdXN0b21lclNlYXJjaExpc3R7ICRQYXJhbXtWYWx1ZX0gfSB8fCAnJzsKfQoKPWl0ZW0gU3RhdHNBdHRyaWJ1dGVDcmVhdGUoKQoKY3JlYXRlIGEgYXR0cmlidXRlIGFycmF5IGZvciB0aGUgc3RhdHMgZnJhbWV3b3JrCgogICAgbXkgJEF0dHJpYnV0ZSA9ICRCYWNrZW5kT2JqZWN0LT5TdGF0c0F0dHJpYnV0ZUNyZWF0ZSgKICAgICAgICBLZXkgPT4gJ0tleTo6U3Via2V5JywKICAgICAgICBOYW1lID0+ICdOYW1lJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBTdGF0c0F0dHJpYnV0ZUNyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgTmFtZSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSBhcnJ0aWJ1dGUKICAgIG15ICRBdHRyaWJ1dGUgPSBbCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICRQYXJhbXtOYW1lfSwKICAgICAgICAgICAgVXNlQXNYdmFsdWUgICAgICA9PiAwLAogICAgICAgICAgICBVc2VBc1ZhbHVlU2VyaWVzID0+IDAsCiAgICAgICAgICAgIFVzZUFzUmVzdHJpY3Rpb24gPT4gMSwKICAgICAgICAgICAgRWxlbWVudCAgICAgICAgICA9PiAkUGFyYW17S2V5fSwKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnSW5wdXRGaWVsZCcsCiAgICAgICAgfSwKICAgIF07CgogICAgcmV0dXJuICRBdHRyaWJ1dGU7Cn0KCj1pdGVtIEV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHNlYXJjaCB2YWx1ZSBmb3IgZXhwb3J0CgogICAgbXkgJEFycmF5UmVmID0gJEJhY2tlbmRPYmplY3QtPkV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1pdGVtIEV4cG9ydFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHZhbHVlIGZvciBleHBvcnQKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0VmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRXhwb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWl0ZW0gSW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgc2VhcmNoIHZhbHVlIGZvciBpbXBvcnQKCiAgICBteSAkQXJyYXlSZWYgPSAkQmFja2VuZE9iamVjdC0+SW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWl0ZW0gSW1wb3J0VmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgdmFsdWUgZm9yIGltcG9ydAoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5JbXBvcnRWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBJbXBvcnRWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vWE1ML1R5cGUvQ3VzdG9tZXJDb21wYW55LnBtIC0geG1sIGJhY2tlbmQgbW9kdWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlhNTDo6VHlwZTo6Q3VzdG9tZXJDb21wYW55OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpDdXN0b21lckNvbXBhbnk7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpYTUw6OlR5cGU6OkN1c3RvbWVyQ29tcGFueSAtIHhtbCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgeG1sIGZ1bmN0aW9ucyBvZiBjdXN0b21lciBjb21wYW55IG9iamVjdHMKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6Q29uZmlnOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpFbmNvZGU7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkxvZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6REI7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok1haW47CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOwoKICAgIG15ICRDb25maWdPYmplY3QgPSBLZXJuZWw6OkNvbmZpZy0+bmV3KCk7CiAgICBteSAkRW5jb2RlT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkVuY29kZS0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgKTsKICAgIG15ICRMb2dPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6TG9nLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICApOwogICAgbXkgJE1haW5PYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6TWFpbi0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgKTsKICAgIG15ICREQk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpEQi0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgICA9PiAkTWFpbk9iamVjdCwKICAgICk7CiAgICBteSAkQ29uZmlnSXRlbU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbS0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgICAgIERCT2JqZWN0ICAgICA9PiAkREJPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgKTsKICAgICRCYWNrZW5kT2JqZWN0ID0gJENvbmZpZ0l0ZW1PYmplY3QtPl9Mb2FkWE1MVHlwZUJhY2tlbmQoCiAgICAgICAgVHlwZSA9PiAnQ3VzdG9tZXJDb21wYW55JywKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhEQk9iamVjdCBDb25maWdPYmplY3QgRW5jb2RlT2JqZWN0IExvZ09iamVjdCBNYWluT2JqZWN0KSkgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQogICAgJFNlbGYtPntDdXN0b21lckNvbXBhbnlPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyQ29tcGFueS0+bmV3KCAleyRTZWxmfSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gVmFsdWVMb29rdXAoKQoKZ2V0IHRoZSB4bWwgZGF0YSBvZiBhIHZlcnNpb24KCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+VmFsdWVMb29rdXAoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBWYWx1ZUxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAnJyBpZiAhJFBhcmFte1ZhbHVlfTsKCiAgICBteSAlQ3VzdG9tZXJDb21wYW55ID0gJFNlbGYtPntDdXN0b21lckNvbXBhbnlPYmplY3R9LT5DdXN0b21lckNvbXBhbnlHZXQoCiAgICAgICAgQ3VzdG9tZXJJRCA9PiAkUGFyYW17VmFsdWV9LAogICAgKTsKCiAgICByZXR1cm4gJEN1c3RvbWVyQ29tcGFueXtDdXN0b21lckNvbXBhbnlOYW1lfSB8fCAnJzsKfQoKPWl0ZW0gU3RhdHNBdHRyaWJ1dGVDcmVhdGUoKQoKY3JlYXRlIGEgYXR0cmlidXRlIGFycmF5IGZvciB0aGUgc3RhdHMgZnJhbWV3b3JrCgogICAgbXkgJEF0dHJpYnV0ZSA9ICRCYWNrZW5kT2JqZWN0LT5TdGF0c0F0dHJpYnV0ZUNyZWF0ZSgKICAgICAgICBLZXkgPT4gJ0tleTo6U3Via2V5JywKICAgICAgICBOYW1lID0+ICdOYW1lJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBTdGF0c0F0dHJpYnV0ZUNyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgTmFtZSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSBhdHRyaWJ1dGUKICAgIG15ICRBdHRyaWJ1dGUgPSBbCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICRQYXJhbXtOYW1lfSwKICAgICAgICAgICAgVXNlQXNYdmFsdWUgICAgICA9PiAwLAogICAgICAgICAgICBVc2VBc1ZhbHVlU2VyaWVzID0+IDAsCiAgICAgICAgICAgIFVzZUFzUmVzdHJpY3Rpb24gPT4gMSwKICAgICAgICAgICAgRWxlbWVudCAgICAgICAgICA9PiAkUGFyYW17S2V5fSwKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnSW5wdXRGaWVsZCcsCiAgICAgICAgfSwKICAgIF07CgogICAgcmV0dXJuICRBdHRyaWJ1dGU7Cn0KCj1pdGVtIEV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHNlYXJjaCB2YWx1ZSBmb3IgZXhwb3J0CgogICAgbXkgJEFycmF5UmVmID0gJEJhY2tlbmRPYmplY3QtPkV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1pdGVtIEV4cG9ydFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHZhbHVlIGZvciBleHBvcnQKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0VmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRXhwb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWl0ZW0gSW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgc2VhcmNoIHZhbHVlIGZvciBpbXBvcnQKCiAgICBteSAkQXJyYXlSZWYgPSAkQmFja2VuZE9iamVjdC0+SW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWl0ZW0gSW1wb3J0VmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgdmFsdWUgZm9yIGltcG9ydAoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5JbXBvcnRWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBJbXBvcnRWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vWE1ML1R5cGUvRGF0ZS5wbSAtIHhtbCBiYWNrZW5kIG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpYTUw6OlR5cGU6OkRhdGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpYTUw6OlR5cGU6OkRhdGUgLSB4bWwgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIHhtbCBmdW5jdGlvbnMgb2YgZGF0ZSBvYmplY3RzCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OkNvbmZpZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpMb2c7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkRCOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpNYWluOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gS2VybmVsOjpDb25maWctPm5ldygpOwogICAgbXkgJEVuY29kZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpFbmNvZGUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICk7CiAgICBteSAkTG9nT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgKTsKICAgIG15ICRNYWluT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06Ok1haW4tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkREJPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6REItPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgICA9PiAkTWFpbk9iamVjdCwKICAgICk7CiAgICAkQmFja2VuZE9iamVjdCA9ICRDb25maWdJdGVtT2JqZWN0LT5fTG9hZFhNTFR5cGVCYWNrZW5kKAogICAgICAgIFR5cGUgPT4gJ0RhdGUnLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KERCT2JqZWN0IENvbmZpZ09iamVjdCBFbmNvZGVPYmplY3QgTG9nT2JqZWN0IE1haW5PYmplY3QpKSB7CiAgICAgICAgJFNlbGYtPnskT2JqZWN0fSA9ICRQYXJhbXskT2JqZWN0fSB8fCBkaWUgIkdvdCBubyAkT2JqZWN0ISI7CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBWYWx1ZUxvb2t1cCgpCgpnZXQgdGhlIGRhdGUgZGF0YSBvZiBhIHZlcnNpb24KCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+VmFsdWVMb29rdXAoCiAgICAgICAgVmFsdWUgPT4gJzIwMDctMDMtMjYnLCAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIFZhbHVlTG9va3VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX0gfHwgJyc7Cn0KCj1pdGVtIFN0YXRzQXR0cmlidXRlQ3JlYXRlKCkKCmNyZWF0ZSBhIGF0dHJpYnV0ZSBhcnJheSBmb3IgdGhlIHN0YXRzIGZyYW1ld29yawoKICAgIG15ICRBdHRyaWJ1dGUgPSAkQmFja2VuZE9iamVjdC0+U3RhdHNBdHRyaWJ1dGVDcmVhdGUoKTsKCj1jdXQKCnN1YiBTdGF0c0F0dHJpYnV0ZUNyZWF0ZSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgIHJldHVybjsKfQoKPWl0ZW0gRXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgc2VhcmNoIHZhbHVlIGZvciBleHBvcnQKCiAgICBteSAkQXJyYXlSZWYgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWl0ZW0gRXhwb3J0VmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgdmFsdWUgZm9yIGV4cG9ydAoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5FeHBvcnRWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBFeHBvcnRWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aXRlbSBJbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSBzZWFyY2ggdmFsdWUgZm9yIGltcG9ydAoKICAgIG15ICRBcnJheVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5JbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBJbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aXRlbSBJbXBvcnRWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSB2YWx1ZSBmb3IgaW1wb3J0CgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPkltcG9ydFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEltcG9ydFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoaHR0cDovL290cnMub3JnLykuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vWE1ML1R5cGUvRGF0ZVRpbWUucG0gLSB4bWwgYmFja2VuZCBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpEYXRlVGltZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlhNTDo6VHlwZTo6RGF0ZVRpbWUgLSB4bWwgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIHhtbCBmdW5jdGlvbnMgb2YgZGF0ZSBvYmplY3RzCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OkNvbmZpZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpMb2c7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkRCOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpNYWluOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gS2VybmVsOjpDb25maWctPm5ldygpOwogICAgbXkgJEVuY29kZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpFbmNvZGUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICk7CiAgICBteSAkTG9nT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgKTsKICAgIG15ICRNYWluT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06Ok1haW4tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkREJPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6REItPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgICA9PiAkTWFpbk9iamVjdCwKICAgICk7CiAgICAkQmFja2VuZE9iamVjdCA9ICRDb25maWdJdGVtT2JqZWN0LT5fTG9hZFhNTFR5cGVCYWNrZW5kKAogICAgICAgIFR5cGUgPT4gJ0RhdGVUaW1lJywKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhEQk9iamVjdCBDb25maWdPYmplY3QgRW5jb2RlT2JqZWN0IExvZ09iamVjdCBNYWluT2JqZWN0KSkgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gVmFsdWVMb29rdXAoKQoKZ2V0IHRoZSBkYXRlIHRpbWUgZGF0YSBvZiBhIHZlcnNpb24KCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+VmFsdWVMb29rdXAoCiAgICAgICAgVmFsdWUgPT4gJzIwMDctMDMtMjYgMjI6MDEnLCAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIFZhbHVlTG9va3VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX0gfHwgJyc7Cn0KCj1pdGVtIFN0YXRzQXR0cmlidXRlQ3JlYXRlKCkKCmNyZWF0ZSBhIGF0dHJpYnV0ZSBhcnJheSBmb3IgdGhlIHN0YXRzIGZyYW1ld29yawoKICAgIG15ICRBdHRyaWJ1dGUgPSAkQmFja2VuZE9iamVjdC0+U3RhdHNBdHRyaWJ1dGVDcmVhdGUoKTsKCj1jdXQKCnN1YiBTdGF0c0F0dHJpYnV0ZUNyZWF0ZSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgIHJldHVybjsKfQoKPWl0ZW0gRXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgc2VhcmNoIHZhbHVlIGZvciBleHBvcnQKCiAgICBteSAkQXJyYXlSZWYgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWl0ZW0gRXhwb3J0VmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgdmFsdWUgZm9yIGV4cG9ydAoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5FeHBvcnRWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBFeHBvcnRWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aXRlbSBJbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSBzZWFyY2ggdmFsdWUgZm9yIGltcG9ydAoKICAgIG15ICRBcnJheVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5JbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBJbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aXRlbSBJbXBvcnRWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSB2YWx1ZSBmb3IgaW1wb3J0CgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPkltcG9ydFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEltcG9ydFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoaHR0cDovL290cnMub3JnLykuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vWE1ML1R5cGUvRHVtbXkucG0gLSB4bWwgYmFja2VuZCBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpEdW1teTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlhNTDo6VHlwZTo6RHVtbXkgLSB4bWwgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIHhtbCBmdW5jdGlvbnMgb2YgZHVtbXkgb2JqZWN0cwoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpDb25maWc7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkVuY29kZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TG9nOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpEQjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TWFpbjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW07CgogICAgbXkgJENvbmZpZ09iamVjdCA9IEtlcm5lbDo6Q29uZmlnLT5uZXcoKTsKICAgIG15ICRFbmNvZGVPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICApOwogICAgbXkgJExvZ09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpMb2ctPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICk7CiAgICBteSAkTWFpbk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpNYWluLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICApOwogICAgbXkgJERCT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgKTsKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgREJPYmplY3QgICAgID0+ICREQk9iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwogICAgJEJhY2tlbmRPYmplY3QgPSAkQ29uZmlnSXRlbU9iamVjdC0+X0xvYWRYTUxUeXBlQmFja2VuZCgKICAgICAgICBUeXBlID0+ICdEdW1teScsCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoREJPYmplY3QgQ29uZmlnT2JqZWN0IEVuY29kZU9iamVjdCBMb2dPYmplY3QgTWFpbk9iamVjdCkpIHsKICAgICAgICAkU2VsZi0+eyRPYmplY3R9ID0gJFBhcmFteyRPYmplY3R9IHx8IGRpZSAiR290IG5vICRPYmplY3QhIjsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFZhbHVlTG9va3VwKCkKCmdldCB0aGUgZHVtbXkgZGF0YSBvZiBhIHZlcnNpb24KCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+VmFsdWVMb29rdXAoKTsKCj1jdXQKCnN1YiBWYWx1ZUxvb2t1cCB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgIHJldHVybiAnJzsKfQoKPWl0ZW0gU3RhdHNBdHRyaWJ1dGVDcmVhdGUoKQoKY3JlYXRlIGEgYXR0cmlidXRlIGFycmF5IGZvciB0aGUgc3RhdHMgZnJhbWV3b3JrCgogICAgbXkgJEF0dHJpYnV0ZSA9ICRCYWNrZW5kT2JqZWN0LT5TdGF0c0F0dHJpYnV0ZUNyZWF0ZSgpOwoKPWN1dAoKc3ViIFN0YXRzQXR0cmlidXRlQ3JlYXRlIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgcmV0dXJuOwp9Cgo9aXRlbSBFeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSBzZWFyY2ggdmFsdWUgZm9yIGV4cG9ydAoKICAgIG15ICRBcnJheVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5FeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBFeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aXRlbSBFeHBvcnRWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSB2YWx1ZSBmb3IgZXhwb3J0CgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPkV4cG9ydFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEV4cG9ydFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1pdGVtIEltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHNlYXJjaCB2YWx1ZSBmb3IgaW1wb3J0CgogICAgbXkgJEFycmF5UmVmID0gJEJhY2tlbmRPYmplY3QtPkltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1pdGVtIEltcG9ydFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHZhbHVlIGZvciBpbXBvcnQKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+SW1wb3J0VmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vWE1ML1R5cGUvR2VuZXJhbENhdGFsb2cucG0gLSB4bWwgYmFja2VuZCBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpHZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpYTUw6OlR5cGU6OkdlbmVyYWxDYXRhbG9nIC0geG1sIGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCB4bWwgZnVuY3Rpb25zIG9mIGdlbmVyYWwgY2F0YWxvZyBvYmplY3RzCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OkNvbmZpZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpMb2c7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkRCOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpNYWluOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gS2VybmVsOjpDb25maWctPm5ldygpOwogICAgbXkgJEVuY29kZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpFbmNvZGUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICk7CiAgICBteSAkTG9nT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgKTsKICAgIG15ICRNYWluT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06Ok1haW4tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkREJPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6REItPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgICA9PiAkTWFpbk9iamVjdCwKICAgICk7CiAgICAkQmFja2VuZE9iamVjdCA9ICRDb25maWdJdGVtT2JqZWN0LT5fTG9hZFhNTFR5cGVCYWNrZW5kKAogICAgICAgIFR5cGUgPT4gJ0dlbmVyYWxDYXRhbG9nJywKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhEQk9iamVjdCBDb25maWdPYmplY3QgRW5jb2RlT2JqZWN0IExvZ09iamVjdCBNYWluT2JqZWN0KSkgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQogICAgJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2ctPm5ldyggJXskU2VsZn0gKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFZhbHVlTG9va3VwKCkKCmdldCB0aGUgeG1sIGRhdGEgb2YgYSB2ZXJzaW9uCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPlZhbHVlTG9va3VwKAogICAgICAgIEl0ZW0gID0+ICRJdGVtUmVmLAogICAgICAgIFZhbHVlID0+IDExLCAgICAgICAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIFZhbHVlTG9va3VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiBpZiAhJFBhcmFte1ZhbHVlfTsKCiAgICAjIGdldCBpdGVtIGxpc3QKICAgIG15ICRJdGVtTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntDbGFzc30gfHwgJycsCiAgICApOwoKICAgIHJldHVybiBpZiAhJEl0ZW1MaXN0OwogICAgcmV0dXJuIGlmIHJlZiAkSXRlbUxpc3QgbmUgJ0hBU0gnOwoKICAgIG15ICRWYWx1ZSA9ICRJdGVtTGlzdC0+eyAkUGFyYW17VmFsdWV9IH07CgogICAgcmV0dXJuICRWYWx1ZTsKfQoKPWl0ZW0gU3RhdHNBdHRyaWJ1dGVDcmVhdGUoKQoKY3JlYXRlIGEgYXR0cmlidXRlIGFycmF5IGZvciB0aGUgc3RhdHMgZnJhbWV3b3JrCgogICAgbXkgJEF0dHJpYnV0ZSA9ICRCYWNrZW5kT2JqZWN0LT5TdGF0c0F0dHJpYnV0ZUNyZWF0ZSgKICAgICAgICBLZXkgID0+ICdLZXk6OlN1YmtleScsCiAgICAgICAgTmFtZSA9PiAnTmFtZScsCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgU3RhdHNBdHRyaWJ1dGVDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IE5hbWUgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgaXRlbSBsaXN0CiAgICBteSAkSXRlbUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57Q2xhc3N9IHx8ICcnLAogICAgKTsKCiAgICAjIGNyZWF0ZSBhcnJ0aWJ1dGUKICAgIG15ICRBdHRyaWJ1dGUgPSBbCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICRQYXJhbXtOYW1lfSwKICAgICAgICAgICAgVXNlQXNYdmFsdWUgICAgICA9PiAxLAogICAgICAgICAgICBVc2VBc1ZhbHVlU2VyaWVzID0+IDEsCiAgICAgICAgICAgIFVzZUFzUmVzdHJpY3Rpb24gPT4gMSwKICAgICAgICAgICAgRWxlbWVudCAgICAgICAgICA9PiAkUGFyYW17S2V5fSwKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnTXVsdGlTZWxlY3RGaWVsZCcsCiAgICAgICAgICAgIFZhbHVlcyAgICAgICAgICAgPT4gJEl0ZW1MaXN0IHx8IHt9LAogICAgICAgIH0sCiAgICBdOwoKICAgIHJldHVybiAkQXR0cmlidXRlOwp9Cgo9aXRlbSBFeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSBzZWFyY2ggdmFsdWUgZm9yIGV4cG9ydAoKICAgIG15ICRBcnJheVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5FeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBFeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKCiAgICBteSBAVmFsdWVzID0gc3BsaXQgJyMjIyMjJywgJFBhcmFte1ZhbHVlfTsKICAgIEBWYWx1ZXMgPSBncmVwIHskX30gQFZhbHVlczsKCiAgICByZXR1cm4gXEBWYWx1ZXM7Cn0KCj1pdGVtIEV4cG9ydFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHZhbHVlIGZvciBleHBvcnQKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0VmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRXhwb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CgogICAgIyBnZXQgaXRlbSBsaXN0CiAgICBteSAkSXRlbUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57Q2xhc3N9IHx8ICcnLAogICAgKTsKCiAgICByZXR1cm4gJEl0ZW1MaXN0LT57ICRQYXJhbXtWYWx1ZX0gfSB8fCAkUGFyYW17VmFsdWV9Owp9Cgo9aXRlbSBJbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSBzZWFyY2ggdmFsdWUgZm9yIGltcG9ydAoKICAgIG15ICRBcnJheVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5JbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBJbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKCiAgICBteSBAVmFsdWVzID0gc3BsaXQgJyMjIyMjJywgJFBhcmFte1ZhbHVlfTsKICAgIEBWYWx1ZXMgPSBncmVwIHskX30gQFZhbHVlczsKCiAgICByZXR1cm4gXEBWYWx1ZXM7Cn0KCj1pdGVtIEltcG9ydFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHZhbHVlIGZvciBpbXBvcnQKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+SW1wb3J0VmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CgogICAgIyBnZXQgaXRlbSBsaXN0CiAgICBteSAkSXRlbUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57Q2xhc3N9IHx8ICcnLAogICAgKTsKCiAgICAjIHJldmVyc2UgdGhlIGxpc3QKICAgIG15ICVOYW1lMklEID0gcmV2ZXJzZSAleyRJdGVtTGlzdH07CgogICAgbXkgJEdlbmVyYWxDYXRhbG9nSUQgPSAkTmFtZTJJRHsgJFBhcmFte1ZhbHVlfSB9OwoKICAgIGlmICggISRHZW5lcmFsQ2F0YWxvZ0lEICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiR2VuZXJhbCBjYXRhbG9nIGxvb2t1cCBvZickUGFyYW17VmFsdWV9JyBmYWlsZWQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gJEdlbmVyYWxDYXRhbG9nSUQ7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoaHR0cDovL290cnMub3JnLykuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vWE1ML1R5cGUvSW50ZWdlci5wbSAtIHhtbCBiYWNrZW5kIG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpYTUw6OlR5cGU6OkludGVnZXI7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpYTUw6OlR5cGU6OkludGVnZXIgLSB4bWwgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIHhtbCBmdW5jdGlvbnMgb2YgaW50ZWdlciBvYmplY3RzCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OkNvbmZpZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpMb2c7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkRCOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpNYWluOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gS2VybmVsOjpDb25maWctPm5ldygpOwogICAgbXkgJEVuY29kZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpFbmNvZGUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICk7CiAgICBteSAkTG9nT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgKTsKICAgIG15ICRNYWluT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06Ok1haW4tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkREJPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6REItPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgICA9PiAkTWFpbk9iamVjdCwKICAgICk7CiAgICAkQmFja2VuZE9iamVjdCA9ICRDb25maWdJdGVtT2JqZWN0LT5fTG9hZFhNTFR5cGVCYWNrZW5kKAogICAgICAgIFR5cGUgPT4gJ0ludGVnZXInLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KERCT2JqZWN0IENvbmZpZ09iamVjdCBFbmNvZGVPYmplY3QgTG9nT2JqZWN0IE1haW5PYmplY3QpKSB7CiAgICAgICAgJFNlbGYtPnskT2JqZWN0fSA9ICRQYXJhbXskT2JqZWN0fSB8fCBkaWUgIkdvdCBubyAkT2JqZWN0ISI7CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBWYWx1ZUxvb2t1cCgpCgpnZXQgdGhlIGludGVnZXIgZGF0YSBvZiBhIHZlcnNpb24KCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+VmFsdWVMb29rdXAoCiAgICAgICAgVmFsdWUgPT4gMTEsICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgVmFsdWVMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWl0ZW0gU3RhdHNBdHRyaWJ1dGVDcmVhdGUoKQoKY3JlYXRlIGEgYXR0cmlidXRlIGFycmF5IGZvciB0aGUgc3RhdHMgZnJhbWV3b3JrCgogICAgbXkgJEF0dHJpYnV0ZSA9ICRCYWNrZW5kT2JqZWN0LT5TdGF0c0F0dHJpYnV0ZUNyZWF0ZSgpOwoKPWN1dAoKc3ViIFN0YXRzQXR0cmlidXRlQ3JlYXRlIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgcmV0dXJuOwp9Cgo9aXRlbSBFeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSBzZWFyY2ggdmFsdWUgZm9yIGV4cG9ydAoKICAgIG15ICRBcnJheVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5FeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBFeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aXRlbSBFeHBvcnRWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSB2YWx1ZSBmb3IgZXhwb3J0CgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPkV4cG9ydFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEV4cG9ydFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1pdGVtIEltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHNlYXJjaCB2YWx1ZSBmb3IgaW1wb3J0CgogICAgbXkgJEFycmF5UmVmID0gJEJhY2tlbmRPYmplY3QtPkltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1pdGVtIEltcG9ydFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHZhbHVlIGZvciBpbXBvcnQKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+SW1wb3J0VmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vWE1ML1R5cGUvVGV4dC5wbSAtIHhtbCBiYWNrZW5kIG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpYTUw6OlR5cGU6OlRleHQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpYTUw6OlR5cGU6OlRleHQgLSB4bWwgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIHhtbCBmdW5jdGlvbnMgb2YgdGV4dCBvYmplY3RzCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OkNvbmZpZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpMb2c7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkRCOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpNYWluOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gS2VybmVsOjpDb25maWctPm5ldygpOwogICAgbXkgJEVuY29kZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpFbmNvZGUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICk7CiAgICBteSAkTG9nT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgKTsKICAgIG15ICRNYWluT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06Ok1haW4tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkREJPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6REItPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgICA9PiAkTWFpbk9iamVjdCwKICAgICk7CiAgICAkQmFja2VuZE9iamVjdCA9ICRDb25maWdJdGVtT2JqZWN0LT5fTG9hZFhNTFR5cGVCYWNrZW5kKAogICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KERCT2JqZWN0IENvbmZpZ09iamVjdCBFbmNvZGVPYmplY3QgTG9nT2JqZWN0IE1haW5PYmplY3QpKSB7CiAgICAgICAgJFNlbGYtPnskT2JqZWN0fSA9ICRQYXJhbXskT2JqZWN0fSB8fCBkaWUgIkdvdCBubyAkT2JqZWN0ISI7CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBWYWx1ZUxvb2t1cCgpCgpnZXQgdGhlIHRleHQgZGF0YSBvZiBhIHZlcnNpb24KCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+VmFsdWVMb29rdXAoCiAgICAgICAgVmFsdWUgPT4gMTEsICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgVmFsdWVMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWl0ZW0gU3RhdHNBdHRyaWJ1dGVDcmVhdGUoKQoKY3JlYXRlIGEgYXR0cmlidXRlIGFycmF5IGZvciB0aGUgc3RhdHMgZnJhbWV3b3JrCgogICAgbXkgJEF0dHJpYnV0ZSA9ICRCYWNrZW5kT2JqZWN0LT5TdGF0c0F0dHJpYnV0ZUNyZWF0ZSgKICAgICAgICBLZXkgID0+ICdLZXk6OlN1YmtleScsCiAgICAgICAgTmFtZSA9PiAnTmFtZScsCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgU3RhdHNBdHRyaWJ1dGVDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IE5hbWUgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgYXJydGlidXRlCiAgICBteSAkQXR0cmlidXRlID0gWwogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMCwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAwLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJFBhcmFte0tleX0sCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ0lucHV0RmllbGQnLAogICAgICAgIH0sCiAgICBdOwoKICAgIHJldHVybiAkQXR0cmlidXRlOwp9Cgo9aXRlbSBFeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSBzZWFyY2ggdmFsdWUgZm9yIGV4cG9ydAoKICAgIG15ICRBcnJheVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5FeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBFeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aXRlbSBFeHBvcnRWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSB2YWx1ZSBmb3IgZXhwb3J0CgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPkV4cG9ydFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEV4cG9ydFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1pdGVtIEltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHNlYXJjaCB2YWx1ZSBmb3IgaW1wb3J0CgogICAgbXkgJEFycmF5UmVmID0gJEJhY2tlbmRPYmplY3QtPkltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1pdGVtIEltcG9ydFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHZhbHVlIGZvciBpbXBvcnQKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+SW1wb3J0VmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0vWE1ML1R5cGUvVGV4dEFyZWEucG0gLSB4bWwgYmFja2VuZCBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpUZXh0QXJlYTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlhNTDo6VHlwZTo6VGV4dEFyZWEgLSB4bWwgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIHhtbCBmdW5jdGlvbnMgb2YgdGV4dGFyZWEgb2JqZWN0cwoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpDb25maWc7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkVuY29kZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TG9nOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpEQjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TWFpbjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW07CgogICAgbXkgJENvbmZpZ09iamVjdCA9IEtlcm5lbDo6Q29uZmlnLT5uZXcoKTsKICAgIG15ICRFbmNvZGVPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICApOwogICAgbXkgJExvZ09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpMb2ctPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICk7CiAgICBteSAkTWFpbk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpNYWluLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICApOwogICAgbXkgJERCT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgKTsKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgREJPYmplY3QgICAgID0+ICREQk9iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwogICAgJEJhY2tlbmRPYmplY3QgPSAkQ29uZmlnSXRlbU9iamVjdC0+X0xvYWRYTUxUeXBlQmFja2VuZCgKICAgICAgICBUeXBlID0+ICdUZXh0QXJlYScsCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoREJPYmplY3QgQ29uZmlnT2JqZWN0IEVuY29kZU9iamVjdCBMb2dPYmplY3QgTWFpbk9iamVjdCkpIHsKICAgICAgICAkU2VsZi0+eyRPYmplY3R9ID0gJFBhcmFteyRPYmplY3R9IHx8IGRpZSAiR290IG5vICRPYmplY3QhIjsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFZhbHVlTG9va3VwKCkKCmdldCB0aGUgdGV4dCBkYXRhIG9mIGEgdmVyc2lvbgoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5WYWx1ZUxvb2t1cCgKICAgICAgICBWYWx1ZSA9PiAxMSwgICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBWYWx1ZUxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aXRlbSBTdGF0c0F0dHJpYnV0ZUNyZWF0ZSgpCgpjcmVhdGUgYSBhdHRyaWJ1dGUgYXJyYXkgZm9yIHRoZSBzdGF0cyBmcmFtZXdvcmsKCiAgICBteSAkQXR0cmlidXRlID0gJEJhY2tlbmRPYmplY3QtPlN0YXRzQXR0cmlidXRlQ3JlYXRlKAogICAgICAgIEtleSAgPT4gJ0tleTo6U3Via2V5JywKICAgICAgICBOYW1lID0+ICdOYW1lJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBTdGF0c0F0dHJpYnV0ZUNyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgTmFtZSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSBhcnJ0aWJ1dGUKICAgIG15ICRBdHRyaWJ1dGUgPSBbCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICRQYXJhbXtOYW1lfSwKICAgICAgICAgICAgVXNlQXNYdmFsdWUgICAgICA9PiAwLAogICAgICAgICAgICBVc2VBc1ZhbHVlU2VyaWVzID0+IDAsCiAgICAgICAgICAgIFVzZUFzUmVzdHJpY3Rpb24gPT4gMSwKICAgICAgICAgICAgRWxlbWVudCAgICAgICAgICA9PiAkUGFyYW17S2V5fSwKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnSW5wdXRGaWVsZCcsCiAgICAgICAgfSwKICAgIF07CgogICAgcmV0dXJuICRBdHRyaWJ1dGU7Cn0KCj1pdGVtIEV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHNlYXJjaCB2YWx1ZSBmb3IgZXhwb3J0CgogICAgbXkgJEFycmF5UmVmID0gJEJhY2tlbmRPYmplY3QtPkV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1pdGVtIEV4cG9ydFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHZhbHVlIGZvciBleHBvcnQKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0VmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRXhwb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWl0ZW0gSW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgc2VhcmNoIHZhbHVlIGZvciBpbXBvcnQKCiAgICBteSAkQXJyYXlSZWYgPSAkQmFja2VuZE9iamVjdC0+SW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWl0ZW0gSW1wb3J0VmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgdmFsdWUgZm9yIGltcG9ydAoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5JbXBvcnRWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBJbXBvcnRWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vTGlua09iamVjdC9JVFNNQ29uZmlnSXRlbS5wbSAtIHRvIGxpbmsgY29uZmlnIGl0ZW0gb2JqZWN0cwojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3Q6OklUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKCj1oZWFkMSBOQU1FCgpLZXJuZWwvU3lzdGVtL0xpbmtPYmplY3QvSVRTTUNvbmZpZ0l0ZW0ucG0tIExpbmtPYmplY3QgbW9kdWxlIGZvciBJVFNNQ29uZmlnSXRlbQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpDb25maWc7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkVuY29kZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TG9nOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpUaW1lOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpNYWluOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpEQjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdDo6SVRTTUNvbmZpZ0l0ZW07CgogICAgbXkgJENvbmZpZ09iamVjdCA9IEtlcm5lbDo6Q29uZmlnLT5uZXcoKTsKICAgIG15ICRFbmNvZGVPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICApOwogICAgbXkgJExvZ09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpMb2ctPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICk7CiAgICBteSAkVGltZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICApOwogICAgbXkgJE1haW5PYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6TWFpbi0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgKTsKICAgIG15ICREQk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpEQi0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgICA9PiAkTWFpbk9iamVjdCwKICAgICk7CiAgICBteSAkSVRTTUNvbmZpZ0l0ZW1PYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdDo6SVRTTUNvbmZpZ0l0ZW0tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgICAgICAgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgICAgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgICAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgICAgICAgICA9PiAkTWFpbk9iamVjdCwKICAgICAgICBUaW1lT2JqZWN0ICAgICAgICAgPT4gJFRpbWVPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ICAgICAgID0+ICRFbmNvZGVPYmplY3QsCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAoCiAgICAgICAgcXcoREJPYmplY3QgQ29uZmlnT2JqZWN0IEVuY29kZU9iamVjdCBMb2dPYmplY3QgTWFpbk9iamVjdCBUaW1lT2JqZWN0KQogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+eyRPYmplY3R9ID0gJFBhcmFteyRPYmplY3R9IHx8IGRpZSAiR290IG5vICRPYmplY3QhIjsKICAgIH0KCiAgICAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZy0+bmV3KCAleyRTZWxmfSApOwogICAgJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0tPm5ldyggJXskU2VsZn0gKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIExpbmtMaXN0V2l0aERhdGEoKQoKZmlsbCB1cCB0aGUgbGluayBsaXN0IHdpdGggZGF0YQoKICAgICRTdWNjZXNzID0gJExpbmtPYmplY3RCYWNrZW5kLT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgIExpbmtMaXN0ID0+ICRIYXNoUmVmLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtMaXN0V2l0aERhdGEgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTGlua0xpc3QgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGxpbmsgbGlzdAogICAgaWYgKCByZWYgJFBhcmFte0xpbmtMaXN0fSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdMaW5rTGlzdCBtdXN0IGJlIGEgaGFzaCByZWZlcmVuY2UhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBmb3IgbXkgJExpbmtUeXBlICgga2V5cyAleyAkUGFyYW17TGlua0xpc3R9IH0gKSB7CgogICAgICAgIGZvciBteSAkRGlyZWN0aW9uICgga2V5cyAleyAkUGFyYW17TGlua0xpc3R9LT57JExpbmtUeXBlfSB9ICkgewoKICAgICAgICAgICAgQ09ORklHSVRFTUlEOgogICAgICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIGtleXMgJXsgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufSB9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IGxhc3QgdmVyc2lvbiBkYXRhCiAgICAgICAgICAgICAgICBteSAkVmVyc2lvbkRhdGEgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5WZXJzaW9uR2V0KAogICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgICAgIFhNTERhdGFHZXQgICA9PiAwLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyByZW1vdmUgaWQgZnJvbSBoYXNoIGlmIGNvbmZpZyBpdGVtIGNhbiBub3QgZ2V0CiAgICAgICAgICAgICAgICBpZiAoICEkVmVyc2lvbkRhdGEgfHwgcmVmICRWZXJzaW9uRGF0YSBuZSAnSEFTSCcgfHwgISV7JFZlcnNpb25EYXRhfSApIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufS0+eyRDb25maWdJdGVtSUR9OwogICAgICAgICAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgYWRkIHZlcnNpb24gZGF0YQogICAgICAgICAgICAgICAgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufS0+eyRDb25maWdJdGVtSUR9ID0gJFZlcnNpb25EYXRhOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBPYmplY3RQZXJtaXNzaW9uKCkKCmNoZWNrcyByZWFkIHBlcm1pc3Npb24gZm9yIGEgZ2l2ZW4gb2JqZWN0IGFuZCBVc2VySUQuCgogICAgJFBlcm1pc3Npb24gPSAkTGlua09iamVjdC0+T2JqZWN0UGVybWlzc2lvbigKICAgICAgICBPYmplY3QgID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgS2V5ICAgICA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3RQZXJtaXNzaW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9iamVjdCBLZXkgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjb25maWcgb2YgY29uZmlnaXRlbSB6b29tIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9CiAgICAgICAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtWm9vbScpOwoKICAgICMgY2hlY2sgZm9yIGFjY2VzcyByaWdodHMKICAgIG15ICRBY2Nlc3MgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5QZXJtaXNzaW9uKAogICAgICAgIFNjb3BlICA9PiAnSXRlbScsCiAgICAgICAgSXRlbUlEID0+ICRQYXJhbXtLZXl9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBUeXBlICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICApOwoKICAgIHJldHVybiAkQWNjZXNzOwp9Cgo9aXRlbSBPYmplY3REZXNjcmlwdGlvbkdldCgpCgpyZXR1cm4gYSBoYXNoIG9mIG9iamVjdCBkZXNjcmlwdGlvbnMKClJldHVybgogICAgJURlc2NyaXB0aW9uID0gKAogICAgICAgIE5vcm1hbCA9PiAiQ29uZmlnSXRlbSMgMTIzNDQ1NSIsCiAgICAgICAgTG9uZyAgID0+ICJDb25maWdJdGVtIyAxMjM0NDU1OiBUaGUgQ29uZmlnIEl0ZW0gVGl0bGUiLAogICAgKTsKCiAgICAlRGVzY3JpcHRpb24gPSAkTGlua09iamVjdC0+T2JqZWN0RGVzY3JpcHRpb25HZXQoCiAgICAgICAgS2V5ICAgICA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3REZXNjcmlwdGlvbkdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhPYmplY3QgS2V5IFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgZGVzY3JpcHRpb24KICAgIG15ICVEZXNjcmlwdGlvbiA9ICgKICAgICAgICBOb3JtYWwgPT4gJ0NvbmZpZ0l0ZW0nLAogICAgICAgIExvbmcgICA9PiAnQ29uZmlnSXRlbScsCiAgICApOwoKICAgIHJldHVybiAlRGVzY3JpcHRpb24gaWYgJFBhcmFte01vZGV9ICYmICRQYXJhbXtNb2RlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICAjIGdldCBsYXN0IHZlcnNpb24gZGF0YQogICAgbXkgJFZlcnNpb25EYXRhID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0tleX0sCiAgICAgICAgWE1MRGF0YUdldCAgID0+IDAsCiAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gaWYgISRWZXJzaW9uRGF0YTsKICAgIHJldHVybiBpZiByZWYgJFZlcnNpb25EYXRhIG5lICdIQVNIJzsKICAgIHJldHVybiBpZiAhJXskVmVyc2lvbkRhdGF9OwoKICAgICMgY3JlYXRlIGRlc2NyaXB0aW9uCiAgICAlRGVzY3JpcHRpb24gPSAoCiAgICAgICAgTm9ybWFsID0+ICJDb25maWdJdGVtIyAkVmVyc2lvbkRhdGEtPntOdW1iZXJ9IiwKICAgICAgICBMb25nICAgPT4gIkNvbmZpZ0l0ZW0jICRWZXJzaW9uRGF0YS0+e051bWJlcn06ICRWZXJzaW9uRGF0YS0+e05hbWV9IiwKICAgICk7CgogICAgcmV0dXJuICVEZXNjcmlwdGlvbjsKfQoKPWl0ZW0gT2JqZWN0U2VhcmNoKCkKCnJldHVybiBhIGhhc2ggbGlzdCBvZiB0aGUgc2VhcmNoIHJlc3VsdHMKClJldHVybgogICAgJFNlYXJjaExpc3QgPSB7CiAgICAgICAgTk9UTElOS0VEID0+IHsKICAgICAgICAgICAgU291cmNlID0+IHsKICAgICAgICAgICAgICAgIDEyICA9PiAkRGF0YU9mSXRlbTEyLAogICAgICAgICAgICAgICAgMjEyID0+ICREYXRhT2ZJdGVtMjEyLAogICAgICAgICAgICAgICAgMzMyID0+ICREYXRhT2ZJdGVtMzMyLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9OwoKICAgICRTZWFyY2hMaXN0ID0gJExpbmtPYmplY3RCYWNrZW5kLT5PYmplY3RTZWFyY2goCiAgICAgICAgU3ViT2JqZWN0ICAgID0+ICcyNScsICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBTZWFyY2hQYXJhbXMgPT4gJEhhc2hSZWYsICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3RTZWFyY2ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgcGFyYW1zCiAgICAkUGFyYW17U2VhcmNoUGFyYW1zfSB8fD0ge307CgogICAgIyBzZXQgZm9jdXMKICAgIG15ICVTZWFyY2g7CiAgICBmb3IgbXkgJEVsZW1lbnQgKHF3KE51bWJlciBOYW1lKSkgewogICAgICAgIGlmICggJFBhcmFte1NlYXJjaFBhcmFtc30tPnskRWxlbWVudH0gKSB7CiAgICAgICAgICAgICRTZWFyY2h7JEVsZW1lbnR9ID0gJyonIC4gJFBhcmFte1NlYXJjaFBhcmFtc30tPnskRWxlbWVudH0gLiAnKic7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggISRQYXJhbXtTdWJPYmplY3R9ICkgewoKICAgICAgICAjIGdldCB0aGUgY29uZmlnIHdpdGggdGhlIGRlZmF1bHQgc3Vib2JqZWN0cwogICAgICAgIG15ICREZWZhdWx0U3Vib2JqZWN0ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0xpbmtPYmplY3Q6OkRlZmF1bHRTdWJPYmplY3QnKSB8fCB7fTsKCiAgICAgICAgIyBleHRyYWN0IGRlZmF1bHQgY2xhc3MgbmFtZQogICAgICAgIG15ICREZWZhdWx0Q2xhc3MgPSAkRGVmYXVsdFN1Ym9iamVjdC0+e0lUU01Db25maWdJdGVtfSB8fCAnJzsKCiAgICAgICAgIyBnZXQgY2xhc3MgbGlzdAogICAgICAgIG15ICRDbGFzc0xpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIGlmICEkQ2xhc3NMaXN0OwogICAgICAgIHJldHVybiBpZiByZWYgJENsYXNzTGlzdCBuZSAnSEFTSCc7CgogICAgICAgICMgbG9va3VwIHRoZSBjbGFzcyBpZAogICAgICAgIG15ICVDbGFzc0xpc3RSZXZlcnNlID0gcmV2ZXJzZSAleyRDbGFzc0xpc3R9OwogICAgICAgICRQYXJhbXtTdWJPYmplY3R9ID0gJENsYXNzTGlzdFJldmVyc2V7JERlZmF1bHRDbGFzc30gfHwgJyc7CiAgICB9CgogICAgcmV0dXJuIGlmICEkUGFyYW17U3ViT2JqZWN0fTsKCiAgICAjIHNlYXJjaCB0aGUgY29uZmlnIGl0ZW1zCiAgICBteSAkQ29uZmlnSXRlbUlEcyA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgKICAgICAgICAleyAkUGFyYW17U2VhcmNoUGFyYW1zfSB9LAogICAgICAgICVTZWFyY2gsCiAgICAgICAgQ2xhc3NJRHMgICAgICAgICAgICAgID0+IFsgJFBhcmFte1N1Yk9iamVjdH0gXSwKICAgICAgICBQcmV2aW91c1ZlcnNpb25TZWFyY2ggPT4gMCwKICAgICAgICBVc2luZ1dpbGRjYXJkcyAgICAgICAgPT4gMSwKICAgICAgICBPcmRlckJ5ICAgICAgICAgICAgICAgPT4gWydOdW1iZXInXSwKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uICAgICAgPT4gWydVcCddLAogICAgICAgIExpbWl0ICAgICAgICAgICAgICAgICA9PiA1MCwKICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIG15ICVTZWFyY2hMaXN0OwogICAgQ09ORklHSVRFTUlEOgogICAgZm9yIG15ICRDb25maWdJdGVtSUQgKCBAeyRDb25maWdJdGVtSURzfSApIHsKCiAgICAgICAgIyBnZXQgbGFzdCB2ZXJzaW9uIGRhdGEKICAgICAgICBteSAkVmVyc2lvbkRhdGEgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5WZXJzaW9uR2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgWE1MRGF0YUdldCAgID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAhJFZlcnNpb25EYXRhOwogICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmIHJlZiAkVmVyc2lvbkRhdGEgbmUgJ0hBU0gnOwogICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmICEleyRWZXJzaW9uRGF0YX07CgogICAgICAgICMgYWRkIHZlcnNpb24gZGF0YQogICAgICAgICRTZWFyY2hMaXN0e05PVExJTktFRH0tPntTb3VyY2V9LT57JENvbmZpZ0l0ZW1JRH0gPSAkVmVyc2lvbkRhdGE7CiAgICB9CgogICAgcmV0dXJuIFwlU2VhcmNoTGlzdDsKfQoKPWl0ZW0gTGlua0FkZFByZSgpCgpsaW5rIGFkZCBwcmUgZXZlbnQgbW9kdWxlCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0FkZFByZSgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFNvdXJjZU9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtBZGRQcmUoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICBUYXJnZXRLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0FkZFByZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVHlwZSBTdGF0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZG8gbm90IHRyaWdnZXIgZXZlbnQgZm9yIHRlbXBvcmFyeSBsaW5rcwogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gTGlua0FkZFBvc3QoKQoKbGluayBhZGQgcHJlIGV2ZW50IG1vZHVsZQoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtBZGRQb3N0KAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgU291cmNlS2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgIG9yCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0FkZFBvc3QoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICBUYXJnZXRLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0FkZFBvc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRvIG5vdCB0cmlnZ2VyIGV2ZW50IGZvciB0ZW1wb3JhcnkgbGlua3MKICAgIHJldHVybiAxIGlmICRQYXJhbXtTdGF0ZX0gZXEgJ1RlbXBvcmFyeSc7CgogICAgIyBnZXQgaW5mb3JtYXRpb24gYWJvdXQgbGlua2VkIG9iamVjdAogICAgbXkgJElEICAgICA9ICRQYXJhbXtUYXJnZXRLZXl9ICAgIHx8ICRQYXJhbXtTb3VyY2VLZXl9OwogICAgbXkgJE9iamVjdCA9ICRQYXJhbXtUYXJnZXRPYmplY3R9IHx8ICRQYXJhbXtTb3VyY2VPYmplY3R9OwoKICAgICMgcmVjYWxjdWxhdGUgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBDSQogICAgJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+Q3VySW5jaVN0YXRlUmVjYWxjKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17S2V5fSwKICAgICk7CgogICAgIyB0cmlnZ2VyIExpbmtBZGQgZXZlbnQKICAgICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnTGlua0FkZCcsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0tleX0sCiAgICAgICAgICAgIENvbW1lbnQgICAgICA9PiAkSUQgLiAnJSUnIC4gJE9iamVjdCwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIExpbmtEZWxldGVQcmUoKQoKbGluayBkZWxldGUgcHJlIGV2ZW50IG1vZHVsZQoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGVQcmUoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUHJlKAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtEZWxldGVQcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRvIG5vdCB0cmlnZ2VyIGV2ZW50IGZvciB0ZW1wb3JhcnkgbGlua3MKICAgIHJldHVybiAxIGlmICRQYXJhbXtTdGF0ZX0gZXEgJ1RlbXBvcmFyeSc7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIExpbmtEZWxldGVQb3N0KCkKCmxpbmsgZGVsZXRlIHBvc3QgZXZlbnQgbW9kdWxlCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0RlbGV0ZVBvc3QoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUG9zdCgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgIFRhcmdldEtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBMaW5rRGVsZXRlUG9zdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVHlwZSBTdGF0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZG8gbm90IHRyaWdnZXIgZXZlbnQgZm9yIHRlbXBvcmFyeSBsaW5rcwogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICAjIGdldCBpbmZvcm1hdGlvbiBhYm91dCBsaW5rZWQgb2JqZWN0CiAgICBteSAkSUQgICAgID0gJFBhcmFte1RhcmdldEtleX0gICAgfHwgJFBhcmFte1NvdXJjZUtleX07CiAgICBteSAkT2JqZWN0ID0gJFBhcmFte1RhcmdldE9iamVjdH0gfHwgJFBhcmFte1NvdXJjZU9iamVjdH07CgogICAgIyByZWNhbGN1bGF0ZSB0aGUgY3VycmVudCBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIENJCiAgICAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5DdXJJbmNpU3RhdGVSZWNhbGMoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtLZXl9LAogICAgKTsKCiAgICAjIHRyaWdnZXIgTGlua0RlbGV0ZSBldmVudAogICAgJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdMaW5rRGVsZXRlJywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17S2V5fSwKICAgICAgICAgICAgQ29tbWVudCAgICAgID0+ICRJRCAuICclJScgLiAkT2JqZWN0LAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIEtlcm5lbC9TeXN0ZW0vU2VydmljZS9QcmVmZXJlbmNlc0RCLnBtIC0gc29tZSB1c2VyIGZ1bmN0aW9ucwojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRvcmlnaW46IGh0dHBzOi8vZ2l0aHViLmNvbS9PVFJTL290cnMvYmxvYi85YmU4ZmI4YWMxY2VlYzBmYzMzOThlNzg5NDJmODc3M2FmODVhOWRjL0tlcm5lbC9TeXN0ZW0vU2VydmljZS9QcmVmZXJlbmNlc0RCLnBtCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOjpQcmVmZXJlbmNlc0RCOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpDYWNoZUludGVybmFsOwoKdXNlIHZhcnMgcXcoQElTQSk7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciAocXcoREJPYmplY3QgQ29uZmlnT2JqZWN0IExvZ09iamVjdCBFbmNvZGVPYmplY3QgTWFpbk9iamVjdCkpIHsKICAgICAgICAkU2VsZi0+eyRffSA9ICRQYXJhbXskX30gfHwgZGllICJHb3Qgbm8gJF8hIjsKICAgIH0KCiAgICAkU2VsZi0+e0NhY2hlSW50ZXJuYWxPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkNhY2hlSW50ZXJuYWwtPm5ldygKICAgICAgICAleyRTZWxmfSwKICAgICAgICBUeXBlID0+ICdTZXJ2aWNlUHJlZmVyZW5jZXNEQicsCiAgICAgICAgVFRMICA9PiA2MCAqIDYwICogMjQgKiAyMCwKICAgICk7CgogICAgIyBwcmVmZXJlbmNlcyB0YWJsZSBkYXRhCiAgICAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGV9ICAgICAgICAgID0gJ3NlcnZpY2VfcHJlZmVyZW5jZXMnOwogICAgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlS2V5fSAgICAgICA9ICdwcmVmZXJlbmNlc19rZXknOwogICAgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlVmFsdWV9ICAgICA9ICdwcmVmZXJlbmNlc192YWx1ZSc7CiAgICAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVTZXJ2aWNlSUR9ID0gJ3NlcnZpY2VfaWQnOwoKICAgICMgY3JlYXRlIGNhY2hlIHByZWZpeAogICAgJFNlbGYtPntDYWNoZVByZWZpeH0gPSAnU2VydmljZVByZWZlcmVuY2VzREInCiAgICAgICAgLiAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGV9CiAgICAgICAgLiAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVLZXl9CiAgICAgICAgLiAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVWYWx1ZX0KICAgICAgICAuICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZVNlcnZpY2VJRH07CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgU2VydmljZVByZWZlcmVuY2VzU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciAocXcoU2VydmljZUlEIEtleSBWYWx1ZSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskX30gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKCBQcmlvcml0eSA9PiAnZXJyb3InLCBNZXNzYWdlID0+ICJOZWVkICRfISIgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlbGV0ZSBvbGQgZGF0YQogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGV9IFdIRVJFICIKICAgICAgICAgICAgLiAiJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlU2VydmljZUlEfSA9ID8gQU5EICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZUtleX0gPSA/IiwKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtTZXJ2aWNlSUR9LCBcJFBhcmFte0tleX0gXSwKICAgICk7CgogICAgIyBpbnNlcnQgbmV3IGRhdGEKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiSU5TRVJUIElOVE8gJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlfSAoJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlU2VydmljZUlEfSwgIgogICAgICAgICAgICAuICIgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlS2V5fSwgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlVmFsdWV9KSAiCiAgICAgICAgICAgIC4gIiBWQUxVRVMgKD8sID8sID8pIiwKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtTZXJ2aWNlSUR9LCBcJFBhcmFte0tleX0sIFwkUGFyYW17VmFsdWV9IF0sCiAgICApOwoKICAgICMgZGVsZXRlIGNhY2hlCiAgICAkU2VsZi0+e0NhY2hlSW50ZXJuYWxPYmplY3R9LT5EZWxldGUoCiAgICAgICAgS2V5ID0+ICRTZWxmLT57Q2FjaGVQcmVmaXh9IC4gJFBhcmFte1NlcnZpY2VJRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgpzdWIgU2VydmljZVByZWZlcmVuY2VzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciAocXcoU2VydmljZUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskX30gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKCBQcmlvcml0eSA9PiAnZXJyb3InLCBNZXNzYWdlID0+ICJOZWVkICRfISIgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiMgLS0tCiMgSVRTTQojIC0tLQojICAgICMgY2hlY2sgaWYgc2VydmljZSBwcmVmZXJlbmNlcyBhcmUgYXZhaWxhYmxlCiMgICAgcmV0dXJuIGlmICEkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU2VydmljZVByZWZlcmVuY2VzJyk7CiMKIyAgICAjIHJlYWQgY2FjaGUKIyAgICBteSAkQ2FjaGUgPSAkU2VsZi0+e0NhY2hlSW50ZXJuYWxPYmplY3R9LT5HZXQoCiMgICAgICAgIEtleSA9PiAkU2VsZi0+e0NhY2hlUHJlZml4fSAuICRQYXJhbXtTZXJ2aWNlSUR9LAojICAgICk7CiMgICAgcmV0dXJuICV7JENhY2hlfSBpZiAkQ2FjaGU7CiMgLS0tCgogICAgIyBnZXQgcHJlZmVyZW5jZXMKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlS2V5fSwgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlVmFsdWV9ICIKICAgICAgICAgICAgLiAiIEZST00gJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlfSBXSEVSRSAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVTZXJ2aWNlSUR9ID0gPyIsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17U2VydmljZUlEfSBdLAogICAgKTsKCiAgICBteSAlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJERhdGF7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICB9CgogICAgIyBzZXQgY2FjaGUKICAgICRTZWxmLT57Q2FjaGVJbnRlcm5hbE9iamVjdH0tPlNldCgKICAgICAgICBLZXkgICA9PiAkU2VsZi0+e0NhY2hlUHJlZml4fSAuICRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgIFZhbHVlID0+IFwlRGF0YSwKICAgICk7CgogICAgcmV0dXJuICVEYXRhOwp9CgoxOwo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vU3RhdHMvRHluYW1pYy9JVFNNQ29uZmlnSXRlbS5wbSAtIGFsbCBkeW5hbWljIGl0c20gY29uZmlnIGl0ZW0gc3RhdHMgZnVuY3Rpb25zCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6U3RhdHM6OkR5bmFtaWM6OklUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KERCT2JqZWN0IENvbmZpZ09iamVjdCBFbmNvZGVPYmplY3QgTG9nT2JqZWN0IFVzZXJPYmplY3QgTWFpbk9iamVjdCBUaW1lT2JqZWN0KQogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+eyRPYmplY3R9ID0gJFBhcmFteyRPYmplY3R9IHx8IGRpZSAiR290IG5vICRPYmplY3QhIjsKICAgIH0KICAgICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nLT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9ICAgICA9IEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbS0+bmV3KCAleyRTZWxmfSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIEdldE9iamVjdE5hbWUgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICByZXR1cm4gJ0lUU01Db25maWdJdGVtJzsKfQoKc3ViIEdldE9iamVjdEF0dHJpYnV0ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjbGFzcyBsaXN0CiAgICBteSAkQ2xhc3NMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICApOwoKICAgICMgZ2V0IGRlcGxveW1lbnQgc3RhdGUgbGlzdAogICAgbXkgJERlcGxTdGF0ZUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICApOwoKICAgICMgZ2V0IGluY2lkZW50IHN0YXRlIGxpc3QKICAgIG15ICRJbmNpU3RhdGVMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlJywKICAgICk7CgogICAgIyBnZXQgY3VycmVudCB0aW1lIHRvIGZpeCBidWcjMzgzMAogICAgbXkgJFRpbWVTdGFtcCA9ICRTZWxmLT57VGltZU9iamVjdH0tPkN1cnJlbnRUaW1lc3RhbXAoKTsKICAgIG15ICgkRGF0ZSkgPSBzcGxpdCAvXHMrLywgJFRpbWVTdGFtcDsKICAgIG15ICRUb2RheSA9IHNwcmludGYgIiVzIDIzOjU5OjU5IiwgJERhdGU7CgogICAgIyBjcmVhdGUgb2JqZWN0IGF0dHJpYnV0ZSBhcnJheQogICAgbXkgQE9iamVjdEF0dHJpYnV0ZXMgPSAoCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdDbGFzcycsCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyAgICA9PiAxLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uICAgID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgICAgPT4gJ0NsYXNzSURzJywKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICAgICA9PiAnTXVsdGlTZWxlY3RGaWVsZCcsCiAgICAgICAgICAgIExhbmd1YWdlVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICAgICAgVmFsdWVzICAgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdEZXBsb3ltZW50IFN0YXRlJywKICAgICAgICAgICAgVXNlQXNYdmFsdWUgICAgICA9PiAxLAogICAgICAgICAgICBVc2VBc1ZhbHVlU2VyaWVzID0+IDEsCiAgICAgICAgICAgIFVzZUFzUmVzdHJpY3Rpb24gPT4gMSwKICAgICAgICAgICAgRWxlbWVudCAgICAgICAgICA9PiAnRGVwbFN0YXRlSURzJywKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnTXVsdGlTZWxlY3RGaWVsZCcsCiAgICAgICAgICAgIFZhbHVlcyAgICAgICAgICAgPT4gJERlcGxTdGF0ZUxpc3QsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ0luY2lkZW50IFN0YXRlJywKICAgICAgICAgICAgVXNlQXNYdmFsdWUgICAgICA9PiAxLAogICAgICAgICAgICBVc2VBc1ZhbHVlU2VyaWVzID0+IDEsCiAgICAgICAgICAgIFVzZUFzUmVzdHJpY3Rpb24gPT4gMSwKICAgICAgICAgICAgRWxlbWVudCAgICAgICAgICA9PiAnSW5jaVN0YXRlSURzJywKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnTXVsdGlTZWxlY3RGaWVsZCcsCiAgICAgICAgICAgIFZhbHVlcyAgICAgICAgICAgPT4gJEluY2lTdGF0ZUxpc3QsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ051bWJlcicsCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMCwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAwLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJ051bWJlcicsCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ0lucHV0RmllbGQnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgVXNlQXNYdmFsdWUgICAgICA9PiAwLAogICAgICAgICAgICBVc2VBc1ZhbHVlU2VyaWVzID0+IDAsCiAgICAgICAgICAgIFVzZUFzUmVzdHJpY3Rpb24gPT4gMSwKICAgICAgICAgICAgRWxlbWVudCAgICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ0lucHV0RmllbGQnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdDcmVhdGUgVGltZScsCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAxLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJ0NyZWF0ZVRpbWUnLAogICAgICAgICAgICBUaW1lUGVyaW9kRm9ybWF0ID0+ICdEYXRlSW5wdXRGb3JtYXQnLAogICAgICAgICAgICBCbG9jayAgICAgICAgICAgID0+ICdUaW1lJywKICAgICAgICAgICAgVmFsdWVzICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICBUaW1lU3RhcnQgPT4gJ0NvbmZpZ0l0ZW1DcmVhdGVUaW1lTmV3ZXJEYXRlJywKICAgICAgICAgICAgICAgIFRpbWVTdG9wICA9PiAnQ29uZmlnSXRlbUNyZWF0ZVRpbWVPbGRlckRhdGUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdDaGFuZ2UgVGltZScsCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAxLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJ0NoYW5nZVRpbWUnLAogICAgICAgICAgICBUaW1lUGVyaW9kRm9ybWF0ID0+ICdEYXRlSW5wdXRGb3JtYXQnLAogICAgICAgICAgICBCbG9jayAgICAgICAgICAgID0+ICdUaW1lJywKICAgICAgICAgICAgVGltZVN0b3AgICAgICAgICA9PiAkVGltZVN0YW1wLAogICAgICAgICAgICBWYWx1ZXMgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgIFRpbWVTdGFydCA9PiAnQ29uZmlnSXRlbUNoYW5nZVRpbWVOZXdlckRhdGUnLAogICAgICAgICAgICAgICAgVGltZVN0b3AgID0+ICdDb25maWdJdGVtQ2hhbmdlVGltZU9sZGVyRGF0ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgdGhlIHhtbCBkYXRhCiAgICBDTEFTU0lEOgogICAgZm9yIG15ICRDbGFzc0lEICggc29ydCBrZXlzICV7JENsYXNzTGlzdH0gKSB7CgogICAgICAgICMgZ2V0IHhtbCBkZWZpbml0aW9uIGhhc2gKICAgICAgICBteSAkWE1MRGVmaW5pdGlvbiA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkRlZmluaXRpb25HZXQoCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzSUQsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBDTEFTU0lEIGlmICEkWE1MRGVmaW5pdGlvbi0+e0RlZmluaXRpb25JRH07CgogICAgICAgICRTZWxmLT5fWE1MQXR0cmlidXRlQWRkKAogICAgICAgICAgICBPYmplY3RBdHRyaWJ1dGVzID0+IFxAT2JqZWN0QXR0cmlidXRlcywKICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiAgICA9PiAkWE1MRGVmaW5pdGlvbi0+e0RlZmluaXRpb25SZWZ9LAogICAgICAgICAgICBQcmVmaXggICAgICAgICAgID0+ICdYTUw6OicgLiAkQ2xhc3NJRCwKICAgICAgICAgICAgUHJlZml4TmFtZSAgICAgICA9PiAkQ2xhc3NMaXN0LT57JENsYXNzSUR9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIEBPYmplY3RBdHRyaWJ1dGVzOwp9CgpzdWIgX1hNTEF0dHJpYnV0ZUFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhJFBhcmFte09iamVjdEF0dHJpYnV0ZXN9OwogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGVmaW5pdGlvbn07CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxEZWZpbml0aW9ufSBuZSAnQVJSQVknOwoKICAgIGlmICggJFBhcmFte1ByZWZpeH0gKSB7CiAgICAgICAgJFBhcmFte1ByZWZpeH0gLj0gJzo6JzsKICAgIH0KICAgIGlmICggJFBhcmFte1ByZWZpeE5hbWV9ICkgewogICAgICAgICRQYXJhbXtQcmVmaXhOYW1lfSAuPSAnOjonOwogICAgfQoKICAgICRQYXJhbXtMZXZlbH0gICAgICB8fD0gMDsKICAgICRQYXJhbXtQcmVmaXh9ICAgICB8fD0gJyc7CiAgICAkUGFyYW17UHJlZml4TmFtZX0gfHw9ICcnOwoKICAgIElURU06CiAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17WE1MRGVmaW5pdGlvbn0gfSApIHsKCiAgICAgICAgbmV4dCBJVEVNIGlmICEkSXRlbS0+e1NlYXJjaGFibGV9ICYmICEkSXRlbS0+e1N1Yn07CgogICAgICAgICMgY3JlYXRlIGtleSBhbmQgbmFtZQogICAgICAgIG15ICRLZXkgID0gJFBhcmFte1ByZWZpeH0gLiAkSXRlbS0+e0tleX07CiAgICAgICAgbXkgJE5hbWUgPSAkUGFyYW17UHJlZml4TmFtZX0gLiAkSXRlbS0+e05hbWV9OwoKICAgICAgICAjIGFkZCBhdHRyaWJ1dGUKICAgICAgICBteSAkQXR0cmlidXRlID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+WE1MU3RhdHNBdHRyaWJ1dGVDcmVhdGUoCiAgICAgICAgICAgIEtleSAgPT4gJEtleSwKICAgICAgICAgICAgSXRlbSA9PiAkSXRlbSwKICAgICAgICAgICAgTmFtZSA9PiAkTmFtZSwKICAgICAgICApOwoKICAgICAgICBuZXh0IElURU0gaWYgISRBdHRyaWJ1dGU7CiAgICAgICAgbmV4dCBJVEVNIGlmIHJlZiAkQXR0cmlidXRlIG5lICdBUlJBWSc7CiAgICAgICAgbmV4dCBJVEVNIGlmICFzY2FsYXIgQHskQXR0cmlidXRlfTsKCiAgICAgICAgIyBhZGQgYXR0cmlidXRlcyB0byBvYmplY3QgYXJyYXkKICAgICAgICBwdXNoIEB7ICRQYXJhbXtPYmplY3RBdHRyaWJ1dGVzfSB9LCBAeyRBdHRyaWJ1dGV9OwoKICAgICAgICBuZXh0IElURU0gaWYgISRJdGVtLT57U3VifTsKCiAgICAgICAgIyBzdGFydCByZWN1cnNpb24sIGlmICJTdWIiIHdhcyBmb3VuZAogICAgICAgICRTZWxmLT5fWE1MQXR0cmlidXRlQWRkKAogICAgICAgICAgICBYTUxEZWZpbml0aW9uID0+ICRJdGVtLT57U3VifSwKICAgICAgICAgICAgTGV2ZWwgICAgICAgICA9PiAkUGFyYW17TGV2ZWx9ICsgMSwKICAgICAgICAgICAgUHJlZml4ICAgICAgICA9PiAkS2V5LAogICAgICAgICAgICBQcmVmaXhOYW1lICAgID0+ICROYW1lLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBHZXRTdGF0RWxlbWVudCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgc2V0IGxpbWl0CiAgICAkUGFyYW17TGltaXR9ID0gMV8wMDBfMDAwOwoKICAgICMgZXh0cmFjdCBhbGwgeG1sIHBhcmFtIGtleXMgZnJvbSB0aGUgcGFyYW0gaGFzaAogICAgbXkgQFhNTFBhcmFtcyA9IGdyZXAgeyAkXyA9fiBte1xBIFhNTDo6fXhtcyB9IGtleXMgJVBhcmFtOwoKICAgIGlmIChAWE1MUGFyYW1zKSB7CiAgICAgICAgcmV0dXJuICdZb3UgbXVzdCBkZWZpbmUgYSBjbGFzcyBpbiBvbmUgYXhpcy4nIGlmICEkUGFyYW17Q2xhc3NJRHN9OwogICAgICAgIHJldHVybiAnWW91IG11c3QgZGVmaW5lIGEgY2xhc3MgaW4gb25lIGF4aXMuJyBpZiByZWYgJFBhcmFte0NsYXNzSURzfSBuZSAnQVJSQVknOwogICAgfQoKICAgIG15ICVYTUxDbGFzc0lEczsKICAgIGZvciBteSAkUGFyYW1LZXkgKEBYTUxQYXJhbXMpIHsKCiAgICAgICAgIyBleHRyYWN0IHNlYXJjaCB2YWx1ZXMKICAgICAgICBteSAkU2VhcmNoVmFsdWVzID0gJFBhcmFteyRQYXJhbUtleX07CgogICAgICAgICMgcHJlcGFyZSBwYXJhbSB2YWx1ZQogICAgICAgIGlmICggIXJlZiAkU2VhcmNoVmFsdWVzICkgewogICAgICAgICAgICAkU2VhcmNoVmFsdWVzID0gWyRTZWFyY2hWYWx1ZXNdOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBpZiAhQHskU2VhcmNoVmFsdWVzfTsKCiAgICAgICAgIyBzcGxpdCBwYXJhbSBrZXkKICAgICAgICBteSAoICRDbGFzc0lELCAkU2VhcmNoS2V5ICkgPSAkUGFyYW1LZXkgPX4gbXsgXEEgWE1MOjogKCBcZCsgKSA6OiAoLispIFx6IH14bXM7CgogICAgICAgICMgcHJlcGFyZSBzZWFyY2gga2V5CiAgICAgICAgJFNlYXJjaEtleSA9fiBzWyA6OiBdWyd9WyVdeyddeG1zZzsKCiAgICAgICAgIyBBZGQgY2xhc3MgaWQgdG8geG1sIGNsYXNzIGlkIGhhc2gKICAgICAgICAkWE1MQ2xhc3NJRHN7JENsYXNzSUR9ID0gMTsKCiAgICAgICAgIyBjcmVhdGUgc2VhcmNoIGhhc2gKICAgICAgICBteSAkU2VhcmNoSGFzaCA9IHsKICAgICAgICAgICAgJ1sxXXtcJ1ZlcnNpb25cJ31bMV17XCcnIC4gJFNlYXJjaEtleSAuICdcJ31bJV17XCdDb250ZW50XCd9JyA9PiAkU2VhcmNoVmFsdWVzLAogICAgICAgIH07CgogICAgICAgIHB1c2ggQHsgJFBhcmFte1doYXR9IH0sICRTZWFyY2hIYXNoOwogICAgfQoKICAgIGlmICglWE1MQ2xhc3NJRHMpIHsKICAgICAgICBteSBARXhpc3RzID0gZ3JlcCB7ICRYTUxDbGFzc0lEc3skX30gfSBAeyAkUGFyYW17Q2xhc3NJRHN9IH07CgogICAgICAgIHJldHVybiAwIGlmICFARXhpc3RzOwogICAgfQoKICAgICMgc3RhcnQgY29uZmlnIGl0ZW0gZXh0ZW5kZWQgc2VhcmNoCiAgICBteSAkQ29uZmlnSXRlbUlEcyA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCglUGFyYW0pOwoKICAgIHJldHVybiBzY2FsYXIgQHskQ29uZmlnSXRlbUlEc307Cn0KCnN1YiBFeHBvcnRXcmFwcGVyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIFwlUGFyYW07Cn0KCnN1YiBJbXBvcnRXcmFwcGVyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIFwlUGFyYW07Cn0KCjE7Cg==
IyAtLQojIEltcG9ydEV4cG9ydE9iamVjdElUU01Db25maWdJdGVtLnQgLSBhbGwgaW1wb3J0IGV4cG9ydCB0ZXN0cyBmb3IgdGhlIElUU01Db25maWdJdGVtIG9iamVjdCBiYWNrZW5kCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIHF3KCRTZWxmKTsKCnVzZSBEYXRhOjpEdW1wZXI7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlOwp1c2UgS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nOwp1c2UgS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OklUU01Db25maWdJdGVtOwp1c2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOwp1c2UgS2VybmVsOjpTeXN0ZW06OlhNTDsKCiRTZWxmLT57RW5jb2RlT2JqZWN0fSAgICAgICAgID0gS2VybmVsOjpTeXN0ZW06OkVuY29kZS0+bmV3KCAleyRTZWxmfSApOwokU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZy0+bmV3KCAleyRTZWxmfSApOwokU2VsZi0+e0ltcG9ydEV4cG9ydE9iamVjdH0gICA9IEtlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQtPm5ldyggJXskU2VsZn0gKTsKJFNlbGYtPntPYmplY3RCYWNrZW5kT2JqZWN0fQogICAgPSBLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpJVFNNQ29uZmlnSXRlbS0+bmV3KCAleyRTZWxmfSApOwokU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtLT5uZXcoICV7JFNlbGZ9ICk7CiRTZWxmLT57WE1MT2JqZWN0fSAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6WE1MLT5uZXcoICV7JFNlbGZ9ICk7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgbWFrZSBwcmVwYXJhdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBhZGQgc29tZSB0ZXN0IHRlbXBsYXRlcyBmb3IgbGF0ZXIgY2hlY2tzCm15IEBUZW1wbGF0ZUlEczsKZm9yICggMSAuLiAzMCApIHsKCiAgICAjIGFkZCBhIHRlc3QgdGVtcGxhdGUgZm9yIGxhdGVyIGNoZWNrcwogICAgbXkgJFRlbXBsYXRlSUQgPSAkU2VsZi0+e0ltcG9ydEV4cG9ydE9iamVjdH0tPlRlbXBsYXRlQWRkKAogICAgICAgIE9iamVjdCAgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICBGb3JtYXQgID0+ICdVbml0VGVzdCcgLiBpbnQgcmFuZCAxXzAwMF8wMDAsCiAgICAgICAgTmFtZSAgICA9PiAnVW5pdFRlc3QnIC4gaW50IHJhbmQgMV8wMDBfMDAwLAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKICAgIHB1c2ggQFRlbXBsYXRlSURzLCAkVGVtcGxhdGVJRDsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIE9iamVjdExpc3QgdGVzdCAxIChjaGVjayBDU1YgaXRlbSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBnZXQgb2JqZWN0IGxpc3QKbXkgJE9iamVjdExpc3QxID0gJFNlbGYtPntJbXBvcnRFeHBvcnRPYmplY3R9LT5PYmplY3RMaXN0KCk7CgojIGNoZWNrIG9iamVjdCBsaXN0CiRTZWxmLT5UcnVlKAogICAgJE9iamVjdExpc3QxICYmIHJlZiAkT2JqZWN0TGlzdDEgZXEgJ0hBU0gnICYmICRPYmplY3RMaXN0MS0+e0lUU01Db25maWdJdGVtfSwKICAgICJPYmplY3RMaXN0KCkgLSBJVFNNQ29uZmlnSXRlbSBleGlzdHMiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIE9iamVjdEF0dHJpYnV0ZXNHZXQgdGVzdCAxIChjaGVjayBhdHRyaWJ1dGUgaGFzaCkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKewoKICAgICMgdHVybiBvZmYgYWxsIHByZXR0eSBwcmludCBpbiBEYXRhOjpEdW1wZXIKICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OkluZGVudCAgID0gMDsKICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OlVzZXFxICAgID0gMTsKICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OlNvcnRrZXlzID0gMTsKCiAgICAjIGdldCBvYmplY3QgYXR0cmlidXRlcwogICAgbXkgJE9iamVjdEF0dHJpYnV0ZXNHZXQxID0gJFNlbGYtPntJbXBvcnRFeHBvcnRPYmplY3R9LT5PYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWzBdLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgogICAgIyBjaGVjayBvYmplY3QgYXR0cmlidXRlIHJlZmVyZW5jZQogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJE9iamVjdEF0dHJpYnV0ZXNHZXQxICYmIHJlZiAkT2JqZWN0QXR0cmlidXRlc0dldDEgZXEgJ0FSUkFZJywKICAgICAgICAiT2JqZWN0QXR0cmlidXRlc0dldCgpIC0gY2hlY2sgYXJyYXkgcmVmZXJlbmNlIiwKICAgICk7CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgKTsKCiAgICAjIGRlZmluZSB0aGUgcmVmZXJlbmNlIGhhc2gKICAgIG15ICRPYmplY3RBdHRyaWJ1dGVzR2V0MVJlZmVyZW5jZSA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdDbGFzc0lEJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0NsYXNzJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRDbGFzc0xpc3QsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdDb3VudE1heCcsCiAgICAgICAgICAgIE5hbWUgID0+ICdNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCcsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICBWYWx1ZURlZmF1bHQgPT4gJzEwJywKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAxLAogICAgICAgICAgICAgICAgUmVnZXggICAgICAgID0+IHFyeyBcQSBcZCsgXHogfXhtcywKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgICAgID0+IDUsCiAgICAgICAgICAgICAgICBNYXhMZW5ndGggICAgPT4gNSwKICAgICAgICAgICAgICAgIERhdGFUeXBlICAgICA9PiAnSW50ZWdlckJpZ2dlclRoYW5aZXJvJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgJ0lucHV0JyA9PiB7CiAgICAgICAgICAgICAgICAnVHlwZScgPT4gJ0NoZWNrYm94JwogICAgICAgICAgICB9LAogICAgICAgICAgICAnTmFtZScgPT4gJ0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCcsCiAgICAgICAgICAgICdLZXknICA9PiAnRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcycsCiAgICAgICAgfQogICAgXTsKCiAgICAjIGR1bXAgdGhlIGxpc3QgZnJvbSBPYmplY3RBdHRyaWJ1dGVzR2V0KCkKICAgIG15ICRPYmplY3RBdHRyaWJ1dGVzR2V0RHVtcDEgPSBEYXRhOjpEdW1wZXI6OkR1bXBlcigkT2JqZWN0QXR0cmlidXRlc0dldDEpOwoKICAgICMgZHVtcCB0aGUgcmVmZXJlbmNlIHRhYmxlCiAgICBteSAkT2JqZWN0QXR0cmlidXRlc1JlZkR1bXAxID0gRGF0YTo6RHVtcGVyOjpEdW1wZXIoJE9iamVjdEF0dHJpYnV0ZXNHZXQxUmVmZXJlbmNlKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkT2JqZWN0QXR0cmlidXRlc0dldER1bXAxIGVxICRPYmplY3RBdHRyaWJ1dGVzUmVmRHVtcDEsCiAgICAgICAgIk9iamVjdEF0dHJpYnV0ZXNHZXQoKSAtIGF0dHJpYnV0ZXMgb2YgdGhlIHJvdyBhcmUgaWRlbnRpY2FsIiwKICAgICk7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBPYmplY3RBdHRyaWJ1dGVzR2V0IHRlc3QgMiAoY2hlY2sgd2l0aCBub24gZXhpc3RpbmcgdGVtcGxhdGUpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IG9iamVjdCBhdHRyaWJ1dGVzCm15ICRPYmplY3RBdHRyaWJ1dGVzR2V0MiA9ICRTZWxmLT57SW1wb3J0RXhwb3J0T2JqZWN0fS0+T2JqZWN0QXR0cmlidXRlc0dldCgKICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWy0xXSArIDEsCiAgICBVc2VySUQgICAgID0+IDEsCik7CgojIGNoZWNrIGZhbHNlIHJldHVybgokU2VsZi0+RmFsc2UoCiAgICAkT2JqZWN0QXR0cmlidXRlc0dldDIsCiAgICAiT2JqZWN0QXR0cmlidXRlc0dldCgpIC0gY2hlY2sgZmFsc2UgcmV0dXJuIiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBNYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCB0ZXN0IDEgKGNoZWNrIGF0dHJpYnV0ZSBoYXNoKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGdldCBtYXBwaW5nIG9iamVjdCBhdHRyaWJ1dGVzCm15ICRNYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldDEgPSAkU2VsZi0+e0ltcG9ydEV4cG9ydE9iamVjdH0tPk1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbMF0sCiAgICBVc2VySUQgICAgID0+IDEsCik7CgojIGNoZWNrIG1hcHBpbmcgb2JqZWN0IGF0dHJpYnV0ZSByZWZlcmVuY2UKJFNlbGYtPlRydWUoCiAgICAkTWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQxICYmIHJlZiAkTWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQxIGVxICdBUlJBWScsCiAgICAiTWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQoKSAtIGNoZWNrIGFycmF5IHJlZmVyZW5jZSIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgTWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQgdGVzdCAyIChjaGVjayB3aXRoIG5vbiBleGlzdGluZyB0ZW1wbGF0ZSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBnZXQgbWFwcGluZyBvYmplY3QgYXR0cmlidXRlcwpteSAkTWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQyID0gJFNlbGYtPntJbXBvcnRFeHBvcnRPYmplY3R9LT5NYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCgKICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWy0xXSArIDEsCiAgICBVc2VySUQgICAgID0+IDEsCik7CgojIGNoZWNrIGZhbHNlIHJldHVybgokU2VsZi0+RmFsc2UoCiAgICAkTWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQyLAogICAgIk1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KCkgLSBjaGVjayBmYWxzZSByZXR1cm4iLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIG1ha2UgcHJlcGFyYXRpb25zIHRvIHRlc3QgRXhwb3J0RGF0YUdldCgpIGFuZCBJbXBvcnREYXRhU2F2ZSgpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRHZW5lcmFsQ2F0YWxvZ0NsYXNzID0gJ1VuaXRUZXN0JyAuIGludCByYW5kIDFfMDAwXzAwMDsKCiMgYWRkIGEgZ2VuZXJhbCBjYXRhbG9nIHRlc3QgbGlzdApmb3IgbXkgJE5hbWUgKHF3KFRlc3QxIFRlc3QyIFRlc3QzIFRlc3Q0KSkgewoKICAgICMgYWRkIGEgbmV3IGl0ZW0KICAgIG15ICRJdGVtSUQgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUFkZCgKICAgICAgICBDbGFzcyAgID0+ICRHZW5lcmFsQ2F0YWxvZ0NsYXNzLAogICAgICAgIE5hbWUgICAgPT4gJE5hbWUsCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgIyBjaGVjayBpdGVtIGlkCiAgICBpZiAoICEkSXRlbUlEICkgewoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgMCwKICAgICAgICAgICAgIkNhbid0IGFkZCBuZXcgZ2VuZXJhbCBjYXRhbG9nIGl0ZW0uIiwKICAgICAgICApOwogICAgfQp9CgojIGRlZmluZSB0aGUgZmlyc3QgdGVzdCBkZWZpbml0aW9uIChhbGwgcHJvdmlkZWQgZGF0YSB0eXBlcykKbXkgQENvbmZpZ0l0ZW1EZWZpbml0aW9uczsKJENvbmZpZ0l0ZW1EZWZpbml0aW9uc1swXSA9ICIgWwogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ0N1c3RvbWVyMScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnQ3VzdG9tZXIgMScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlID0+ICdDdXN0b21lcicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgICAgICA9PiAnRGF0ZTEnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0RhdGUgMScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlID0+ICdEYXRlJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICAgICAgID0+ICdEYXRlVGltZTEnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0RhdGUgVGltZSAxJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ0RhdGVUaW1lJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICA9PiAnRHVtbXkxJywKICAgICAgICBOYW1lICA9PiAnRHVtbXkgMScsCiAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICBUeXBlID0+ICdEdW1teScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgICAgICA9PiAnR2VuZXJhbENhdGFsb2cxJywKICAgICAgICBOYW1lICAgICAgID0+ICdHZW5lcmFsQ2F0YWxvZyAxJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgIFR5cGUgID0+ICdHZW5lcmFsQ2F0YWxvZycsCiAgICAgICAgICAgIENsYXNzID0+ICckR2VuZXJhbENhdGFsb2dDbGFzcycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgICAgICA9PiAnSW50ZWdlcjEnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0ludGVnZXIgMScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlID0+ICdJbnRlZ2VyJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICAgICAgID0+ICdUZXh0MScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnVGV4dCAxJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgIFNpemUgICAgICA9PiA1MCwKICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDUwLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ1RleHRBcmVhMScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnVGV4dEFyZWEgMScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlID0+ICdUZXh0QXJlYScsCiAgICAgICAgfSwKICAgIH0sCl0gIjsKCiMgZGVmaW5lIHRoZSBzZWNvbmQgdGVzdCBkZWZpbml0aW9uIChzdWIgZGF0YSB0eXBlcykKJENvbmZpZ0l0ZW1EZWZpbml0aW9uc1sxXSA9ICIgWwogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ01haW4xJywKICAgICAgICBOYW1lICAgICAgID0+ICdNYWluIDEnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgfSwKICAgICAgICBDb3VudE1heCA9PiAxMCwKICAgICAgICBTdWIgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdNYWluMVN1YjEnLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTWFpbiAxIFN1YiAxJywKICAgICAgICAgICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICAgICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBDb3VudE1heCA9PiAxMCwKICAgICAgICAgICAgICAgIFN1YiA9PiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdNYWluMVN1YjFTdWJTdWIxJywKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTWFpbiAxIFN1YiAxIFN1YlN1YiAxJywKICAgICAgICAgICAgICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplICAgICAgPT4gNTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIENvdW50TWF4ID0+IDEwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdNYWluMVN1YjFTdWJTdWIyJywKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTWFpbiAxIFN1YiAxIFN1YlN1YiAyJywKICAgICAgICAgICAgICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1RleHRBcmVhJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRNYXggPT4gMTAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ01haW4xU3ViMicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdNYWluIDEgU3ViIDInLAogICAgICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnVGV4dEFyZWEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIENvdW50TWF4ID0+IDEwLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ01haW4yJywKICAgICAgICBOYW1lICAgICAgID0+ICdNYWluIDInLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dEFyZWEnLAogICAgICAgIH0sCiAgICAgICAgQ291bnRNYXggPT4gMTAsCiAgICAgICAgU3ViID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTWFpbjJTdWIxJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ01haW4gMiBTdWIgMScsCiAgICAgICAgICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIFNpemUgICAgICA9PiA1MCwKICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ291bnRNYXggPT4gMTAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ01haW4yU3ViMicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdNYWluIDIgU3ViIDInLAogICAgICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnVGV4dEFyZWEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIENvdW50TWF4ID0+IDEwLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9LApdICI7CgojIGFkZCB0aGUgdGVzdCBjbGFzc2VzCm15IEBDb25maWdJdGVtQ2xhc3NJRHM7Cm15IEBDb25maWdJdGVtRGVmaW5pdGlvbklEczsKZm9yIG15ICREZWZpbml0aW9uIChAQ29uZmlnSXRlbURlZmluaXRpb25zKSB7CgogICAgIyBnZW5lcmF0ZSBhIHJhbmRvbSBuYW1lCiAgICBteSAkQ2xhc3NOYW1lID0gJ1VuaXRUZXN0JyAuIGludCByYW5kIDFfMDAwXzAwMDsKCiAgICAjIGFkZCBhbiB1bml0dGVzdCBjb25maWcgaXRlbSBjbGFzcwogICAgbXkgJENsYXNzSUQgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUFkZCgKICAgICAgICBDbGFzcyAgID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICAgICAgTmFtZSAgICA9PiAkQ2xhc3NOYW1lLAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgY2xhc3MgaWQKICAgIGlmICggISRDbGFzc0lEICkgewoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgMCwKICAgICAgICAgICAgIkNhbid0IGFkZCBuZXcgY29uZmlnIGl0ZW0gY2xhc3MuIiwKICAgICAgICApOwogICAgfQoKICAgIHB1c2ggQENvbmZpZ0l0ZW1DbGFzc0lEcywgJENsYXNzSUQ7CgogICAgIyBhZGQgYSBkZWZpbml0aW9uIHRvIHRoZSBjbGFzcwogICAgbXkgJERlZmluaXRpb25JRCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkRlZmluaXRpb25BZGQoCiAgICAgICAgQ2xhc3NJRCAgICA9PiAkQ2xhc3NJRCwKICAgICAgICBEZWZpbml0aW9uID0+ICREZWZpbml0aW9uLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgogICAgIyBjaGVjayBkZWZpbml0aW9uIGlkCiAgICBpZiAoICEkRGVmaW5pdGlvbklEICkgewoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgMCwKICAgICAgICAgICAgIkNhbid0IGFkZCBuZXcgY29uZmlnIGl0ZW0gZGVmaW5pdGlvbi4iLAogICAgICAgICk7CiAgICB9CgogICAgcHVzaCBAQ29uZmlnSXRlbURlZmluaXRpb25JRHMsICREZWZpbml0aW9uSUQ7Cn0KCiMgY3JlYXRlIHNvbWUgcmFuZG9tIG51bWJlcnMKbXkgQENvbmZpZ0l0ZW1OdW1iZXJzOwpmb3IgKCAxIC4uIDEwICkgewogICAgcHVzaCBAQ29uZmlnSXRlbU51bWJlcnMsIGludCByYW5kIDFfMDAwXzAwMDsKfQoKIyBnZXQgZGVwbG95bWVudCBzdGF0ZSBsaXN0Cm15ICREZXBsU3RhdGVMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCik7Cm15ICVEZXBsU3RhdGVMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJXskRGVwbFN0YXRlTGlzdH07CgojIGdldCBpbmNpZGVudCBzdGF0ZSBsaXN0Cm15ICRJbmNpU3RhdGVMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAopOwpteSAlSW5jaVN0YXRlTGlzdFJldmVyc2UgPSByZXZlcnNlICV7JEluY2lTdGF0ZUxpc3R9OwoKIyBnZXQgZ2VuZXJhbCBjYXRhbG9nIHRlc3QgbGlzdApteSAkR2VuZXJhbENhdGFsb2dMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJEdlbmVyYWxDYXRhbG9nQ2xhc3MsCik7Cm15ICVHZW5lcmFsQ2F0YWxvZ0xpc3RSZXZlcnNlID0gcmV2ZXJzZSAleyRHZW5lcmFsQ2F0YWxvZ0xpc3R9OwoKIyBkZWZpbmUgdGhlIHRlc3QgY29uZmlnIGl0ZW1zCm15IEBDb25maWdJdGVtcyA9ICgKCiAgICAjIGNvbmZpZyBpdGVtIGZvciBhbGwgcHJvdmlkZWQgZGF0YSB0eXBlcwogICAgewogICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1swXSwKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBWZXJzaW9ucyA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDEgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgPT4gWwogICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lcjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZTEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwOC0wMi0wMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZTEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwOC0wMi0wMSAwMzo1OScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmFsQ2F0YWxvZzEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZXtUZXN0MX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQxID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1Rlc3QgVGV4dCBUZXN0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBcmVhMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICJUZXN0XG5UZXh0IEFycmF5XG5UZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYSBzZWNvbmQgY29uZmlnIGl0ZW0gZm9yIGFsbCBwcm92aWRlZCBkYXRhIHR5cGVzCiAgICAjIChkdXBsaWNhdGUgbmFtZSBvZiBmaXJzdCB2ZXJzaW9uIGZvciBzZWFyY2ggY2hlY2tzKQogICAgewogICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1sxXSwKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBWZXJzaW9ucyA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDEgVmVyc2lvbiAxJywgICAgIyBkdXBsaWNhdGUgbmFtZSBmb3IgdGVzdHMKICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgPT4gWwogICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lcjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZTEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwOC0wMi0wMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZTEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwOC0wMi0wMSAwMzo1OScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmFsQ2F0YWxvZzEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZXtUZXN0MX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQxID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1Rlc3QgVGV4dCBUZXN0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBcmVhMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICJUZXN0XG5UZXh0IEFycmF5XG5UZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAyIFZlcnNpb24gMicsCiAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgID0+IFsKICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXIxID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1VuaXRUZXN0MicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcyMDA4LTAyLTAyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcyMDA4LTAyLTAyIDAzOjU5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWxDYXRhbG9nMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRHZW5lcmFsQ2F0YWxvZ0xpc3RSZXZlcnNle1Rlc3QyfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIxID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dDEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnVGVzdCBUZXh0IFRlc3QyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBcmVhMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICJUZXN0MlxuVGV4dCBBcnJheVxuVGVzdCAyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9LAoKICAgICMgY29uZmlnIGl0ZW0gZm9yIHN1YiBlbGVtZW50IHRlc3RzCiAgICB7CiAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzJdLAogICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMV0sCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIFZlcnNpb25zID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gMyBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1sxXSwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4xID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAnTWFpbjEgKDEpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4xU3ViMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICAgICAgID0+ICdNYWluMSAoMSkgU3ViMSAoMSknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjFTdWJTdWIxID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIxICgxKSBTdWJTdWIxICgxKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIxICgxKSBTdWJTdWIxICgyKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIxICgxKSBTdWJTdWIxICgzKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjFTdWJTdWIyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIxICgxKSBTdWJTdWIyICgxKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICAgICAgID0+ICdNYWluMSAoMSkgU3ViMSAoMiknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjFTdWJTdWIxID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIxICgyKSBTdWJTdWIxICgxKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjFTdWJTdWIyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIxICgyKSBTdWJTdWIyICgxKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIxICgyKSBTdWJTdWIyICgyKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbjFTdWIyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIyICgxKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIyICgyKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJ01haW4yICgxKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMlN1YjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnTWFpbjIgKDEpIFN1YjEgKDEpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4yU3ViMiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudCcgPT4gJ01haW4yICgxKSBTdWIyICgxKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50JyA9PiAnTWFpbjIgKDEpIFN1YjIgKDIpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9LAoKICAgICMgY29uZmlnIGl0ZW0gZm9yIHN1YiBlbGVtZW50IHRlc3RzCiAgICB7CiAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzNdLAogICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMV0sCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIFZlcnNpb25zID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gNCBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1sxXSwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4xID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4xU3ViMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjFTdWJTdWIxID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjFTdWJTdWIyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbjFTdWIyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMlN1YjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4yU3ViMiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBjb25maWcgaXRlbSBmb3Igc3BlY2lhbCBjaGFyYWN0ZXIgdGVzdHMKICAgIHsKICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNF0sCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1sxXSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgVmVyc2lvbnMgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSA1IFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzFdLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgID0+IFsKICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICciIjs7OjouLi0tX18jIycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnVGVzdDs6X8KwXiEiwqckJSYvKCk9P8K0YCorVGVzdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4xU3ViMVN1YlN1YjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnPjxAflwnfXtbXVxcJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4xU3ViMVN1YlN1YjIgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnPjxAflwnfXtbXVxcJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjIgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnVGVzdDs6X8KwXiEiwqckJSYvKCk9P8K0YCorVGVzdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJyIiOzs6Oi4uLS1fXyMjJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4yU3ViMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdUZXN0IFRlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbjJTdWIyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gIlRlc3RcblRlc3RcdFRlc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBjb25maWcgaXRlbSBmb3IgVVRGLTggdGVzdHMKICAgIHsKICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNV0sCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1sxXSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgVmVyc2lvbnMgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSA2IFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzFdLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgID0+IFsKICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICfihoIg4oW7IOKFmycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgICA9PiAn4piEIOKGriDihrkg4oaSJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbjFTdWIxU3ViU3ViMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICfigqQg4oKhIOKCqSDigq8g4oK1JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4xU3ViMVN1YlN1YjIgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAn4pmKIOKZiCDimYkg4pmKIOKZiyDimY0g4pmRJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjIgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAn4pyIIOKdpCDimK4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbjIgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICfViiDVhCDVgCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMlN1YjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnwq4gwqknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbjJTdWIyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ+OBiyDjgZIg44KSJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9LAopOwoKIyBhZGQgdGhlIHRlc3QgY29uZmlnIGl0ZW1zCm15IEBDb25maWdJdGVtSURzOwpmb3IgbXkgJENvbmZpZ0l0ZW0gKEBDb25maWdJdGVtcykgewoKICAgICMgYWRkIGEgY29uZmlnIGl0ZW0KICAgIG15ICRDb25maWdJdGVtSUQgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtQWRkKAogICAgICAgICV7ICRDb25maWdJdGVtLT57Q29uZmlnSXRlbX0gfSwKICAgICk7CgogICAgIyBjaGVjayBjb25maWcgaXRlbSBpZAogICAgaWYgKCAhJENvbmZpZ0l0ZW1JRCApIHsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICJDYW4ndCBhZGQgbmV3IGNvbmZpZyBpdGVtLiIsCiAgICAgICAgKTsKICAgIH0KCiAgICBwdXNoIEBDb25maWdJdGVtSURzLCAkQ29uZmlnSXRlbUlEOwoKICAgICMgYWRkIHRoZSB2ZXJzaW9ucwogICAgZm9yIG15ICRWZXJzaW9uICggQHsgJENvbmZpZ0l0ZW0tPntWZXJzaW9uc30gfSApIHsKCiAgICAgICAgIyBhZGQgYSB2ZXJzaW9uCiAgICAgICAgbXkgJFZlcnNpb25JRCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlZlcnNpb25BZGQoCiAgICAgICAgICAgICV7JFZlcnNpb259LAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIHZlcnNpb24gaWQKICAgICAgICBpZiAoICEkVmVyc2lvbklEICkgewoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgIkNhbid0IGFkZCBuZXcgdmVyc2lvbi4iLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGRlZmluZSBnZW5lcmFsIEV4cG9ydERhdGFHZXQgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgQEV4cG9ydERhdGFUZXN0cyA9ICgKCiAgICAjIEltcG9ydERhdGFHZXQgZG9lc24ndCBjb250YWlucyBhbGwgZGF0YSAoY2hlY2sgcmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRXhwb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIEltcG9ydERhdGFHZXQgZG9lc24ndCBjb250YWlucyBhbGwgZGF0YSAoY2hlY2sgcmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRXhwb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1sxXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIG5vIGV4aXN0aW5nIHRlbXBsYXRlIGlkIGlzIGdpdmVuIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbLTFdICsgMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIG5vIGNsYXNzIGlkIGlzIGdpdmVuIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbMl0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBpbnZhbGlkIGNsYXNzIGlkIGlzIGdpdmVuIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWy0xXSArIDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbMl0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBtYXBwaW5nIGxpc3QgaXMgZW1wdHkgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbM10sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAobnVtYmVyIHNlYXJjaCBjaGVjaykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciA9PiAkQ29uZmlnSXRlbU51bWJlcnNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbNV0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VFeHBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAkQ29uZmlnSXRlbU51bWJlcnNbMF0gXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChuYW1lIHNlYXJjaCBjaGVjaykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAxIFZlcnNpb24gMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbNV0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VFeHBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAkQ29uZmlnSXRlbU51bWJlcnNbMF0gXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChjYXNlIGluc2Vuc2l0aXZlIG5hbWUgc2VhcmNoIGNoZWNrKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICAgICAgTmFtZSA9PiAndW5pdHRlc3QgLSBjb25maWdpdGVtIDEgdmVyc2lvbiAxJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1s1XSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUV4cG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICRDb25maWdJdGVtTnVtYmVyc1swXSBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKG5hbWUgYW5kIG51bWJlciBzZWFyY2ggY2hlY2spCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzBdLAogICAgICAgICAgICAgICAgTmFtZSAgID0+ICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gMSBWZXJzaW9uIDEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWzVdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRXhwb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJENvbmZpZ0l0ZW1OdW1iZXJzWzBdIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoZGVwbG95bWVudCBzdGF0ZSBzZWFyY2ggY2hlY2spCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRHMgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWzVdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRXhwb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJENvbmZpZ0l0ZW1OdW1iZXJzWzBdIF0sCiAgICAgICAgICAgIFsgJENvbmZpZ0l0ZW1OdW1iZXJzWzFdIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoaW5jaWRlbnQgc3RhdGUgc2VhcmNoIGNoZWNrKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICAgICAgSW5jaVN0YXRlSURzID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbNV0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VFeHBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAkQ29uZmlnSXRlbU51bWJlcnNbMF0gXSwKICAgICAgICAgICAgWyAkQ29uZmlnSXRlbU51bWJlcnNbMV0gXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChjb21iaW5lZCBzZWFyY2ggY2hlY2spCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzBdLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gMSBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlSURzID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEcyA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWzVdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRXhwb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJENvbmZpZ0l0ZW1OdW1iZXJzWzBdIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoWE1MIGRhdGEgc2VhcmNoIGNoZWNrKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICAgICAgRGF0ZTEgICAgICAgICAgID0+ICcyMDA4LTAyLTAxJywKICAgICAgICAgICAgICAgIFRleHRBcmVhMSAgICAgICA9PiAiVGVzdFxuVGV4dCBBcnJheVxuVGVzdCIsCiAgICAgICAgICAgICAgICBDdXN0b21lcjEgICAgICAgPT4gJ1VuaXRUZXN0JywKICAgICAgICAgICAgICAgIFRleHQxICAgICAgICAgICA9PiAnVGVzdCBUZXh0IFRlc3QnLAogICAgICAgICAgICAgICAgRGF0ZVRpbWUxICAgICAgID0+ICcyMDA4LTAyLTAxIDAzOjU5JywKICAgICAgICAgICAgICAgIEludGVnZXIxICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICBHZW5lcmFsQ2F0YWxvZzEgPT4gJEdlbmVyYWxDYXRhbG9nTGlzdFJldmVyc2V7VGVzdDF9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWzVdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRXhwb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJENvbmZpZ0l0ZW1OdW1iZXJzWzBdIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoY29tYmluZWQgYWxsIHNlYXJjaCBjaGVjaykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbMF0sCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAxIFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRHMgICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgSW5jaVN0YXRlSURzICAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICBEYXRlMSAgICAgICAgICAgPT4gJzIwMDgtMDItMDEnLAogICAgICAgICAgICAgICAgVGV4dEFyZWExICAgICAgID0+ICJUZXN0XG5UZXh0IEFycmF5XG5UZXN0IiwKICAgICAgICAgICAgICAgIEN1c3RvbWVyMSAgICAgICA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICAgICAgVGV4dDEgICAgICAgICAgID0+ICdUZXN0IFRleHQgVGVzdCcsCiAgICAgICAgICAgICAgICBEYXRlVGltZTEgICAgICAgPT4gJzIwMDgtMDItMDEgMDM6NTknLAogICAgICAgICAgICAgICAgSW50ZWdlcjEgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgIEdlbmVyYWxDYXRhbG9nMSA9PiAkR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZXtUZXN0MX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbNV0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VFeHBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAkQ29uZmlnSXRlbU51bWJlcnNbMF0gXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChjaGVjayB0aGUgcmV0dXJuZWQgYXJyYXkpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdDdXN0b21lcjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RhdGUxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEYXRlVGltZTE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0R1bW15MTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnR2VuZXJhbENhdGFsb2cxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbnRlZ2VyMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnVGV4dDE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHRBcmVhMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciA9PiAkQ29uZmlnSXRlbU51bWJlcnNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbNl0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VFeHBvcnREYXRhID0+IFsKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzBdLAogICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAxIFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ1VuaXRUZXN0JywKICAgICAgICAgICAgICAgICcyMDA4LTAyLTAxJywKICAgICAgICAgICAgICAgICcyMDA4LTAyLTAxIDAzOjU5JywKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgJ1Rlc3QxJywKICAgICAgICAgICAgICAgICcxJywKICAgICAgICAgICAgICAgICdUZXN0IFRleHQgVGVzdCcsCiAgICAgICAgICAgICAgICAiVGVzdFxuVGV4dCBBcnJheVxuVGVzdCIsCiAgICAgICAgICAgIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoZG91YmxlIGVsZW1lbnQgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnQ3VzdG9tZXIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdDdXN0b21lcjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RhdGUxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEYXRlMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGF0ZVRpbWUxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEYXRlVGltZTE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0R1bW15MTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRHVtbXkxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdHZW5lcmFsQ2F0YWxvZzE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0dlbmVyYWxDYXRhbG9nMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW50ZWdlcjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0ludGVnZXIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0MTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnVGV4dDE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHRBcmVhMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnVGV4dEFyZWExOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyID0+ICRDb25maWdJdGVtTnVtYmVyc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1s2XSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUV4cG9ydERhdGEgPT4gWwogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbMF0sCiAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbMF0sCiAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDEgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gMSBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnVW5pdFRlc3QnLAogICAgICAgICAgICAgICAgJ1VuaXRUZXN0JywKICAgICAgICAgICAgICAgICcyMDA4LTAyLTAxJywKICAgICAgICAgICAgICAgICcyMDA4LTAyLTAxJywKICAgICAgICAgICAgICAgICcyMDA4LTAyLTAxIDAzOjU5JywKICAgICAgICAgICAgICAgICcyMDA4LTAyLTAxIDAzOjU5JywKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAnVGVzdDEnLAogICAgICAgICAgICAgICAgJ1Rlc3QxJywKICAgICAgICAgICAgICAgICcxJywKICAgICAgICAgICAgICAgICcxJywKICAgICAgICAgICAgICAgICdUZXN0IFRleHQgVGVzdCcsCiAgICAgICAgICAgICAgICAnVGVzdCBUZXh0IFRlc3QnLAogICAgICAgICAgICAgICAgIlRlc3RcblRleHQgQXJyYXlcblRlc3QiLAogICAgICAgICAgICAgICAgIlRlc3RcblRleHQgQXJyYXlcblRlc3QiLAogICAgICAgICAgICBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKHN1YiBlbGVtZW50IGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjozJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIyOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIyOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMjo6MicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciA9PiAkQ29uZmlnSXRlbU51bWJlcnNbMl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbN10sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VFeHBvcnREYXRhID0+IFsKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzJdLAogICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAzIFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ01haW4xICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIFN1YjEgKDEpJywKICAgICAgICAgICAgICAgICdNYWluMSAoMSkgU3ViMSAoMSkgU3ViU3ViMSAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xICgxKSBTdWIxICgxKSBTdWJTdWIxICgyKScsCiAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIFN1YjEgKDEpIFN1YlN1YjEgKDMpJywKICAgICAgICAgICAgICAgICdNYWluMSAoMSkgU3ViMSAoMSkgU3ViU3ViMiAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xICgxKSBTdWIxICgyKScsCiAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIFN1YjEgKDIpIFN1YlN1YjEgKDEpJywKICAgICAgICAgICAgICAgICdNYWluMSAoMSkgU3ViMSAoMikgU3ViU3ViMiAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xICgxKSBTdWIxICgyKSBTdWJTdWIyICgyKScsCiAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIFN1YjIgKDEpJywKICAgICAgICAgICAgICAgICdNYWluMSAoMSkgU3ViMiAoMiknLAogICAgICAgICAgICAgICAgJ01haW4yICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjIgKDEpIFN1YjEgKDEpJywKICAgICAgICAgICAgICAgICdNYWluMiAoMSkgU3ViMiAoMSknLAogICAgICAgICAgICAgICAgJ01haW4yICgxKSBTdWIyICgyKScsCiAgICAgICAgICAgIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3ViIGVsZW1lbnQgY2hlY2tzIHdpdGggdW5kZWYgdmFsdWVzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1sxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOYW1lJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjMnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjQnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjI6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjE6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjI6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjI6OjMnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjI6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjI6OjMnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIxOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIyOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIyOjozJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciA9PiAkQ29uZmlnSXRlbU51bWJlcnNbMl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbN10sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VFeHBvcnREYXRhID0+IFsKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzJdLAogICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAzIFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ01haW4xICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIFN1YjEgKDEpJywKICAgICAgICAgICAgICAgICdNYWluMSAoMSkgU3ViMSAoMSkgU3ViU3ViMSAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xICgxKSBTdWIxICgxKSBTdWJTdWIxICgyKScsCiAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIFN1YjEgKDEpIFN1YlN1YjEgKDMpJywKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgJ01haW4xICgxKSBTdWIxICgxKSBTdWJTdWIyICgxKScsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICdNYWluMSAoMSkgU3ViMSAoMiknLAogICAgICAgICAgICAgICAgJ01haW4xICgxKSBTdWIxICgyKSBTdWJTdWIxICgxKScsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICdNYWluMSAoMSkgU3ViMSAoMikgU3ViU3ViMiAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xICgxKSBTdWIxICgyKSBTdWJTdWIyICgyKScsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICdNYWluMSAoMSkgU3ViMiAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xICgxKSBTdWIyICgyKScsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICdNYWluMiAoMSknLAogICAgICAgICAgICAgICAgJ01haW4yICgxKSBTdWIxICgxKScsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICdNYWluMiAoMSkgU3ViMiAoMSknLAogICAgICAgICAgICAgICAgJ01haW4yICgxKSBTdWIyICgyKScsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKHN1YiBlbGVtZW50IGNoZWNrcyB3aXRoIHVuZGVmIHZhbHVlcyBhbmQgZW1wdHkgc3RyaW5ncykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjozJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjo0JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIyOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIxOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIyOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIyOjozJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIyOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIyOjozJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMTo6MicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMjo6MicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMjo6MycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzNdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWzddLAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRXhwb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1szXSwKICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gNCBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChzcGVjaWFsIGNoYXJhY3RlciBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxOjpNYWluMlN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxOjpNYWluMlN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzRdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWzhdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRXhwb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s0XSwKICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gNSBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICciIjs7OjouLi0tX18jIycsCiAgICAgICAgICAgICAgICAnVGVzdDs6X8KwXiEiwqckJSYvKCk9P8K0YCorVGVzdCcsCiAgICAgICAgICAgICAgICAnPjxAflwnfXtbXVxcJywKICAgICAgICAgICAgICAgICc+PEB+XCd9e1tdXFwnLAogICAgICAgICAgICAgICAgJ1Rlc3Q7Ol/CsF4hIsKnJCUmLygpPT/CtGAqK1Rlc3QnLAogICAgICAgICAgICAgICAgJyIiOzs6Oi4uLS1fXyMjJywKICAgICAgICAgICAgICAgICdUZXN0IFRlc3QnLAogICAgICAgICAgICAgICAgIlRlc3RcblRlc3RcdFRlc3QiLAogICAgICAgICAgICBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKFVURi04IGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbOV0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VFeHBvcnREYXRhID0+IFsKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzVdLAogICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSA2IFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ+KGgiDihbsg4oWbJywKICAgICAgICAgICAgICAgICfimIQg4oauIOKGuSDihpInLAogICAgICAgICAgICAgICAgJ+KCpCDigqEg4oKpIOKCryDigrUnLAogICAgICAgICAgICAgICAgJ+KZiiDimYgg4pmJIOKZiiDimYsg4pmNIOKZkScsCiAgICAgICAgICAgICAgICAn4pyIIOKdpCDimK4nLAogICAgICAgICAgICAgICAgJ9WKINWEINWAJywKICAgICAgICAgICAgICAgICfCriDCqScsCiAgICAgICAgICAgICAgICAn44GLIOOBkiDjgpInLAogICAgICAgICAgICBdLAogICAgICAgIF0sCiAgICB9LAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHJ1biBnZW5lcmFsIEV4cG9ydERhdGFHZXQgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJEV4cG9ydFRlc3RDb3VudCA9IDE7ClRFU1Q6CmZvciBteSAkVGVzdCAoQEV4cG9ydERhdGFUZXN0cykgewoKICAgICMgY2hlY2sgU291cmNlRXhwb3J0RGF0YSBhdHRyaWJ1dGUKICAgIGlmICggISRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0gfHwgcmVmICRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0gbmUgJ0hBU0gnICkgewoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgMCwKICAgICAgICAgICAgIkV4cG9ydFRlc3QgJEV4cG9ydFRlc3RDb3VudDogTm8gU291cmNlRXhwb3J0RGF0YSBmb3VuZCBmb3IgdGhpcyB0ZXN0LiIKICAgICAgICApOwoKICAgICAgICBuZXh0IFRFU1Q7CiAgICB9CgogICAgIyBzZXQgdGhlIG9iamVjdCBkYXRhCiAgICBpZiAoCiAgICAgICAgJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfS0+e09iamVjdERhdGF9CiAgICAgICAgJiYgcmVmICRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0tPntPYmplY3REYXRhfSBlcSAnSEFTSCcKICAgICAgICAmJiAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57RXhwb3J0RGF0YUdldH0tPntUZW1wbGF0ZUlEfQogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBzYXZlIG9iamVjdCBkYXRhCiAgICAgICAgJFNlbGYtPntJbXBvcnRFeHBvcnRPYmplY3R9LT5PYmplY3REYXRhU2F2ZSgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57RXhwb3J0RGF0YUdldH0tPntUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57T2JqZWN0RGF0YX0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgc2V0IHRoZSBtYXBwaW5nIG9iamVjdCBkYXRhCiAgICBpZiAoCiAgICAgICAgJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfS0+e01hcHBpbmdPYmplY3REYXRhfQogICAgICAgICYmIHJlZiAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57TWFwcGluZ09iamVjdERhdGF9IGVxICdBUlJBWScKICAgICAgICAmJiAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57RXhwb3J0RGF0YUdldH0tPntUZW1wbGF0ZUlEfQogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBkZWxldGUgYWxsIGV4aXN0aW5nIG1hcHBpbmcgZGF0YQogICAgICAgICRTZWxmLT57SW1wb3J0RXhwb3J0T2JqZWN0fS0+TWFwcGluZ0RlbGV0ZSgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57RXhwb3J0RGF0YUdldH0tPntUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgYWRkIHRoZSBtYXBwaW5nIG9iamVjdCByb3dzCiAgICAgICAgTUFQUElOR09CSkVDVERBVEE6CiAgICAgICAgZm9yIG15ICRNYXBwaW5nT2JqZWN0RGF0YSAoIEB7ICRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0tPntNYXBwaW5nT2JqZWN0RGF0YX0gfSApIHsKCiAgICAgICAgICAgICMgYWRkIGEgbmV3IG1hcHBpbmcgcm93CiAgICAgICAgICAgIG15ICRNYXBwaW5nSUQgPSAkU2VsZi0+e0ltcG9ydEV4cG9ydE9iamVjdH0tPk1hcHBpbmdBZGQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0tPntFeHBvcnREYXRhR2V0fS0+e1RlbXBsYXRlSUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBhZGQgdGhlIG1hcHBpbmcgb2JqZWN0IGRhdGEKICAgICAgICAgICAgJFNlbGYtPntJbXBvcnRFeHBvcnRPYmplY3R9LT5NYXBwaW5nT2JqZWN0RGF0YVNhdmUoCiAgICAgICAgICAgICAgICBNYXBwaW5nSUQgICAgICAgICA9PiAkTWFwcGluZ0lELAogICAgICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gJE1hcHBpbmdPYmplY3REYXRhLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBhZGQgdGhlIHNlYXJjaCBkYXRhCiAgICBpZiAoCiAgICAgICAgJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfS0+e1NlYXJjaERhdGF9CiAgICAgICAgJiYgcmVmICRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0tPntTZWFyY2hEYXRhfSBlcSAnSEFTSCcKICAgICAgICAmJiAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57RXhwb3J0RGF0YUdldH0tPntUZW1wbGF0ZUlEfQogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBzYXZlIHNlYXJjaCBkYXRhCiAgICAgICAgJFNlbGYtPntJbXBvcnRFeHBvcnRPYmplY3R9LT5TZWFyY2hEYXRhU2F2ZSgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57RXhwb3J0RGF0YUdldH0tPntUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgU2VhcmNoRGF0YSA9PiAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57U2VhcmNoRGF0YX0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGV4cG9ydCBkYXRhCiAgICBteSAkRXhwb3J0RGF0YSA9ICRTZWxmLT57T2JqZWN0QmFja2VuZE9iamVjdH0tPkV4cG9ydERhdGFHZXQoCiAgICAgICAgJXsgJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfS0+e0V4cG9ydERhdGFHZXR9IH0sCiAgICApOwoKICAgIGlmICggISRUZXN0LT57UmVmZXJlbmNlRXhwb3J0RGF0YX0gKSB7CgogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJEV4cG9ydERhdGEsCiAgICAgICAgICAgICJFeHBvcnRUZXN0ICRFeHBvcnRUZXN0Q291bnQ6IEV4cG9ydERhdGFHZXQoKSAtIHJldHVybiBmYWxzZSIsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBURVNUOwogICAgfQoKICAgIGlmICggcmVmICRFeHBvcnREYXRhIG5lICdBUlJBWScgKSB7CgogICAgICAgICMgY2hlY2sgYXJyYXkgcmVmZXJlbmNlCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICJFeHBvcnRUZXN0ICRFeHBvcnRUZXN0Q291bnQ6IEV4cG9ydERhdGFHZXQoKSAtIHJldHVybiB2YWx1ZSBpcyBhbiBhcnJheSByZWZlcmVuY2UiLAogICAgICAgICk7CgogICAgICAgIG5leHQgVEVTVDsKICAgIH0KCiAgICAjIGNoZWNrIG51bWJlciBvZiByb3dzCiAgICAkU2VsZi0+SXMoCiAgICAgICAgc2NhbGFyIEB7JEV4cG9ydERhdGF9LAogICAgICAgIHNjYWxhciBAeyAkVGVzdC0+e1JlZmVyZW5jZUV4cG9ydERhdGF9IH0sCiAgICAgICAgIkV4cG9ydFRlc3QgJEV4cG9ydFRlc3RDb3VudDogRXhwb3J0RGF0YUdldCgpIC0gY29ycmVjdCBudW1iZXIgb2Ygcm93cyIsCiAgICApOwoKICAgICMgY2hlY2sgY29udGVudCBvZiBleHBvcnQgZGF0YQogICAgbXkgJENvdW50ZXJSb3cgPSAwOwogICAgUk9XOgogICAgZm9yIG15ICRFeHBvcnRSb3cgKCBAeyRFeHBvcnREYXRhfSApIHsKCiAgICAgICAgIyBleHRyYWN0IHJlZmVyZW5jZSByb3cKICAgICAgICBteSAkUmVmZXJlbmNlUm93ID0gJFRlc3QtPntSZWZlcmVuY2VFeHBvcnREYXRhfS0+WyRDb3VudGVyUm93XTsKCiAgICAgICAgaWYgKCByZWYgJEV4cG9ydFJvdyBuZSAnQVJSQVknIHx8IHJlZiAkUmVmZXJlbmNlUm93IG5lICdBUlJBWScgKSB7CgogICAgICAgICAgICAjIGNoZWNrIGFycmF5IHJlZmVyZW5jZQogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAiRXhwb3J0VGVzdCAkRXhwb3J0VGVzdENvdW50OiBFeHBvcnREYXRhR2V0KCkgLSBleHBvcnQgcm93IGFuZCByZWZlcmVuY2Ugcm93IG1hdGNoZWQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBURVNUOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBudW1iZXIgb2YgY29sdW1ucwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgc2NhbGFyIEB7JEV4cG9ydFJvd30sCiAgICAgICAgICAgIHNjYWxhciBAeyRSZWZlcmVuY2VSb3d9LAogICAgICAgICAgICAiRXhwb3J0VGVzdCAkRXhwb3J0VGVzdENvdW50OiBFeHBvcnREYXRhR2V0KCkgLSBjb3JyZWN0IG51bWJlciBvZiBjb2x1bW5zIiwKICAgICAgICApOwoKICAgICAgICBteSAkQ291bnRlckNvbHVtbiA9IDA7CiAgICAgICAgZm9yIG15ICRDZWxsICggQHskRXhwb3J0Um93fSApIHsKCiAgICAgICAgICAgICMgc2V0IGNvbnRlbnQgaWYgdmFsdWVzIGFyZSB1bmRlZgogICAgICAgICAgICBpZiAoICFkZWZpbmVkICRDZWxsICkgewogICAgICAgICAgICAgICAgJENlbGwgPSAnVU5ERUYtdW5pdHRlc3QnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggIWRlZmluZWQgJFJlZmVyZW5jZVJvdy0+WyRDb3VudGVyQ29sdW1uXSApIHsKICAgICAgICAgICAgICAgICRSZWZlcmVuY2VSb3ctPlskQ291bnRlckNvbHVtbl0gPSAnVU5ERUYtdW5pdHRlc3QnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGNlbGwgZGF0YQogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkQ2VsbCwKICAgICAgICAgICAgICAgICRSZWZlcmVuY2VSb3ctPlskQ291bnRlckNvbHVtbl0sCiAgICAgICAgICAgICAgICAiRXhwb3J0VGVzdCAkRXhwb3J0VGVzdENvdW50OiBFeHBvcnREYXRhR2V0KCkgIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRDb3VudGVyQ29sdW1uKys7CiAgICAgICAgfQoKICAgICAgICAkQ291bnRlclJvdysrOwogICAgfQp9CmNvbnRpbnVlIHsKICAgICRFeHBvcnRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGRlZmluZSBnZW5lcmFsIEltcG9ydERhdGFTYXZlIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15IEBJbXBvcnREYXRhVGVzdHMgPSAoCgogICAgIyBJbXBvcnREYXRhU2F2ZSBkb2Vzbid0IGNvbnRhaW5zIGFsbCBkYXRhIChjaGVjayByZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFtdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgSW1wb3J0RGF0YVNhdmUgZG9lc24ndCBjb250YWlucyBhbGwgZGF0YSAoY2hlY2sgcmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbMjBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgSW1wb3J0RGF0YVNhdmUgZG9lc24ndCBjb250YWlucyBhbGwgZGF0YSAoY2hlY2sgcmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjBdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGltcG9ydCBkYXRhIHJvdyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMF0sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+ICcnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaW1wb3J0IGRhdGEgcm93IG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIwXSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4ge30sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBubyBleGlzdGluZyB0ZW1wbGF0ZSBpZCBpcyBnaXZlbiAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1stMV0gKyAxLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbJ0R1bW15J10sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBubyBjbGFzcyBpZCBpcyBnaXZlbiAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMV0sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsnRHVtbXknXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGludmFsaWQgY2xhc3MgaWQgaXMgZ2l2ZW4gKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbLTFdICsgMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjJdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbJ0R1bW15J10sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBtYXBwaW5nIGxpc3QgaXMgZW1wdHkgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIzXSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWydEdW1teSddLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgbW9yZSB0aGFuIG9uZSBpZGVudGlmaWVyIHdpdGggdGhlIHNhbWUgbmFtZSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIzXSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWyAnMTIzJywgJzMyMScgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGlkZW50aWZpZXIgaXMgZW1wdHkgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIzXSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWycnXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGlkZW50aWZpZXIgaXMgdW5kZWYgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIzXSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gW3VuZGVmXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGJvdGggaWRlbnRpZmllcnMgYXJlIGVtcHR5IChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIzXSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWyAnJywgJycgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGJvdGggaWRlbnRpZmllcnMgYXJlIHVuZGVmIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIzXSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWyB1bmRlZiwgdW5kZWYgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIG9uZSBpZGVudGlmaWVycyBpcyBlbXB0eSwgb25lIGlzIHVuZGVmIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIzXSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWyAnJywgdW5kZWYgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIG9uZSBvZiB0aGUgaWRlbnRpZmllcnMgaXMgZW1wdHkgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjNdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbICcxMjMnLCAnJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgb25lIG9mIHRoZSBpZGVudGlmaWVycyBpcyB1bmRlZiAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syM10sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsgJzEyMycsIHVuZGVmIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBvbmUgb2YgdGhlIGlkZW50aWZpZXJzIGlzIGVtcHR5IChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIzXSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWyAnJywgJzEyMycgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIG9uZSBvZiB0aGUgaWRlbnRpZmllcnMgaXMgZW1wdHkgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjNdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbIHVuZGVmLCAnMTIzJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgVE9ETyBBZGQgc29tZSBpZGVudGlmaWVyIHRlc3RzCgogICAgIyBlbXB0eSBuYW1lIGlzIGdpdmVuIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOYW1lJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNF0sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsgJycsICdQcm9kdWN0aW9uJywgJ09wZXJhdGlvbmFsJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaW52YWxpZCBkZXBsb3ltZW50IHN0YXRlIGlzIGdpdmVuIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOYW1lJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNF0sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsgJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCAxJywgJ0R1bW15JywgJ09wZXJhdGlvbmFsJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaW52YWxpZCBpbmNpZGVudCBzdGF0ZSBpcyBnaXZlbiAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjRdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbICdVbml0VGVzdCAtIEltcG9ydHRlc3QgMicsICdQcm9kdWN0aW9uJywgJ0R1bW15JyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGEgTkVXIGNvbmZpZyBpdGVtIG11c3QgYmUgY3JlYXRlZCkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdDdXN0b21lcjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RhdGUxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEYXRlVGltZTE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0dlbmVyYWxDYXRhbG9nMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW50ZWdlcjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHQxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0QXJlYTE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjVdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCAzJywKICAgICAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAnVW5pdFRlc3QnLAogICAgICAgICAgICAgICAgICAgICcyMDA4LTA2LTA1JywKICAgICAgICAgICAgICAgICAgICAnMjAwOC0wOC0wNSAwNDo1MCcsCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3QzJywKICAgICAgICAgICAgICAgICAgICAnMycsCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3QzIFRleHQzIFRlc3QzJywKICAgICAgICAgICAgICAgICAgICAiVGVzdDNcblRleHRBcnJheTNcblRlc3QzIiwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBWZXJzaW9uTnVtYmVyID0+IDEsCiAgICAgICAgICAgIExhc3RWZXJzaW9uICAgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCAzJywKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnQ3VzdG9tZXIxOjoxJyAgICAgICA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICAgICAgJ0RhdGUxOjoxJyAgICAgICAgICAgPT4gJzIwMDgtMDYtMDUnLAogICAgICAgICAgICAgICAgJ0RhdGVUaW1lMTo6MScgICAgICAgPT4gJzIwMDgtMDgtMDUgMDQ6NTAnLAogICAgICAgICAgICAgICAgJ0dlbmVyYWxDYXRhbG9nMTo6MScgPT4gJEdlbmVyYWxDYXRhbG9nTGlzdFJldmVyc2V7VGVzdDN9LAogICAgICAgICAgICAgICAgJ0ludGVnZXIxOjoxJyAgICAgICAgPT4gJzMnLAogICAgICAgICAgICAgICAgJ1RleHQxOjoxJyAgICAgICAgICAgPT4gJ1Rlc3QzIFRleHQzIFRlc3QzJywKICAgICAgICAgICAgICAgICdUZXh0QXJlYTE6OjEnICAgICAgID0+ICJUZXN0M1xuVGV4dEFycmF5M1xuVGVzdDMiLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGEgc2Vjb25kIE5FVyBjb25maWcgaXRlbSBtdXN0IGJlIGNyZWF0ZWQpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOYW1lJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnQ3VzdG9tZXIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEYXRlMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGF0ZVRpbWUxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdHZW5lcmFsQ2F0YWxvZzE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0ludGVnZXIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0MTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnVGV4dEFyZWExOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI1XSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWwogICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIEltcG9ydHRlc3QgNCcsCiAgICAgICAgICAgICAgICAgICAgJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0JywKICAgICAgICAgICAgICAgICAgICAnMjAwOC0wOS0wNScsCiAgICAgICAgICAgICAgICAgICAgJzIwMDgtMTItMDUgMDQ6NTAnLAogICAgICAgICAgICAgICAgICAgICdUZXN0NCcsCiAgICAgICAgICAgICAgICAgICAgJzQnLAogICAgICAgICAgICAgICAgICAgICdUZXN0NCBUZXh0NCBUZXN0NCcsCiAgICAgICAgICAgICAgICAgICAgIlRlc3Q0XG5UZXh0QXJyYXk0XG5UZXN0NCIsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgVmVyc2lvbk51bWJlciA9PiAxLAogICAgICAgICAgICBMYXN0VmVyc2lvbiAgID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgID0+ICdVbml0VGVzdCAtIEltcG9ydHRlc3QgNCcsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ0N1c3RvbWVyMTo6MScgICAgICAgPT4gJ1VuaXRUZXN0JywKICAgICAgICAgICAgICAgICdEYXRlMTo6MScgICAgICAgICAgID0+ICcyMDA4LTA5LTA1JywKICAgICAgICAgICAgICAgICdEYXRlVGltZTE6OjEnICAgICAgID0+ICcyMDA4LTEyLTA1IDA0OjUwJywKICAgICAgICAgICAgICAgICdHZW5lcmFsQ2F0YWxvZzE6OjEnID0+ICRHZW5lcmFsQ2F0YWxvZ0xpc3RSZXZlcnNle1Rlc3Q0fSwKICAgICAgICAgICAgICAgICdJbnRlZ2VyMTo6MScgICAgICAgID0+ICc0JywKICAgICAgICAgICAgICAgICdUZXh0MTo6MScgICAgICAgICAgID0+ICdUZXN0NCBUZXh0NCBUZXN0NCcsCiAgICAgICAgICAgICAgICAnVGV4dEFyZWExOjoxJyAgICAgICA9PiAiVGVzdDRcblRleHRBcnJheTRcblRlc3Q0IiwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChhIG5ldyB2ZXJzaW9uIG11c3QgYmUgYWRkZWQgdG8gZmlyc3QgdGVzdCBjb25maWcgaXRlbSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOYW1lJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnQ3VzdG9tZXIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEYXRlMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGF0ZVRpbWUxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdHZW5lcmFsQ2F0YWxvZzE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0ludGVnZXIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0MTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnVGV4dEFyZWExOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI2XSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWwogICAgICAgICAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1swXSwKICAgICAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDEgVmVyc2lvbiAyJywKICAgICAgICAgICAgICAgICAgICAnUGlsb3QnLAogICAgICAgICAgICAgICAgICAgICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0JywKICAgICAgICAgICAgICAgICAgICAnMjAwOC0wMi0wMicsCiAgICAgICAgICAgICAgICAgICAgJzIwMDgtMDItMDIgMDM6NTknLAogICAgICAgICAgICAgICAgICAgICdUZXN0MicsCiAgICAgICAgICAgICAgICAgICAgJzInLAogICAgICAgICAgICAgICAgICAgICdUZXN0IFRleHQgVVBEQVRFMSBUZXN0JywKICAgICAgICAgICAgICAgICAgICAiVGVzdFxuVGV4dCBBcnJheSBVUERBVEUxXG5UZXN0IiwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBWZXJzaW9uTnVtYmVyID0+IDIsCiAgICAgICAgICAgIExhc3RWZXJzaW9uICAgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAxIFZlcnNpb24gMicsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgICAgICA9PiAnUGlsb3QnLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICdDdXN0b21lcjE6OjEnICAgICAgID0+ICdVbml0VGVzdCcsCiAgICAgICAgICAgICAgICAnRGF0ZTE6OjEnICAgICAgICAgICA9PiAnMjAwOC0wMi0wMicsCiAgICAgICAgICAgICAgICAnRGF0ZVRpbWUxOjoxJyAgICAgICA9PiAnMjAwOC0wMi0wMiAwMzo1OScsCiAgICAgICAgICAgICAgICAnR2VuZXJhbENhdGFsb2cxOjoxJyA9PiAkR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZXtUZXN0Mn0sCiAgICAgICAgICAgICAgICAnSW50ZWdlcjE6OjEnICAgICAgICA9PiAnMicsCiAgICAgICAgICAgICAgICAnVGV4dDE6OjEnICAgICAgICAgICA9PiAnVGVzdCBUZXh0IFVQREFURTEgVGVzdCcsCiAgICAgICAgICAgICAgICAnVGV4dEFyZWExOjoxJyAgICAgICA9PiAiVGVzdFxuVGV4dCBBcnJheSBVUERBVEUxXG5UZXN0IiwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChhIG5ldyB2ZXJzaW9uIG11c3QgYmUgYWRkZWQgdG8gZmlyc3QgdGVzdCBjb25maWcgaXRlbSBhZ2FpbikKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOYW1lJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnQ3VzdG9tZXIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEYXRlMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGF0ZVRpbWUxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdHZW5lcmFsQ2F0YWxvZzE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0ludGVnZXIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0MTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnVGV4dEFyZWExOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI3XSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWwogICAgICAgICAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1swXSwKICAgICAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDEgVmVyc2lvbiAzJywKICAgICAgICAgICAgICAgICAgICAnUmVwYWlyJywKICAgICAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCcsCiAgICAgICAgICAgICAgICAgICAgJzIwMDgtMDItMDMnLAogICAgICAgICAgICAgICAgICAgICcyMDA4LTAyLTAzIDAzOjU5JywKICAgICAgICAgICAgICAgICAgICAnVGVzdDMnLAogICAgICAgICAgICAgICAgICAgICczJywKICAgICAgICAgICAgICAgICAgICAnVGVzdCBUZXh0IFVQREFURTIgVGVzdCcsCiAgICAgICAgICAgICAgICAgICAgIlRlc3RcblRleHQgQXJyYXkgVVBEQVRFMlxuVGVzdCIsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgVmVyc2lvbk51bWJlciA9PiAzLAogICAgICAgICAgICBMYXN0VmVyc2lvbiAgID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgID0+ICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gMSBWZXJzaW9uIDMnLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICAgICAgPT4gJ1JlcGFpcicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ0N1c3RvbWVyMTo6MScgICAgICAgPT4gJ1VuaXRUZXN0JywKICAgICAgICAgICAgICAgICdEYXRlMTo6MScgICAgICAgICAgID0+ICcyMDA4LTAyLTAzJywKICAgICAgICAgICAgICAgICdEYXRlVGltZTE6OjEnICAgICAgID0+ICcyMDA4LTAyLTAzIDAzOjU5JywKICAgICAgICAgICAgICAgICdHZW5lcmFsQ2F0YWxvZzE6OjEnID0+ICRHZW5lcmFsQ2F0YWxvZ0xpc3RSZXZlcnNle1Rlc3QzfSwKICAgICAgICAgICAgICAgICdJbnRlZ2VyMTo6MScgICAgICAgID0+ICczJywKICAgICAgICAgICAgICAgICdUZXh0MTo6MScgICAgICAgICAgID0+ICdUZXN0IFRleHQgVVBEQVRFMiBUZXN0JywKICAgICAgICAgICAgICAgICdUZXh0QXJlYTE6OjEnICAgICAgID0+ICJUZXN0XG5UZXh0IEFycmF5IFVQREFURTJcblRlc3QiLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGEgbmV3IHZlcnNpb24gbXVzdCBiZSBhZGRlZCB0byB0aGlyZCB0ZXN0IGNvbmZpZyBpdGVtKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1sxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMTo6MicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMTo6MycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6Mjo6TWFpbjFTdWIxU3ViU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6Mjo6TWFpbjFTdWIxU3ViU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6Mjo6TWFpbjFTdWIxU3ViU3ViMjo6MicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMjo6MicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxOjpNYWluMlN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxOjpNYWluMlN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxOjpNYWluMlN1YjI6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjddLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzJdLAogICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gMyBWZXJzaW9uIDInLAogICAgICAgICAgICAgICAgICAgICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSknLAogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgxKScsCiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDEpIE1haW4xU3ViMVN1YlN1YjEgKDEpJywKICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMSkgTWFpbjFTdWIxU3ViU3ViMSAoMiknLAogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgxKSBNYWluMVN1YjFTdWJTdWIxICgzKScsCiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDEpIE1haW4xU3ViMVN1YlN1YjIgKDEpJywKICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMiknLAogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgyKSBNYWluMVN1YjFTdWJTdWIxICgxKScsCiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDIpIE1haW4xU3ViMVN1YlN1YjIgKDEpJywKICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMikgTWFpbjFTdWIxU3ViU3ViMiAoMiknLAogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIyICgxKScsCiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjIgKDIpJywKICAgICAgICAgICAgICAgICAgICAnTWFpbjIgKDEpJywKICAgICAgICAgICAgICAgICAgICAnTWFpbjIgKDEpIE1haW4yU3ViMSAoMSknLAogICAgICAgICAgICAgICAgICAgICdNYWluMiAoMSkgTWFpbjJTdWIyICgxKScsCiAgICAgICAgICAgICAgICAgICAgJ01haW4yICgxKSBNYWluMlN1YjIgKDIpJywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBWZXJzaW9uTnVtYmVyID0+IDIsCiAgICAgICAgICAgIExhc3RWZXJzaW9uICAgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgICAgID0+ICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gMyBWZXJzaW9uIDInLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICAgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ01haW4xOjoxJyAgICAgICAgICAgICAgID0+ICdNYWluMSAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjEnID0+ICdNYWluMSAoMSkgTWFpbjFTdWIxICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMTo6MScgPT4KICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMSkgTWFpbjFTdWIxU3ViU3ViMSAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjInID0+CiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDEpIE1haW4xU3ViMVN1YlN1YjEgKDIpJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjozJyA9PgogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgxKSBNYWluMVN1YjFTdWJTdWIxICgzKScsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMjo6MScgPT4KICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMSkgTWFpbjFTdWIxU3ViU3ViMiAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjInID0+ICdNYWluMSAoMSkgTWFpbjFTdWIxICgyKScsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6Mjo6TWFpbjFTdWIxU3ViU3ViMTo6MScgPT4KICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMikgTWFpbjFTdWIxU3ViU3ViMSAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjI6OjEnID0+CiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDIpIE1haW4xU3ViMVN1YlN1YjIgKDEpJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIyOjoyJyA9PgogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgyKSBNYWluMVN1YjFTdWJTdWIyICgyKScsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMjo6MScgPT4gJ01haW4xICgxKSBNYWluMVN1YjIgKDEpJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIyOjoyJyA9PiAnTWFpbjEgKDEpIE1haW4xU3ViMiAoMiknLAogICAgICAgICAgICAgICAgJ01haW4yOjoxJyAgICAgICAgICAgICAgID0+ICdNYWluMiAoMSknLAogICAgICAgICAgICAgICAgJ01haW4yOjoxOjpNYWluMlN1YjE6OjEnID0+ICdNYWluMiAoMSkgTWFpbjJTdWIxICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjI6OjE6Ok1haW4yU3ViMjo6MScgPT4gJ01haW4yICgxKSBNYWluMlN1YjIgKDEpJywKICAgICAgICAgICAgICAgICdNYWluMjo6MTo6TWFpbjJTdWIyOjoyJyA9PiAnTWFpbjIgKDEpIE1haW4yU3ViMiAoMiknLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgICMgSW4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAzIFZlcnNpb24gMicgMTYgQXR0cmlidXRlcyB3ZXJlIGltcG9ydGVkLAogICAgIyBzbyB0aGVyZSB3aWxsIGJlIDggbGluZ2VyaW5nIGF0dHJpYnV0ZXMuCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syN10sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsKICAgICAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbMl0sCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAzIFZlcnNpb24gMycsCiAgICAgICAgICAgICAgICAgICAgJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgJyIiOzs6Oi4uLS1fXyMjJywKICAgICAgICAgICAgICAgICAgICAnVGVzdDs6X8KwXiEiwqckJSYvKCk9P8K0YCorVGVzdCcsCiAgICAgICAgICAgICAgICAgICAgJz48QH5cJ317W11cXCcsCiAgICAgICAgICAgICAgICAgICAgJz48QH5cJ317W11cXCcsCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3Q7Ol/CsF4hIsKnJCUmLygpPT/CtGAqK1Rlc3QnLAogICAgICAgICAgICAgICAgICAgICciIjs7OjouLi0tX18jIycsCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3QgVGVzdCcsCiAgICAgICAgICAgICAgICAgICAgIlRlc3RcblRlc3RcdFRlc3QiLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIFZlcnNpb25OdW1iZXIgPT4gMywKICAgICAgICAgICAgTGFzdFZlcnNpb24gICA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAzIFZlcnNpb24gMycsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgICAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICAgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjEnICAgICAgICAgICAgICAgPT4gJyIiOzs6Oi4uLS1fXyMjJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxJyA9PiAnVGVzdDs6X8KwXiEiwqckJSYvKCk9P8K0YCorVGVzdCcsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMTo6MScgPT4gJz48QH5cJ317W11cXCcsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMjo6MScgPT4gJz48QH5cJ317W11cXCcsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMjo6MScgICAgICAgICAgICAgICAgICAgICAgPT4gJ1Rlc3Q7Ol/CsF4hIsKnJCUmLygpPT/CtGAqK1Rlc3QnLAogICAgICAgICAgICAgICAgJ01haW4yOjoxJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICciIjs7OjouLi0tX18jIycsCiAgICAgICAgICAgICAgICAnTWFpbjI6OjE6Ok1haW4yU3ViMTo6MScgICAgICAgICAgICAgICAgICAgICAgPT4gJ1Rlc3QgVGVzdCcsCiAgICAgICAgICAgICAgICAnTWFpbjI6OjE6Ok1haW4yU3ViMjo6MScgICAgICAgICAgICAgICAgICAgICAgPT4gIlRlc3RcblRlc3RcdFRlc3QiLAoKICAgICAgICAgICAgICAgICMgbGluZ2VyaW5nIGZyb20gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAzIFZlcnNpb24gMicsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMTo6MicgPT4KICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMSkgTWFpbjFTdWIxU3ViU3ViMSAoMiknLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjMnID0+CiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDEpIE1haW4xU3ViMVN1YlN1YjEgKDMpJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyJyA9PiAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMiknLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjE6OjEnID0+CiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDIpIE1haW4xU3ViMVN1YlN1YjEgKDEpJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIyOjoxJyA9PgogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgyKSBNYWluMVN1YjFTdWJTdWIyICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6Mjo6TWFpbjFTdWIxU3ViU3ViMjo6MicgPT4KICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMikgTWFpbjFTdWIxU3ViU3ViMiAoMiknLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjI6OjInID0+ICdNYWluMSAoMSkgTWFpbjFTdWIyICgyKScsCiAgICAgICAgICAgICAgICAnTWFpbjI6OjE6Ok1haW4yU3ViMjo6MicgPT4gJ01haW4yICgxKSBNYWluMlN1YjIgKDIpJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChVVEYtOCBjaGVja3MpCiAgICAjIEluICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gMyBWZXJzaW9uIDInIDE2IEF0dHJpYnV0ZXMgd2VyZSBpbXBvcnRlZCwKICAgICMgc28gdGhlcmUgd2lsbCBiZSA4IGxpbmdlcmluZyBhdHRyaWJ1dGVzLgogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1sxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxOjpNYWluMlN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxOjpNYWluMlN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjddLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzJdLAogICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gMyBWZXJzaW9uIDQnLAogICAgICAgICAgICAgICAgICAgICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICfOqyDOtCDOuycsCiAgICAgICAgICAgICAgICAgICAgJ8+AIM+HIM+YJywKICAgICAgICAgICAgICAgICAgICAnz7ogz7Egz64nLAogICAgICAgICAgICAgICAgICAgICfJryDKkyDKoCcsCiAgICAgICAgICAgICAgICAgICAgJ8qsIMqvJywKICAgICAgICAgICAgICAgICAgICAn0Lkg0YQg0YknLAogICAgICAgICAgICAgICAgICAgICfRmiDRkScsCiAgICAgICAgICAgICAgICAgICAgJ9GsINGmJywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBWZXJzaW9uTnVtYmVyID0+IDQsCiAgICAgICAgICAgIExhc3RWZXJzaW9uICAgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgICAgID0+ICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gMyBWZXJzaW9uIDQnLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICAgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ01haW4xOjoxJyAgICAgICAgICAgICAgID0+ICfOqyDOtCDOuycsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MScgPT4gJ8+AIM+HIM+YJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjoxJyA9PiAnz7ogz7Egz64nLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjI6OjEnID0+ICfJryDKkyDKoCcsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMjo6MScgICAgICAgICAgICAgICAgICAgICAgPT4gJ8qsIMqvJywKICAgICAgICAgICAgICAgICdNYWluMjo6MScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAn0Lkg0YQg0YknLAogICAgICAgICAgICAgICAgJ01haW4yOjoxOjpNYWluMlN1YjE6OjEnICAgICAgICAgICAgICAgICAgICAgID0+ICfRmiDRkScsCiAgICAgICAgICAgICAgICAnTWFpbjI6OjE6Ok1haW4yU3ViMjo6MScgICAgICAgICAgICAgICAgICAgICAgPT4gJ9GsINGmJywKCiAgICAgICAgICAgICAgICAjIGxpbmdlcmluZyBmcm9tICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gMyBWZXJzaW9uIDInLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjInID0+CiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDEpIE1haW4xU3ViMVN1YlN1YjEgKDIpJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjozJyA9PgogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgxKSBNYWluMVN1YjFTdWJTdWIxICgzKScsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MicgPT4gJ01haW4xICgxKSBNYWluMVN1YjEgKDIpJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIxOjoxJyA9PgogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgyKSBNYWluMVN1YjFTdWJTdWIxICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6Mjo6TWFpbjFTdWIxU3ViU3ViMjo6MScgPT4KICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMikgTWFpbjFTdWIxU3ViU3ViMiAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjI6OjInID0+CiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDIpIE1haW4xU3ViMVN1YlN1YjIgKDIpJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIyOjoyJyA9PiAnTWFpbjEgKDEpIE1haW4xU3ViMiAoMiknLAogICAgICAgICAgICAgICAgJ01haW4yOjoxOjpNYWluMlN1YjI6OjInID0+ICdNYWluMiAoMSkgTWFpbjJTdWIyICgyKScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhIHNpbXBsZSBpbXBvcnQgZm9yIHRlc3RpbmcgdGhlIG92ZXJyaWRpbmcgYmVoYXZpb3Igb2YgZW1wdHkgdmFsdWVzCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0MTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnR2VuZXJhbENhdGFsb2cxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI1XSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWwogICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIEltcG9ydHRlc3QgNScsCiAgICAgICAgICAgICAgICAgICAgJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgJ0ltcG9ydHRlc3QgNSBmb3IgYmVoYXZpb3Igb2YgZW1wdHkgdmFsdWVzJywKICAgICAgICAgICAgICAgICAgICAnVGVzdDEnLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIFZlcnNpb25OdW1iZXIgPT4gMSwKICAgICAgICAgICAgTGFzdFZlcnNpb24gICA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDUnLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdUZXh0MTo6MScgICAgICAgICAgID0+ICdJbXBvcnR0ZXN0IDUgZm9yIGJlaGF2aW9yIG9mIGVtcHR5IHZhbHVlcycsCiAgICAgICAgICAgICAgICAnR2VuZXJhbENhdGFsb2cxOjoxJyA9PiAkR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZXtUZXN0MX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBpbXBvcnQgYW4gZW1wdHkgdmFsdWUgZm9yIFRleHQxLCB3aXRoIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgdHVybmVkIG9uCiAgICAjIG5vIG5ldyB2ZXJzaW9uIHNob3VsZCBiZSBjcmVhdGVkCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICAgICAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyA9PiAnb24nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0MTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnR2VuZXJhbENhdGFsb2cxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI1XSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWwogICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIEltcG9ydHRlc3QgNScsCiAgICAgICAgICAgICAgICAgICAgJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3QxJywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBWZXJzaW9uTnVtYmVyID0+IDEsCiAgICAgICAgICAgIExhc3RWZXJzaW9uICAgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnVGV4dDE6OjEnICAgICAgICAgICA9PiAnSW1wb3J0dGVzdCA1IGZvciBiZWhhdmlvciBvZiBlbXB0eSB2YWx1ZXMnLAogICAgICAgICAgICAgICAgJ0dlbmVyYWxDYXRhbG9nMTo6MScgPT4gJEdlbmVyYWxDYXRhbG9nTGlzdFJldmVyc2V7VGVzdDF9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaW1wb3J0IHVuZGVmIGZvciBUZXh0MSwgd2l0aCBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzIHR1cm5lZCBvbgogICAgIyBubyBuZXcgdmVyc2lvbiBzaG91bGQgYmUgY3JlYXRlZAogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgICAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgPT4gJ29uJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnVGV4dDE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0dlbmVyYWxDYXRhbG9nMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNV0sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsKICAgICAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDUnLAogICAgICAgICAgICAgICAgICAgICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICdUZXN0MScsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgVmVyc2lvbk51bWJlciA9PiAxLAogICAgICAgICAgICBMYXN0VmVyc2lvbiAgID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgID0+ICdVbml0VGVzdCAtIEltcG9ydHRlc3QgNScsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ1RleHQxOjoxJyAgICAgICAgICAgPT4gJ0ltcG9ydHRlc3QgNSBmb3IgYmVoYXZpb3Igb2YgZW1wdHkgdmFsdWVzJywKICAgICAgICAgICAgICAgICdHZW5lcmFsQ2F0YWxvZzE6OjEnID0+ICRHZW5lcmFsQ2F0YWxvZ0xpc3RSZXZlcnNle1Rlc3QxfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGltcG9ydCBhbiBlbXB0eSB2YWx1ZSBmb3IgVGV4dDEsIHdpdGggRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyB0dXJuZWQgb2ZmCiAgICAjIGEgbmV3IHZlcnNpb24gc2hvdWxkIGJlIGNyZWF0ZWQKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgICAgICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0MTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnR2VuZXJhbENhdGFsb2cxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI1XSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWwogICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIEltcG9ydHRlc3QgNScsCiAgICAgICAgICAgICAgICAgICAgJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3QxJywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBWZXJzaW9uTnVtYmVyID0+IDIsCiAgICAgICAgICAgIExhc3RWZXJzaW9uICAgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnVGV4dDE6OjEnICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgICdHZW5lcmFsQ2F0YWxvZzE6OjEnID0+ICRHZW5lcmFsQ2F0YWxvZ0xpc3RSZXZlcnNle1Rlc3QxfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGltcG9ydCBhIHNpbmdsZSBzcGFjZSB2YWx1ZSBmb3IgVGV4dDEsIHdpdGggRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyB0dXJuZWQgb24KICAgICMgYSBuZXcgdmVyc2lvbiBzaG91bGQgYmUgY3JlYXRlZAogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgICAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHQxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdHZW5lcmFsQ2F0YWxvZzE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjVdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAnICcsCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3QxJywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBWZXJzaW9uTnVtYmVyID0+IDMsCiAgICAgICAgICAgIExhc3RWZXJzaW9uICAgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnVGV4dDE6OjEnICAgICAgICAgICA9PiAnICcsCiAgICAgICAgICAgICAgICAnR2VuZXJhbENhdGFsb2cxOjoxJyA9PiAkR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZXtUZXN0MX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBpbXBvcnQgdGhlIHN0cmluZyAnMCcgdmFsdWUgZm9yIFRleHQxLCB3aXRoIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgdHVybmVkIG9uCiAgICAjIGEgbmV3IHZlcnNpb24gc2hvdWxkIGJlIGNyZWF0ZWQKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgICAgICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0MTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnR2VuZXJhbENhdGFsb2cxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI1XSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWwogICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIEltcG9ydHRlc3QgNScsCiAgICAgICAgICAgICAgICAgICAgJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgJzAnLAogICAgICAgICAgICAgICAgICAgICdUZXN0MScsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgVmVyc2lvbk51bWJlciA9PiA0LAogICAgICAgICAgICBMYXN0VmVyc2lvbiAgID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgID0+ICdVbml0VGVzdCAtIEltcG9ydHRlc3QgNScsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ1RleHQxOjoxJyAgICAgICAgICAgPT4gJzAnLAogICAgICAgICAgICAgICAgJ0dlbmVyYWxDYXRhbG9nMTo6MScgPT4gJEdlbmVyYWxDYXRhbG9nTGlzdFJldmVyc2V7VGVzdDF9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaW1wb3J0IGFuIGVtcHR5IHZhbHVlIGZvciBHZW5lcmFsQ2F0YWxvZzEsIHdpdGggRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyB0dXJuZWQgb24KICAgICMgbm8gbmV3IHZlcnNpb24gc2hvdWxkIGJlIGNyZWF0ZWQKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgICAgICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzID0+ICdvbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHQxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdHZW5lcmFsQ2F0YWxvZzE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjVdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBWZXJzaW9uTnVtYmVyID0+IDQsCiAgICAgICAgICAgIExhc3RWZXJzaW9uICAgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnVGV4dDE6OjEnICAgICAgICAgICA9PiAnMCcsCiAgICAgICAgICAgICAgICAnR2VuZXJhbENhdGFsb2cxOjoxJyA9PiAkR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZXtUZXN0MX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBpbXBvcnQgYW4gaW52YWxpZCB2YWx1ZSBmb3IgR2VuZXJhbENhdGFsb2cxLCB3aXRoIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgdHVybmVkIG9uCiAgICAjIHRoZSBpbXBvcnQgc2hvdWxkIGZhaWwKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgICAgICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzID0+ICdvbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHQxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdHZW5lcmFsQ2F0YWxvZzE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjVdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgICAgICAnbm9uLWV4aXN0ZW50IGdlbmVyYWwgY2F0YWxvZyBlbnRyeScsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBpbXBvcnQgYW4gaW52YWxpZCB2YWx1ZSBmb3IgR2VuZXJhbENhdGFsb2cxLCB3aXRoIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgdHVybmVkIG9mZgogICAgIyB0aGUgaW1wb3J0IHNob3VsZCBmYWlsCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICAgICAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnVGV4dDE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0dlbmVyYWxDYXRhbG9nMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNV0sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsKICAgICAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDUnLAogICAgICAgICAgICAgICAgICAgICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgICAgICdub24tZXhpc3RlbnQgZ2VuZXJhbCBjYXRhbG9nIGVudHJ5JywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGltcG9ydCBhbiBlbXB0eSB2YWx1ZSBmb3IgRGVwbFN0YXRlLCB3aXRoIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgdHVybmVkIG9uCiAgICAjIG5vIG5ldyB2ZXJzaW9uIHNob3VsZCBiZSBjcmVhdGVkCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICAgICAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyA9PiAnb24nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0MTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnR2VuZXJhbENhdGFsb2cxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI1XSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWwogICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIEltcG9ydHRlc3QgNScsCiAgICAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBWZXJzaW9uTnVtYmVyID0+IDQsCiAgICAgICAgICAgIExhc3RWZXJzaW9uICAgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnVGV4dDE6OjEnICAgICAgICAgICA9PiAnMCcsCiAgICAgICAgICAgICAgICAnR2VuZXJhbENhdGFsb2cxOjoxJyA9PiAkR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZXtUZXN0MX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBpbXBvcnQgYW4gaW52YWxpZCB2YWx1ZSBmb3IgRGVwbFN0YXRlLCB3aXRoIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgdHVybmVkIG9uCiAgICAjIGFuIGVycm9yIHNob3VsZCBiZSBnZW5lcmF0ZWQKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgICAgICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzID0+ICdvbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHQxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdHZW5lcmFsQ2F0YWxvZzE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjVdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgICAgICAnaW52YWxpZCBkZXBsb3ltZW50IHN0YXRlJywKICAgICAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaW1wb3J0IGFuIGVtcHR5IHZhbHVlIGZvciBJbmNpU3RhdGUsIHdpdGggRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyB0dXJuZWQgb24KICAgICMgbm8gbmV3IHZlcnNpb24gc2hvdWxkIGJlIGNyZWF0ZWQKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgICAgICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzID0+ICdvbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHQxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdHZW5lcmFsQ2F0YWxvZzE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjVdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgVmVyc2lvbk51bWJlciA9PiA0LAogICAgICAgICAgICBMYXN0VmVyc2lvbiAgID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgID0+ICdVbml0VGVzdCAtIEltcG9ydHRlc3QgNScsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ1RleHQxOjoxJyAgICAgICAgICAgPT4gJzAnLAogICAgICAgICAgICAgICAgJ0dlbmVyYWxDYXRhbG9nMTo6MScgPT4gJEdlbmVyYWxDYXRhbG9nTGlzdFJldmVyc2V7VGVzdDF9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaW1wb3J0IGFuIGludmFsaWQgdmFsdWUgZm9yIEluY2lTdGF0ZSwgd2l0aCBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzIHR1cm5lZCBvbgogICAgIyBhbiBlcnJvciBzaG91bGQgYmUgZ2VuZXJhdGVkCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICAgICAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyA9PiAnb24nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0MTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnR2VuZXJhbENhdGFsb2cxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI1XSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWwogICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIEltcG9ydHRlc3QgNScsCiAgICAgICAgICAgICAgICAgICAgJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGluY2lkZW50IHN0YXRlJywKICAgICAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBydW4gZ2VuZXJhbCBFeHBvcnREYXRhR2V0IHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRJbXBvcnRUZXN0Q291bnQgPSAxOwpURVNUOgpmb3IgbXkgJFRlc3QgKEBJbXBvcnREYXRhVGVzdHMpIHsKCiAgICAjIGNoZWNrIFNvdXJjZUltcG9ydERhdGEgYXR0cmlidXRlCiAgICBpZiAoICEkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9IHx8IHJlZiAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9IG5lICdIQVNIJyApIHsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICJJbXBvcnRUZXN0ICRJbXBvcnRUZXN0Q291bnQ6IE5vIFNvdXJjZUltcG9ydERhdGEgZm91bmQgZm9yIHRoaXMgdGVzdC4iCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBURVNUOwogICAgfQoKICAgICMgc2V0IHRoZSBvYmplY3QgZGF0YQogICAgaWYgKAogICAgICAgICRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0tPntPYmplY3REYXRhfQogICAgICAgICYmIHJlZiAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57T2JqZWN0RGF0YX0gZXEgJ0hBU0gnCiAgICAgICAgJiYgJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e0ltcG9ydERhdGFTYXZlfS0+e1RlbXBsYXRlSUR9CiAgICAgICAgKQogICAgewoKICAgICAgICAjIHNhdmUgb2JqZWN0IGRhdGEKICAgICAgICAkU2VsZi0+e0ltcG9ydEV4cG9ydE9iamVjdH0tPk9iamVjdERhdGFTYXZlKAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0tPntJbXBvcnREYXRhU2F2ZX0tPntUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57T2JqZWN0RGF0YX0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgc2V0IHRoZSBtYXBwaW5nIG9iamVjdCBkYXRhCiAgICBpZiAoCiAgICAgICAgJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e01hcHBpbmdPYmplY3REYXRhfQogICAgICAgICYmIHJlZiAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57TWFwcGluZ09iamVjdERhdGF9IGVxICdBUlJBWScKICAgICAgICAmJiAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57SW1wb3J0RGF0YVNhdmV9LT57VGVtcGxhdGVJRH0KICAgICAgICApCiAgICB7CgogICAgICAgICMgZGVsZXRlIGFsbCBleGlzdGluZyBtYXBwaW5nIGRhdGEKICAgICAgICAkU2VsZi0+e0ltcG9ydEV4cG9ydE9iamVjdH0tPk1hcHBpbmdEZWxldGUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e0ltcG9ydERhdGFTYXZlfS0+e1RlbXBsYXRlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgdGhlIG1hcHBpbmcgb2JqZWN0IHJvd3MKICAgICAgICBNQVBQSU5HT0JKRUNUREFUQToKICAgICAgICBmb3IgbXkgJE1hcHBpbmdPYmplY3REYXRhICggQHsgJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e01hcHBpbmdPYmplY3REYXRhfSB9ICkgewoKICAgICAgICAgICAgIyBhZGQgYSBuZXcgbWFwcGluZyByb3cKICAgICAgICAgICAgbXkgJE1hcHBpbmdJRCA9ICRTZWxmLT57SW1wb3J0RXhwb3J0T2JqZWN0fS0+TWFwcGluZ0FkZCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e0ltcG9ydERhdGFTYXZlfS0+e1RlbXBsYXRlSUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBhZGQgdGhlIG1hcHBpbmcgb2JqZWN0IGRhdGEKICAgICAgICAgICAgJFNlbGYtPntJbXBvcnRFeHBvcnRPYmplY3R9LT5NYXBwaW5nT2JqZWN0RGF0YVNhdmUoCiAgICAgICAgICAgICAgICBNYXBwaW5nSUQgICAgICAgICA9PiAkTWFwcGluZ0lELAogICAgICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gJE1hcHBpbmdPYmplY3REYXRhLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBpbXBvcnQgZGF0YSBzYXZlCiAgICBteSAoICRDb25maWdJdGVtSUQsICRSZXRDb2RlICkgPSAkU2VsZi0+e09iamVjdEJhY2tlbmRPYmplY3R9LT5JbXBvcnREYXRhU2F2ZSgKICAgICAgICAleyAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57SW1wb3J0RGF0YVNhdmV9IH0sCiAgICAgICAgQ291bnRlciA9PiAkSW1wb3J0VGVzdENvdW50LAogICAgKTsKCiAgICBpZiAoICEkVGVzdC0+e1JlZmVyZW5jZUltcG9ydERhdGF9ICkgewoKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICJJbXBvcnRUZXN0ICRJbXBvcnRUZXN0Q291bnQ6IEltcG9ydERhdGFTYXZlKCkgLSByZXR1cm4gbm8gQ29uZmlnSXRlbUlEIgogICAgICAgICk7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkUmV0Q29kZSwKICAgICAgICAgICAgIkltcG9ydFRlc3QgJEltcG9ydFRlc3RDb3VudDogSW1wb3J0RGF0YVNhdmUoKSAtIHJldHVybiBubyBSZXRDb2RlIgogICAgICAgICk7CgogICAgICAgIG5leHQgVEVTVDsKICAgIH0KCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQ29uZmlnSXRlbUlELAogICAgICAgICJJbXBvcnRUZXN0ICRJbXBvcnRUZXN0Q291bnQ6IEltcG9ydERhdGFTYXZlKCkgLSByZXR1cm4gQ29uZmlnSXRlbUlEIgogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRSZXRDb2RlLAogICAgICAgICJJbXBvcnRUZXN0ICRJbXBvcnRUZXN0Q291bnQ6IEltcG9ydERhdGFTYXZlKCkgLSByZXR1cm4gUmV0Q29kZSIKICAgICk7CgogICAgIyBnZXQgdGhlIHZlcnNpb24gbGlzdAogICAgbXkgJFZlcnNpb25MaXN0ID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkxpc3QoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICApOwoKICAgICMgY2hlY2sgbnVtYmVyIG9mIHZlcnNpb25zCiAgICAkU2VsZi0+SXMoCiAgICAgICAgc2NhbGFyIEB7JFZlcnNpb25MaXN0fSwKICAgICAgICAkVGVzdC0+e1JlZmVyZW5jZUltcG9ydERhdGF9LT57VmVyc2lvbk51bWJlcn0gfHwgMCwKICAgICAgICAiSW1wb3J0VGVzdCAkSW1wb3J0VGVzdENvdW50OiBJbXBvcnREYXRhU2F2ZSgpIC0gY29ycmVjdCBudW1iZXIgb2YgdmVyc2lvbnMiLAogICAgKTsKCiAgICAjIGdldCB0aGUgbGFzdCB2ZXJzaW9uCiAgICBteSAkVmVyc2lvbkRhdGEgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5WZXJzaW9uR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgIFhNTERhdGFHZXQgICA9PiAxLAogICAgKTsKCiAgICAjIHRyYW5zbGF0ZSB4bWxkYXRhIGluIGEgMmQgaGFzaAogICAgbXkgJVhNTEhhc2ggPSAkU2VsZi0+e1hNTE9iamVjdH0tPlhNTEhhc2gyRCgKICAgICAgICBYTUxIYXNoID0+ICRWZXJzaW9uRGF0YS0+e1hNTERhdGF9LAogICAgKTsKCiAgICAjIGNsZWFuIHRoZSB4bWwgaGFzaAogICAgS0VZOgogICAgZm9yIG15ICRLZXkgKCBrZXlzICVYTUxIYXNoICkgewoKICAgICAgICBuZXh0IEtFWSBpZiAkS2V5ID1+IG17IFx7J0NvbnRlbnQnXH0gXHogfXhtczsKCiAgICAgICAgZGVsZXRlICRYTUxIYXNoeyRLZXl9OwogICAgfQoKICAgICMgY2hlY2sgZ2VuZXJhbCBlbGVtZW50cwogICAgRUxFTUVOVDoKICAgIGZvciBteSAkRWxlbWVudCAocXcoTnVtYmVyIE5hbWUgRGVwbFN0YXRlIEluY2lTdGF0ZSkpIHsKCiAgICAgICAgbmV4dCBFTEVNRU5UIGlmICFleGlzdHMgJFRlc3QtPntSZWZlcmVuY2VJbXBvcnREYXRhfS0+e0xhc3RWZXJzaW9ufS0+eyRFbGVtZW50fTsKCiAgICAgICAgIyBzZXQgY29udGVudCBpZiB2YWx1ZXMgYXJlIHVuZGVmCiAgICAgICAgaWYgKCAhZGVmaW5lZCAkVGVzdC0+e1JlZmVyZW5jZUltcG9ydERhdGF9LT57TGFzdFZlcnNpb259LT57JEVsZW1lbnR9ICkgewogICAgICAgICAgICAkVGVzdC0+e1JlZmVyZW5jZUltcG9ydERhdGF9LT57TGFzdFZlcnNpb259LT57JEVsZW1lbnR9ID0gJ1VOREVGLXVuaXR0ZXN0JzsKICAgICAgICB9CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkVGVzdC0+e1JlZmVyZW5jZUltcG9ydERhdGF9LT57TGFzdFZlcnNpb259LT57JEVsZW1lbnR9ICkgewogICAgICAgICAgICAkVGVzdC0+e1JlZmVyZW5jZUltcG9ydERhdGF9LT57TGFzdFZlcnNpb259LT57JEVsZW1lbnR9ID0gJ1VOREVGLXVuaXR0ZXN0JzsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZWxlbWVudAogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFZlcnNpb25EYXRhLT57JEVsZW1lbnR9LAogICAgICAgICAgICAkVGVzdC0+e1JlZmVyZW5jZUltcG9ydERhdGF9LT57TGFzdFZlcnNpb259LT57JEVsZW1lbnR9LAogICAgICAgICAgICAiSW1wb3J0VGVzdCAkSW1wb3J0VGVzdENvdW50OiBJbXBvcnREYXRhU2F2ZSgpICRFbGVtZW50IGlzIGlkZW50aWNhbCIsCiAgICAgICAgKTsKCiAgICAgICAgZGVsZXRlICRUZXN0LT57UmVmZXJlbmNlSW1wb3J0RGF0YX0tPntMYXN0VmVyc2lvbn0tPnskRWxlbWVudH07CiAgICB9CgogICAgIyBjaGVjayBudW1iZXIgb2YgWE1MIGVsZW1lbnRzCiAgICAkU2VsZi0+SXMoCiAgICAgICAgc2NhbGFyIGtleXMgJVhNTEhhc2gsCiAgICAgICAgc2NhbGFyIGtleXMgJXsgJFRlc3QtPntSZWZlcmVuY2VJbXBvcnREYXRhfS0+e0xhc3RWZXJzaW9ufSB9LAogICAgICAgICJJbXBvcnRUZXN0ICRJbXBvcnRUZXN0Q291bnQ6IEltcG9ydERhdGFTYXZlKCkgLSBjb3JyZWN0IG51bWJlciBvZiBYTUwgZWxlbWVudHMiLAogICAgKTsKCiAgICAjIGNoZWNrIFhNTCBlbGVtZW50cwogICAgRUxFTUVOVDoKICAgIGZvciBteSAkS2V5ICgga2V5cyAleyAkVGVzdC0+e1JlZmVyZW5jZUltcG9ydERhdGF9LT57TGFzdFZlcnNpb259IH0gKSB7CgogICAgICAgICMgZHVwbGljYXRlIGtleQogICAgICAgIG15ICRYTUxLZXkgPSAkS2V5OwoKICAgICAgICAjIHByZXBhcmUga2V5CiAgICAgICAgbXkgJENvdW50ZXIgPSAwOwogICAgICAgIHdoaWxlICggJFhNTEtleSA9fiBteyA6OiB9eG1zICkgewoKICAgICAgICAgICAgaWYgKCAkQ291bnRlciAlIDIgKSB7CiAgICAgICAgICAgICAgICAkWE1MS2V5ID1+IHN7IDo6IH17XVx7J314bXM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkWE1MS2V5ID1+IHN7IDo6IH17J1x9W314bXM7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRDb3VudGVyKys7CiAgICAgICAgfQoKICAgICAgICBuZXh0IEVMRU1FTlQgaWYgIWV4aXN0cyAkWE1MSGFzaHsgJ1sxXXtcJ1ZlcnNpb25cJ31bMV17XCcnIC4gJFhNTEtleSAuICdde1wnQ29udGVudFwnfScgfTsKCiAgICAgICAgIyBzZXQgY29udGVudCBpZiB2YWx1ZXMgYXJlIHVuZGVmCiAgICAgICAgaWYgKCAhZGVmaW5lZCAkWE1MSGFzaHsgJ1sxXXtcJ1ZlcnNpb25cJ31bMV17XCcnIC4gJFhNTEtleSAuICdde1wnQ29udGVudFwnfScgfSApIHsKICAgICAgICAgICAgJFhNTEhhc2h7ICdbMV17XCdWZXJzaW9uXCd9WzFde1wnJyAuICRYTUxLZXkgLiAnXXtcJ0NvbnRlbnRcJ30nIH0gPSAnVU5ERUYtdW5pdHRlc3QnOwogICAgICAgIH0KICAgICAgICBpZiAoICFkZWZpbmVkICRUZXN0LT57UmVmZXJlbmNlSW1wb3J0RGF0YX0tPntMYXN0VmVyc2lvbn0tPnskS2V5fSApIHsKICAgICAgICAgICAgJFRlc3QtPntSZWZlcmVuY2VJbXBvcnREYXRhfS0+e0xhc3RWZXJzaW9ufS0+eyRLZXl9ID0gJ1VOREVGLXVuaXR0ZXN0JzsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgWE1MIGVsZW1lbnQKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRYTUxIYXNoeyAnWzFde1wnVmVyc2lvblwnfVsxXXtcJycgLiAkWE1MS2V5IC4gJ117XCdDb250ZW50XCd9JyB9LAogICAgICAgICAgICAkVGVzdC0+e1JlZmVyZW5jZUltcG9ydERhdGF9LT57TGFzdFZlcnNpb259LT57JEtleX0sCiAgICAgICAgICAgICJJbXBvcnRUZXN0ICRJbXBvcnRUZXN0Q291bnQ6IEltcG9ydERhdGFTYXZlKCkgJEtleSBpcyBpZGVudGljYWwiLAogICAgICAgICk7CiAgICB9Cn0KY29udGludWUgewogICAgJEltcG9ydFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgY2xlYW4gdGhlIHN5c3RlbQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGRlbGV0ZSB0aGUgdGVzdCB0ZW1wbGF0ZXMKJFNlbGYtPntJbXBvcnRFeHBvcnRPYmplY3R9LT5UZW1wbGF0ZURlbGV0ZSgKICAgIFRlbXBsYXRlSUQgPT4gXEBUZW1wbGF0ZUlEcywKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiMgZ2V0IGFjdHVhbCBjbGFzcyBsaXN0Cm15ICRDbGFzc0xpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAopOwoKIyBzZXQgdW5pdHRlc3QgY2xhc3NlcyBpbnZhbGlkCklURU1JRDoKZm9yIG15ICRJdGVtSUQgKCBrZXlzICV7JENsYXNzTGlzdH0gKSB7CgogICAgbmV4dCBJVEVNSUQgaWYgJENsYXNzTGlzdC0+eyRJdGVtSUR9ICF+IG17IFxBIFVuaXRUZXN0IH14bXM7CgogICAgIyB1cGRhdGUgaXRlbQogICAgJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1VcGRhdGUoCiAgICAgICAgSXRlbUlEICA9PiAkSXRlbUlELAogICAgICAgIE5hbWUgICAgPT4gJENsYXNzTGlzdC0+eyRJdGVtSUR9LAogICAgICAgIFZhbGlkSUQgPT4gMiwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwp9CgojIGRlbGV0ZSB0aGUgdGVzdCBjb25maWcgaXRlbXMKZm9yIG15ICRDb25maWdJdGVtSUQgKEBDb25maWdJdGVtSURzKSB7CiAgICAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtRGVsZXRlKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKfQoKMTsK
IyAtLQojIElUU01Db25maWdJdGVtLnQgLSBjb25maWcgaXRlbSB0ZXN0cwojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyBxdygkU2VsZik7Cgp1c2UgRGF0YTo6RHVtcGVyOwp1c2UgS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nOwp1c2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOwp1c2UgS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3Q7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VXNlcjsKCiRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nLT5uZXcoICV7JFNlbGZ9ICk7CiRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0gICAgID0gS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtLT5uZXcoICV7JFNlbGZ9ICk7CiRTZWxmLT57TGlua09iamVjdH0gICAgICAgICAgID0gS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QtPm5ldyggJXskU2VsZn0gKTsKJFNlbGYtPntVc2VyT2JqZWN0fSAgICAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6VXNlci0+bmV3KCAleyRTZWxmfSApOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIG1ha2UgcHJlcGFyYXRpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgcGVyZm9ybSBDb25maWdJdGVtQ291bnQgdG8gZmlsbCB0aGUgZW1wdHkgZmllbGRzCiRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1Db3VudCgpOwoKIyBjcmVhdGUgbmVlZGVkIHVzZXJzCm15IEBVc2VySURzOwp7CgogICAgIyBkaXNhYmxlIGVtYWlsIGNoZWNrcyB0byBjcmVhdGUgbmV3IHVzZXIKICAgIG15ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0NoZWNrRW1haWxBZGRyZXNzZXMnKSB8fCAxOwogICAgJFNlbGYtPntDb25maWdPYmplY3R9LT5TZXQoCiAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgIFZhbHVlID0+IDAsCiAgICApOwoKICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gMyApIHsKCiAgICAgICAgIyBjcmVhdGUgbmV3IHVzZXJzIGZvciB0aGUgdGVzdHMKICAgICAgICBteSAkVXNlcklEID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlckFkZCgKICAgICAgICAgICAgVXNlckZpcnN0bmFtZSA9PiAnSVRTTUNvbmZpZ0l0ZW0nIC4gJENvdW50ZXIsCiAgICAgICAgICAgIFVzZXJMYXN0bmFtZSAgPT4gJ1VuaXRUZXN0JywKICAgICAgICAgICAgVXNlckxvZ2luICAgICA9PiAnVW5pdFRlc3QtSVRTTUNvbmZpZ0l0ZW0tJyAuICRDb3VudGVyIC4gaW50IHJhbmQgMV8wMDBfMDAwLAogICAgICAgICAgICBVc2VyRW1haWwgICAgID0+ICdVbml0VGVzdC1JVFNNQ29uZmlnSXRlbS0nIC4gJENvdW50ZXIgLiAnQGxvY2FsaG9zdCcsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQFVzZXJJRHMsICRVc2VySUQ7CiAgICB9CgogICAgIyByZXN0b3JlIG9yaWdpbmFsIGVtYWlsIGNoZWNrIHBhcmFtCiAgICAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPlNldCgKICAgICAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICAgICAgVmFsdWUgPT4gJENoZWNrRW1haWxBZGRyZXNzZXNPcmcsCiAgICApOwp9CgpteSAkR2VuZXJhbENhdGFsb2dDbGFzcyA9ICdVbml0VGVzdCcgLiBpbnQgcmFuZCAxXzAwMF8wMDA7CgojIGFkZCBhIGdlbmVyYWwgY2F0YWxvZyB0ZXN0IGxpc3QKZm9yIG15ICROYW1lIChxdyhUZXN0MSBUZXN0MiBUZXN0MyBUZXN0NCkpIHsKCiAgICAjIGFkZCBhIG5ldyBpdGVtCiAgICBteSAkSXRlbUlEID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1BZGQoCiAgICAgICAgQ2xhc3MgICA9PiAkR2VuZXJhbENhdGFsb2dDbGFzcywKICAgICAgICBOYW1lICAgID0+ICROYW1lLAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgaXRlbSBpZAogICAgaWYgKCAhJEl0ZW1JRCApIHsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICJDYW4ndCBhZGQgbmV3IGdlbmVyYWwgY2F0YWxvZyBpdGVtLiIsCiAgICAgICAgKTsKICAgIH0KfQoKIyBkZWZpbmUgdGhlIGZpcnN0IHRlc3QgZGVmaW5pdGlvbiAoYWxsIHByb3ZpZGVkIGRhdGEgdHlwZXMpCm15IEBDb25maWdJdGVtRGVmaW5pdGlvbnM7CiRDb25maWdJdGVtRGVmaW5pdGlvbnNbMF0gPSAiIFsKICAgIHsKICAgICAgICBLZXkgICAgICAgID0+ICdDdXN0b21lcjEnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0N1c3RvbWVyIDEnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnQ3VzdG9tZXInLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ0RhdGUxJywKICAgICAgICBOYW1lICAgICAgID0+ICdEYXRlIDEnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnRGF0ZScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgICAgICA9PiAnRGF0ZVRpbWUxJywKICAgICAgICBOYW1lICAgICAgID0+ICdEYXRlIFRpbWUgMScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlID0+ICdEYXRlVGltZScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgPT4gJ0R1bW15MScsCiAgICAgICAgTmFtZSAgPT4gJ0R1bW15IDEnLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnRHVtbXknLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ0dlbmVyYWxDYXRhbG9nMScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnR2VuZXJhbENhdGFsb2cgMScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlICA9PiAnR2VuZXJhbENhdGFsb2cnLAogICAgICAgICAgICBDbGFzcyA9PiAnJEdlbmVyYWxDYXRhbG9nQ2xhc3MnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ0ludGVnZXIxJywKICAgICAgICBOYW1lICAgICAgID0+ICdJbnRlZ2VyIDEnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnSW50ZWdlcicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgICAgICA9PiAnVGV4dDEnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1RleHQgMScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICBTaXplICAgICAgPT4gNTAsCiAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICAgICAgID0+ICdUZXh0QXJlYTEnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1RleHRBcmVhIDEnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dEFyZWEnLAogICAgICAgIH0sCiAgICB9LApdICI7CgojIGRlZmluZSB0aGUgc2Vjb25kIHRlc3QgZGVmaW5pdGlvbiAoc3ViIGRhdGEgdHlwZXMpCiRDb25maWdJdGVtRGVmaW5pdGlvbnNbMV0gPSAiIFsKICAgIHsKICAgICAgICBLZXkgICAgICAgID0+ICdNYWluMScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnTWFpbiAxJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgIFNpemUgICAgICA9PiA1MCwKICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDUwLAogICAgICAgIH0sCiAgICAgICAgQ291bnRNYXggPT4gMTAsCiAgICAgICAgU3ViID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTWFpbjFTdWIxJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ01haW4gMSBTdWIgMScsCiAgICAgICAgICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIFNpemUgICAgICA9PiA1MCwKICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ291bnRNYXggPT4gMTAsCiAgICAgICAgICAgICAgICBTdWIgPT4gWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTWFpbjFTdWIxU3ViU3ViMScsCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ01haW4gMSBTdWIgMSBTdWJTdWIgMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDUwLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBDb3VudE1heCA9PiAxMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTWFpbjFTdWIxU3ViU3ViMicsCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ01haW4gMSBTdWIgMSBTdWJTdWIgMicsCiAgICAgICAgICAgICAgICAgICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXh0QXJlYScsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIENvdW50TWF4ID0+IDEwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdNYWluMVN1YjInLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTWFpbiAxIFN1YiAyJywKICAgICAgICAgICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICAgICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1RleHRBcmVhJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBDb3VudE1heCA9PiAxMCwKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICAgICAgID0+ICdNYWluMicsCiAgICAgICAgTmFtZSAgICAgICA9PiAnTWFpbiAyJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHRBcmVhJywKICAgICAgICB9LAogICAgICAgIENvdW50TWF4ID0+IDEwLAogICAgICAgIFN1YiA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ01haW4yU3ViMScsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdNYWluIDIgU3ViIDEnLAogICAgICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBTaXplICAgICAgPT4gNTAsCiAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDUwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIENvdW50TWF4ID0+IDEwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdNYWluMlN1YjInLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTWFpbiAyIFN1YiAyJywKICAgICAgICAgICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICAgICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1RleHRBcmVhJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBDb3VudE1heCA9PiAxMCwKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgfSwKXSAiOwoKIyBkZWZpbmUgdGhlIHRoaXJkIHRlc3QgZGVmaW5pdGlvbiAoZXNwZWNpYWxseSBmb3Igc2VhcmNoIHRlc3RzIHdpdGggWE1MRGF0YSkKJENvbmZpZ0l0ZW1EZWZpbml0aW9uc1syXSA9ICIgWwogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ0N1c3RvbWVyMScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnQ3VzdG9tZXIgMScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlID0+ICdDdXN0b21lcicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgICAgICA9PiAnRGF0ZTEnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0RhdGUgMScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlID0+ICdEYXRlJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICAgICAgID0+ICdEYXRlVGltZTEnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0RhdGUgVGltZSAxJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ0RhdGVUaW1lJywKICAgICAgICB9LAogICAgfSwKXSAiOwoKIyBkZWZpbmUgdGhlIGZvdXJ0aCB0ZXN0IGRlZmluaXRpb24gKG9ubHkgZm9yIHNlYXJjaCB0ZXN0cykKJENvbmZpZ0l0ZW1EZWZpbml0aW9uc1szXSA9ICIgWwogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ0N1c3RvbWVyMScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnQ3VzdG9tZXIgMScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlID0+ICdDdXN0b21lcicsCiAgICAgICAgfSwKICAgIH0sCl0gIjsKCiMgYWRkIHRoZSB0ZXN0IGNsYXNzZXMKbXkgQENvbmZpZ0l0ZW1DbGFzc0lEczsKbXkgQENvbmZpZ0l0ZW1DbGFzc2VzOwpteSBAQ29uZmlnSXRlbURlZmluaXRpb25JRHM7CmZvciBteSAkRGVmaW5pdGlvbiAoQENvbmZpZ0l0ZW1EZWZpbml0aW9ucykgewoKICAgICMgZ2VuZXJhdGUgYSByYW5kb20gbmFtZQogICAgbXkgJENsYXNzTmFtZSA9ICdVbml0VGVzdCcgLiBpbnQgcmFuZCAxXzAwMF8wMDA7CgogICAgIyBhZGQgYW4gdW5pdHRlc3QgY29uZmlnIGl0ZW0gY2xhc3MKICAgIG15ICRDbGFzc0lEID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1BZGQoCiAgICAgICAgQ2xhc3MgICA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgIE5hbWUgICAgPT4gJENsYXNzTmFtZSwKICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCiAgICAjIGNoZWNrIGNsYXNzIGlkCiAgICBpZiAoICEkQ2xhc3NJRCApIHsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICJDYW4ndCBhZGQgbmV3IGNvbmZpZyBpdGVtIGNsYXNzLiIsCiAgICAgICAgKTsKICAgIH0KCiAgICBwdXNoIEBDb25maWdJdGVtQ2xhc3NJRHMsICRDbGFzc0lEOwogICAgcHVzaCBAQ29uZmlnSXRlbUNsYXNzZXMsICAkQ2xhc3NOYW1lOwoKICAgICMgYWRkIGEgZGVmaW5pdGlvbiB0byB0aGUgY2xhc3MKICAgIG15ICREZWZpbml0aW9uSUQgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5EZWZpbml0aW9uQWRkKAogICAgICAgIENsYXNzSUQgICAgPT4gJENsYXNzSUQsCiAgICAgICAgRGVmaW5pdGlvbiA9PiAkRGVmaW5pdGlvbiwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgZGVmaW5pdGlvbiBpZAogICAgaWYgKCAhJERlZmluaXRpb25JRCApIHsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICJDYW4ndCBhZGQgbmV3IGNvbmZpZyBpdGVtIGRlZmluaXRpb24uIiwKICAgICAgICApOwogICAgfQoKICAgIHB1c2ggQENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzLCAkRGVmaW5pdGlvbklEOwp9CgojIHRlc3QgRGVmaW5pdGlvbkxpc3QgZm9yIHRob3NlIHNpbXBsZSBjYXNlcwpteSAkQ291bnRlciA9IDA7CmZvciBteSAkQ2xhc3NJRCAoQENvbmZpZ0l0ZW1DbGFzc0lEcykgewogICAgbXkgJERlZmluaXRpb25MaXN0UmVmID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+RGVmaW5pdGlvbkxpc3QoCiAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NJRCwKICAgICk7CgogICAgIyBleHBlY3QgYSBzaW5nbGUgZGVmaW5pdGlvbiBwZXIgY29uZmlnIGl0ZW0gY2xhc3MKICAgICRTZWxmLT5JcygKICAgICAgICBzY2FsYXIgQHskRGVmaW5pdGlvbkxpc3RSZWZ9LAogICAgICAgIDEsCiAgICAgICAgIkRlZmluaXRpb25MaXN0KCkgZm9yIGNsYXNzIGlkICRDbGFzc0lEOiBnb3QgYSBzaW5nbGUgcmVzdWx0IiwKICAgICk7CgogICAgIyBleHBlY3QgdGhlIHJlbWVtYmVyZWQgZGVmaW5pdGlvbiBpZCBpbiB0aGUgZmlyc3QgZGVmaW5pdGlvbgogICAgJFNlbGYtPklzKAogICAgICAgICREZWZpbml0aW9uTGlzdFJlZi0+WzBdLT57RGVmaW5pdGlvbklEfSwKICAgICAgICAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbJENvdW50ZXJdLAogICAgICAgICJEZWZpbml0aW9uTGlzdCgpIGZvciBjbGFzcyBpZCAkQ2xhc3NJRDogZ290IGV4cGVjdGVkIGRlZmluaXRpb24gaWQiLAogICAgKTsKfQpjb250aW51ZSB7CiAgICAkQ291bnRlcisrOwp9CgojIGNyZWF0ZSBzb21lIHJhbmRvbSBudW1iZXJzCm15IEBDb25maWdJdGVtTnVtYmVyczsKZm9yICggMSAuLiAxMDAgKSB7CiAgICBwdXNoIEBDb25maWdJdGVtTnVtYmVycywgaW50IHJhbmQgMV8wMDBfMDAwOwp9CgojIGdldCBjbGFzcyBsaXN0Cm15ICRDbGFzc0xpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAopOwpteSAlQ2xhc3NMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJXskQ2xhc3NMaXN0fTsKCiMgZ2V0IGRlcGxveW1lbnQgc3RhdGUgbGlzdApteSAkRGVwbFN0YXRlTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGUnLAopOwpteSAlRGVwbFN0YXRlTGlzdFJldmVyc2UgPSByZXZlcnNlICV7JERlcGxTdGF0ZUxpc3R9OwoKIyBnZXQgaW5jaWRlbnQgc3RhdGUgbGlzdApteSAkSW5jaVN0YXRlTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlJywKKTsKbXkgJUluY2lTdGF0ZUxpc3RSZXZlcnNlID0gcmV2ZXJzZSAleyRJbmNpU3RhdGVMaXN0fTsKCiMgZ2V0IGdlbmVyYWwgY2F0YWxvZyB0ZXN0IGxpc3QKbXkgJEdlbmVyYWxDYXRhbG9nTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICRHZW5lcmFsQ2F0YWxvZ0NsYXNzLAopOwpteSAlR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJXskR2VuZXJhbENhdGFsb2dMaXN0fTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBkZWZpbmUgZ2VuZXJhbCBjb25maWcgaXRlbSB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkQ29uZmlnSXRlbVRlc3RzID0gWwoKICAgICMgQ29uZmlnSXRlbUFkZCBkb2Vzbid0IGNvbnRhaW5zIGFsbCBkYXRhIChjaGVjayByZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgQ29uZmlnSXRlbUFkZCBkb2Vzbid0IGNvbnRhaW5zIGFsbCBkYXRhIChjaGVjayByZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGludmFsaWQgY2xhc3MgaWQgaXMgZ2l2ZW4gKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUFkZCA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbLTFdICsgMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCBjb25maWcgaXRlbSB2YWx1ZXMgYXJlIGdpdmVuIChjaGVjayByZXR1cm5lZCBjb25maWcgaXRlbSB2YWx1ZXMpCiAgICB7CiAgICAgICAgU291cmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1BZGQgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0gfSwKICAgICAgICAgICAgICAgIExhc3RWZXJzaW9uSUQgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgY29uZmlnIGl0ZW0gdmFsdWVzIGFyZSBnaXZlbiAoY2hlY2sgbnVtYmVyIGF0dHJpYnV0ZSkKICAgIHsKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUFkZCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1swXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUdldCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1swXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICBMYXN0VmVyc2lvbklEICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBjb25maWcgaXRlbSB3aXRoIHRoaXMgbnVtYmVyIGFscmVhZHkgZXhpc3RzIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1BZGQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbMF0sCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBWZXJzaW9uQWRkIGRvZXNuJ3QgY29udGFpbnMgYWxsIGRhdGEgKGNoZWNrIHJlcXVpcmVkIGF0dHJpYnV0ZXMpCiAgICB7CiAgICAgICAgU291cmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1BZGQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbMV0sCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25BZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUdldCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1sxXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICBMYXN0VmVyc2lvbklEICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgVmVyc2lvbkFkZCBkb2Vzbid0IGNvbnRhaW5zIGFsbCBkYXRhIChjaGVjayByZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzJdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uQWRkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAxIENvbmZpZ0l0ZW0gMiBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbMl0sCiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSB9LAogICAgICAgICAgICAgICAgTGFzdFZlcnNpb25JRCAgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIFZlcnNpb25BZGQgZG9lc24ndCBjb250YWlucyBhbGwgZGF0YSAoY2hlY2sgcmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUFkZCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1szXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmVyc2lvbkFkZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENsYXNzIDEgQ29uZmlnSXRlbSAzIFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUdldCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1szXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICBMYXN0VmVyc2lvbklEICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgVmVyc2lvbkFkZCBkb2Vzbid0IGNvbnRhaW5zIGFsbCBkYXRhIChjaGVjayByZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzRdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uQWRkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMSBDb25maWdJdGVtIDQgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNF0sCiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSB9LAogICAgICAgICAgICAgICAgTGFzdFZlcnNpb25JRCAgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIFZlcnNpb25BZGQgZG9lc24ndCBjb250YWlucyBhbGwgZGF0YSAoY2hlY2sgcmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUFkZCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1s1XSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25BZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAxIENvbmZpZ0l0ZW0gNSBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUdldCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s1XSwKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICBMYXN0VmVyc2lvbklEICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBpbnZhbGlkIGRlcGxveW1lbnQgc3RhdGUgaWQgaXMgZ2l2ZW4gKGNoZWNrIHJldHVybmVkIHZhbHVlcykKICAgIHsKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUFkZCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1s2XSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmVyc2lvbkFkZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENsYXNzIDEgQ29uZmlnSXRlbSA2IFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gOTk5OTk5OSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUdldCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s2XSwKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICBMYXN0VmVyc2lvbklEICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaW52YWxpZCBpbmNpZGVudCBzdGF0ZSBpZCBpcyBnaXZlbiAoY2hlY2sgcmV0dXJuZWQgdmFsdWVzKQogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzddLAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uQWRkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMSBDb25maWdJdGVtIDcgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+IDk5OTk5OTksCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbN10sCiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSB9LAogICAgICAgICAgICAgICAgTGFzdFZlcnNpb25JRCAgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChjaGVjayByZXR1cm5lZCB2YWx1ZXMpCiAgICB7CiAgICAgICAgU291cmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1BZGQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbOF0sCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25BZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAxIENvbmZpZ0l0ZW0gOCBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUdldCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s4XSwKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdvcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25HZXQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzhdLAogICAgICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSB9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMSBDb25maWdJdGVtIDggVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVUeXBlICAgID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgICAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZVR5cGUgICAgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgICAgID0+IFtdLAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoZ2VuZXJhbCBjaGVjayB3aXRoIHR3byB2ZXJzaW9ucykKICAgIHsKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUFkZCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1s5XSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmVyc2lvbkFkZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENsYXNzIDEgQ29uZmlnSXRlbSA5IFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMSBDb25maWdJdGVtIDkgVmVyc2lvbiAyJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtR2V0ID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzldLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0gfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25HZXQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzldLAogICAgICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSB9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMSBDb25maWdJdGVtIDkgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVUeXBlICAgID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgICAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZVR5cGUgICAgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgICAgID0+IFtdLAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbOV0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAxIENvbmZpZ0l0ZW0gOSBWZXJzaW9uIDInLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCAgICAgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICAgICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICAgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlVHlwZSAgICA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoY2hlY2sgdGhlIGNhbGN1bGF0aW9uIG9mIGRlcGxveW1lbnQgYW5kIGluY2lkZW50IHN0YXRlKQogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzEwXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmVyc2lvbkFkZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENsYXNzIDEgQ29uZmlnSXRlbSAxMCBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQbGFubmVkfSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENsYXNzIDEgQ29uZmlnSXRlbSAxMCBWZXJzaW9uIDInLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbMTBdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0gfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ01haW50ZW5hbmNlJywKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uR2V0ID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1sxMF0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAxIENvbmZpZ0l0ZW0gMTAgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQbGFubmVkfSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgID0+ICdQbGFubmVkJywKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVUeXBlICAgID0+ICdwcmVwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICA9PiAnTWFpbnRlbmFuY2UnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICAgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlVHlwZSAgICA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1sxMF0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAxIENvbmZpZ0l0ZW0gMTAgVmVyc2lvbiAyJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICA9PiAnTWFpbnRlbmFuY2UnLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+ICdNYWludGVuYW5jZScsCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgICAgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVUeXBlICAgID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYWRkIGNvbmZpZyBpdGVtIG9ubHkgZm9yIGxhdGVyIHNlYXJjaCB0ZXN0cwogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25BZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAzIENvbmZpZ0l0ZW0gMSBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMl0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFVzZXJJRHNbMl0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMl0gfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ2luY2lkZW50JywKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gJFVzZXJJRHNbMl0sCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+ICRVc2VySURzWzJdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uR2V0ID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAzIENvbmZpZ0l0ZW0gMSBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCAgICAgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzJdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICAgICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICAgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlVHlwZSAgICA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAkVXNlcklEc1syXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhZGQgY29uZmlnIGl0ZW0gb25seSBmb3IgbGF0ZXIgc2VhcmNoIHRlc3RzCiAgICB7CiAgICAgICAgU291cmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1BZGQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uQWRkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMyBDb25maWdJdGVtIDIgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzJdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAzIENvbmZpZ0l0ZW0gMiBWZXJzaW9uIDInLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMl0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtR2V0ID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdIH0sCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+ICdNYWludGVuYW5jZScsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ2luY2lkZW50JywKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25HZXQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMl0gfSwKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdVbml0VGVzdCAtIENsYXNzIDMgQ29uZmlnSXRlbSAyIFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEICAgICA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMl0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgICAgICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlVHlwZSAgICA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlSUQgICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7TWFpbnRlbmFuY2V9LAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ01haW50ZW5hbmNlJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgICAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZVR5cGUgICAgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ2luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgICAgID0+IFtdLAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSB9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMyBDb25maWdJdGVtIDIgVmVyc2lvbiAyJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1syXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICA9PiAnTWFpbnRlbmFuY2UnLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+ICdNYWludGVuYW5jZScsCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgICAgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVUeXBlICAgID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGFkZCBjb25maWcgaXRlbSBvbmx5IGZvciBsYXRlciBzZWFyY2ggdGVzdHMsIGluY2x1ZGluZyBYTUxEYXRhCiAgICB7CiAgICAgICAgU291cmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1BZGQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAkVXNlcklEc1syXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmVyc2lvbkFkZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENsYXNzIDMgQ29uZmlnSXRlbSAzIFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1syXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkVXNlcklEc1syXSwKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lcjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnZHVtbXlfY3VzdG9tZXJfZm9yX3VuaXRlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZTEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAxMC0wMi0xMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZTEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAxMC0wMi0xMiAwOToxNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMl0gfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ2luY2lkZW50JywKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gJFVzZXJJRHNbMl0sCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+ICRVc2VySURzWzJdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uR2V0ID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAzIENvbmZpZ0l0ZW0gMyBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCAgICAgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzJdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICAgICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICAgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlVHlwZSAgICA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgICAgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhZ0tleScgID0+ICdbMV0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZlcnNpb24nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDdXN0b21lcjEnID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50JyA9PiAnZHVtbXlfY3VzdG9tZXJfZm9yX3VuaXRlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUYWdLZXknICA9PiAnWzFde1wnVmVyc2lvblwnfVsxXXtcJ0N1c3RvbWVyMVwnfVsxXScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGF0ZTEnID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50JyA9PiAnMjAxMC0wMi0xMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhZ0tleScgID0+ICdbMV17XCdWZXJzaW9uXCd9WzFde1wnRGF0ZTFcJ31bMV0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RhdGVUaW1lMScgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQnID0+ICcyMDEwLTAyLTEyIDA5OjE0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFnS2V5JyAgPT4gJ1sxXXtcJ1ZlcnNpb25cJ31bMV17XCdEYXRlVGltZTFcJ31bMV0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhZ0tleScgPT4gJ1sxXXtcJ1ZlcnNpb25cJ31bMV0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgPT4gJFVzZXJJRHNbMl0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYWRkIGNvbmZpZyBpdGVtIG9ubHkgZm9yIGxhdGVyIHNlYXJjaCB0ZXN0cwogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzYwXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25BZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyA0IENvbmZpZ0l0ZW0gMSBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMl0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzNdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbM10gfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uR2V0ID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzNdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyA0IENvbmZpZ0l0ZW0gMSBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCAgICAgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzJdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICAgICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICAgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlVHlwZSAgICA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhZGRlZCB0byBjaGVjayBoaXN0b3J5IGZ1bmN0aW9ucwogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoY2hlY2sgdGhlIGNhbGN1bGF0aW9uIG9mIGRlcGxveW1lbnQgYW5kIGluY2lkZW50IHN0YXRlKQogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzcwXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmVyc2lvbkFkZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIEhpc3RvcnlUZXN0JywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UGxhbm5lZH0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBIaXN0b3J5VGVzdCBWZXJzaW9uIDInLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNzBdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0gfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ01haW50ZW5hbmNlJywKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uR2V0ID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s3MF0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBIaXN0b3J5VGVzdCcsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEICAgICA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgICAgICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UGxhbm5lZH0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICA9PiAnUGxhbm5lZCcsCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlVHlwZSAgICA9PiAncHJlcHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlSUQgICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7TWFpbnRlbmFuY2V9LAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ01haW50ZW5hbmNlJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgICAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZVR5cGUgICAgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ2luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgICAgID0+IFtdLAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNzBdLAogICAgICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSB9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gSGlzdG9yeVRlc3QgVmVyc2lvbiAyJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICA9PiAnTWFpbnRlbmFuY2UnLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+ICdNYWludGVuYW5jZScsCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgICAgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVUeXBlICAgID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBIaXN0b3J5R2V0ID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgID0+ICdDb25maWdJdGVtQ3JlYXRlJywKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZUlEID0+IDEsCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgID0+ICdWZXJzaW9uQ3JlYXRlJywKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZUlEID0+IDYsCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgID0+ICdEZWZpbml0aW9uVXBkYXRlJywKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZUlEID0+IDgsCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCAgICAgICA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgID0+ICdOYW1lVXBkYXRlJywKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZUlEID0+IDUsCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCAgICAgICA9PiAnVW5pdFRlc3QgLSBIaXN0b3J5VGVzdCUlJywKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgPT4gJ0luY2lkZW50U3RhdGVVcGRhdGUnLAogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlSUQgPT4gOSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ICAgICAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0gLiAnJSUnLAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICA9PiAnRGVwbG95bWVudFN0YXRlVXBkYXRlJywKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZUlEID0+IDEwLAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgICAgICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1BsYW5uZWR9IC4gJyUlJywKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgPT4gJ1ZlcnNpb25DcmVhdGUnLAogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlSUQgPT4gNiwKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgPT4gJ05hbWVVcGRhdGUnLAogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlSUQgPT4gNSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIEhpc3RvcnlUZXN0IFZlcnNpb24gMiUlVW5pdFRlc3QgLSBIaXN0b3J5VGVzdCcsCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICA9PiAnSW5jaWRlbnRTdGF0ZVVwZGF0ZScsCiAgICAgICAgICAgICAgICAgICAgSGlzdG9yeVR5cGVJRCA9PiA5LAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgICAgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSAuICclJScKICAgICAgICAgICAgICAgICAgICAgICAgLiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgPT4gJ0RlcGxveW1lbnRTdGF0ZVVwZGF0ZScsCiAgICAgICAgICAgICAgICAgICAgSGlzdG9yeVR5cGVJRCA9PiAxMCwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ICAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0gLiAnJSUnCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1BsYW5uZWR9LAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYWRkZWQgZm9yIEJ1ZzQxOTYKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGNoZWNrIHRoZSBjYWxjdWxhdGlvbiBvZiBkZXBsb3ltZW50IGFuZCBpbmNpZGVudCBzdGF0ZSkKICAgIHsKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUFkZCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1s3MV0sCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25BZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBCdWdmaXg0MTk2JywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UGxhbm5lZH0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBCdWdmaXg0MTk2IFYyJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7TWFpbnRlbmFuY2V9LAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQnVnZml4NDE5NiBWMicsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIEJ1Z2ZpeDQxOTYgVjInLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNzFdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0gfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ01haW50ZW5hbmNlJywKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uR2V0ID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s3MV0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBCdWdmaXg0MTk2JywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQbGFubmVkfSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgID0+ICdQbGFubmVkJywKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVUeXBlICAgID0+ICdwcmVwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICA9PiAnTWFpbnRlbmFuY2UnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICAgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlVHlwZSAgICA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s3MV0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBCdWdmaXg0MTk2IFYyJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICA9PiAnTWFpbnRlbmFuY2UnLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+ICdNYWludGVuYW5jZScsCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgICAgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVUeXBlICAgID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYWRkZWQgZm9yIEJ1ZyA0Mzc3IC0gQ0ktQQogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzcyXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmVyc2lvbkFkZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIEJ1Z2ZpeDQzNzcgLSBDSS1BJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNzJdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0gfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmVyc2lvbkdldCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNzJdLAogICAgICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSB9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQnVnZml4NDM3NyAtIENJLUEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCAgICAgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICAgICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICAgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlVHlwZSAgICA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGFkZGVkIGZvciBCdWcgNDM3NyAtIENJLUIKICAgIHsKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUFkZCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1s3M10sCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25BZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBCdWdmaXg0Mzc3IC0gQ0ktQicsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtR2V0ID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzczXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdvcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25HZXQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzczXSwKICAgICAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0gfSwKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdVbml0VGVzdCAtIEJ1Z2ZpeDQzNzcgLSBDSS1CJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVUeXBlICAgID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgICAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZVR5cGUgICAgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgICAgID0+IFtdLAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH0sCgpdOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHJ1biBnZW5lcmFsIGNvbmZpZyBpdGVtIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRUZXN0Q291bnQgPSAxOwpteSBAQ29uZmlnSXRlbUlEczsKClRFU1Q6CmZvciBteSAkVGVzdCAoIEB7JENvbmZpZ0l0ZW1UZXN0c30gKSB7CgogICAgIyBjaGVjayBTb3VyY2VEYXRhIGF0dHJpYnV0ZQogICAgaWYgKCAhJFRlc3QtPntTb3VyY2VEYXRhfSB8fCByZWYgJFRlc3QtPntTb3VyY2VEYXRhfSBuZSAnSEFTSCcgKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAwLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBObyBTb3VyY2VEYXRhIGZvdW5kIGZvciB0aGlzIHRlc3QuIiwKICAgICAgICApOwoKICAgICAgICBuZXh0IFRFU1Q7CiAgICB9CgogICAgIyBleHRyYWN0IHNvdXJjZSBkYXRhCiAgICBteSAkU291cmNlRGF0YSA9ICRUZXN0LT57U291cmNlRGF0YX07CgogICAgIyBhZGQgYSBuZXcgY29uZmlnIGl0ZW0KICAgIG15ICRDb25maWdJdGVtSUQ7CiAgICBpZiAoICRTb3VyY2VEYXRhLT57Q29uZmlnSXRlbUFkZH0gKSB7CgogICAgICAgICMgYWRkIHRoZSBuZXcgY29uZmlnIGl0ZW0KICAgICAgICAkQ29uZmlnSXRlbUlEID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+Q29uZmlnSXRlbUFkZCgKICAgICAgICAgICAgJXsgJFNvdXJjZURhdGEtPntDb25maWdJdGVtQWRkfSB9LAogICAgICAgICk7CgogICAgICAgIGlmICgkQ29uZmlnSXRlbUlEKSB7CiAgICAgICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1JRHMsICRDb25maWdJdGVtSUQ7CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgdGhlIGNvbmZpZyBpdGVtCiAgICBpZiAoICRUZXN0LT57UmVmZXJlbmNlRGF0YX0gJiYgJFRlc3QtPntSZWZlcmVuY2VEYXRhfS0+e0NvbmZpZ0l0ZW1HZXR9ICkgewoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ29uZmlnSXRlbUFkZCgpIC0gQWRkIG5ldyBjb25maWcgaXRlbS4gSW5zZXJ0IHN1Y2Nlc3MuIiwKICAgICAgICApOwoKICAgICAgICBuZXh0IFRFU1QgaWYgISRDb25maWdJdGVtSUQ7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDb25maWdJdGVtQWRkKCkgLSBBZGQgbmV3IGNvbmZpZyBpdGVtLiBSZXR1cm4gZmFsc2UuIiwKICAgICAgICApOwogICAgfQoKICAgICMgYWRkIGFsbCBkZWZpbmVkIHZlcnNpb25zCiAgICBteSBAVmVyc2lvbklEczsKICAgIG15ICVWZXJzaW9uSURzU2VlbjsKICAgIGlmICggJFNvdXJjZURhdGEtPntWZXJzaW9uQWRkfSApIHsKCiAgICAgICAgZm9yIG15ICRWZXJzaW9uICggQHsgJFNvdXJjZURhdGEtPntWZXJzaW9uQWRkfSB9ICkgewoKICAgICAgICAgICAgaWYgKCRDb25maWdJdGVtSUQpIHsKICAgICAgICAgICAgICAgICRWZXJzaW9uLT57Q29uZmlnSXRlbUlEfSA9ICRDb25maWdJdGVtSUQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIGEgbmV3IHZlcnNpb24KICAgICAgICAgICAgbXkgJFZlcnNpb25JRCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlZlcnNpb25BZGQoCiAgICAgICAgICAgICAgICAleyRWZXJzaW9ufSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkVmVyc2lvbklEKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBWZXJzaW9uSURzLCAkVmVyc2lvbklEIGlmICEkVmVyc2lvbklEc1NlZW57JFZlcnNpb25JRH0rKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIHRoZSBjb25maWcgaXRlbQogICAgbXkgJENvbmZpZ0l0ZW1EYXRhOwogICAgaWYgKCAkVGVzdC0+e1JlZmVyZW5jZURhdGF9ICYmICRUZXN0LT57UmVmZXJlbmNlRGF0YX0tPntDb25maWdJdGVtR2V0fSApIHsKCiAgICAgICAgIyBnZXQgdGhlIGNvbmZpZyBpdGVtIGRhdGEKICAgICAgICAkQ29uZmlnSXRlbURhdGEgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtR2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkQ29uZmlnSXRlbURhdGEgKSB7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDb25maWdJdGVtR2V0KCkgLSBnZXQgY29uZmlnIGl0ZW0gZGF0YS4iCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGFsbCBjb25maWcgaXRlbSBhdHRyaWJ1dGVzCiAgICAgICAgbXkgJENvdW50ZXIgPSAwOwogICAgICAgIGZvciBteSAkQXR0cmlidXRlICgga2V5cyAleyAkVGVzdC0+e1JlZmVyZW5jZURhdGF9LT57Q29uZmlnSXRlbUdldH0gfSApIHsKCiAgICAgICAgICAgICMgc2V0IGNvbnRlbnQgaWYgdmFsdWVzIGFyZSB1bmRlZgogICAgICAgICAgICBpZiAoICFkZWZpbmVkICRDb25maWdJdGVtRGF0YS0+eyRBdHRyaWJ1dGV9ICkgewogICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1EYXRhLT57JEF0dHJpYnV0ZX0gPSAnVU5ERUYtdW5pdHRlc3QnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggIWRlZmluZWQgJFRlc3QtPntSZWZlcmVuY2VEYXRhfS0+e0NvbmZpZ0l0ZW1HZXR9LT57JEF0dHJpYnV0ZX0gKSB7CiAgICAgICAgICAgICAgICAkVGVzdC0+e1JlZmVyZW5jZURhdGF9LT57Q29uZmlnSXRlbUdldH0tPnskQXR0cmlidXRlfSA9ICdVTkRFRi11bml0dGVzdCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgYXR0cmlidXRlcwogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbURhdGEtPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICRUZXN0LT57UmVmZXJlbmNlRGF0YX0tPntDb25maWdJdGVtR2V0fS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ29uZmlnSXRlbUdldCgpIC0gJEF0dHJpYnV0ZSIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIHRoZSB2ZXJzaW9ucwogICAgaWYgKAogICAgICAgICRUZXN0LT57UmVmZXJlbmNlRGF0YX0KICAgICAgICAmJiAkVGVzdC0+e1JlZmVyZW5jZURhdGF9LT57VmVyc2lvbkdldH0KICAgICAgICAmJiBAeyAkVGVzdC0+e1JlZmVyZW5jZURhdGF9LT57VmVyc2lvbkdldH0gfQogICAgICAgICkKICAgIHsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICBzY2FsYXIgQFZlcnNpb25JRHMsCiAgICAgICAgICAgIHNjYWxhciBAeyAkVGVzdC0+e1JlZmVyZW5jZURhdGF9LT57VmVyc2lvbkdldH0gfSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogVmVyc2lvbkFkZCgpIC0gY29ycmVjdCBudW1iZXIgb2YgdmVyc2lvbnMiLAogICAgICAgICk7CgogICAgICAgIG5leHQgVEVTVCBpZiAhJENvbmZpZ0l0ZW1JRDsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgIHNjYWxhciBAVmVyc2lvbklEcywKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogVmVyc2lvbkFkZCgpIC0gbm8gdmVyc2lvbnMgZXhpdHMiLAogICAgICAgICk7CiAgICB9CgogICAgbmV4dCBURVNUIGlmICEkVGVzdC0+e1JlZmVyZW5jZURhdGF9OwogICAgbmV4dCBURVNUIGlmICEkVGVzdC0+e1JlZmVyZW5jZURhdGF9LT57VmVyc2lvbkdldH07CgogICAgbXkgJENvdW50ZXIgICAgICAgICAgID0gMDsKICAgIG15ICRMYXN0VmVyc2lvbklETXVzdCA9ICdVTkRFRi11bml0dGVzdCc7CiAgICBWRVJTSU9OSUQ6CiAgICBmb3IgbXkgJFZlcnNpb25JRCAoQFZlcnNpb25JRHMpIHsKCiAgICAgICAgIyBnZXQgdGhpcyB2ZXJzaW9uCiAgICAgICAgbXkgJFZlcnNpb25EYXRhID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkdldCgKICAgICAgICAgICAgVmVyc2lvbklEICA9PiAkVmVyc2lvbklELAogICAgICAgICAgICBYTUxEYXRhR2V0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFZlcnNpb25EYXRhICkgewoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogVmVyc2lvbkdldCgpIC0gZ2V0IHZlcnNpb24gZGF0YS4iCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IFZFUlNJT05JRDsKICAgICAgICB9CgogICAgICAgICMgc2F2ZSBsYXN0IHZlcnNpb24gaWQKICAgICAgICAkTGFzdFZlcnNpb25JRE11c3QgPSAkVmVyc2lvbkRhdGEtPntWZXJzaW9uSUR9OwoKICAgICAgICAjIGNoZWNrIGFsbCB2ZXJzaW9uIGF0dHJpYnV0ZXMKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIGtleXMgJXsgJFRlc3QtPntSZWZlcmVuY2VEYXRhfS0+e1ZlcnNpb25HZXR9LT5bJENvdW50ZXJdIH0gKSB7CgogICAgICAgICAgICAjIGV4dHJhY3QgdGhlIG5lZWRlZCBhdHRyaWJ1dGVzCiAgICAgICAgICAgIG15ICRWZXJzaW9uQXR0cmlidXRlICAgPSAkVmVyc2lvbkRhdGEtPnskQXR0cmlidXRlfTsKICAgICAgICAgICAgbXkgJFJlZmVyZW5jZUF0dHJpYnV0ZSA9ICRUZXN0LT57UmVmZXJlbmNlRGF0YX0tPntWZXJzaW9uR2V0fS0+WyRDb3VudGVyXS0+eyRBdHRyaWJ1dGV9OwoKICAgICAgICAgICAgIyBzZXQgY29udGVudCBpZiB2YWx1ZXMgYXJlIHVuZGVmCiAgICAgICAgICAgIGlmICggIWRlZmluZWQgJFZlcnNpb25BdHRyaWJ1dGUgKSB7CiAgICAgICAgICAgICAgICAkVmVyc2lvbkF0dHJpYnV0ZSA9ICdVTkRFRi11bml0dGVzdCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCAkUmVmZXJlbmNlQXR0cmlidXRlICkgewogICAgICAgICAgICAgICAgJFJlZmVyZW5jZUF0dHJpYnV0ZSA9ICdVTkRFRi11bml0dGVzdCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJEF0dHJpYnV0ZSBlcSAnWE1MRGVmaW5pdGlvbicgfHwgJEF0dHJpYnV0ZSBlcSAnWE1MRGF0YScgKSB7CgogICAgICAgICAgICAgICAgIyB0dXJuIG9mZiBhbGwgcHJldHR5IHByaW50CiAgICAgICAgICAgICAgICAkRGF0YTo6RHVtcGVyOjpJbmRlbnQgPSAwOwoKICAgICAgICAgICAgICAgICMgZHVtcCB0aGUgYXR0cmlidXRlIGZyb20gVmVyc2lvbkdldCgpCiAgICAgICAgICAgICAgICAkVmVyc2lvbkF0dHJpYnV0ZSA9IERhdGE6OkR1bXBlcjo6RHVtcGVyKCRWZXJzaW9uQXR0cmlidXRlKTsKCiAgICAgICAgICAgICAgICAjIGR1bXAgdGhlIHJlZmVyZW5jZSBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgICRSZWZlcmVuY2VBdHRyaWJ1dGUgPSBEYXRhOjpEdW1wZXI6OkR1bXBlcigkUmVmZXJlbmNlQXR0cmlidXRlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGVjayBhdHRyaWJ1dGVzCiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRWZXJzaW9uQXR0cmlidXRlLAogICAgICAgICAgICAgICAgJFJlZmVyZW5jZUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFZlcnNpb25HZXQoKSAtICRBdHRyaWJ1dGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJENvdW50ZXIrKzsKICAgIH0KCiAgICAjIHByZXBhcmUgbGFzdCB2ZXJzaW9uIGlkCiAgICBteSAkTGFzdFZlcnNpb25JREFjdHVhbCA9ICdVTkRFRi11bml0dGVzdCc7CiAgICBpZiAoICRDb25maWdJdGVtRGF0YS0+e0xhc3RWZXJzaW9uSUR9ICkgewogICAgICAgICRMYXN0VmVyc2lvbklEQWN0dWFsID0gJENvbmZpZ0l0ZW1EYXRhLT57TGFzdFZlcnNpb25JRH07CiAgICB9CgogICAgIyBjaGVjayBsYXN0IHZlcnNpb24gaWQKICAgICRTZWxmLT5JcygKICAgICAgICAkQ29uZmlnSXRlbURhdGEtPntMYXN0VmVyc2lvbklEfSwKICAgICAgICAkTGFzdFZlcnNpb25JRE11c3QsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogbGFzdCB2ZXJzaW9uIGlkIGlkZW50aWNhbCIsCiAgICApOwoKICAgICMgY2hlY2sgaGlzdG9yeSBlbnRyaWVzCiAgICBpZiAoCiAgICAgICAgJFRlc3QtPntSZWZlcmVuY2VEYXRhfQogICAgICAgICYmICRUZXN0LT57UmVmZXJlbmNlRGF0YX0tPntIaXN0b3J5R2V0fQogICAgICAgICYmIEB7ICRUZXN0LT57UmVmZXJlbmNlRGF0YX0tPntIaXN0b3J5R2V0fSB9CiAgICAgICAgKQogICAgewogICAgICAgIG15ICRDb21wbGV0ZUhpc3RvcnkgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5IaXN0b3J5R2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIG5yIG9mIGhpc3RvcnkgZW50cmllcwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgc2NhbGFyIEB7ICRUZXN0LT57UmVmZXJlbmNlRGF0YX0tPntIaXN0b3J5R2V0fSB9LAogICAgICAgICAgICBzY2FsYXIgQHskQ29tcGxldGVIaXN0b3J5fSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogbnIgb2YgaGlzdG9yeSBlbnRyaWVzIiwKICAgICAgICApOwoKICAgICAgICBDSEVDS05SOiBmb3IgbXkgJENoZWNrTnIgKCAwIC4uICQjeyRDb21wbGV0ZUhpc3Rvcnl9ICkgewogICAgICAgICAgICBteSAkQ2hlY2sgPSAkVGVzdC0+e1JlZmVyZW5jZURhdGF9LT57SGlzdG9yeUdldH0tPlskQ2hlY2tOcl07CiAgICAgICAgICAgIG15ICREYXRhICA9ICRDb21wbGV0ZUhpc3RvcnktPlskQ2hlY2tOcl07CgogICAgICAgICAgICBuZXh0IENIRUNLTlIgdW5sZXNzICRDaGVjayAmJiAkRGF0YTsKCiAgICAgICAgICAgIGZvciBteSAkS2V5ICgga2V5cyAleyRDaGVja30gKSB7CgogICAgICAgICAgICAgICAgIyBjaGVjayBoaXN0b3J5IGRhdGEKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkQ2hlY2stPnskS2V5fSwKICAgICAgICAgICAgICAgICAgICAkRGF0YS0+eyRLZXl9LAogICAgICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6ICRLZXkiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQpjb250aW51ZSB7CiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyB0ZXN0IGZvciBidWdmaXggNDM3NwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgp7CgogICAgbXkgJENJMSA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1Mb29rdXAoCiAgICAgICAgQ29uZmlnSXRlbU51bWJlciA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNzJdLAogICAgKTsKCiAgICBteSAkQ0kyID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+Q29uZmlnSXRlbUxvb2t1cCgKICAgICAgICBDb25maWdJdGVtTnVtYmVyID0+ICRDb25maWdJdGVtTnVtYmVyc1s3M10sCiAgICApOwoKICAgICMgbGluayB0aGUgQ0kgd2l0aCBhIENJCiAgICBteSAkTGlua1Jlc3VsdCA9ICRTZWxmLT57TGlua09iamVjdH0tPkxpbmtBZGQoCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgU291cmNlS2V5ICAgID0+ICRDSTEsCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+ICRDSTIsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdEZXBlbmRzT24nLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICAjIHVwZGF0ZSBpbmNpZGVudCBzdGF0ZSBvZiBDSTEKICAgIG15ICRWZXJzaW9uSUQgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5WZXJzaW9uQWRkKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ0kxLAogICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBCdWdmaXg0Mzc3IC0gQ0ktQScsCiAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICAjIGNoZWNrIGlmIHZlcnNpb24gY291bGQgYmUgYWRkZWQKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRWZXJzaW9uSUQsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogVmVyc2lvbkFkZCgpIGZvciAkQ0kxIC0gU2V0IHRvICdJbmNpZGVudCciLAogICAgKTsKCiAgICAjIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZm9yIENJMQogICAgbXkgJFZlcnNpb25SZWYgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5WZXJzaW9uR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ0kxLAogICAgKTsKCiAgICAjIGNoZWNrIGlmIGluY2lkZW50IHN0YXRlIG9mIENJMSBpcyAnSW5jaWRlbnQnCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFZlcnNpb25SZWYtPntDdXJJbmNpU3RhdGV9LAogICAgICAgICdJbmNpZGVudCcsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ3VycmVudCBpbmNpZGVudCBzdGF0ZSBvZiBDSSAkQ0kxIiwKICAgICk7CgogICAgIyBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZvciBDSTIKICAgICRWZXJzaW9uUmVmID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENJMiwKICAgICk7CgogICAgIyBjaGVjayBpZiBpbmNpZGVudCBzdGF0ZSBvZiBDSTIgaXMgJ1dhcm5pbmcnCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFZlcnNpb25SZWYtPntDdXJJbmNpU3RhdGV9LAogICAgICAgICdXYXJuaW5nJywKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDdXJyZW50IGluY2lkZW50IHN0YXRlIG9mIENJICRDSTIiLAogICAgKTsKCiAgICAjIHVwZGF0ZSBpbmNpZGVudCBzdGF0ZSBvZiBDSTIgdG8gJ0luY2lkZW50JwogICAgJFZlcnNpb25JRCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlZlcnNpb25BZGQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDSTIsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIEJ1Z2ZpeDQzNzcgLSBDSS1CJywKICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgaWYgdmVyc2lvbiBjb3VsZCBiZSBhZGRlZAogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFZlcnNpb25JRCwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBWZXJzaW9uQWRkKCkgZm9yIENJICRDSTIgLSBTZXQgdG8gJ0luY2lkZW50JyIsCiAgICApOwoKICAgICMgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmb3IgQ0kyCiAgICAkVmVyc2lvblJlZiA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlZlcnNpb25HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDSTIsCiAgICApOwoKICAgICMgY2hlY2sgaWYgaW5jaWRlbnQgc3RhdGUgb2YgQ0kyIGlzICdJbmNpZGVudCcKICAgICRTZWxmLT5JcygKICAgICAgICAkVmVyc2lvblJlZi0+e0N1ckluY2lTdGF0ZX0sCiAgICAgICAgJ0luY2lkZW50JywKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDdXJyZW50IGluY2lkZW50IHN0YXRlIG9mIENJICRDSTIiLAogICAgKTsKCiAgICAjIHVwZGF0ZSBpbmNpZGVudCBzdGF0ZSBvZiBDSTEgdG8gJ09wZXJhdGlvbmFsJwogICAgJFZlcnNpb25JRCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlZlcnNpb25BZGQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDSTEsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIEJ1Z2ZpeDQzNzcgLSBDSS1BJywKICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgaWYgdmVyc2lvbiBjb3VsZCBiZSBhZGRlZAogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFZlcnNpb25JRCwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBWZXJzaW9uQWRkKCkgZm9yIENJICRDSTEgLSBTZXQgdG8gJ09wZXJhdGlvbmFsJyIsCiAgICApOwoKICAgICMgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmb3IgQ0kxCiAgICAkVmVyc2lvblJlZiA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlZlcnNpb25HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDSTEsCiAgICApOwoKICAgICMgY2hlY2sgaWYgaW5jaWRlbnQgc3RhdGUgb2YgQ0kxIGlzICdXYXJuaW5nJyAoYmVjYXVzZSBvZiBsaW5rZWQgQ0kyIGluIHN0YXRlICdpbmNpZGVudCcpCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFZlcnNpb25SZWYtPntDdXJJbmNpU3RhdGV9LAogICAgICAgICdXYXJuaW5nJywKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDdXJyZW50IGluY2lkZW50IHN0YXRlIG9mIENJICRDSTEiLAogICAgKTsKCiAgICAjIHVwZGF0ZSBpbmNpZGVudCBzdGF0ZSBvZiBDSTIgdG8gJ09wZXJhdGlvbmFsJwogICAgJFZlcnNpb25JRCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlZlcnNpb25BZGQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDSTIsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIEJ1Z2ZpeDQzNzcgLSBDSS1CJywKICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgaWYgdmVyc2lvbiBjb3VsZCBiZSBhZGRlZAogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFZlcnNpb25JRCwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBWZXJzaW9uQWRkKCkgZm9yIENJICRDSTIgLSBTZXQgdG8gJ09wZXJhdGlvbmFsJyIsCiAgICApOwoKICAgICMgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmb3IgQ0kxCiAgICAkVmVyc2lvblJlZiA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlZlcnNpb25HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDSTEsCiAgICApOwoKICAgICMgY2hlY2sgaWYgaW5jaWRlbnQgc3RhdGUgb2YgQ0kxIGlzICdPcGVyYXRpb25hbCcKICAgICRTZWxmLT5JcygKICAgICAgICAkVmVyc2lvblJlZi0+e0N1ckluY2lTdGF0ZX0sCiAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDdXJyZW50IGluY2lkZW50IHN0YXRlIG9mIENJICRDSTEiLAogICAgKTsKCiAgICAjIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZm9yIENJMgogICAgJFZlcnNpb25SZWYgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5WZXJzaW9uR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ0kyLAogICAgKTsKCiAgICAjIGNoZWNrIGlmIGluY2lkZW50IHN0YXRlIG9mIENJMiBpcyAnV2FybmluZycKICAgICRTZWxmLT5JcygKICAgICAgICAkVmVyc2lvblJlZi0+e0N1ckluY2lTdGF0ZX0sCiAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDdXJyZW50IGluY2lkZW50IHN0YXRlIG9mIENJICRDSTIiLAogICAgKTsKCiAgICAjIGluY3JlYXNlIHRoZSB0ZXN0IGNvdW50ZXIKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGRlZmluZSBnZW5lcmFsIGNvbmZpZyBpdGVtIHNlYXJjaCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSBAU2VhcmNoVGVzdHMgPSAoCgogICAgIyBzZWFyY2ggQUxMIGNvbmZpZyBpdGVtcyBpbiB0aGUgdHdvIHRlc3QgY2xhc3NlcwogICAgewogICAgICAgIEZ1bmN0aW9uID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgbnVtYmVyIHBhcmFtCiAgICB7CiAgICAgICAgRnVuY3Rpb24gPT4gWyAnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJywgJ0NvbmZpZ0l0ZW1TZWFyY2gnIF0sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIE51bWJlciA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBudW1iZXIgcGFyYW0gd2l0aCB3aWxkY2FyZHMKICAgIHsKICAgICAgICBGdW5jdGlvbiA9PiBbICdDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnLCAnQ29uZmlnSXRlbVNlYXJjaCcgXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgTnVtYmVyID0+ICcqJyAuICRDb25maWdJdGVtTnVtYmVyc1s1MF0gLiAnKicsCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIG51bWJlciBwYXJhbSB3aXRoIHdpbGRjYXJkcyBidXQgd2l0aCBkZWFjdGl2YXRlZCB3aWxkY2FyZCBmZWF0dXJlCiAgICB7CiAgICAgICAgRnVuY3Rpb24gPT4gWyAnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJywgJ0NvbmZpZ0l0ZW1TZWFyY2gnIF0sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIE51bWJlciAgICAgICAgID0+ICcqJyAuICRDb25maWdJdGVtTnVtYmVyc1s1MF0gLiAnKicsCiAgICAgICAgICAgIFVzaW5nV2lsZGNhcmRzID0+IDAsCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFtdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGRlcGxveW1lbnQgc3RhdGUgcGFyYW0gaW4gY29tYmluYXRpb24gb2YgdGhlIGNsYXNzIGlkCiAgICB7CiAgICAgICAgRnVuY3Rpb24gPT4gWyAnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJywgJ0NvbmZpZ0l0ZW1TZWFyY2gnIF0sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBEZXBsU3RhdGVJRHMgPT4gWyAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgZGVwbG95bWVudCBzdGF0ZSBwYXJhbSBpbiBjb21iaW5hdGlvbiBvZiB0aGUgY2xhc3MgaWQKICAgIHsKICAgICAgICBGdW5jdGlvbiA9PiBbICdDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnLCAnQ29uZmlnSXRlbVNlYXJjaCcgXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIERlcGxTdGF0ZUlEcyA9PiBbICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgZGVwbG95bWVudCBzdGF0ZSBwYXJhbSBpbiBjb21iaW5hdGlvbiBvZiB0aGUgY2xhc3MgaWQKICAgIHsKICAgICAgICBGdW5jdGlvbiA9PiBbICdDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnLCAnQ29uZmlnSXRlbVNlYXJjaCcgXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIERlcGxTdGF0ZUlEcyA9PiBbCiAgICAgICAgICAgICAgICAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICAkRGVwbFN0YXRlTGlzdFJldmVyc2V7TWFpbnRlbmFuY2V9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBpbmNpZGVudCBzdGF0ZSBwYXJhbSBpbiBjb21iaW5hdGlvbiBvZiB0aGUgY2xhc3MgaWQKICAgIHsKICAgICAgICBGdW5jdGlvbiA9PiBbICdDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnLCAnQ29uZmlnSXRlbVNlYXJjaCcgXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIEluY2lTdGF0ZUlEcyA9PiBbICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgaW5jaWRlbnQgc3RhdGUgcGFyYW0gaW4gY29tYmluYXRpb24gb2YgdGhlIGNsYXNzIGlkCiAgICB7CiAgICAgICAgRnVuY3Rpb24gPT4gWyAnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJywgJ0NvbmZpZ0l0ZW1TZWFyY2gnIF0sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBJbmNpU3RhdGVJRHMgPT4gWyAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9IF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGluY2lkZW50IHN0YXRlIHBhcmFtIGluIGNvbWJpbmF0aW9uIG9mIHRoZSBjbGFzcyBpZAogICAgewogICAgICAgIEZ1bmN0aW9uID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgSW5jaVN0YXRlSURzID0+IFsKICAgICAgICAgICAgICAgICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgICAgICAgICAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBvcmRlciBieSBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgT3JkZXJCeSA9PiBbJ0NyZWF0ZUJ5J10sCiAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWydVcCddLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBsaW1pdCBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgTGltaXQgPT4gMTAwLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBsaW1pdCBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgTGltaXQgPT4gMywKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgbGltaXQgcGFyYW0KICAgIHsKICAgICAgICBGdW5jdGlvbiA9PiBbICdDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnLCAnQ29uZmlnSXRlbVNlYXJjaCcgXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIExpbWl0ID0+IDIsCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGxpbWl0IHBhcmFtCiAgICB7CiAgICAgICAgRnVuY3Rpb24gPT4gWyAnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJywgJ0NvbmZpZ0l0ZW1TZWFyY2gnIF0sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBsaW1pdCBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgTGltaXQgPT4gMCwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgY3JlYXRlIGJ5IHBhcmFtCiAgICB7CiAgICAgICAgRnVuY3Rpb24gPT4gWyAnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJywgJ0NvbmZpZ0l0ZW1TZWFyY2gnIF0sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IFsgJFVzZXJJRHNbMl0gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgY3JlYXRlIGJ5IHBhcmFtIGluIGNvbWJpbmF0aW9uIG9mIHRoZSBjbGFzcyBpZAogICAgewogICAgICAgIEZ1bmN0aW9uID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gWyAkVXNlcklEc1sxXSwgICAgICAgICAgICAkVXNlcklEc1syXSBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBjaGFuZ2UgYnkgcGFyYW0KICAgIHsKICAgICAgICBGdW5jdGlvbiA9PiBbICdDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnLCAnQ29uZmlnSXRlbVNlYXJjaCcgXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gWyAkVXNlcklEc1syXSBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBjaGFuZ2UgYnkgcGFyYW0gaW4gY29tYmluYXRpb24gb2YgdGhlIGNsYXNzIGlkCiAgICB7CiAgICAgICAgRnVuY3Rpb24gPT4gWyAnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJywgJ0NvbmZpZ0l0ZW1TZWFyY2gnIF0sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiBbMV0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFtdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGNoYW5nZSBieSBwYXJhbSBpbiBjb21iaW5hdGlvbiBvZiB0aGUgY2xhc3MgaWQKICAgIHsKICAgICAgICBGdW5jdGlvbiA9PiBbICdDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnLCAnQ29uZmlnSXRlbVNlYXJjaCcgXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIENoYW5nZUJ5ID0+IFsgJFVzZXJJRHNbMV0gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgY2hhbmdlIGJ5IHBhcmFtIGluIGNvbWJpbmF0aW9uIG9mIHRoZSBjbGFzcyBpZAogICAgewogICAgICAgIEZ1bmN0aW9uID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gWyAkVXNlcklEc1syXSBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBzZWFyY2ggQUxMIGNvbmZpZyBpdGVtcyBpbiB0aGUgdHdvIHRlc3QgY2xhc3NlcyB1c2luZyB0aGUgdmVyc2lvbiBzZWFyY2gKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgbmFtZSBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydWZXJzaW9uU2VhcmNoJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIE5hbWUgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMyBDb25maWdJdGVtIDEgVmVyc2lvbiAxJywKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIG5hbWUgcGFyYW0KICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBOYW1lID0+ICdVbml0VGVzdCAtIENsYXNzIDMgQ29uZmlnSXRlbSAzIFZlcnNpb24gMScsCiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBuYW1lIHBhcmFtIHdpdGggYW4gd2lsZGNhcmQKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBOYW1lID0+ICdVbml0VGVzdCAtICogMScsCiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBuYW1lIHBhcmFtIHdpdGggYW4gd2lsZGNhcmQgYW5kIGEgcHJldmlvdXMgdmVyc2lvbiBzZWFyY2gKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gKiAxJywKICAgICAgICAgICAgQ2xhc3NJRHMgICAgICAgICAgICAgID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBQcmV2aW91c1ZlcnNpb25TZWFyY2ggPT4gMSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgbmFtZSBwYXJhbSB3aXRoIHdpbGRjYXJkcwogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydWZXJzaW9uU2VhcmNoJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIE5hbWUgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMyonLAogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgbmFtZSBwYXJhbSB3aXRoIHdpbGRjYXJkcyBidXQgd2l0aCBkZWFjdGl2YXRlZCB3aWxkY2FyZCBmZWF0dXJlCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ1ZlcnNpb25TZWFyY2gnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMyonLAogICAgICAgICAgICBDbGFzc0lEcyAgICAgICA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgVXNpbmdXaWxkY2FyZHMgPT4gMCwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gW10sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgbGFzdCB2ZXJzaW9uIHNlYXJjaAogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydWZXJzaW9uU2VhcmNoJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIE5hbWUgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMyBDb25maWdJdGVtIDIgVmVyc2lvbiAxJywKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFtdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIFByZXZpb3VzVmVyc2lvblNlYXJjaCBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydWZXJzaW9uU2VhcmNoJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAzIENvbmZpZ0l0ZW0gMiBWZXJzaW9uIDEnLAogICAgICAgICAgICBDbGFzc0lEcyAgICAgICAgICAgICAgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIFByZXZpb3VzVmVyc2lvblNlYXJjaCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBsaW1pdCBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydWZXJzaW9uU2VhcmNoJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxMDAsCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzYwXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGxpbWl0IHBhcmFtCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ1ZlcnNpb25TZWFyY2gnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIExpbWl0ID0+IDMsCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGxpbWl0IHBhcmFtCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ1ZlcnNpb25TZWFyY2gnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIExpbWl0ID0+IDIsCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGxpbWl0IHBhcmFtCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ1ZlcnNpb25TZWFyY2gnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGRlcGxveW1lbnQgc3RhdGUgcGFyYW0KICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgRGVwbFN0YXRlSURzID0+IFsKICAgICAgICAgICAgICAgICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzYwXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGRlcGxveW1lbnQgc3RhdGUgcGFyYW0KICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgRGVwbFN0YXRlSURzID0+IFsgJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259IF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzYwXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGRlcGxveW1lbnQgc3RhdGUgcGFyYW0KICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgRGVwbFN0YXRlSURzID0+IFsgJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBkZXBsb3ltZW50IHN0YXRlIHBhcmFtIHdpdGggYWN0aXZhdGVkIHByZXZpb3VzIHZlcnNpb24gc2VhcmNoCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ1ZlcnNpb25TZWFyY2gnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIERlcGxTdGF0ZUlEcyA9PiBbCiAgICAgICAgICAgICAgICAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICAkRGVwbFN0YXRlTGlzdFJldmVyc2V7TWFpbnRlbmFuY2V9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBQcmV2aW91c1ZlcnNpb25TZWFyY2ggPT4gMSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgZGVwbG95bWVudCBzdGF0ZSBwYXJhbSB3aXRoIGFjdGl2YXRlZCBwcmV2aW91cyB2ZXJzaW9uIHNlYXJjaAogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydWZXJzaW9uU2VhcmNoJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBEZXBsU3RhdGVJRHMgICAgICAgICAgPT4gWyAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0gXSwKICAgICAgICAgICAgUHJldmlvdXNWZXJzaW9uU2VhcmNoID0+IDEsCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzYwXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGRlcGxveW1lbnQgc3RhdGUgcGFyYW0gd2l0aCBhY3RpdmF0ZWQgcHJldmlvdXMgdmVyc2lvbiBzZWFyY2gKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgRGVwbFN0YXRlSURzICAgICAgICAgID0+IFsgJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSBdLAogICAgICAgICAgICBQcmV2aW91c1ZlcnNpb25TZWFyY2ggPT4gMSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgaW5jaWRlbnQgc3RhdGUgcGFyYW0KICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgSW5jaVN0YXRlSURzID0+IFsKICAgICAgICAgICAgICAgICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBpbmNpZGVudCBzdGF0ZSBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydWZXJzaW9uU2VhcmNoJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBJbmNpU3RhdGVJRHMgPT4gWyAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9IF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzYwXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGluY2lkZW50IHN0YXRlIHBhcmFtCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ1ZlcnNpb25TZWFyY2gnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIEluY2lTdGF0ZUlEcyA9PiBbICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgaW5jaWRlbnQgc3RhdGUgcGFyYW0gd2l0aCBhY3RpdmF0ZWQgcHJldmlvdXMgdmVyc2lvbiBzZWFyY2gKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgSW5jaVN0YXRlSURzID0+IFsKICAgICAgICAgICAgICAgICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBQcmV2aW91c1ZlcnNpb25TZWFyY2ggPT4gMSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgaW5jaWRlbnQgc3RhdGUgcGFyYW0gd2l0aCBhY3RpdmF0ZWQgcHJldmlvdXMgdmVyc2lvbiBzZWFyY2gKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgSW5jaVN0YXRlSURzICAgICAgICAgID0+IFsgJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSBdLAogICAgICAgICAgICBQcmV2aW91c1ZlcnNpb25TZWFyY2ggPT4gMSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgaW5jaWRlbnQgc3RhdGUgcGFyYW0gd2l0aCBhY3RpdmF0ZWQgcHJldmlvdXMgdmVyc2lvbiBzZWFyY2gKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgSW5jaVN0YXRlSURzICAgICAgICAgID0+IFsgJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSBdLAogICAgICAgICAgICBQcmV2aW91c1ZlcnNpb25TZWFyY2ggPT4gMSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoKSB3aXRoICdXaGF0JyAoQ3VzdG9tZXIxKQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIENoYW5nZUJ5ID0+IFsgJFVzZXJJRHNbMl0gXSwKICAgICAgICAgICAgV2hhdCAgICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJbMV17J1ZlcnNpb24nfVsxXXsnQ3VzdG9tZXIxJ31bMV17J0NvbnRlbnQnfSIgPT4gJ2R1bW15X2N1c3RvbWVyX2Zvcl91bml0ZXN0JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCgogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggJ1doYXQnIChEYXRlMSkKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFxAQ29uZmlnSXRlbUNsYXNzSURzLAogICAgICAgICAgICBXaGF0ICAgICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeydEYXRlMSd9WzFdeydDb250ZW50J30iID0+ICcyMDEwLTAyLTEyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCgogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggJ1doYXQnIChEYXRlVGltZTEpCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBcQENvbmZpZ0l0ZW1DbGFzc0lEcywKICAgICAgICAgICAgV2hhdCAgICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJbMV17J1ZlcnNpb24nfVsxXXsnRGF0ZVRpbWUxJ31bMV17J0NvbnRlbnQnfSIgPT4gJzIwMTAtMDItMTIgMDk6MTQnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKCkgd2l0aCAnV2hhdCcgKEN1c3RvbWVyMSwgRGF0ZTEsIERhdGVUaW1lMSkKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFxAQ29uZmlnSXRlbUNsYXNzSURzLAogICAgICAgICAgICBXaGF0ICAgICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeydDdXN0b21lcjEnfVsxXXsnQ29udGVudCd9IiA9PiAnZHVtbXlfY3VzdG9tZXJfZm9yX3VuaXRlc3QnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J0RhdGUxJ31bMV17J0NvbnRlbnQnfSIgPT4gJzIwMTAtMDItMTInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J0RhdGVUaW1lMSd9WzFdeydDb250ZW50J30iID0+ICcyMDEwLTAyLTEyIDA5OjE0JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCgogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggJ1doYXQnIChEYXRlMSwgPCwgZmFsc2UpCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBcQENvbmZpZ0l0ZW1DbGFzc0lEcywKICAgICAgICAgICAgV2hhdCAgICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJbMV17J1ZlcnNpb24nfVsxXXsnRGF0ZTEnfVsxXXsnQ29udGVudCd9IgogICAgICAgICAgICAgICAgICAgICAgICA9PiB7ICc8JyA9PiAnMjAxMC0wMi0xMicsIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCgogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggJ1doYXQnIChEYXRlMSwgPCwgdHJ1ZSkKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFxAQ29uZmlnSXRlbUNsYXNzSURzLAogICAgICAgICAgICBXaGF0ICAgICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeydEYXRlMSd9WzFdeydDb250ZW50J30iCiAgICAgICAgICAgICAgICAgICAgICAgID0+IHsgJzwnID0+ICcyMDEwLTAyLTEzJywgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKCkgd2l0aCAnV2hhdCcgKERhdGUxLCA8PSwgZmFsc2UpCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBcQENvbmZpZ0l0ZW1DbGFzc0lEcywKICAgICAgICAgICAgV2hhdCAgICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJbMV17J1ZlcnNpb24nfVsxXXsnRGF0ZTEnfVsxXXsnQ29udGVudCd9IgogICAgICAgICAgICAgICAgICAgICAgICA9PiB7ICc8PScgPT4gJzIwMTAtMDItMTEnLCB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAoKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoKSB3aXRoICdXaGF0JyAoRGF0ZTEsIDw9LCB0cnVlKQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gXEBDb25maWdJdGVtQ2xhc3NJRHMsCiAgICAgICAgICAgIFdoYXQgICAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J0RhdGUxJ31bMV17J0NvbnRlbnQnfSIKICAgICAgICAgICAgICAgICAgICAgICAgPT4geyAnPD0nID0+ICcyMDEwLTAyLTEyJywgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKCkgd2l0aCAnV2hhdCcgKERhdGUxLCA8PSwgdHJ1ZSkKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFxAQ29uZmlnSXRlbUNsYXNzSURzLAogICAgICAgICAgICBXaGF0ICAgICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeydEYXRlMSd9WzFdeydDb250ZW50J30iCiAgICAgICAgICAgICAgICAgICAgICAgID0+IHsgJzw9JyA9PiAnMjAxMC0wMi0xMycsIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCgogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggJ1doYXQnIChEYXRlMSwgPSwgZmFsc2UpCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBcQENvbmZpZ0l0ZW1DbGFzc0lEcywKICAgICAgICAgICAgV2hhdCAgICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJbMV17J1ZlcnNpb24nfVsxXXsnRGF0ZTEnfVsxXXsnQ29udGVudCd9IgogICAgICAgICAgICAgICAgICAgICAgICA9PiB7ICc9JyA9PiAnMjAxMC0wMi0xMScsIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKCkgd2l0aCAnV2hhdCcgKERhdGUxLCA9LCB0cnVlKQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gXEBDb25maWdJdGVtQ2xhc3NJRHMsCiAgICAgICAgICAgIFdoYXQgICAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J0RhdGUxJ31bMV17J0NvbnRlbnQnfSIKICAgICAgICAgICAgICAgICAgICAgICAgPT4geyAnPScgPT4gJzIwMTAtMDItMTInLCB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggJ1doYXQnIChEYXRlMSwgIT0sIGZhbHNlKQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gXEBDb25maWdJdGVtQ2xhc3NJRHMsCiAgICAgICAgICAgIFdoYXQgICAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J0RhdGUxJ31bMV17J0NvbnRlbnQnfSIKICAgICAgICAgICAgICAgICAgICAgICAgPT4geyAnIT0nID0+ICcyMDEwLTAyLTEyJywgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoKSB3aXRoICdXaGF0JyAoRGF0ZTEsICE9LCB0cnVlKQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gXEBDb25maWdJdGVtQ2xhc3NJRHMsCiAgICAgICAgICAgIFdoYXQgICAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J0RhdGUxJ31bMV17J0NvbnRlbnQnfSIKICAgICAgICAgICAgICAgICAgICAgICAgPT4geyAnIT0nID0+ICcyMDEwLTAyLTEzJywgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoKSB3aXRoICdXaGF0JyAoRGF0ZTEsID49LCBmYWxzZSkKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFxAQ29uZmlnSXRlbUNsYXNzSURzLAogICAgICAgICAgICBXaGF0ICAgICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeydEYXRlMSd9WzFdeydDb250ZW50J30iCiAgICAgICAgICAgICAgICAgICAgICAgID0+IHsgJz49JyA9PiAnMjAxMC0wMi0xMycsIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKCkgd2l0aCAnV2hhdCcgKERhdGUxLCA+PSwgdHJ1ZSkKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFxAQ29uZmlnSXRlbUNsYXNzSURzLAogICAgICAgICAgICBXaGF0ICAgICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeydEYXRlMSd9WzFdeydDb250ZW50J30iCiAgICAgICAgICAgICAgICAgICAgICAgID0+IHsgJz49JyA9PiAnMjAxMC0wMi0xMicsIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCgogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggJ1doYXQnIChEYXRlMSwgPj0sIHRydWUpCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBcQENvbmZpZ0l0ZW1DbGFzc0lEcywKICAgICAgICAgICAgV2hhdCAgICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJbMV17J1ZlcnNpb24nfVsxXXsnRGF0ZTEnfVsxXXsnQ29udGVudCd9IgogICAgICAgICAgICAgICAgICAgICAgICA9PiB7ICc+PScgPT4gJzIwMTAtMDItMTEnLCB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggJ1doYXQnIChEYXRlMSwgPiwgZmFsc2UpCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBcQENvbmZpZ0l0ZW1DbGFzc0lEcywKICAgICAgICAgICAgV2hhdCAgICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJbMV17J1ZlcnNpb24nfVsxXXsnRGF0ZTEnfVsxXXsnQ29udGVudCd9IgogICAgICAgICAgICAgICAgICAgICAgICA9PiB7ICc+JyA9PiAnMjAxMC0wMi0xMicsIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKCkgd2l0aCAnV2hhdCcgKERhdGUxLCA+LCB0cnVlKQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gXEBDb25maWdJdGVtQ2xhc3NJRHMsCiAgICAgICAgICAgIFdoYXQgICAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J0RhdGUxJ31bMV17J0NvbnRlbnQnfSIKICAgICAgICAgICAgICAgICAgICAgICAgPT4geyAnPicgPT4gJzIwMTAtMDItMTEnLCB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggJ1doYXQnIChEYXRlMSwgLWJldHdlZW4sIGZhbHNlKQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gXEBDb25maWdJdGVtQ2xhc3NJRHMsCiAgICAgICAgICAgIFdoYXQgICAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J0RhdGUxJ31bMV17J0NvbnRlbnQnfSIKICAgICAgICAgICAgICAgICAgICAgICAgPT4geyAnLWJldHdlZW4nID0+IFsgJzIwMTAtMDEtMDEnLCAnMjAxMC0wMS0zMScgXSB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggJ1doYXQnIChEYXRlMSwgLWJldHdlZW4sIHRydWUpCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBcQENvbmZpZ0l0ZW1DbGFzc0lEcywKICAgICAgICAgICAgV2hhdCAgICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJbMV17J1ZlcnNpb24nfVsxXXsnRGF0ZTEnfVsxXXsnQ29udGVudCd9IgogICAgICAgICAgICAgICAgICAgICAgICA9PiB7ICctYmV0d2VlbicgPT4gWyAnMjAxMC0wMi0wMScsICcyMDEwLTAyLTMxJyBdIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKCkgd2l0aCBOYW1lID0gMCB3aXRob3V0IGFueSB3aWxkY2FyZHMKICAgICMgc2hvdWxkIHJldHVybiBubyByZXN1bHRzCiAgICAjIEJ1Z2ZpeCMgODg4MQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gXEBDb25maWdJdGVtQ2xhc3NJRHMsCiAgICAgICAgICAgIE5hbWUgICAgID0+IDAsCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKCkgd2l0aCBOdW1iZXIgPSAwIHdpdGhvdXQgYW55IHdpbGRjYXJkcwogICAgIyBzaG91bGQgcmV0dXJuIG5vIHJlc3VsdHMKICAgICMgQnVnZml4IyA4ODgxCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBcQENvbmZpZ0l0ZW1DbGFzc0lEcywKICAgICAgICAgICAgTnVtYmVyICAgPT4gMCwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgIF0sCiAgICB9LAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHJ1biBnZW5lcmFsIGNvbmZpZyBpdGVtIHNlYXJjaCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojICRTZWFyY2hUZXN0Q291bnQgcHJvdmlkZXMgZ3JvdXBpbmcgb2YgdGVzdCBjYXNlcwpteSAkU2VhcmNoVGVzdENvdW50ID0gMTsKClRFU1Q6CmZvciBteSAkVGVzdCAoQFNlYXJjaFRlc3RzKSB7CgogICAgIyBjaGVjayBTZWFyY2hEYXRhIGF0dHJpYnV0ZQogICAgaWYgKCAhJFRlc3QtPntTZWFyY2hEYXRhfSB8fCByZWYgJFRlc3QtPntTZWFyY2hEYXRhfSBuZSAnSEFTSCcgKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAwLAogICAgICAgICAgICAiU2VhcmNoVGVzdCAkU2VhcmNoVGVzdENvdW50OiBObyBTZWFyY2hEYXRhIGZvdW5kIGZvciB0aGlzIHRlc3QuIiwKICAgICAgICApOwoKICAgICAgICBuZXh0IFRFU1Q7CiAgICB9CgogICAgaWYgKCAhJFRlc3QtPntGdW5jdGlvbn0gfHwgcmVmICRUZXN0LT57RnVuY3Rpb259IG5lICdBUlJBWScgfHwgIUB7ICRUZXN0LT57RnVuY3Rpb259IH0gKSB7CiAgICAgICAgJFRlc3QtPntGdW5jdGlvbn0gPSBbJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCddOwogICAgfQoKICAgIGZvciBteSAkRnVuY3Rpb24gKCBAeyAkVGVzdC0+e0Z1bmN0aW9ufSB9ICkgewoKICAgICAgICAjIHN0YXJ0IHNlYXJjaAogICAgICAgIG15ICRDb25maWdJdGVtTGlzdCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPiRGdW5jdGlvbigKICAgICAgICAgICAgJXsgJFRlc3QtPntTZWFyY2hEYXRhfSB9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgdGhlIGNvbmZpZyBpdGVtIGxpc3QKICAgICAgICBpZiAoICRUZXN0LT57UmVmZXJlbmNlRGF0YX0gKSB7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRDb25maWdJdGVtTGlzdCAmJiByZWYgJENvbmZpZ0l0ZW1MaXN0IGVxICdBUlJBWScsCiAgICAgICAgICAgICAgICAiU2VhcmNoVGVzdCAkU2VhcmNoVGVzdENvdW50OiAkRnVuY3Rpb24oKSAtIExpc3QgaXMgYW4gYXJyYXkgcmVmZXJlbmNlLiIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IFRFU1QgaWYgISRDb25maWdJdGVtTGlzdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbUxpc3QsCiAgICAgICAgICAgICAgICAiU2VhcmNoVGVzdCAkU2VhcmNoVGVzdENvdW50OiAkRnVuY3Rpb24oKSAtIFJldHVybiBmYWxzZS4iLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBURVNUIGlmICEkQ29uZmlnSXRlbUxpc3Q7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIG51bWJlciBvZiBmb3VuZCBjb25maWcgaXRlbXMKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgIHNjYWxhciBAeyRDb25maWdJdGVtTGlzdH0sCiAgICAgICAgICAgIHNjYWxhciBAeyAkVGVzdC0+e1JlZmVyZW5jZURhdGF9IH0sCiAgICAgICAgICAgICJTZWFyY2hUZXN0ICRTZWFyY2hUZXN0Q291bnQ6ICRGdW5jdGlvbigpIC0gY29ycmVjdCBudW1iZXIgb2YgZm91bmQgY29uZmlnIGl0ZW1zIiwKICAgICAgICApOwoKICAgICAgICBteSBAUmVmZXJlbmNlTGlzdDsKICAgICAgICBmb3IgbXkgJE51bWJlciAoIEB7ICRUZXN0LT57UmVmZXJlbmNlRGF0YX0gfSApIHsKCiAgICAgICAgICAgICMgZmluZCBpZCBvZiB0aGUgaXRlbQogICAgICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkIEZST00gY29uZmlnaXRlbSBXSEVSRSAiCiAgICAgICAgICAgICAgICAgICAgLiAiY29uZmlnaXRlbV9udW1iZXIgPSAnJE51bWJlcicgIgogICAgICAgICAgICAgICAgICAgIC4gIk9SREVSIEJZIGlkIERFU0MiLAogICAgICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgICAgICBteSAkQ29uZmlnSXRlbUlEOwogICAgICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1JRCA9ICRSb3dbMF07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1c2ggQFJlZmVyZW5jZUxpc3QsICRDb25maWdJdGVtSUQ7CiAgICAgICAgfQoKICAgICAgICAjIHR1cm4gb2ZmIGFsbCBwcmV0dHkgcHJpbnQKICAgICAgICAkRGF0YTo6RHVtcGVyOjpJbmRlbnQgPSAwOwoKICAgICAgICAjIGR1bXAgdGhlIGxpc3QgZnJvbSBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoKQogICAgICAgIG15ICRDb25maWdJdGVtU3RyaW5nID0gRGF0YTo6RHVtcGVyOjpEdW1wZXIoJENvbmZpZ0l0ZW1MaXN0KTsKCiAgICAgICAgIyBkdW1wIHRoZSByZWZlcmVuY2Ugc3RyaW5nCiAgICAgICAgbXkgJFJlZmVyZW5jZVN0cmluZyA9IERhdGE6OkR1bXBlcjo6RHVtcGVyKCBcQFJlZmVyZW5jZUxpc3QgKTsKCiAgICAgICAgIyBjaGVjayBhcnJheXMKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRDb25maWdJdGVtU3RyaW5nLAogICAgICAgICAgICAkUmVmZXJlbmNlU3RyaW5nLAogICAgICAgICAgICAiU2VhcmNoVGVzdCAkU2VhcmNoVGVzdENvdW50OiAkRnVuY3Rpb24oKSAtIExpc3QiLAogICAgICAgICk7CiAgICB9Cn0KY29udGludWUgewogICAgJFNlYXJjaFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgdGVzdGluZyBzdXBwb3J0IGZvciBhdHRhY2htZW50cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkQXR0YWNobWVudFRlc3RDb25maWdJdGVtSUQgPSAkQ29uZmlnSXRlbUlEc1swXTsKCiMgdmVyaWZ5IHRoYXQgaW5pdGlhbHkgbm8gYXR0YWNobWVudCBleGlzdHMKbXkgQEF0dGFjaG1lbnRMaXN0ID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+Q29uZmlnSXRlbUF0dGFjaG1lbnRMaXN0KAogICAgQ29uZmlnSXRlbUlEID0+ICRBdHRhY2htZW50VGVzdENvbmZpZ0l0ZW1JRCwKKTsKCiRTZWxmLT5JcygKICAgIHNjYWxhciBAQXR0YWNobWVudExpc3QsCiAgICAwLAogICAgJ05vIGF0dGFjaG1lbnRzIGluaXRpYWxseScsCik7CgpteSBAVGVzdEZpbGVMaXN0ID0gKAogICAgewogICAgICAgIEZpbGVuYW1lICAgID0+ICdmaXJzdCBhdHRhY2htZW50JywKICAgICAgICBDb250ZW50ICAgICA9PiAnRmlyc3QgYXR0YWNobWVudCBmcm9tIElUU01Db25maWdJdGVtLnQnLAogICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgIH0sCiAgICB7CiAgICAgICAgRmlsZW5hbWUgICAgPT4gJ3NlY29uZCBhdHRhY2htZW50JywKICAgICAgICBDb250ZW50ICAgICA9PiAnU2Vjb25kIGF0dGFjaG1lbnQgZnJvbSBJVFNNQ29uZmlnSXRlbS50JywKICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICB9LAopOwoKbXkgJEZpbGVDb3VudDsKZm9yIG15ICRUZXN0RmlsZSAoQFRlc3RGaWxlTGlzdCkgewoKICAgICRGaWxlQ291bnQrKzsKCiAgICBteSAkQWRkT2sgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtQXR0YWNobWVudEFkZCgKICAgICAgICAleyRUZXN0RmlsZX0sCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRBdHRhY2htZW50VGVzdENvbmZpZ0l0ZW1JRCwKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQWRkT2ssCiAgICAgICAgIkF0dGFjaG1lbnQgJEZpbGVDb3VudDogYXR0YWNobWVudCBhZGRlZCIsCiAgICApOwoKICAgIG15IEBBdHRhY2htZW50TGlzdCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1BdHRhY2htZW50TGlzdCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJEF0dGFjaG1lbnRUZXN0Q29uZmlnSXRlbUlELAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKICAgICRTZWxmLT5JcygKICAgICAgICBzY2FsYXIgQEF0dGFjaG1lbnRMaXN0LAogICAgICAgICRGaWxlQ291bnQsCiAgICAgICAgIkF0dGFjaG1lbnQgJEZpbGVDb3VudDogbnVtYmVyIG9mIGF0dGFjaG1lbnRzIGFmdGVyIGFkZGluZyIsCiAgICApOwoKICAgICMgY2hlY2sgd2hldGhlciB0aGUgbGFzdCBhZGRlZCBhdHRhY2htZW50IGlzIGluIHRoZSBsaXN0CiAgICBteSAlQXR0YWNobWVudExvb2t1cCA9IG1hcCB7ICRfID0+IDEgfSBAQXR0YWNobWVudExpc3Q7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQXR0YWNobWVudExvb2t1cHsgJFRlc3RGaWxlLT57RmlsZW5hbWV9IH0sCiAgICAgICAgIkF0dGFjaG1lbnQgJEZpbGVDb3VudDogZmlsZW5hbWUgZnJvbSBDb25maWdJdGVtQXR0YWNobWVudExpc3QoKSIsCiAgICApOwoKICAgICMgZ2V0IHRoZSBhdHRhY2htZW50CiAgICBteSAkQXR0YWNobWVudCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1BdHRhY2htZW50R2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQXR0YWNobWVudFRlc3RDb25maWdJdGVtSUQsCiAgICAgICAgRmlsZW5hbWUgICAgID0+ICRUZXN0RmlsZS0+e0ZpbGVuYW1lfSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQXR0YWNobWVudCwKICAgICAgICAiQXR0YWNobWVudCAkRmlsZUNvdW50OiBDb25maWdJdGVtQXR0YWNobWVudEdldCgpIHJldHVybmVkIHRydWUiLAogICAgKTsKCiAgICAjIGNoZWNrIGF0dGFjaG1lbnQgZmlsZSBhdHRyaWJ1dGVzCiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoRmlsZW5hbWUgQ29udGVudCBDb250ZW50VHlwZSkpIHsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRBdHRhY2htZW50LT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICRUZXN0RmlsZS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAiQXR0YWNobWVudCAkRmlsZUNvdW50OiAkQXR0cmlidXRlIGZyb20gQ29uZmlnSXRlbUF0dGFjaG1lbnRHZXQiLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBleGlzdGVuY2Ugb2YgYXR0YWNobWVudAogICAgbXkgJEF0dGFjaG1lbnRFeGlzdHMgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtQXR0YWNobWVudEV4aXN0cygKICAgICAgICBDb25maWdJdGVtSUQgPT4gJEF0dGFjaG1lbnRUZXN0Q29uZmlnSXRlbUlELAogICAgICAgIEZpbGVuYW1lICAgICA9PiAkVGVzdEZpbGUtPntGaWxlbmFtZX0sCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEF0dGFjaG1lbnRFeGlzdHMsCiAgICAgICAgIkF0dGFjaG1lbnQgJEZpbGVDb3VudDogYXR0YWNobWVudCBleGlzdHMiLAogICAgKTsKCn0KCiMgbm93IGRlbGV0ZSB0aGUgYXR0YWNobWVudHMKJEZpbGVDb3VudCA9IDA7Cm15ICRNYXhUZXN0RmlsZXMgPSBzY2FsYXIgQFRlc3RGaWxlTGlzdDsKZm9yIG15ICRUZXN0RmlsZSAoQFRlc3RGaWxlTGlzdCkgewoKICAgICRGaWxlQ291bnQrKzsKCiAgICBteSAkRGVsZXRlT2sgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtQXR0YWNobWVudERlbGV0ZSgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJEF0dGFjaG1lbnRUZXN0Q29uZmlnSXRlbUlELAogICAgICAgIEZpbGVuYW1lICAgICA9PiAkVGVzdEZpbGUtPntGaWxlbmFtZX0sCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJERlbGV0ZU9rLAogICAgICAgICJBdHRhY2htZW50ICRGaWxlQ291bnQ6IGF0dGFjaG1lbnQgZGVsZXRlZCIsCiAgICApOwoKICAgIG15IEBBdHRhY2htZW50TGlzdCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1BdHRhY2htZW50TGlzdCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJEF0dGFjaG1lbnRUZXN0Q29uZmlnSXRlbUlELAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgc2NhbGFyIEBBdHRhY2htZW50TGlzdCwKICAgICAgICAkTWF4VGVzdEZpbGVzIC0gJEZpbGVDb3VudCwKICAgICAgICAiQXR0YWNobWVudCAkRmlsZUNvdW50OiBudW1iZXIgb2YgYXR0YWNobWVudHMgYWZ0ZXIgZGVsZXRpb24iLAogICAgKTsKCiAgICBteSAkQXR0YWNobWVudEV4aXN0cyA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1BdHRhY2htZW50RXhpc3RzKAogICAgICAgIEZpbGVuYW1lICAgICA9PiAkVGVzdEZpbGUtPntGaWxlbmFtZX0sCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRBdHRhY2htZW50VGVzdENvbmZpZ0l0ZW1JRCwKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgJEF0dGFjaG1lbnRFeGlzdHMsCiAgICAgICAgIkF0dGFjaG1lbnQgJEZpbGVDb3VudDogYXR0YWNobWVudCBpcyBnb25lIiwKICAgICk7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBjbGVhbiB0aGUgc3lzdGVtCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IGN1cnJlbnQgY2xhc3MgbGlzdAokQ2xhc3NMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKKTsKCiMgc2V0IHVuaXR0ZXN0IGNsYXNzZXMgaW52YWxpZApJVEVNSUQ6CmZvciBteSAkSXRlbUlEICgga2V5cyAleyRDbGFzc0xpc3R9ICkgewoKICAgIG5leHQgSVRFTUlEIGlmICRDbGFzc0xpc3QtPnskSXRlbUlEfSAhfiBteyBcQSBVbml0VGVzdCB9eG1zOwoKICAgICMgdXBkYXRlIGl0ZW0KICAgICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtVXBkYXRlKAogICAgICAgIEl0ZW1JRCAgPT4gJEl0ZW1JRCwKICAgICAgICBOYW1lICAgID0+ICRDbGFzc0xpc3QtPnskSXRlbUlEfSwKICAgICAgICBWYWxpZElEID0+IDIsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKfQoKIyBkZWxldGUgdGhlIHRlc3QgY29uZmlnIGl0ZW1zCm15ICREZWxldGVUZXN0Q291bnQgPSAxOwpmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoQENvbmZpZ0l0ZW1JRHMpIHsKICAgIG15ICREZWxldGVPayA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1EZWxldGUoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJERlbGV0ZU9rLAogICAgICAgICJEZWxldGVUZXN0ICREZWxldGVUZXN0Q291bnQgLSBDb25maWdJdGVtRGVsZXRlKCkgKENvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbUlEKSIKICAgICk7CgogICAgIyBkb3VibGUgY2hlY2sgaWYgY29uZmlnIGl0ZW0gaXMgcmVhbGx5IGRlbGV0ZWQKICAgIG15ICRDb25maWdJdGVtRGF0YSA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgQ2FjaGUgICAgICAgID0+IDAsCiAgICApOwogICAgJFNlbGYtPkZhbHNlKAogICAgICAgICRDb25maWdJdGVtRGF0YS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgIkRlbGV0ZVRlc3QgJERlbGV0ZVRlc3RDb3VudCAtIGRvdWJsZSBjaGVjayAoQ29uZmlnSXRlbUlEPSRDb25maWdJdGVtSUQpIiwKICAgICk7Cn0KY29udGludWUgewogICAgJERlbGV0ZVRlc3RDb3VudCsrOwp9CgoxOwo=
IyAtLQojIElUU01Db25maWdJdGVtVW5pcXVlQ0lOYW1lLnQgLSB0ZXN0cyB0aGUgZnVuY3Rpb25hbGl0eSBmb3IgdW5pcXVlIENJIG5hbWVzCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIHF3KCRTZWxmKTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c7CnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW07CgokU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZy0+bmV3KCAleyRTZWxmfSApOwokU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9ICAgICA9IEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbS0+bmV3KCAleyRTZWxmfSApOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIG1ha2UgcHJlcGFyYXRpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgYWRkIHRoZSB0ZXN0IGNsYXNzZXMKbXkgQENvbmZpZ0l0ZW1DbGFzc0lEczsKbXkgQENvbmZpZ0l0ZW1DbGFzc2VzOwpteSBAQ29uZmlnSXRlbURlZmluaXRpb25JRHM7CgojIGdlbmVyYXRlIGEgcmFuZG9tIG5hbWUKbXkgJEZpcnN0Q2xhc3NOYW1lICA9ICdVbml0VGVzdENsYXNzMScgLiBpbnQgcmFuZCAxXzAwMF8wMDA7Cm15ICRTZWNvbmRDbGFzc05hbWUgPSAnVW5pdFRlc3RDbGFzczInIC4gaW50IHJhbmQgMV8wMDBfMDAwOwoKIyBzZXQgYSBuYW1lIHByZWZpeApteSAkTmFtZVByZWZpeCA9ICdVbml0VGVzdE5hbWUnIC4gaW50IHJhbmQgMV8wMDBfMDAwOwoKIyBhZGQgYm90aCB1bml0dGVzdCBjb25maWcgaXRlbSBjbGFzc2VzCm15ICRGaXJzdENsYXNzSUQgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUFkZCgKICAgIENsYXNzICAgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgIE5hbWUgICAgPT4gJEZpcnN0Q2xhc3NOYW1lLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBjaGVjayBmaXJzdCBjbGFzcyBpZAppZiAoICEkRmlyc3RDbGFzc0lEICkgewoKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDAsCiAgICAgICAgIkNhbid0IGFkZCBmaXJzdCBjb25maWcgaXRlbSBjbGFzcy4iLAogICAgKTsKfQoKcHVzaCBAQ29uZmlnSXRlbUNsYXNzSURzLCAkRmlyc3RDbGFzc0lEOwpwdXNoIEBDb25maWdJdGVtQ2xhc3NlcywgICRGaXJzdENsYXNzTmFtZTsKCm15ICRTZWNvbmRDbGFzc0lEID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1BZGQoCiAgICBDbGFzcyAgID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICBOYW1lICAgID0+ICRTZWNvbmRDbGFzc05hbWUsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgojIGNoZWNrIHNlY29uZCBjbGFzcyBpZAppZiAoICEkU2Vjb25kQ2xhc3NJRCApIHsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAwLAogICAgICAgICJDYW4ndCBhZGQgc2Vjb25kIGNvbmZpZyBpdGVtIGNsYXNzLiIsCiAgICApOwp9CgpwdXNoIEBDb25maWdJdGVtQ2xhc3NJRHMsICRTZWNvbmRDbGFzc0lEOwpwdXNoIEBDb25maWdJdGVtQ2xhc3NlcywgICRTZWNvbmRDbGFzc05hbWU7CgojIGFkZCBhbiBlbXB0eSBkZWZpbml0aW9uIHRvIHRoZSBjbGFzcy4gdGhlIGRlZmluaXRpb24gZG9lc24ndCBuZWVkIGFueSBlbGVtZW50cywgYXMgd2UncmUgb25seQojIHRlc3RpbmcgdGhlIG5hbWUgd2hpY2ggaXNuJ3QgcGFydCBvZiB0aGUgZGVmaW5pdGlvbiwgYnV0IG9mIHRoZSBjb25maWdpdGVtIGl0c2VsZgpteSAkRmlyc3REZWZpbml0aW9uSUQgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5EZWZpbml0aW9uQWRkKAogICAgQ2xhc3NJRCAgICA9PiAkRmlyc3RDbGFzc0lELAogICAgRGVmaW5pdGlvbiA9PiAiW10iLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKIyBjaGVjayBkZWZpbml0aW9uIGlkCmlmICggISRGaXJzdERlZmluaXRpb25JRCApIHsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAwLAogICAgICAgICJDYW4ndCBhZGQgZmlyc3QgY29uZmlnIGl0ZW0gZGVmaW5pdGlvbi4iLAogICAgKTsKfQoKcHVzaCBAQ29uZmlnSXRlbURlZmluaXRpb25JRHMsICRGaXJzdERlZmluaXRpb25JRDsKCm15ICRTZWNvbmREZWZpbml0aW9uSUQgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5EZWZpbml0aW9uQWRkKAogICAgQ2xhc3NJRCAgICA9PiAkU2Vjb25kQ2xhc3NJRCwKICAgIERlZmluaXRpb24gPT4gIltdIiwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiMgY2hlY2sgZGVmaW5pdGlvbiBpZAppZiAoICEkU2Vjb25kRGVmaW5pdGlvbklEICkgewoKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDAsCiAgICAgICAgIkNhbid0IGFkZCBzZWNvbmQgY29uZmlnIGl0ZW0gZGVmaW5pdGlvbi4iLAogICAgKTsKfQoKcHVzaCBAQ29uZmlnSXRlbURlZmluaXRpb25JRHMsICRTZWNvbmREZWZpbml0aW9uSUQ7CgpteSBAQ29uZmlnSXRlbUlEczsKCiMgYWRkIGEgY29uZmlnaXRlbSB0byBlYWNoIGNsYXNzCm15ICRGaXJzdENvbmZpZ0l0ZW1JRCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1BZGQoCiAgICBDbGFzc0lEID0+ICRGaXJzdENsYXNzSUQsCiAgICBVc2VySUQgID0+IDEsCik7CgppZiAoICEkRmlyc3RDb25maWdJdGVtSUQgKSB7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAwLAogICAgICAgICJGYWlsZWQgdG8gYWRkIHRoZSBmaXJzdCBjb25maWdpdGVtIiwKICAgICk7Cn0KCnB1c2ggQENvbmZpZ0l0ZW1JRHMsICRGaXJzdENvbmZpZ0l0ZW1JRDsKCm15ICRTZWNvbmRDb25maWdJdGVtSUQgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5Db25maWdJdGVtQWRkKAogICAgQ2xhc3NJRCA9PiAkU2Vjb25kQ2xhc3NJRCwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCmlmICggISRTZWNvbmRDb25maWdJdGVtSUQgKSB7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAwLAogICAgICAgICJGYWlsZWQgdG8gYWRkIHRoZSBzZWNvbmQgY29uZmlnaXRlbSIsCiAgICApOwp9CgpwdXNoIEBDb25maWdJdGVtSURzLCAkU2Vjb25kQ29uZmlnSXRlbUlEOwoKIyBjcmVhdGUgYSAzcmQgY29uZmlnaXRlbSBpbiB0aGUgMm5kIGNsYXNzCm15ICRUaGlyZENvbmZpZ0l0ZW1JRCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1BZGQoCiAgICBDbGFzc0lEID0+ICRTZWNvbmRDbGFzc0lELAogICAgVXNlcklEICA9PiAxLAopOwoKaWYgKCAhJFRoaXJkQ29uZmlnSXRlbUlEICkgewogICAgJFNlbGYtPlRydWUoCiAgICAgICAgMCwKICAgICAgICAiRmFpbGVkIHRvIGFkZCB0aGUgdGhpcmQgY29uZmlnaXRlbSIsCiAgICApOwp9CgpwdXNoIEBDb25maWdJdGVtSURzLCAkVGhpcmRDb25maWdJdGVtSUQ7CgojIGdldCBkZXBsb3ltZW50IHN0YXRlIGxpc3QKbXkgJERlcGxTdGF0ZUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKKTsKbXkgJURlcGxTdGF0ZUxpc3RSZXZlcnNlID0gcmV2ZXJzZSAleyREZXBsU3RhdGVMaXN0fTsKCiMgZ2V0IGluY2lkZW50IHN0YXRlIGxpc3QKbXkgJEluY2lTdGF0ZUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCik7Cm15ICVJbmNpU3RhdGVMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJXskSW5jaVN0YXRlTGlzdH07CgojIHNldCBhIG5hbWUgZm9yIGVhY2ggY29uZmlnaXRlbQpteSAkRmlyc3RJbml0aWFsVmVyc2lvbklEID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkFkZCgKICAgIENvbmZpZ0l0ZW1JRCA9PiAkRmlyc3RDb25maWdJdGVtSUQsCiAgICBOYW1lICAgICAgICAgPT4gJE5hbWVQcmVmaXggLiAnRmlyc3QjMDAxJywKICAgIERlZmluaXRpb25JRCA9PiAkRmlyc3REZWZpbml0aW9uSUQsCiAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCmlmICggISRGaXJzdEluaXRpYWxWZXJzaW9uSUQgKSB7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAwLAogICAgICAgICJGYWlsZWQgdG8gYWRkIHRoZSBpbml0aWFsIHZlcnNpb24gZm9yIHRoZSBmaXJzdCBjb25maWdpdGVtIiwKICAgICk7Cn0KCm15ICRTZWNvbmRJbml0aWFsVmVyc2lvbklEID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkFkZCgKICAgIENvbmZpZ0l0ZW1JRCA9PiAkU2Vjb25kQ29uZmlnSXRlbUlELAogICAgTmFtZSAgICAgICAgID0+ICROYW1lUHJlZml4IC4gJ1NlY29uZCMwMDEnLAogICAgRGVmaW5pdGlvbklEID0+ICRTZWNvbmREZWZpbml0aW9uSUQsCiAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCmlmICggISRTZWNvbmRJbml0aWFsVmVyc2lvbklEICkgewogICAgJFNlbGYtPlRydWUoCiAgICAgICAgMCwKICAgICAgICAiRmFpbGVkIHRvIGFkZCB0aGUgaW5pdGlhbCB2ZXJzaW9uIGZvciB0aGUgc2Vjb25kIGNvbmZpZ2l0ZW0iLAogICAgKTsKfQoKbXkgJFRoaXJkSW5pdGlhbFZlcnNpb25JRCA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPlZlcnNpb25BZGQoCiAgICBDb25maWdJdGVtSUQgPT4gJFRoaXJkQ29uZmlnSXRlbUlELAogICAgTmFtZSAgICAgICAgID0+ICROYW1lUHJlZml4IC4gJ1NlY29uZCMwMDInLAogICAgRGVmaW5pdGlvbklEID0+ICRTZWNvbmREZWZpbml0aW9uSUQsCiAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCmlmICggISRUaGlyZEluaXRpYWxWZXJzaW9uSUQgKSB7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAwLAogICAgICAgICJGYWlsZWQgdG8gYWRkIHRoZSBpbml0aWFsIHZlcnNpb24gZm9yIHRoZSB0aGlyZCBjb25maWdpdGVtIiwKICAgICk7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBydW4gdGhlIGFjdHVhbCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIHJlYWQgdGhlIG9yaWdpbmFsIHNldHRpbmcgZm9yIHRoZSBzZXR0aW5nIEVuYWJsZVVuaXF1ZW5lc3NDaGVjawpteSAkT3JpZ0VuYWJsZVNldHRpbmcgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVW5pcXVlQ0lOYW1lOjpFbmFibGVVbmlxdWVuZXNzQ2hlY2snKTsKCiMgZW5hYmxlIHRoZSB1bmlxdWVuZXNzIGNoZWNrCiRTZWxmLT57Q29uZmlnT2JqZWN0fS0+U2V0KAogICAgS2V5ICAgPT4gJ1VuaXF1ZUNJTmFtZTo6RW5hYmxlVW5pcXVlbmVzc0NoZWNrJywKICAgIFZhbHVlID0+IDEsCik7CgojIHJlYWQgdGhlIG9yaWdpbmFsIHNldHRpbmcgZm9yIHRoZSBzY29wZSBvZiB0aGUgdW5pcXVlbmVzcyBjaGVjawpteSAkT3JpZ1Njb3BlID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1VuaXF1ZUNJTmFtZTo6VW5pcXVlbmVzc0NoZWNrU2NvcGUnKTsKCiMgbWFrZSBzdXJlLCB0aGUgc2NvcGUgZm9yIHRoZSB1bmlxdWVuZXNzIGNoZWNrIGlzIHNldCB0byAnZ2xvYmFsJwokU2VsZi0+e0NvbmZpZ09iamVjdH0tPlNldCgKICAgIEtleSAgID0+ICdVbmlxdWVDSU5hbWU6OlVuaXF1ZW5lc3NDaGVja1Njb3BlJywKICAgIFZhbHVlID0+ICdnbG9iYWwnLAopOwoKbXkgJFJlbmFtZVN1Y2Nlc3M7CgojIHRyeSB0byBnaXZlIHRoZSAxc3QgY29uZmlnaXRlbSB0aGUgc2FtZSBuYW1lIGFzIHRoZSAybmQgb25lCiRSZW5hbWVTdWNjZXNzID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkFkZCgKICAgIENvbmZpZ0l0ZW1JRCA9PiAkRmlyc3RDb25maWdJdGVtSUQsCiAgICBOYW1lICAgICAgICAgPT4gJE5hbWVQcmVmaXggLiAnU2Vjb25kIzAwMScsCiAgICBEZWZpbml0aW9uSUQgPT4gJEZpcnN0RGVmaW5pdGlvbklELAogICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgokU2VsZi0+RmFsc2UoCiAgICAkUmVuYW1lU3VjY2VzcywKICAgICJTY29wZSA9PiBnbG9iYWw6IFJlbmFtaW5nIEZpcnN0IzAwMSB0byBhbHJlYWR5IGV4aXN0aW5nIFNlY29uZCMwMDEgc3VjY2Vzc2Z1bGx5IHByZXZlbnRlZCIKKTsKCiMgdHJ5IHRvIGdpdmUgdGhlIDJuZCBjb25maWdpdGVtIHRoZSBzYW1lIG5hbWUgYXMgdGhlIDNyZCBvbmUKJFJlbmFtZVN1Y2Nlc3MgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5WZXJzaW9uQWRkKAogICAgQ29uZmlnSXRlbUlEID0+ICRTZWNvbmRDb25maWdJdGVtSUQsCiAgICBOYW1lICAgICAgICAgPT4gJE5hbWVQcmVmaXggLiAnU2Vjb25kIzAwMicsCiAgICBEZWZpbml0aW9uSUQgPT4gJEZpcnN0RGVmaW5pdGlvbklELAogICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgokU2VsZi0+RmFsc2UoCiAgICAkUmVuYW1lU3VjY2VzcywKICAgICJTY29wZSA9PiBnbG9iYWw6IFJlbmFtaW5nIFNlY29uZCMwMDEgdG8gYWxyZWFkeSBleGlzdGluZyBTZWNvbmQjMDAyIHN1Y2Nlc3NmdWxseSBwcmV2ZW50ZWQiCik7CgojIHNldCB0aGUgc2NvcGUgZm9yIHRoZSB1bmlxdWVuZXNzIGNoZWNrIHRvICdjbGFzcycKJFNlbGYtPntDb25maWdPYmplY3R9LT5TZXQoCiAgICBLZXkgICA9PiAnVW5pcXVlQ0lOYW1lOjpVbmlxdWVuZXNzQ2hlY2tTY29wZScsCiAgICBWYWx1ZSA9PiAnY2xhc3MnLAopOwoKIyB0cnkgdG8gcmVuYW1lIEZpcnN0IzAwMSBhZ2FpbiB0byBTZWNvbmQjMDAxIHdoaWNoIHNob3VsZCB3b3JrIG5vdywgZHVlIHRvIHRoZSBkaWZmZXJlbnQgY2xhc3MKJFJlbmFtZVN1Y2Nlc3MgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5WZXJzaW9uQWRkKAogICAgQ29uZmlnSXRlbUlEID0+ICRGaXJzdENvbmZpZ0l0ZW1JRCwKICAgIE5hbWUgICAgICAgICA9PiAkTmFtZVByZWZpeCAuICdTZWNvbmQjMDAxJywKICAgIERlZmluaXRpb25JRCA9PiAkRmlyc3REZWZpbml0aW9uSUQsCiAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFJlbmFtZVN1Y2Nlc3MsCiAgICAiU2NvcGUgPT4gY2xhc3M6IFJlbmFtaW5nIEZpcnN0IzAwMSB0byBhbHJlYWR5IGV4aXN0aW5nIFNlY29uZCMwMDEgc3VjY2VlZGVkIgopOwoKIyB0cnlpbmcgbm93IHRvIGNyZWF0ZSBhIGR1cGxpY2F0ZSBuYW1lIHdpdGhpbiBhIGNsYXNzCiRSZW5hbWVTdWNjZXNzID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+VmVyc2lvbkFkZCgKICAgIENvbmZpZ0l0ZW1JRCA9PiAkU2Vjb25kQ29uZmlnSXRlbUlELAogICAgTmFtZSAgICAgICAgID0+ICROYW1lUHJlZml4IC4gJ1NlY29uZCMwMDInLAogICAgRGVmaW5pdGlvbklEID0+ICRTZWNvbmREZWZpbml0aW9uSUQsCiAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCiRTZWxmLT5GYWxzZSgKICAgICRSZW5hbWVTdWNjZXNzLAogICAgIlNjb3BlID0+IGNsYXNzOiBSZW5hbWluZyBTZWNvbmQjMDAxIHRvIGFscmVhZHkgZXhpc3RpbmcgU2Vjb25kIzAwMiBzdWNjZXNzZnVsbHkgcHJldmVudGVkIgopOwoKIyByZXNldCB0aGUgZW5hYmxlZCBzZXR0aW5nIGZvciB0aGUgdW5pcXVlbmVzcyBjaGVjayB0byBpdHMgb3JpZ2luYWwgdmFsdWUKJFNlbGYtPntDb25maWdPYmplY3R9LT5TZXQoCiAgICBLZXkgICA9PiAnVW5pcXVlQ0lOYW1lOjpFbmFibGVVbmlxdWVuZXNzQ2hlY2snLAogICAgVmFsdWUgPT4gJE9yaWdFbmFibGVTZXR0aW5nLAopOwoKIyByZXNldCB0aGUgc2NvcGUgZm9yIHRoZSB1bmlxdWVuZXNzIGNoZWNrIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZQokU2VsZi0+e0NvbmZpZ09iamVjdH0tPlNldCgKICAgIEtleSAgID0+ICdVbmlxdWVDSU5hbWU6OlVuaXF1ZW5lc3NDaGVja1Njb3BlJywKICAgIFZhbHVlID0+ICRPcmlnU2NvcGUsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgY2xlYW4gdGhlIHN5c3RlbQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGdldCBjdXJyZW50IGNsYXNzIGxpc3QKbXkgJENsYXNzTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCik7CgojIHNldCB1bml0dGVzdCBjbGFzc2VzIGludmFsaWQKSVRFTUlEOgpmb3IgbXkgJEl0ZW1JRCAoIGtleXMgJXskQ2xhc3NMaXN0fSApIHsKCiAgICBuZXh0IElURU1JRCBpZiAkQ2xhc3NMaXN0LT57JEl0ZW1JRH0gIX4gbXsgXEEgVW5pdFRlc3QgfXhtczsKCiAgICAjIHVwZGF0ZSBpdGVtCiAgICAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbVVwZGF0ZSgKICAgICAgICBJdGVtSUQgID0+ICRJdGVtSUQsCiAgICAgICAgTmFtZSAgICA9PiAkQ2xhc3NMaXN0LT57JEl0ZW1JRH0sCiAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7Cn0KCiMgZGVsZXRlIHRoZSB0ZXN0IGNvbmZpZyBpdGVtcwpmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoQENvbmZpZ0l0ZW1JRHMpIHsKICAgIG15ICREZWxldGVPayA9ICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkNvbmZpZ0l0ZW1EZWxldGUoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwp9CgoxOwo=
Ly8gLS0KLy8gSVRTTS5BZ2VudC5Db25maWdJdGVtLlNlYXJjaC5qcyAtIHByb3ZpZGVzIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIHRoZSBnbG9iYWwgc2VhcmNoCi8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy9cbiI7Ci8vIC0tCi8vIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCi8vIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKLy8gZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KLy8gLS0KCiJ1c2Ugc3RyaWN0IjsKCnZhciBJVFNNID0gSVRTTSB8fCB7fTsKSVRTTS5BZ2VudCA9IElUU00uQWdlbnQgfHwge307CklUU00uQWdlbnQuQ29uZmlnSXRlbSA9IElUU00uQWdlbnQuQ29uZmlnSXRlbSB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlCiAqIEBleHBvcnRzIFRhcmdldE5TIGFzIElUU00uQWdlbnQuQ29uZmlnSXRlbS5TZWFyY2gKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgdGhlIHNlYXJjaC4KICovCklUU00uQWdlbnQuQ29uZmlnSXRlbS5TZWFyY2ggPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIHJlYnVpbGQgYXR0cmlidXRlIHNlbGVjdGlvbiwgb25seSBzaG93IGF2YWlsYWJsZSBhdHRyaWJ1dGVzLgogICAgICovCiAgICBUYXJnZXROUy5BZGRpdGlvbmFsQXR0cmlidXRlU2VsZWN0aW9uUmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgLy8gZ2V0IG9yaWdpbmFsIHNlbGVjdGlvbiB3aXRoIGFsbCBwb3NzaWJsZSBmaWVsZHMgYW5kIGNsb25lIGl0CiAgICAgICAgdmFyICRBdHRyaWJ1dGVDbG9uZSA9ICQoJyNBdHRyaWJ1dGVPcmlnJykuY2xvbmUoKS5hdHRyKCdpZCcsICdBdHRyaWJ1dGUnKTsKCiAgICAgICAgLy8gc3RyaXAgYWxsIGFscmVhZHkgdXNlZCBhdHRyaWJ1dGVzCiAgICAgICAgJEF0dHJpYnV0ZUNsb25lLmZpbmQoJ29wdGlvbicpLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAkKCcjU2VhcmNoSW5zZXJ0IGxhYmVsIycgKyAnTGFiZWwnICsgJCh0aGlzKS5hdHRyKCd2YWx1ZScpKS5yZW1vdmUoKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gcmVwbGFjZSBzZWxlY3Rpb24gd2l0aCBvcmlnaW5hbCBzZWxlY3Rpb24KICAgICAgICAkKCcjQXR0cmlidXRlJykucmVwbGFjZVdpdGgoJEF0dHJpYnV0ZUNsb25lKTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gb2YgYXR0cmlidXRlIHRvIGFkZC4KICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGFkZHMgb25lIGF0dHJpYnV0ZSBmb3Igc2VhcmNoCiAgICAgKi8KICAgIFRhcmdldE5TLlNlYXJjaEF0dHJpYnV0ZUFkZCA9IGZ1bmN0aW9uIChBdHRyaWJ1dGUpIHsKCiAgICAgICAgLy8gZXNjYXBlIHBvc3NpYmxlIGNvbG9ucyAoOikgaW4gZWxlbWVudCBpZCBiZWNhdXNlIGpRdWVyeSBjYW4gbm90IGhhbmRsZSBpdCBpbiBpZCBhdHRyaWJ1dGUgc2VsZWN0b3JzCiAgICAgICAgQXR0cmlidXRlID0gQ29yZS5BcHAuRXNjYXBlU2VsZWN0b3IoQXR0cmlidXRlKTsKCiAgICAgICAgdmFyICRMYWJlbCA9ICQoJyNTZWFyY2hBdHRyaWJ1dGVzSGlkZGVuIGxhYmVsI0xhYmVsJyArIEF0dHJpYnV0ZSk7CgogICAgICAgIGlmICgkTGFiZWwubGVuZ3RoKSB7CiAgICAgICAgICAgICRMYWJlbC5wcmV2KCkuY2xvbmUoKS5hcHBlbmRUbygnI1NlYXJjaEluc2VydCcpOwogICAgICAgICAgICAkTGFiZWwuY2xvbmUoKS5hcHBlbmRUbygnI1NlYXJjaEluc2VydCcpOwogICAgICAgICAgICAkTGFiZWwubmV4dCgpLmNsb25lKCkuYXBwZW5kVG8oJyNTZWFyY2hJbnNlcnQnKQoKICAgICAgICAgICAgICAgIC8vIGJpbmQgY2xpY2sgZnVuY3Rpb24gdG8gcmVtb3ZlIGJ1dHRvbiBub3cKICAgICAgICAgICAgICAgIC5maW5kKCcuUmVtb3ZlJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyICRFbGVtZW50ID0gJCh0aGlzKS5wYXJlbnQoKTsKICAgICAgICAgICAgICAgICAgICBUYXJnZXROUy5TZWFyY2hBdHRyaWJ1dGVSZW1vdmUoJEVsZW1lbnQpOwoKICAgICAgICAgICAgICAgICAgICAvLyByZWJ1aWxkIHNlbGVjdGlvbgogICAgICAgICAgICAgICAgICAgIFRhcmdldE5TLkFkZGl0aW9uYWxBdHRyaWJ1dGVTZWxlY3Rpb25SZWJ1aWxkKCk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vIHNldCBhdXRvY29tcGxldGUgdG8gY3VzdG9tZXIgdHlwZSBmaWVsZHMKICAgICAgICAgICAgICAgICQoJyNTZWFyY2hJbnNlcnQnKS5maW5kKCcuSVRTTUN1c3RvbWVyU2VhcmNoJykuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgSW5wdXRJRCA9ICQodGhpcykuYXR0cignaWQnKSArICdBdXRvY29tcGxldGUnOwogICAgICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ0lUU01DdXN0b21lclNlYXJjaCcpOwogICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignaWQnLCBJbnB1dElEKTsKICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnByZXYoKS5hdHRyKCdpZCcsIElucHV0SUQgKyAnU2VsZWN0ZWQnKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gZXNjYXBlIHBvc3NpYmxlIGNvbG9ucyAoOikgaW4gZWxlbWVudCBpZCBiZWNhdXNlIGpRdWVyeSBjYW4gbm90IGhhbmRsZSBpdCBpbiBpZCBhdHRyaWJ1dGUgc2VsZWN0b3JzCiAgICAgICAgICAgICAgICAgICAgSVRTTS5BZ2VudC5DdXN0b21lclNlYXJjaC5Jbml0KCAkKCcjJyArIENvcmUuQXBwLkVzY2FwZVNlbGVjdG9yKElucHV0SUQpICkgKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gcHJldmVudCBkaWFsb2cgY2xvc3VyZSB3aGVuIHNlbGVjdCBhIGN1c3RvbWVyIGZyb20gdGhlIGxpc3QKICAgICAgICAgICAgICAgICAgICAkKCd1bC51aS1hdXRvY29tcGxldGUnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKEV2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge2pRdWVyeU9iamVjdH0gJEVsZW1lbnQgVGhlIGpRdWVyeSBvYmplY3Qgb2YgdGhlIGZvcm0gIG9yIGFueSBlbGVtZW50CiAgICAgKiAgICAgIHdpdGhpbiB0aGlzIGZvcm0gY2hlY2suCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiByZW1vdmUgYXR0cmlidXRlcyBmcm9tIGFuIGVsZW1lbnQuCiAgICAgKi8KCiAgICBUYXJnZXROUy5TZWFyY2hBdHRyaWJ1dGVSZW1vdmUgPSBmdW5jdGlvbiAoJEVsZW1lbnQpIHsKICAgICAgICAkRWxlbWVudC5wcmV2KCkucHJldigpLnJlbW92ZSgpOwogICAgICAgICRFbGVtZW50LnByZXYoKS5yZW1vdmUoKTsKICAgICAgICAkRWxlbWVudC5yZW1vdmUoKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIHJlYnVpbGQgYXR0cmlidXRlIHNlbGVjdGlvbiwgb25seSBzaG93IGF2YWlsYWJsZSBhdHRyaWJ1dGVzLgogICAgICovCiAgICBUYXJnZXROUy5BZGRpdGlvbmFsQXR0cmlidXRlU2VsZWN0aW9uUmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgLy8gZ2V0IG9yaWdpbmFsIHNlbGVjdGlvbgogICAgICAgIHZhciAkQXR0cmlidXRlQ2xvbmUgPSAkKCcjQXR0cmlidXRlT3JpZycpLmNsb25lKCk7CiAgICAgICAgJEF0dHJpYnV0ZUNsb25lLmF0dHIoJ2lkJywgJ0F0dHJpYnV0ZScpOwoKICAgICAgICAvLyBzdHJpcCBhbGwgYWxyZWFkeSB1c2VkIGF0dHJpYnV0ZXMKICAgICAgICAkQXR0cmlidXRlQ2xvbmUuZmluZCgnb3B0aW9uJykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciAkQXR0cmlidXRlID0gJCh0aGlzKTsKICAgICAgICAgICAgJCgnI1NlYXJjaEluc2VydCBsYWJlbCcpLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKCQodGhpcykuYXR0cignaWQnKSA9PT0gJ0xhYmVsJyArICRBdHRyaWJ1dGUuYXR0cigndmFsdWUnKSkgewogICAgICAgICAgICAgICAgICAgICRBdHRyaWJ1dGUucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwoKICAgICAgICAvLyByZXBsYWNlIHNlbGVjdGlvbiB3aXRoIG9yaWdpbmFsIHNlbGVjdGlvbgogICAgICAgICQoJyNBdHRyaWJ1dGUnKS5yZXBsYWNlV2l0aCgkQXR0cmlidXRlQ2xvbmUpOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwcml2YXRlCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gUHJvZmlsZSBUaGUgcHJvZmlsZSBuYW1lIHRoYXQgd2lsbCBiZSBkZWxldGUuCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqIEBkZXNjcmlwdGlvbiBEZWxldGUgYSBwcm9maWxlIHZpYSBhbiBhamF4IHJlcXVlc3RzLgogICAgICovCiAgICBmdW5jdGlvbiBTZWFyY2hQcm9maWxlRGVsZXRlKFByb2ZpbGUpIHsKICAgICAgICB2YXIgRGF0YSA9IHsKICAgICAgICAgICAgQWN0aW9uOiAnQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCcsCiAgICAgICAgICAgIFN1YmFjdGlvbjogJ0FKQVhQcm9maWxlRGVsZXRlJywKICAgICAgICAgICAgUHJvZmlsZTogUHJvZmlsZSwKICAgICAgICAgICAgQ2xhc3NJRDogJCgnI1NlYXJjaENsYXNzSUQnKS52YWwoKQogICAgICAgIH07CiAgICAgICAgQ29yZS5BSkFYLkZ1bmN0aW9uQ2FsbCgKICAgICAgICAgICAgQ29yZS5Db25maWcuR2V0KCdDR0lIYW5kbGUnKSwKICAgICAgICAgICAgRGF0YSwKICAgICAgICAgICAgZnVuY3Rpb24gKCkge30KICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcHJpdmF0ZQogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiBAZGVzY3JpcHRpb24gU2hvd3Mgd2FpdGluZyBkaWFsb2cgdW50aWwgc2VhcmNoIHNjcmVlbiBpcyByZWFkeS4KICAgICAqLwogICAgZnVuY3Rpb24gU2hvd1dhaXRpbmdEaWFsb2coKXsKICAgICAgICBDb3JlLlVJLkRpYWxvZy5TaG93Q29udGVudERpYWxvZygnPGRpdiBjbGFzcz0iU3BhY2luZyBDZW50ZXIiPjxzcGFuIGNsYXNzPSJBSkFYTG9hZGVyIiB0aXRsZT0iJyArIENvcmUuQ29uZmlnLkdldCgnTG9hZGluZ01zZycpICsgJyI+PC9zcGFuPjwvZGl2PicsIENvcmUuQ29uZmlnLkdldCgnTG9hZGluZ01zZycpLCAnMTBweCcsICdDZW50ZXInLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIG5vbmUKICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIHNldHMgYWxsIHNlYXJjaCBkaWFsb2cgc2V0dGluZ3MKICAgICAqLwoKICAgIFRhcmdldE5TLlNldFNlYXJjaERpYWxvZyA9IGZ1bmN0aW9uKCkgewoKICAgICAgICAvLyBoaWRlIGFkZCB0ZW1wbGF0ZSBibG9jawogICAgICAgICQoJyNTZWFyY2hQcm9maWxlQWRkQmxvY2snKS5oaWRlKCk7CgogICAgICAgIC8vIGhpZGUgc2F2ZSBjaGFuZ2VzIGluIHRlbXBsYXRlIGJsb2NrCiAgICAgICAgJCgnI1NhdmVQcm9maWxlJykucGFyZW50KCkuaGlkZSgpLnByZXYoKS5oaWRlKCkucHJldigpLmhpZGUoKTsKCiAgICAgICAgLy8gc2VhcmNoIHByb2ZpbGUgaXMgc2VsZWN0ZWQKICAgICAgICBpZiAoJCgnI1NlYXJjaFByb2ZpbGUnKS52YWwoKSAmJiAkKCcjU2VhcmNoUHJvZmlsZScpLnZhbCgpICE9PSAnbGFzdC1zZWFyY2gnKSB7CgogICAgICAgICAgICAvLyBzaG93IGRlbGV0ZSBidXR0b24KICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGVEZWxldGUnKS5zaG93KCk7CgogICAgICAgICAgICAvLyBzaG93IHNhdmUgY2hhbmdlcyBpbiB0ZW1wbGF0ZSBibG9jawogICAgICAgICAgICAkKCcjU2F2ZVByb2ZpbGUnKS5wYXJlbnQoKS5zaG93KCkucHJldigpLnNob3coKS5wcmV2KCkuc2hvdygpOwoKICAgICAgICAgICAgLy8gc2V0IFNhdmVQcm9maWxlIHRvIDAKICAgICAgICAgICAgJCgnI1NhdmVQcm9maWxlJykuYXR0cignY2hlY2tlZCcsIGZhbHNlKTsKICAgICAgICB9CgogICAgICAgIC8vIHJlZ2lzdGVyIGFkZCBvZiBhdHRyaWJ1dGUKICAgICAgICAkKCcuQWRkJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBBdHRyaWJ1dGUgPSAkKCcjQXR0cmlidXRlJykudmFsKCk7CgogICAgICAgICAgICBUYXJnZXROUy5TZWFyY2hBdHRyaWJ1dGVBZGQoQXR0cmlidXRlKTsKICAgICAgICAgICAgVGFyZ2V0TlMuQWRkaXRpb25hbEF0dHJpYnV0ZVNlbGVjdGlvblJlYnVpbGQoKTsKCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gcmVnaXN0ZXIgcmV0dXJuIGtleQogICAgICAgICQoJyNTZWFyY2hGb3JtJykudW5iaW5kKCdrZXlwcmVzcy5GaWx0ZXJJbnB1dCcpLmJpbmQoJ2tleXByZXNzLkZpbHRlcklucHV0JywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgICAgIGlmICgoRXZlbnQuY2hhckNvZGUgfHwgRXZlbnQua2V5Q29kZSkgPT09IDEzKSB7CiAgICAgICAgICAgICAgICAkKCcjU2VhcmNoRm9ybScpLnN1Ym1pdCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIHJlZ2lzdGVyIHN1Ym1pdAogICAgICAgICQoJyNTZWFyY2hGb3JtU3VibWl0JykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIC8vIE5vcm1hbCByZXN1bHRzIG1vZGUgd2lsbCByZXR1cm4gSFRNTCBpbiB0aGUgc2FtZSB3aW5kb3cKICAgICAgICAgICAgaWYgKCQoJyNTZWFyY2hGb3JtICNSZXN1bHRGb3JtJykudmFsKCkgPT09ICdOb3JtYWwnKSB7CiAgICAgICAgICAgICAgICAkKCcjU2VhcmNoRm9ybScpLnN1Ym1pdCgpOwogICAgICAgICAgICAgICAgU2hvd1dhaXRpbmdEaWFsb2coKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsgLy8gUHJpbnQgYW5kIENTViBzaG91bGQgb3BlbiBpbiBhIG5ldyB3aW5kb3csIG5vIHdhaXRpbmcgZGlhbG9nCiAgICAgICAgICAgICAgICAkKCcjU2VhcmNoRm9ybScpLmF0dHIoJ3RhcmdldCcsICdTZWFyY2hSZXN1bHRQYWdlJyk7CiAgICAgICAgICAgICAgICAkKCcjU2VhcmNoRm9ybScpLnN1Ym1pdCgpOwogICAgICAgICAgICAgICAgJCgnI1NlYXJjaEZvcm0nKS5hdHRyKCd0YXJnZXQnLCAnJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwoKICAgICAgICAvLyBsb2FkIHByb2ZpbGUKICAgICAgICAkKCcjU2VhcmNoUHJvZmlsZScpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIFByb2ZpbGUgPSAkKCcjU2VhcmNoUHJvZmlsZScpLnZhbCgpOwogICAgICAgICAgICBUYXJnZXROUy5Mb2FkUHJvZmlsZShQcm9maWxlKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwoKICAgICAgICAvLyBzaG93IGFkZCBwcm9maWxlIGJsb2NrIG9yIG5vdAogICAgICAgICQoJyNTZWFyY2hQcm9maWxlTmV3JykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGVBZGRCbG9jaycpLnRvZ2dsZSgpOwogICAgICAgICAgICBFdmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSk7CgogICAgICAgIC8vIGFkZCBuZXcgcHJvZmlsZQogICAgICAgICQoJyNTZWFyY2hQcm9maWxlQWRkQWN0aW9uJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBOYW1lLCAkRWxlbWVudDEsICRFbGVtZW50MjsKCiAgICAgICAgICAgIC8vIGdldCBuYW1lCiAgICAgICAgICAgIE5hbWUgPSAkKCcjU2VhcmNoUHJvZmlsZUFkZE5hbWUnKS52YWwoKTsKICAgICAgICAgICAgaWYgKCFOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGFkZCBuYW1lIHRvIHByb2ZpbGUgc2VsZWN0aW9uCiAgICAgICAgICAgICRFbGVtZW50MSA9ICQoJyNTZWFyY2hQcm9maWxlJykuY2hpbGRyZW4oKS5maXJzdCgpLmNsb25lKCk7CiAgICAgICAgICAgICRFbGVtZW50MS50ZXh0KE5hbWUpOwogICAgICAgICAgICAkRWxlbWVudDEuYXR0cigndmFsdWUnLCBOYW1lKTsKICAgICAgICAgICAgJEVsZW1lbnQxLmF0dHIoJ3NlbGVjdGVkJywgJ3NlbGVjdGVkJyk7CiAgICAgICAgICAgICQoJyNTZWFyY2hQcm9maWxlJykuYXBwZW5kKCRFbGVtZW50MSk7CgogICAgICAgICAgICAvLyBzZXQgaW5wdXQgYm94IHRvIGVtcHR5CiAgICAgICAgICAgICQoJyNTZWFyY2hQcm9maWxlQWRkTmFtZScpLnZhbCgnJyk7CgogICAgICAgICAgICAvLyBoaWRlIGFkZCB0ZW1wbGF0ZSBibG9jawogICAgICAgICAgICAkKCcjU2VhcmNoUHJvZmlsZUFkZEJsb2NrJykuaGlkZSgpOwoKICAgICAgICAgICAgLy8gaGlkZSBzYXZlIGNoYW5nZXMgaW4gdGVtcGxhdGUgYmxvY2sKICAgICAgICAgICAgJCgnI1NhdmVQcm9maWxlJykucGFyZW50KCkuaGlkZSgpLnByZXYoKS5oaWRlKCkucHJldigpLmhpZGUoKTsKCiAgICAgICAgICAgIC8vIHNldCBTYXZlUHJvZmlsZSB0byAxCiAgICAgICAgICAgICQoJyNTYXZlUHJvZmlsZScpLmF0dHIoJ2NoZWNrZWQnLCB0cnVlKTsKCiAgICAgICAgICAgICQoJyNTZWFyY2hQcm9maWxlRGVsZXRlJykuc2hvdygpOwoKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwoKICAgICAgICAvLyBkZWxldGUgcHJvZmlsZQogICAgICAgICQoJyNTZWFyY2hQcm9maWxlRGVsZXRlJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKCiAgICAgICAgICAgIC8vIHN0cmlwIGFsbCBhbHJlYWR5IHVzZWQgYXR0cmlidXRlcwogICAgICAgICAgICAkKCcjU2VhcmNoUHJvZmlsZScpLmZpbmQoJ29wdGlvbjpzZWxlY3RlZCcpLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKCQodGhpcykuYXR0cigndmFsdWUnKSAhPT0gJ2xhc3Qtc2VhcmNoJykgewoKICAgICAgICAgICAgICAgICAgICAvLyByZWJ1aWxkIGF0dHJpYnV0ZXMKICAgICAgICAgICAgICAgICAgICAkKCcjU2VhcmNoSW5zZXJ0JykudGV4dCgnJyk7CgogICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSByZW1vdGUKICAgICAgICAgICAgICAgICAgICBTZWFyY2hQcm9maWxlRGVsZXRlKCQodGhpcykudmFsKCkpOwoKICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgbG9jYWwKICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZSgpOwoKICAgICAgICAgICAgICAgICAgICAvLyByZWJ1aWxkIHNlbGVjdGlvbgogICAgICAgICAgICAgICAgICAgIFRhcmdldE5TLkFkZGl0aW9uYWxBdHRyaWJ1dGVTZWxlY3Rpb25SZWJ1aWxkKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKCQoJyNTZWFyY2hQcm9maWxlJykudmFsKCkgJiYgJCgnI1NlYXJjaFByb2ZpbGUnKS52YWwoKSA9PT0gJ2xhc3Qtc2VhcmNoJykgewogICAgICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGVEZWxldGUnKS5oaWRlKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKCiAgICB9OwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge1Byb2ZpbGV9IFRoZSBwcm9maWxlIHRoYXQgaXMgc2V0IHRvIHRoZSBzZWFyY2ggZGlhbG9nCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiByZWZyZXNoIHRoZSBzZWFyY2ggZGlhbG9nIHdpdGggdGhlIHNlbGVjdGVkIHByb2ZpbGUKICAgICAqLwoKICAgIFRhcmdldE5TLkxvYWRQcm9maWxlID0gZnVuY3Rpb24gKFByb2ZpbGUpIHsKICAgICAgICB2YXIgQmFzZUxpbmsgPSBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJyksCiAgICAgICAgICAgIEFjdGlvbiA9ICdBY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaDsnLAogICAgICAgICAgICBTdWJBY3Rpb24gPSAnU3ViYWN0aW9uPUFKQVhVcGRhdGU7JywKICAgICAgICAgICAgQ2xhc3NJRCA9ICdDbGFzc0lEPScgKyAkKCcjU2VhcmNoQ2xhc3NJRCcpLnZhbCgpICsgJzsnLAogICAgICAgICAgICBTZWFyY2hQcm9maWxlID0gJ1Byb2ZpbGU9JyArIFByb2ZpbGUsCiAgICAgICAgICAgIFVSTCA9ICBCYXNlTGluayArIEFjdGlvbiArIFN1YkFjdGlvbiArIENsYXNzSUQgKyBTZWFyY2hQcm9maWxlOwoKICAgICAgICAkKCcjRGl2Q2xhc3NJRCcpLmFkZENsYXNzKCd1aS1hdXRvY29tcGxldGUtbG9hZGluZycpOwogICAgICAgIENvcmUuQUpBWC5Db250ZW50VXBkYXRlKCQoJyNBSkFYVXBkYXRlJyksIFVSTCwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIFRhcmdldE5TLlNldFNlYXJjaERpYWxvZyggJyRFbnZ7IkFjdGlvbiJ9JyApOwogICAgICAgICAgICAkKCcjSVRTTVNlYXJjaFByb2ZpbGUnKS5yZW1vdmVDbGFzcygnSGlkZGVuJyk7CiAgICAgICAgICAgICQoJyNJVFNNU2VhcmNoRmllbGRzJykucmVtb3ZlQ2xhc3MoJ0hpZGRlbicpOwogICAgICAgICAgICAkKCcjU2VhcmNoRm9ybVN1Ym1pdCcpLnJlbW92ZUNsYXNzKCdIaWRkZW4nKTsKICAgICAgICAgICAgJCgnI0RpdkNsYXNzSUQnKS5yZW1vdmVDbGFzcygndWktYXV0b2NvbXBsZXRlLWxvYWRpbmcnKTsKICAgICAgICB9KTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7RXZlbnR9IEFjdGlvbgogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gb3BlbiB0aGUgc2VhcmNoIGRpYWxvZwogICAgICovCgogICAgVGFyZ2V0TlMuT3BlblNlYXJjaERpYWxvZyA9IGZ1bmN0aW9uIChBY3Rpb24sIFByb2ZpbGUsIENsYXNzKSB7CgogICAgICAgIHZhciBSZWZlcnJlciA9IENvcmUuQ29uZmlnLkdldCgnQWN0aW9uJyksCiAgICAgICAgICAgIERhdGE7CgogICAgICAgIGlmICghQWN0aW9uKSB7CiAgICAgICAgICAgIEFjdGlvbiA9J0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gnOwogICAgICAgIH0KICAgICAgICBEYXRhID0gewogICAgICAgICAgICBBY3Rpb246IEFjdGlvbiwKICAgICAgICAgICAgUmVmZXJyZXI6IFJlZmVycmVyLAogICAgICAgICAgICBQcm9maWxlOiBQcm9maWxlLAogICAgICAgICAgICBTdWJhY3Rpb246ICdBSkFYJywKICAgICAgICAgICAgQ2xhc3NJRDogQ2xhc3MKICAgICAgICB9OwoKICAgICAgICBTaG93V2FpdGluZ0RpYWxvZygpOwoKICAgICAgICBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKAogICAgICAgICAgICBDb3JlLkNvbmZpZy5HZXQoJ0NHSUhhbmRsZScpLAogICAgICAgICAgICBEYXRhLAogICAgICAgICAgICBmdW5jdGlvbiAoSFRNTCkgewogICAgICAgICAgICAgICAgLy8gaWYgdGhlIHdhaXRpbmcgZGlhbG9nIHdhcyBjYW5jZWxlZCwgZG8gbm90IHNob3cgdGhlIHNlYXJjaAogICAgICAgICAgICAgICAgLy8gIGRpYWxvZyBhcyB3ZWxsCiAgICAgICAgICAgICAgICBpZiAoISQoJy5EaWFsb2c6dmlzaWJsZScpLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBDb3JlLlVJLkRpYWxvZy5TaG93Q29udGVudERpYWxvZyhIVE1MLCBDb3JlLkNvbmZpZy5HZXQoJ1NlYXJjaE1zZycpLCAnMTBweCcsICdDZW50ZXInLCB0cnVlKTsKICAgICAgICAgICAgICAgIFRhcmdldE5TLlNldFNlYXJjaERpYWxvZygpOwogICAgICAgICAgICB9LCAnaHRtbCcKICAgICAgICApOwogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oSVRTTS5BZ2VudC5Db25maWdJdGVtLlNlYXJjaCB8fCB7fSkpOwo=
IyAtLQojIElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbSAtIGNvZGUgdG8gZXhjZWN1dGUgZHVyaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSB2YXI6OnBhY2thZ2VzZXR1cDo6SVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6Q29uZmlnOwp1c2UgS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpDU1Y7CnVzZSBLZXJuZWw6OlN5c3RlbTo6Q2FjaGVJbnRlcm5hbDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpHcm91cDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Owp1c2UgS2VybmVsOjpTeXN0ZW06OlN0YXRlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlN0YXRzOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2U7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VHlwZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpVc2VyOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhbGlkOwoKdXNlIHZhcnMgcXcoQElTQSk7Cgo9aGVhZDEgTkFNRQoKSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnBtIC0gY29kZSB0byBleGNlY3V0ZSBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24KCj1oZWFkMSBTWU5PUFNJUwoKRnVuY3Rpb25zIGZvciBpbnN0YWxsaW5nIHRoZSBJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQgcGFja2FnZS4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OkNvbmZpZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpMb2c7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok1haW47CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OlRpbWU7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkRCOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpYTUw7CiAgICB1c2UgdmFyOjpwYWNrYWdlc2V0dXA6OklUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gS2VybmVsOjpDb25maWctPm5ldygpOwogICAgbXkgJEVuY29kZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpFbmNvZGUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICk7CiAgICBteSAkTG9nT2JqZWN0ICAgID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgKTsKICAgIG15ICRNYWluT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06Ok1haW4tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkVGltZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICApOwogICAgbXkgJERCT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgKTsKICAgIG15ICRYTUxPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6WE1MLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgREJPYmplY3QgICAgID0+ICREQk9iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwogICAgbXkgJENvZGVPYmplY3QgPSB2YXI6OnBhY2thZ2VzZXR1cDo6SVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgICAgIFRpbWVPYmplY3QgICA9PiAkVGltZU9iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIFhNTE9iamVjdCAgICA9PiAkWE1MT2JqZWN0LAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBFbmNvZGVPYmplY3QgTG9nT2JqZWN0IE1haW5PYmplY3QgVGltZU9iamVjdCBEQk9iamVjdCBYTUxPYmplY3QpCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgICMgY3JlYXRlIG5lZWRlZCBzeXNjb25maWcgb2JqZWN0CiAgICAkU2VsZi0+e1N5c0NvbmZpZ09iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnLT5uZXcoICV7JFNlbGZ9ICk7CgogICAgIyByZWJ1aWxkIFpaWiogZmlsZXMKICAgICRTZWxmLT57U3lzQ29uZmlnT2JqZWN0fS0+V3JpdGVEZWZhdWx0KCk7CgogICAgIyBkZWZpbmUgdGhlIFpaWiBmaWxlcwogICAgbXkgQFpaWkZpbGVzID0gKAogICAgICAgICdaWlpBQXV0by5wbScsCiAgICAgICAgJ1paWkF1dG8ucG0nLAogICAgKTsKCiAgICAjIHJlbG9hZCB0aGUgWlpaIGZpbGVzIChtb2RfcGVybCB3b3JrYXJvdW5kKQogICAgZm9yIG15ICRaWlpGaWxlIChAWlpaRmlsZXMpIHsKCiAgICAgICAgUFJFRklYOgogICAgICAgIGZvciBteSAkUHJlZml4IChASU5DKSB7CiAgICAgICAgICAgIG15ICRGaWxlID0gJFByZWZpeCAuICcvS2VybmVsL0NvbmZpZy9GaWxlcy8nIC4gJFpaWkZpbGU7CiAgICAgICAgICAgIG5leHQgUFJFRklYIGlmICEtZiAkRmlsZTsKICAgICAgICAgICAgZG8gJEZpbGU7CiAgICAgICAgICAgIGxhc3QgUFJFRklYOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSBhZGRpdGlvbmFsIG9iamVjdHMKICAgICRTZWxmLT57Q29uZmlnT2JqZWN0fSAgICAgICAgID0gS2VybmVsOjpDb25maWctPm5ldygpOwogICAgJFNlbGYtPntDU1ZPYmplY3R9ICAgICAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6Q1NWLT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+e0dyb3VwT2JqZWN0fSAgICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpHcm91cC0+bmV3KCAleyRTZWxmfSApOwogICAgJFNlbGYtPntVc2VyT2JqZWN0fSAgICAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6VXNlci0+bmV3KCAleyRTZWxmfSApOwogICAgJFNlbGYtPntTdGF0ZU9iamVjdH0gICAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U3RhdGUtPm5ldyggJXskU2VsZn0gKTsKICAgICRTZWxmLT57U2VydmljZU9iamVjdH0gICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UtPm5ldyggJXskU2VsZn0gKTsKICAgICRTZWxmLT57VHlwZU9iamVjdH0gICAgICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlR5cGUtPm5ldyggJXskU2VsZn0gKTsKICAgICRTZWxmLT57VmFsaWRPYmplY3R9ICAgICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlZhbGlkLT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZy0+bmV3KCAleyRTZWxmfSApOwogICAgJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0tPm5ldyggJXskU2VsZn0gKTsKICAgICRTZWxmLT57TGlua09iamVjdH0gICAgICAgICAgID0gS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QtPm5ldyggJXskU2VsZn0gKTsKICAgICRTZWxmLT57U3RhdHNPYmplY3R9ICAgICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlN0YXRzLT5uZXcoCiAgICAgICAgJXskU2VsZn0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgJFNlbGYtPntDYWNoZUludGVybmFsT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpDYWNoZUludGVybmFsLT5uZXcoCiAgICAgICAgJXskU2VsZn0sCiAgICAgICAgVHlwZSA9PiAnR3JvdXAnLAogICAgICAgIFRUTCAgPT4gNjAgKiA2MCAqIDMsCiAgICApOwoKICAgICMgZGVmaW5lIGZpbGUgcHJlZml4IGZvciBzdGF0cwogICAgJFNlbGYtPntGaWxlUHJlZml4fSA9ICdJVFNNU3RhdHMnOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gQ29kZUluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIGluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZUluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlSW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWRkIHRoZSBncm91cCBpdHNtLWNvbmZpZ2l0ZW0KICAgICRTZWxmLT5fR3JvdXBBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2l0c20tY29uZmlnaXRlbScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0dyb3VwIGZvciBJVFNNIENvbmZpZ0l0ZW0gbWFzayBhY2Nlc3MgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nLAogICAgKTsKCiAgICAjIGluc3RhbGwgY29uZmlnIGl0ZW0gZGVmaW5pdGlvbnMKICAgICRTZWxmLT5fQWRkQ29uZmlnSXRlbURlZmluaXRpb25zKCk7CgogICAgIyBmaWxsdXAgZW1wdHkgbGFzdF92ZXJzaW9uX2lkIHJvd3MgaW4gY29uZmlnaXRlbSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eUxhc3RWZXJzaW9uSUQoKTsKCiAgICAjIGZpbGx1cCBlbXB0eSBpbmNpX3N0YXRlX2lkIHJvd3MgaW4gY29uZmlnaXRlbV92ZXJzaW9uIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5VmVyc2lvbkluY2lkZW50U3RhdGVJRCgpOwoKICAgICMgZmlsbHVwIGVtcHR5IGN1cl9kZXBsX3N0YXRlX2lkIG9yIGN1cl9pbmNpX3N0YXRlX2lkIHJvd3MgaW4gY29uZmlnaXRlbSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eUluY2lkZW50QW5kRGVwbG95bWVudFN0YXRlSUQoKTsKCiAgICAjIHNldCBwcmVmZXJlbmNlcyBmb3Igc29tZSBjb25maWcgaXRlbXMKICAgICRTZWxmLT5fU2V0UHJlZmVyZW5jZXMoKTsKCiAgICAjIHNldCBkZWZhdWx0IHBlcm1pc3Npb24gZ3JvdXAKICAgICRTZWxmLT5fU2V0RGVmYXVsdFBlcm1pc3Npb24oKTsKCiAgICAjIGZpbGx1cCBlbXB0eSAnQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMnIHNlcnZpY2UgcHJlZmVyZW5jZXMKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcygpOwoKICAgICMgaW5zdGFsbCBzdGF0cwogICAgJFNlbGYtPntTdGF0c09iamVjdH0tPlN0YXRzSW5zdGFsbCgKICAgICAgICBGaWxlUHJlZml4ID0+ICRTZWxmLT57RmlsZVByZWZpeH0sCiAgICApOwoKICAgICMgZGVsZXRlIHRoZSBncm91cCBjYWNoZSB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIENJIHBlcm1pc3Npb25zCiAgICAkU2VsZi0+e0NhY2hlSW50ZXJuYWxPYmplY3R9LT5DbGVhblVwKCBPdGhlclR5cGUgPT4gJ0dyb3VwJyApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlUmVpbnN0YWxsKCkKCnJ1biB0aGUgY29kZSByZWluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVJlaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVSZWluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFkZCB0aGUgZ3JvdXAgaXRzbS1jb25maWdpdGVtCiAgICAkU2VsZi0+X0dyb3VwQWRkKAogICAgICAgIE5hbWUgICAgICAgID0+ICdpdHNtLWNvbmZpZ2l0ZW0nLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdHcm91cCBmb3IgSVRTTSBDb25maWdJdGVtIG1hc2sgYWNjZXNzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJywKICAgICk7CgogICAgIyBpbnN0YWxsIGNvbmZpZyBpdGVtIGRlZmluaXRpb25zCiAgICAkU2VsZi0+X0FkZENvbmZpZ0l0ZW1EZWZpbml0aW9ucygpOwoKICAgICMgZmlsbHVwIGVtcHR5IGxhc3RfdmVyc2lvbl9pZCByb3dzIGluIGNvbmZpZ2l0ZW0gdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlMYXN0VmVyc2lvbklEKCk7CgogICAgIyBmaWxsdXAgZW1wdHkgaW5jaV9zdGF0ZV9pZCByb3dzIGluIGNvbmZpZ2l0ZW1fdmVyc2lvbiB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVZlcnNpb25JbmNpZGVudFN0YXRlSUQoKTsKCiAgICAjIGZpbGx1cCBlbXB0eSBjdXJfZGVwbF9zdGF0ZV9pZCBvciBjdXJfaW5jaV9zdGF0ZV9pZCByb3dzIGluIGNvbmZpZ2l0ZW0gdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlJbmNpZGVudEFuZERlcGxveW1lbnRTdGF0ZUlEKCk7CgogICAgIyBzZXQgcHJlZmVyZW5jZXMgZm9yIHNvbWUgY29uZmlnIGl0ZW1zCiAgICAkU2VsZi0+X1NldFByZWZlcmVuY2VzKCk7CgogICAgIyBzZXQgZGVmYXVsdCBwZXJtaXNzaW9uIGdyb3VwCiAgICAkU2VsZi0+X1NldERlZmF1bHRQZXJtaXNzaW9uKCk7CgogICAgIyBmaWxsdXAgZW1wdHkgJ0N1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzJyBzZXJ2aWNlIHByZWZlcmVuY2VzCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5Q3VySW5jaVN0YXRlVHlwZUZyb21DSXMoKTsKCiAgICAjIGluc3RhbGwgc3RhdHMKICAgICRTZWxmLT57U3RhdHNPYmplY3R9LT5TdGF0c0luc3RhbGwoCiAgICAgICAgRmlsZVByZWZpeCA9PiAkU2VsZi0+e0ZpbGVQcmVmaXh9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ29kZVVwZ3JhZGUoKQoKcnVuIHRoZSBjb2RlIHVwZ3JhZGUgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVwZ3JhZGUoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgaW5zdGFsbCBjb25maWcgaXRlbSBkZWZpbml0aW9ucwogICAgJFNlbGYtPl9BZGRDb25maWdJdGVtRGVmaW5pdGlvbnMoKTsKCiAgICAjIGZpbGx1cCBlbXB0eSBsYXN0X3ZlcnNpb25faWQgcm93cyBpbiBjb25maWdpdGVtIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5TGFzdFZlcnNpb25JRCgpOwoKICAgICMgZmlsbHVwIGVtcHR5IGluY2lfc3RhdGVfaWQgcm93cyBpbiBjb25maWdpdGVtX3ZlcnNpb24gdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlWZXJzaW9uSW5jaWRlbnRTdGF0ZUlEKCk7CgogICAgIyBmaWxsdXAgZW1wdHkgY3VyX2RlcGxfc3RhdGVfaWQgb3IgY3VyX2luY2lfc3RhdGVfaWQgcm93cyBpbiBjb25maWdpdGVtIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5SW5jaWRlbnRBbmREZXBsb3ltZW50U3RhdGVJRCgpOwoKICAgICMgc2V0IHByZWZlcmVuY2VzIGZvciBzb21lIGNvbmZpZyBpdGVtcwogICAgJFNlbGYtPl9TZXRQcmVmZXJlbmNlcygpOwoKICAgICMgc2V0IGRlZmF1bHQgcGVybWlzc2lvbiBncm91cAogICAgJFNlbGYtPl9TZXREZWZhdWx0UGVybWlzc2lvbigpOwoKICAgICMgZmlsbHVwIGVtcHR5ICdDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcycgc2VydmljZSBwcmVmZXJlbmNlcwogICAgJFNlbGYtPl9GaWxsdXBFbXB0eUN1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzKCk7CgogICAgIyBpbnN0YWxsIHN0YXRzCiAgICAkU2VsZi0+e1N0YXRzT2JqZWN0fS0+U3RhdHNJbnN0YWxsKAogICAgICAgIEZpbGVQcmVmaXggPT4gJFNlbGYtPntGaWxlUHJlZml4fSwKICAgICk7CgogICAgIyBkZWxldGUgdGhlIGdyb3VwIGNhY2hlIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggQ0kgcGVybWlzc2lvbnMKICAgICRTZWxmLT57Q2FjaGVJbnRlcm5hbE9iamVjdH0tPkNsZWFuVXAoIE90aGVyVHlwZSA9PiAnR3JvdXAnICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvZGVVbmluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIHVuaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVW5pbnN0YWxsKCk7Cgo9Y3V0CgpzdWIgQ29kZVVuaW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZGVsZXRlIGFsbCBsaW5rcyB3aXRoIGNvbmZpZyBpdGVtcwogICAgJFNlbGYtPl9MaW5rRGVsZXRlKCk7CgogICAgIyBkZWFjdGl2YXRlIHRoZSBncm91cCBpdHNtLWNvbmZpZ2l0ZW0KICAgICRTZWxmLT5fR3JvdXBEZWFjdGl2YXRlKAogICAgICAgIE5hbWUgPT4gJ2l0c20tY29uZmlnaXRlbScsCiAgICApOwoKICAgICMgZGVsZXRlICdDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcycgc2VydmljZSBwcmVmZXJlbmNlcwogICAgJFNlbGYtPl9EZWxldGVTZXJ2aWNlUHJlZmVyZW5jZXMoKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX1NldFByZWZlcmVuY2VzKCkKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9TZXRQcmVmZXJlbmNlcygpCgo9Y3V0CgpzdWIgX1NldFByZWZlcmVuY2VzIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgbXkgJU1hcCA9ICgKICAgICAgICBFeHBpcmVkICAgICA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgSW5hY3RpdmUgICAgPT4gJ3Bvc3Rwcm9kdWN0aXZlJywKICAgICAgICBNYWludGVuYW5jZSA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgUGlsb3QgICAgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgIFBsYW5uZWQgICAgID0+ICdwcmVwcm9kdWN0aXZlJywKICAgICAgICBQcm9kdWN0aW9uICA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgUmVwYWlyICAgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgIFJldGlyZWQgICAgID0+ICdwb3N0cHJvZHVjdGl2ZScsCiAgICAgICAgUmV2aWV3ICAgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICdUZXN0L1FBJyAgID0+ICdwcmVwcm9kdWN0aXZlJywKICAgICk7CgogICAgTkFNRToKICAgIGZvciBteSAkTmFtZSAoIGtleXMgJU1hcCApIHsKICAgICAgICBteSAkSXRlbSA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtR2V0KAogICAgICAgICAgICBOYW1lICA9PiAkTmFtZSwKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBOQU1FIGlmICEkSXRlbTsKCiAgICAgICAgJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkSXRlbS0+e0l0ZW1JRH0sCiAgICAgICAgICAgIEtleSAgICA9PiAnRnVuY3Rpb25hbGl0eScsCiAgICAgICAgICAgIFZhbHVlICA9PiAkTWFweyROYW1lfSwKICAgICAgICApOwogICAgfQp9Cgo9aXRlbSBfU2V0RGVmYXVsdFBlcm1pc3Npb24oKQoKc2V0IHRoZSBkZWZhdWx0IGdyb3VwIHRoYXQgaGFzIGFjY2VzcyByaWdodHMKCj1jdXQKCnN1YiBfU2V0RGVmYXVsdFBlcm1pc3Npb24gewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIGdldCBjbGFzcyBsaXN0CiAgICBteSAkQ2xhc3NMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICApOwoKICAgICMgY2hlY2sgaWYgZ3JvdXAgYWxyZWFkeSBleGlzdHMKICAgIG15ICRHcm91cElEID0gJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwTG9va3VwKAogICAgICAgIEdyb3VwICA9PiAnaXRzbS1jb25maWdpdGVtJywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBjaGVjayBpZiBhIHBlcm1pc3Npb24gZ3JvdXAgaXMgYWxyZWFkeSBzZXQuIElmIG5vdCwgc2V0IGRlZmF1bHQgcGVybWlzc2lvbiBncm91cAogICAgZm9yIG15ICRDbGFzc0lEICgga2V5cyAleyRDbGFzc0xpc3R9ICkgewogICAgICAgIG15ICRDbGFzcyA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtR2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJENsYXNzSUQsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJENsYXNzLT57UGVybWlzc2lvbn0gKSB7CiAgICAgICAgICAgICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KAogICAgICAgICAgICAgICAgSXRlbUlEID0+ICRDbGFzcy0+e0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBLZXkgICAgPT4gJ1Blcm1pc3Npb24nLAogICAgICAgICAgICAgICAgVmFsdWUgID0+ICRHcm91cElELAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KfQoKPWl0ZW0gX0dyb3VwQWRkKCkKCmFkZCBhIGdyb3VwCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fR3JvdXBBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3RoZS1ncm91cC1uYW1lJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGhlIGdyb3VwIGRlc2NyaXB0aW9uLicsCiAgICApOwoKPWN1dAoKc3ViIF9Hcm91cEFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIERlc2NyaXB0aW9uKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ID0gJFNlbGYtPntWYWxpZE9iamVjdH0tPlZhbGlkTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAjIGdldCBsaXN0IG9mIGFsbCBncm91cHMKICAgIG15ICVHcm91cExpc3QgPSAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBMaXN0KCk7CgogICAgIyByZXZlcnNlIHRoZSBncm91cCBsaXN0IGZvciBlYXNpZXIgbG9va3VwCiAgICBteSAlR3JvdXBMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJUdyb3VwTGlzdDsKCiAgICAjIGNoZWNrIGlmIGdyb3VwIGFscmVhZHkgZXhpc3RzCiAgICBteSAkR3JvdXBJRCA9ICRHcm91cExpc3RSZXZlcnNleyAkUGFyYW17TmFtZX0gfTsKCiAgICAjIHJlYWN0aXZhdGUgdGhlIGdyb3VwCiAgICBpZiAoJEdyb3VwSUQpIHsKCiAgICAgICAgIyBnZXQgY3VycmVudCBncm91cCBkYXRhCiAgICAgICAgbXkgJUdyb3VwRGF0YSA9ICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cEdldCgKICAgICAgICAgICAgSUQgICAgID0+ICRHcm91cElELAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIHJlYWN0aXZhdGUgZ3JvdXAKICAgICAgICAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBVcGRhdGUoCiAgICAgICAgICAgICVHcm91cERhdGEsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgIyBhZGQgdGhlIGdyb3VwCiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cEFkZCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIENvbW1lbnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9ufSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgbG9va3VwIHRoZSBuZXcgZ3JvdXAgaWQKICAgIG15ICROZXdHcm91cElEID0gJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwTG9va3VwKAogICAgICAgIEdyb3VwICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICMgYWRkIHVzZXIgcm9vdCB0byB0aGUgZ3JvdXAKICAgICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cE1lbWJlckFkZCgKICAgICAgICBHSUQgICAgICAgID0+ICROZXdHcm91cElELAogICAgICAgIFVJRCAgICAgICAgPT4gMSwKICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgcm8gICAgICAgID0+IDEsCiAgICAgICAgICAgIG1vdmVfaW50byA9PiAxLAogICAgICAgICAgICBjcmVhdGUgICAgPT4gMSwKICAgICAgICAgICAgb3duZXIgICAgID0+IDEsCiAgICAgICAgICAgIHByaW9yaXR5ICA9PiAxLAogICAgICAgICAgICBydyAgICAgICAgPT4gMSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0dyb3VwRGVhY3RpdmF0ZSgpCgpkZWFjdGl2YXRlIGEgZ3JvdXAKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9Hcm91cERlYWN0aXZhdGUoCiAgICAgICAgTmFtZSA9PiAndGhlLWdyb3VwLW5hbWUnLAogICAgKTsKCj1jdXQKCnN1YiBfR3JvdXBEZWFjdGl2YXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgTmFtZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9va3VwIGdyb3VwIGlkCiAgICBteSAkR3JvdXBJRCA9ICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cExvb2t1cCgKICAgICAgICBHcm91cCA9PiAkUGFyYW17TmFtZX0sCiAgICApOwoKICAgIHJldHVybiBpZiAhJEdyb3VwSUQ7CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCA9ICRTZWxmLT57VmFsaWRPYmplY3R9LT5WYWxpZExpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgbXkgJVZhbGlkTGlzdFJldmVyc2UgPSByZXZlcnNlICVWYWxpZExpc3Q7CgogICAgIyBnZXQgY3VycmVudCBncm91cCBkYXRhCiAgICBteSAlR3JvdXBEYXRhID0gJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwR2V0KAogICAgICAgIElEICAgICA9PiAkR3JvdXBJRCwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBkZWFjdGl2YXRlIGdyb3VwCiAgICAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBVcGRhdGUoCiAgICAgICAgJUdyb3VwRGF0YSwKICAgICAgICBWYWxpZElEID0+ICRWYWxpZExpc3RSZXZlcnNle2ludmFsaWR9LAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9BZGRDb25maWdJdGVtRGVmaW5pdGlvbnMoKQoKaW5zdGFsbHMgQ29uZmlnSXRlbSBkZWZpbml0aW9ucwoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0FkZENvbmZpZ0l0ZW1EZWZpbml0aW9ucygpOwoKPWN1dAoKc3ViIF9BZGRDb25maWdJdGVtRGVmaW5pdGlvbnMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNvbmZpZyBpdGVtIGRlZmluaXRpb25zCiAgICBteSAlRGVmaW5pdGlvbiA9ICgKICAgICAgICBDb21wdXRlciA9PiAiWwogICAgewogICAgICAgIEtleSA9PiAnVmVuZG9yJywKICAgICAgICBOYW1lID0+ICdWZW5kb3InLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgICAgICAgICBTaXplID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCgogICAgICAgICAgICAjIEV4YW1wbGUgZm9yIENJIGF0dHJpYnV0ZSBzeW50YXggY2hlY2sgZm9yIHRleHQgYW5kIHRleHRhcmVhIGZpZWxkcwogICAgICAgICAgICAjUmVnRXggICAgICAgICAgICAgPT4gJ15BQkMuKicsCiAgICAgICAgICAgICNSZWdFeEVycm9yTWVzc2FnZSA9PiAnVmFsdWUgbXVzdCBzdGFydCB3aXRoIFwiQUJDXCIhJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgPT4gJ01vZGVsJywKICAgICAgICBOYW1lID0+ICdNb2RlbCcsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dCcsCiAgICAgICAgICAgIFNpemUgPT4gNTAsCiAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgPT4gJ0Rlc2NyaXB0aW9uJywKICAgICAgICBOYW1lID0+ICdEZXNjcmlwdGlvbicsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dEFyZWEnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSA9PiAnVHlwZScsCiAgICAgICAgTmFtZSA9PiAnVHlwZScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnR2VuZXJhbENhdGFsb2cnLAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q29tcHV0ZXI6OlR5cGUnLAogICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSA9PiAnT3duZXInLAogICAgICAgIE5hbWUgPT4gJ093bmVyJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICBUeXBlID0+ICdDdXN0b21lcicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ID0+ICdTZXJpYWxOdW1iZXInLAogICAgICAgIE5hbWUgPT4gJ1NlcmlhbCBOdW1iZXInLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgICAgICAgICBTaXplID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gMTAwLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSA9PiAnT3BlcmF0aW5nU3lzdGVtJywKICAgICAgICBOYW1lID0+ICdPcGVyYXRpbmcgU3lzdGVtJywKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgICAgICAgICBTaXplID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gMTAwLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSA9PiAnQ1BVJywKICAgICAgICBOYW1lID0+ICdDUFUnLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dCcsCiAgICAgICAgICAgIFNpemUgPT4gNTAsCiAgICAgICAgICAgIE1heExlbmd0aCA9PiAxMDAsCiAgICAgICAgfSwKICAgICAgICBDb3VudE1heCA9PiAxNiwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ID0+ICdSYW0nLAogICAgICAgIE5hbWUgPT4gJ1JhbScsCiAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICAgICAgU2l6ZSA9PiA1MCwKICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDEwMCwKICAgICAgICB9LAogICAgICAgIENvdW50TWF4ID0+IDEwLAogICAgfSwKICAgIHsKICAgICAgICBLZXkgPT4gJ0hhcmREaXNrJywKICAgICAgICBOYW1lID0+ICdIYXJkIERpc2snLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dCcsCiAgICAgICAgICAgIFNpemUgPT4gNTAsCiAgICAgICAgICAgIE1heExlbmd0aCA9PiAxMDAsCiAgICAgICAgfSwKICAgICAgICBDb3VudE1heCA9PiAxMCwKICAgICAgICBTdWIgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgPT4gJ0NhcGFjaXR5JywKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NhcGFjaXR5JywKICAgICAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBTaXplID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiAxMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ID0+ICdGUUROJywKICAgICAgICBOYW1lID0+ICdGUUROJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICAgICAgU2l6ZSA9PiA1MCwKICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDEwMCwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgPT4gJ05JQycsCiAgICAgICAgTmFtZSA9PiAnTmV0d29yayBBZGFwdGVyJywKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgICAgICAgICBTaXplID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gMTAwLAogICAgICAgICAgICBSZXF1aXJlZCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQ291bnRNaW4gPT4gMCwKICAgICAgICBDb3VudE1heCA9PiAxMCwKICAgICAgICBDb3VudERlZmF1bHQgPT4gMSwKICAgICAgICBTdWIgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgPT4gJ0lQb3ZlckRIQ1AnLAogICAgICAgICAgICAgICAgTmFtZSA9PiAnSVAgb3ZlciBESENQJywKICAgICAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdHZW5lcmFsQ2F0YWxvZycsCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06Olllc05vJywKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgICAgIFJlcXVpcmVkID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgPT4gJ0lQQWRkcmVzcycsCiAgICAgICAgICAgICAgICBOYW1lID0+ICdJUCBBZGRyZXNzJywKICAgICAgICAgICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBTaXplID0+IDQwLAogICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiA0MCwKICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZCA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIENvdW50TWluID0+IDAsCiAgICAgICAgICAgICAgICBDb3VudE1heCA9PiAyMCwKICAgICAgICAgICAgICAgIENvdW50RGVmYXVsdCA9PiAwLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIEtleSA9PiAnR3JhcGhpY0FkYXB0ZXInLAogICAgICAgIE5hbWUgPT4gJ0dyYXBoaWMgQWRhcHRlcicsCiAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICAgICAgU2l6ZSA9PiA1MCwKICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDEwMCwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgPT4gJ090aGVyRXF1aXBtZW50JywKICAgICAgICBOYW1lID0+ICdPdGhlciBFcXVpcG1lbnQnLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dEFyZWEnLAogICAgICAgICAgICBSZXF1aXJlZCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQ291bnRNaW4gPT4gMCwKICAgICAgICBDb3VudERlZmF1bHQgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ID0+ICdXYXJyYW50eUV4cGlyYXRpb25EYXRlJywKICAgICAgICBOYW1lID0+ICdXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ0RhdGUnLAogICAgICAgICAgICBZZWFyUGVyaW9kUGFzdCA9PiAyMCwKICAgICAgICAgICAgWWVhclBlcmlvZEZ1dHVyZSA9PiAxMCwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgPT4gJ0luc3RhbGxEYXRlJywKICAgICAgICBOYW1lID0+ICdJbnN0YWxsIERhdGUnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ0RhdGUnLAogICAgICAgICAgICBSZXF1aXJlZCA9PiAxLAogICAgICAgICAgICBZZWFyUGVyaW9kUGFzdCA9PiAyMCwKICAgICAgICAgICAgWWVhclBlcmlvZEZ1dHVyZSA9PiAxMCwKICAgICAgICB9LAogICAgICAgIENvdW50TWluID0+IDAsCiAgICAgICAgQ291bnREZWZhdWx0ID0+IDAsCiAgICB9LAogICAgewogICAgICAgIEtleSA9PiAnTm90ZScsCiAgICAgICAgTmFtZSA9PiAnTm90ZScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dEFyZWEnLAogICAgICAgICAgICBSZXF1aXJlZCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQ291bnRNaW4gPT4gMCwKICAgICAgICBDb3VudERlZmF1bHQgPT4gMCwKICAgIH0sCl07IiwKICAgICAgICBIYXJkd2FyZSA9PiAiWwogICAgewogICAgICAgIEtleSA9PiAnVmVuZG9yJywKICAgICAgICBOYW1lID0+ICdWZW5kb3InLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgICAgICAgICBTaXplID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ID0+ICdNb2RlbCcsCiAgICAgICAgTmFtZSA9PiAnTW9kZWwnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgICAgICAgICBTaXplID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ID0+ICdEZXNjcmlwdGlvbicsCiAgICAgICAgTmFtZSA9PiAnRGVzY3JpcHRpb24nLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHRBcmVhJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgPT4gJ1R5cGUnLAogICAgICAgIE5hbWUgPT4gJ1R5cGUnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ0dlbmVyYWxDYXRhbG9nJywKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkhhcmR3YXJlOjpUeXBlJywKICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgPT4gJ093bmVyJywKICAgICAgICBOYW1lID0+ICdPd25lcicsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnQ3VzdG9tZXInLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSA9PiAnU2VyaWFsTnVtYmVyJywKICAgICAgICBOYW1lID0+ICdTZXJpYWwgTnVtYmVyJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICAgICAgU2l6ZSA9PiA1MCwKICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDEwMCwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgPT4gJ1dhcnJhbnR5RXhwaXJhdGlvbkRhdGUnLAogICAgICAgIE5hbWUgPT4gJ1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnRGF0ZScsCiAgICAgICAgICAgIFllYXJQZXJpb2RQYXN0ID0+IDIwLAogICAgICAgICAgICBZZWFyUGVyaW9kRnV0dXJlID0+IDEwLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSA9PiAnSW5zdGFsbERhdGUnLAogICAgICAgIE5hbWUgPT4gJ0luc3RhbGwgRGF0ZScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnRGF0ZScsCiAgICAgICAgICAgIFJlcXVpcmVkID0+IDEsCiAgICAgICAgICAgIFllYXJQZXJpb2RQYXN0ID0+IDIwLAogICAgICAgICAgICBZZWFyUGVyaW9kRnV0dXJlID0+IDEwLAogICAgICAgIH0sCiAgICAgICAgQ291bnRNaW4gPT4gMCwKICAgICAgICBDb3VudE1heCA9PiAxLAogICAgICAgIENvdW50RGVmYXVsdCA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBLZXkgPT4gJ05vdGUnLAogICAgICAgIE5hbWUgPT4gJ05vdGUnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHRBcmVhJywKICAgICAgICAgICAgUmVxdWlyZWQgPT4gMSwKICAgICAgICB9LAogICAgICAgIENvdW50TWluID0+IDAsCiAgICAgICAgQ291bnRNYXggPT4gMSwKICAgICAgICBDb3VudERlZmF1bHQgPT4gMCwKICAgIH0sCl07IiwKICAgICAgICBMb2NhdGlvbiA9PiAiWwogICAgewogICAgICAgIEtleSA9PiAnVHlwZScsCiAgICAgICAgTmFtZSA9PiAnVHlwZScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnR2VuZXJhbENhdGFsb2cnLAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6TG9jYXRpb246OlR5cGUnLAogICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSA9PiAnUGhvbmUxJywKICAgICAgICBOYW1lID0+ICdQaG9uZSAxJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICAgICAgU2l6ZSA9PiA1MCwKICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDEwMCwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgPT4gJ1Bob25lMicsCiAgICAgICAgTmFtZSA9PiAnUGhvbmUgMicsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dCcsCiAgICAgICAgICAgIFNpemUgPT4gNTAsCiAgICAgICAgICAgIE1heExlbmd0aCA9PiAxMDAsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ID0+ICdGYXgnLAogICAgICAgIE5hbWUgPT4gJ0ZheCcsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dCcsCiAgICAgICAgICAgIFNpemUgPT4gNTAsCiAgICAgICAgICAgIE1heExlbmd0aCA9PiAxMDAsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ID0+ICdFLU1haWwnLAogICAgICAgIE5hbWUgPT4gJ0UtTWFpbCcsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dCcsCiAgICAgICAgICAgIFNpemUgPT4gNTAsCiAgICAgICAgICAgIE1heExlbmd0aCA9PiAxMDAsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ID0+ICdBZGRyZXNzJywKICAgICAgICBOYW1lID0+ICdBZGRyZXNzJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICBUeXBlID0+ICdUZXh0QXJlYScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ID0+ICdOb3RlJywKICAgICAgICBOYW1lID0+ICdOb3RlJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICBUeXBlID0+ICdUZXh0QXJlYScsCiAgICAgICAgICAgIFJlcXVpcmVkID0+IDEsCiAgICAgICAgfSwKICAgICAgICBDb3VudE1pbiA9PiAwLAogICAgICAgIENvdW50RGVmYXVsdCA9PiAwLAogICAgfSwKXTsiLAogICAgICAgIE5ldHdvcmsgPT4gIlsKICAgIHsKICAgICAgICBLZXkgPT4gJ0Rlc2NyaXB0aW9uJywKICAgICAgICBOYW1lID0+ICdEZXNjcmlwdGlvbicsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dEFyZWEnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSA9PiAnVHlwZScsCiAgICAgICAgTmFtZSA9PiAnVHlwZScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnR2VuZXJhbENhdGFsb2cnLAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6TmV0d29yazo6VHlwZScsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ID0+ICdOZXR3b3JrQWRkcmVzcycsCiAgICAgICAgTmFtZSA9PiAnTmV0d29yayBBZGRyZXNzJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICAgICAgU2l6ZSA9PiAzMCwKICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDIwLAogICAgICAgICAgICBSZXF1aXJlZCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQ291bnRNaW4gPT4gMCwKICAgICAgICBDb3VudE1heCA9PiAxMDAsCiAgICAgICAgQ291bnREZWZhdWx0ID0+IDEsCiAgICAgICAgU3ViID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ID0+ICdTdWJuZXRNYXNrJywKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N1Ym5ldCBNYXNrJywKICAgICAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBTaXplID0+IDMwLAogICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBWYWx1ZURlZmF1bHQgPT4gJzI1NS4yNTUuMjU1LjAnLAogICAgICAgICAgICAgICAgICAgIFJlcXVpcmVkID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ291bnRNaW4gPT4gMCwKICAgICAgICAgICAgICAgIENvdW50TWF4ID0+IDEsCiAgICAgICAgICAgICAgICBDb3VudERlZmF1bHQgPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ID0+ICdHYXRld2F5JywKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0dhdGV3YXknLAogICAgICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIFNpemUgPT4gMzAsCiAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDIwLAogICAgICAgICAgICAgICAgICAgIFJlcXVpcmVkID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ291bnRNaW4gPT4gMCwKICAgICAgICAgICAgICAgIENvdW50TWF4ID0+IDEwLAogICAgICAgICAgICAgICAgQ291bnREZWZhdWx0ID0+IDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ID0+ICdOb3RlJywKICAgICAgICBOYW1lID0+ICdOb3RlJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICBUeXBlID0+ICdUZXh0QXJlYScsCiAgICAgICAgICAgIFJlcXVpcmVkID0+IDEsCiAgICAgICAgfSwKICAgICAgICBDb3VudE1pbiA9PiAwLAogICAgICAgIENvdW50TWF4ID0+IDEsCiAgICAgICAgQ291bnREZWZhdWx0ID0+IDAsCiAgICB9LApdOyIsCiAgICAgICAgU29mdHdhcmUgPT4gIlsKICAgIHsKICAgICAgICBLZXkgPT4gJ1ZlbmRvcicsCiAgICAgICAgTmFtZSA9PiAnVmVuZG9yJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICAgICAgU2l6ZSA9PiA1MCwKICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDUwLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSA9PiAnVmVyc2lvbicsCiAgICAgICAgTmFtZSA9PiAnVmVyc2lvbicsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dCcsCiAgICAgICAgICAgIFNpemUgPT4gNTAsCiAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgPT4gJ0Rlc2NyaXB0aW9uJywKICAgICAgICBOYW1lID0+ICdEZXNjcmlwdGlvbicsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dEFyZWEnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSA9PiAnVHlwZScsCiAgICAgICAgTmFtZSA9PiAnVHlwZScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnR2VuZXJhbENhdGFsb2cnLAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6U29mdHdhcmU6OlR5cGUnLAogICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSA9PiAnT3duZXInLAogICAgICAgIE5hbWUgPT4gJ093bmVyJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICBUeXBlID0+ICdDdXN0b21lcicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ID0+ICdTZXJpYWxOdW1iZXInLAogICAgICAgIE5hbWUgPT4gJ1NlcmlhbCBOdW1iZXInLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgICAgICAgICBTaXplID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ID0+ICdMaWNlbmNlVHlwZScsCiAgICAgICAgTmFtZSA9PiAnTGljZW5jZSBUeXBlJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICBUeXBlID0+ICdHZW5lcmFsQ2F0YWxvZycsCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpTb2Z0d2FyZTo6TGljZW5jZVR5cGUnLAogICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSA9PiAnTGljZW5jZUtleScsCiAgICAgICAgTmFtZSA9PiAnTGljZW5jZSBLZXknLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgICAgICAgICBTaXplID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgICAgIFJlcXVpcmVkID0+IDEsCiAgICAgICAgfSwKICAgICAgICBDb3VudE1pbiA9PiAwLAogICAgICAgIENvdW50TWF4ID0+IDEwMCwKICAgICAgICBDb3VudERlZmF1bHQgPT4gMCwKICAgICAgICBTdWIgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgPT4gJ1F1YW50aXR5JywKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1F1YW50aXR5JywKICAgICAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdJbnRlZ2VyJywKICAgICAgICAgICAgICAgICAgICBWYWx1ZU1pbiA9PiAxLAogICAgICAgICAgICAgICAgICAgIFZhbHVlTWF4ID0+IDEwMDAsCiAgICAgICAgICAgICAgICAgICAgVmFsdWVEZWZhdWx0ID0+IDEsCiAgICAgICAgICAgICAgICAgICAgUmVxdWlyZWQgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBDb3VudE1pbiA9PiAwLAogICAgICAgICAgICAgICAgQ291bnRNYXggPT4gMSwKICAgICAgICAgICAgICAgIENvdW50RGVmYXVsdCA9PiAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgPT4gJ0V4cGlyYXRpb25EYXRlJywKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0V4cGlyYXRpb24gRGF0ZScsCiAgICAgICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnRGF0ZScsCiAgICAgICAgICAgICAgICAgICAgUmVxdWlyZWQgPT4gMSwKICAgICAgICAgICAgICAgICAgICBZZWFyUGVyaW9kUGFzdCA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBZZWFyUGVyaW9kRnV0dXJlID0+IDEwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIENvdW50TWluID0+IDAsCiAgICAgICAgICAgICAgICBDb3VudE1heCA9PiAxLAogICAgICAgICAgICAgICAgQ291bnREZWZhdWx0ID0+IDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ID0+ICdNZWRpYScsCiAgICAgICAgTmFtZSA9PiAnTWVkaWEnLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dCcsCiAgICAgICAgICAgIFNpemUgPT4gNDAsCiAgICAgICAgICAgIE1heExlbmd0aCA9PiAyMCwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgPT4gJ05vdGUnLAogICAgICAgIE5hbWUgPT4gJ05vdGUnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHRBcmVhJywKICAgICAgICAgICAgUmVxdWlyZWQgPT4gMSwKICAgICAgICB9LAogICAgICAgIENvdW50TWluID0+IDAsCiAgICAgICAgQ291bnRNYXggPT4gMSwKICAgICAgICBDb3VudERlZmF1bHQgPT4gMCwKICAgIH0sCl07IiwKICAgICk7CgogICAgIyBnZXQgbGlzdCBvZiBpbnN0YWxsZWQgY29uZmlnIGl0ZW0gY2xhc3NlcwogICAgbXkgJENsYXNzTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgKTsKICAgIG15ICVSZXZlcnNlQ2xhc3NMaXN0ID0gcmV2ZXJzZSAleyRDbGFzc0xpc3R9OwoKICAgIENMQVNTTkFNRToKICAgIGZvciBteSAkQ2xhc3NOYW1lICggc29ydCB7IGxjICRhIGNtcCBsYyAkYiB9IGtleXMgJURlZmluaXRpb24gKSB7CgogICAgICAgICMgY2hlY2sgaWYgY2xhc3MgZXhpc3RzCiAgICAgICAgbXkgJENsYXNzSUQgPSAkUmV2ZXJzZUNsYXNzTGlzdHskQ2xhc3NOYW1lfTsKCiAgICAgICAgbmV4dCBDTEFTU05BTUUgaWYgISRDbGFzc0lEOwoKICAgICAgICAjIGNoZWNrIGlmIGRlZmluaXRpb24gYWxyZWFkeSBleGlzdHMKICAgICAgICBteSAkRGVmaW5pdGlvbkxpc3QgPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5EZWZpbml0aW9uTGlzdCgKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NJRCwKICAgICAgICApOwoKICAgICAgICBuZXh0IENMQVNTTkFNRSBpZiAhZGVmaW5lZCAkRGVmaW5pdGlvbkxpc3Q7CiAgICAgICAgbmV4dCBDTEFTU05BTUUgaWYgJERlZmluaXRpb25MaXN0ICYmIHJlZiAkRGVmaW5pdGlvbkxpc3QgZXEgJ0FSUkFZJyAmJiBAeyREZWZpbml0aW9uTGlzdH07CgogICAgICAgICMgYWRkIHRoZSBuZXcgZGVmaW5pdGlvbgogICAgICAgICRTZWxmLT57Q29uZmlnSXRlbU9iamVjdH0tPkRlZmluaXRpb25BZGQoCiAgICAgICAgICAgIENsYXNzSUQgICAgPT4gJENsYXNzSUQsCiAgICAgICAgICAgIERlZmluaXRpb24gPT4gJERlZmluaXRpb257JENsYXNzTmFtZX0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfTGlua0RlbGV0ZSgpCgpkZWxldGUgYWxsIGV4aXN0aW5nIGxpbmtzIHRvIGNvbmZpZyBpdGVtcwoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0xpbmtEZWxldGUoKTsKCj1jdXQKCnN1YiBfTGlua0RlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGFsbCBjb25maWcgaXRlbXMKICAgIG15ICRDb25maWdJdGVtSURzID0gJFNlbGYtPntDb25maWdJdGVtT2JqZWN0fS0+Q29uZmlnSXRlbVNlYXJjaCgpOwoKICAgIHJldHVybiBpZiAhJENvbmZpZ0l0ZW1JRHM7CiAgICByZXR1cm4gaWYgcmVmICRDb25maWdJdGVtSURzIG5lICdBUlJBWSc7CgogICAgIyBkZWxldGUgdGhlIGNvbmZpZyBpdGVtIGxpbmtzCiAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIEB7JENvbmZpZ0l0ZW1JRHN9ICkgewogICAgICAgICRTZWxmLT57TGlua09iamVjdH0tPkxpbmtEZWxldGVBbGwoCiAgICAgICAgICAgIE9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgICAgICBLZXkgICAgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0ZpbGx1cEVtcHR5TGFzdFZlcnNpb25JRCgpCgpmaWxsdXAgZW1wdHkgZW50cmllcyBpbiB0aGUgbGFzdF92ZXJzaW9uX2lkIGNvbHVtbiBvZiB0aGUgY29uZmlnaXRlbSB0YWJsZQoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0ZpbGx1cEVtcHR5TGFzdFZlcnNpb25JRCgpOwoKPWN1dAoKc3ViIF9GaWxsdXBFbXB0eUxhc3RWZXJzaW9uSUQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjb25maWcgaXRlbXMgd2l0aCBlbXB0eSBsYXN0X3ZlcnNpb25faWQKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkIEZST00gY29uZmlnaXRlbSBXSEVSRSAnCiAgICAgICAgICAgIC4gJ2xhc3RfdmVyc2lvbl9pZCA9IDAgT1IgbGFzdF92ZXJzaW9uX2lkIElTIE5VTEwnLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBDb25maWdJdGVtSURzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBDb25maWdJdGVtSURzLCAkUm93WzBdOwogICAgfQoKICAgIENPTkZJR0lURU1JRDoKICAgIGZvciBteSAkQ29uZmlnSXRlbUlEIChAQ29uZmlnSXRlbUlEcykgewoKICAgICAgICAjIGdldCB0aGUgbGFzdCB2ZXJzaW9uIG9mIHRoaXMgY29uZmlnIGl0ZW0KICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBjb25maWdpdGVtX3ZlcnNpb24gJwogICAgICAgICAgICAgICAgLiAnV0hFUkUgY29uZmlnaXRlbV9pZCA9ID8gT1JERVIgQlkgaWQgREVTQycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRDb25maWdJdGVtSUQgXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgICAgICBteSAkVmVyc2lvbklEOwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRWZXJzaW9uSUQgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgISRWZXJzaW9uSUQ7CgogICAgICAgICMgdXBkYXRlIGluY2lfc3RhdGVfaWQKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnVVBEQVRFIGNvbmZpZ2l0ZW0gJwogICAgICAgICAgICAgICAgLiAnU0VUIGxhc3RfdmVyc2lvbl9pZCA9ID8gJwogICAgICAgICAgICAgICAgLiAnV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkVmVyc2lvbklELCBcJENvbmZpZ0l0ZW1JRCBdLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9GaWxsdXBFbXB0eVZlcnNpb25JbmNpZGVudFN0YXRlSUQoKQoKZmlsbHVwIGVtcHR5IGVudHJpZXMgaW4gdGhlIGluY2lfc3RhdGVfaWQgY29sdW1uIG9mIHRoZSBjb25maWdpdGVtX3ZlcnNpb24gdGFibGUKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9GaWxsdXBFbXB0eVZlcnNpb25JbmNpZGVudFN0YXRlSUQoKTsKCj1jdXQKCnN1YiBfRmlsbHVwRW1wdHlWZXJzaW9uSW5jaWRlbnRTdGF0ZUlEIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgb3BlcmF0aW9uYWwgaW5jaWRlbnQgc3RhdGUgbGlzdAogICAgbXkgJEluY2lTdGF0ZUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgICAgIFByZWZlcmVuY2VzID0+IHsKICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZXJyb3IgaGFuZGxpbmcKICAgIGlmICggISRJbmNpU3RhdGVMaXN0IHx8IHJlZiAkSW5jaVN0YXRlTGlzdCBuZSAnSEFTSCcgfHwgISV7JEluY2lTdGF0ZUxpc3R9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgZmluZCBhbnkgaXRlbSBpbiBnZW5lcmFsIGNhdGFsb2cgY2xhc3MgSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc29ydCBpZHMKICAgIG15IEBJbmNpU3RhdGVLZXlMaXN0ID0gc29ydCBrZXlzICV7JEluY2lTdGF0ZUxpc3R9OwoKICAgICMgdXBkYXRlIGluY2lfc3RhdGVfaWQKICAgIHJldHVybiAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICdVUERBVEUgY29uZmlnaXRlbV92ZXJzaW9uICcKICAgICAgICAgICAgLiAnU0VUIGluY2lfc3RhdGVfaWQgPSA/ICcKICAgICAgICAgICAgLiAnV0hFUkUgaW5jaV9zdGF0ZV9pZCA9IDAgT1IgaW5jaV9zdGF0ZV9pZCBJUyBOVUxMJywKICAgICAgICBCaW5kID0+IFsgXCRJbmNpU3RhdGVLZXlMaXN0WzBdIF0sCiAgICApOwp9Cgo9aXRlbSBfRmlsbHVwRW1wdHlJbmNpZGVudEFuZERlcGxveW1lbnRTdGF0ZUlEKCkKCmZpbGx1cCBlbXB0eSBlbnRyaWVzIGluIHRoZSBjdXJfZGVwbF9zdGF0ZV9pZCBvciBjdXJfaW5jaV9zdGF0ZV9pZCBjb2x1bW4gb2YgdGhlIGNvbmZpZ2l0ZW0gdGFibGUKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9GaWxsdXBFbXB0eUluY2lkZW50QW5kRGVwbG95bWVudFN0YXRlSUQoKTsKCj1jdXQKCnN1YiBfRmlsbHVwRW1wdHlJbmNpZGVudEFuZERlcGxveW1lbnRTdGF0ZUlEIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnIGl0ZW1zIHdpdGggZW1wdHkgY3VyX2RlcGxfc3RhdGVfaWQgb3IgY3VyX2luY2lfc3RhdGVfaWQKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkIEZST00gY29uZmlnaXRlbSBXSEVSRSAnCiAgICAgICAgICAgIC4gJ2N1cl9kZXBsX3N0YXRlX2lkID0gMCBPUiBjdXJfZGVwbF9zdGF0ZV9pZCBJUyBOVUxMIE9SICcKICAgICAgICAgICAgLiAnY3VyX2luY2lfc3RhdGVfaWQgPSAwIE9SIGN1cl9pbmNpX3N0YXRlX2lkIElTIE5VTEwnLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBDb25maWdJdGVtSURzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBDb25maWdJdGVtSURzLCAkUm93WzBdOwogICAgfQoKICAgIENPTkZJR0lURU1JRDoKICAgIGZvciBteSAkQ29uZmlnSXRlbUlEIChAQ29uZmlnSXRlbUlEcykgewoKICAgICAgICAjIGdldCBsYXN0IHZlcnNpb24KICAgICAgICBteSAkTGFzdFZlcnNpb24gPSAkU2VsZi0+e0NvbmZpZ0l0ZW1PYmplY3R9LT5WZXJzaW9uR2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICApOwoKICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAhJExhc3RWZXJzaW9uOwogICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmIHJlZiAkTGFzdFZlcnNpb24gbmUgJ0hBU0gnOwogICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmICEkTGFzdFZlcnNpb24tPntEZXBsU3RhdGVJRH07CiAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgISRMYXN0VmVyc2lvbi0+e0luY2lTdGF0ZUlEfTsKCiAgICAgICAgIyBjb21wbGV0ZSBjb25maWcgaXRlbQogICAgICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgU1FMID0+ICdVUERBVEUgY29uZmlnaXRlbSBTRVQgJwogICAgICAgICAgICAgICAgLiAnY3VyX2RlcGxfc3RhdGVfaWQgPSA/LCAnCiAgICAgICAgICAgICAgICAuICdjdXJfaW5jaV9zdGF0ZV9pZCA9ID8gJwogICAgICAgICAgICAgICAgLiAnV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICBcJExhc3RWZXJzaW9uLT57RGVwbFN0YXRlSUR9LAogICAgICAgICAgICAgICAgXCRMYXN0VmVyc2lvbi0+e0luY2lTdGF0ZUlEfSwKICAgICAgICAgICAgICAgIFwkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBdLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9GaWxsdXBFbXB0eUN1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzKCkKCkZpbGx1cCBlbXB0eSBlbnRyaWVzIGluIHRoZSBzZXJ2aWNlIHByZWZlcmVuY2VzIGZvciB0aGUga2V5ICdDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcycuClRoaXMgZmllbGQgc3RvcmVzIHRoZSBjdXJyZW50IGluY2lkZW50IHR5cGUgYXMgaW5mbHVlbmNlZCBieSBsaW5rZWQgQ0lzIG9mIGEgc2VydmljZS4KCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9GaWxsdXBFbXB0eUN1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzKCk7Cgo9Y3V0CgpzdWIgX0ZpbGx1cEVtcHR5Q3VySW5jaVN0YXRlVHlwZUZyb21DSXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBzZXJ2aWNlIGxpc3QKICAgIG15ICVTZXJ2aWNlTGlzdCA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VMaXN0KAogICAgICAgIFZhbGlkICA9PiAwLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIGdldCB0aGUgaW5jaWRlbnQgbGluayB0eXBlCiAgICBteSAkTGlua1R5cGUgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnSVRTTTo6Q29yZTo6SW5jaWRlbnRMaW5rVHlwZScpOwoKICAgIFNFUlZJQ0VJRDoKICAgIGZvciBteSAkU2VydmljZUlEICgga2V5cyAlU2VydmljZUxpc3QgKSB7CgogICAgICAgICMgZ2V0IHNlcnZpY2UgZGF0YQogICAgICAgIG15ICVTZXJ2aWNlID0gJFNlbGYtPntTZXJ2aWNlT2JqZWN0fS0+U2VydmljZUdldCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgb25seSBpZiB0aGUgQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMgaXMgbm90IHNldCB5ZXQKICAgICAgICBuZXh0IFNFUlZJQ0VJRCBpZiAkU2VydmljZXtDdXJJbmNpU3RhdGVUeXBlRnJvbUNJc307CgogICAgICAgICMgZmluZCBhbGwgbGlua2VkIGNvbmZpZyBpdGVtcwogICAgICAgIG15ICVMaW5rZWRDb25maWdJdGVtSURzID0gJFNlbGYtPntMaW5rT2JqZWN0fS0+TGlua0tleUxpc3RXaXRoRGF0YSgKICAgICAgICAgICAgT2JqZWN0MSA9PiAnU2VydmljZScsCiAgICAgICAgICAgIEtleTEgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgT2JqZWN0MiA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgICAgICBTdGF0ZSAgID0+ICdWYWxpZCcsCiAgICAgICAgICAgIFR5cGUgICAgPT4gJExpbmtUeXBlLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgZGVmYXVsdCBpbmNpZGVudCBzdGF0ZSB0eXBlCiAgICAgICAgbXkgJEN1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzID0gJ29wZXJhdGlvbmFsJzsKCiAgICAgICAgIyBpbnZlc3RpZ2F0ZSB0aGUgY3VycmVudCBpbmNpZGVudCBzdGF0ZSBvZiBlYWNoIGNvbmZpZyBpdGVtCiAgICAgICAgQ09ORklHSVRFTUlEOgogICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICgga2V5cyAlTGlua2VkQ29uZmlnSXRlbUlEcyApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCBjb25maWcgaXRlbSBkYXRhCiAgICAgICAgICAgIG15ICRDb25maWdJdGVtRGF0YSA9ICRMaW5rZWRDb25maWdJdGVtSURzeyRDb25maWdJdGVtSUR9OwoKICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgJENvbmZpZ0l0ZW1EYXRhLT57Q3VyRGVwbFN0YXRlVHlwZX0gbmUgJ3Byb2R1Y3RpdmUnOwogICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAkQ29uZmlnSXRlbURhdGEtPntDdXJJbmNpU3RhdGVUeXBlfSBlcSAnb3BlcmF0aW9uYWwnOwoKICAgICAgICAgICAgIyBjaGVjayBpZiBzZXJ2aWNlIG11c3QgYmUgc2V0IHRvICd3YXJuaW5nJwogICAgICAgICAgICBpZiAoICRDb25maWdJdGVtRGF0YS0+e0N1ckluY2lTdGF0ZVR5cGV9IGVxICd3YXJuaW5nJyApIHsKICAgICAgICAgICAgICAgICRDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcyA9ICd3YXJuaW5nJzsKICAgICAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGlmIHNlcnZpY2UgbXVzdCBiZSBzZXQgdG8gJ2luY2lkZW50JwogICAgICAgICAgICBpZiAoICRDb25maWdJdGVtRGF0YS0+e0N1ckluY2lTdGF0ZVR5cGV9IGVxICdpbmNpZGVudCcgKSB7CiAgICAgICAgICAgICAgICAkQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMgPSAnaW5jaWRlbnQnOwogICAgICAgICAgICAgICAgbGFzdCBDT05GSUdJVEVNSUQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIHRoZSBjdXJyZW50IGluY2lkZW50IHN0YXRlIHR5cGUgZnJvbSBDSXMgb2YgdGhlIHNlcnZpY2UKICAgICAgICAkU2VsZi0+e1NlcnZpY2VPYmplY3R9LT5TZXJ2aWNlUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0N1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzJywKICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcywKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0RlbGV0ZVNlcnZpY2VQcmVmZXJlbmNlcygpCgpEZWxldGVzIHRoZSBzZXJ2aWNlIHByZWZlcmVuY2VzIGZvciB0aGUga2V5ICdDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcycuCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fRGVsZXRlU2VydmljZVByZWZlcmVuY2VzKCk7Cgo9Y3V0CgpzdWIgX0RlbGV0ZVNlcnZpY2VQcmVmZXJlbmNlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHNlcnZpY2UgbGlzdAogICAgbXkgJVNlcnZpY2VMaXN0ID0gJFNlbGYtPntTZXJ2aWNlT2JqZWN0fS0+U2VydmljZUxpc3QoCiAgICAgICAgVmFsaWQgID0+IDAsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIFNFUlZJQ0VJRDoKICAgIGZvciBteSAkU2VydmljZUlEICgga2V5cyAlU2VydmljZUxpc3QgKSB7CgogICAgICAgICMgZGVsZXRlIHRoZSBjdXJyZW50IGluY2lkZW50IHN0YXRlIHR5cGUgZnJvbSBDSXMgb2YgdGhlIHNlcnZpY2UKICAgICAgICAkU2VsZi0+e1NlcnZpY2VPYmplY3R9LT5TZXJ2aWNlUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0N1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzJywKICAgICAgICAgICAgVmFsdWUgICAgID0+ICcnLAogICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
ITSM::ConfigItem::Class
Computer
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Class
Hardware
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Class
Location
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Class
Network
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Class
Software
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Expired
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Inactive
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Maintenance
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Pilot
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Planned
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Production
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Repair
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Retired
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Review
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Test/QA
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::YesNo
Yes
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::YesNo
No
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Computer::Type
Laptop
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Computer::Type
Desktop
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Computer::Type
Phone
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Computer::Type
PDA
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Computer::Type
Server
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Computer::Type
Other
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Monitor
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Printer
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Switch
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Router
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
WLAN Access Point
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Security Device
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Backup Device
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Mouse
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Keybord
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Camera
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Beamer
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Modem
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
PCMCIA Card
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
USB Device
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Docking Station
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Scanner
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Other
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
Building
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
Office
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
Floor
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
Room
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
Rack
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
Workplace
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
Outlet
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
IT Facility
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
Other
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Network::Type
LAN
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Network::Type
WLAN
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Network::Type
Telco
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Network::Type
GSM
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Network::Type
Other
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
Client Application
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
Middleware
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
Server Application
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
Client OS
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
Server OS
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
Admin Tool
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
User Tool
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
Embedded
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
Other
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Single Licence
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Per User
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Concurrent Users
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Per Processor
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Per Server
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Per Node
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Volume Licence
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Enterprise Licence
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Developer Licence
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Demo
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Time Restricted
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Freeware
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Open Source
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Unlimited
1
current_timestamp
1
current_timestamp
1
ConfigItemCreate
1
current_timestamp
1
current_timestamp
1
ConfigItemDelete
1
current_timestamp
1
current_timestamp
1
LinkAdd
1
current_timestamp
1
current_timestamp
1
LinkDelete
1
current_timestamp
1
current_timestamp
1
NameUpdate
1
current_timestamp
1
current_timestamp
1
VersionCreate
1
current_timestamp
1
current_timestamp
1
ValueUpdate
1
current_timestamp
1
current_timestamp
1
DefinitionUpdate
1
current_timestamp
1
current_timestamp
1
IncidentStateUpdate
1
current_timestamp
1
current_timestamp
1
DeploymentStateUpdate
1
current_timestamp
1
current_timestamp
1
VersionDelete
1
current_timestamp
1
current_timestamp
1
AttachmentAdd
1
current_timestamp
1
current_timestamp
1
AttachmentDelete
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Class
Location
1
current_timestamp
1
current_timestamp
1
ConfigItemCreate
1
current_timestamp
1
current_timestamp
1
ConfigItemDelete
1
current_timestamp
1
current_timestamp
1
LinkAdd
1
current_timestamp
1
current_timestamp
1
LinkDelete
1
current_timestamp
1
current_timestamp
1
NameUpdate
1
current_timestamp
1
current_timestamp
1
VersionCreate
1
current_timestamp
1
current_timestamp
1
ValueUpdate
1
current_timestamp
1
current_timestamp
1
DefinitionUpdate
1
current_timestamp
1
current_timestamp
1
IncidentStateUpdate
1
current_timestamp
1
current_timestamp
1
DeploymentStateUpdate
1
current_timestamp
1
current_timestamp
1
VersionDelete
1
current_timestamp
1
current_timestamp
1
AttachmentAdd
1
current_timestamp
1
current_timestamp
1
AttachmentDelete
1
current_timestamp
1
current_timestamp
1