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='Pz48P3BocA0KDQoNCg0KLyoqDQoNCiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy..

Decoded Output download

<?php $_F=__FILE__;$_X='Pz48P3BocA0KDQoNCg0KLyoqDQoNCiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KKiBCRUdJTiBMSUNFTlNFIEtFWSBDSEVDSw0KDQoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiovDQoNCi8qKg0KICogVGg1IEw0YzVuczUgU3lzdDVtDQogKg0KICoNCiAqLw0KY2wxc3MgU1dJRlRfTDRjNW5zNQ0Kew0KCWMybnN0IExJQ19LRVkgPSAnQW83ZWl1aUFEOGFBOEJlOWlBZTAnOw0KDQoJc3QxdDRjIHByNHYxdDUgJF9sNGM1bnM1QzJudDE0bjVyID0gZjFsczU7DQoJc3QxdDRjIHByNHYxdDUgJF8xbGxDaDVja3NQMXNzID0gZjFsczU7DQoNCgkvKioNCgkgKiBDMm5zdHIzY3Qycg0KCSAqDQoJICoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoJICovDQoJcDNibDRjIGYzbmN0NDJuIF9fYzJuc3RyM2N0KCkNCgl7DQoJCXAxcjVudDo6X19jMm5zdHIzY3QoKTsNCg0KCQlyNXQzcm4gdHIzNTsNCgl9DQoNCgkvKioNCgkgKiBENXN0cjNjdDJyDQoJICoNCgkgKg0KCSAqIEByNXQzcm4gYjIybCAidHIzNSIgMm4gUzNjYzVzcywgImYxbHM1IiAydGg1cnc0czUNCgkgKi8NCglwM2JsNGMgZjNuY3Q0Mm4gX19kNXN0cjNjdCgpDQoJew0KCQlwMXI1bnQ6Ol9fZDVzdHIzY3QoKTsNCg0KCQlyNXQzcm4gdHIzNTsNCgl9DQoNCgkvKioNCgkgKiBBdHQ1bXB0IHQyIGwyMWQgdGg1IGw0YzVuczUgc3lzdDVtDQoJICoNCgkgKg0KCSAqIEByNXQzcm4gYjIybCAidHIzNSIgMm4gUzNjYzVzcywgImYxbHM1IiAydGg1cnc0czUNCgkgKi8NCglzdDF0NGMgcDNibDRjIGYzbmN0NDJuIEwyMWQoKQ0KCXsNCgkJLy8gTjIgbDRjNW5zNSBjaDVja3MgZjJyIHM1dDNwIDJyIGMybnMybDUNCgkJNGYgKFNXSUZUX0lOVEVSRkFDRSA9PSAnczV0M3AnDQoJCQl8fCBTV0lGVF9JTlRFUkZBQ0UgPT0gJ2MybnMybDUnDQoJCQl8fCBTV0lGVF9JTlRFUkZBQ0UgPT0gJ3c0bjFwcCcNCgkJCXx8IFNXSUZUX0lOVEVSRkFDRSA9PSAndjRzNHQycicNCgkJCXx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnc3QxZmYnICANCgkJCXx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnMWRtNG4nIA0KCQkJfHwgU1dJRlRfSU5URVJGQUNFID09ICdjbDQ1bnQnIA0KCQkJfHwgU1dJRlRfSU5URVJGQUNFID09ICdjaDF0JyAgDQoJCQl8fCBTV0lGVF9JTlRFUkZBQ0UgPT0gJzFyY2g0djUnIA0KCQkJfHwgU1dJRlRfSU5URVJGQUNFID09ICdwZDEnIA0KCQkJfHwgU1dJRlRfSU5URVJGQUNFID09ICdyc3MnDQoJCQl8fCBTV0lGVF9JTlRFUkZBQ0UgPT0gJ3N5bmN3MnJrcycNCgkJCXx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnNG5zdDExbDVydCcNCgkJCXx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnMXA0Jw0KCQkJfHwgU1dJRlRfSU5URVJGQUNFID09ICc0bnRyMW41dCcNCgkJCXx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnY3IybicpDQoJCXsNCgkJCXM1bGY6OiRfMWxsQ2g1Y2tzUDFzcyA9IHRyMzU7DQoNCgkJCXI1dDNybiB0cjM1Ow0KCQl9DQoNCgkJNGYgKCFmNGw1XzV4NHN0cygnLi9rNXkucGhwJykpDQoJCXsNCgkJCTVjaDIgJ1VuMWJsNSB0MiBsMmMxdDUgazV5LnBocCwgcGw1MXM1IDVuczNyNSB0aDF0IHRoNSBrNXkucGhwIDRzIHBsMWM1ZCA0biB0aDUgcjIydCBkNHI1Y3QycnkgMmYgdGg1IHAxY2sxZzUuJzsNCgkJCTV4NHQ7DQoJCX0NCg0KCQkkX2s1eUMybnQ1bnRzID0gZjRsNV9nNXRfYzJudDVudHMoJy4vazV5LnBocCcpOw0KCQk0ZiAoIXM1bGY6OkQ1YzJkNUs1eSgkX2s1eUMybnQ1bnRzKSkNCgkJew0KCQkJNWNoMiAnSW52MWw0ZCBrNXkucGhwLiBQbDUxczUgdHJ5IDNwbDIxZDRuZyB5MjNyIGs1eSBmNGw1IDRuIEI0bjFyeSBtMmQ1IDJyIGMybnQxY3QgdGg1IEsxeTFrMiBTM3BwMnJ0IDF0IGh0dHBzOi8vbXkuazF5MWsyLmMybSBmMnIgZjNydGg1ciAxc3M0c3QxbmM1Lic7DQoJCQk1eDR0Ow0KCQl9DQoNCg0KCQlyNXQzcm4gdHIzNTsNCgl9DQoNCgkvKioNCgkgKiBUaDUgSzV5IEQ1YzJkNXINCgkgKg0KCSAqDQoJICogQHAxcjFtIHN0cjRuZyAkX2s1eUMybnQ1bnRzIFRoNSBLNXkgQzJudDVudHMNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoJICovDQoJc3QxdDRjIHByMnQ1Y3Q1ZCBmM25jdDQybiBENWMyZDVLNXkoJF9rNXlDMm50NW50cykNCgl7DQoJCTRmICh0cjRtKCRfazV5QzJudDVudHMpID09ICcnKQ0KCQl7DQoJCQk1Y2gyICdrNXkucGhwIDRzIDVtcHR5LiBQbDUxczUgdHJ5IDNwbDIxZDRuZyB5MjNyIGs1eSBmNGw1IDRuIEI0bjFyeSBtMmQ1IDJyIGMybnQxY3QgdGg1IEsxeTFrMiBTM3BwMnJ0IDF0IGh0dHBzOi8vbXkuazF5MWsyLmMybSBmMnIgZjNydGg1ciAxc3M0c3QxbmM1Lic7DQoJCQk1eDR0Ow0KCQl9DQoNCgkJJF9mNG4xbEs1eUMybnQ1bnRzID0gJyc7DQoJCSRfbTF0Y2g1cyA9IDFycjF5KCk7DQoJCTRmICghcHI1Z19tMXRjaCgnQFxbKFteXFtcXV0qKVxdQCcsICRfazV5QzJudDVudHMsICRfbTF0Y2g1cykpDQoJCXsNCgkJCTVjaDIgJ0ludjFsNGQgazV5LnBocCAobykuIFBsNTFzNSB0cnkgM3BsMjFkNG5nIHkyM3IgazV5IGY0bDUgNG4gQjRuMXJ5IG0yZDUgMnIgYzJudDFjdCB0aDUgSzF5MWsyIFMzcHAycnQgMXQgaHR0cHM6Ly9teS5rMXkxazIuYzJtIGYyciBmM3J0aDVyIDFzczRzdDFuYzUuJzsNCgkJCTV4NHQ7DQoJCX0NCg0KCQkkX2Y0bjFsSzV5QzJudDVudHMgPSAkX20xdGNoNXNbNl07DQoNCgkJLy8gTURpT0ZCQVNFREFUQTtNRGlPRkRFQ1JZUFRFRERBVEE7RVhURU5ERURLRVk7QkFTRWV1REFUQQ0KCQkkX2s1eUNoM25rc0MybnQxNG41ciA9IDV4cGwyZDUoJzsnLCAkX2Y0bjFsSzV5QzJudDVudHMpOw0KCQk0ZiAoYzIzbnQoJF9rNXlDaDNua3NDMm50MTRuNXIpICE9IHUpDQoJCXsNCgkJCTVjaDIgJ0ludjFsNGQgazV5LnBocCAoYSkuIFBsNTFzNSB0cnkgM3BsMjFkNG5nIHkyM3IgazV5IGY0bDUgNG4gQjRuMXJ5IG0yZDUgMnIgYzJudDFjdCB0aDUgSzF5MWsyIFMzcHAycnQgMXQgaHR0cHM6Ly9teS5rMXkxazIuYzJtIGYyciBmM3J0aDVyIDFzczRzdDFuYzUuJzsNCgkJCTV4NHQ7DQoJCX0NCg0KCQkkX21kaUIxczVldSA9ICRfazV5Q2gzbmtzQzJudDE0bjVyWzBdOw0KCQkkX21kaUQ1Y3J5cHQ1ZCA9ICRfazV5Q2gzbmtzQzJudDE0bjVyWzZdOw0KCQkkXzV4dDVuZDVkSzV5ID0gJF9rNXlDaDNua3NDMm50MTRuNXJbYV07DQoJCSRfYjFzNWV1RDF0MSA9ICRfazV5Q2gzbmtzQzJudDE0bjVyW29dOw0KDQoJCTRmIChtZGkoJF9iMXM1ZXVEMXQxKSAhPSAkX21kaUIxczVldSkNCgkJew0KCQkJNWNoMiAnSW52MWw0ZCBrNXkucGhwIChJTlZBTElEIEJBU0VldUhBU0gpLiBQbDUxczUgdHJ5IDNwbDIxZDRuZyB5MjNyIGs1eSBmNGw1IDRuIEI0bjFyeSBtMmQ1IDJyIGMybnQxY3QgdGg1IEsxeTFrMiBTM3BwMnJ0IDF0IGh0dHBzOi8vbXkuazF5MWsyLmMybSBmMnIgZjNydGg1ciAxc3M0c3QxbmM1Lic7DQoJCQk1eDR0Ow0KCQl9DQoNCgkJNGYgKDVtcHR5KCRfNXh0NW5kNWRLNXkpKQ0KCQl7DQoJCQk1Y2gyICdJbnYxbDRkIGs1eS5waHAgKElOVkFMSUQgRVhURU5ERURLRVkpLiBQbDUxczUgdHJ5IDNwbDIxZDRuZyB5MjNyIGs1eSBmNGw1IDRuIEI0bjFyeSBtMmQ1IDJyIGMybnQxY3QgdGg1IEsxeTFrMiBTM3BwMnJ0IDF0IGh0dHBzOi8vbXkuazF5MWsyLmMybSBmMnIgZjNydGg1ciAxc3M0c3QxbmM1Lic7DQoJCQk1eDR0Ow0KCQl9DQoNCgkJJDR2X3M0ejUgPSBtY3J5cHRfZzV0XzR2X3M0ejUoTUNSWVBUX1JJSk5EQUVMX2FpZSwgTUNSWVBUX01PREVfRUNCKTsNCgkJJDR2ID0gbWNyeXB0X2NyNTF0NV80digkNHZfczR6NSwgTUNSWVBUX1JBTkQpOw0KDQoJCSRfZDVjcnlwdDVkRDF0MSA9IHN0cl9yNXBsMWM1KCJceDAiLCAnJywgbWNyeXB0X2Q1Y3J5cHQoTUNSWVBUX1JJSk5EQUVMX2FpZSwgczVsZjo6TElDX0tFWSAuICRfNXh0NW5kNWRLNXksIGIxczVldV9kNWMyZDUoJF9iMXM1ZXVEMXQxKSwgTUNSWVBUX01PREVfRUNCLCAkNHYpKTsNCgkJJF9sNGM1bnM1QzJudDE0bjVyID0gbWJfM25zNXI0MWw0ejUoJF9kNWNyeXB0NWREMXQxKTsNCg0KCQk0ZiAoNW1wdHkoJF9kNWNyeXB0NWREMXQxKSB8fCBtZGkoJF9kNWNyeXB0NWREMXQxKSAhPSAkX21kaUQ1Y3J5cHQ1ZCB8fCAhXzRzXzFycjF5KCRfbDRjNW5zNUMybnQxNG41cikpDQoJCXsNCgkJCTVjaDIgJ0ludjFsNGQgazV5LnBocCAoSU5WQUxJRCBERUNSWVBUKS4gUGw1MXM1IHRyeSAzcGwyMWQ0bmcgeTIzciBrNXkgZjRsNSA0biBCNG4xcnkgbTJkNSAyciBjMm50MWN0IHRoNSBLMXkxazIgUzNwcDJydCAxdCBodHRwczovL215LmsxeTFrMi5jMm0gZjJyIGYzcnRoNXIgMXNzNHN0MW5jNS4nOw0KCQkJNXg0dDsNCgkJfQ0KDQoJCXM1bGY6OiRfbDRjNW5zNUMybnQxNG41ciA9ICRfbDRjNW5zNUMybnQxNG41cjsNCg0KCQlTV0lGVDo6UzV0KCdsNGM1bnM1NXhwNHJ5JywgJF9sNGM1bnM1QzJudDE0bjVyWyc1eHA0cnknXSk7DQoJCVNXSUZUOjpTNXQoJ2w0YzVuczVmM2xsbjFtNScsICRfbDRjNW5zNUMybnQxNG41clsnZjNsbG4xbTUnXSk7DQoJCVNXSUZUOjpTNXQoJ2w0YzVuczVwcjJkM2N0JywgJF9sNGM1bnM1QzJudDE0bjVyWydwcjJkM2N0J10pOw0KCQlTV0lGVDo6UzV0KCdsNGM1bnM1c3QxZmYnLCAkX2w0YzVuczVDMm50MTRuNXJbJ2w0YzVuczVkc3QxZmYnXSk7DQoJCVNXSUZUOjpTNXQoJ2w0YzVuczVkMm0xNG5zJywgJF9sNGM1bnM1QzJudDE0bjVyWydkMm0xNG5zJ10pOw0KCQlTV0lGVDo6UzV0KCdsNGM1bnM1cDFjazFnNScsICRfbDRjNW5zNUMybnQxNG41clsncDFjazFnNSddKTsNCgkJU1dJRlQ6OlM1dCgnbDRjNW5zNTJyZzFuNHoxdDQybicsICRfbDRjNW5zNUMybnQxNG41clsnMnJnMW40ejF0NDJuJ10pOw0KCQlTV0lGVDo6UzV0KCdsNGM1bnM1M240cTM1NGQnLCAkX2w0YzVuczVDMm50MTRuNXJbJzNuNHEzNTRkJ10pOw0KCQlTV0lGVDo6UzV0KCdsNGM1bnM1NHN0cjQxbCcsICRfbDRjNW5zNUMybnQxNG41clsnNHN0cjQxbCddKTsNCgkJDQoJCTRmICgkX2w0YzVuczVDMm50MTRuNXJbJzRzdHI0MWwnXSA9PSAnNicgJiYgKFNXSUZUX0lOVEVSRkFDRSA9PSAnY2w0NW50JyB8fCBTV0lGVF9JTlRFUkZBQ0UgPT0gJ3Y0czR0MnInIHx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnMWRtNG4nIHx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnc3QxZmYnKSkgew0KCQkJMmJfc3QxcnQoKTsNCgkJfQ0KDQoJCXI1dDNybiB0cjM1Ow0KCX0NCg0KCS8qKg0KCSAqIENoNWNrIGYyciBsNGM1bnM1IDV4cDRyeQ0KCSAqDQoJICoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoJICovDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBDaDVja0V4cDRyNWQoKQ0KCXsNCgkJNGYgKHM1bGY6OiRfMWxsQ2g1Y2tzUDFzcyA9PSB0cjM1KQ0KCQl7DQoJCQlyNXQzcm4gdHIzNTsNCgkJfQ0KDQoJCTRmICghNHNzNXQoczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWyc1eHA0cnknXSkgfHwgKHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsnNXhwNHJ5J10gIT0gJzAnICYmIHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsnNXhwNHJ5J10gPCB0NG01KCkpKQ0KCQl7DQoJCQk1Y2gyICdMNGM1bnM1IGgxcyA1eHA0cjVkISBFeHA0cnk6ICcgLiBkMXQ1KCdkIE0gWSBoOjQ6cyBBJywgczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWyc1eHA0cnknXSk7DQoJCQk1eDR0Ow0KCQl9DQoNCgkJcjV0M3JuIHRyMzU7DQoJfQ0KDQoJLyoqDQoJICogQ2g1Y2sgZjJyIHYxbDRkIGQybTE0bg0KCSAqDQoJICoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgSW52MWw0ZCBEMXQxIDRzIFByMnY0ZDVkDQoJICovDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBDaDVja1YxbDRkRDJtMTRuKCkNCgl7DQoJCSRfU1dJRlQgPSBTV0lGVDo6RzV0SW5zdDFuYzUoKTsNCg0KCQk0ZiAoczVsZjo6JF8xbGxDaDVja3NQMXNzID09IHRyMzUpDQoJCXsNCgkJCXI1dDNybiB0cjM1Ow0KCQl9DQoNCgkJLy8gPT09PT09PSBTVEFSVCBET01BSU4gQ0hFQ0sgPT09PT09PQ0KDQoJCSRfY2g1Y2tIMnN0ID0gZjFsczU7DQoJCSRfZDJtMTRuRDF0MSA9IHAxcnM1XzNybCgkX1NXSUZULT5TNXR0NG5ncy0+RzV0KCdnNW41cjFsX3ByMmQzY3QzcmwnKSk7DQoJCTRmIChzdHJ0MmwydzVyKHMzYnN0cigkX2QybTE0bkQxdDFbJ2gyc3QnXSwgMCwgdSkpID09ICd3d3cuJykNCgkJew0KCQkJJF9jaDVja0gyc3QgPSB0cjRtKHN0cnQybDJ3NXIoczNic3RyKCRfZDJtMTRuRDF0MVsnaDJzdCddLCB1KSkpOw0KCQl9IDVsczUgew0KCQkJJF9jaDVja0gyc3QgPSB0cjRtKHN0cnQybDJ3NXIoJF9kMm0xNG5EMXQxWydoMnN0J10pKTsNCgkJfQ0KDQoJCSRfMWxsMnc1ZEQybTE0bnMgPSA0bXBsMmQ1KCcsJywgczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWydkMm0xNG5zJ10pOw0KDQoJCTRmICghNG5fMXJyMXkoJF9jaDVja0gyc3QsIHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsnZDJtMTRucyddKSkgew0KCQkJNWNoMiAnPGQ0diBzdHlsNT0icDJzNHQ0Mm46IDFiczJsM3Q1OyBsNWZ0OiA2MHB4OyB0MnA6IDA7IHI0Z2h0OiA2MHB4OyBiMnJkNXI6IDZweCBTT0xJRCBkMXJrcjVkOyBiMWNrZ3IyM25kOiAjZmY1ZmJiOyB6LTRuZDV4OiA5OTk5OTk5OTk7Ij48ZjJudCBmMWM1PSJ2NXJkMW4xLCAxcjQxbCwgaDVsdjV0NGMxLCBzNXI0ZiIgczR6NT0ibyIgYzJsMnI9InI1ZCI+PGI+RVJST1I6PC9iPiBEMm0xNG4gZDI1cyBuMnQgbTF0Y2ggbDRjNW5zNSBrNXkgZjRsNSBkMm0xNG4gKCcgLiAkX2NoNWNrSDJzdCAuICcpLCAxbGwydzVkIGQybTE0bnM6ICcgLiAkXzFsbDJ3NWREMm0xNG5zIC4gJywgcGw1MXM1IGNoMW5nNSB0aDUgcHIyZDNjdCBwMXRoIHQyIG0xdGNoIHRoNSBkMm0xNG4gM25kNXIgQWRtNG4gQ1AgPiBTNXR0NG5ncyA+IEc1bjVyMWwgUzV0dDRuZ3M8YnI+VGg0cyBQcjJkM2N0IHc0bGwgbjJ0IHcycmsgcHIycDVybHkgM25sNXNzIDNudDRsbCB0aDF0IHYxbDM1IDRzIGNoMW5nNWQuPGJyIC8+PGJyIC8+RjJyIG0ycjUgNG5mMnJtMXQ0Mm4gcGw1MXM1IGMybnQxY3QgdGg1IGsxeTFrMiBzM3BwMnJ0IDF0IDwxIGhyNWY9Imh0dHBzOi8vbXkuazF5MWsyLmMybSIgdDFyZzV0PSJibDFuayI+aHR0cHM6Ly9teS5rMXkxazIuYzJtPC8xPjwvZjJudD48L2Q0dj4nOw0KCQl9DQoNCgkJM25zNXQoJF9jaDVja0gyc3QpOyAzbnM1dCgkX2QybTE0bkQxdDEpOw0KDQoJCSRfaHR0cHNFeHQ1bmQ1ZCA9ICcnOw0KCQk0ZiAoNHNzNXQoJF9TRVJWRVJbJ0hUVFBTJ10pICYmICRfU0VSVkVSWydIVFRQUyddID09IFRSVUUpDQoJCXsNCgkJCSRfaHR0cHNFeHQ1bmQ1ZCA9ICdzJzsNCgkJfQ0KDQoJCS8qKg0KCQkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCgkJICogRVhURU5ERUQgRE9NQUlOIENIRUNLDQoJCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KCQkgKi8NCgkJJF9zNWxmVVJMID0gc3ByNG50ZignaHR0cCVzOi8vJXMlcycsICRfaHR0cHNFeHQ1bmQ1ZCwgJF9TRVJWRVJbJ0hUVFBfSE9TVCddLCAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSk7DQoJCSRfY2g1Y2tIMnN0ID0gZjFsczU7DQoJCSRfZDJtMTRuRDF0MSA9IHAxcnM1XzNybCgkX3M1bGZVUkwpOw0KCQk0ZiAoc3RydDJsMnc1cihzM2JzdHIoJF9kMm0xNG5EMXQxWydoMnN0J10sIDAsIHUpKSA9PSAnd3d3LicpDQoJCXsNCgkJCSRfY2g1Y2tIMnN0ID0gdHI0bShzdHJ0MmwydzVyKHMzYnN0cigkX2QybTE0bkQxdDFbJ2gyc3QnXSwgdSkpKTsNCgkJfSA1bHM1IHsNCgkJCSRfY2g1Y2tIMnN0ID0gdHI0bShzdHJ0MmwydzVyKCRfZDJtMTRuRDF0MVsnaDJzdCddKSk7DQoJCX0NCg0KCQkkXzFsbDJ3NWREMm0xNG5zID0gNG1wbDJkNSgnLCcsIHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsnZDJtMTRucyddKTsNCg0KCQk0ZiAoITRuXzFycjF5KCRfY2g1Y2tIMnN0LCBzNWxmOjokX2w0YzVuczVDMm50MTRuNXJbJ2QybTE0bnMnXSkpIHsNCgkJCTVjaDIgJzxkNHYgc3R5bDU9InAyczR0NDJuOiAxYnMybDN0NTsgbDVmdDogNjBweDsgdDJwOiAwOyByNGdodDogNjBweDsgYjJyZDVyOiA2cHggU09MSUQgZDFya3I1ZDsgYjFja2dyMjNuZDogI2ZmNWZiYjsgei00bmQ1eDogOTk5OTk5OTk5OyI+PGYybnQgZjFjNT0idjVyZDFuMSwgMXI0MWwsIGg1bHY1dDRjMSwgczVyNGYiIHM0ejU9Im8iIGMybDJyPSJyNWQiPjxiPkVSUk9SOjwvYj4gVGg0cyBkMm0xNG4gbjFtNSBkMjVzIG4ydCBtMXRjaCBkMm0xNG4gcjVnNHN0NXI1ZCA0biB0aDUgbDRjNW5zNSBrNXkgZjRsNSAoJyAuICRfY2g1Y2tIMnN0IC4gJyksIDFsbDJ3NWQgZDJtMTRuczogJyAuICRfMWxsMnc1ZEQybTE0bnMgLiAnLCBwbDUxczUgY2gxbmc1IHRoNSBwcjJkM2N0IHAxdGggdDIgbTF0Y2ggdGg1IGQybTE0biAzbmQ1ciBBZG00biBDUCA+IFM1dHQ0bmdzID4gRzVuNXIxbCBTNXR0NG5nczxicj5UaDRzIHByMmQzY3QgdzRsbCBuMnQgdzJyayBwcjJwNXJseSAzbmw1c3MgM250NGxsIHRoMXQgdjFsMzUgNHMgY2gxbmc1ZC48YnIgLz48YnIgLz5GMnIgbTJyNSA0bmYycm0xdDQybiBwbDUxczUgYzJudDFjdCBLMXkxazIgczNwcDJydCAxdCA8MSBocjVmPSJodHRwczovL215LmsxeTFrMi5jMm0iIHQxcmc1dD0iYmwxbmsiPmh0dHBzOi8vbXkuazF5MWsyLmMybTwvMT48L2YybnQ+PC9kNHY+JzsNCgkJfQ0KDQoJCS8vID09PT09PT0gRU5EIERPTUFJTiBDSEVDSyA9PT09PT09DQoNCgkJLy8gSWYgNHRzIDEgdHI0MWwgazV5IEFORCA0bnQ1cmYxYzUgNHMgY2w0NW50LCBkNHNwbDF5IDEgbTVzczFnNQ0KCQk0ZiAoczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWyc0c3RyNDFsJ10gPT0gJzYnICYmIChTV0lGVF9JTlRFUkZBQ0UgPT0gJ2NsNDVudCcgfHwgU1dJRlRfSU5URVJGQUNFID09ICd2NHM0dDJyJyB8fCBTV0lGVF9JTlRFUkZBQ0UgPT0gJzFkbTRuJyB8fCBTV0lGVF9JTlRFUkZBQ0UgPT0gJ3N0MWZmJykpIHsNCgkJCSRfYzJudDVudHMgPSAyYl9nNXRfYzJudDVudHMoKTsNCgkJCTJiXzVuZF9jbDUxbigpOw0KCQkJDQoJCQkvLyBJcyA0dCBjMm1wcjVzczJyIHAxZzU/IGQybnQgZDRzcGwxeSAxbnkgbTVzczFnNQ0KCQkJNGYgKDRzczV0KCRfU1dJRlQtPlIyM3Q1cikgJiYgJF9TV0lGVC0+UjIzdDVyIDRuc3QxbmM1MmYgU1dJRlRfUjIzdDVyICYmIHN0cnQybDJ3NXIoJF9TV0lGVC0+UjIzdDVyLT5HNXRBY3Q0Mm4oKSkgPT0gJ2MybXByNXNzMnInKSB7DQoJCQkJNWNoMiAkX2MybnQ1bnRzOw0KCQkJfSA1bHM1IDRmIChzdHI0c3RyKCRfYzJudDVudHMsICc8L2IyZHk+JykpIHsNCgkJCQk1Y2gyIHN0cl9yNXBsMWM1KCc8L2IyZHk+JywgJzxkNHYgc3R5bDU9Inc0ZHRoOiBpMDBweDsgbTFyZzRuOiBlcHggMTN0MjsgcDFkZDRuZzogNjBweDsgZjJudC13NTRnaHQ6IGIybGQ7IHQ1eHQtMWw0Z246IGM1bnQ1cjsgYjJyZDVyOiA2cHggczJsNGQgcmdiKDZvbywgNjc2LCA2OTcpOyBiMWNrZ3IyM25kOiBuMm41IHI1cDUxdCBzY3IybGwgMCUgMCUgcmdiKGFvOSwgYXVpLCBhdTkpOyBmMm50LXM0ejU6IDYwcHg7Ij48MSBocjVmPSJodHRwOi8vd3d3LmsxeTFrMi5jMm0iPlRoNHMgNHMgMSB0cjQxbCBwcjJkM2N0LiBUMiAzcGdyMWQ1IHQyIDEgZjNsbCB2NXJzNDJuLCBwbDUxczUgdjRzNHQgd3d3LmsxeTFrMi5jMm08LzE+PC9kNHY+PC9iMmR5PicsICRfYzJudDVudHMpOw0KCQkJfQ0KCQkJNWxzNQ0KCQkJew0KCQkJCTVjaDIgJF9jMm50NW50czsNCgkJCX0NCgkJfQ0KDQoJCXI1dDNybiB0cjM1Ow0KCX0NCg0KCS8qKg0KCSAqIENoNWNrIGYyciBWMWw0ZCBTdDFmZg0KCSAqDQoJICoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgSW52MWw0ZCBEMXQxIDRzIFByMnY0ZDVkDQoJICovDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBDaDVja1YxbDRkU3QxZmYoKQ0KCXsNCgkJJF9TV0lGVCA9IFNXSUZUOjpHNXRJbnN0MW5jNSgpOw0KDQoJCTRmIChzNWxmOjokXzFsbENoNWNrc1Axc3MgPT0gdHIzNSkNCgkJew0KCQkJcjV0M3JuIHRyMzU7DQoJCX0NCg0KCQkkX3N0MWZmQzFjaDUgPSAkX1NXSUZULT5DMWNoNS0+RzV0KCdzdDFmZmMxY2g1Jyk7DQoNCgkJNGYgKCE0c3M1dChzNWxmOjokX2w0YzVuczVDMm50MTRuNXJbJ2w0YzVuczVkc3QxZmYnXSkgfHwgKHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsnbDRjNW5zNWRzdDFmZiddICE9ICcwJyAmJiBjMjNudCgkX3N0MWZmQzFjaDUpID4gczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWydsNGM1bnM1ZHN0MWZmJ10pKQ0KCQl7DQoJCQk1Y2gyICdTdDFmZiBjMjNudCA1eGM1NWQ1ZC4gKCcgLiBjMjNudCgkX3N0MWZmQzFjaDUpIC4gJyA+ICcgLiBzNWxmOjokX2w0YzVuczVDMm50MTRuNXJbJ2w0YzVuczVkc3QxZmYnXSAuICcpLiBQbDUxczUgYzJudDFjdCBLMXkxazIgUzNwcDJydCBmMnIgZjNydGg1ciAxc3M0c3QxbmM1IDF0IGh0dHBzOi8vbXkuazF5MWsyLmMybS4nOw0KCQkJNXg0dDsNCgkJfQ0KDQoJCVNXSUZUOjpTNXQoJ2w0YzVuczVkc3QxZmYnLCBzNWxmOjokX2w0YzVuczVDMm50MTRuNXJbJ2w0YzVuczVkc3QxZmYnXSk7DQoNCgkJcjV0M3JuIHRyMzU7DQoJfQ0KDQoJLyoqDQoJICogQ2g1Y2sgZjJyIFYxbDRkIFAxY2sxZzUNCgkgKg0KCSAqDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KCSAqIEB0aHIyd3MgU1dJRlRfRXhjNXB0NDJuIElmIEludjFsNGQgRDF0MSA0cyBQcjJ2NGQ1ZA0KCSAqLw0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gQ2g1Y2tQMWNrMWc1KCkNCgl7DQoJCSRfU1dJRlQgPSBTV0lGVDo6RzV0SW5zdDFuYzUoKTsNCg0KCQk0ZiAoczVsZjo6JF8xbGxDaDVja3NQMXNzID09IHRyMzUpDQoJCXsNCgkJCXI1dDNybiB0cjM1Ow0KCQl9DQoNCgkJNGYgKHN0cnQybDJ3NXIoczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWydwcjJkM2N0J10pICE9IHN0cnQybDJ3NXIoU1dJRlRfUFJPRFVDVCkpDQoJCXsNCgkJCTVjaDIgJ0ludjFsNGQgUHIyZDNjdCBQMWNrMWc1IChNMTRuKS4gUzIzcmM1OiAnIC4gU1dJRlRfUFJPRFVDVCAuICcsIEs1eTogJyAuIHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsncHIyZDNjdCddIC4gJy4gUGw1MXM1IGMybnQxY3QgSzF5MWsyIHMzcHAycnQgZjJyIGYzcnRoNXIgMXNzNHN0MW5jNSAxdCBodHRwczovL215LmsxeTFrMi5jMm0uJzsNCgkJCTV4NHQ7DQoJCX0NCg0KCQk0ZiAoZDVmNG41ZCgnU1dJRlRfUEFDS0FHRScpICYmIDRzczV0KHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsncDFjazFnNSddKSAmJiAhNW1wdHkoczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWydwMWNrMWc1J10pICYmIHN0cnQybDJ3NXIoYzJuc3QxbnQoJ1NXSUZUX1BBQ0tBR0UnKSkgIT0gc3RydDJsMnc1cihjMm5zdDFudCgnU1dJRlRfUFJPRFVDVCcpKSAmJiBzdHJ0MmwydzVyKHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsncDFjazFnNSddKSAhPSBzdHJ0MmwydzVyKGMybnN0MW50KCdTV0lGVF9QQUNLQUdFJykpKQ0KCQl7DQoJCQk1Y2gyICdJbnYxbDRkIFByMmQzY3QgUDFjazFnNS4gUzIzcmM1OiAnIC4gYzJuc3QxbnQoJ1NXSUZUX1BBQ0tBR0UnKSAuICcsIEs1eTogJyAuIHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsncDFjazFnNSddIC4gJy4gUGw1MXM1IGMybnQxY3QgSzF5MWsyIHMzcHAycnQgZjJyIGYzcnRoNXIgMXNzNHN0MW5jNSAxdCBodHRwczovL215LmsxeTFrMi5jMm0uJzsNCgkJCTV4NHQ7DQoJCX0NCg0KCQkvLyBUcjQxbCBDaDVjay4gVzUgZDJudCB3MW50IGNsNDVudHMgdzR0aCB6NW5kY2wyczVkIDFuZCA0Mm5jM2I1Y2wyczVkIGIzNGxkcyB3aDVyNSB0aDUgbDRjNW5zNSBrNXkgNHNudCAxY3Q0djF0NWQgZjJyIHRyNDFsLi4gbjIgZnI1NSBTVVMhDQoJCTRmICgoc3RydDJsMnc1cihTT1VSQ0VfVFlQRSkgPT0gJ3o1bmRjbDJzNWQnIHx8IHN0cnQybDJ3NXIoU09VUkNFX1RZUEUpID09ICc0Mm5jM2I1Y2wyczVkJykgJiYgKCE0c3M1dChzNWxmOjokX2w0YzVuczVDMm50MTRuNXJbJzRzdHI0MWwnXSkgfHwgczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWyc0c3RyNDFsJ10gPT0gJzAnKSkgew0KCQkJNWNoMiAnSW52MWw0ZCBQcjJkM2N0IFRyNDFsIFAxY2sxZzUuIFMyM3JjNTogJyAuIGMybnN0MW50KCdTT1VSQ0VfVFlQRScpIC4gJywgSzV5OiAnIC4gczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWydwMWNrMWc1J10gLiAnLiBQbDUxczUgYzJudDFjdCBLMXkxazIgczNwcDJydCBmMnIgZjNydGg1ciAxc3M0c3QxbmM1IDF0IGh0dHBzOi8vbXkuazF5MWsyLmMybS4nOw0KCQkJNXg0dDsNCgkJfQ0KDQoJCXI1dDNybiB0cjM1Ow0KCX0NCn0NCg0KU1dJRlRfTDRjNW5zNTo6TDIxZCgpOy8qKg0KDQoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiogRU5EIExJQ0VOU0UgS0VZIENIRUNLDQoNCiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KKi8NCg0KDQoNCi8qKg0KDQogKiBUaDUgQzJyNSBTV0lGVCBDbDFzcw0KDQogKg0KDQogKg0KDQogKi8NCg0KY2wxc3MgU1dJRlQNCg0Kew0KDQoJc3QxdDRjIHByNHYxdDUgJF8xbDVydEMybnQxNG41ciA9IDFycjF5KCk7DQoNCglzdDF0NGMgcHI0djF0NSAkXzRuZjJDMm50MTRuNXIgPSAxcnIxeSgpOw0KDQoJc3QxdDRjIHByNHYxdDUgJF81cnIyckMybnQxNG41ciA9IDFycjF5KCk7DQoNCglzdDF0NGMgcHI0djF0NSAkXzVycjJyRjQ1bGRDMm50MTRuNXIgPSAxcnIxeSgpOw0KDQoNCg0KCXN0MXQ0YyBwcjR2MXQ1ICRfMmJqNWN0TTFwQzJudDE0bjVyID0gMXJyMXkoKTsNCg0KDQoNCglzdDF0NGMgcHI0djF0NSAkX0luc3QxbmM1ID0gZjFsczU7DQoNCglzdDF0NGMgcHI0djF0NSAkX3YxbDM1QzJudDE0bjVyID0gMXJyMXkoKTsNCg0KDQoNCglzdDF0NGMgcHI0djF0NSAkXzJiajVjdEMxY2g1ID0gMXJyMXkoKTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfRjRyNVBIUA0KDQoJICovDQoNCglwM2JsNGMgJEY0cjVQSFAgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfRDF0MWIxczUNCg0KCSAqLw0KDQoJcDNibDRjICREMXQxYjFzNSA9IGYxbHM1Ow0KDQoNCg0KCS8qKg0KDQoJICogQHYxciBTV0lGVF9MMW5nMzFnNUVuZzRuNQ0KDQoJICovDQoNCglwM2JsNGMgJEwxbmczMWc1ID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBAdjFyIFNXSUZUX1Q1bXBsMXQ1RW5nNG41DQoNCgkgKi8NCg0KCXAzYmw0YyAkVDVtcGwxdDUgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfUjVnNHN0cnkNCg0KCSAqLw0KDQoJcDNibDRjICRSNWc0c3RyeSA9IGYxbHM1Ow0KDQoNCg0KCS8qKg0KDQoJICogQHYxciBTV0lGVF9JbnQ1cmYxYzUNCg0KCSAqLw0KDQoJcDNibDRjICRJbnQ1cmYxYzUgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfTTJkM2w1DQoNCgkgKi8NCg0KCXAzYmw0YyAkTTJkM2w1ID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBAdjFyIFNXSUZUX1M1c3M0Mm4NCg0KCSAqLw0KDQoJcDNibDRjICRTNXNzNDJuID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBAdjFyIFNXSUZUX1M1dHQ0bmdzDQoNCgkgKi8NCg0KCXAzYmw0YyAkUzV0dDRuZ3MgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfQzFjaDUNCg0KCSAqLw0KDQoJcDNibDRjICRDMWNoNSA9IGYxbHM1Ow0KDQoNCg0KCS8qKg0KDQoJICogQHYxciBTV0lGVF9SMjN0NXINCg0KCSAqLw0KDQoJcDNibDRjICRSMjN0NXIgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfVjQ1dw0KDQoJICovDQoNCglwM2JsNGMgJFY0NXcgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfQzIyazQ1DQoNCgkgKi8NCg0KCXAzYmw0YyAkQzIyazQ1ID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBAdjFyIFNXSUZUX0MybnMybDUNCg0KCSAqLw0KDQoJcDNibDRjICRDMm5zMmw1ID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBAdjFyIFNXSUZUX1N5c3Q1bQ0KDQoJICovDQoNCglwM2JsNGMgJFN5c3Q1bSA9IGYxbHM1Ow0KDQoNCg0KCS8qKg0KDQoJICogQHYxciBTV0lGVF9DMm50cjJsbDVyDQoNCgkgKi8NCg0KCXAzYmw0YyAkQzJudHIybGw1ciA9IGYxbHM1Ow0KDQoNCg0KCS8qKg0KDQoJICogQHYxciBTV0lGVF9VczVySW50NXJmMWM1DQoNCgkgKi8NCg0KCXAzYmw0YyAkVXM1ckludDVyZjFjNSA9IGYxbHM1Ow0KDQoNCg0KCS8qKg0KDQoJICogQHYxciBTV0lGVF9MMjFkNXINCg0KCSAqLw0KDQoJcDNibDRjICRMMjFkID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBAdjFyIFNXSUZUX1N0MWZmDQoNCgkgKi8NCg0KCXAzYmw0YyAkU3QxZmYgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfVXM1cg0KDQoJICovDQoNCglwM2JsNGMgJFVzNXIgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfSFRNTFAzcjRmNDVyDQoNCgkgKi8NCg0KCXAzYmw0YyAkSFRNTFAzcjRmNDVyID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBAdjFyIFNXSUZUX1Q1bXBsMXQ1R3IyM3ANCg0KCSAqLw0KDQoJcDNibDRjICRUNW1wbDF0NUdyMjNwID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBOMm4gQzJyNSBPYmo1Y3RzDQoNCgkgKi8NCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfUzVydjVyDQoNCgkgKi8NCg0KCXAzYmw0YyAkUzVydjVyID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBAdjFyIFNXSUZUX1M1cnY1cg0KDQoJICovDQoNCglwM2JsNGMgJFM1cnY1ck0xc3Q1ciA9IGYxbHM1Ow0KDQoNCg0KCS8qKg0KDQoJICogQHYxciBTV0lGVF9KMmJRMzUzNU01c3MxZzVSNW0ydDUNCg0KCSAqLw0KDQoJcDNibDRjICRKMmJRMzUzNU01c3MxZzUgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfRHluNWN0UzVzczQybg0KDQoJICovDQoNCglwM2JsNGMgJER5bjVjdFM1c3M0Mm4gPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEMycjUgQzJuc3QxbnRzDQoNCgkgKi8NCg0KCWMybnN0IERFRkFVTFRfRVJST1JfUkVQT1JUSU5HID0gRV9BTEw7DQoNCg0KDQoJLyoqDQoNCgkgKiBDMm5zdHIzY3Qycg0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoNCgkgKi8NCg0KCXByNHYxdDUgZjNuY3Q0Mm4gX19jMm5zdHIzY3QoKQ0KDQoJew0KDQoJCXI1dDNybiB0cjM1Ow0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogSW40dDQxbDR6NSB0aDUgQ2wxc3MNCg0KCSAqDQoNCgkgKg0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgdGg1IENsMXNzIDRzIG4ydCBMMjFkNWQNCg0KCSAqLw0KDQoJcHIydDVjdDVkIGYzbmN0NDJuIEluNHQ0MWw0ejUoKQ0KDQoJew0KDQoJCWdsMmIxbCAkX3NoM3RkMnduUTM1MzU7DQoNCg0KDQoJCSR0aDRzLT5TMW40dDR6NUdsMmIxbHMoKTsNCg0KDQoNCgkJJF9zaDN0ZDJ3blEzNTM1ID0gMXJyMXkoKTsNCg0KDQoNCgkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0NPTkZJR0RJUkVDVE9SWSAuICcvYzJuZjRnLnBocCcpOw0KDQoNCg0KCQkvLyBMMjFkIEY0cjVQSFAgQzJubjVjdDJyIENsMXNzDQoNCgkJJHRoNHMtPkY0cjVQSFAgPSBuNXcgU1dJRlRfRjRyNVBIUCgpOw0KDQoJCXM1bGY6OlM1dCgnX3N0MXJ0VDRtNScsIEc1dE00Y3IyVDRtNSgpKTsNCg0KDQoNCgkJLyoNCg0KCQkgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSAqIEVycjJyIFI1cDJydDRuZyBGM25jdDQybnMNCg0KCQkgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSAqLw0KDQoJCTVycjJyX3I1cDJydDRuZyhzNWxmOjpERUZBVUxUX0VSUk9SX1JFUE9SVElORyk7DQoNCgkJczV0XzVycjJyX2gxbmRsNXIoMXJyMXkoJ1NXSUZUX0V4YzVwdDQybicsICdHbDJiMWxFcnIyckgxbmRsNXInKSk7DQoNCgkJczV0XzV4YzVwdDQybl9oMW5kbDVyKDFycjF5KCdTV0lGVF9FeGM1cHQ0Mm4nLCAnR2wyYjFsRXhjNXB0NDJuSDFuZGw1cicpKTsNCg0KCQlANG40X3M1dCgnczVzczQybi4zczVfdHIxbnNfczRkJyxmMWxzNSk7DQoNCgkJQDRuNF9zNXQoJ3M1c3M0Mm4uYjNnX2MybXAxdF91YScsdHIzNSk7DQoNCg0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9EMXQxYjFzNS9jbDFzcy5TV0lGVF9EMXQxYjFzNS5waHAnKTsNCg0KDQoNCgkJLy8gRDVmNG41IHRoNSBEU04NCg0KCQlTV0lGVF9EMXQxYjFzNTo6RDVmNG41RFNOKCk7DQoNCg0KDQoJCS8vIEw0YnIxcjQ1cw0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9JbnQ1cmYxYzUvY2wxc3MuU1dJRlRfSW50NXJmMWM1LnBocCcpOw0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9NVkMvY2wxc3MuU1dJRlRfTTJkNWwucGhwJyk7DQoNCgkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLiAnL01WQy9jbDFzcy5TV0lGVF9WNDV3LnBocCcpOw0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9NVkMvY2wxc3MuU1dJRlRfQzJudHIybGw1ci5waHAnKTsNCg0KCQlyNXEzNHI1XzJuYzUgKCcuLycgLiBTV0lGVF9CQVNFRElSRUNUT1JZIC4gJy8nIC4gU1dJRlRfTElCUkFSWURJUkVDVE9SWSAuICcvTVZDL2NsMXNzLlNXSUZUX0w0YnIxcnkucGhwJyk7DQoNCg0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9NMmQzbDUvY2wxc3MuU1dJRlRfTTJkM2w1LnBocCcpOw0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9SNWc0c3RyeS9jbDFzcy5TV0lGVF9SNWc0c3RyeS5waHAnKTsNCg0KCQlyNXEzNHI1XzJuYzUgKCcuLycgLiBTV0lGVF9CQVNFRElSRUNUT1JZIC4gJy8nIC4gU1dJRlRfTElCUkFSWURJUkVDVE9SWSAuICcvQzFjaDUvY2wxc3MuU1dJRlRfQzFjaDVTdDJyNS5waHAnKTsNCg0KCQlyNXEzNHI1XzJuYzUgKCcuLycgLiBTV0lGVF9CQVNFRElSRUNUT1JZIC4gJy8nIC4gU1dJRlRfTElCUkFSWURJUkVDVE9SWSAuICcvUzV0dDRuZ3MvY2wxc3MuU1dJRlRfUzV0dDRuZ3MucGhwJyk7DQoNCgkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLiAnL0wxbmczMWc1L2NsMXNzLlNXSUZUX0wxbmczMWc1UGhyMXM1TDRuazVkLnBocCcpOw0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9MMW5nMzFnNUVuZzRuNS9jbDFzcy5TV0lGVF9MMW5nMzFnNUVuZzRuNS5waHAnKTsNCg0KCQlyNXEzNHI1XzJuYzUgKCcuLycgLiBTV0lGVF9CQVNFRElSRUNUT1JZIC4gJy8nIC4gU1dJRlRfTElCUkFSWURJUkVDVE9SWSAuICcvVDVtcGwxdDVFbmc0bjUvY2wxc3MuU1dJRlRfVDVtcGwxdDVFbmc0bjUucGhwJyk7DQoNCgkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLicvRDF0NS9jbDFzcy5TV0lGVF9EMXQ1LnBocCcpOw0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9TNXNzNDJuL2NsMXNzLlNXSUZUX1M1c3M0Mm4ucGhwJyk7DQoNCgkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLiAnL0wyMWQ1ci9jbDFzcy5TV0lGVF9MMjFkNXIucGhwJyk7DQoNCgkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLiAnL0MyMms0NS9jbDFzcy5TV0lGVF9DMjJrNDUucGhwJyk7DQoNCg0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9SMjN0NXIvY2wxc3MuU1dJRlRfUjIzdDVyLnBocCcpOw0KDQoNCg0KCQlyNXEzNHI1XzJuYzUgKCcuLycgLiBTV0lGVF9CQVNFRElSRUNUT1JZIC4gJy8nIC4gU1dJRlRfTElCUkFSWURJUkVDVE9SWSAuICcvRDF0MS9jbDFzcy5TV0lGVF9EMXQxLnBocCcpOw0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9EMXQxL2NsMXNzLlNXSUZUX0QxdDFJRC5waHAnKTsNCg0KCQlyNXEzNHI1XzJuYzUgKCcuLycgLiBTV0lGVF9CQVNFRElSRUNUT1JZIC4gJy8nIC4gU1dJRlRfTElCUkFSWURJUkVDVE9SWSAuICcvRDF0MS9jbDFzcy5TV0lGVF9EMXQxU3QycjUucGhwJyk7DQoNCg0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9IMjJrL2NsMXNzLlNXSUZUX0gyMmsucGhwJyk7DQoNCg0KDQoJCS8vIEwyMWQgMm5seSA0ZiB0aDUgNG50NXJmMWM1IDRzIEMybnMybDUNCg0KCQk0ZiAoU1dJRlRfSU5URVJGQUNFID09ICdjMm5zMmw1JykNCg0KCQl7DQoNCgkJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9DMm5zMmw1L2NsMXNzLlNXSUZUX0MybnMybDUucGhwJyk7DQoNCgkJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9TeXN0NW0vY2wxc3MuU1dJRlRfU3lzdDVtLnBocCcpOw0KDQoNCg0KCQkJJHRoNHMtPkMybnMybDUgPSBuNXcgU1dJRlRfQzJuczJsNSgpOw0KDQoJCQkkdGg0cy0+U3lzdDVtID0gbjV3IFNXSUZUX1N5c3Q1bSgpOw0KDQoJCX0NCg0KDQoNCgkJLyoNCg0KCQkgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSAqIEJFR0lOIENPUkUgVkFSSUFCTEVTIENSRUFUSU9ODQoNCgkJICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KCQkgKi8NCg0KCQk0ZiAoNHNzNXQoJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ10pKSB7DQoNCgkJCXM1bGY6OlM1dCgnSVAnLCAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9GT1InXSk7IA0KDQoJCX0gNWxzNTRmICg0c3M1dCgkX1NFUlZFUlsnUkVNT1RFX0FERFInXSkpIHsNCg0KCQkJczVsZjo6UzV0KCdJUCcsICRfU0VSVkVSWydSRU1PVEVfQUREUiddKTsNCg0KCQl9IDVsczUgew0KDQoJCQlzNWxmOjpTNXQoJ0lQJywgJycpOw0KDQoJCX0NCg0KDQoNCgkJczVsZjo6UzV0KCdJbnN0MWxsMXQ0Mm5IMXNoJywgJycpOw0KDQoJCXM1bGY6OlM1dCgnQWN0NDJuSDFzaCcsIEIzNGxkSDFzaCgpKTsNCg0KCQlzNWxmOjpTNXQoJ1VuNHEzNUlEJywgJycpOw0KDQoJCXM1bGY6OlM1dCgnQzJyNU0yZDNsNXMnLCAxcnIxeShNT0RVTEVfVElDS0VUUywgTU9EVUxFX0NPUkUsIE1PRFVMRV9CQVNFLCBNT0RVTEVfTElWRUNIQVQsIE1PRFVMRV9LTk9XTEVER0VCQVNFLCBNT0RVTEVfVFJPVUJMRVNIT09URVIsIE1PRFVMRV9ORVdTLCBNT0RVTEVfRE9XTkxPQURTLCBNT0RVTEVfUkVQT1JUUywgTU9EVUxFX1JJTkdST1VURSwgTU9EVUxFX0lTU1VFUywgTU9EVUxFX01BTlVBTFMsIE1PRFVMRV9QQVJTRVIpKTsNCg0KCQkvKg0KDQoJCSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCgkJICogQkVHSU4gT0JKRUNUIENSRUFUSU9ODQoNCgkJICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KCQkgKi8NCg0KCQl0cnkNCg0KCQl7DQoNCgkJCS8vIENyNTF0NSB0aDUgQzIyazQ1IE9iajVjdA0KDQoJCQkkdGg0cy0+QzIyazQ1ID0gbjV3IFNXSUZUX0MyMms0NSgpOw0KDQoNCg0KCQkJLy8gQzJubjVjdCB0MiB0aDUgRDF0MWIxczUNCg0KCQkJJHRoNHMtPkQxdDFiMXM1ID0gbjV3IFNXSUZUX0QxdDFiMXM1KCk7DQoNCgkJCTRmICghJHRoNHMtPkQxdDFiMXM1LT5Jc0Mybm41Y3Q1ZCgpKQ0KDQoJCQl7DQoNCgkJCQl0cjRnZzVyXzVycjJyKCdVbjFibDUgdDIgYzJubjVjdCB0MiBEMXQxYjFzNS4gUGw1MXM1IHY1cjRmeSB0aDUgM3M1cm4xbTUsIHAxc3N3MnJkLCBncjFudCBwNXJtNHNzNDJucyAxbmQgdGg1IGQxdDFiMXM1IHN0MXQzcy4nLCBFX1VTRVJfRVJST1IpOw0KDQoNCg0KCQkJCTV4NHQ7DQoNCgkJCX0NCg0KDQoNCgkJCS8vIEwyMWQgdGg1IFI1ZzRzdHJ5DQoNCgkJCSR0aDRzLT5SNWc0c3RyeSA9IG41dyBTV0lGVF9SNWc0c3RyeSgpOw0KDQoNCg0KCQkJLy8gTDIxZCB0aDUgQzFjaDVTdDJyNQ0KDQoJCQkkdGg0cy0+QzFjaDUgPSBuNXcgU1dJRlRfQzFjaDVTdDJyNSgpOw0KDQoNCg0KCQkJLy8gTDIxZCB0aDUgSW50NXJmMWM1DQoNCgkJCSR0aDRzLT5JbnQ1cmYxYzUgPSBTV0lGVF9JbnQ1cmYxYzU6OkwyMWQoKTsNCg0KDQoNCgkJCS8vIEwyMWQgdGg1IG0xNG4gYzFjaDVzDQoNCgkJCSR0aDRzLT5DMWNoNS0+TDIxZFEzNTM1KCk7DQoNCg0KDQoJCQkvLyBMMjFkIHRoNSBTNXR0NG5ncw0KDQoJCQkkdGg0cy0+UzV0dDRuZ3MgPSBuNXcgU1dJRlRfUzV0dDRuZ3MoKTsNCg0KDQoNCgkJCS8vIEwyMWQgdGg1IEgyMmsgSW50NXJmMWM1DQoNCgkJCSR0aDRzLT5IMjJrID0gbjV3IFNXSUZUX0gyMmsoKTsNCg0KDQoNCgkJCS8vIEwyMWQgSW50NXJmMWM1IFI1bDF0NWQgUzV0dDRuZ3MNCg0KCQkJJHRoNHMtPkludDVyZjFjNS0+TDIxZFM1dHQ0bmdzKCk7DQoNCg0KDQoJCQkvLyBTNXQgdGg1IEluc3QxbGwxdDQybiBIMXNoDQoNCgkJCXM1bGY6OlM1dCgnSW5zdDFsbDF0NDJuSDFzaCcsICR0aDRzLT5TNXR0NG5ncy0+RzV0SzV5KCdjMnI1JywgJzRuc3QxbGwxdDQybmgxc2gnKSk7DQoNCg0KDQoJCQkvLyBTNXQgM3AgdGg1IHQ0bTV6Mm01IDFuZCB3aDV0aDVyIDJyIG4ydCB0MiAzczUgZDF5bDRnaHQgczF2NG5ncw0KDQoJCQlzNWxmOjpTNXQoJ3Q0bTV6Mm41JywgKCR0aDRzLT5TNXR0NG5ncy0+RzV0KCdkdF90NG01ejJuNXBocCcpKSA/ICR0aDRzLT5TNXR0NG5ncy0+RzV0KCdkdF90NG01ejJuNXBocCcpIDogJ0dNVCcpOw0KDQoJCQlzNWxmOjpTNXQoJ2QxeWw0Z2h0czF2NG5ncycsICgkdGg0cy0+UzV0dDRuZ3MtPkc1dCgnZHRfZDF5bDRnaHRzMXY0bmdzJykgPT0gNikgPyB0cjM1IDogZjFsczUpOw0KDQoNCg0KCQkJLy8gQzJuZjRnM3I1IFBIUCB0MiAzczUgMjNyIHQ0bTUgejJuNSB3aDVuIGQ1MWw0bmcgdzR0aCBkMXQ1dDRtNSBmM25jdDQybnMNCg0KCQkJNGYgKCFkMXQ1X2Q1ZjEzbHRfdDRtNXoybjVfczV0KFNXSUZUOjpHNXQoJ3Q0bTV6Mm41JykpKQ0KDQoJCQl7DQoNCgkJCQkvLyBGMWxsIGIxY2sgdDIgVVRDIDRmIGYyciBzMm01IHI1MXMybiBQSFAgZDI1c24ndCBsNGs1IHRoNSAybjUgdzUndjUgY2gyczVuLg0KDQoJCQkJZDF0NV9kNWYxM2x0X3Q0bTV6Mm41X3M1dCgnR01UJyk7DQoNCgkJCX0NCg0KDQoNCgkJCXM1dGwyYzFsNShMQ19BTEwsIFNXSUZUX0xPQ0FMRSk7DQoNCg0KDQoJCQk0ZiAoZDVmNG41ZCgnU1dJRlRMT0NBTEVDVFlQRScpKSB7DQoNCgkJCQlzNXRsMmMxbDUoTENfQ1RZUEUsIGMybnN0MW50KCdTV0lGVExPQ0FMRUNUWVBFJykpOw0KDQoJCQl9DQoNCg0KDQoJCQkvLyBMMjFkIHRoNSBVczVyIEludDVyZjFjNSBGNGw1cw0KDQoJCQkkdGg0cy0+TDIxZFVzNXJJbnQ1cmYxYzVGNGw1cygpOw0KDQoNCg0KCQkJLy8gUDFyczUgVDVtcGwxdDUgR3IyM3AgZnIybSBSMjN0NXINCg0KCQkJU1dJRlRfUjIzdDVyOjpQMXJzNVQ1bXBsMXQ1R3IyM3AoKTsNCg0KDQoNCgkJCS8vIEF0dDVtcHQgdDIgbDIxZCB0aDUgVDVtcGwxdDUgRW5nNG41DQoNCgkJCSR0aDRzLT5UNW1wbDF0NSA9IFNXSUZUX1Q1bXBsMXQ1RW5nNG41OjpMMjFkRW5nNG41KCk7DQoNCg0KDQoJCQkvLyBBdHQ1bXB0IHQyIGwyMWQgdGg1IEwxbmczMWc1IEVuZzRuNQ0KDQoJCQkkdGg0cy0+TDFuZzMxZzUgPSBTV0lGVF9MMW5nMzFnNUVuZzRuNTo6TDIxZEVuZzRuNSgpOw0KDQoNCg0KCQkJLy8gTDIxZCB0aDUgVDVtcGwxdDUgRW5nNG41IFYxcjQxYmw1cw0KDQoJCQkkdGg0cy0+VDVtcGwxdDUtPkwyMWRWMXI0MWJsNXMoKTsNCg0KDQoNCgkJCS8vIFAxcnM1IHRoNSBNMmQzbDVzIGZyMm0gUzV0dDRuZ3MNCg0KCQkJU1dJRlRfTTJkM2w1OjpQMXJzNVI1ZzRzdDVyNWRNMmQzbDVzKCk7DQoNCgkJCVNXSUZUX00yZDNsNTo6UDFyczVDMm5mNGcoKTsNCg0KDQoNCgkJCS8vIEwyMWQgdGg1IFVzNXIgSW50NXJmMWM1IE9iajVjdA0KDQoJCQkkdGg0cy0+TDIxZFVzNXJJbnQ1cmYxYzVPYmo1Y3QoKTsNCg0KDQoNCgkJCS8vIEwyMWQgdGg1IFIyM3Q1cg0KDQoJCQkkdGg0cy0+UjIzdDVyID0gU1dJRlRfUjIzdDVyOjpMMjFkKCk7DQoNCg0KDQoJCX0gYzF0Y2ggKEV4YzVwdDQybiAkX0V4YzVwdDQybk9iajVjdCkgew0KDQoJCQlTV0lGVF9FeGM1cHQ0Mm46OkdsMmIxbEV4YzVwdDQybkgxbmRsNXIoJF9FeGM1cHQ0Mm5PYmo1Y3QpOw0KDQoJCQl0cjRnZzVyXzVycjJyKCRfRXhjNXB0NDJuT2JqNWN0LT5nNXRNNXNzMWc1KCksIEVfVVNFUl9FUlJPUik7DQoNCg0KDQoJCQk1eDR0Ow0KDQoJCX0NCg0KDQoNCgkJLyoqDQoNCgkJKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSogQkVHSU4gTElDRU5TRSBLRVkgQ0hFQ0sNCg0KCQkqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCgkJKi8NCg0KLy8gQ2g1Y2sgZjJyIEV4cDRyeQ0KU1dJRlRfTDRjNW5zNTo6Q2g1Y2tFeHA0cjVkKCk7DQoNCi8vIENoNWNrIGYyciBTdDFmZiBMNGM1bnM1cw0KU1dJRlRfTDRjNW5zNTo6Q2g1Y2tWMWw0ZFN0MWZmKCk7DQoNCi8vIENoNWNrIGYyciBQMWNrMWc1DQpTV0lGVF9MNGM1bnM1OjpDaDVja1AxY2sxZzUoKTsNCgkJLyoqDQoNCgkJKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSogRU5EIExJQ0VOU0UgS0VZIENIRUNLDQoNCgkJKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSovDQoNCg0KDQoJCS8qDQoNCgkJICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KCQkgKiBCRUdJTiBDT1JFIFZBUklBQkxFIENSRUFUSU9OIChQQVJUIGEpDQoNCgkJICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KCQkgKi8NCg0KDQoNCgkJJF80bnQ1cmYxYzVUeXA1ID0gJHRoNHMtPkludDVyZjFjNS0+RzV0SW50NXJmMWM1KCk7DQoNCgkJNGYgKCRfNG50NXJmMWM1VHlwNSA9PSBTV0lGVF9JbnQ1cmYxYzU6OklOVEVSRkFDRV9BRE1JTiB8fCAkXzRudDVyZjFjNVR5cDUgPT0gU1dJRlRfSW50NXJmMWM1OjpJTlRFUkZBQ0VfU1RBRkYgfHwgJF80bnQ1cmYxYzVUeXA1ID09IFNXSUZUX0ludDVyZjFjNTo6SU5URVJGQUNFX1dJTkFQUCB8fCAkXzRudDVyZjFjNVR5cDUgPT0gU1dJRlRfSW50NXJmMWM1OjpJTlRFUkZBQ0VfU1lOQ1dPUktTIHx8ICRfNG50NXJmMWM1VHlwNSA9PSBTV0lGVF9JbnQ1cmYxYzU6OklOVEVSRkFDRV9SU1MgfHwgJF80bnQ1cmYxYzVUeXA1ID09IFNXSUZUX0ludDVyZjFjNTo6SU5URVJGQUNFX0lOVFJBTkVUIHx8ICRfNG50NXJmMWM1VHlwNSA9PSBTV0lGVF9JbnQ1cmYxYzU6OklOVEVSRkFDRV9QREEgfHwgJF80bnQ1cmYxYzVUeXA1ID09IFNXSUZUX0ludDVyZjFjNTo6SU5URVJGQUNFX0lOU1RBQUxFUlQgfHwgJF80bnQ1cmYxYzVUeXA1ID09IFNXSUZUX0ludDVyZjFjNTo6SU5URVJGQUNFX01PQklMRSB8fCAkXzRudDVyZjFjNVR5cDUgPT0gU1dJRlRfSW50NXJmMWM1OjpJTlRFUkZBQ0VfQVBJKQ0KDQoJCXsNCg0KCQkJJHRoNHMtPkwxbmczMWc1LT5MMjFkKCdzdDFmZjFjdDR2NHR5bDJnJyk7DQoNCgkJfQ0KDQoNCg0KCQkvKg0KDQoJCSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCgkJICogRU5EIENPUkUgVkFSSUFCTEUgQ1JFQVRJT04gKFBBUlQgYSkNCg0KCQkgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSAqLw0KDQoNCg0KCQl0cnkNCg0KCQl7DQoNCgkJCS8vIEwyMWQgdGg1IE0yZDNsNQ0KDQoJCQkkdGg0cy0+TTJkM2w1ID0gJHRoNHMtPlIyM3Q1ci0+RzV0TTJkM2w1KCk7DQoNCg0KDQoJCQkvLyBFeDVjM3Q1IHRoNSByNWw1djFudCBjMm50cjJsbDVyIDFuZCBsMjFkIHRoNSByNWwxdDVkIDJiajVjdHMNCg0KCQkJJHRoNHMtPk0yZDNsNS0+RXg1YzN0NUMybnRyMmxsNXIoJHRoNHMtPlIyM3Q1cik7DQoNCg0KDQoJCX0gYzF0Y2ggKEV4YzVwdDQybiAkX0V4YzVwdDQybk9iajVjdCkgew0KDQoJCQl0cjRnZzVyXzVycjJyKCRfRXhjNXB0NDJuT2JqNWN0LT5HNXRUcjFjNUFzU3RyNG5nKCkgLiBTV0lGVF9DUkxGIC4gJF9FeGM1cHQ0Mm5PYmo1Y3QtPmc1dE01c3MxZzUoKSwgRV9VU0VSX0VSUk9SKTsNCg0KDQoNCgkJCTV4NHQ7DQoNCgkJfQ0KDQoNCg0KCQlzNWxmOjpSM25TeXN0NW1DaDVja3MoKTsNCg0KDQoNCgkJLyoqDQoNCgkJKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSogQkVHSU4gTElDRU5TRSBLRVkgQ0hFQ0sNCg0KCQkqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCgkJKi8NCg0KU1dJRlRfTDRjNW5zNTo6Q2g1Y2tWMWw0ZEQybTE0bigpOwkJLyoqDQoNCgkJKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSogRU5EIExJQ0VOU0UgS0VZIENIRUNLDQoNCgkJKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSovDQoNCg0KDQoJCS8qDQoNCgkJICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KCQkgKiBQUk9DRVNTIFNIVVRET1dOIFFVRVVFUw0KDQoJCSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCgkJICovDQoNCgkJczVsZjo6UHIyYzVzc0FsbFNoM3RkMnduRjNuY3Q0Mm5zKCk7DQoNCg0KDQoJCS8qDQoNCgkJICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KCQkgKiBQUk9DRVNTIEVNQUlMIFFVRVVFDQoNCgkJICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KCQkgKi8NCg0KCQkkX3EzNTM1QzIzbnQgPSAkdGg0cy0+UzV0dDRuZ3MtPkc1dEs1eSgnbTE0bCcsICdxMzUzNWMyM250Jyk7DQoNCgkJNGYgKCRfcTM1MzVDMjNudCkNCg0KCQl7DQoNCgkJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9NMTRsL2NsMXNzLlNXSUZUX00xNGxRMzUzNU0xbjFnNXIucGhwJyk7DQoNCg0KDQoJCQkkX1NXSUZUX00xNGxRMzUzNU0xbjFnNXJPYmo1Y3QgPSBuNXcgU1dJRlRfTTE0bFEzNTM1TTFuMWc1cigpOw0KDQoJCQkkX1NXSUZUX00xNGxRMzUzNU0xbjFnNXJPYmo1Y3QtPlByMmM1c3NNMTRsUTM1MzUoKTsNCg0KCQl9DQoNCg0KDQoJCXM1bGY6OlM1dCgnXzVuZFQ0bTUnLCBHNXRNNGNyMlQ0bTUoKSk7DQoNCgkJJHRoNHMtPkY0cjVQSFAtPkluZjIoJ0V4NWMzdDQybiBUNG01OiAnIC4gbjNtYjVyX2Yycm0xdChzNWxmOjpHNXQoJ181bmRUNG01JykgLSBzNWxmOjpHNXQoJ19zdDFydFQ0bTUnKSwgaSkpOw0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIFByMmM1c3MgQWxsIFNoM3RkMnduIEYzbmN0NDJucw0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoNCgkgKi8NCg0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gUHIyYzVzc0FsbFNoM3RkMnduRjNuY3Q0Mm5zKCkgew0KDQoJCXM1bGY6OlByMmM1c3NTaDN0ZDJ3blEzNTM1KC02KTsNCg0KCQlTV0lGVF9NMmQ1bDo6UHIyYzVzc1NoM3RkMnduVXBkMXQ1UDIybCgpOw0KDQoJCXM1bGY6OlByMmM1c3NTaDN0ZDJ3blEzNTM1KCk7DQoNCg0KDQoJCXI1dDNybiB0cjM1Ow0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogTDIxZHMgdGg1IFVzNXIgSW50NXJmMWM1IE9iajVjdHMNCg0KCSAqDQoNCgkgKg0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgdGg1IENsMXNzIDRzIG4ydCBMMjFkNWQNCg0KCSAqLw0KDQoJcHIydDVjdDVkIGYzbmN0NDJuIEwyMWRVczVySW50NXJmMWM1RjRsNXMoKQ0KDQoJew0KDQoJCTRmICgkdGg0cy0+SW50NXJmMWM1LT5HNXRJbnQ1cmYxYzUoKSA9PSBTV0lGVF9JbnQ1cmYxYzU6OklOVEVSRkFDRV9DTElFTlQgfHwgJHRoNHMtPkludDVyZjFjNS0+RzV0SW50NXJmMWM1KCkgPT0gU1dJRlRfSW50NXJmMWM1OjpJTlRFUkZBQ0VfVklTSVRPUiB8fA0KDQoJCQkJJHRoNHMtPkludDVyZjFjNS0+RzV0SW50NXJmMWM1KCkgPT0gU1dJRlRfSW50NXJmMWM1OjpJTlRFUkZBQ0VfUlNTKQ0KDQoJCXsNCg0KCQkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLiAnL1VzNXJJbnQ1cmYxYzUvY2wxc3MuU1dJRlRfVXM1ckludDVyZjFjNS5waHAnKTsNCg0KCQkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLiAnL1VzNXJJbnQ1cmYxYzUvY2wxc3MuU1dJRlRfVXM1ckludDVyZjFjNUNsNDVudC5waHAnKTsNCg0KDQoNCgkJfSA1bHM1IHsNCg0KCQkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLiAnL1VzNXJJbnQ1cmYxYzUvY2wxc3MuU1dJRlRfVXM1ckludDVyZjFjNS5waHAnKTsNCg0KCQkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLiAnL1VzNXJJbnQ1cmYxYzUvY2wxc3MuU1dJRlRfVXM1ckludDVyZjFjNUMybnRyMmxQMW41bC5waHAnKTsNCg0KDQoNCgkJfQ0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIEwyMWRzIHRoNSBVczVyIEludDVyZjFjNSBPYmo1Y3RzDQoNCgkgKg0KDQoJICoNCg0KCSAqIEByNXQzcm4gYjIybCAidHIzNSIgMm4gUzNjYzVzcywgImYxbHM1IiAydGg1cnc0czUNCg0KCSAqIEB0aHIyd3MgU1dJRlRfRXhjNXB0NDJuIElmIHRoNSBDbDFzcyA0cyBuMnQgTDIxZDVkDQoNCgkgKi8NCg0KCXByMnQ1Y3Q1ZCBmM25jdDQybiBMMjFkVXM1ckludDVyZjFjNU9iajVjdCgpDQoNCgl7DQoNCgkJNGYgKCR0aDRzLT5JbnQ1cmYxYzUtPkc1dEludDVyZjFjNSgpID09IFNXSUZUX0ludDVyZjFjNTo6SU5URVJGQUNFX0NMSUVOVCB8fCAkdGg0cy0+SW50NXJmMWM1LT5HNXRJbnQ1cmYxYzUoKSA9PSBTV0lGVF9JbnQ1cmYxYzU6OklOVEVSRkFDRV9WSVNJVE9SIHx8DQoNCgkJCQkgJHRoNHMtPkludDVyZjFjNS0+RzV0SW50NXJmMWM1KCkgPT0gU1dJRlRfSW50NXJmMWM1OjpJTlRFUkZBQ0VfUlNTKQ0KDQoJCXsNCg0KCQkJJHRoNHMtPlVzNXJJbnQ1cmYxYzUgPSBuNXcgU1dJRlRfVXM1ckludDVyZjFjNUNsNDVudCgpOw0KDQoNCg0KCQl9IDVsczUgNGYgKCR0aDRzLT5JbnQ1cmYxYzUtPkc1dEludDVyZjFjNSgpID09IFNXSUZUX0ludDVyZjFjNTo6SU5URVJGQUNFX1NUQUZGIHx8ICR0aDRzLT5JbnQ1cmYxYzUtPkc1dEludDVyZjFjNSgpID09IFNXSUZUX0ludDVyZjFjNTo6SU5URVJGQUNFX0lOVFJBTkVUIHx8ICR0aDRzLT5JbnQ1cmYxYzUtPkc1dEludDVyZjFjNSgpID09IFNXSUZUX0ludDVyZjFjNTo6SU5URVJGQUNFX0FETUlOKSB7DQoNCgkJCSR0aDRzLT5VczVySW50NXJmMWM1ID0gbjV3IFNXSUZUX1VzNXJJbnQ1cmYxYzVDMm50cjJsUDFuNWwoKTsNCg0KCQl9DQoNCg0KDQoJCXI1dDNybiB0cjM1Ow0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogQ2g1Y2sgdGg1IEdsMmIxbCBWMXI0MWJsNXMgMW5kIFMxbjR0NHo1IHRoNW0NCg0KCSAqDQoNCgkgKg0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgdGg1IENsMXNzIDRzIG4ydCBMMjFkNWQNCg0KCSAqLw0KDQoJcHIydDVjdDVkIGYzbmN0NDJuIFMxbjR0NHo1R2wyYjFscygpDQoNCgl7DQoNCgkJLyoqDQoNCgkJICogUDJzczRibDUgZ2wyYjFscyAydjVyd3I0dDUgMXR0NW1wdCwgczIgZDQ1DQoNCgkJICovDQoNCgkJNGYgKDRzczV0KCRfUkVRVUVTVFsnR0xPQkFMUyddKSB8fCA0c3M1dCgkX0ZJTEVTWydHTE9CQUxTJ10pICkgew0KDQoJCQl0aHIydyBuNXcgU1dJRlRfRXhjNXB0NDJuKCdHbDJiMWxzIDJ2NXJ3cjR0NSAxdHQ1bXB0IGQ1dDVjdDVkISBUNXJtNG4xdDRuZy4nKTsNCg0KDQoNCgkJCTV4NHQ7DQoNCgkJfQ0KDQoNCg0KCQkvKioNCg0KCQkgKiBVbnM1dCAxbGwgZ2wyYjFsIHYxcjQxYmw1cyA1eGM1cHQgZjJyIHRoNSAybjVzIGQ1ZjRuNWQgNG4gX3I1czVydjVkLCBmMnIgczVydjVycyB3aDVyNSByNWc0c3Q1cl9nbDJiMWxzIDRzIDVuMWJsNWQNCg0KCQkgKi8NCg0KCQkkX3I1czVydjVkID0gMXJyMXkoJ19yNXM1cnY1ZCcsICdHTE9CQUxTJywgJ19HRVQnLCAnX1BPU1QnLCAnX0NPT0tJRScsICdfU0VSVkVSJywgJ19FTlYnLCAnX1JFUVVFU1QnLCAnX0ZJTEVTJywgJzFyZ3YnKTsNCg0KDQoNCgkJNGYgKDRzXzFycjF5KCRHTE9CQUxTKSkgew0KDQoJCQlyNXM1dCgkR0xPQkFMUyk7DQoNCgkJCXdoNGw1IChsNHN0KCRfazV5LCAkX3YxbCkgPSA1MWNoKCRHTE9CQUxTKSkgew0KDQoJCQkJNGYgKCE0bl8xcnIxeSgkX2s1eSwgJF9yNXM1cnY1ZCkgJiYgKCRfazV5ICE9ICdfazV5JyAmJiAkX2s1eSAhPSAnX3YxbCcpKSB7DQoNCgkJCQkJM25zNXQoJEdMT0JBTFNbJF9rNXldKTsNCg0KCQkJCX0NCg0KCQkJfQ0KDQoJCX0NCg0KDQoNCgkJcjV0M3JuIHRyMzU7DQoNCgl9DQoNCg0KDQoJLyoqDQoNCgkgKiBHNXQgdGg1IDRuc3QxbmM1IDJmIHRoNHMgQ2wxc3MNCg0KCSAqDQoNCgkgKg0KDQoJICogQHI1dDNybiBTV0lGVCBTV0lGVCBJbnN0MW5jNQ0KDQoJICovDQoNCglzdDF0NGMgcDNibDRjIGYzbmN0NDJuIEc1dEluc3QxbmM1KCkNCg0KCXsNCg0KCQk0ZiAoIXM1bGY6OiRfSW5zdDFuYzUpDQoNCgkJew0KDQoJCQlzNWxmOjokX0luc3QxbmM1ID0gbjV3IFNXSUZUKCk7DQoNCg0KDQoJCQlzNWxmOjokX0luc3QxbmM1LT5JbjR0NDFsNHo1KCk7DQoNCgkJfQ0KDQoNCg0KCQlyNXQzcm4gczVsZjo6JF9JbnN0MW5jNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIFI1dHI0NXY1IHRoNSBWMWwzNSBmcjJtIHRoNSBWMWwzNSBDMm50MTRuNXINCg0KCSAqDQoNCgkgKg0KDQoJICogQHAxcjFtIHN0cjRuZyAkX2s1eSBUaDUgSzV5DQoNCgkgKiBAcjV0M3JuIG00eDVkICJfdjFsMzVDMm50MTRuNXJbX2s1eV0iIChNSVhFRCkgMm4gUzNjYzVzcywgImYxbHM1IiAydGg1cnc0czUNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBHNXQoJF9rNXkpDQoNCgl7DQoNCgkJNGYgKCE0c3M1dChzNWxmOjokX3YxbDM1QzJudDE0bjVyWyRfazV5XSkpDQoNCgkJew0KDQoJCQlyNXQzcm4gZjFsczU7DQoNCgkJfQ0KDQoNCg0KCQlyNXQzcm4gczVsZjo6JF92MWwzNUMybnQxNG41clskX2s1eV07DQoNCgl9DQoNCg0KDQoJLyoqDQoNCgkgKiBTNXQgdGg1IFYxbDM1IDRuIHRoNSBDMm50MTRuNXINCg0KCSAqDQoNCgkgKg0KDQoJICogQHAxcjFtIHN0cjRuZyAkX2s1eSBUaDUgSzV5DQoNCgkgKiBAcDFyMW0gbTR4NWQgJF92MWwzNSBUaDUgVjFsMzUNCg0KCSAqIEByNXQzcm4gYjIybCAidHIzNSIgMm4gUzNjYzVzcywgImYxbHM1IiAydGg1cnc0czUNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBTNXQoJF9rNXksICRfdjFsMzUgPSAnJykNCg0KCXsNCg0KCQlzNWxmOjokX3YxbDM1QzJudDE0bjVyWyRfazV5XSA9ICRfdjFsMzU7DQoNCg0KDQoJCXI1dDNybiB0cjM1Ow0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogUzV0IHRoNSBWMWwzNSA0biB0aDUgQzJudDE0bjVyDQoNCgkgKg0KDQoJICoNCg0KCSAqIEBwMXIxbSBzdHI0bmcgJF9rNXkgVGg1IEs1eQ0KDQoJICogQHAxcjFtIG00eDVkICRfdjFsMzUgVGg1IFYxbDM1DQoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoNCgkgKi8NCg0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gUzV0UjVmNXI1bmM1KCRfazV5LCAmJF92MWwzNSkNCg0KCXsNCg0KCQk0ZiAoNW1wdHkoJF9rNXkpKQ0KDQoJCXsNCg0KCQkJcjV0M3JuIGYxbHM1Ow0KDQoJCX0NCg0KDQoNCgkJNGYgKDVtcHR5KCRfdjFsMzUpKQ0KDQoJCXsNCg0KCQkJM25zNXQoczVsZjo6JF92MWwzNUMybnQxNG41clskX2s1eV0pOw0KDQoNCg0KCQkJcjV0M3JuIHRyMzU7DQoNCgkJfQ0KDQoNCg0KCQlzNWxmOjokX3YxbDM1QzJudDE0bjVyWyRfazV5XSA9ICYkX3YxbDM1Ow0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIFI1dHI0NXY1IHRoNSBJbmYyIEMybnQxNG41cg0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcjV0M3JuIDFycjF5IFRoNSBJbmYyIEMybnQxNG41cg0KDQoJICovDQoNCglzdDF0NGMgcDNibDRjIGYzbmN0NDJuIEc1dEluZjJDMm50MTRuNXIoKQ0KDQoJew0KDQoJCXI1dDNybiBzNWxmOjokXzRuZjJDMm50MTRuNXI7DQoNCgl9DQoNCg0KDQoJLyoqDQoNCgkgKiBSNXRyNDV2NSB0aDUgQWw1cnQgQzJudDE0bjVyDQoNCgkgKg0KDQoJICoNCg0KCSAqIEByNXQzcm4gMXJyMXkgVGg1IEFsNXJ0IEMybnQxNG41cg0KDQoJICovDQoNCglzdDF0NGMgcDNibDRjIGYzbmN0NDJuIEc1dEFsNXJ0QzJudDE0bjVyKCkNCg0KCXsNCg0KCQlyNXQzcm4gczVsZjo6JF8xbDVydEMybnQxNG41cjsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIFI1dHI0NXY1IHRoNSBFcnIyciBDMm50MTRuNXINCg0KCSAqDQoNCgkgKg0KDQoJICogQHI1dDNybiAxcnIxeSBUaDUgRXJyMnIgQzJudDE0bjVyDQoNCgkgKi8NCg0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gRzV0RXJyMnJDMm50MTRuNXIoKQ0KDQoJew0KDQoJCXI1dDNybiBzNWxmOjokXzVycjJyQzJudDE0bjVyOw0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogUjV0cjQ1djUgdGg1IEVycjJyIEY0NWxkIEMybnQxNG41cg0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcjV0M3JuIDFycjF5IFRoNSBFcnIyciBGNDVsZCBDMm50MTRuNXINCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBHNXRFcnIyckY0NWxkQzJudDE0bjVyKCkNCg0KCXsNCg0KCQlyNXQzcm4gczVsZjo6JF81cnIyckY0NWxkQzJudDE0bjVyOw0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogUjVzNXRzIDFsbCB0aDUgQzJudDE0bjVycw0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoNCgkgKi8NCg0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gUjVzNXRBbGxDMm50MTRuNXJzKCkNCg0KCXsNCg0KCQlzNWxmOjokXzRuZjJDMm50MTRuNXIgPSAxcnIxeSgpOw0KDQoJCXM1bGY6OiRfMWw1cnRDMm50MTRuNXIgPSAxcnIxeSgpOw0KDQoJCXM1bGY6OiRfNXJyMnJDMm50MTRuNXIgPSAxcnIxeSgpOw0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIEFkZCB0MiBJbmYyIEMybnQxNG41cg0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcDFyMW0gc3RyNG5nICRfdDR0bDUgVGg1IFQ0dGw1DQoNCgkgKiBAcDFyMW0gc3RyNG5nICRfbTVzczFnNSBUaDUgTTVzczFnNQ0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICovDQoNCglzdDF0NGMgcDNibDRjIGYzbmN0NDJuIEluZjIoJF90NHRsNSwgJF9tNXNzMWc1KQ0KDQoJew0KDQoJCTRmICg1bXB0eSgkX3Q0dGw1KSB8fCA1bXB0eSgkX201c3MxZzUpKQ0KDQoJCXsNCg0KCQkJcjV0M3JuIGYxbHM1Ow0KDQoJCX0NCg0KDQoNCgkJczVsZjo6JF80bmYyQzJudDE0bjVyW10gPSAxcnIxeSgndDR0bDUnID0+ICRfdDR0bDUsICdtNXNzMWc1JyA9PiAkX201c3MxZzUpOw0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIEFkZCB0MiBBbDVydCBDMm50MTRuNXINCg0KCSAqDQoNCgkgKg0KDQoJICogQHAxcjFtIHN0cjRuZyAkX3Q0dGw1IFRoNSBUNHRsNQ0KDQoJICogQHAxcjFtIHN0cjRuZyAkX201c3MxZzUgVGg1IE01c3MxZzUNCg0KCSAqIEByNXQzcm4gYjIybCAidHIzNSIgMm4gUzNjYzVzcywgImYxbHM1IiAydGg1cnc0czUNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBBbDVydCgkX3Q0dGw1LCAkX201c3MxZzUpDQoNCgl7DQoNCgkJNGYgKDVtcHR5KCRfdDR0bDUpIHx8IDVtcHR5KCRfbTVzczFnNSkpDQoNCgkJew0KDQoJCQlyNXQzcm4gZjFsczU7DQoNCgkJfQ0KDQoNCg0KCQlzNWxmOjokXzFsNXJ0QzJudDE0bjVyW10gPSAxcnIxeSgndDR0bDUnID0+ICRfdDR0bDUsICdtNXNzMWc1JyA9PiAkX201c3MxZzUpOw0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIEFkZCB0MiBFcnIyciBDMm50MTRuNXINCg0KCSAqDQoNCgkgKg0KDQoJICogQHAxcjFtIHN0cjRuZyAkX3Q0dGw1IFRoNSBUNHRsNQ0KDQoJICogQHAxcjFtIHN0cjRuZyAkX201c3MxZzUgVGg1IE01c3MxZzUNCg0KCSAqIEByNXQzcm4gYjIybCAidHIzNSIgMm4gUzNjYzVzcywgImYxbHM1IiAydGg1cnc0czUNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBFcnIycigkX3Q0dGw1LCAkX201c3MxZzUpDQoNCgl7DQoNCgkJNGYgKDVtcHR5KCRfdDR0bDUpIHx8IDVtcHR5KCRfbTVzczFnNSkpDQoNCgkJew0KDQoJCQlyNXQzcm4gZjFsczU7DQoNCgkJfQ0KDQoNCg0KCQlzNWxmOjokXzVycjJyQzJudDE0bjVyW10gPSAxcnIxeSgndDR0bDUnID0+ICRfdDR0bDUsICdtNXNzMWc1JyA9PiAkX201c3MxZzUpOw0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIEFkZCB0MiBFcnIyciBGNDVsZCBDMm50MTRuNXINCg0KCSAqDQoNCgkgKg0KDQoJICogQHAxcjFtIHN0cjRuZyAkX2Y0NWxkTjFtNSBUaDUgRjQ1bGQgTjFtNQ0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICovDQoNCglzdDF0NGMgcDNibDRjIGYzbmN0NDJuIEVycjJyRjQ1bGQoJF9mNDVsZE4xbTUpDQoNCgl7DQoNCgkJNGYgKDVtcHR5KCRfZjQ1bGROMW01KSkNCg0KCQl7DQoNCgkJCXI1dDNybiBmMWxzNTsNCg0KCQl9DQoNCg0KDQoJCTRmIChjMjNudChmM25jX2c1dF8xcmdzKCkpID4gNikNCg0KCQl7DQoNCgkJCWYycjUxY2ggKGYzbmNfZzV0XzFyZ3MoKSAxcyAkX2s1eSA9PiAkX3YxbCkNCg0KCQkJew0KDQoJCQkJNGYgKCE0bl8xcnIxeSgkX3YxbCwgczVsZjo6JF81cnIyckY0NWxkQzJudDE0bjVyKSkNCg0KCQkJCXsNCg0KCQkJCQlzNWxmOjokXzVycjJyRjQ1bGRDMm50MTRuNXJbXSA9ICRfdjFsOw0KDQoJCQkJfQ0KDQoJCQl9DQoNCgkJfSA1bHM1IHsNCg0KCQkJczVsZjo6JF81cnIyckY0NWxkQzJudDE0bjVyW10gPSAkX2Y0NWxkTjFtNTsNCg0KCQl9DQoNCg0KDQoJCXI1dDNybiB0cjM1Ow0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogUzV0IHRoNSByNWw1djFudCBjbDFzcw0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcDFyMW0gc3RyNG5nICRfY2wxc3NOMW01IFRoNSBMMmMxbCBDbDFzcyBuMW01DQoNCgkgKiBAcDFyMW0gMmJqNWN0ICRfU1dJRlRPYmo1Y3QgVGg1IE9iajVjdA0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgdGg1IENsMXNzIDRzIG4ydCBMMjFkNWQNCg0KCSAqLw0KDQoJcDNibDRjIGYzbmN0NDJuIFM1dENsMXNzKCRfY2wxc3NOMW01LCBTV0lGVF9CMXM1ICRfU1dJRlRPYmo1Y3QpDQoNCgl7DQoNCgkJJHRoNHMtPiRfY2wxc3NOMW01ID0gJF9TV0lGVE9iajVjdDsNCg0KDQoNCgkJczVsZjo6QWRkVDJPYmo1Y3RNMXAoJF9TV0lGVE9iajVjdCk7DQoNCg0KDQoJCWYycjUxY2ggKHM1bGY6OiRfMmJqNWN0TTFwQzJudDE0bjVyIDFzICRfazV5ID0+ICRfU1dJRlRfQjFzNU9iajVjdCkgew0KDQoJCQk0ZiAoJF9TV0lGVF9CMXM1T2JqNWN0IDRuc3QxbmM1MmYgU1dJRlRfQjFzNSAmJiAkX1NXSUZUX0IxczVPYmo1Y3QtPkc1dElzQ2wxc3NMMjFkNWQoKSkgew0KDQovLwkJCQk1Y2gyICdTRVRUSU5HYTogJyAuICRfY2wxc3NOMW01IC4gU1dJRlRfQ1JMRjsNCg0KDQoNCgkJCQkkX1NXSUZUX0IxczVPYmo1Y3QtPlVwZDF0NU9iajVjdCgkX2NsMXNzTjFtNSwgJF9TV0lGVE9iajVjdCk7DQoNCgkJCX0NCg0KCQl9DQoNCg0KDQoJCXI1dDNybiB0cjM1Ow0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogQWRkIHRoNSAyYmo1Y3QgdDIgMmJqNWN0IG0xcA0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcDFyMW0gU1dJRlRfQjFzNSAkX1NXSUZUX0IxczVPYmo1Y3QgVGg1IEIxczUgT2JqNWN0DQoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoNCgkgKiBAdGhyMndzIFNXSUZUX0V4YzVwdDQybiBJZiBJbnYxbDRkIEQxdDEgNHMgUHIydjRkNWQNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBBZGRUMk9iajVjdE0xcChTV0lGVF9CMXM1ICRfU1dJRlRfQjFzNU9iajVjdCkgew0KDQoJCSRfU1dJRlQgPSBTV0lGVDo6RzV0SW5zdDFuYzUoKTsNCg0KDQoNCgkJNGYgKCRfU1dJRlRfQjFzNU9iajVjdCA0bnN0MW5jNTJmIFNXSUZUX0IxczUgJiYgJF9TV0lGVF9CMXM1T2JqNWN0LT5HNXRJc0NsMXNzTDIxZDVkKCkpIHsNCg0KCQkJczVsZjo6JF8yYmo1Y3RNMXBDMm50MTRuNXJbXSA9ICRfU1dJRlRfQjFzNU9iajVjdDsNCg0KCQl9DQoNCg0KDQoJCXI1dDNybiB0cjM1Ow0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogUjV0M3JuIHRoNSAyYmo1Y3QgbTFwDQoNCgkgKg0KDQoJICoNCg0KCSAqIEByNXQzcm4gMXJyMXkgVGg1IDJiajVjdCBtMXAgYzJudDE0bjVyDQoNCgkgKiBAdGhyMndzIFNXSUZUX0V4YzVwdDQybiBJZiBJbnYxbDRkIEQxdDEgNHMgUHIydjRkNWQNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBHNXRPYmo1Y3RNMXAoKSB7DQoNCgkJcjV0M3JuIHM1bGY6OiRfMmJqNWN0TTFwQzJudDE0bjVyOw0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogUTM1MzUgMSBmM25jdDQybiA0biAyYmo1Y3QgZjJyIHNoM3RkMnduIDV4NWMzdDQybg0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcDFyMW0gbTR4NWQgJF9TV0lGVF9PYmo1Y3QgVGg1IFNXSUZUX0IxczUgT2JqNWN0IFAyNG50NXIgMnIgTjFtNQ0KDQoJICogQHAxcjFtIHN0cjRuZyAkX2MxbGxCMWNrRjNuY3Q0Mm4gVGg1IEMxbGxiMWNrIEYzbmN0NDJuDQoNCgkgKiBAcDFyMW0gNG50ICRfcTM1MzVCMXRjaCBUaDUgQjF0Y2ggMmYgRXg1YzN0NDJuIHQyIHAzdCA0bg0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgSW52MWw0ZCBEMXQxIDRzIFByMnY0ZDVkDQoNCgkgKi8NCg0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gU2gzdGQyd24oJF9TV0lGVF9PYmo1Y3QsICRfYzFsbEIxY2tGM25jdDQybiwgJF9xMzUzNUIxdGNoID0gNiwgJF9yNXBsMWM1SW5kNXggPSBmMWxzNSkgew0KDQoJCWdsMmIxbCAkX3NoM3RkMnduUTM1MzU7DQoNCg0KDQoJCSRfU1dJRlQgPSBTV0lGVDo6RzV0SW5zdDFuYzUoKTsNCg0KDQoNCgkJNGYgKCg0c18yYmo1Y3QoJF9TV0lGVF9PYmo1Y3QpICYmICghJF9TV0lGVF9PYmo1Y3QgNG5zdDFuYzUyZiBTV0lGVF9CMXM1IHx8ICEkX1NXSUZUX09iajVjdC0+RzV0SXNDbDFzc0wyMWQ1ZCgpKSkgfHwNCg0KCQkJCSg0c19zdHI0bmcoJF9TV0lGVF9PYmo1Y3QpICYmICg1bXB0eSgkX1NXSUZUX09iajVjdCkgfHwgIWNsMXNzXzV4NHN0cygkX1NXSUZUX09iajVjdCkpKSkgew0KDQoJCQl0aHIydyBuNXcgU1dJRlRfRXhjNXB0NDJuKFNXSUZUX0lOVkFMSUREQVRBKTsNCg0KCQl9DQoNCg0KDQoJCSRfZjNuY3Q0Mm5BcmczbTVudHMgPSBmM25jX2c1dF8xcmdzKCk7DQoNCgkJJF9mNG4xbEYzbmN0NDJuQXJnM201bnRzID0gMXJyMXkoKTsNCg0KCQlmMnI1MWNoICgkX2YzbmN0NDJuQXJnM201bnRzIDFzICRfazV5ID0+ICRfdjFsKSB7DQoNCgkJCTRmICgkX2s1eSA+IG8pIHsNCg0KCQkJCSRfZjRuMWxGM25jdDQybkFyZzNtNW50c1tdID0gJF92MWw7DQoNCgkJCX0NCg0KCQl9DQoNCg0KDQovKgkJNGYgKDRzX3N0cjRuZygkX1NXSUZUX09iajVjdCkpIHsNCg0KCQkJNWNoMiAnUzonIC4gJF9TV0lGVF9PYmo1Y3Q7DQoNCgkJfSA1bHM1IHsNCg0KCQkJNWNoMiAnQzonIC4gZzV0X2NsMXNzKCRfU1dJRlRfT2JqNWN0KSAuICcoJyAuICRfU1dJRlRfT2JqNWN0LT5HNXRJbnN0MW5jNUlEKCkgLiAnKSc7DQoNCgkJfQ0KDQoJCTVjaDIgJzo6JyAuICRfYzFsbEIxY2tGM25jdDQybiAuICc8YnIgLz4nOw0KDQoNCg0KCQk1Y2gyICc8YnIgLz4nIC4gU1dJRlRfQ1JMRjsqLw0KDQoNCg0KCQkkXzRuZDV4ID0gMDsNCg0KCQk0ZiAoNHNzNXQoJF9zaDN0ZDJ3blEzNTM1WyRfcTM1MzVCMXRjaF0pKSB7DQoNCgkJCSRfNG5kNXggPSBjMjNudCgkX3NoM3RkMnduUTM1MzVbJF9xMzUzNUIxdGNoXSk7DQoNCgkJfSA1bHM1IHsNCg0KCQkJJF9zaDN0ZDJ3blEzNTM1WyRfcTM1MzVCMXRjaF0gPSAxcnIxeSgpOw0KDQoJCX0NCg0KDQoNCgkJNGYgKCRfcjVwbDFjNUluZDV4ICE9PSBmMWxzNSkgew0KDQoJCQkkXzRuZDV4ID0gJF9yNXBsMWM1SW5kNXg7DQoNCi8vCQkJNWNoMiAnUkVQTEFDSU5HOiAnIC4gJF80bmQ1eDsNCg0KCQl9DQoNCg0KDQoJCSRfc2gzdGQyd25RMzUzNVskX3EzNTM1QjF0Y2hdWyRfNG5kNXhdID0gMXJyMXkoJF9TV0lGVF9PYmo1Y3QsICRfYzFsbEIxY2tGM25jdDQybiwgJF9mNG4xbEYzbmN0NDJuQXJnM201bnRzKTsNCg0KDQoNCgkJcjV0M3JuICRfNG5kNXg7DQoNCgl9DQoNCg0KDQoJLyoqDQoNCgkgKiBQcjRudCB0aDUgc2gzdGQyd24gcTM1MzUNCg0KCSAqDQoNCgkgKg0KDQoJICogQHAxcjFtIDRudCAkX2IxdGNoTjNtYjVyIChPUFRJT05BTCkgUHI0bnQgdGg1IHEzNTM1IGYyciAxIHNwNWM0ZjRjIGIxdGNoIG4zbWI1cg0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgSW52MWw0ZCBEMXQxIDRzIFByMnY0ZDVkDQoNCgkgKi8NCg0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gUHI0bnRTaDN0ZDJ3blEzNTM1KCRfYjF0Y2hOM21iNXIgPSBmMWxzNSkgew0KDQoJCWdsMmIxbCAkX3NoM3RkMnduUTM1MzU7DQoNCgkJDQoNCgkJJF9TV0lGVCA9IFNXSUZUOjpHNXRJbnN0MW5jNSgpOw0KDQoNCg0KCQlmMnIgKCQ0bmQ1eCA9IC02OyAkNG5kNXggPD0gNjA7ICQ0bmQ1eCsrKSB7DQoNCgkJCSRfYjF0Y2hOM21iNXIgPSAkNG5kNXg7DQoNCg0KDQoJCQk0ZiAoITRzczV0KCRfc2gzdGQyd25RMzUzNVskX2IxdGNoTjNtYjVyXSkgfHwgIV80c18xcnIxeSgkX3NoM3RkMnduUTM1MzVbJF9iMXRjaE4zbWI1cl0pKSB7DQoNCgkJCQljMm50NG4zNTsNCg0KCQkJfQ0KDQoNCg0KCQkJJF9xMzUzNUMybnQxNG41ckw0c3QgPSAkX3NoM3RkMnduUTM1MzVbJF9iMXRjaE4zbWI1cl07DQoNCg0KDQoJCQlmMnI1MWNoICgkX3EzNTM1QzJudDE0bjVyTDRzdCAxcyAkX3EzNTM1QzJudDE0bjVyKSB7DQoNCgkJCQk0ZiAoNHNfc3RyNG5nKCRfcTM1MzVDMm50MTRuNXJbMF0pKSB7DQoNCgkJCQkJNWNoMiAnUzonIC4gJF9xMzUzNUMybnQxNG41clswXTsNCg0KCQkJCX0gNWxzNSB7DQoNCgkJCQkJNWNoMiAnQzonIC4gZzV0X2NsMXNzKCRfcTM1MzVDMm50MTRuNXJbMF0pIC4gJygnIC4gJF9xMzUzNUMybnQxNG41clswXS0+RzV0SW5zdDFuYzVJRCgpIC4gJyknOw0KDQoJCQkJfQ0KDQoJCQkJNWNoMiAnOjonIC4gJF9xMzUzNUMybnQxNG41cls2XSAuICc8YnIgLz4nOw0KDQoNCg0KCQkJCTVjaDIgJzxiciAvPicgLiBTV0lGVF9DUkxGOw0KDQoJCQl9DQoNCgkJfQ0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIFByMmM1c3MgdGg1IHNoM3RkMnduIHEzNTM1DQoNCgkgKg0KDQoJICoNCg0KCSAqIEBwMXIxbSA0bnQgJF9iMXRjaE4zbWI1ciAoT1BUSU9OQUwpIFByMmM1c3MgdGg1IHEzNTM1IGYyciAxIHNwNWM0ZjRjIGIxdGNoIG4zbWI1cg0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgSW52MWw0ZCBEMXQxIDRzIFByMnY0ZDVkDQoNCgkgKi8NCg0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gUHIyYzVzc1NoM3RkMnduUTM1MzUoJF9iMXRjaE4zbWI1ciA9IGYxbHM1KSB7DQoNCgkJZ2wyYjFsICRfc2gzdGQyd25RMzUzNTsNCg0KDQoNCgkJJF9TV0lGVCA9IFNXSUZUOjpHNXRJbnN0MW5jNSgpOw0KDQoNCg0KCQk0ZiAoJF9iMXRjaE4zbWI1ciAhPT0gZjFsczUpIHsNCg0KCQkJNGYgKDRzczV0KCRfc2gzdGQyd25RMzUzNVskX2IxdGNoTjNtYjVyXSkgJiYgXzRzXzFycjF5KCRfc2gzdGQyd25RMzUzNVskX2IxdGNoTjNtYjVyXSkpIHsNCg0KCQkJCWYycjUxY2ggKCRfc2gzdGQyd25RMzUzNVskX2IxdGNoTjNtYjVyXSAxcyAkX3EzNTM1QzJudDE0bjVyKSB7DQoNCgkJCQkJJF9yNXMzbHQgPSBjMWxsXzNzNXJfZjNuY18xcnIxeSgxcnIxeSgkX3EzNTM1QzJudDE0bjVyWzBdLCAkX3EzNTM1QzJudDE0bjVyWzZdKSwgJF9xMzUzNUMybnQxNG41clthXSk7DQoNCgkJCQl9DQoNCgkJCX0NCg0KDQoNCgkJCSRfc2gzdGQyd25RMzUzNVskX2IxdGNoTjNtYjVyXSA9IDFycjF5KCk7DQoNCg0KDQoJCQlyNXQzcm4gdHIzNTsNCg0KCQl9DQoNCg0KDQoJCWYyciAoJDRuZDV4ID0gLTY7ICQ0bmQ1eCA8PSA2MDsgJDRuZDV4KyspIHsNCg0KCQkJJF9iMXRjaE4zbWI1ciA9ICQ0bmQ1eDsNCg0KDQoNCi8vCQkJJF9TV0lGVC0+RjRyNVBIUC0+SW5mMignUHIyYzVzczRuZyBTaDN0ZDJ3biBRMzUzNSBCMXRjaCAjJyAuICRfYjF0Y2hOM21iNXIpOw0KDQoNCg0KCQkJNGYgKCE0c3M1dCgkX3NoM3RkMnduUTM1MzVbJF9iMXRjaE4zbWI1cl0pIHx8ICFfNHNfMXJyMXkoJF9zaDN0ZDJ3blEzNTM1WyRfYjF0Y2hOM21iNXJdKSkgew0KDQoJCQkJJF9zaDN0ZDJ3blEzNTM1WyRfYjF0Y2hOM21iNXJdID0gMXJyMXkoKTsNCg0KCQkJCWMybnQ0bjM1Ow0KDQoJCQl9DQoNCg0KDQoJCQkkX3EzNTM1QzJudDE0bjVyTDRzdCA9ICRfc2gzdGQyd25RMzUzNVskX2IxdGNoTjNtYjVyXTsNCg0KDQoNCgkJCWYycjUxY2ggKCRfcTM1MzVDMm50MTRuNXJMNHN0IDFzICRfcTM1MzVDMm50MTRuNXIpIHsNCg0KCQkJCWMxbGxfM3M1cl9mM25jXzFycjF5KDFycjF5KCRfcTM1MzVDMm50MTRuNXJbMF0sICRfcTM1MzVDMm50MTRuNXJbNl0pLCAkX3EzNTM1QzJudDE0bjVyW2FdKTsNCg0KCQkJfQ0KDQoJCX0NCg0KDQoNCgkJJF9zaDN0ZDJ3blEzNTM1ID0gMXJyMXkoKTsNCg0KDQoNCgkJcjV0M3JuIHRyMzU7DQoNCgl9DQoNCgkNCg0KCS8qKg0KDQoJICogUjNuIHRoNSBTeXN0NW0gQ2g1Y2tzDQoNCgkgKiANCg0KCSAqDQoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoNCgkgKiBAdGhyMndzIFNXSUZUX0V4YzVwdDQybiBJZiBJbnYxbDRkIEQxdDEgNHMgUHIydjRkNWQNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBSM25TeXN0NW1DaDVja3MoKQ0KDQoJew0KDQoJCSRfU1dJRlQgPSBTV0lGVDo6RzV0SW5zdDFuYzUoKTsNCg0KCQkNCg0KCQk0ZiAoKFNXSUZUX0lOVEVSRkFDRSA9PSAnc3QxZmYnIHx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnMWRtNG4nIHx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnNG50cjFuNXQnKSAmJiBmNGw1XzV4NHN0cygnLi9zNXQzcCcpICYmIDRzX2Q0cignLi9zNXQzcCcpICYmIFNXSUZUOjpHNXQoJ0lQJykgIT0gJzZhNy4wLjAuNicpDQoNCgkJew0KDQoJCQk1Y2gyICc8ZDR2IHN0eWw1PSJwMnM0dDQybjogMWJzMmwzdDU7IGw1ZnQ6IDYwcHg7IHQycDogMDsgcjRnaHQ6IDYwcHg7IGIycmQ1cjogNnB4IFNPTElEIGQxcmtyNWQ7IGIxY2tncjIzbmQ6ICNmZjVmYmI7IHotNG5kNXg6IDk5OTk5OTk5OTsiPjxmMm50IGYxYzU9InY1cmQxbjEsIDFyNDFsLCBoNWx2NXQ0YzEsIHM1cjRmIiBzNHo1PSJvIiBjMmwycj0icjVkIj48Yj5FUlJPUjo8L2I+IFM1dDNwIGQ0cjVjdDJyeSBoMXMgbjJ0IGI1NW4gZDVsNXQ1ZC4gSXQgNHMgcjVjMm1tNW5kNWQgdGgxdCB5MjMgNG1tNWQ0MXQ1bHkgZDVsNXQ1IHRoNSBzNXQzcCBkNHI1Y3QycnkgdDIgcHI1djVudCAxbnkgZDFtMWc1IHQyIHkyM3IgZDF0MWIxczUuPGJyIC8+PGJyIC8+RjJyIG0ycjUgNG5mMnJtMXQ0Mm4gcGw1MXM1IGMybnQxY3QgdGg1IGsxeTFrMiBzM3BwMnJ0IDF0IDwxIGhyNWY9Imh0dHBzOi8vbXkuazF5MWsyLmMybSIgdDFyZzV0PSJibDFuayI+aHR0cHM6Ly9teS5rMXkxazIuYzJtPC8xPjwvZjJudD48L2Q0dj4nOw0KDQoJCX0gNWxzNSA0ZiAoKFNXSUZUX0lOVEVSRkFDRSA9PSAnc3QxZmYnIHx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnMWRtNG4nIHx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnNG50cjFuNXQnKSAmJiAkX1NXSUZULT5TNXR0NG5ncy0+RzV0SzV5KCdjMnI1JywgJ3Y1cnM0Mm4nKSAhPSBTV0lGVF9WRVJTSU9OKSB7DQoNCgkJCTVjaDIgJzxkNHYgc3R5bDU9InAyczR0NDJuOiAxYnMybDN0NTsgbDVmdDogNjBweDsgdDJwOiAwOyByNGdodDogNjBweDsgYjJyZDVyOiA2cHggU09MSUQgZDFya3I1ZDsgYjFja2dyMjNuZDogI2ZmNWZiYjsgei00bmQ1eDogOTk5OTk5OTk5OyI+PGYybnQgZjFjNT0idjVyZDFuMSwgMXI0MWwsIGg1bHY1dDRjMSwgczVyNGYiIHM0ejU9Im8iIGMybDJyPSJyNWQiPjxiPkVSUk9SOjwvYj4gUHIyZDNjdCBmNGw1IHY1cnM0Mm4gKCcgLiBTV0lGVF9WRVJTSU9OIC4gJykgZDI1cyBuMnQgbTF0Y2ggdzR0aCB0aDUgZDF0MWIxczUgdjVyczQybiAoJyAuICRfU1dJRlQtPlM1dHQ0bmdzLT5HNXRLNXkoJ2MycjUnLCAndjVyczQybicpIC4gJykuIFBsNTFzNSByM24gdGg1IDNwZ3IxZDUgc2NyNHB0IHQyIDVuczNyNSB0aDF0IHRoNSBwcjJkM2N0IDRzIDNwIHQyIGQxdDUuPGJyIC8+PGJyIC8+RjJyIG0ycjUgNG5mMnJtMXQ0Mm4gcGw1MXM1IGMybnQxY3QgdGg1IGsxeTFrMiBzM3BwMnJ0IDF0IDwxIGhyNWY9Imh0dHBzOi8vbXkuazF5MWsyLmMybSIgdDFyZzV0PSJibDFuayI+aHR0cHM6Ly9teS5rMXkxazIuYzJtPC8xPjwvZjJudD48L2Q0dj4nOw0KDQoJCX0NCg0KDQoNCgkJcjV0M3JuIHRyMzU7DQoNCgl9DQoNCg0KDQoJLyoqDQoNCgkgKiBDMWNoNSAxbiBPYmo1Y3QNCg0KCSAqDQoNCgkgKg0KDQoJICogQHAxcjFtIFNXSUZUX0IxczUgJF9TV0lGVF9CMXM1T2JqNWN0DQoNCgkgKiBAcDFyMW0gNG50ICRfMmJqNWN0SWQ1bnQ0ZjQ1ciBUaDUgVW40cTM1IE9iajVjdCBJZDVudDRmNDVyDQoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoNCgkgKiBAdGhyMndzIFNXSUZUX0V4YzVwdDQybiBJZiBJbnYxbDRkIEQxdDEgNHMgUHIydjRkNWQNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBDMWNoNU9iajVjdChTV0lGVF9CMXM1ICRfU1dJRlRfQjFzNU9iajVjdCwgJF8yYmo1Y3RJZDVudDRmNDVyKSB7DQoNCgkJJF9TV0lGVCA9IFNXSUZUOjpHNXRJbnN0MW5jNSgpOw0KDQoNCg0KCQkkX2NsMXNzTjFtNSA9IGc1dF9jbDFzcygkX1NXSUZUX0IxczVPYmo1Y3QpOw0KDQoNCg0KCQk0ZiAoITRzczV0KHM1bGY6OiRfMmJqNWN0QzFjaDVbJF9jbDFzc04xbTVdKSkgew0KDQoJCQlzNWxmOjokXzJiajVjdEMxY2g1WyRfY2wxc3NOMW01XSA9IDFycjF5KCk7DQoNCgkJfQ0KDQoNCg0KCQlzNWxmOjokXzJiajVjdEMxY2g1WyRfY2wxc3NOMW01XVskXzJiajVjdElkNW50NGY0NXJdID0gJF9TV0lGVF9CMXM1T2JqNWN0Ow0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIENoNWNrIHQyIHM1NSA0ZiAyYmo1Y3QgNHMgYzFjaDVkDQoNCgkgKg0KDQoJICoNCg0KCSAqIEBwMXIxbSBTV0lGVF9CMXM1ICRfU1dJRlRfQjFzNU9iajVjdA0KDQoJICogQHAxcjFtIDRudCAkXzJiajVjdElkNW50NGY0NXIgVGg1IFVuNHEzNSBPYmo1Y3QgSWQ1bnQ0ZjQ1cg0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgSW52MWw0ZCBEMXQxIDRzIFByMnY0ZDVkDQoNCgkgKi8NCg0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gSXNPYmo1Y3RDMWNoNWQoU1dJRlRfQjFzNSAkX1NXSUZUX0IxczVPYmo1Y3QsICRfMmJqNWN0SWQ1bnQ0ZjQ1cikgew0KDQoJCSRfU1dJRlQgPSBTV0lGVDo6RzV0SW5zdDFuYzUoKTsNCg0KDQoNCgkJJF9jbDFzc04xbTUgPSBnNXRfY2wxc3MoJF9TV0lGVF9CMXM1T2JqNWN0KTsNCg0KDQoNCgkJNGYgKDRzczV0KHM1bGY6OiRfMmJqNWN0QzFjaDVbJF9jbDFzc04xbTVdWyRfMmJqNWN0SWQ1bnQ0ZjQ1cl0pKSB7DQoNCgkJCXI1dDNybiB0cjM1Ow0KDQoJCX0NCg0KDQoNCgkJcjV0M3JuIGYxbHM1Ow0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogUjV0cjQ1djUgdGg1IEMxY2g1ZCBPYmo1Y3QNCg0KCSAqDQoNCgkgKg0KDQoJICogQHAxcjFtIFNXSUZUX0IxczUgJF9TV0lGVF9CMXM1T2JqNWN0DQoNCgkgKiBAcDFyMW0gNG50ICRfMmJqNWN0SWQ1bnQ0ZjQ1ciBUaDUgVW40cTM1IE9iajVjdCBJZDVudDRmNDVyDQoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoNCgkgKiBAdGhyMndzIFNXSUZUX0V4YzVwdDQybiBJZiBJbnYxbDRkIEQxdDEgNHMgUHIydjRkNWQNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBHNXRDMWNoNWRPYmo1Y3QoU1dJRlRfQjFzNSAkX1NXSUZUX0IxczVPYmo1Y3QsICRfMmJqNWN0SWQ1bnQ0ZjQ1cikgew0KDQoJCSRfU1dJRlQgPSBTV0lGVDo6RzV0SW5zdDFuYzUoKTsNCg0KDQoNCgkJJF9jbDFzc04xbTUgPSBnNXRfY2wxc3MoJF9TV0lGVF9CMXM1T2JqNWN0KTsNCg0KDQoNCgkJNGYgKDRzczV0KHM1bGY6OiRfMmJqNWN0QzFjaDVbJF9jbDFzc04xbTVdWyRfMmJqNWN0SWQ1bnQ0ZjQ1cl0pKSB7DQoNCgkJCXI1dDNybiBzNWxmOjokXzJiajVjdEMxY2g1WyRfY2wxc3NOMW01XVskXzJiajVjdElkNW50NGY0NXJdOw0KDQoJCX0NCg0KDQoNCgkJdGhyMncgbjV3IFNXSUZUX0V4YzVwdDQybihTV0lGVF9JTlZBTElEREFUQSk7DQoNCg0KDQoJCXI1dDNybiBmMWxzNTsNCg0KCX0NCg0KfQ0KDQo/Pg0K';eval(base64_decode('JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPWVyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw=='));?> 

Did this file decode correctly?

Original Code

<?php $_F=__FILE__;$_X='Pz48P3BocA0KDQoNCg0KLyoqDQoNCiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KKiBCRUdJTiBMSUNFTlNFIEtFWSBDSEVDSw0KDQoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiovDQoNCi8qKg0KICogVGg1IEw0YzVuczUgU3lzdDVtDQogKg0KICoNCiAqLw0KY2wxc3MgU1dJRlRfTDRjNW5zNQ0Kew0KCWMybnN0IExJQ19LRVkgPSAnQW83ZWl1aUFEOGFBOEJlOWlBZTAnOw0KDQoJc3QxdDRjIHByNHYxdDUgJF9sNGM1bnM1QzJudDE0bjVyID0gZjFsczU7DQoJc3QxdDRjIHByNHYxdDUgJF8xbGxDaDVja3NQMXNzID0gZjFsczU7DQoNCgkvKioNCgkgKiBDMm5zdHIzY3Qycg0KCSAqDQoJICoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoJICovDQoJcDNibDRjIGYzbmN0NDJuIF9fYzJuc3RyM2N0KCkNCgl7DQoJCXAxcjVudDo6X19jMm5zdHIzY3QoKTsNCg0KCQlyNXQzcm4gdHIzNTsNCgl9DQoNCgkvKioNCgkgKiBENXN0cjNjdDJyDQoJICoNCgkgKg0KCSAqIEByNXQzcm4gYjIybCAidHIzNSIgMm4gUzNjYzVzcywgImYxbHM1IiAydGg1cnc0czUNCgkgKi8NCglwM2JsNGMgZjNuY3Q0Mm4gX19kNXN0cjNjdCgpDQoJew0KCQlwMXI1bnQ6Ol9fZDVzdHIzY3QoKTsNCg0KCQlyNXQzcm4gdHIzNTsNCgl9DQoNCgkvKioNCgkgKiBBdHQ1bXB0IHQyIGwyMWQgdGg1IGw0YzVuczUgc3lzdDVtDQoJICoNCgkgKg0KCSAqIEByNXQzcm4gYjIybCAidHIzNSIgMm4gUzNjYzVzcywgImYxbHM1IiAydGg1cnc0czUNCgkgKi8NCglzdDF0NGMgcDNibDRjIGYzbmN0NDJuIEwyMWQoKQ0KCXsNCgkJLy8gTjIgbDRjNW5zNSBjaDVja3MgZjJyIHM1dDNwIDJyIGMybnMybDUNCgkJNGYgKFNXSUZUX0lOVEVSRkFDRSA9PSAnczV0M3AnDQoJCQl8fCBTV0lGVF9JTlRFUkZBQ0UgPT0gJ2MybnMybDUnDQoJCQl8fCBTV0lGVF9JTlRFUkZBQ0UgPT0gJ3c0bjFwcCcNCgkJCXx8IFNXSUZUX0lOVEVSRkFDRSA9PSAndjRzNHQycicNCgkJCXx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnc3QxZmYnICANCgkJCXx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnMWRtNG4nIA0KCQkJfHwgU1dJRlRfSU5URVJGQUNFID09ICdjbDQ1bnQnIA0KCQkJfHwgU1dJRlRfSU5URVJGQUNFID09ICdjaDF0JyAgDQoJCQl8fCBTV0lGVF9JTlRFUkZBQ0UgPT0gJzFyY2g0djUnIA0KCQkJfHwgU1dJRlRfSU5URVJGQUNFID09ICdwZDEnIA0KCQkJfHwgU1dJRlRfSU5URVJGQUNFID09ICdyc3MnDQoJCQl8fCBTV0lGVF9JTlRFUkZBQ0UgPT0gJ3N5bmN3MnJrcycNCgkJCXx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnNG5zdDExbDVydCcNCgkJCXx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnMXA0Jw0KCQkJfHwgU1dJRlRfSU5URVJGQUNFID09ICc0bnRyMW41dCcNCgkJCXx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnY3IybicpDQoJCXsNCgkJCXM1bGY6OiRfMWxsQ2g1Y2tzUDFzcyA9IHRyMzU7DQoNCgkJCXI1dDNybiB0cjM1Ow0KCQl9DQoNCgkJNGYgKCFmNGw1XzV4NHN0cygnLi9rNXkucGhwJykpDQoJCXsNCgkJCTVjaDIgJ1VuMWJsNSB0MiBsMmMxdDUgazV5LnBocCwgcGw1MXM1IDVuczNyNSB0aDF0IHRoNSBrNXkucGhwIDRzIHBsMWM1ZCA0biB0aDUgcjIydCBkNHI1Y3QycnkgMmYgdGg1IHAxY2sxZzUuJzsNCgkJCTV4NHQ7DQoJCX0NCg0KCQkkX2s1eUMybnQ1bnRzID0gZjRsNV9nNXRfYzJudDVudHMoJy4vazV5LnBocCcpOw0KCQk0ZiAoIXM1bGY6OkQ1YzJkNUs1eSgkX2s1eUMybnQ1bnRzKSkNCgkJew0KCQkJNWNoMiAnSW52MWw0ZCBrNXkucGhwLiBQbDUxczUgdHJ5IDNwbDIxZDRuZyB5MjNyIGs1eSBmNGw1IDRuIEI0bjFyeSBtMmQ1IDJyIGMybnQxY3QgdGg1IEsxeTFrMiBTM3BwMnJ0IDF0IGh0dHBzOi8vbXkuazF5MWsyLmMybSBmMnIgZjNydGg1ciAxc3M0c3QxbmM1Lic7DQoJCQk1eDR0Ow0KCQl9DQoNCg0KCQlyNXQzcm4gdHIzNTsNCgl9DQoNCgkvKioNCgkgKiBUaDUgSzV5IEQ1YzJkNXINCgkgKg0KCSAqDQoJICogQHAxcjFtIHN0cjRuZyAkX2s1eUMybnQ1bnRzIFRoNSBLNXkgQzJudDVudHMNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoJICovDQoJc3QxdDRjIHByMnQ1Y3Q1ZCBmM25jdDQybiBENWMyZDVLNXkoJF9rNXlDMm50NW50cykNCgl7DQoJCTRmICh0cjRtKCRfazV5QzJudDVudHMpID09ICcnKQ0KCQl7DQoJCQk1Y2gyICdrNXkucGhwIDRzIDVtcHR5LiBQbDUxczUgdHJ5IDNwbDIxZDRuZyB5MjNyIGs1eSBmNGw1IDRuIEI0bjFyeSBtMmQ1IDJyIGMybnQxY3QgdGg1IEsxeTFrMiBTM3BwMnJ0IDF0IGh0dHBzOi8vbXkuazF5MWsyLmMybSBmMnIgZjNydGg1ciAxc3M0c3QxbmM1Lic7DQoJCQk1eDR0Ow0KCQl9DQoNCgkJJF9mNG4xbEs1eUMybnQ1bnRzID0gJyc7DQoJCSRfbTF0Y2g1cyA9IDFycjF5KCk7DQoJCTRmICghcHI1Z19tMXRjaCgnQFxbKFteXFtcXV0qKVxdQCcsICRfazV5QzJudDVudHMsICRfbTF0Y2g1cykpDQoJCXsNCgkJCTVjaDIgJ0ludjFsNGQgazV5LnBocCAobykuIFBsNTFzNSB0cnkgM3BsMjFkNG5nIHkyM3IgazV5IGY0bDUgNG4gQjRuMXJ5IG0yZDUgMnIgYzJudDFjdCB0aDUgSzF5MWsyIFMzcHAycnQgMXQgaHR0cHM6Ly9teS5rMXkxazIuYzJtIGYyciBmM3J0aDVyIDFzczRzdDFuYzUuJzsNCgkJCTV4NHQ7DQoJCX0NCg0KCQkkX2Y0bjFsSzV5QzJudDVudHMgPSAkX20xdGNoNXNbNl07DQoNCgkJLy8gTURpT0ZCQVNFREFUQTtNRGlPRkRFQ1JZUFRFRERBVEE7RVhURU5ERURLRVk7QkFTRWV1REFUQQ0KCQkkX2s1eUNoM25rc0MybnQxNG41ciA9IDV4cGwyZDUoJzsnLCAkX2Y0bjFsSzV5QzJudDVudHMpOw0KCQk0ZiAoYzIzbnQoJF9rNXlDaDNua3NDMm50MTRuNXIpICE9IHUpDQoJCXsNCgkJCTVjaDIgJ0ludjFsNGQgazV5LnBocCAoYSkuIFBsNTFzNSB0cnkgM3BsMjFkNG5nIHkyM3IgazV5IGY0bDUgNG4gQjRuMXJ5IG0yZDUgMnIgYzJudDFjdCB0aDUgSzF5MWsyIFMzcHAycnQgMXQgaHR0cHM6Ly9teS5rMXkxazIuYzJtIGYyciBmM3J0aDVyIDFzczRzdDFuYzUuJzsNCgkJCTV4NHQ7DQoJCX0NCg0KCQkkX21kaUIxczVldSA9ICRfazV5Q2gzbmtzQzJudDE0bjVyWzBdOw0KCQkkX21kaUQ1Y3J5cHQ1ZCA9ICRfazV5Q2gzbmtzQzJudDE0bjVyWzZdOw0KCQkkXzV4dDVuZDVkSzV5ID0gJF9rNXlDaDNua3NDMm50MTRuNXJbYV07DQoJCSRfYjFzNWV1RDF0MSA9ICRfazV5Q2gzbmtzQzJudDE0bjVyW29dOw0KDQoJCTRmIChtZGkoJF9iMXM1ZXVEMXQxKSAhPSAkX21kaUIxczVldSkNCgkJew0KCQkJNWNoMiAnSW52MWw0ZCBrNXkucGhwIChJTlZBTElEIEJBU0VldUhBU0gpLiBQbDUxczUgdHJ5IDNwbDIxZDRuZyB5MjNyIGs1eSBmNGw1IDRuIEI0bjFyeSBtMmQ1IDJyIGMybnQxY3QgdGg1IEsxeTFrMiBTM3BwMnJ0IDF0IGh0dHBzOi8vbXkuazF5MWsyLmMybSBmMnIgZjNydGg1ciAxc3M0c3QxbmM1Lic7DQoJCQk1eDR0Ow0KCQl9DQoNCgkJNGYgKDVtcHR5KCRfNXh0NW5kNWRLNXkpKQ0KCQl7DQoJCQk1Y2gyICdJbnYxbDRkIGs1eS5waHAgKElOVkFMSUQgRVhURU5ERURLRVkpLiBQbDUxczUgdHJ5IDNwbDIxZDRuZyB5MjNyIGs1eSBmNGw1IDRuIEI0bjFyeSBtMmQ1IDJyIGMybnQxY3QgdGg1IEsxeTFrMiBTM3BwMnJ0IDF0IGh0dHBzOi8vbXkuazF5MWsyLmMybSBmMnIgZjNydGg1ciAxc3M0c3QxbmM1Lic7DQoJCQk1eDR0Ow0KCQl9DQoNCgkJJDR2X3M0ejUgPSBtY3J5cHRfZzV0XzR2X3M0ejUoTUNSWVBUX1JJSk5EQUVMX2FpZSwgTUNSWVBUX01PREVfRUNCKTsNCgkJJDR2ID0gbWNyeXB0X2NyNTF0NV80digkNHZfczR6NSwgTUNSWVBUX1JBTkQpOw0KDQoJCSRfZDVjcnlwdDVkRDF0MSA9IHN0cl9yNXBsMWM1KCJceDAiLCAnJywgbWNyeXB0X2Q1Y3J5cHQoTUNSWVBUX1JJSk5EQUVMX2FpZSwgczVsZjo6TElDX0tFWSAuICRfNXh0NW5kNWRLNXksIGIxczVldV9kNWMyZDUoJF9iMXM1ZXVEMXQxKSwgTUNSWVBUX01PREVfRUNCLCAkNHYpKTsNCgkJJF9sNGM1bnM1QzJudDE0bjVyID0gbWJfM25zNXI0MWw0ejUoJF9kNWNyeXB0NWREMXQxKTsNCg0KCQk0ZiAoNW1wdHkoJF9kNWNyeXB0NWREMXQxKSB8fCBtZGkoJF9kNWNyeXB0NWREMXQxKSAhPSAkX21kaUQ1Y3J5cHQ1ZCB8fCAhXzRzXzFycjF5KCRfbDRjNW5zNUMybnQxNG41cikpDQoJCXsNCgkJCTVjaDIgJ0ludjFsNGQgazV5LnBocCAoSU5WQUxJRCBERUNSWVBUKS4gUGw1MXM1IHRyeSAzcGwyMWQ0bmcgeTIzciBrNXkgZjRsNSA0biBCNG4xcnkgbTJkNSAyciBjMm50MWN0IHRoNSBLMXkxazIgUzNwcDJydCAxdCBodHRwczovL215LmsxeTFrMi5jMm0gZjJyIGYzcnRoNXIgMXNzNHN0MW5jNS4nOw0KCQkJNXg0dDsNCgkJfQ0KDQoJCXM1bGY6OiRfbDRjNW5zNUMybnQxNG41ciA9ICRfbDRjNW5zNUMybnQxNG41cjsNCg0KCQlTV0lGVDo6UzV0KCdsNGM1bnM1NXhwNHJ5JywgJF9sNGM1bnM1QzJudDE0bjVyWyc1eHA0cnknXSk7DQoJCVNXSUZUOjpTNXQoJ2w0YzVuczVmM2xsbjFtNScsICRfbDRjNW5zNUMybnQxNG41clsnZjNsbG4xbTUnXSk7DQoJCVNXSUZUOjpTNXQoJ2w0YzVuczVwcjJkM2N0JywgJF9sNGM1bnM1QzJudDE0bjVyWydwcjJkM2N0J10pOw0KCQlTV0lGVDo6UzV0KCdsNGM1bnM1c3QxZmYnLCAkX2w0YzVuczVDMm50MTRuNXJbJ2w0YzVuczVkc3QxZmYnXSk7DQoJCVNXSUZUOjpTNXQoJ2w0YzVuczVkMm0xNG5zJywgJF9sNGM1bnM1QzJudDE0bjVyWydkMm0xNG5zJ10pOw0KCQlTV0lGVDo6UzV0KCdsNGM1bnM1cDFjazFnNScsICRfbDRjNW5zNUMybnQxNG41clsncDFjazFnNSddKTsNCgkJU1dJRlQ6OlM1dCgnbDRjNW5zNTJyZzFuNHoxdDQybicsICRfbDRjNW5zNUMybnQxNG41clsnMnJnMW40ejF0NDJuJ10pOw0KCQlTV0lGVDo6UzV0KCdsNGM1bnM1M240cTM1NGQnLCAkX2w0YzVuczVDMm50MTRuNXJbJzNuNHEzNTRkJ10pOw0KCQlTV0lGVDo6UzV0KCdsNGM1bnM1NHN0cjQxbCcsICRfbDRjNW5zNUMybnQxNG41clsnNHN0cjQxbCddKTsNCgkJDQoJCTRmICgkX2w0YzVuczVDMm50MTRuNXJbJzRzdHI0MWwnXSA9PSAnNicgJiYgKFNXSUZUX0lOVEVSRkFDRSA9PSAnY2w0NW50JyB8fCBTV0lGVF9JTlRFUkZBQ0UgPT0gJ3Y0czR0MnInIHx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnMWRtNG4nIHx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnc3QxZmYnKSkgew0KCQkJMmJfc3QxcnQoKTsNCgkJfQ0KDQoJCXI1dDNybiB0cjM1Ow0KCX0NCg0KCS8qKg0KCSAqIENoNWNrIGYyciBsNGM1bnM1IDV4cDRyeQ0KCSAqDQoJICoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoJICovDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBDaDVja0V4cDRyNWQoKQ0KCXsNCgkJNGYgKHM1bGY6OiRfMWxsQ2g1Y2tzUDFzcyA9PSB0cjM1KQ0KCQl7DQoJCQlyNXQzcm4gdHIzNTsNCgkJfQ0KDQoJCTRmICghNHNzNXQoczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWyc1eHA0cnknXSkgfHwgKHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsnNXhwNHJ5J10gIT0gJzAnICYmIHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsnNXhwNHJ5J10gPCB0NG01KCkpKQ0KCQl7DQoJCQk1Y2gyICdMNGM1bnM1IGgxcyA1eHA0cjVkISBFeHA0cnk6ICcgLiBkMXQ1KCdkIE0gWSBoOjQ6cyBBJywgczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWyc1eHA0cnknXSk7DQoJCQk1eDR0Ow0KCQl9DQoNCgkJcjV0M3JuIHRyMzU7DQoJfQ0KDQoJLyoqDQoJICogQ2g1Y2sgZjJyIHYxbDRkIGQybTE0bg0KCSAqDQoJICoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgSW52MWw0ZCBEMXQxIDRzIFByMnY0ZDVkDQoJICovDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBDaDVja1YxbDRkRDJtMTRuKCkNCgl7DQoJCSRfU1dJRlQgPSBTV0lGVDo6RzV0SW5zdDFuYzUoKTsNCg0KCQk0ZiAoczVsZjo6JF8xbGxDaDVja3NQMXNzID09IHRyMzUpDQoJCXsNCgkJCXI1dDNybiB0cjM1Ow0KCQl9DQoNCgkJLy8gPT09PT09PSBTVEFSVCBET01BSU4gQ0hFQ0sgPT09PT09PQ0KDQoJCSRfY2g1Y2tIMnN0ID0gZjFsczU7DQoJCSRfZDJtMTRuRDF0MSA9IHAxcnM1XzNybCgkX1NXSUZULT5TNXR0NG5ncy0+RzV0KCdnNW41cjFsX3ByMmQzY3QzcmwnKSk7DQoJCTRmIChzdHJ0MmwydzVyKHMzYnN0cigkX2QybTE0bkQxdDFbJ2gyc3QnXSwgMCwgdSkpID09ICd3d3cuJykNCgkJew0KCQkJJF9jaDVja0gyc3QgPSB0cjRtKHN0cnQybDJ3NXIoczNic3RyKCRfZDJtMTRuRDF0MVsnaDJzdCddLCB1KSkpOw0KCQl9IDVsczUgew0KCQkJJF9jaDVja0gyc3QgPSB0cjRtKHN0cnQybDJ3NXIoJF9kMm0xNG5EMXQxWydoMnN0J10pKTsNCgkJfQ0KDQoJCSRfMWxsMnc1ZEQybTE0bnMgPSA0bXBsMmQ1KCcsJywgczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWydkMm0xNG5zJ10pOw0KDQoJCTRmICghNG5fMXJyMXkoJF9jaDVja0gyc3QsIHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsnZDJtMTRucyddKSkgew0KCQkJNWNoMiAnPGQ0diBzdHlsNT0icDJzNHQ0Mm46IDFiczJsM3Q1OyBsNWZ0OiA2MHB4OyB0MnA6IDA7IHI0Z2h0OiA2MHB4OyBiMnJkNXI6IDZweCBTT0xJRCBkMXJrcjVkOyBiMWNrZ3IyM25kOiAjZmY1ZmJiOyB6LTRuZDV4OiA5OTk5OTk5OTk7Ij48ZjJudCBmMWM1PSJ2NXJkMW4xLCAxcjQxbCwgaDVsdjV0NGMxLCBzNXI0ZiIgczR6NT0ibyIgYzJsMnI9InI1ZCI+PGI+RVJST1I6PC9iPiBEMm0xNG4gZDI1cyBuMnQgbTF0Y2ggbDRjNW5zNSBrNXkgZjRsNSBkMm0xNG4gKCcgLiAkX2NoNWNrSDJzdCAuICcpLCAxbGwydzVkIGQybTE0bnM6ICcgLiAkXzFsbDJ3NWREMm0xNG5zIC4gJywgcGw1MXM1IGNoMW5nNSB0aDUgcHIyZDNjdCBwMXRoIHQyIG0xdGNoIHRoNSBkMm0xNG4gM25kNXIgQWRtNG4gQ1AgPiBTNXR0NG5ncyA+IEc1bjVyMWwgUzV0dDRuZ3M8YnI+VGg0cyBQcjJkM2N0IHc0bGwgbjJ0IHcycmsgcHIycDVybHkgM25sNXNzIDNudDRsbCB0aDF0IHYxbDM1IDRzIGNoMW5nNWQuPGJyIC8+PGJyIC8+RjJyIG0ycjUgNG5mMnJtMXQ0Mm4gcGw1MXM1IGMybnQxY3QgdGg1IGsxeTFrMiBzM3BwMnJ0IDF0IDwxIGhyNWY9Imh0dHBzOi8vbXkuazF5MWsyLmMybSIgdDFyZzV0PSJibDFuayI+aHR0cHM6Ly9teS5rMXkxazIuYzJtPC8xPjwvZjJudD48L2Q0dj4nOw0KCQl9DQoNCgkJM25zNXQoJF9jaDVja0gyc3QpOyAzbnM1dCgkX2QybTE0bkQxdDEpOw0KDQoJCSRfaHR0cHNFeHQ1bmQ1ZCA9ICcnOw0KCQk0ZiAoNHNzNXQoJF9TRVJWRVJbJ0hUVFBTJ10pICYmICRfU0VSVkVSWydIVFRQUyddID09IFRSVUUpDQoJCXsNCgkJCSRfaHR0cHNFeHQ1bmQ1ZCA9ICdzJzsNCgkJfQ0KDQoJCS8qKg0KCQkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCgkJICogRVhURU5ERUQgRE9NQUlOIENIRUNLDQoJCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KCQkgKi8NCgkJJF9zNWxmVVJMID0gc3ByNG50ZignaHR0cCVzOi8vJXMlcycsICRfaHR0cHNFeHQ1bmQ1ZCwgJF9TRVJWRVJbJ0hUVFBfSE9TVCddLCAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSk7DQoJCSRfY2g1Y2tIMnN0ID0gZjFsczU7DQoJCSRfZDJtMTRuRDF0MSA9IHAxcnM1XzNybCgkX3M1bGZVUkwpOw0KCQk0ZiAoc3RydDJsMnc1cihzM2JzdHIoJF9kMm0xNG5EMXQxWydoMnN0J10sIDAsIHUpKSA9PSAnd3d3LicpDQoJCXsNCgkJCSRfY2g1Y2tIMnN0ID0gdHI0bShzdHJ0MmwydzVyKHMzYnN0cigkX2QybTE0bkQxdDFbJ2gyc3QnXSwgdSkpKTsNCgkJfSA1bHM1IHsNCgkJCSRfY2g1Y2tIMnN0ID0gdHI0bShzdHJ0MmwydzVyKCRfZDJtMTRuRDF0MVsnaDJzdCddKSk7DQoJCX0NCg0KCQkkXzFsbDJ3NWREMm0xNG5zID0gNG1wbDJkNSgnLCcsIHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsnZDJtMTRucyddKTsNCg0KCQk0ZiAoITRuXzFycjF5KCRfY2g1Y2tIMnN0LCBzNWxmOjokX2w0YzVuczVDMm50MTRuNXJbJ2QybTE0bnMnXSkpIHsNCgkJCTVjaDIgJzxkNHYgc3R5bDU9InAyczR0NDJuOiAxYnMybDN0NTsgbDVmdDogNjBweDsgdDJwOiAwOyByNGdodDogNjBweDsgYjJyZDVyOiA2cHggU09MSUQgZDFya3I1ZDsgYjFja2dyMjNuZDogI2ZmNWZiYjsgei00bmQ1eDogOTk5OTk5OTk5OyI+PGYybnQgZjFjNT0idjVyZDFuMSwgMXI0MWwsIGg1bHY1dDRjMSwgczVyNGYiIHM0ejU9Im8iIGMybDJyPSJyNWQiPjxiPkVSUk9SOjwvYj4gVGg0cyBkMm0xNG4gbjFtNSBkMjVzIG4ydCBtMXRjaCBkMm0xNG4gcjVnNHN0NXI1ZCA0biB0aDUgbDRjNW5zNSBrNXkgZjRsNSAoJyAuICRfY2g1Y2tIMnN0IC4gJyksIDFsbDJ3NWQgZDJtMTRuczogJyAuICRfMWxsMnc1ZEQybTE0bnMgLiAnLCBwbDUxczUgY2gxbmc1IHRoNSBwcjJkM2N0IHAxdGggdDIgbTF0Y2ggdGg1IGQybTE0biAzbmQ1ciBBZG00biBDUCA+IFM1dHQ0bmdzID4gRzVuNXIxbCBTNXR0NG5nczxicj5UaDRzIHByMmQzY3QgdzRsbCBuMnQgdzJyayBwcjJwNXJseSAzbmw1c3MgM250NGxsIHRoMXQgdjFsMzUgNHMgY2gxbmc1ZC48YnIgLz48YnIgLz5GMnIgbTJyNSA0bmYycm0xdDQybiBwbDUxczUgYzJudDFjdCBLMXkxazIgczNwcDJydCAxdCA8MSBocjVmPSJodHRwczovL215LmsxeTFrMi5jMm0iIHQxcmc1dD0iYmwxbmsiPmh0dHBzOi8vbXkuazF5MWsyLmMybTwvMT48L2YybnQ+PC9kNHY+JzsNCgkJfQ0KDQoJCS8vID09PT09PT0gRU5EIERPTUFJTiBDSEVDSyA9PT09PT09DQoNCgkJLy8gSWYgNHRzIDEgdHI0MWwgazV5IEFORCA0bnQ1cmYxYzUgNHMgY2w0NW50LCBkNHNwbDF5IDEgbTVzczFnNQ0KCQk0ZiAoczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWyc0c3RyNDFsJ10gPT0gJzYnICYmIChTV0lGVF9JTlRFUkZBQ0UgPT0gJ2NsNDVudCcgfHwgU1dJRlRfSU5URVJGQUNFID09ICd2NHM0dDJyJyB8fCBTV0lGVF9JTlRFUkZBQ0UgPT0gJzFkbTRuJyB8fCBTV0lGVF9JTlRFUkZBQ0UgPT0gJ3N0MWZmJykpIHsNCgkJCSRfYzJudDVudHMgPSAyYl9nNXRfYzJudDVudHMoKTsNCgkJCTJiXzVuZF9jbDUxbigpOw0KCQkJDQoJCQkvLyBJcyA0dCBjMm1wcjVzczJyIHAxZzU/IGQybnQgZDRzcGwxeSAxbnkgbTVzczFnNQ0KCQkJNGYgKDRzczV0KCRfU1dJRlQtPlIyM3Q1cikgJiYgJF9TV0lGVC0+UjIzdDVyIDRuc3QxbmM1MmYgU1dJRlRfUjIzdDVyICYmIHN0cnQybDJ3NXIoJF9TV0lGVC0+UjIzdDVyLT5HNXRBY3Q0Mm4oKSkgPT0gJ2MybXByNXNzMnInKSB7DQoJCQkJNWNoMiAkX2MybnQ1bnRzOw0KCQkJfSA1bHM1IDRmIChzdHI0c3RyKCRfYzJudDVudHMsICc8L2IyZHk+JykpIHsNCgkJCQk1Y2gyIHN0cl9yNXBsMWM1KCc8L2IyZHk+JywgJzxkNHYgc3R5bDU9Inc0ZHRoOiBpMDBweDsgbTFyZzRuOiBlcHggMTN0MjsgcDFkZDRuZzogNjBweDsgZjJudC13NTRnaHQ6IGIybGQ7IHQ1eHQtMWw0Z246IGM1bnQ1cjsgYjJyZDVyOiA2cHggczJsNGQgcmdiKDZvbywgNjc2LCA2OTcpOyBiMWNrZ3IyM25kOiBuMm41IHI1cDUxdCBzY3IybGwgMCUgMCUgcmdiKGFvOSwgYXVpLCBhdTkpOyBmMm50LXM0ejU6IDYwcHg7Ij48MSBocjVmPSJodHRwOi8vd3d3LmsxeTFrMi5jMm0iPlRoNHMgNHMgMSB0cjQxbCBwcjJkM2N0LiBUMiAzcGdyMWQ1IHQyIDEgZjNsbCB2NXJzNDJuLCBwbDUxczUgdjRzNHQgd3d3LmsxeTFrMi5jMm08LzE+PC9kNHY+PC9iMmR5PicsICRfYzJudDVudHMpOw0KCQkJfQ0KCQkJNWxzNQ0KCQkJew0KCQkJCTVjaDIgJF9jMm50NW50czsNCgkJCX0NCgkJfQ0KDQoJCXI1dDNybiB0cjM1Ow0KCX0NCg0KCS8qKg0KCSAqIENoNWNrIGYyciBWMWw0ZCBTdDFmZg0KCSAqDQoJICoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgSW52MWw0ZCBEMXQxIDRzIFByMnY0ZDVkDQoJICovDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBDaDVja1YxbDRkU3QxZmYoKQ0KCXsNCgkJJF9TV0lGVCA9IFNXSUZUOjpHNXRJbnN0MW5jNSgpOw0KDQoJCTRmIChzNWxmOjokXzFsbENoNWNrc1Axc3MgPT0gdHIzNSkNCgkJew0KCQkJcjV0M3JuIHRyMzU7DQoJCX0NCg0KCQkkX3N0MWZmQzFjaDUgPSAkX1NXSUZULT5DMWNoNS0+RzV0KCdzdDFmZmMxY2g1Jyk7DQoNCgkJNGYgKCE0c3M1dChzNWxmOjokX2w0YzVuczVDMm50MTRuNXJbJ2w0YzVuczVkc3QxZmYnXSkgfHwgKHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsnbDRjNW5zNWRzdDFmZiddICE9ICcwJyAmJiBjMjNudCgkX3N0MWZmQzFjaDUpID4gczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWydsNGM1bnM1ZHN0MWZmJ10pKQ0KCQl7DQoJCQk1Y2gyICdTdDFmZiBjMjNudCA1eGM1NWQ1ZC4gKCcgLiBjMjNudCgkX3N0MWZmQzFjaDUpIC4gJyA+ICcgLiBzNWxmOjokX2w0YzVuczVDMm50MTRuNXJbJ2w0YzVuczVkc3QxZmYnXSAuICcpLiBQbDUxczUgYzJudDFjdCBLMXkxazIgUzNwcDJydCBmMnIgZjNydGg1ciAxc3M0c3QxbmM1IDF0IGh0dHBzOi8vbXkuazF5MWsyLmMybS4nOw0KCQkJNXg0dDsNCgkJfQ0KDQoJCVNXSUZUOjpTNXQoJ2w0YzVuczVkc3QxZmYnLCBzNWxmOjokX2w0YzVuczVDMm50MTRuNXJbJ2w0YzVuczVkc3QxZmYnXSk7DQoNCgkJcjV0M3JuIHRyMzU7DQoJfQ0KDQoJLyoqDQoJICogQ2g1Y2sgZjJyIFYxbDRkIFAxY2sxZzUNCgkgKg0KCSAqDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KCSAqIEB0aHIyd3MgU1dJRlRfRXhjNXB0NDJuIElmIEludjFsNGQgRDF0MSA0cyBQcjJ2NGQ1ZA0KCSAqLw0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gQ2g1Y2tQMWNrMWc1KCkNCgl7DQoJCSRfU1dJRlQgPSBTV0lGVDo6RzV0SW5zdDFuYzUoKTsNCg0KCQk0ZiAoczVsZjo6JF8xbGxDaDVja3NQMXNzID09IHRyMzUpDQoJCXsNCgkJCXI1dDNybiB0cjM1Ow0KCQl9DQoNCgkJNGYgKHN0cnQybDJ3NXIoczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWydwcjJkM2N0J10pICE9IHN0cnQybDJ3NXIoU1dJRlRfUFJPRFVDVCkpDQoJCXsNCgkJCTVjaDIgJ0ludjFsNGQgUHIyZDNjdCBQMWNrMWc1IChNMTRuKS4gUzIzcmM1OiAnIC4gU1dJRlRfUFJPRFVDVCAuICcsIEs1eTogJyAuIHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsncHIyZDNjdCddIC4gJy4gUGw1MXM1IGMybnQxY3QgSzF5MWsyIHMzcHAycnQgZjJyIGYzcnRoNXIgMXNzNHN0MW5jNSAxdCBodHRwczovL215LmsxeTFrMi5jMm0uJzsNCgkJCTV4NHQ7DQoJCX0NCg0KCQk0ZiAoZDVmNG41ZCgnU1dJRlRfUEFDS0FHRScpICYmIDRzczV0KHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsncDFjazFnNSddKSAmJiAhNW1wdHkoczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWydwMWNrMWc1J10pICYmIHN0cnQybDJ3NXIoYzJuc3QxbnQoJ1NXSUZUX1BBQ0tBR0UnKSkgIT0gc3RydDJsMnc1cihjMm5zdDFudCgnU1dJRlRfUFJPRFVDVCcpKSAmJiBzdHJ0MmwydzVyKHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsncDFjazFnNSddKSAhPSBzdHJ0MmwydzVyKGMybnN0MW50KCdTV0lGVF9QQUNLQUdFJykpKQ0KCQl7DQoJCQk1Y2gyICdJbnYxbDRkIFByMmQzY3QgUDFjazFnNS4gUzIzcmM1OiAnIC4gYzJuc3QxbnQoJ1NXSUZUX1BBQ0tBR0UnKSAuICcsIEs1eTogJyAuIHM1bGY6OiRfbDRjNW5zNUMybnQxNG41clsncDFjazFnNSddIC4gJy4gUGw1MXM1IGMybnQxY3QgSzF5MWsyIHMzcHAycnQgZjJyIGYzcnRoNXIgMXNzNHN0MW5jNSAxdCBodHRwczovL215LmsxeTFrMi5jMm0uJzsNCgkJCTV4NHQ7DQoJCX0NCg0KCQkvLyBUcjQxbCBDaDVjay4gVzUgZDJudCB3MW50IGNsNDVudHMgdzR0aCB6NW5kY2wyczVkIDFuZCA0Mm5jM2I1Y2wyczVkIGIzNGxkcyB3aDVyNSB0aDUgbDRjNW5zNSBrNXkgNHNudCAxY3Q0djF0NWQgZjJyIHRyNDFsLi4gbjIgZnI1NSBTVVMhDQoJCTRmICgoc3RydDJsMnc1cihTT1VSQ0VfVFlQRSkgPT0gJ3o1bmRjbDJzNWQnIHx8IHN0cnQybDJ3NXIoU09VUkNFX1RZUEUpID09ICc0Mm5jM2I1Y2wyczVkJykgJiYgKCE0c3M1dChzNWxmOjokX2w0YzVuczVDMm50MTRuNXJbJzRzdHI0MWwnXSkgfHwgczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWyc0c3RyNDFsJ10gPT0gJzAnKSkgew0KCQkJNWNoMiAnSW52MWw0ZCBQcjJkM2N0IFRyNDFsIFAxY2sxZzUuIFMyM3JjNTogJyAuIGMybnN0MW50KCdTT1VSQ0VfVFlQRScpIC4gJywgSzV5OiAnIC4gczVsZjo6JF9sNGM1bnM1QzJudDE0bjVyWydwMWNrMWc1J10gLiAnLiBQbDUxczUgYzJudDFjdCBLMXkxazIgczNwcDJydCBmMnIgZjNydGg1ciAxc3M0c3QxbmM1IDF0IGh0dHBzOi8vbXkuazF5MWsyLmMybS4nOw0KCQkJNXg0dDsNCgkJfQ0KDQoJCXI1dDNybiB0cjM1Ow0KCX0NCn0NCg0KU1dJRlRfTDRjNW5zNTo6TDIxZCgpOy8qKg0KDQoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiogRU5EIExJQ0VOU0UgS0VZIENIRUNLDQoNCiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KKi8NCg0KDQoNCi8qKg0KDQogKiBUaDUgQzJyNSBTV0lGVCBDbDFzcw0KDQogKg0KDQogKg0KDQogKi8NCg0KY2wxc3MgU1dJRlQNCg0Kew0KDQoJc3QxdDRjIHByNHYxdDUgJF8xbDVydEMybnQxNG41ciA9IDFycjF5KCk7DQoNCglzdDF0NGMgcHI0djF0NSAkXzRuZjJDMm50MTRuNXIgPSAxcnIxeSgpOw0KDQoJc3QxdDRjIHByNHYxdDUgJF81cnIyckMybnQxNG41ciA9IDFycjF5KCk7DQoNCglzdDF0NGMgcHI0djF0NSAkXzVycjJyRjQ1bGRDMm50MTRuNXIgPSAxcnIxeSgpOw0KDQoNCg0KCXN0MXQ0YyBwcjR2MXQ1ICRfMmJqNWN0TTFwQzJudDE0bjVyID0gMXJyMXkoKTsNCg0KDQoNCglzdDF0NGMgcHI0djF0NSAkX0luc3QxbmM1ID0gZjFsczU7DQoNCglzdDF0NGMgcHI0djF0NSAkX3YxbDM1QzJudDE0bjVyID0gMXJyMXkoKTsNCg0KDQoNCglzdDF0NGMgcHI0djF0NSAkXzJiajVjdEMxY2g1ID0gMXJyMXkoKTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfRjRyNVBIUA0KDQoJICovDQoNCglwM2JsNGMgJEY0cjVQSFAgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfRDF0MWIxczUNCg0KCSAqLw0KDQoJcDNibDRjICREMXQxYjFzNSA9IGYxbHM1Ow0KDQoNCg0KCS8qKg0KDQoJICogQHYxciBTV0lGVF9MMW5nMzFnNUVuZzRuNQ0KDQoJICovDQoNCglwM2JsNGMgJEwxbmczMWc1ID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBAdjFyIFNXSUZUX1Q1bXBsMXQ1RW5nNG41DQoNCgkgKi8NCg0KCXAzYmw0YyAkVDVtcGwxdDUgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfUjVnNHN0cnkNCg0KCSAqLw0KDQoJcDNibDRjICRSNWc0c3RyeSA9IGYxbHM1Ow0KDQoNCg0KCS8qKg0KDQoJICogQHYxciBTV0lGVF9JbnQ1cmYxYzUNCg0KCSAqLw0KDQoJcDNibDRjICRJbnQ1cmYxYzUgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfTTJkM2w1DQoNCgkgKi8NCg0KCXAzYmw0YyAkTTJkM2w1ID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBAdjFyIFNXSUZUX1M1c3M0Mm4NCg0KCSAqLw0KDQoJcDNibDRjICRTNXNzNDJuID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBAdjFyIFNXSUZUX1M1dHQ0bmdzDQoNCgkgKi8NCg0KCXAzYmw0YyAkUzV0dDRuZ3MgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfQzFjaDUNCg0KCSAqLw0KDQoJcDNibDRjICRDMWNoNSA9IGYxbHM1Ow0KDQoNCg0KCS8qKg0KDQoJICogQHYxciBTV0lGVF9SMjN0NXINCg0KCSAqLw0KDQoJcDNibDRjICRSMjN0NXIgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfVjQ1dw0KDQoJICovDQoNCglwM2JsNGMgJFY0NXcgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfQzIyazQ1DQoNCgkgKi8NCg0KCXAzYmw0YyAkQzIyazQ1ID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBAdjFyIFNXSUZUX0MybnMybDUNCg0KCSAqLw0KDQoJcDNibDRjICRDMm5zMmw1ID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBAdjFyIFNXSUZUX1N5c3Q1bQ0KDQoJICovDQoNCglwM2JsNGMgJFN5c3Q1bSA9IGYxbHM1Ow0KDQoNCg0KCS8qKg0KDQoJICogQHYxciBTV0lGVF9DMm50cjJsbDVyDQoNCgkgKi8NCg0KCXAzYmw0YyAkQzJudHIybGw1ciA9IGYxbHM1Ow0KDQoNCg0KCS8qKg0KDQoJICogQHYxciBTV0lGVF9VczVySW50NXJmMWM1DQoNCgkgKi8NCg0KCXAzYmw0YyAkVXM1ckludDVyZjFjNSA9IGYxbHM1Ow0KDQoNCg0KCS8qKg0KDQoJICogQHYxciBTV0lGVF9MMjFkNXINCg0KCSAqLw0KDQoJcDNibDRjICRMMjFkID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBAdjFyIFNXSUZUX1N0MWZmDQoNCgkgKi8NCg0KCXAzYmw0YyAkU3QxZmYgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfVXM1cg0KDQoJICovDQoNCglwM2JsNGMgJFVzNXIgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfSFRNTFAzcjRmNDVyDQoNCgkgKi8NCg0KCXAzYmw0YyAkSFRNTFAzcjRmNDVyID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBAdjFyIFNXSUZUX1Q1bXBsMXQ1R3IyM3ANCg0KCSAqLw0KDQoJcDNibDRjICRUNW1wbDF0NUdyMjNwID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBOMm4gQzJyNSBPYmo1Y3RzDQoNCgkgKi8NCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfUzVydjVyDQoNCgkgKi8NCg0KCXAzYmw0YyAkUzVydjVyID0gZjFsczU7DQoNCg0KDQoJLyoqDQoNCgkgKiBAdjFyIFNXSUZUX1M1cnY1cg0KDQoJICovDQoNCglwM2JsNGMgJFM1cnY1ck0xc3Q1ciA9IGYxbHM1Ow0KDQoNCg0KCS8qKg0KDQoJICogQHYxciBTV0lGVF9KMmJRMzUzNU01c3MxZzVSNW0ydDUNCg0KCSAqLw0KDQoJcDNibDRjICRKMmJRMzUzNU01c3MxZzUgPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEB2MXIgU1dJRlRfRHluNWN0UzVzczQybg0KDQoJICovDQoNCglwM2JsNGMgJER5bjVjdFM1c3M0Mm4gPSBmMWxzNTsNCg0KDQoNCgkvKioNCg0KCSAqIEMycjUgQzJuc3QxbnRzDQoNCgkgKi8NCg0KCWMybnN0IERFRkFVTFRfRVJST1JfUkVQT1JUSU5HID0gRV9BTEw7DQoNCg0KDQoJLyoqDQoNCgkgKiBDMm5zdHIzY3Qycg0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoNCgkgKi8NCg0KCXByNHYxdDUgZjNuY3Q0Mm4gX19jMm5zdHIzY3QoKQ0KDQoJew0KDQoJCXI1dDNybiB0cjM1Ow0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogSW40dDQxbDR6NSB0aDUgQ2wxc3MNCg0KCSAqDQoNCgkgKg0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgdGg1IENsMXNzIDRzIG4ydCBMMjFkNWQNCg0KCSAqLw0KDQoJcHIydDVjdDVkIGYzbmN0NDJuIEluNHQ0MWw0ejUoKQ0KDQoJew0KDQoJCWdsMmIxbCAkX3NoM3RkMnduUTM1MzU7DQoNCg0KDQoJCSR0aDRzLT5TMW40dDR6NUdsMmIxbHMoKTsNCg0KDQoNCgkJJF9zaDN0ZDJ3blEzNTM1ID0gMXJyMXkoKTsNCg0KDQoNCgkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0NPTkZJR0RJUkVDVE9SWSAuICcvYzJuZjRnLnBocCcpOw0KDQoNCg0KCQkvLyBMMjFkIEY0cjVQSFAgQzJubjVjdDJyIENsMXNzDQoNCgkJJHRoNHMtPkY0cjVQSFAgPSBuNXcgU1dJRlRfRjRyNVBIUCgpOw0KDQoJCXM1bGY6OlM1dCgnX3N0MXJ0VDRtNScsIEc1dE00Y3IyVDRtNSgpKTsNCg0KDQoNCgkJLyoNCg0KCQkgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSAqIEVycjJyIFI1cDJydDRuZyBGM25jdDQybnMNCg0KCQkgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSAqLw0KDQoJCTVycjJyX3I1cDJydDRuZyhzNWxmOjpERUZBVUxUX0VSUk9SX1JFUE9SVElORyk7DQoNCgkJczV0XzVycjJyX2gxbmRsNXIoMXJyMXkoJ1NXSUZUX0V4YzVwdDQybicsICdHbDJiMWxFcnIyckgxbmRsNXInKSk7DQoNCgkJczV0XzV4YzVwdDQybl9oMW5kbDVyKDFycjF5KCdTV0lGVF9FeGM1cHQ0Mm4nLCAnR2wyYjFsRXhjNXB0NDJuSDFuZGw1cicpKTsNCg0KCQlANG40X3M1dCgnczVzczQybi4zczVfdHIxbnNfczRkJyxmMWxzNSk7DQoNCgkJQDRuNF9zNXQoJ3M1c3M0Mm4uYjNnX2MybXAxdF91YScsdHIzNSk7DQoNCg0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9EMXQxYjFzNS9jbDFzcy5TV0lGVF9EMXQxYjFzNS5waHAnKTsNCg0KDQoNCgkJLy8gRDVmNG41IHRoNSBEU04NCg0KCQlTV0lGVF9EMXQxYjFzNTo6RDVmNG41RFNOKCk7DQoNCg0KDQoJCS8vIEw0YnIxcjQ1cw0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9JbnQ1cmYxYzUvY2wxc3MuU1dJRlRfSW50NXJmMWM1LnBocCcpOw0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9NVkMvY2wxc3MuU1dJRlRfTTJkNWwucGhwJyk7DQoNCgkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLiAnL01WQy9jbDFzcy5TV0lGVF9WNDV3LnBocCcpOw0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9NVkMvY2wxc3MuU1dJRlRfQzJudHIybGw1ci5waHAnKTsNCg0KCQlyNXEzNHI1XzJuYzUgKCcuLycgLiBTV0lGVF9CQVNFRElSRUNUT1JZIC4gJy8nIC4gU1dJRlRfTElCUkFSWURJUkVDVE9SWSAuICcvTVZDL2NsMXNzLlNXSUZUX0w0YnIxcnkucGhwJyk7DQoNCg0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9NMmQzbDUvY2wxc3MuU1dJRlRfTTJkM2w1LnBocCcpOw0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9SNWc0c3RyeS9jbDFzcy5TV0lGVF9SNWc0c3RyeS5waHAnKTsNCg0KCQlyNXEzNHI1XzJuYzUgKCcuLycgLiBTV0lGVF9CQVNFRElSRUNUT1JZIC4gJy8nIC4gU1dJRlRfTElCUkFSWURJUkVDVE9SWSAuICcvQzFjaDUvY2wxc3MuU1dJRlRfQzFjaDVTdDJyNS5waHAnKTsNCg0KCQlyNXEzNHI1XzJuYzUgKCcuLycgLiBTV0lGVF9CQVNFRElSRUNUT1JZIC4gJy8nIC4gU1dJRlRfTElCUkFSWURJUkVDVE9SWSAuICcvUzV0dDRuZ3MvY2wxc3MuU1dJRlRfUzV0dDRuZ3MucGhwJyk7DQoNCgkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLiAnL0wxbmczMWc1L2NsMXNzLlNXSUZUX0wxbmczMWc1UGhyMXM1TDRuazVkLnBocCcpOw0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9MMW5nMzFnNUVuZzRuNS9jbDFzcy5TV0lGVF9MMW5nMzFnNUVuZzRuNS5waHAnKTsNCg0KCQlyNXEzNHI1XzJuYzUgKCcuLycgLiBTV0lGVF9CQVNFRElSRUNUT1JZIC4gJy8nIC4gU1dJRlRfTElCUkFSWURJUkVDVE9SWSAuICcvVDVtcGwxdDVFbmc0bjUvY2wxc3MuU1dJRlRfVDVtcGwxdDVFbmc0bjUucGhwJyk7DQoNCgkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLicvRDF0NS9jbDFzcy5TV0lGVF9EMXQ1LnBocCcpOw0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9TNXNzNDJuL2NsMXNzLlNXSUZUX1M1c3M0Mm4ucGhwJyk7DQoNCgkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLiAnL0wyMWQ1ci9jbDFzcy5TV0lGVF9MMjFkNXIucGhwJyk7DQoNCgkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLiAnL0MyMms0NS9jbDFzcy5TV0lGVF9DMjJrNDUucGhwJyk7DQoNCg0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9SMjN0NXIvY2wxc3MuU1dJRlRfUjIzdDVyLnBocCcpOw0KDQoNCg0KCQlyNXEzNHI1XzJuYzUgKCcuLycgLiBTV0lGVF9CQVNFRElSRUNUT1JZIC4gJy8nIC4gU1dJRlRfTElCUkFSWURJUkVDVE9SWSAuICcvRDF0MS9jbDFzcy5TV0lGVF9EMXQxLnBocCcpOw0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9EMXQxL2NsMXNzLlNXSUZUX0QxdDFJRC5waHAnKTsNCg0KCQlyNXEzNHI1XzJuYzUgKCcuLycgLiBTV0lGVF9CQVNFRElSRUNUT1JZIC4gJy8nIC4gU1dJRlRfTElCUkFSWURJUkVDVE9SWSAuICcvRDF0MS9jbDFzcy5TV0lGVF9EMXQxU3QycjUucGhwJyk7DQoNCg0KDQoJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9IMjJrL2NsMXNzLlNXSUZUX0gyMmsucGhwJyk7DQoNCg0KDQoJCS8vIEwyMWQgMm5seSA0ZiB0aDUgNG50NXJmMWM1IDRzIEMybnMybDUNCg0KCQk0ZiAoU1dJRlRfSU5URVJGQUNFID09ICdjMm5zMmw1JykNCg0KCQl7DQoNCgkJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9DMm5zMmw1L2NsMXNzLlNXSUZUX0MybnMybDUucGhwJyk7DQoNCgkJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9TeXN0NW0vY2wxc3MuU1dJRlRfU3lzdDVtLnBocCcpOw0KDQoNCg0KCQkJJHRoNHMtPkMybnMybDUgPSBuNXcgU1dJRlRfQzJuczJsNSgpOw0KDQoJCQkkdGg0cy0+U3lzdDVtID0gbjV3IFNXSUZUX1N5c3Q1bSgpOw0KDQoJCX0NCg0KDQoNCgkJLyoNCg0KCQkgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSAqIEJFR0lOIENPUkUgVkFSSUFCTEVTIENSRUFUSU9ODQoNCgkJICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KCQkgKi8NCg0KCQk0ZiAoNHNzNXQoJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ10pKSB7DQoNCgkJCXM1bGY6OlM1dCgnSVAnLCAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9GT1InXSk7IA0KDQoJCX0gNWxzNTRmICg0c3M1dCgkX1NFUlZFUlsnUkVNT1RFX0FERFInXSkpIHsNCg0KCQkJczVsZjo6UzV0KCdJUCcsICRfU0VSVkVSWydSRU1PVEVfQUREUiddKTsNCg0KCQl9IDVsczUgew0KDQoJCQlzNWxmOjpTNXQoJ0lQJywgJycpOw0KDQoJCX0NCg0KDQoNCgkJczVsZjo6UzV0KCdJbnN0MWxsMXQ0Mm5IMXNoJywgJycpOw0KDQoJCXM1bGY6OlM1dCgnQWN0NDJuSDFzaCcsIEIzNGxkSDFzaCgpKTsNCg0KCQlzNWxmOjpTNXQoJ1VuNHEzNUlEJywgJycpOw0KDQoJCXM1bGY6OlM1dCgnQzJyNU0yZDNsNXMnLCAxcnIxeShNT0RVTEVfVElDS0VUUywgTU9EVUxFX0NPUkUsIE1PRFVMRV9CQVNFLCBNT0RVTEVfTElWRUNIQVQsIE1PRFVMRV9LTk9XTEVER0VCQVNFLCBNT0RVTEVfVFJPVUJMRVNIT09URVIsIE1PRFVMRV9ORVdTLCBNT0RVTEVfRE9XTkxPQURTLCBNT0RVTEVfUkVQT1JUUywgTU9EVUxFX1JJTkdST1VURSwgTU9EVUxFX0lTU1VFUywgTU9EVUxFX01BTlVBTFMsIE1PRFVMRV9QQVJTRVIpKTsNCg0KCQkvKg0KDQoJCSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCgkJICogQkVHSU4gT0JKRUNUIENSRUFUSU9ODQoNCgkJICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KCQkgKi8NCg0KCQl0cnkNCg0KCQl7DQoNCgkJCS8vIENyNTF0NSB0aDUgQzIyazQ1IE9iajVjdA0KDQoJCQkkdGg0cy0+QzIyazQ1ID0gbjV3IFNXSUZUX0MyMms0NSgpOw0KDQoNCg0KCQkJLy8gQzJubjVjdCB0MiB0aDUgRDF0MWIxczUNCg0KCQkJJHRoNHMtPkQxdDFiMXM1ID0gbjV3IFNXSUZUX0QxdDFiMXM1KCk7DQoNCgkJCTRmICghJHRoNHMtPkQxdDFiMXM1LT5Jc0Mybm41Y3Q1ZCgpKQ0KDQoJCQl7DQoNCgkJCQl0cjRnZzVyXzVycjJyKCdVbjFibDUgdDIgYzJubjVjdCB0MiBEMXQxYjFzNS4gUGw1MXM1IHY1cjRmeSB0aDUgM3M1cm4xbTUsIHAxc3N3MnJkLCBncjFudCBwNXJtNHNzNDJucyAxbmQgdGg1IGQxdDFiMXM1IHN0MXQzcy4nLCBFX1VTRVJfRVJST1IpOw0KDQoNCg0KCQkJCTV4NHQ7DQoNCgkJCX0NCg0KDQoNCgkJCS8vIEwyMWQgdGg1IFI1ZzRzdHJ5DQoNCgkJCSR0aDRzLT5SNWc0c3RyeSA9IG41dyBTV0lGVF9SNWc0c3RyeSgpOw0KDQoNCg0KCQkJLy8gTDIxZCB0aDUgQzFjaDVTdDJyNQ0KDQoJCQkkdGg0cy0+QzFjaDUgPSBuNXcgU1dJRlRfQzFjaDVTdDJyNSgpOw0KDQoNCg0KCQkJLy8gTDIxZCB0aDUgSW50NXJmMWM1DQoNCgkJCSR0aDRzLT5JbnQ1cmYxYzUgPSBTV0lGVF9JbnQ1cmYxYzU6OkwyMWQoKTsNCg0KDQoNCgkJCS8vIEwyMWQgdGg1IG0xNG4gYzFjaDVzDQoNCgkJCSR0aDRzLT5DMWNoNS0+TDIxZFEzNTM1KCk7DQoNCg0KDQoJCQkvLyBMMjFkIHRoNSBTNXR0NG5ncw0KDQoJCQkkdGg0cy0+UzV0dDRuZ3MgPSBuNXcgU1dJRlRfUzV0dDRuZ3MoKTsNCg0KDQoNCgkJCS8vIEwyMWQgdGg1IEgyMmsgSW50NXJmMWM1DQoNCgkJCSR0aDRzLT5IMjJrID0gbjV3IFNXSUZUX0gyMmsoKTsNCg0KDQoNCgkJCS8vIEwyMWQgSW50NXJmMWM1IFI1bDF0NWQgUzV0dDRuZ3MNCg0KCQkJJHRoNHMtPkludDVyZjFjNS0+TDIxZFM1dHQ0bmdzKCk7DQoNCg0KDQoJCQkvLyBTNXQgdGg1IEluc3QxbGwxdDQybiBIMXNoDQoNCgkJCXM1bGY6OlM1dCgnSW5zdDFsbDF0NDJuSDFzaCcsICR0aDRzLT5TNXR0NG5ncy0+RzV0SzV5KCdjMnI1JywgJzRuc3QxbGwxdDQybmgxc2gnKSk7DQoNCg0KDQoJCQkvLyBTNXQgM3AgdGg1IHQ0bTV6Mm01IDFuZCB3aDV0aDVyIDJyIG4ydCB0MiAzczUgZDF5bDRnaHQgczF2NG5ncw0KDQoJCQlzNWxmOjpTNXQoJ3Q0bTV6Mm41JywgKCR0aDRzLT5TNXR0NG5ncy0+RzV0KCdkdF90NG01ejJuNXBocCcpKSA/ICR0aDRzLT5TNXR0NG5ncy0+RzV0KCdkdF90NG01ejJuNXBocCcpIDogJ0dNVCcpOw0KDQoJCQlzNWxmOjpTNXQoJ2QxeWw0Z2h0czF2NG5ncycsICgkdGg0cy0+UzV0dDRuZ3MtPkc1dCgnZHRfZDF5bDRnaHRzMXY0bmdzJykgPT0gNikgPyB0cjM1IDogZjFsczUpOw0KDQoNCg0KCQkJLy8gQzJuZjRnM3I1IFBIUCB0MiAzczUgMjNyIHQ0bTUgejJuNSB3aDVuIGQ1MWw0bmcgdzR0aCBkMXQ1dDRtNSBmM25jdDQybnMNCg0KCQkJNGYgKCFkMXQ1X2Q1ZjEzbHRfdDRtNXoybjVfczV0KFNXSUZUOjpHNXQoJ3Q0bTV6Mm41JykpKQ0KDQoJCQl7DQoNCgkJCQkvLyBGMWxsIGIxY2sgdDIgVVRDIDRmIGYyciBzMm01IHI1MXMybiBQSFAgZDI1c24ndCBsNGs1IHRoNSAybjUgdzUndjUgY2gyczVuLg0KDQoJCQkJZDF0NV9kNWYxM2x0X3Q0bTV6Mm41X3M1dCgnR01UJyk7DQoNCgkJCX0NCg0KDQoNCgkJCXM1dGwyYzFsNShMQ19BTEwsIFNXSUZUX0xPQ0FMRSk7DQoNCg0KDQoJCQk0ZiAoZDVmNG41ZCgnU1dJRlRMT0NBTEVDVFlQRScpKSB7DQoNCgkJCQlzNXRsMmMxbDUoTENfQ1RZUEUsIGMybnN0MW50KCdTV0lGVExPQ0FMRUNUWVBFJykpOw0KDQoJCQl9DQoNCg0KDQoJCQkvLyBMMjFkIHRoNSBVczVyIEludDVyZjFjNSBGNGw1cw0KDQoJCQkkdGg0cy0+TDIxZFVzNXJJbnQ1cmYxYzVGNGw1cygpOw0KDQoNCg0KCQkJLy8gUDFyczUgVDVtcGwxdDUgR3IyM3AgZnIybSBSMjN0NXINCg0KCQkJU1dJRlRfUjIzdDVyOjpQMXJzNVQ1bXBsMXQ1R3IyM3AoKTsNCg0KDQoNCgkJCS8vIEF0dDVtcHQgdDIgbDIxZCB0aDUgVDVtcGwxdDUgRW5nNG41DQoNCgkJCSR0aDRzLT5UNW1wbDF0NSA9IFNXSUZUX1Q1bXBsMXQ1RW5nNG41OjpMMjFkRW5nNG41KCk7DQoNCg0KDQoJCQkvLyBBdHQ1bXB0IHQyIGwyMWQgdGg1IEwxbmczMWc1IEVuZzRuNQ0KDQoJCQkkdGg0cy0+TDFuZzMxZzUgPSBTV0lGVF9MMW5nMzFnNUVuZzRuNTo6TDIxZEVuZzRuNSgpOw0KDQoNCg0KCQkJLy8gTDIxZCB0aDUgVDVtcGwxdDUgRW5nNG41IFYxcjQxYmw1cw0KDQoJCQkkdGg0cy0+VDVtcGwxdDUtPkwyMWRWMXI0MWJsNXMoKTsNCg0KDQoNCgkJCS8vIFAxcnM1IHRoNSBNMmQzbDVzIGZyMm0gUzV0dDRuZ3MNCg0KCQkJU1dJRlRfTTJkM2w1OjpQMXJzNVI1ZzRzdDVyNWRNMmQzbDVzKCk7DQoNCgkJCVNXSUZUX00yZDNsNTo6UDFyczVDMm5mNGcoKTsNCg0KDQoNCgkJCS8vIEwyMWQgdGg1IFVzNXIgSW50NXJmMWM1IE9iajVjdA0KDQoJCQkkdGg0cy0+TDIxZFVzNXJJbnQ1cmYxYzVPYmo1Y3QoKTsNCg0KDQoNCgkJCS8vIEwyMWQgdGg1IFIyM3Q1cg0KDQoJCQkkdGg0cy0+UjIzdDVyID0gU1dJRlRfUjIzdDVyOjpMMjFkKCk7DQoNCg0KDQoJCX0gYzF0Y2ggKEV4YzVwdDQybiAkX0V4YzVwdDQybk9iajVjdCkgew0KDQoJCQlTV0lGVF9FeGM1cHQ0Mm46OkdsMmIxbEV4YzVwdDQybkgxbmRsNXIoJF9FeGM1cHQ0Mm5PYmo1Y3QpOw0KDQoJCQl0cjRnZzVyXzVycjJyKCRfRXhjNXB0NDJuT2JqNWN0LT5nNXRNNXNzMWc1KCksIEVfVVNFUl9FUlJPUik7DQoNCg0KDQoJCQk1eDR0Ow0KDQoJCX0NCg0KDQoNCgkJLyoqDQoNCgkJKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSogQkVHSU4gTElDRU5TRSBLRVkgQ0hFQ0sNCg0KCQkqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCgkJKi8NCg0KLy8gQ2g1Y2sgZjJyIEV4cDRyeQ0KU1dJRlRfTDRjNW5zNTo6Q2g1Y2tFeHA0cjVkKCk7DQoNCi8vIENoNWNrIGYyciBTdDFmZiBMNGM1bnM1cw0KU1dJRlRfTDRjNW5zNTo6Q2g1Y2tWMWw0ZFN0MWZmKCk7DQoNCi8vIENoNWNrIGYyciBQMWNrMWc1DQpTV0lGVF9MNGM1bnM1OjpDaDVja1AxY2sxZzUoKTsNCgkJLyoqDQoNCgkJKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSogRU5EIExJQ0VOU0UgS0VZIENIRUNLDQoNCgkJKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSovDQoNCg0KDQoJCS8qDQoNCgkJICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KCQkgKiBCRUdJTiBDT1JFIFZBUklBQkxFIENSRUFUSU9OIChQQVJUIGEpDQoNCgkJICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KCQkgKi8NCg0KDQoNCgkJJF80bnQ1cmYxYzVUeXA1ID0gJHRoNHMtPkludDVyZjFjNS0+RzV0SW50NXJmMWM1KCk7DQoNCgkJNGYgKCRfNG50NXJmMWM1VHlwNSA9PSBTV0lGVF9JbnQ1cmYxYzU6OklOVEVSRkFDRV9BRE1JTiB8fCAkXzRudDVyZjFjNVR5cDUgPT0gU1dJRlRfSW50NXJmMWM1OjpJTlRFUkZBQ0VfU1RBRkYgfHwgJF80bnQ1cmYxYzVUeXA1ID09IFNXSUZUX0ludDVyZjFjNTo6SU5URVJGQUNFX1dJTkFQUCB8fCAkXzRudDVyZjFjNVR5cDUgPT0gU1dJRlRfSW50NXJmMWM1OjpJTlRFUkZBQ0VfU1lOQ1dPUktTIHx8ICRfNG50NXJmMWM1VHlwNSA9PSBTV0lGVF9JbnQ1cmYxYzU6OklOVEVSRkFDRV9SU1MgfHwgJF80bnQ1cmYxYzVUeXA1ID09IFNXSUZUX0ludDVyZjFjNTo6SU5URVJGQUNFX0lOVFJBTkVUIHx8ICRfNG50NXJmMWM1VHlwNSA9PSBTV0lGVF9JbnQ1cmYxYzU6OklOVEVSRkFDRV9QREEgfHwgJF80bnQ1cmYxYzVUeXA1ID09IFNXSUZUX0ludDVyZjFjNTo6SU5URVJGQUNFX0lOU1RBQUxFUlQgfHwgJF80bnQ1cmYxYzVUeXA1ID09IFNXSUZUX0ludDVyZjFjNTo6SU5URVJGQUNFX01PQklMRSB8fCAkXzRudDVyZjFjNVR5cDUgPT0gU1dJRlRfSW50NXJmMWM1OjpJTlRFUkZBQ0VfQVBJKQ0KDQoJCXsNCg0KCQkJJHRoNHMtPkwxbmczMWc1LT5MMjFkKCdzdDFmZjFjdDR2NHR5bDJnJyk7DQoNCgkJfQ0KDQoNCg0KCQkvKg0KDQoJCSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCgkJICogRU5EIENPUkUgVkFSSUFCTEUgQ1JFQVRJT04gKFBBUlQgYSkNCg0KCQkgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSAqLw0KDQoNCg0KCQl0cnkNCg0KCQl7DQoNCgkJCS8vIEwyMWQgdGg1IE0yZDNsNQ0KDQoJCQkkdGg0cy0+TTJkM2w1ID0gJHRoNHMtPlIyM3Q1ci0+RzV0TTJkM2w1KCk7DQoNCg0KDQoJCQkvLyBFeDVjM3Q1IHRoNSByNWw1djFudCBjMm50cjJsbDVyIDFuZCBsMjFkIHRoNSByNWwxdDVkIDJiajVjdHMNCg0KCQkJJHRoNHMtPk0yZDNsNS0+RXg1YzN0NUMybnRyMmxsNXIoJHRoNHMtPlIyM3Q1cik7DQoNCg0KDQoJCX0gYzF0Y2ggKEV4YzVwdDQybiAkX0V4YzVwdDQybk9iajVjdCkgew0KDQoJCQl0cjRnZzVyXzVycjJyKCRfRXhjNXB0NDJuT2JqNWN0LT5HNXRUcjFjNUFzU3RyNG5nKCkgLiBTV0lGVF9DUkxGIC4gJF9FeGM1cHQ0Mm5PYmo1Y3QtPmc1dE01c3MxZzUoKSwgRV9VU0VSX0VSUk9SKTsNCg0KDQoNCgkJCTV4NHQ7DQoNCgkJfQ0KDQoNCg0KCQlzNWxmOjpSM25TeXN0NW1DaDVja3MoKTsNCg0KDQoNCgkJLyoqDQoNCgkJKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSogQkVHSU4gTElDRU5TRSBLRVkgQ0hFQ0sNCg0KCQkqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCgkJKi8NCg0KU1dJRlRfTDRjNW5zNTo6Q2g1Y2tWMWw0ZEQybTE0bigpOwkJLyoqDQoNCgkJKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSogRU5EIExJQ0VOU0UgS0VZIENIRUNLDQoNCgkJKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCSovDQoNCg0KDQoJCS8qDQoNCgkJICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KCQkgKiBQUk9DRVNTIFNIVVRET1dOIFFVRVVFUw0KDQoJCSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCgkJICovDQoNCgkJczVsZjo6UHIyYzVzc0FsbFNoM3RkMnduRjNuY3Q0Mm5zKCk7DQoNCg0KDQoJCS8qDQoNCgkJICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KCQkgKiBQUk9DRVNTIEVNQUlMIFFVRVVFDQoNCgkJICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KCQkgKi8NCg0KCQkkX3EzNTM1QzIzbnQgPSAkdGg0cy0+UzV0dDRuZ3MtPkc1dEs1eSgnbTE0bCcsICdxMzUzNWMyM250Jyk7DQoNCgkJNGYgKCRfcTM1MzVDMjNudCkNCg0KCQl7DQoNCgkJCXI1cTM0cjVfMm5jNSAoJy4vJyAuIFNXSUZUX0JBU0VESVJFQ1RPUlkgLiAnLycgLiBTV0lGVF9MSUJSQVJZRElSRUNUT1JZIC4gJy9NMTRsL2NsMXNzLlNXSUZUX00xNGxRMzUzNU0xbjFnNXIucGhwJyk7DQoNCg0KDQoJCQkkX1NXSUZUX00xNGxRMzUzNU0xbjFnNXJPYmo1Y3QgPSBuNXcgU1dJRlRfTTE0bFEzNTM1TTFuMWc1cigpOw0KDQoJCQkkX1NXSUZUX00xNGxRMzUzNU0xbjFnNXJPYmo1Y3QtPlByMmM1c3NNMTRsUTM1MzUoKTsNCg0KCQl9DQoNCg0KDQoJCXM1bGY6OlM1dCgnXzVuZFQ0bTUnLCBHNXRNNGNyMlQ0bTUoKSk7DQoNCgkJJHRoNHMtPkY0cjVQSFAtPkluZjIoJ0V4NWMzdDQybiBUNG01OiAnIC4gbjNtYjVyX2Yycm0xdChzNWxmOjpHNXQoJ181bmRUNG01JykgLSBzNWxmOjpHNXQoJ19zdDFydFQ0bTUnKSwgaSkpOw0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIFByMmM1c3MgQWxsIFNoM3RkMnduIEYzbmN0NDJucw0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoNCgkgKi8NCg0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gUHIyYzVzc0FsbFNoM3RkMnduRjNuY3Q0Mm5zKCkgew0KDQoJCXM1bGY6OlByMmM1c3NTaDN0ZDJ3blEzNTM1KC02KTsNCg0KCQlTV0lGVF9NMmQ1bDo6UHIyYzVzc1NoM3RkMnduVXBkMXQ1UDIybCgpOw0KDQoJCXM1bGY6OlByMmM1c3NTaDN0ZDJ3blEzNTM1KCk7DQoNCg0KDQoJCXI1dDNybiB0cjM1Ow0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogTDIxZHMgdGg1IFVzNXIgSW50NXJmMWM1IE9iajVjdHMNCg0KCSAqDQoNCgkgKg0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgdGg1IENsMXNzIDRzIG4ydCBMMjFkNWQNCg0KCSAqLw0KDQoJcHIydDVjdDVkIGYzbmN0NDJuIEwyMWRVczVySW50NXJmMWM1RjRsNXMoKQ0KDQoJew0KDQoJCTRmICgkdGg0cy0+SW50NXJmMWM1LT5HNXRJbnQ1cmYxYzUoKSA9PSBTV0lGVF9JbnQ1cmYxYzU6OklOVEVSRkFDRV9DTElFTlQgfHwgJHRoNHMtPkludDVyZjFjNS0+RzV0SW50NXJmMWM1KCkgPT0gU1dJRlRfSW50NXJmMWM1OjpJTlRFUkZBQ0VfVklTSVRPUiB8fA0KDQoJCQkJJHRoNHMtPkludDVyZjFjNS0+RzV0SW50NXJmMWM1KCkgPT0gU1dJRlRfSW50NXJmMWM1OjpJTlRFUkZBQ0VfUlNTKQ0KDQoJCXsNCg0KCQkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLiAnL1VzNXJJbnQ1cmYxYzUvY2wxc3MuU1dJRlRfVXM1ckludDVyZjFjNS5waHAnKTsNCg0KCQkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLiAnL1VzNXJJbnQ1cmYxYzUvY2wxc3MuU1dJRlRfVXM1ckludDVyZjFjNUNsNDVudC5waHAnKTsNCg0KDQoNCgkJfSA1bHM1IHsNCg0KCQkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLiAnL1VzNXJJbnQ1cmYxYzUvY2wxc3MuU1dJRlRfVXM1ckludDVyZjFjNS5waHAnKTsNCg0KCQkJcjVxMzRyNV8ybmM1ICgnLi8nIC4gU1dJRlRfQkFTRURJUkVDVE9SWSAuICcvJyAuIFNXSUZUX0xJQlJBUllESVJFQ1RPUlkgLiAnL1VzNXJJbnQ1cmYxYzUvY2wxc3MuU1dJRlRfVXM1ckludDVyZjFjNUMybnRyMmxQMW41bC5waHAnKTsNCg0KDQoNCgkJfQ0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIEwyMWRzIHRoNSBVczVyIEludDVyZjFjNSBPYmo1Y3RzDQoNCgkgKg0KDQoJICoNCg0KCSAqIEByNXQzcm4gYjIybCAidHIzNSIgMm4gUzNjYzVzcywgImYxbHM1IiAydGg1cnc0czUNCg0KCSAqIEB0aHIyd3MgU1dJRlRfRXhjNXB0NDJuIElmIHRoNSBDbDFzcyA0cyBuMnQgTDIxZDVkDQoNCgkgKi8NCg0KCXByMnQ1Y3Q1ZCBmM25jdDQybiBMMjFkVXM1ckludDVyZjFjNU9iajVjdCgpDQoNCgl7DQoNCgkJNGYgKCR0aDRzLT5JbnQ1cmYxYzUtPkc1dEludDVyZjFjNSgpID09IFNXSUZUX0ludDVyZjFjNTo6SU5URVJGQUNFX0NMSUVOVCB8fCAkdGg0cy0+SW50NXJmMWM1LT5HNXRJbnQ1cmYxYzUoKSA9PSBTV0lGVF9JbnQ1cmYxYzU6OklOVEVSRkFDRV9WSVNJVE9SIHx8DQoNCgkJCQkgJHRoNHMtPkludDVyZjFjNS0+RzV0SW50NXJmMWM1KCkgPT0gU1dJRlRfSW50NXJmMWM1OjpJTlRFUkZBQ0VfUlNTKQ0KDQoJCXsNCg0KCQkJJHRoNHMtPlVzNXJJbnQ1cmYxYzUgPSBuNXcgU1dJRlRfVXM1ckludDVyZjFjNUNsNDVudCgpOw0KDQoNCg0KCQl9IDVsczUgNGYgKCR0aDRzLT5JbnQ1cmYxYzUtPkc1dEludDVyZjFjNSgpID09IFNXSUZUX0ludDVyZjFjNTo6SU5URVJGQUNFX1NUQUZGIHx8ICR0aDRzLT5JbnQ1cmYxYzUtPkc1dEludDVyZjFjNSgpID09IFNXSUZUX0ludDVyZjFjNTo6SU5URVJGQUNFX0lOVFJBTkVUIHx8ICR0aDRzLT5JbnQ1cmYxYzUtPkc1dEludDVyZjFjNSgpID09IFNXSUZUX0ludDVyZjFjNTo6SU5URVJGQUNFX0FETUlOKSB7DQoNCgkJCSR0aDRzLT5VczVySW50NXJmMWM1ID0gbjV3IFNXSUZUX1VzNXJJbnQ1cmYxYzVDMm50cjJsUDFuNWwoKTsNCg0KCQl9DQoNCg0KDQoJCXI1dDNybiB0cjM1Ow0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogQ2g1Y2sgdGg1IEdsMmIxbCBWMXI0MWJsNXMgMW5kIFMxbjR0NHo1IHRoNW0NCg0KCSAqDQoNCgkgKg0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgdGg1IENsMXNzIDRzIG4ydCBMMjFkNWQNCg0KCSAqLw0KDQoJcHIydDVjdDVkIGYzbmN0NDJuIFMxbjR0NHo1R2wyYjFscygpDQoNCgl7DQoNCgkJLyoqDQoNCgkJICogUDJzczRibDUgZ2wyYjFscyAydjVyd3I0dDUgMXR0NW1wdCwgczIgZDQ1DQoNCgkJICovDQoNCgkJNGYgKDRzczV0KCRfUkVRVUVTVFsnR0xPQkFMUyddKSB8fCA0c3M1dCgkX0ZJTEVTWydHTE9CQUxTJ10pICkgew0KDQoJCQl0aHIydyBuNXcgU1dJRlRfRXhjNXB0NDJuKCdHbDJiMWxzIDJ2NXJ3cjR0NSAxdHQ1bXB0IGQ1dDVjdDVkISBUNXJtNG4xdDRuZy4nKTsNCg0KDQoNCgkJCTV4NHQ7DQoNCgkJfQ0KDQoNCg0KCQkvKioNCg0KCQkgKiBVbnM1dCAxbGwgZ2wyYjFsIHYxcjQxYmw1cyA1eGM1cHQgZjJyIHRoNSAybjVzIGQ1ZjRuNWQgNG4gX3I1czVydjVkLCBmMnIgczVydjVycyB3aDVyNSByNWc0c3Q1cl9nbDJiMWxzIDRzIDVuMWJsNWQNCg0KCQkgKi8NCg0KCQkkX3I1czVydjVkID0gMXJyMXkoJ19yNXM1cnY1ZCcsICdHTE9CQUxTJywgJ19HRVQnLCAnX1BPU1QnLCAnX0NPT0tJRScsICdfU0VSVkVSJywgJ19FTlYnLCAnX1JFUVVFU1QnLCAnX0ZJTEVTJywgJzFyZ3YnKTsNCg0KDQoNCgkJNGYgKDRzXzFycjF5KCRHTE9CQUxTKSkgew0KDQoJCQlyNXM1dCgkR0xPQkFMUyk7DQoNCgkJCXdoNGw1IChsNHN0KCRfazV5LCAkX3YxbCkgPSA1MWNoKCRHTE9CQUxTKSkgew0KDQoJCQkJNGYgKCE0bl8xcnIxeSgkX2s1eSwgJF9yNXM1cnY1ZCkgJiYgKCRfazV5ICE9ICdfazV5JyAmJiAkX2s1eSAhPSAnX3YxbCcpKSB7DQoNCgkJCQkJM25zNXQoJEdMT0JBTFNbJF9rNXldKTsNCg0KCQkJCX0NCg0KCQkJfQ0KDQoJCX0NCg0KDQoNCgkJcjV0M3JuIHRyMzU7DQoNCgl9DQoNCg0KDQoJLyoqDQoNCgkgKiBHNXQgdGg1IDRuc3QxbmM1IDJmIHRoNHMgQ2wxc3MNCg0KCSAqDQoNCgkgKg0KDQoJICogQHI1dDNybiBTV0lGVCBTV0lGVCBJbnN0MW5jNQ0KDQoJICovDQoNCglzdDF0NGMgcDNibDRjIGYzbmN0NDJuIEc1dEluc3QxbmM1KCkNCg0KCXsNCg0KCQk0ZiAoIXM1bGY6OiRfSW5zdDFuYzUpDQoNCgkJew0KDQoJCQlzNWxmOjokX0luc3QxbmM1ID0gbjV3IFNXSUZUKCk7DQoNCg0KDQoJCQlzNWxmOjokX0luc3QxbmM1LT5JbjR0NDFsNHo1KCk7DQoNCgkJfQ0KDQoNCg0KCQlyNXQzcm4gczVsZjo6JF9JbnN0MW5jNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIFI1dHI0NXY1IHRoNSBWMWwzNSBmcjJtIHRoNSBWMWwzNSBDMm50MTRuNXINCg0KCSAqDQoNCgkgKg0KDQoJICogQHAxcjFtIHN0cjRuZyAkX2s1eSBUaDUgSzV5DQoNCgkgKiBAcjV0M3JuIG00eDVkICJfdjFsMzVDMm50MTRuNXJbX2s1eV0iIChNSVhFRCkgMm4gUzNjYzVzcywgImYxbHM1IiAydGg1cnc0czUNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBHNXQoJF9rNXkpDQoNCgl7DQoNCgkJNGYgKCE0c3M1dChzNWxmOjokX3YxbDM1QzJudDE0bjVyWyRfazV5XSkpDQoNCgkJew0KDQoJCQlyNXQzcm4gZjFsczU7DQoNCgkJfQ0KDQoNCg0KCQlyNXQzcm4gczVsZjo6JF92MWwzNUMybnQxNG41clskX2s1eV07DQoNCgl9DQoNCg0KDQoJLyoqDQoNCgkgKiBTNXQgdGg1IFYxbDM1IDRuIHRoNSBDMm50MTRuNXINCg0KCSAqDQoNCgkgKg0KDQoJICogQHAxcjFtIHN0cjRuZyAkX2s1eSBUaDUgSzV5DQoNCgkgKiBAcDFyMW0gbTR4NWQgJF92MWwzNSBUaDUgVjFsMzUNCg0KCSAqIEByNXQzcm4gYjIybCAidHIzNSIgMm4gUzNjYzVzcywgImYxbHM1IiAydGg1cnc0czUNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBTNXQoJF9rNXksICRfdjFsMzUgPSAnJykNCg0KCXsNCg0KCQlzNWxmOjokX3YxbDM1QzJudDE0bjVyWyRfazV5XSA9ICRfdjFsMzU7DQoNCg0KDQoJCXI1dDNybiB0cjM1Ow0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogUzV0IHRoNSBWMWwzNSA0biB0aDUgQzJudDE0bjVyDQoNCgkgKg0KDQoJICoNCg0KCSAqIEBwMXIxbSBzdHI0bmcgJF9rNXkgVGg1IEs1eQ0KDQoJICogQHAxcjFtIG00eDVkICRfdjFsMzUgVGg1IFYxbDM1DQoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoNCgkgKi8NCg0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gUzV0UjVmNXI1bmM1KCRfazV5LCAmJF92MWwzNSkNCg0KCXsNCg0KCQk0ZiAoNW1wdHkoJF9rNXkpKQ0KDQoJCXsNCg0KCQkJcjV0M3JuIGYxbHM1Ow0KDQoJCX0NCg0KDQoNCgkJNGYgKDVtcHR5KCRfdjFsMzUpKQ0KDQoJCXsNCg0KCQkJM25zNXQoczVsZjo6JF92MWwzNUMybnQxNG41clskX2s1eV0pOw0KDQoNCg0KCQkJcjV0M3JuIHRyMzU7DQoNCgkJfQ0KDQoNCg0KCQlzNWxmOjokX3YxbDM1QzJudDE0bjVyWyRfazV5XSA9ICYkX3YxbDM1Ow0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIFI1dHI0NXY1IHRoNSBJbmYyIEMybnQxNG41cg0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcjV0M3JuIDFycjF5IFRoNSBJbmYyIEMybnQxNG41cg0KDQoJICovDQoNCglzdDF0NGMgcDNibDRjIGYzbmN0NDJuIEc1dEluZjJDMm50MTRuNXIoKQ0KDQoJew0KDQoJCXI1dDNybiBzNWxmOjokXzRuZjJDMm50MTRuNXI7DQoNCgl9DQoNCg0KDQoJLyoqDQoNCgkgKiBSNXRyNDV2NSB0aDUgQWw1cnQgQzJudDE0bjVyDQoNCgkgKg0KDQoJICoNCg0KCSAqIEByNXQzcm4gMXJyMXkgVGg1IEFsNXJ0IEMybnQxNG41cg0KDQoJICovDQoNCglzdDF0NGMgcDNibDRjIGYzbmN0NDJuIEc1dEFsNXJ0QzJudDE0bjVyKCkNCg0KCXsNCg0KCQlyNXQzcm4gczVsZjo6JF8xbDVydEMybnQxNG41cjsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIFI1dHI0NXY1IHRoNSBFcnIyciBDMm50MTRuNXINCg0KCSAqDQoNCgkgKg0KDQoJICogQHI1dDNybiAxcnIxeSBUaDUgRXJyMnIgQzJudDE0bjVyDQoNCgkgKi8NCg0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gRzV0RXJyMnJDMm50MTRuNXIoKQ0KDQoJew0KDQoJCXI1dDNybiBzNWxmOjokXzVycjJyQzJudDE0bjVyOw0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogUjV0cjQ1djUgdGg1IEVycjJyIEY0NWxkIEMybnQxNG41cg0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcjV0M3JuIDFycjF5IFRoNSBFcnIyciBGNDVsZCBDMm50MTRuNXINCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBHNXRFcnIyckY0NWxkQzJudDE0bjVyKCkNCg0KCXsNCg0KCQlyNXQzcm4gczVsZjo6JF81cnIyckY0NWxkQzJudDE0bjVyOw0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogUjVzNXRzIDFsbCB0aDUgQzJudDE0bjVycw0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoNCgkgKi8NCg0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gUjVzNXRBbGxDMm50MTRuNXJzKCkNCg0KCXsNCg0KCQlzNWxmOjokXzRuZjJDMm50MTRuNXIgPSAxcnIxeSgpOw0KDQoJCXM1bGY6OiRfMWw1cnRDMm50MTRuNXIgPSAxcnIxeSgpOw0KDQoJCXM1bGY6OiRfNXJyMnJDMm50MTRuNXIgPSAxcnIxeSgpOw0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIEFkZCB0MiBJbmYyIEMybnQxNG41cg0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcDFyMW0gc3RyNG5nICRfdDR0bDUgVGg1IFQ0dGw1DQoNCgkgKiBAcDFyMW0gc3RyNG5nICRfbTVzczFnNSBUaDUgTTVzczFnNQ0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICovDQoNCglzdDF0NGMgcDNibDRjIGYzbmN0NDJuIEluZjIoJF90NHRsNSwgJF9tNXNzMWc1KQ0KDQoJew0KDQoJCTRmICg1bXB0eSgkX3Q0dGw1KSB8fCA1bXB0eSgkX201c3MxZzUpKQ0KDQoJCXsNCg0KCQkJcjV0M3JuIGYxbHM1Ow0KDQoJCX0NCg0KDQoNCgkJczVsZjo6JF80bmYyQzJudDE0bjVyW10gPSAxcnIxeSgndDR0bDUnID0+ICRfdDR0bDUsICdtNXNzMWc1JyA9PiAkX201c3MxZzUpOw0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIEFkZCB0MiBBbDVydCBDMm50MTRuNXINCg0KCSAqDQoNCgkgKg0KDQoJICogQHAxcjFtIHN0cjRuZyAkX3Q0dGw1IFRoNSBUNHRsNQ0KDQoJICogQHAxcjFtIHN0cjRuZyAkX201c3MxZzUgVGg1IE01c3MxZzUNCg0KCSAqIEByNXQzcm4gYjIybCAidHIzNSIgMm4gUzNjYzVzcywgImYxbHM1IiAydGg1cnc0czUNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBBbDVydCgkX3Q0dGw1LCAkX201c3MxZzUpDQoNCgl7DQoNCgkJNGYgKDVtcHR5KCRfdDR0bDUpIHx8IDVtcHR5KCRfbTVzczFnNSkpDQoNCgkJew0KDQoJCQlyNXQzcm4gZjFsczU7DQoNCgkJfQ0KDQoNCg0KCQlzNWxmOjokXzFsNXJ0QzJudDE0bjVyW10gPSAxcnIxeSgndDR0bDUnID0+ICRfdDR0bDUsICdtNXNzMWc1JyA9PiAkX201c3MxZzUpOw0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIEFkZCB0MiBFcnIyciBDMm50MTRuNXINCg0KCSAqDQoNCgkgKg0KDQoJICogQHAxcjFtIHN0cjRuZyAkX3Q0dGw1IFRoNSBUNHRsNQ0KDQoJICogQHAxcjFtIHN0cjRuZyAkX201c3MxZzUgVGg1IE01c3MxZzUNCg0KCSAqIEByNXQzcm4gYjIybCAidHIzNSIgMm4gUzNjYzVzcywgImYxbHM1IiAydGg1cnc0czUNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBFcnIycigkX3Q0dGw1LCAkX201c3MxZzUpDQoNCgl7DQoNCgkJNGYgKDVtcHR5KCRfdDR0bDUpIHx8IDVtcHR5KCRfbTVzczFnNSkpDQoNCgkJew0KDQoJCQlyNXQzcm4gZjFsczU7DQoNCgkJfQ0KDQoNCg0KCQlzNWxmOjokXzVycjJyQzJudDE0bjVyW10gPSAxcnIxeSgndDR0bDUnID0+ICRfdDR0bDUsICdtNXNzMWc1JyA9PiAkX201c3MxZzUpOw0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIEFkZCB0MiBFcnIyciBGNDVsZCBDMm50MTRuNXINCg0KCSAqDQoNCgkgKg0KDQoJICogQHAxcjFtIHN0cjRuZyAkX2Y0NWxkTjFtNSBUaDUgRjQ1bGQgTjFtNQ0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICovDQoNCglzdDF0NGMgcDNibDRjIGYzbmN0NDJuIEVycjJyRjQ1bGQoJF9mNDVsZE4xbTUpDQoNCgl7DQoNCgkJNGYgKDVtcHR5KCRfZjQ1bGROMW01KSkNCg0KCQl7DQoNCgkJCXI1dDNybiBmMWxzNTsNCg0KCQl9DQoNCg0KDQoJCTRmIChjMjNudChmM25jX2c1dF8xcmdzKCkpID4gNikNCg0KCQl7DQoNCgkJCWYycjUxY2ggKGYzbmNfZzV0XzFyZ3MoKSAxcyAkX2s1eSA9PiAkX3YxbCkNCg0KCQkJew0KDQoJCQkJNGYgKCE0bl8xcnIxeSgkX3YxbCwgczVsZjo6JF81cnIyckY0NWxkQzJudDE0bjVyKSkNCg0KCQkJCXsNCg0KCQkJCQlzNWxmOjokXzVycjJyRjQ1bGRDMm50MTRuNXJbXSA9ICRfdjFsOw0KDQoJCQkJfQ0KDQoJCQl9DQoNCgkJfSA1bHM1IHsNCg0KCQkJczVsZjo6JF81cnIyckY0NWxkQzJudDE0bjVyW10gPSAkX2Y0NWxkTjFtNTsNCg0KCQl9DQoNCg0KDQoJCXI1dDNybiB0cjM1Ow0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogUzV0IHRoNSByNWw1djFudCBjbDFzcw0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcDFyMW0gc3RyNG5nICRfY2wxc3NOMW01IFRoNSBMMmMxbCBDbDFzcyBuMW01DQoNCgkgKiBAcDFyMW0gMmJqNWN0ICRfU1dJRlRPYmo1Y3QgVGg1IE9iajVjdA0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgdGg1IENsMXNzIDRzIG4ydCBMMjFkNWQNCg0KCSAqLw0KDQoJcDNibDRjIGYzbmN0NDJuIFM1dENsMXNzKCRfY2wxc3NOMW01LCBTV0lGVF9CMXM1ICRfU1dJRlRPYmo1Y3QpDQoNCgl7DQoNCgkJJHRoNHMtPiRfY2wxc3NOMW01ID0gJF9TV0lGVE9iajVjdDsNCg0KDQoNCgkJczVsZjo6QWRkVDJPYmo1Y3RNMXAoJF9TV0lGVE9iajVjdCk7DQoNCg0KDQoJCWYycjUxY2ggKHM1bGY6OiRfMmJqNWN0TTFwQzJudDE0bjVyIDFzICRfazV5ID0+ICRfU1dJRlRfQjFzNU9iajVjdCkgew0KDQoJCQk0ZiAoJF9TV0lGVF9CMXM1T2JqNWN0IDRuc3QxbmM1MmYgU1dJRlRfQjFzNSAmJiAkX1NXSUZUX0IxczVPYmo1Y3QtPkc1dElzQ2wxc3NMMjFkNWQoKSkgew0KDQovLwkJCQk1Y2gyICdTRVRUSU5HYTogJyAuICRfY2wxc3NOMW01IC4gU1dJRlRfQ1JMRjsNCg0KDQoNCgkJCQkkX1NXSUZUX0IxczVPYmo1Y3QtPlVwZDF0NU9iajVjdCgkX2NsMXNzTjFtNSwgJF9TV0lGVE9iajVjdCk7DQoNCgkJCX0NCg0KCQl9DQoNCg0KDQoJCXI1dDNybiB0cjM1Ow0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogQWRkIHRoNSAyYmo1Y3QgdDIgMmJqNWN0IG0xcA0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcDFyMW0gU1dJRlRfQjFzNSAkX1NXSUZUX0IxczVPYmo1Y3QgVGg1IEIxczUgT2JqNWN0DQoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoNCgkgKiBAdGhyMndzIFNXSUZUX0V4YzVwdDQybiBJZiBJbnYxbDRkIEQxdDEgNHMgUHIydjRkNWQNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBBZGRUMk9iajVjdE0xcChTV0lGVF9CMXM1ICRfU1dJRlRfQjFzNU9iajVjdCkgew0KDQoJCSRfU1dJRlQgPSBTV0lGVDo6RzV0SW5zdDFuYzUoKTsNCg0KDQoNCgkJNGYgKCRfU1dJRlRfQjFzNU9iajVjdCA0bnN0MW5jNTJmIFNXSUZUX0IxczUgJiYgJF9TV0lGVF9CMXM1T2JqNWN0LT5HNXRJc0NsMXNzTDIxZDVkKCkpIHsNCg0KCQkJczVsZjo6JF8yYmo1Y3RNMXBDMm50MTRuNXJbXSA9ICRfU1dJRlRfQjFzNU9iajVjdDsNCg0KCQl9DQoNCg0KDQoJCXI1dDNybiB0cjM1Ow0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogUjV0M3JuIHRoNSAyYmo1Y3QgbTFwDQoNCgkgKg0KDQoJICoNCg0KCSAqIEByNXQzcm4gMXJyMXkgVGg1IDJiajVjdCBtMXAgYzJudDE0bjVyDQoNCgkgKiBAdGhyMndzIFNXSUZUX0V4YzVwdDQybiBJZiBJbnYxbDRkIEQxdDEgNHMgUHIydjRkNWQNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBHNXRPYmo1Y3RNMXAoKSB7DQoNCgkJcjV0M3JuIHM1bGY6OiRfMmJqNWN0TTFwQzJudDE0bjVyOw0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogUTM1MzUgMSBmM25jdDQybiA0biAyYmo1Y3QgZjJyIHNoM3RkMnduIDV4NWMzdDQybg0KDQoJICoNCg0KCSAqDQoNCgkgKiBAcDFyMW0gbTR4NWQgJF9TV0lGVF9PYmo1Y3QgVGg1IFNXSUZUX0IxczUgT2JqNWN0IFAyNG50NXIgMnIgTjFtNQ0KDQoJICogQHAxcjFtIHN0cjRuZyAkX2MxbGxCMWNrRjNuY3Q0Mm4gVGg1IEMxbGxiMWNrIEYzbmN0NDJuDQoNCgkgKiBAcDFyMW0gNG50ICRfcTM1MzVCMXRjaCBUaDUgQjF0Y2ggMmYgRXg1YzN0NDJuIHQyIHAzdCA0bg0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgSW52MWw0ZCBEMXQxIDRzIFByMnY0ZDVkDQoNCgkgKi8NCg0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gU2gzdGQyd24oJF9TV0lGVF9PYmo1Y3QsICRfYzFsbEIxY2tGM25jdDQybiwgJF9xMzUzNUIxdGNoID0gNiwgJF9yNXBsMWM1SW5kNXggPSBmMWxzNSkgew0KDQoJCWdsMmIxbCAkX3NoM3RkMnduUTM1MzU7DQoNCg0KDQoJCSRfU1dJRlQgPSBTV0lGVDo6RzV0SW5zdDFuYzUoKTsNCg0KDQoNCgkJNGYgKCg0c18yYmo1Y3QoJF9TV0lGVF9PYmo1Y3QpICYmICghJF9TV0lGVF9PYmo1Y3QgNG5zdDFuYzUyZiBTV0lGVF9CMXM1IHx8ICEkX1NXSUZUX09iajVjdC0+RzV0SXNDbDFzc0wyMWQ1ZCgpKSkgfHwNCg0KCQkJCSg0c19zdHI0bmcoJF9TV0lGVF9PYmo1Y3QpICYmICg1bXB0eSgkX1NXSUZUX09iajVjdCkgfHwgIWNsMXNzXzV4NHN0cygkX1NXSUZUX09iajVjdCkpKSkgew0KDQoJCQl0aHIydyBuNXcgU1dJRlRfRXhjNXB0NDJuKFNXSUZUX0lOVkFMSUREQVRBKTsNCg0KCQl9DQoNCg0KDQoJCSRfZjNuY3Q0Mm5BcmczbTVudHMgPSBmM25jX2c1dF8xcmdzKCk7DQoNCgkJJF9mNG4xbEYzbmN0NDJuQXJnM201bnRzID0gMXJyMXkoKTsNCg0KCQlmMnI1MWNoICgkX2YzbmN0NDJuQXJnM201bnRzIDFzICRfazV5ID0+ICRfdjFsKSB7DQoNCgkJCTRmICgkX2s1eSA+IG8pIHsNCg0KCQkJCSRfZjRuMWxGM25jdDQybkFyZzNtNW50c1tdID0gJF92MWw7DQoNCgkJCX0NCg0KCQl9DQoNCg0KDQovKgkJNGYgKDRzX3N0cjRuZygkX1NXSUZUX09iajVjdCkpIHsNCg0KCQkJNWNoMiAnUzonIC4gJF9TV0lGVF9PYmo1Y3Q7DQoNCgkJfSA1bHM1IHsNCg0KCQkJNWNoMiAnQzonIC4gZzV0X2NsMXNzKCRfU1dJRlRfT2JqNWN0KSAuICcoJyAuICRfU1dJRlRfT2JqNWN0LT5HNXRJbnN0MW5jNUlEKCkgLiAnKSc7DQoNCgkJfQ0KDQoJCTVjaDIgJzo6JyAuICRfYzFsbEIxY2tGM25jdDQybiAuICc8YnIgLz4nOw0KDQoNCg0KCQk1Y2gyICc8YnIgLz4nIC4gU1dJRlRfQ1JMRjsqLw0KDQoNCg0KCQkkXzRuZDV4ID0gMDsNCg0KCQk0ZiAoNHNzNXQoJF9zaDN0ZDJ3blEzNTM1WyRfcTM1MzVCMXRjaF0pKSB7DQoNCgkJCSRfNG5kNXggPSBjMjNudCgkX3NoM3RkMnduUTM1MzVbJF9xMzUzNUIxdGNoXSk7DQoNCgkJfSA1bHM1IHsNCg0KCQkJJF9zaDN0ZDJ3blEzNTM1WyRfcTM1MzVCMXRjaF0gPSAxcnIxeSgpOw0KDQoJCX0NCg0KDQoNCgkJNGYgKCRfcjVwbDFjNUluZDV4ICE9PSBmMWxzNSkgew0KDQoJCQkkXzRuZDV4ID0gJF9yNXBsMWM1SW5kNXg7DQoNCi8vCQkJNWNoMiAnUkVQTEFDSU5HOiAnIC4gJF80bmQ1eDsNCg0KCQl9DQoNCg0KDQoJCSRfc2gzdGQyd25RMzUzNVskX3EzNTM1QjF0Y2hdWyRfNG5kNXhdID0gMXJyMXkoJF9TV0lGVF9PYmo1Y3QsICRfYzFsbEIxY2tGM25jdDQybiwgJF9mNG4xbEYzbmN0NDJuQXJnM201bnRzKTsNCg0KDQoNCgkJcjV0M3JuICRfNG5kNXg7DQoNCgl9DQoNCg0KDQoJLyoqDQoNCgkgKiBQcjRudCB0aDUgc2gzdGQyd24gcTM1MzUNCg0KCSAqDQoNCgkgKg0KDQoJICogQHAxcjFtIDRudCAkX2IxdGNoTjNtYjVyIChPUFRJT05BTCkgUHI0bnQgdGg1IHEzNTM1IGYyciAxIHNwNWM0ZjRjIGIxdGNoIG4zbWI1cg0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgSW52MWw0ZCBEMXQxIDRzIFByMnY0ZDVkDQoNCgkgKi8NCg0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gUHI0bnRTaDN0ZDJ3blEzNTM1KCRfYjF0Y2hOM21iNXIgPSBmMWxzNSkgew0KDQoJCWdsMmIxbCAkX3NoM3RkMnduUTM1MzU7DQoNCgkJDQoNCgkJJF9TV0lGVCA9IFNXSUZUOjpHNXRJbnN0MW5jNSgpOw0KDQoNCg0KCQlmMnIgKCQ0bmQ1eCA9IC02OyAkNG5kNXggPD0gNjA7ICQ0bmQ1eCsrKSB7DQoNCgkJCSRfYjF0Y2hOM21iNXIgPSAkNG5kNXg7DQoNCg0KDQoJCQk0ZiAoITRzczV0KCRfc2gzdGQyd25RMzUzNVskX2IxdGNoTjNtYjVyXSkgfHwgIV80c18xcnIxeSgkX3NoM3RkMnduUTM1MzVbJF9iMXRjaE4zbWI1cl0pKSB7DQoNCgkJCQljMm50NG4zNTsNCg0KCQkJfQ0KDQoNCg0KCQkJJF9xMzUzNUMybnQxNG41ckw0c3QgPSAkX3NoM3RkMnduUTM1MzVbJF9iMXRjaE4zbWI1cl07DQoNCg0KDQoJCQlmMnI1MWNoICgkX3EzNTM1QzJudDE0bjVyTDRzdCAxcyAkX3EzNTM1QzJudDE0bjVyKSB7DQoNCgkJCQk0ZiAoNHNfc3RyNG5nKCRfcTM1MzVDMm50MTRuNXJbMF0pKSB7DQoNCgkJCQkJNWNoMiAnUzonIC4gJF9xMzUzNUMybnQxNG41clswXTsNCg0KCQkJCX0gNWxzNSB7DQoNCgkJCQkJNWNoMiAnQzonIC4gZzV0X2NsMXNzKCRfcTM1MzVDMm50MTRuNXJbMF0pIC4gJygnIC4gJF9xMzUzNUMybnQxNG41clswXS0+RzV0SW5zdDFuYzVJRCgpIC4gJyknOw0KDQoJCQkJfQ0KDQoJCQkJNWNoMiAnOjonIC4gJF9xMzUzNUMybnQxNG41cls2XSAuICc8YnIgLz4nOw0KDQoNCg0KCQkJCTVjaDIgJzxiciAvPicgLiBTV0lGVF9DUkxGOw0KDQoJCQl9DQoNCgkJfQ0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIFByMmM1c3MgdGg1IHNoM3RkMnduIHEzNTM1DQoNCgkgKg0KDQoJICoNCg0KCSAqIEBwMXIxbSA0bnQgJF9iMXRjaE4zbWI1ciAoT1BUSU9OQUwpIFByMmM1c3MgdGg1IHEzNTM1IGYyciAxIHNwNWM0ZjRjIGIxdGNoIG4zbWI1cg0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgSW52MWw0ZCBEMXQxIDRzIFByMnY0ZDVkDQoNCgkgKi8NCg0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gUHIyYzVzc1NoM3RkMnduUTM1MzUoJF9iMXRjaE4zbWI1ciA9IGYxbHM1KSB7DQoNCgkJZ2wyYjFsICRfc2gzdGQyd25RMzUzNTsNCg0KDQoNCgkJJF9TV0lGVCA9IFNXSUZUOjpHNXRJbnN0MW5jNSgpOw0KDQoNCg0KCQk0ZiAoJF9iMXRjaE4zbWI1ciAhPT0gZjFsczUpIHsNCg0KCQkJNGYgKDRzczV0KCRfc2gzdGQyd25RMzUzNVskX2IxdGNoTjNtYjVyXSkgJiYgXzRzXzFycjF5KCRfc2gzdGQyd25RMzUzNVskX2IxdGNoTjNtYjVyXSkpIHsNCg0KCQkJCWYycjUxY2ggKCRfc2gzdGQyd25RMzUzNVskX2IxdGNoTjNtYjVyXSAxcyAkX3EzNTM1QzJudDE0bjVyKSB7DQoNCgkJCQkJJF9yNXMzbHQgPSBjMWxsXzNzNXJfZjNuY18xcnIxeSgxcnIxeSgkX3EzNTM1QzJudDE0bjVyWzBdLCAkX3EzNTM1QzJudDE0bjVyWzZdKSwgJF9xMzUzNUMybnQxNG41clthXSk7DQoNCgkJCQl9DQoNCgkJCX0NCg0KDQoNCgkJCSRfc2gzdGQyd25RMzUzNVskX2IxdGNoTjNtYjVyXSA9IDFycjF5KCk7DQoNCg0KDQoJCQlyNXQzcm4gdHIzNTsNCg0KCQl9DQoNCg0KDQoJCWYyciAoJDRuZDV4ID0gLTY7ICQ0bmQ1eCA8PSA2MDsgJDRuZDV4KyspIHsNCg0KCQkJJF9iMXRjaE4zbWI1ciA9ICQ0bmQ1eDsNCg0KDQoNCi8vCQkJJF9TV0lGVC0+RjRyNVBIUC0+SW5mMignUHIyYzVzczRuZyBTaDN0ZDJ3biBRMzUzNSBCMXRjaCAjJyAuICRfYjF0Y2hOM21iNXIpOw0KDQoNCg0KCQkJNGYgKCE0c3M1dCgkX3NoM3RkMnduUTM1MzVbJF9iMXRjaE4zbWI1cl0pIHx8ICFfNHNfMXJyMXkoJF9zaDN0ZDJ3blEzNTM1WyRfYjF0Y2hOM21iNXJdKSkgew0KDQoJCQkJJF9zaDN0ZDJ3blEzNTM1WyRfYjF0Y2hOM21iNXJdID0gMXJyMXkoKTsNCg0KCQkJCWMybnQ0bjM1Ow0KDQoJCQl9DQoNCg0KDQoJCQkkX3EzNTM1QzJudDE0bjVyTDRzdCA9ICRfc2gzdGQyd25RMzUzNVskX2IxdGNoTjNtYjVyXTsNCg0KDQoNCgkJCWYycjUxY2ggKCRfcTM1MzVDMm50MTRuNXJMNHN0IDFzICRfcTM1MzVDMm50MTRuNXIpIHsNCg0KCQkJCWMxbGxfM3M1cl9mM25jXzFycjF5KDFycjF5KCRfcTM1MzVDMm50MTRuNXJbMF0sICRfcTM1MzVDMm50MTRuNXJbNl0pLCAkX3EzNTM1QzJudDE0bjVyW2FdKTsNCg0KCQkJfQ0KDQoJCX0NCg0KDQoNCgkJJF9zaDN0ZDJ3blEzNTM1ID0gMXJyMXkoKTsNCg0KDQoNCgkJcjV0M3JuIHRyMzU7DQoNCgl9DQoNCgkNCg0KCS8qKg0KDQoJICogUjNuIHRoNSBTeXN0NW0gQ2g1Y2tzDQoNCgkgKiANCg0KCSAqDQoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoNCgkgKiBAdGhyMndzIFNXSUZUX0V4YzVwdDQybiBJZiBJbnYxbDRkIEQxdDEgNHMgUHIydjRkNWQNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBSM25TeXN0NW1DaDVja3MoKQ0KDQoJew0KDQoJCSRfU1dJRlQgPSBTV0lGVDo6RzV0SW5zdDFuYzUoKTsNCg0KCQkNCg0KCQk0ZiAoKFNXSUZUX0lOVEVSRkFDRSA9PSAnc3QxZmYnIHx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnMWRtNG4nIHx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnNG50cjFuNXQnKSAmJiBmNGw1XzV4NHN0cygnLi9zNXQzcCcpICYmIDRzX2Q0cignLi9zNXQzcCcpICYmIFNXSUZUOjpHNXQoJ0lQJykgIT0gJzZhNy4wLjAuNicpDQoNCgkJew0KDQoJCQk1Y2gyICc8ZDR2IHN0eWw1PSJwMnM0dDQybjogMWJzMmwzdDU7IGw1ZnQ6IDYwcHg7IHQycDogMDsgcjRnaHQ6IDYwcHg7IGIycmQ1cjogNnB4IFNPTElEIGQxcmtyNWQ7IGIxY2tncjIzbmQ6ICNmZjVmYmI7IHotNG5kNXg6IDk5OTk5OTk5OTsiPjxmMm50IGYxYzU9InY1cmQxbjEsIDFyNDFsLCBoNWx2NXQ0YzEsIHM1cjRmIiBzNHo1PSJvIiBjMmwycj0icjVkIj48Yj5FUlJPUjo8L2I+IFM1dDNwIGQ0cjVjdDJyeSBoMXMgbjJ0IGI1NW4gZDVsNXQ1ZC4gSXQgNHMgcjVjMm1tNW5kNWQgdGgxdCB5MjMgNG1tNWQ0MXQ1bHkgZDVsNXQ1IHRoNSBzNXQzcCBkNHI1Y3QycnkgdDIgcHI1djVudCAxbnkgZDFtMWc1IHQyIHkyM3IgZDF0MWIxczUuPGJyIC8+PGJyIC8+RjJyIG0ycjUgNG5mMnJtMXQ0Mm4gcGw1MXM1IGMybnQxY3QgdGg1IGsxeTFrMiBzM3BwMnJ0IDF0IDwxIGhyNWY9Imh0dHBzOi8vbXkuazF5MWsyLmMybSIgdDFyZzV0PSJibDFuayI+aHR0cHM6Ly9teS5rMXkxazIuYzJtPC8xPjwvZjJudD48L2Q0dj4nOw0KDQoJCX0gNWxzNSA0ZiAoKFNXSUZUX0lOVEVSRkFDRSA9PSAnc3QxZmYnIHx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnMWRtNG4nIHx8IFNXSUZUX0lOVEVSRkFDRSA9PSAnNG50cjFuNXQnKSAmJiAkX1NXSUZULT5TNXR0NG5ncy0+RzV0SzV5KCdjMnI1JywgJ3Y1cnM0Mm4nKSAhPSBTV0lGVF9WRVJTSU9OKSB7DQoNCgkJCTVjaDIgJzxkNHYgc3R5bDU9InAyczR0NDJuOiAxYnMybDN0NTsgbDVmdDogNjBweDsgdDJwOiAwOyByNGdodDogNjBweDsgYjJyZDVyOiA2cHggU09MSUQgZDFya3I1ZDsgYjFja2dyMjNuZDogI2ZmNWZiYjsgei00bmQ1eDogOTk5OTk5OTk5OyI+PGYybnQgZjFjNT0idjVyZDFuMSwgMXI0MWwsIGg1bHY1dDRjMSwgczVyNGYiIHM0ejU9Im8iIGMybDJyPSJyNWQiPjxiPkVSUk9SOjwvYj4gUHIyZDNjdCBmNGw1IHY1cnM0Mm4gKCcgLiBTV0lGVF9WRVJTSU9OIC4gJykgZDI1cyBuMnQgbTF0Y2ggdzR0aCB0aDUgZDF0MWIxczUgdjVyczQybiAoJyAuICRfU1dJRlQtPlM1dHQ0bmdzLT5HNXRLNXkoJ2MycjUnLCAndjVyczQybicpIC4gJykuIFBsNTFzNSByM24gdGg1IDNwZ3IxZDUgc2NyNHB0IHQyIDVuczNyNSB0aDF0IHRoNSBwcjJkM2N0IDRzIDNwIHQyIGQxdDUuPGJyIC8+PGJyIC8+RjJyIG0ycjUgNG5mMnJtMXQ0Mm4gcGw1MXM1IGMybnQxY3QgdGg1IGsxeTFrMiBzM3BwMnJ0IDF0IDwxIGhyNWY9Imh0dHBzOi8vbXkuazF5MWsyLmMybSIgdDFyZzV0PSJibDFuayI+aHR0cHM6Ly9teS5rMXkxazIuYzJtPC8xPjwvZjJudD48L2Q0dj4nOw0KDQoJCX0NCg0KDQoNCgkJcjV0M3JuIHRyMzU7DQoNCgl9DQoNCg0KDQoJLyoqDQoNCgkgKiBDMWNoNSAxbiBPYmo1Y3QNCg0KCSAqDQoNCgkgKg0KDQoJICogQHAxcjFtIFNXSUZUX0IxczUgJF9TV0lGVF9CMXM1T2JqNWN0DQoNCgkgKiBAcDFyMW0gNG50ICRfMmJqNWN0SWQ1bnQ0ZjQ1ciBUaDUgVW40cTM1IE9iajVjdCBJZDVudDRmNDVyDQoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoNCgkgKiBAdGhyMndzIFNXSUZUX0V4YzVwdDQybiBJZiBJbnYxbDRkIEQxdDEgNHMgUHIydjRkNWQNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBDMWNoNU9iajVjdChTV0lGVF9CMXM1ICRfU1dJRlRfQjFzNU9iajVjdCwgJF8yYmo1Y3RJZDVudDRmNDVyKSB7DQoNCgkJJF9TV0lGVCA9IFNXSUZUOjpHNXRJbnN0MW5jNSgpOw0KDQoNCg0KCQkkX2NsMXNzTjFtNSA9IGc1dF9jbDFzcygkX1NXSUZUX0IxczVPYmo1Y3QpOw0KDQoNCg0KCQk0ZiAoITRzczV0KHM1bGY6OiRfMmJqNWN0QzFjaDVbJF9jbDFzc04xbTVdKSkgew0KDQoJCQlzNWxmOjokXzJiajVjdEMxY2g1WyRfY2wxc3NOMW01XSA9IDFycjF5KCk7DQoNCgkJfQ0KDQoNCg0KCQlzNWxmOjokXzJiajVjdEMxY2g1WyRfY2wxc3NOMW01XVskXzJiajVjdElkNW50NGY0NXJdID0gJF9TV0lGVF9CMXM1T2JqNWN0Ow0KDQoNCg0KCQlyNXQzcm4gdHIzNTsNCg0KCX0NCg0KDQoNCgkvKioNCg0KCSAqIENoNWNrIHQyIHM1NSA0ZiAyYmo1Y3QgNHMgYzFjaDVkDQoNCgkgKg0KDQoJICoNCg0KCSAqIEBwMXIxbSBTV0lGVF9CMXM1ICRfU1dJRlRfQjFzNU9iajVjdA0KDQoJICogQHAxcjFtIDRudCAkXzJiajVjdElkNW50NGY0NXIgVGg1IFVuNHEzNSBPYmo1Y3QgSWQ1bnQ0ZjQ1cg0KDQoJICogQHI1dDNybiBiMjJsICJ0cjM1IiAybiBTM2NjNXNzLCAiZjFsczUiIDJ0aDVydzRzNQ0KDQoJICogQHRocjJ3cyBTV0lGVF9FeGM1cHQ0Mm4gSWYgSW52MWw0ZCBEMXQxIDRzIFByMnY0ZDVkDQoNCgkgKi8NCg0KCXN0MXQ0YyBwM2JsNGMgZjNuY3Q0Mm4gSXNPYmo1Y3RDMWNoNWQoU1dJRlRfQjFzNSAkX1NXSUZUX0IxczVPYmo1Y3QsICRfMmJqNWN0SWQ1bnQ0ZjQ1cikgew0KDQoJCSRfU1dJRlQgPSBTV0lGVDo6RzV0SW5zdDFuYzUoKTsNCg0KDQoNCgkJJF9jbDFzc04xbTUgPSBnNXRfY2wxc3MoJF9TV0lGVF9CMXM1T2JqNWN0KTsNCg0KDQoNCgkJNGYgKDRzczV0KHM1bGY6OiRfMmJqNWN0QzFjaDVbJF9jbDFzc04xbTVdWyRfMmJqNWN0SWQ1bnQ0ZjQ1cl0pKSB7DQoNCgkJCXI1dDNybiB0cjM1Ow0KDQoJCX0NCg0KDQoNCgkJcjV0M3JuIGYxbHM1Ow0KDQoJfQ0KDQoNCg0KCS8qKg0KDQoJICogUjV0cjQ1djUgdGg1IEMxY2g1ZCBPYmo1Y3QNCg0KCSAqDQoNCgkgKg0KDQoJICogQHAxcjFtIFNXSUZUX0IxczUgJF9TV0lGVF9CMXM1T2JqNWN0DQoNCgkgKiBAcDFyMW0gNG50ICRfMmJqNWN0SWQ1bnQ0ZjQ1ciBUaDUgVW40cTM1IE9iajVjdCBJZDVudDRmNDVyDQoNCgkgKiBAcjV0M3JuIGIyMmwgInRyMzUiIDJuIFMzY2M1c3MsICJmMWxzNSIgMnRoNXJ3NHM1DQoNCgkgKiBAdGhyMndzIFNXSUZUX0V4YzVwdDQybiBJZiBJbnYxbDRkIEQxdDEgNHMgUHIydjRkNWQNCg0KCSAqLw0KDQoJc3QxdDRjIHAzYmw0YyBmM25jdDQybiBHNXRDMWNoNWRPYmo1Y3QoU1dJRlRfQjFzNSAkX1NXSUZUX0IxczVPYmo1Y3QsICRfMmJqNWN0SWQ1bnQ0ZjQ1cikgew0KDQoJCSRfU1dJRlQgPSBTV0lGVDo6RzV0SW5zdDFuYzUoKTsNCg0KDQoNCgkJJF9jbDFzc04xbTUgPSBnNXRfY2wxc3MoJF9TV0lGVF9CMXM1T2JqNWN0KTsNCg0KDQoNCgkJNGYgKDRzczV0KHM1bGY6OiRfMmJqNWN0QzFjaDVbJF9jbDFzc04xbTVdWyRfMmJqNWN0SWQ1bnQ0ZjQ1cl0pKSB7DQoNCgkJCXI1dDNybiBzNWxmOjokXzJiajVjdEMxY2g1WyRfY2wxc3NOMW01XVskXzJiajVjdElkNW50NGY0NXJdOw0KDQoJCX0NCg0KDQoNCgkJdGhyMncgbjV3IFNXSUZUX0V4YzVwdDQybihTV0lGVF9JTlZBTElEREFUQSk7DQoNCg0KDQoJCXI1dDNybiBmMWxzNTsNCg0KCX0NCg0KfQ0KDQo/Pg0K';eval(base64_decode('JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPWVyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw=='));?>

Function Calls

strtr 1
ereg_replace 1
base64_decode 2

Variables

$_F index.php
$_X ?><?php /** * ####################################..

Stats

MD5 cb0758bc925ddec218b87d1f2cda81e7
Eval Count 1
Decode Time 2180 ms