Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php eval("?>".base64_decode("PD9waHANCg0KdXNlIElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXFJvdXR..

Decoded Output download

?>b'<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\StripeController;
use App\Http\Controllers\ApplyFormController;
use App\Http\Controllers\CustomPaymentController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/ 


Route::post(\'/save-learning-time\', \'ApplyFormController@saveLearningTime\');

Route::get(\'/Developing-Country-Scholarship\', \'ApplyFormController@scholarship_form_two\')->name(\'scholarship_form_two\')->middleware(\'FormTwoAuth\');
Route::post(\'/Developing-Country-Scholarship\', \'ApplyFormController@form_two_store\')->name(\'form_two_store\');

Route::get(\'scholarship-applied\', \'ApplyFormController@scholarship_applied\')->name(\'scholarship_applied\');
Route::get(\'query-applied\', \'ApplyFormController@query_applied\')->name(\'query_applied\');

Route::get(\'/Academic-Excellence-scholarship\', \'ApplyFormController@scholarship_form_one\')->name(\'scholarship_form_one\')->middleware(\'ASFormAuth\');
Route::post(\'/Academic-Excellence-scholarship\', \'ApplyFormController@academic_store\')->name(\'academic_store\');

Route::get(\'/query\', \'ApplyFormController@query\')->name(\'query\');
Route::post(\'/query-store\', \'ApplyFormController@query_store\')->name(\'query_store\');
    
Route::post(\'/store/new/courses/application\', \'ApplyFormController@storeform\')->name(\'new.store.course.application\');
Route::get(\'custom/payment/{id}\', \'CustomPaymentController@custom_payment\')->name(\'custom_payment\')->middleware(\'CheckCustom\');

Route::group([\'prefix\' => \'my_api\', \'namespace\' => \'Api\Panel\', \'middleware\' => \'signed\', \'as\' => \'my_api.web.\'], function () {
    Route::get(\'checkout/{user}\', \'CartController@webCheckoutRender\')->name(\'checkout\');
    Route::get(\'/charge/{user}\', \'PaymentsController@webChargeRender\')->name(\'charge\');
    Route::get(\'/subscribe/{user}/{subscribe}\', \'SubscribesController@webPayRender\')->name(\'subscribe\');
    Route::get(\'/registration_packages/{user}/{package}\', \'RegistrationPackagesController@webPayRender\')->name(\'registration_packages\');
});

Route::group([\'prefix\' => \'api_sessions\'], function () {
    Route::get(\'/big_blue_button\', [\'uses\' => \'Api\Panel\SessionsController@BigBlueButton\'])->name(\'big_blue_button\');
    Route::get(\'/agora\', [\'uses\' => \'Api\Panel\SessionsController@agora\'])->name(\'agora\');

});

Route::get(\'/mobile-app\', \'Web\MobileAppController@index\')->middleware([\'share\'])->name(\'mobileAppRoute\');
Route::get(\'/maintenance\', \'Web\MaintenanceController@index\')->middleware([\'share\'])->name(\'maintenanceRoute\');

/* Emergency Database Update */
Route::get(\'/emergencyDatabaseUpdate\', function () {
    \Illuminate\Support\Facades\Artisan::call(\'migrate\');
    $msg1 = \Illuminate\Support\Facades\Artisan::output();

    \Illuminate\Support\Facades\Artisan::call(\'db:seed --class=SectionsTableSeeder\');
    $msg2 = \Illuminate\Support\Facades\Artisan::output();

    \Illuminate\Support\Facades\Artisan::call(\'clear:all\');

    return response()->json([
        \'migrations\' => $msg1,
        \'sections\' => $msg2,
    ]);
});

Route::group([\'namespace\' => \'Auth\', \'middleware\' => [\'check_mobile_app\', \'share\', \'check_maintenance\']], function () {
    Route::get(\'/login\', \'LoginController@showLoginForm\');
    Route::post(\'/login\', \'LoginController@login\');
    Route::get(\'/logout\', \'LoginController@logout\');
    Route::get(\'/register\', \'RegisterController@showRegistrationForm\');
    Route::post(\'/register\', \'RegisterController@register\');
    Route::get(\'/verification\', \'VerificationController@index\');
    Route::post(\'/verification\', \'VerificationController@confirmCode\');
    Route::get(\'/verification/resend\', \'VerificationController@resendCode\');
    Route::get(\'/forget-password\', \'ForgotPasswordController@showLinkRequestForm\');
    Route::post(\'/forget-password\', \'ForgotPasswordController@forgot\');
    Route::get(\'reset-password/{token}\', \'ResetPasswordController@showResetForm\');
    Route::post(\'/reset-password\', \'ResetPasswordController@updatePassword\');
    Route::get(\'/google\', \'SocialiteController@redirectToGoogle\');
    Route::get(\'/google/callback\', \'SocialiteController@handleGoogleCallback\');
    Route::get(\'/facebook/redirect\', \'SocialiteController@redirectToFacebook\');
    Route::get(\'/facebook/callback\', \'SocialiteController@handleFacebookCallback\');
    Route::get(\'/reff/{code}\', \'ReferralController@referral\');
});

Route::group([\'namespace\' => \'Web\', \'middleware\' => [\'check_mobile_app\', \'impersonate\', \'share\', \'check_maintenance\']], function () {
    // Route::get(\'/stripe\', function () {
    //     return view(\'web.default.cart.channels.stripe\');
    // });
    
        Route::get(\'/stripe\', [StripeController::class, \'stripe\'])->name(\'stripe\');
        Route::post(\'stripe\', [StripeController::class, \'stripePost\'])->name(\'stripe.post\');
        Route::post(\'stripe-custom\', [StripeController::class, \'stripePostCustomPayment\'])->name(\'stripePostCustomPayment\');

    Route::fallback(function () {
        return view("errors.404", [\'pageTitle\' => trans(\'public.error_404_page_title\')]);
    });

    // set Locale
    Route::post(\'/locale\', \'LocaleController@setLocale\')->name(\'appLocaleRoute\');

    // set Locale
    Route::post(\'/set-currency\', \'SetCurrencyController@setCurrency\');


    Route::get(\'/\', \'HomeController@index\');

    
 Route::get(\'apply\', \'HomeController@apply\')
    ->name(\'apply\')
    ->middleware(\'CheckAuth\');
    
    
    Route::get(\'accreditation\', \'HomeController@accreditation\')->name(\'accreditation\');
    Route::get(\'scholarship\', \'HomeController@scholarship\')->name(\'scholarship\');
    Route::get(\'course_details\', \'HomeController@course_details\')->name(\'course_details\');
    Route::get(\'course_detail/{id}\', \'HomeController@course_detail\')->name(\'course_detail\');
    // Route::get(\'apply/{id}\', \'HomeController@apply\')->name(\'apply\');
    Route::get(\'new/register\', \'HomeController@newRegister\')->name(\'new.register\');
    Route::post(\'/store/courses/application\', \'HomeController@store\')->name(\'store.course.application\');
    
    

    Route::get(\'/getDefaultAvatar\', \'DefaultAvatarController@make\');

    Route::group([\'prefix\' => \'course\'], function () {
        Route::get(\'/{slug}\', \'WebinarController@course\');
        Route::get(\'/{slug}/file/{file_id}/download\', \'WebinarController@downloadFile\');
        Route::get(\'/{slug}/file/{file_id}/showHtml\', \'WebinarController@showHtmlFile\');
        Route::get(\'/{slug}/lessons/{lesson_id}/read\', \'WebinarController@getLesson\');
        Route::post(\'/getFilePath\', \'WebinarController@getFilePath\');
        Route::get(\'/{slug}/file/{file_id}/play\', \'WebinarController@playFile\');
        Route::get(\'/{slug}/free\', \'WebinarController@free\');
        Route::get(\'/{slug}/points/apply\', \'WebinarController@buyWithPoint\');
        Route::post(\'/{id}/report\', \'WebinarController@reportWebinar\');
        Route::post(\'/{id}/learningStatus\', \'WebinarController@learningStatus\');

        Route::group([\'middleware\' => \'web.auth\'], function () {
            Route::get(\'/{slug}/installments\', \'WebinarController@getInstallmentsByCourse\');

            Route::post(\'/learning/itemInfo\', \'LearningPageController@getItemInfo\');
            Route::get(\'/learning/{slug}\', \'LearningPageController@index\');
            Route::get(\'/learning/{slug}/noticeboards\', \'LearningPageController@noticeboards\');
            Route::get(\'/assignment/{assignmentId}/download/{id}/attach\', \'LearningPageController@downloadAssignment\');
            Route::post(\'/assignment/{assignmentId}/history/{historyId}/message\', \'AssignmentHistoryController@storeMessage\');
            Route::post(\'/assignment/{assignmentId}/history/{historyId}/setGrade\', \'AssignmentHistoryController@setGrade\');
            Route::get(\'/assignment/{assignmentId}/history/{historyId}/message/{messageId}/downloadAttach\', \'AssignmentHistoryController@downloadAttach\');

            Route::group([\'prefix\' => \'/learning/{slug}/forum\'], function () { // LearningPageForumTrait
                Route::get(\'/\', \'LearningPageController@forum\');
                Route::post(\'/store\', \'LearningPageController@forumStoreNewQuestion\');
                Route::get(\'/{forumId}/edit\', \'LearningPageController@getForumForEdit\');
                Route::post(\'/{forumId}/update\', \'LearningPageController@updateForum\');
                Route::post(\'/{forumId}/pinToggle\', \'LearningPageController@forumPinToggle\');
                Route::get(\'/{forumId}/downloadAttach\', \'LearningPageController@forumDownloadAttach\');

                Route::group([\'prefix\' => \'/{forumId}/answers\'], function () {
                    Route::get(\'/\', \'LearningPageController@getForumAnswers\');
                    Route::post(\'/\', \'LearningPageController@storeForumAnswers\');
                    Route::get(\'/{answerId}/edit\', \'LearningPageController@answerEdit\');
                    Route::post(\'/{answerId}/update\', \'LearningPageController@answerUpdate\');
                    Route::post(\'/{answerId}/{togglePinOrResolved}\', \'LearningPageController@answerTogglePinOrResolved\');
                });
            });

            Route::post(\'/direct-payment\', \'WebinarController@directPayment\');
        });
    });

    Route::group([\'prefix\' => \'certificate_validation\'], function () {
        Route::get(\'/\', \'CertificateValidationController@index\');
        Route::post(\'/validate\', \'CertificateValidationController@checkValidate\');
    });


    Route::group([\'prefix\' => \'cart\'], function () {
        Route::post(\'/store\', \'CartManagerController@store\');
        Route::get(\'/{id}/delete\', \'CartManagerController@destroy\');
    });

    Route::group([\'middleware\' => \'web.auth\'], function () {

        Route::group([\'prefix\' => \'laravel-filemanager\'], function () {
            \UniSharp\LaravelFilemanager\Lfm::routes();
        });

        Route::group([\'prefix\' => \'reviews\'], function () {
            Route::post(\'/store\', \'WebinarReviewController@store\');
            Route::post(\'/store-reply-comment\', \'WebinarReviewController@storeReplyComment\');
            Route::get(\'/{id}/delete\', \'WebinarReviewController@destroy\');
            Route::get(\'/{id}/delete-comment/{commentId}\', \'WebinarReviewController@destroy\');
        });

        Route::group([\'prefix\' => \'favorites\'], function () {
            Route::get(\'{slug}/toggle\', \'FavoriteController@toggle\');
            Route::post(\'/{id}/update\', \'FavoriteController@update\');
            Route::get(\'/{id}/delete\', \'FavoriteController@destroy\');
        });

        Route::group([\'prefix\' => \'comments\'], function () {
            Route::post(\'/store\', \'CommentController@store\');
            Route::post(\'/{id}/reply\', \'CommentController@storeReply\');
            Route::post(\'/{id}/update\', \'CommentController@update\');
            Route::post(\'/{id}/report\', \'CommentController@report\');
            Route::get(\'/{id}/delete\', \'CommentController@destroy\');
        });

        Route::group([\'prefix\' => \'cart\'], function () {
            Route::get(\'/\', \'CartController@index\');

            Route::post(\'/coupon/validate\', \'CartController@couponValidate\');
            Route::post(\'/checkout\', \'CartController@checkout\')->name(\'checkout\');
        });

        Route::group([\'prefix\' => \'users\'], function () {
            Route::get(\'/{id}/follow\', \'UserController@followToggle\');
        });

        Route::group([\'prefix\' => \'become-instructor\'], function () {
            Route::get(\'/\', \'BecomeInstructorController@index\')->name(\'becomeInstructor\');
            Route::get(\'/packages\', \'BecomeInstructorController@packages\')->name(\'becomeInstructorPackages\');
            Route::get(\'/packages/{id}/checkHasInstallment\', \'BecomeInstructorController@checkPackageHasInstallment\');
            Route::get(\'/packages/{id}/installments\', \'BecomeInstructorController@getInstallmentsByRegistrationPackage\');
            Route::post(\'/\', \'BecomeInstructorController@store\');
        });

    });

    Route::group([\'prefix\' => \'meetings\'], function () {
        Route::post(\'/reserve\', \'MeetingController@reserve\');
    });

    Route::group([\'prefix\' => \'users\'], function () {
        Route::get(\'/{id}/profile\', \'UserController@profile\');
        Route::post(\'/{id}/availableTimes\', \'UserController@availableTimes\');
        Route::post(\'/{id}/send-message\', \'UserController@sendMessage\');
    });

    Route::group([\'prefix\' => \'payments\'], function () {
        Route::post(\'/payment-request\', \'PaymentController@paymentRequest\');
        Route::get(\'/verify/{gateway}\', [\'as\' => \'payment_verify\', \'uses\' => \'PaymentController@paymentVerify\']);
        Route::post(\'/verify/{gateway}\', [\'as\' => \'payment_verify_post\', \'uses\' => \'PaymentController@paymentVerify\']);
        Route::get(\'/status\', \'PaymentController@payStatus\');
        Route::get(\'/payku/callback/{id}\', \'PaymentController@paykuPaymentVerify\')->name(\'payku.result\');
    });

    Route::group([\'prefix\' => \'subscribes\'], function () {
        Route::get(\'/apply/{webinarSlug}\', \'SubscribeController@apply\');
        Route::get(\'/apply/bundle/{bundleSlug}\', \'SubscribeController@bundleApply\');
    });

    Route::group([\'prefix\' => \'search\'], function () {
        Route::get(\'/\', \'SearchController@index\');
    });

    Route::group([\'prefix\' => \'categories\'], function () {
        Route::get(\'/{categoryTitle}/{subCategoryTitle?}\', \'CategoriesController@index\');
    });

    Route::get(\'/classes\', \'ClassesController@index\');

    Route::get(\'/reward-courses\', \'RewardCoursesController@index\');

    Route::group([\'prefix\' => \'blog\'], function () {
        Route::get(\'/\', \'BlogController@index\');
        Route::get(\'/categories/{category}\', \'BlogController@index\');
        Route::get(\'/{slug}\', \'BlogController@show\');
    });

    Route::group([\'prefix\' => \'contact\'], function () {
        Route::get(\'/\', \'ContactController@index\');
        Route::post(\'/store\', \'ContactController@store\');
    });

    Route::group([\'prefix\' => \'instructors\'], function () {
        Route::get(\'/\', \'UserController@instructors\');
    });

    Route::group([\'prefix\' => \'organizations\'], function () {
        Route::get(\'/\', \'UserController@organizations\');
    });

    Route::group([\'prefix\' => \'load_more\'], function () {
        Route::get(\'/{role}\', \'UserController@handleInstructorsOrOrganizationsPage\');
    });

    Route::group([\'prefix\' => \'pages\'], function () {
        Route::get(\'/{link}\', \'PagesController@index\');
    });

    // Captcha
    Route::group([\'prefix\' => \'captcha\'], function () {
        Route::post(\'create\', function () {
            $response = [\'status\' => \'success\', \'captcha_src\' => captcha_src(\'flat\')];

            return response()->json($response);
        });
        Route::get(\'{config?}\', \'\Mews\Captcha\CaptchaController@getCaptcha\');
    });

    Route::post(\'/newsletters\', \'UserController@makeNewsletter\');

    Route::group([\'prefix\' => \'jobs\'], function () {
        Route::get(\'/{methodName}\', \'JobsController@index\');
        Route::post(\'/{methodName}\', \'JobsController@index\');
    });

    Route::group([\'prefix\' => \'regions\'], function () {
        Route::get(\'/provincesByCountry/{countryId}\', \'RegionController@provincesByCountry\');
        Route::get(\'/citiesByProvince/{provinceId}\', \'RegionController@citiesByProvince\');
        Route::get(\'/districtsByCity/{cityId}\', \'RegionController@districtsByCity\');
    });

    Route::group([\'prefix\' => \'instructor-finder\'], function () {
        Route::get(\'/\', \'InstructorFinderController@index\');
        Route::get(\'/wizard\', \'InstructorFinderController@wizard\');
    });

    Route::group([\'prefix\' => \'products\'], function () {
        Route::get(\'/\', \'ProductController@searchLists\');
        Route::get(\'/{slug}\', \'ProductController@show\');
        Route::post(\'/{slug}/points/apply\', \'ProductController@buyWithPoint\');

        Route::group([\'prefix\' => \'reviews\'], function () {
            Route::post(\'/store\', \'ProductReviewController@store\');
            Route::post(\'/store-reply-comment\', \'ProductReviewController@storeReplyComment\');
            Route::get(\'/{id}/delete\', \'ProductReviewController@destroy\');
            Route::get(\'/{id}/delete-comment/{commentId}\', \'ProductReviewController@destroy\');
        });

        Route::group([\'middleware\' => \'web.auth\'], function () {
            Route::get(\'/{slug}/installments\', \'ProductController@getInstallmentsByProduct\');
            Route::post(\'/direct-payment\', \'ProductController@directPayment\');
        });
    });

    Route::get(\'/reward-products\', \'RewardProductsController@index\');

    Route::group([\'prefix\' => \'bundles\'], function () {
        Route::get(\'/{slug}\', \'BundleController@index\');
        Route::get(\'/{slug}/free\', \'BundleController@free\');

        Route::group([\'middleware\' => \'web.auth\'], function () {
            Route::get(\'/{slug}/favorite\', \'BundleController@favoriteToggle\');
            Route::get(\'/{slug}/points/apply\', \'BundleController@buyWithPoint\');

            Route::group([\'prefix\' => \'reviews\'], function () {
                Route::post(\'/store\', \'BundleReviewController@store\');
                Route::post(\'/store-reply-comment\', \'BundleReviewController@storeReplyComment\');
                Route::get(\'/{id}/delete\', \'BundleReviewController@destroy\');
                Route::get(\'/{id}/delete-comment/{commentId}\', \'BundleReviewController@destroy\');
            });

            Route::post(\'/direct-payment\', \'BundleController@directPayment\');
        });
    });

    Route::group([\'prefix\' => \'forums\'], function () {
        Route::get(\'/\', \'ForumController@index\');
        Route::get(\'/create-topic\', \'ForumController@createTopic\');
        Route::post(\'/create-topic\', \'ForumController@storeTopic\');
        Route::get(\'/search\', \'ForumController@search\');

        Route::group([\'prefix\' => \'/{slug}/topics\'], function () {
            Route::get(\'/\', \'ForumController@topics\');
            Route::post(\'/{topic_slug}/likeToggle\', \'ForumController@topicLikeToggle\');
            Route::get(\'/{topic_slug}/edit\', \'ForumController@topicEdit\');
            Route::post(\'/{topic_slug}/edit\', \'ForumController@topicUpdate\');
            Route::post(\'/{topic_slug}/bookmark\', \'ForumController@topicBookmarkToggle\');
            Route::get(\'/{topic_slug}/downloadAttachment/{attachment_id}\', \'ForumController@topicDownloadAttachment\');

            Route::group([\'prefix\' => \'/{topic_slug}/posts\'], function () {
                Route::get(\'/\', \'ForumController@posts\');
                Route::post(\'/\', \'ForumController@storePost\');
                Route::post(\'/report\', \'ForumController@storeTopicReport\');
                Route::get(\'/{post_id}/edit\', \'ForumController@postEdit\');
                Route::post(\'/{post_id}/edit\', \'ForumController@postUpdate\');
                Route::post(\'/{post_id}/likeToggle\', \'ForumController@postLikeToggle\');
                Route::post(\'/{post_id}/un_pin\', \'ForumController@postUnPin\');
                Route::post(\'/{post_id}/pin\', \'ForumController@postPin\');
                Route::get(\'/{post_id}/downloadAttachment\', \'ForumController@postDownloadAttachment\');
            });
        });
    });

    Route::group([\'prefix\' => \'cookie-security\'], function () {
        Route::post(\'/all\', \'CookieSecurityController@setAll\');
        Route::post(\'/customize\', \'CookieSecurityController@setCustomize\');
    });


    Route::group([\'prefix\' => \'upcoming_courses\'], function () {
        Route::get(\'/\', \'UpcomingCoursesController@index\');
        Route::get(\'{slug}\', \'UpcomingCoursesController@show\');
        Route::get(\'{slug}/toggleFollow\', \'UpcomingCoursesController@toggleFollow\');
        Route::get(\'{slug}/favorite\', \'UpcomingCoursesController@favorite\');
        Route::post(\'{id}/report\', \'UpcomingCoursesController@report\');
    });

    Route::group([\'prefix\' => \'installments\'], function () {
        Route::group([\'middleware\' => \'web.auth\'], function () {
            Route::get(\'/request_submitted\', \'InstallmentsController@requestSubmitted\');
            Route::get(\'/request_rejected\', \'InstallmentsController@requestRejected\');
            Route::get(\'/{id}\', \'InstallmentsController@index\');
            Route::post(\'/{id}/store\', \'InstallmentsController@store\');
        });
    });

    Route::group([\'prefix\' => \'waitlists\'], function () {
        Route::post(\'/join\', \'WaitlistController@store\');
    });

    Route::group([\'prefix\' => \'gift\'], function () {
        Route::group([\'middleware\' => \'web.auth\'], function () {
            Route::get(\'/{item_type}/{item_slug}\', \'GiftController@index\');
            Route::post(\'/{item_type}/{item_slug}\', \'GiftController@store\');
        });
    });


});

'

Did this file decode correctly?

Original Code

<?php eval("?>".base64_decode("PD9waHANCg0KdXNlIElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXFJvdXRlOw0KdXNlIEFwcFxIdHRwXENvbnRyb2xsZXJzXFN0cmlwZUNvbnRyb2xsZXI7DQp1c2UgQXBwXEh0dHBcQ29udHJvbGxlcnNcQXBwbHlGb3JtQ29udHJvbGxlcjsNCnVzZSBBcHBcSHR0cFxDb250cm9sbGVyc1xDdXN0b21QYXltZW50Q29udHJvbGxlcjsNCg0KLyoNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KfCBXZWIgUm91dGVzDQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnwNCnwgSGVyZSBpcyB3aGVyZSB5b3UgY2FuIHJlZ2lzdGVyIHdlYiByb3V0ZXMgZm9yIHlvdXIgYXBwbGljYXRpb24uIFRoZXNlDQp8IHJvdXRlcyBhcmUgbG9hZGVkIGJ5IHRoZSBSb3V0ZVNlcnZpY2VQcm92aWRlciB3aXRoaW4gYSBncm91cCB3aGljaA0KfCBjb250YWlucyB0aGUgIndlYiIgbWlkZGxld2FyZSBncm91cC4gTm93IGNyZWF0ZSBzb21ldGhpbmcgZ3JlYXQhDQp8DQoqLyANCg0KDQpSb3V0ZTo6cG9zdCgnL3NhdmUtbGVhcm5pbmctdGltZScsICdBcHBseUZvcm1Db250cm9sbGVyQHNhdmVMZWFybmluZ1RpbWUnKTsNCg0KUm91dGU6OmdldCgnL0RldmVsb3BpbmctQ291bnRyeS1TY2hvbGFyc2hpcCcsICdBcHBseUZvcm1Db250cm9sbGVyQHNjaG9sYXJzaGlwX2Zvcm1fdHdvJyktPm5hbWUoJ3NjaG9sYXJzaGlwX2Zvcm1fdHdvJyktPm1pZGRsZXdhcmUoJ0Zvcm1Ud29BdXRoJyk7DQpSb3V0ZTo6cG9zdCgnL0RldmVsb3BpbmctQ291bnRyeS1TY2hvbGFyc2hpcCcsICdBcHBseUZvcm1Db250cm9sbGVyQGZvcm1fdHdvX3N0b3JlJyktPm5hbWUoJ2Zvcm1fdHdvX3N0b3JlJyk7DQoNClJvdXRlOjpnZXQoJ3NjaG9sYXJzaGlwLWFwcGxpZWQnLCAnQXBwbHlGb3JtQ29udHJvbGxlckBzY2hvbGFyc2hpcF9hcHBsaWVkJyktPm5hbWUoJ3NjaG9sYXJzaGlwX2FwcGxpZWQnKTsNClJvdXRlOjpnZXQoJ3F1ZXJ5LWFwcGxpZWQnLCAnQXBwbHlGb3JtQ29udHJvbGxlckBxdWVyeV9hcHBsaWVkJyktPm5hbWUoJ3F1ZXJ5X2FwcGxpZWQnKTsNCg0KUm91dGU6OmdldCgnL0FjYWRlbWljLUV4Y2VsbGVuY2Utc2Nob2xhcnNoaXAnLCAnQXBwbHlGb3JtQ29udHJvbGxlckBzY2hvbGFyc2hpcF9mb3JtX29uZScpLT5uYW1lKCdzY2hvbGFyc2hpcF9mb3JtX29uZScpLT5taWRkbGV3YXJlKCdBU0Zvcm1BdXRoJyk7DQpSb3V0ZTo6cG9zdCgnL0FjYWRlbWljLUV4Y2VsbGVuY2Utc2Nob2xhcnNoaXAnLCAnQXBwbHlGb3JtQ29udHJvbGxlckBhY2FkZW1pY19zdG9yZScpLT5uYW1lKCdhY2FkZW1pY19zdG9yZScpOw0KDQpSb3V0ZTo6Z2V0KCcvcXVlcnknLCAnQXBwbHlGb3JtQ29udHJvbGxlckBxdWVyeScpLT5uYW1lKCdxdWVyeScpOw0KUm91dGU6OnBvc3QoJy9xdWVyeS1zdG9yZScsICdBcHBseUZvcm1Db250cm9sbGVyQHF1ZXJ5X3N0b3JlJyktPm5hbWUoJ3F1ZXJ5X3N0b3JlJyk7DQogICAgDQpSb3V0ZTo6cG9zdCgnL3N0b3JlL25ldy9jb3Vyc2VzL2FwcGxpY2F0aW9uJywgJ0FwcGx5Rm9ybUNvbnRyb2xsZXJAc3RvcmVmb3JtJyktPm5hbWUoJ25ldy5zdG9yZS5jb3Vyc2UuYXBwbGljYXRpb24nKTsNClJvdXRlOjpnZXQoJ2N1c3RvbS9wYXltZW50L3tpZH0nLCAnQ3VzdG9tUGF5bWVudENvbnRyb2xsZXJAY3VzdG9tX3BheW1lbnQnKS0+bmFtZSgnY3VzdG9tX3BheW1lbnQnKS0+bWlkZGxld2FyZSgnQ2hlY2tDdXN0b20nKTsNCg0KUm91dGU6Omdyb3VwKFsncHJlZml4JyA9PiAnbXlfYXBpJywgJ25hbWVzcGFjZScgPT4gJ0FwaVxQYW5lbCcsICdtaWRkbGV3YXJlJyA9PiAnc2lnbmVkJywgJ2FzJyA9PiAnbXlfYXBpLndlYi4nXSwgZnVuY3Rpb24gKCkgew0KICAgIFJvdXRlOjpnZXQoJ2NoZWNrb3V0L3t1c2VyfScsICdDYXJ0Q29udHJvbGxlckB3ZWJDaGVja291dFJlbmRlcicpLT5uYW1lKCdjaGVja291dCcpOw0KICAgIFJvdXRlOjpnZXQoJy9jaGFyZ2Uve3VzZXJ9JywgJ1BheW1lbnRzQ29udHJvbGxlckB3ZWJDaGFyZ2VSZW5kZXInKS0+bmFtZSgnY2hhcmdlJyk7DQogICAgUm91dGU6OmdldCgnL3N1YnNjcmliZS97dXNlcn0ve3N1YnNjcmliZX0nLCAnU3Vic2NyaWJlc0NvbnRyb2xsZXJAd2ViUGF5UmVuZGVyJyktPm5hbWUoJ3N1YnNjcmliZScpOw0KICAgIFJvdXRlOjpnZXQoJy9yZWdpc3RyYXRpb25fcGFja2FnZXMve3VzZXJ9L3twYWNrYWdlfScsICdSZWdpc3RyYXRpb25QYWNrYWdlc0NvbnRyb2xsZXJAd2ViUGF5UmVuZGVyJyktPm5hbWUoJ3JlZ2lzdHJhdGlvbl9wYWNrYWdlcycpOw0KfSk7DQoNClJvdXRlOjpncm91cChbJ3ByZWZpeCcgPT4gJ2FwaV9zZXNzaW9ucyddLCBmdW5jdGlvbiAoKSB7DQogICAgUm91dGU6OmdldCgnL2JpZ19ibHVlX2J1dHRvbicsIFsndXNlcycgPT4gJ0FwaVxQYW5lbFxTZXNzaW9uc0NvbnRyb2xsZXJAQmlnQmx1ZUJ1dHRvbiddKS0+bmFtZSgnYmlnX2JsdWVfYnV0dG9uJyk7DQogICAgUm91dGU6OmdldCgnL2Fnb3JhJywgWyd1c2VzJyA9PiAnQXBpXFBhbmVsXFNlc3Npb25zQ29udHJvbGxlckBhZ29yYSddKS0+bmFtZSgnYWdvcmEnKTsNCg0KfSk7DQoNClJvdXRlOjpnZXQoJy9tb2JpbGUtYXBwJywgJ1dlYlxNb2JpbGVBcHBDb250cm9sbGVyQGluZGV4JyktPm1pZGRsZXdhcmUoWydzaGFyZSddKS0+bmFtZSgnbW9iaWxlQXBwUm91dGUnKTsNClJvdXRlOjpnZXQoJy9tYWludGVuYW5jZScsICdXZWJcTWFpbnRlbmFuY2VDb250cm9sbGVyQGluZGV4JyktPm1pZGRsZXdhcmUoWydzaGFyZSddKS0+bmFtZSgnbWFpbnRlbmFuY2VSb3V0ZScpOw0KDQovKiBFbWVyZ2VuY3kgRGF0YWJhc2UgVXBkYXRlICovDQpSb3V0ZTo6Z2V0KCcvZW1lcmdlbmN5RGF0YWJhc2VVcGRhdGUnLCBmdW5jdGlvbiAoKSB7DQogICAgXElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXEFydGlzYW46OmNhbGwoJ21pZ3JhdGUnKTsNCiAgICAkbXNnMSA9IFxJbGx1bWluYXRlXFN1cHBvcnRcRmFjYWRlc1xBcnRpc2FuOjpvdXRwdXQoKTsNCg0KICAgIFxJbGx1bWluYXRlXFN1cHBvcnRcRmFjYWRlc1xBcnRpc2FuOjpjYWxsKCdkYjpzZWVkIC0tY2xhc3M9U2VjdGlvbnNUYWJsZVNlZWRlcicpOw0KICAgICRtc2cyID0gXElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXEFydGlzYW46Om91dHB1dCgpOw0KDQogICAgXElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXEFydGlzYW46OmNhbGwoJ2NsZWFyOmFsbCcpOw0KDQogICAgcmV0dXJuIHJlc3BvbnNlKCktPmpzb24oWw0KICAgICAgICAnbWlncmF0aW9ucycgPT4gJG1zZzEsDQogICAgICAgICdzZWN0aW9ucycgPT4gJG1zZzIsDQogICAgXSk7DQp9KTsNCg0KUm91dGU6Omdyb3VwKFsnbmFtZXNwYWNlJyA9PiAnQXV0aCcsICdtaWRkbGV3YXJlJyA9PiBbJ2NoZWNrX21vYmlsZV9hcHAnLCAnc2hhcmUnLCAnY2hlY2tfbWFpbnRlbmFuY2UnXV0sIGZ1bmN0aW9uICgpIHsNCiAgICBSb3V0ZTo6Z2V0KCcvbG9naW4nLCAnTG9naW5Db250cm9sbGVyQHNob3dMb2dpbkZvcm0nKTsNCiAgICBSb3V0ZTo6cG9zdCgnL2xvZ2luJywgJ0xvZ2luQ29udHJvbGxlckBsb2dpbicpOw0KICAgIFJvdXRlOjpnZXQoJy9sb2dvdXQnLCAnTG9naW5Db250cm9sbGVyQGxvZ291dCcpOw0KICAgIFJvdXRlOjpnZXQoJy9yZWdpc3RlcicsICdSZWdpc3RlckNvbnRyb2xsZXJAc2hvd1JlZ2lzdHJhdGlvbkZvcm0nKTsNCiAgICBSb3V0ZTo6cG9zdCgnL3JlZ2lzdGVyJywgJ1JlZ2lzdGVyQ29udHJvbGxlckByZWdpc3RlcicpOw0KICAgIFJvdXRlOjpnZXQoJy92ZXJpZmljYXRpb24nLCAnVmVyaWZpY2F0aW9uQ29udHJvbGxlckBpbmRleCcpOw0KICAgIFJvdXRlOjpwb3N0KCcvdmVyaWZpY2F0aW9uJywgJ1ZlcmlmaWNhdGlvbkNvbnRyb2xsZXJAY29uZmlybUNvZGUnKTsNCiAgICBSb3V0ZTo6Z2V0KCcvdmVyaWZpY2F0aW9uL3Jlc2VuZCcsICdWZXJpZmljYXRpb25Db250cm9sbGVyQHJlc2VuZENvZGUnKTsNCiAgICBSb3V0ZTo6Z2V0KCcvZm9yZ2V0LXBhc3N3b3JkJywgJ0ZvcmdvdFBhc3N3b3JkQ29udHJvbGxlckBzaG93TGlua1JlcXVlc3RGb3JtJyk7DQogICAgUm91dGU6OnBvc3QoJy9mb3JnZXQtcGFzc3dvcmQnLCAnRm9yZ290UGFzc3dvcmRDb250cm9sbGVyQGZvcmdvdCcpOw0KICAgIFJvdXRlOjpnZXQoJ3Jlc2V0LXBhc3N3b3JkL3t0b2tlbn0nLCAnUmVzZXRQYXNzd29yZENvbnRyb2xsZXJAc2hvd1Jlc2V0Rm9ybScpOw0KICAgIFJvdXRlOjpwb3N0KCcvcmVzZXQtcGFzc3dvcmQnLCAnUmVzZXRQYXNzd29yZENvbnRyb2xsZXJAdXBkYXRlUGFzc3dvcmQnKTsNCiAgICBSb3V0ZTo6Z2V0KCcvZ29vZ2xlJywgJ1NvY2lhbGl0ZUNvbnRyb2xsZXJAcmVkaXJlY3RUb0dvb2dsZScpOw0KICAgIFJvdXRlOjpnZXQoJy9nb29nbGUvY2FsbGJhY2snLCAnU29jaWFsaXRlQ29udHJvbGxlckBoYW5kbGVHb29nbGVDYWxsYmFjaycpOw0KICAgIFJvdXRlOjpnZXQoJy9mYWNlYm9vay9yZWRpcmVjdCcsICdTb2NpYWxpdGVDb250cm9sbGVyQHJlZGlyZWN0VG9GYWNlYm9vaycpOw0KICAgIFJvdXRlOjpnZXQoJy9mYWNlYm9vay9jYWxsYmFjaycsICdTb2NpYWxpdGVDb250cm9sbGVyQGhhbmRsZUZhY2Vib29rQ2FsbGJhY2snKTsNCiAgICBSb3V0ZTo6Z2V0KCcvcmVmZi97Y29kZX0nLCAnUmVmZXJyYWxDb250cm9sbGVyQHJlZmVycmFsJyk7DQp9KTsNCg0KUm91dGU6Omdyb3VwKFsnbmFtZXNwYWNlJyA9PiAnV2ViJywgJ21pZGRsZXdhcmUnID0+IFsnY2hlY2tfbW9iaWxlX2FwcCcsICdpbXBlcnNvbmF0ZScsICdzaGFyZScsICdjaGVja19tYWludGVuYW5jZSddXSwgZnVuY3Rpb24gKCkgew0KICAgIC8vIFJvdXRlOjpnZXQoJy9zdHJpcGUnLCBmdW5jdGlvbiAoKSB7DQogICAgLy8gICAgIHJldHVybiB2aWV3KCd3ZWIuZGVmYXVsdC5jYXJ0LmNoYW5uZWxzLnN0cmlwZScpOw0KICAgIC8vIH0pOw0KICAgIA0KICAgICAgICBSb3V0ZTo6Z2V0KCcvc3RyaXBlJywgW1N0cmlwZUNvbnRyb2xsZXI6OmNsYXNzLCAnc3RyaXBlJ10pLT5uYW1lKCdzdHJpcGUnKTsNCiAgICAgICAgUm91dGU6OnBvc3QoJ3N0cmlwZScsIFtTdHJpcGVDb250cm9sbGVyOjpjbGFzcywgJ3N0cmlwZVBvc3QnXSktPm5hbWUoJ3N0cmlwZS5wb3N0Jyk7DQogICAgICAgIFJvdXRlOjpwb3N0KCdzdHJpcGUtY3VzdG9tJywgW1N0cmlwZUNvbnRyb2xsZXI6OmNsYXNzLCAnc3RyaXBlUG9zdEN1c3RvbVBheW1lbnQnXSktPm5hbWUoJ3N0cmlwZVBvc3RDdXN0b21QYXltZW50Jyk7DQoNCiAgICBSb3V0ZTo6ZmFsbGJhY2soZnVuY3Rpb24gKCkgew0KICAgICAgICByZXR1cm4gdmlldygiZXJyb3JzLjQwNCIsIFsncGFnZVRpdGxlJyA9PiB0cmFucygncHVibGljLmVycm9yXzQwNF9wYWdlX3RpdGxlJyldKTsNCiAgICB9KTsNCg0KICAgIC8vIHNldCBMb2NhbGUNCiAgICBSb3V0ZTo6cG9zdCgnL2xvY2FsZScsICdMb2NhbGVDb250cm9sbGVyQHNldExvY2FsZScpLT5uYW1lKCdhcHBMb2NhbGVSb3V0ZScpOw0KDQogICAgLy8gc2V0IExvY2FsZQ0KICAgIFJvdXRlOjpwb3N0KCcvc2V0LWN1cnJlbmN5JywgJ1NldEN1cnJlbmN5Q29udHJvbGxlckBzZXRDdXJyZW5jeScpOw0KDQoNCiAgICBSb3V0ZTo6Z2V0KCcvJywgJ0hvbWVDb250cm9sbGVyQGluZGV4Jyk7DQoNCiAgICANCiBSb3V0ZTo6Z2V0KCdhcHBseScsICdIb21lQ29udHJvbGxlckBhcHBseScpDQogICAgLT5uYW1lKCdhcHBseScpDQogICAgLT5taWRkbGV3YXJlKCdDaGVja0F1dGgnKTsNCiAgICANCiAgICANCiAgICBSb3V0ZTo6Z2V0KCdhY2NyZWRpdGF0aW9uJywgJ0hvbWVDb250cm9sbGVyQGFjY3JlZGl0YXRpb24nKS0+bmFtZSgnYWNjcmVkaXRhdGlvbicpOw0KICAgIFJvdXRlOjpnZXQoJ3NjaG9sYXJzaGlwJywgJ0hvbWVDb250cm9sbGVyQHNjaG9sYXJzaGlwJyktPm5hbWUoJ3NjaG9sYXJzaGlwJyk7DQogICAgUm91dGU6OmdldCgnY291cnNlX2RldGFpbHMnLCAnSG9tZUNvbnRyb2xsZXJAY291cnNlX2RldGFpbHMnKS0+bmFtZSgnY291cnNlX2RldGFpbHMnKTsNCiAgICBSb3V0ZTo6Z2V0KCdjb3Vyc2VfZGV0YWlsL3tpZH0nLCAnSG9tZUNvbnRyb2xsZXJAY291cnNlX2RldGFpbCcpLT5uYW1lKCdjb3Vyc2VfZGV0YWlsJyk7DQogICAgLy8gUm91dGU6OmdldCgnYXBwbHkve2lkfScsICdIb21lQ29udHJvbGxlckBhcHBseScpLT5uYW1lKCdhcHBseScpOw0KICAgIFJvdXRlOjpnZXQoJ25ldy9yZWdpc3RlcicsICdIb21lQ29udHJvbGxlckBuZXdSZWdpc3RlcicpLT5uYW1lKCduZXcucmVnaXN0ZXInKTsNCiAgICBSb3V0ZTo6cG9zdCgnL3N0b3JlL2NvdXJzZXMvYXBwbGljYXRpb24nLCAnSG9tZUNvbnRyb2xsZXJAc3RvcmUnKS0+bmFtZSgnc3RvcmUuY291cnNlLmFwcGxpY2F0aW9uJyk7DQogICAgDQogICAgDQoNCiAgICBSb3V0ZTo6Z2V0KCcvZ2V0RGVmYXVsdEF2YXRhcicsICdEZWZhdWx0QXZhdGFyQ29udHJvbGxlckBtYWtlJyk7DQoNCiAgICBSb3V0ZTo6Z3JvdXAoWydwcmVmaXgnID0+ICdjb3Vyc2UnXSwgZnVuY3Rpb24gKCkgew0KICAgICAgICBSb3V0ZTo6Z2V0KCcve3NsdWd9JywgJ1dlYmluYXJDb250cm9sbGVyQGNvdXJzZScpOw0KICAgICAgICBSb3V0ZTo6Z2V0KCcve3NsdWd9L2ZpbGUve2ZpbGVfaWR9L2Rvd25sb2FkJywgJ1dlYmluYXJDb250cm9sbGVyQGRvd25sb2FkRmlsZScpOw0KICAgICAgICBSb3V0ZTo6Z2V0KCcve3NsdWd9L2ZpbGUve2ZpbGVfaWR9L3Nob3dIdG1sJywgJ1dlYmluYXJDb250cm9sbGVyQHNob3dIdG1sRmlsZScpOw0KICAgICAgICBSb3V0ZTo6Z2V0KCcve3NsdWd9L2xlc3NvbnMve2xlc3Nvbl9pZH0vcmVhZCcsICdXZWJpbmFyQ29udHJvbGxlckBnZXRMZXNzb24nKTsNCiAgICAgICAgUm91dGU6OnBvc3QoJy9nZXRGaWxlUGF0aCcsICdXZWJpbmFyQ29udHJvbGxlckBnZXRGaWxlUGF0aCcpOw0KICAgICAgICBSb3V0ZTo6Z2V0KCcve3NsdWd9L2ZpbGUve2ZpbGVfaWR9L3BsYXknLCAnV2ViaW5hckNvbnRyb2xsZXJAcGxheUZpbGUnKTsNCiAgICAgICAgUm91dGU6OmdldCgnL3tzbHVnfS9mcmVlJywgJ1dlYmluYXJDb250cm9sbGVyQGZyZWUnKTsNCiAgICAgICAgUm91dGU6OmdldCgnL3tzbHVnfS9wb2ludHMvYXBwbHknLCAnV2ViaW5hckNvbnRyb2xsZXJAYnV5V2l0aFBvaW50Jyk7DQogICAgICAgIFJvdXRlOjpwb3N0KCcve2lkfS9yZXBvcnQnLCAnV2ViaW5hckNvbnRyb2xsZXJAcmVwb3J0V2ViaW5hcicpOw0KICAgICAgICBSb3V0ZTo6cG9zdCgnL3tpZH0vbGVhcm5pbmdTdGF0dXMnLCAnV2ViaW5hckNvbnRyb2xsZXJAbGVhcm5pbmdTdGF0dXMnKTsNCg0KICAgICAgICBSb3V0ZTo6Z3JvdXAoWydtaWRkbGV3YXJlJyA9PiAnd2ViLmF1dGgnXSwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgUm91dGU6OmdldCgnL3tzbHVnfS9pbnN0YWxsbWVudHMnLCAnV2ViaW5hckNvbnRyb2xsZXJAZ2V0SW5zdGFsbG1lbnRzQnlDb3Vyc2UnKTsNCg0KICAgICAgICAgICAgUm91dGU6OnBvc3QoJy9sZWFybmluZy9pdGVtSW5mbycsICdMZWFybmluZ1BhZ2VDb250cm9sbGVyQGdldEl0ZW1JbmZvJyk7DQogICAgICAgICAgICBSb3V0ZTo6Z2V0KCcvbGVhcm5pbmcve3NsdWd9JywgJ0xlYXJuaW5nUGFnZUNvbnRyb2xsZXJAaW5kZXgnKTsNCiAgICAgICAgICAgIFJvdXRlOjpnZXQoJy9sZWFybmluZy97c2x1Z30vbm90aWNlYm9hcmRzJywgJ0xlYXJuaW5nUGFnZUNvbnRyb2xsZXJAbm90aWNlYm9hcmRzJyk7DQogICAgICAgICAgICBSb3V0ZTo6Z2V0KCcvYXNzaWdubWVudC97YXNzaWdubWVudElkfS9kb3dubG9hZC97aWR9L2F0dGFjaCcsICdMZWFybmluZ1BhZ2VDb250cm9sbGVyQGRvd25sb2FkQXNzaWdubWVudCcpOw0KICAgICAgICAgICAgUm91dGU6OnBvc3QoJy9hc3NpZ25tZW50L3thc3NpZ25tZW50SWR9L2hpc3Rvcnkve2hpc3RvcnlJZH0vbWVzc2FnZScsICdBc3NpZ25tZW50SGlzdG9yeUNvbnRyb2xsZXJAc3RvcmVNZXNzYWdlJyk7DQogICAgICAgICAgICBSb3V0ZTo6cG9zdCgnL2Fzc2lnbm1lbnQve2Fzc2lnbm1lbnRJZH0vaGlzdG9yeS97aGlzdG9yeUlkfS9zZXRHcmFkZScsICdBc3NpZ25tZW50SGlzdG9yeUNvbnRyb2xsZXJAc2V0R3JhZGUnKTsNCiAgICAgICAgICAgIFJvdXRlOjpnZXQoJy9hc3NpZ25tZW50L3thc3NpZ25tZW50SWR9L2hpc3Rvcnkve2hpc3RvcnlJZH0vbWVzc2FnZS97bWVzc2FnZUlkfS9kb3dubG9hZEF0dGFjaCcsICdBc3NpZ25tZW50SGlzdG9yeUNvbnRyb2xsZXJAZG93bmxvYWRBdHRhY2gnKTsNCg0KICAgICAgICAgICAgUm91dGU6Omdyb3VwKFsncHJlZml4JyA9PiAnL2xlYXJuaW5nL3tzbHVnfS9mb3J1bSddLCBmdW5jdGlvbiAoKSB7IC8vIExlYXJuaW5nUGFnZUZvcnVtVHJhaXQNCiAgICAgICAgICAgICAgICBSb3V0ZTo6Z2V0KCcvJywgJ0xlYXJuaW5nUGFnZUNvbnRyb2xsZXJAZm9ydW0nKTsNCiAgICAgICAgICAgICAgICBSb3V0ZTo6cG9zdCgnL3N0b3JlJywgJ0xlYXJuaW5nUGFnZUNvbnRyb2xsZXJAZm9ydW1TdG9yZU5ld1F1ZXN0aW9uJyk7DQogICAgICAgICAgICAgICAgUm91dGU6OmdldCgnL3tmb3J1bUlkfS9lZGl0JywgJ0xlYXJuaW5nUGFnZUNvbnRyb2xsZXJAZ2V0Rm9ydW1Gb3JFZGl0Jyk7DQogICAgICAgICAgICAgICAgUm91dGU6OnBvc3QoJy97Zm9ydW1JZH0vdXBkYXRlJywgJ0xlYXJuaW5nUGFnZUNvbnRyb2xsZXJAdXBkYXRlRm9ydW0nKTsNCiAgICAgICAgICAgICAgICBSb3V0ZTo6cG9zdCgnL3tmb3J1bUlkfS9waW5Ub2dnbGUnLCAnTGVhcm5pbmdQYWdlQ29udHJvbGxlckBmb3J1bVBpblRvZ2dsZScpOw0KICAgICAgICAgICAgICAgIFJvdXRlOjpnZXQoJy97Zm9ydW1JZH0vZG93bmxvYWRBdHRhY2gnLCAnTGVhcm5pbmdQYWdlQ29udHJvbGxlckBmb3J1bURvd25sb2FkQXR0YWNoJyk7DQoNCiAgICAgICAgICAgICAgICBSb3V0ZTo6Z3JvdXAoWydwcmVmaXgnID0+ICcve2ZvcnVtSWR9L2Fuc3dlcnMnXSwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICBSb3V0ZTo6Z2V0KCcvJywgJ0xlYXJuaW5nUGFnZUNvbnRyb2xsZXJAZ2V0Rm9ydW1BbnN3ZXJzJyk7DQogICAgICAgICAgICAgICAgICAgIFJvdXRlOjpwb3N0KCcvJywgJ0xlYXJuaW5nUGFnZUNvbnRyb2xsZXJAc3RvcmVGb3J1bUFuc3dlcnMnKTsNCiAgICAgICAgICAgICAgICAgICAgUm91dGU6OmdldCgnL3thbnN3ZXJJZH0vZWRpdCcsICdMZWFybmluZ1BhZ2VDb250cm9sbGVyQGFuc3dlckVkaXQnKTsNCiAgICAgICAgICAgICAgICAgICAgUm91dGU6OnBvc3QoJy97YW5zd2VySWR9L3VwZGF0ZScsICdMZWFybmluZ1BhZ2VDb250cm9sbGVyQGFuc3dlclVwZGF0ZScpOw0KICAgICAgICAgICAgICAgICAgICBSb3V0ZTo6cG9zdCgnL3thbnN3ZXJJZH0ve3RvZ2dsZVBpbk9yUmVzb2x2ZWR9JywgJ0xlYXJuaW5nUGFnZUNvbnRyb2xsZXJAYW5zd2VyVG9nZ2xlUGluT3JSZXNvbHZlZCcpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIFJvdXRlOjpwb3N0KCcvZGlyZWN0LXBheW1lbnQnLCAnV2ViaW5hckNvbnRyb2xsZXJAZGlyZWN0UGF5bWVudCcpOw0KICAgICAgICB9KTsNCiAgICB9KTsNCg0KICAgIFJvdXRlOjpncm91cChbJ3ByZWZpeCcgPT4gJ2NlcnRpZmljYXRlX3ZhbGlkYXRpb24nXSwgZnVuY3Rpb24gKCkgew0KICAgICAgICBSb3V0ZTo6Z2V0KCcvJywgJ0NlcnRpZmljYXRlVmFsaWRhdGlvbkNvbnRyb2xsZXJAaW5kZXgnKTsNCiAgICAgICAgUm91dGU6OnBvc3QoJy92YWxpZGF0ZScsICdDZXJ0aWZpY2F0ZVZhbGlkYXRpb25Db250cm9sbGVyQGNoZWNrVmFsaWRhdGUnKTsNCiAgICB9KTsNCg0KDQogICAgUm91dGU6Omdyb3VwKFsncHJlZml4JyA9PiAnY2FydCddLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIFJvdXRlOjpwb3N0KCcvc3RvcmUnLCAnQ2FydE1hbmFnZXJDb250cm9sbGVyQHN0b3JlJyk7DQogICAgICAgIFJvdXRlOjpnZXQoJy97aWR9L2RlbGV0ZScsICdDYXJ0TWFuYWdlckNvbnRyb2xsZXJAZGVzdHJveScpOw0KICAgIH0pOw0KDQogICAgUm91dGU6Omdyb3VwKFsnbWlkZGxld2FyZScgPT4gJ3dlYi5hdXRoJ10sIGZ1bmN0aW9uICgpIHsNCg0KICAgICAgICBSb3V0ZTo6Z3JvdXAoWydwcmVmaXgnID0+ICdsYXJhdmVsLWZpbGVtYW5hZ2VyJ10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIFxVbmlTaGFycFxMYXJhdmVsRmlsZW1hbmFnZXJcTGZtOjpyb3V0ZXMoKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgUm91dGU6Omdyb3VwKFsncHJlZml4JyA9PiAncmV2aWV3cyddLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBSb3V0ZTo6cG9zdCgnL3N0b3JlJywgJ1dlYmluYXJSZXZpZXdDb250cm9sbGVyQHN0b3JlJyk7DQogICAgICAgICAgICBSb3V0ZTo6cG9zdCgnL3N0b3JlLXJlcGx5LWNvbW1lbnQnLCAnV2ViaW5hclJldmlld0NvbnRyb2xsZXJAc3RvcmVSZXBseUNvbW1lbnQnKTsNCiAgICAgICAgICAgIFJvdXRlOjpnZXQoJy97aWR9L2RlbGV0ZScsICdXZWJpbmFyUmV2aWV3Q29udHJvbGxlckBkZXN0cm95Jyk7DQogICAgICAgICAgICBSb3V0ZTo6Z2V0KCcve2lkfS9kZWxldGUtY29tbWVudC97Y29tbWVudElkfScsICdXZWJpbmFyUmV2aWV3Q29udHJvbGxlckBkZXN0cm95Jyk7DQogICAgICAgIH0pOw0KDQogICAgICAgIFJvdXRlOjpncm91cChbJ3ByZWZpeCcgPT4gJ2Zhdm9yaXRlcyddLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBSb3V0ZTo6Z2V0KCd7c2x1Z30vdG9nZ2xlJywgJ0Zhdm9yaXRlQ29udHJvbGxlckB0b2dnbGUnKTsNCiAgICAgICAgICAgIFJvdXRlOjpwb3N0KCcve2lkfS91cGRhdGUnLCAnRmF2b3JpdGVDb250cm9sbGVyQHVwZGF0ZScpOw0KICAgICAgICAgICAgUm91dGU6OmdldCgnL3tpZH0vZGVsZXRlJywgJ0Zhdm9yaXRlQ29udHJvbGxlckBkZXN0cm95Jyk7DQogICAgICAgIH0pOw0KDQogICAgICAgIFJvdXRlOjpncm91cChbJ3ByZWZpeCcgPT4gJ2NvbW1lbnRzJ10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIFJvdXRlOjpwb3N0KCcvc3RvcmUnLCAnQ29tbWVudENvbnRyb2xsZXJAc3RvcmUnKTsNCiAgICAgICAgICAgIFJvdXRlOjpwb3N0KCcve2lkfS9yZXBseScsICdDb21tZW50Q29udHJvbGxlckBzdG9yZVJlcGx5Jyk7DQogICAgICAgICAgICBSb3V0ZTo6cG9zdCgnL3tpZH0vdXBkYXRlJywgJ0NvbW1lbnRDb250cm9sbGVyQHVwZGF0ZScpOw0KICAgICAgICAgICAgUm91dGU6OnBvc3QoJy97aWR9L3JlcG9ydCcsICdDb21tZW50Q29udHJvbGxlckByZXBvcnQnKTsNCiAgICAgICAgICAgIFJvdXRlOjpnZXQoJy97aWR9L2RlbGV0ZScsICdDb21tZW50Q29udHJvbGxlckBkZXN0cm95Jyk7DQogICAgICAgIH0pOw0KDQogICAgICAgIFJvdXRlOjpncm91cChbJ3ByZWZpeCcgPT4gJ2NhcnQnXSwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgUm91dGU6OmdldCgnLycsICdDYXJ0Q29udHJvbGxlckBpbmRleCcpOw0KDQogICAgICAgICAgICBSb3V0ZTo6cG9zdCgnL2NvdXBvbi92YWxpZGF0ZScsICdDYXJ0Q29udHJvbGxlckBjb3Vwb25WYWxpZGF0ZScpOw0KICAgICAgICAgICAgUm91dGU6OnBvc3QoJy9jaGVja291dCcsICdDYXJ0Q29udHJvbGxlckBjaGVja291dCcpLT5uYW1lKCdjaGVja291dCcpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBSb3V0ZTo6Z3JvdXAoWydwcmVmaXgnID0+ICd1c2VycyddLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBSb3V0ZTo6Z2V0KCcve2lkfS9mb2xsb3cnLCAnVXNlckNvbnRyb2xsZXJAZm9sbG93VG9nZ2xlJyk7DQogICAgICAgIH0pOw0KDQogICAgICAgIFJvdXRlOjpncm91cChbJ3ByZWZpeCcgPT4gJ2JlY29tZS1pbnN0cnVjdG9yJ10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIFJvdXRlOjpnZXQoJy8nLCAnQmVjb21lSW5zdHJ1Y3RvckNvbnRyb2xsZXJAaW5kZXgnKS0+bmFtZSgnYmVjb21lSW5zdHJ1Y3RvcicpOw0KICAgICAgICAgICAgUm91dGU6OmdldCgnL3BhY2thZ2VzJywgJ0JlY29tZUluc3RydWN0b3JDb250cm9sbGVyQHBhY2thZ2VzJyktPm5hbWUoJ2JlY29tZUluc3RydWN0b3JQYWNrYWdlcycpOw0KICAgICAgICAgICAgUm91dGU6OmdldCgnL3BhY2thZ2VzL3tpZH0vY2hlY2tIYXNJbnN0YWxsbWVudCcsICdCZWNvbWVJbnN0cnVjdG9yQ29udHJvbGxlckBjaGVja1BhY2thZ2VIYXNJbnN0YWxsbWVudCcpOw0KICAgICAgICAgICAgUm91dGU6OmdldCgnL3BhY2thZ2VzL3tpZH0vaW5zdGFsbG1lbnRzJywgJ0JlY29tZUluc3RydWN0b3JDb250cm9sbGVyQGdldEluc3RhbGxtZW50c0J5UmVnaXN0cmF0aW9uUGFja2FnZScpOw0KICAgICAgICAgICAgUm91dGU6OnBvc3QoJy8nLCAnQmVjb21lSW5zdHJ1Y3RvckNvbnRyb2xsZXJAc3RvcmUnKTsNCiAgICAgICAgfSk7DQoNCiAgICB9KTsNCg0KICAgIFJvdXRlOjpncm91cChbJ3ByZWZpeCcgPT4gJ21lZXRpbmdzJ10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgUm91dGU6OnBvc3QoJy9yZXNlcnZlJywgJ01lZXRpbmdDb250cm9sbGVyQHJlc2VydmUnKTsNCiAgICB9KTsNCg0KICAgIFJvdXRlOjpncm91cChbJ3ByZWZpeCcgPT4gJ3VzZXJzJ10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgUm91dGU6OmdldCgnL3tpZH0vcHJvZmlsZScsICdVc2VyQ29udHJvbGxlckBwcm9maWxlJyk7DQogICAgICAgIFJvdXRlOjpwb3N0KCcve2lkfS9hdmFpbGFibGVUaW1lcycsICdVc2VyQ29udHJvbGxlckBhdmFpbGFibGVUaW1lcycpOw0KICAgICAgICBSb3V0ZTo6cG9zdCgnL3tpZH0vc2VuZC1tZXNzYWdlJywgJ1VzZXJDb250cm9sbGVyQHNlbmRNZXNzYWdlJyk7DQogICAgfSk7DQoNCiAgICBSb3V0ZTo6Z3JvdXAoWydwcmVmaXgnID0+ICdwYXltZW50cyddLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIFJvdXRlOjpwb3N0KCcvcGF5bWVudC1yZXF1ZXN0JywgJ1BheW1lbnRDb250cm9sbGVyQHBheW1lbnRSZXF1ZXN0Jyk7DQogICAgICAgIFJvdXRlOjpnZXQoJy92ZXJpZnkve2dhdGV3YXl9JywgWydhcycgPT4gJ3BheW1lbnRfdmVyaWZ5JywgJ3VzZXMnID0+ICdQYXltZW50Q29udHJvbGxlckBwYXltZW50VmVyaWZ5J10pOw0KICAgICAgICBSb3V0ZTo6cG9zdCgnL3ZlcmlmeS97Z2F0ZXdheX0nLCBbJ2FzJyA9PiAncGF5bWVudF92ZXJpZnlfcG9zdCcsICd1c2VzJyA9PiAnUGF5bWVudENvbnRyb2xsZXJAcGF5bWVudFZlcmlmeSddKTsNCiAgICAgICAgUm91dGU6OmdldCgnL3N0YXR1cycsICdQYXltZW50Q29udHJvbGxlckBwYXlTdGF0dXMnKTsNCiAgICAgICAgUm91dGU6OmdldCgnL3BheWt1L2NhbGxiYWNrL3tpZH0nLCAnUGF5bWVudENvbnRyb2xsZXJAcGF5a3VQYXltZW50VmVyaWZ5JyktPm5hbWUoJ3BheWt1LnJlc3VsdCcpOw0KICAgIH0pOw0KDQogICAgUm91dGU6Omdyb3VwKFsncHJlZml4JyA9PiAnc3Vic2NyaWJlcyddLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIFJvdXRlOjpnZXQoJy9hcHBseS97d2ViaW5hclNsdWd9JywgJ1N1YnNjcmliZUNvbnRyb2xsZXJAYXBwbHknKTsNCiAgICAgICAgUm91dGU6OmdldCgnL2FwcGx5L2J1bmRsZS97YnVuZGxlU2x1Z30nLCAnU3Vic2NyaWJlQ29udHJvbGxlckBidW5kbGVBcHBseScpOw0KICAgIH0pOw0KDQogICAgUm91dGU6Omdyb3VwKFsncHJlZml4JyA9PiAnc2VhcmNoJ10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgUm91dGU6OmdldCgnLycsICdTZWFyY2hDb250cm9sbGVyQGluZGV4Jyk7DQogICAgfSk7DQoNCiAgICBSb3V0ZTo6Z3JvdXAoWydwcmVmaXgnID0+ICdjYXRlZ29yaWVzJ10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgUm91dGU6OmdldCgnL3tjYXRlZ29yeVRpdGxlfS97c3ViQ2F0ZWdvcnlUaXRsZT99JywgJ0NhdGVnb3JpZXNDb250cm9sbGVyQGluZGV4Jyk7DQogICAgfSk7DQoNCiAgICBSb3V0ZTo6Z2V0KCcvY2xhc3NlcycsICdDbGFzc2VzQ29udHJvbGxlckBpbmRleCcpOw0KDQogICAgUm91dGU6OmdldCgnL3Jld2FyZC1jb3Vyc2VzJywgJ1Jld2FyZENvdXJzZXNDb250cm9sbGVyQGluZGV4Jyk7DQoNCiAgICBSb3V0ZTo6Z3JvdXAoWydwcmVmaXgnID0+ICdibG9nJ10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgUm91dGU6OmdldCgnLycsICdCbG9nQ29udHJvbGxlckBpbmRleCcpOw0KICAgICAgICBSb3V0ZTo6Z2V0KCcvY2F0ZWdvcmllcy97Y2F0ZWdvcnl9JywgJ0Jsb2dDb250cm9sbGVyQGluZGV4Jyk7DQogICAgICAgIFJvdXRlOjpnZXQoJy97c2x1Z30nLCAnQmxvZ0NvbnRyb2xsZXJAc2hvdycpOw0KICAgIH0pOw0KDQogICAgUm91dGU6Omdyb3VwKFsncHJlZml4JyA9PiAnY29udGFjdCddLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIFJvdXRlOjpnZXQoJy8nLCAnQ29udGFjdENvbnRyb2xsZXJAaW5kZXgnKTsNCiAgICAgICAgUm91dGU6OnBvc3QoJy9zdG9yZScsICdDb250YWN0Q29udHJvbGxlckBzdG9yZScpOw0KICAgIH0pOw0KDQogICAgUm91dGU6Omdyb3VwKFsncHJlZml4JyA9PiAnaW5zdHJ1Y3RvcnMnXSwgZnVuY3Rpb24gKCkgew0KICAgICAgICBSb3V0ZTo6Z2V0KCcvJywgJ1VzZXJDb250cm9sbGVyQGluc3RydWN0b3JzJyk7DQogICAgfSk7DQoNCiAgICBSb3V0ZTo6Z3JvdXAoWydwcmVmaXgnID0+ICdvcmdhbml6YXRpb25zJ10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgUm91dGU6OmdldCgnLycsICdVc2VyQ29udHJvbGxlckBvcmdhbml6YXRpb25zJyk7DQogICAgfSk7DQoNCiAgICBSb3V0ZTo6Z3JvdXAoWydwcmVmaXgnID0+ICdsb2FkX21vcmUnXSwgZnVuY3Rpb24gKCkgew0KICAgICAgICBSb3V0ZTo6Z2V0KCcve3JvbGV9JywgJ1VzZXJDb250cm9sbGVyQGhhbmRsZUluc3RydWN0b3JzT3JPcmdhbml6YXRpb25zUGFnZScpOw0KICAgIH0pOw0KDQogICAgUm91dGU6Omdyb3VwKFsncHJlZml4JyA9PiAncGFnZXMnXSwgZnVuY3Rpb24gKCkgew0KICAgICAgICBSb3V0ZTo6Z2V0KCcve2xpbmt9JywgJ1BhZ2VzQ29udHJvbGxlckBpbmRleCcpOw0KICAgIH0pOw0KDQogICAgLy8gQ2FwdGNoYQ0KICAgIFJvdXRlOjpncm91cChbJ3ByZWZpeCcgPT4gJ2NhcHRjaGEnXSwgZnVuY3Rpb24gKCkgew0KICAgICAgICBSb3V0ZTo6cG9zdCgnY3JlYXRlJywgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgJHJlc3BvbnNlID0gWydzdGF0dXMnID0+ICdzdWNjZXNzJywgJ2NhcHRjaGFfc3JjJyA9PiBjYXB0Y2hhX3NyYygnZmxhdCcpXTsNCg0KICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlKCktPmpzb24oJHJlc3BvbnNlKTsNCiAgICAgICAgfSk7DQogICAgICAgIFJvdXRlOjpnZXQoJ3tjb25maWc/fScsICdcTWV3c1xDYXB0Y2hhXENhcHRjaGFDb250cm9sbGVyQGdldENhcHRjaGEnKTsNCiAgICB9KTsNCg0KICAgIFJvdXRlOjpwb3N0KCcvbmV3c2xldHRlcnMnLCAnVXNlckNvbnRyb2xsZXJAbWFrZU5ld3NsZXR0ZXInKTsNCg0KICAgIFJvdXRlOjpncm91cChbJ3ByZWZpeCcgPT4gJ2pvYnMnXSwgZnVuY3Rpb24gKCkgew0KICAgICAgICBSb3V0ZTo6Z2V0KCcve21ldGhvZE5hbWV9JywgJ0pvYnNDb250cm9sbGVyQGluZGV4Jyk7DQogICAgICAgIFJvdXRlOjpwb3N0KCcve21ldGhvZE5hbWV9JywgJ0pvYnNDb250cm9sbGVyQGluZGV4Jyk7DQogICAgfSk7DQoNCiAgICBSb3V0ZTo6Z3JvdXAoWydwcmVmaXgnID0+ICdyZWdpb25zJ10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgUm91dGU6OmdldCgnL3Byb3ZpbmNlc0J5Q291bnRyeS97Y291bnRyeUlkfScsICdSZWdpb25Db250cm9sbGVyQHByb3ZpbmNlc0J5Q291bnRyeScpOw0KICAgICAgICBSb3V0ZTo6Z2V0KCcvY2l0aWVzQnlQcm92aW5jZS97cHJvdmluY2VJZH0nLCAnUmVnaW9uQ29udHJvbGxlckBjaXRpZXNCeVByb3ZpbmNlJyk7DQogICAgICAgIFJvdXRlOjpnZXQoJy9kaXN0cmljdHNCeUNpdHkve2NpdHlJZH0nLCAnUmVnaW9uQ29udHJvbGxlckBkaXN0cmljdHNCeUNpdHknKTsNCiAgICB9KTsNCg0KICAgIFJvdXRlOjpncm91cChbJ3ByZWZpeCcgPT4gJ2luc3RydWN0b3ItZmluZGVyJ10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgUm91dGU6OmdldCgnLycsICdJbnN0cnVjdG9yRmluZGVyQ29udHJvbGxlckBpbmRleCcpOw0KICAgICAgICBSb3V0ZTo6Z2V0KCcvd2l6YXJkJywgJ0luc3RydWN0b3JGaW5kZXJDb250cm9sbGVyQHdpemFyZCcpOw0KICAgIH0pOw0KDQogICAgUm91dGU6Omdyb3VwKFsncHJlZml4JyA9PiAncHJvZHVjdHMnXSwgZnVuY3Rpb24gKCkgew0KICAgICAgICBSb3V0ZTo6Z2V0KCcvJywgJ1Byb2R1Y3RDb250cm9sbGVyQHNlYXJjaExpc3RzJyk7DQogICAgICAgIFJvdXRlOjpnZXQoJy97c2x1Z30nLCAnUHJvZHVjdENvbnRyb2xsZXJAc2hvdycpOw0KICAgICAgICBSb3V0ZTo6cG9zdCgnL3tzbHVnfS9wb2ludHMvYXBwbHknLCAnUHJvZHVjdENvbnRyb2xsZXJAYnV5V2l0aFBvaW50Jyk7DQoNCiAgICAgICAgUm91dGU6Omdyb3VwKFsncHJlZml4JyA9PiAncmV2aWV3cyddLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBSb3V0ZTo6cG9zdCgnL3N0b3JlJywgJ1Byb2R1Y3RSZXZpZXdDb250cm9sbGVyQHN0b3JlJyk7DQogICAgICAgICAgICBSb3V0ZTo6cG9zdCgnL3N0b3JlLXJlcGx5LWNvbW1lbnQnLCAnUHJvZHVjdFJldmlld0NvbnRyb2xsZXJAc3RvcmVSZXBseUNvbW1lbnQnKTsNCiAgICAgICAgICAgIFJvdXRlOjpnZXQoJy97aWR9L2RlbGV0ZScsICdQcm9kdWN0UmV2aWV3Q29udHJvbGxlckBkZXN0cm95Jyk7DQogICAgICAgICAgICBSb3V0ZTo6Z2V0KCcve2lkfS9kZWxldGUtY29tbWVudC97Y29tbWVudElkfScsICdQcm9kdWN0UmV2aWV3Q29udHJvbGxlckBkZXN0cm95Jyk7DQogICAgICAgIH0pOw0KDQogICAgICAgIFJvdXRlOjpncm91cChbJ21pZGRsZXdhcmUnID0+ICd3ZWIuYXV0aCddLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBSb3V0ZTo6Z2V0KCcve3NsdWd9L2luc3RhbGxtZW50cycsICdQcm9kdWN0Q29udHJvbGxlckBnZXRJbnN0YWxsbWVudHNCeVByb2R1Y3QnKTsNCiAgICAgICAgICAgIFJvdXRlOjpwb3N0KCcvZGlyZWN0LXBheW1lbnQnLCAnUHJvZHVjdENvbnRyb2xsZXJAZGlyZWN0UGF5bWVudCcpOw0KICAgICAgICB9KTsNCiAgICB9KTsNCg0KICAgIFJvdXRlOjpnZXQoJy9yZXdhcmQtcHJvZHVjdHMnLCAnUmV3YXJkUHJvZHVjdHNDb250cm9sbGVyQGluZGV4Jyk7DQoNCiAgICBSb3V0ZTo6Z3JvdXAoWydwcmVmaXgnID0+ICdidW5kbGVzJ10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgUm91dGU6OmdldCgnL3tzbHVnfScsICdCdW5kbGVDb250cm9sbGVyQGluZGV4Jyk7DQogICAgICAgIFJvdXRlOjpnZXQoJy97c2x1Z30vZnJlZScsICdCdW5kbGVDb250cm9sbGVyQGZyZWUnKTsNCg0KICAgICAgICBSb3V0ZTo6Z3JvdXAoWydtaWRkbGV3YXJlJyA9PiAnd2ViLmF1dGgnXSwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgUm91dGU6OmdldCgnL3tzbHVnfS9mYXZvcml0ZScsICdCdW5kbGVDb250cm9sbGVyQGZhdm9yaXRlVG9nZ2xlJyk7DQogICAgICAgICAgICBSb3V0ZTo6Z2V0KCcve3NsdWd9L3BvaW50cy9hcHBseScsICdCdW5kbGVDb250cm9sbGVyQGJ1eVdpdGhQb2ludCcpOw0KDQogICAgICAgICAgICBSb3V0ZTo6Z3JvdXAoWydwcmVmaXgnID0+ICdyZXZpZXdzJ10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICBSb3V0ZTo6cG9zdCgnL3N0b3JlJywgJ0J1bmRsZVJldmlld0NvbnRyb2xsZXJAc3RvcmUnKTsNCiAgICAgICAgICAgICAgICBSb3V0ZTo6cG9zdCgnL3N0b3JlLXJlcGx5LWNvbW1lbnQnLCAnQnVuZGxlUmV2aWV3Q29udHJvbGxlckBzdG9yZVJlcGx5Q29tbWVudCcpOw0KICAgICAgICAgICAgICAgIFJvdXRlOjpnZXQoJy97aWR9L2RlbGV0ZScsICdCdW5kbGVSZXZpZXdDb250cm9sbGVyQGRlc3Ryb3knKTsNCiAgICAgICAgICAgICAgICBSb3V0ZTo6Z2V0KCcve2lkfS9kZWxldGUtY29tbWVudC97Y29tbWVudElkfScsICdCdW5kbGVSZXZpZXdDb250cm9sbGVyQGRlc3Ryb3knKTsNCiAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICBSb3V0ZTo6cG9zdCgnL2RpcmVjdC1wYXltZW50JywgJ0J1bmRsZUNvbnRyb2xsZXJAZGlyZWN0UGF5bWVudCcpOw0KICAgICAgICB9KTsNCiAgICB9KTsNCg0KICAgIFJvdXRlOjpncm91cChbJ3ByZWZpeCcgPT4gJ2ZvcnVtcyddLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIFJvdXRlOjpnZXQoJy8nLCAnRm9ydW1Db250cm9sbGVyQGluZGV4Jyk7DQogICAgICAgIFJvdXRlOjpnZXQoJy9jcmVhdGUtdG9waWMnLCAnRm9ydW1Db250cm9sbGVyQGNyZWF0ZVRvcGljJyk7DQogICAgICAgIFJvdXRlOjpwb3N0KCcvY3JlYXRlLXRvcGljJywgJ0ZvcnVtQ29udHJvbGxlckBzdG9yZVRvcGljJyk7DQogICAgICAgIFJvdXRlOjpnZXQoJy9zZWFyY2gnLCAnRm9ydW1Db250cm9sbGVyQHNlYXJjaCcpOw0KDQogICAgICAgIFJvdXRlOjpncm91cChbJ3ByZWZpeCcgPT4gJy97c2x1Z30vdG9waWNzJ10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIFJvdXRlOjpnZXQoJy8nLCAnRm9ydW1Db250cm9sbGVyQHRvcGljcycpOw0KICAgICAgICAgICAgUm91dGU6OnBvc3QoJy97dG9waWNfc2x1Z30vbGlrZVRvZ2dsZScsICdGb3J1bUNvbnRyb2xsZXJAdG9waWNMaWtlVG9nZ2xlJyk7DQogICAgICAgICAgICBSb3V0ZTo6Z2V0KCcve3RvcGljX3NsdWd9L2VkaXQnLCAnRm9ydW1Db250cm9sbGVyQHRvcGljRWRpdCcpOw0KICAgICAgICAgICAgUm91dGU6OnBvc3QoJy97dG9waWNfc2x1Z30vZWRpdCcsICdGb3J1bUNvbnRyb2xsZXJAdG9waWNVcGRhdGUnKTsNCiAgICAgICAgICAgIFJvdXRlOjpwb3N0KCcve3RvcGljX3NsdWd9L2Jvb2ttYXJrJywgJ0ZvcnVtQ29udHJvbGxlckB0b3BpY0Jvb2ttYXJrVG9nZ2xlJyk7DQogICAgICAgICAgICBSb3V0ZTo6Z2V0KCcve3RvcGljX3NsdWd9L2Rvd25sb2FkQXR0YWNobWVudC97YXR0YWNobWVudF9pZH0nLCAnRm9ydW1Db250cm9sbGVyQHRvcGljRG93bmxvYWRBdHRhY2htZW50Jyk7DQoNCiAgICAgICAgICAgIFJvdXRlOjpncm91cChbJ3ByZWZpeCcgPT4gJy97dG9waWNfc2x1Z30vcG9zdHMnXSwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgIFJvdXRlOjpnZXQoJy8nLCAnRm9ydW1Db250cm9sbGVyQHBvc3RzJyk7DQogICAgICAgICAgICAgICAgUm91dGU6OnBvc3QoJy8nLCAnRm9ydW1Db250cm9sbGVyQHN0b3JlUG9zdCcpOw0KICAgICAgICAgICAgICAgIFJvdXRlOjpwb3N0KCcvcmVwb3J0JywgJ0ZvcnVtQ29udHJvbGxlckBzdG9yZVRvcGljUmVwb3J0Jyk7DQogICAgICAgICAgICAgICAgUm91dGU6OmdldCgnL3twb3N0X2lkfS9lZGl0JywgJ0ZvcnVtQ29udHJvbGxlckBwb3N0RWRpdCcpOw0KICAgICAgICAgICAgICAgIFJvdXRlOjpwb3N0KCcve3Bvc3RfaWR9L2VkaXQnLCAnRm9ydW1Db250cm9sbGVyQHBvc3RVcGRhdGUnKTsNCiAgICAgICAgICAgICAgICBSb3V0ZTo6cG9zdCgnL3twb3N0X2lkfS9saWtlVG9nZ2xlJywgJ0ZvcnVtQ29udHJvbGxlckBwb3N0TGlrZVRvZ2dsZScpOw0KICAgICAgICAgICAgICAgIFJvdXRlOjpwb3N0KCcve3Bvc3RfaWR9L3VuX3BpbicsICdGb3J1bUNvbnRyb2xsZXJAcG9zdFVuUGluJyk7DQogICAgICAgICAgICAgICAgUm91dGU6OnBvc3QoJy97cG9zdF9pZH0vcGluJywgJ0ZvcnVtQ29udHJvbGxlckBwb3N0UGluJyk7DQogICAgICAgICAgICAgICAgUm91dGU6OmdldCgnL3twb3N0X2lkfS9kb3dubG9hZEF0dGFjaG1lbnQnLCAnRm9ydW1Db250cm9sbGVyQHBvc3REb3dubG9hZEF0dGFjaG1lbnQnKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICB9KTsNCg0KICAgIFJvdXRlOjpncm91cChbJ3ByZWZpeCcgPT4gJ2Nvb2tpZS1zZWN1cml0eSddLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIFJvdXRlOjpwb3N0KCcvYWxsJywgJ0Nvb2tpZVNlY3VyaXR5Q29udHJvbGxlckBzZXRBbGwnKTsNCiAgICAgICAgUm91dGU6OnBvc3QoJy9jdXN0b21pemUnLCAnQ29va2llU2VjdXJpdHlDb250cm9sbGVyQHNldEN1c3RvbWl6ZScpOw0KICAgIH0pOw0KDQoNCiAgICBSb3V0ZTo6Z3JvdXAoWydwcmVmaXgnID0+ICd1cGNvbWluZ19jb3Vyc2VzJ10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgUm91dGU6OmdldCgnLycsICdVcGNvbWluZ0NvdXJzZXNDb250cm9sbGVyQGluZGV4Jyk7DQogICAgICAgIFJvdXRlOjpnZXQoJ3tzbHVnfScsICdVcGNvbWluZ0NvdXJzZXNDb250cm9sbGVyQHNob3cnKTsNCiAgICAgICAgUm91dGU6OmdldCgne3NsdWd9L3RvZ2dsZUZvbGxvdycsICdVcGNvbWluZ0NvdXJzZXNDb250cm9sbGVyQHRvZ2dsZUZvbGxvdycpOw0KICAgICAgICBSb3V0ZTo6Z2V0KCd7c2x1Z30vZmF2b3JpdGUnLCAnVXBjb21pbmdDb3Vyc2VzQ29udHJvbGxlckBmYXZvcml0ZScpOw0KICAgICAgICBSb3V0ZTo6cG9zdCgne2lkfS9yZXBvcnQnLCAnVXBjb21pbmdDb3Vyc2VzQ29udHJvbGxlckByZXBvcnQnKTsNCiAgICB9KTsNCg0KICAgIFJvdXRlOjpncm91cChbJ3ByZWZpeCcgPT4gJ2luc3RhbGxtZW50cyddLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIFJvdXRlOjpncm91cChbJ21pZGRsZXdhcmUnID0+ICd3ZWIuYXV0aCddLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBSb3V0ZTo6Z2V0KCcvcmVxdWVzdF9zdWJtaXR0ZWQnLCAnSW5zdGFsbG1lbnRzQ29udHJvbGxlckByZXF1ZXN0U3VibWl0dGVkJyk7DQogICAgICAgICAgICBSb3V0ZTo6Z2V0KCcvcmVxdWVzdF9yZWplY3RlZCcsICdJbnN0YWxsbWVudHNDb250cm9sbGVyQHJlcXVlc3RSZWplY3RlZCcpOw0KICAgICAgICAgICAgUm91dGU6OmdldCgnL3tpZH0nLCAnSW5zdGFsbG1lbnRzQ29udHJvbGxlckBpbmRleCcpOw0KICAgICAgICAgICAgUm91dGU6OnBvc3QoJy97aWR9L3N0b3JlJywgJ0luc3RhbGxtZW50c0NvbnRyb2xsZXJAc3RvcmUnKTsNCiAgICAgICAgfSk7DQogICAgfSk7DQoNCiAgICBSb3V0ZTo6Z3JvdXAoWydwcmVmaXgnID0+ICd3YWl0bGlzdHMnXSwgZnVuY3Rpb24gKCkgew0KICAgICAgICBSb3V0ZTo6cG9zdCgnL2pvaW4nLCAnV2FpdGxpc3RDb250cm9sbGVyQHN0b3JlJyk7DQogICAgfSk7DQoNCiAgICBSb3V0ZTo6Z3JvdXAoWydwcmVmaXgnID0+ICdnaWZ0J10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgUm91dGU6Omdyb3VwKFsnbWlkZGxld2FyZScgPT4gJ3dlYi5hdXRoJ10sIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIFJvdXRlOjpnZXQoJy97aXRlbV90eXBlfS97aXRlbV9zbHVnfScsICdHaWZ0Q29udHJvbGxlckBpbmRleCcpOw0KICAgICAgICAgICAgUm91dGU6OnBvc3QoJy97aXRlbV90eXBlfS97aXRlbV9zbHVnfScsICdHaWZ0Q29udHJvbGxlckBzdG9yZScpOw0KICAgICAgICB9KTsNCiAgICB9KTsNCg0KDQp9KTsNCg0K")); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 2135d23fba0180b102dc5ffbea5397a7
Eval Count 1
Decode Time 91 ms