# Name: smd_bio v0.31 # Type: Admin/Public side plugin # Customisable user biographies / profile info # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjc6InNtZF9iaW8iO3M6NjoiYXV0aG9yIjtzOjExOiJTdGVm IERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdzb24uY29t LyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMzEiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjQ0OiJD dXN0b21pc2FibGUgdXNlciBiaW9ncmFwaGllcyAvIHByb2ZpbGUgaW5mbyI7czo0OiJjb2Rl IjtzOjM0NTI2OiIvLyBUT0RPOg0KLy8gIFVzZSBhbiBhcnJheSBsaWtlICR0eXBlcyA9IGFy cmF5KCAnaW50JyA9PiBhcnJheSggc3FsX3R5cGU9J0lOVEVHRVInLCB3aWRnZXQ9IlRFWFQi LCB3aWRnZXRfY29uc3RyYWludD0iaXNfaW50ZWdlciIgKSwgKTsNCi8vICAgLS0+IFBvcHVs YXRlIHRoZSBzZWxlY3QgYm94IGZyb20gdGhpcyBhcnJheQ0KLy8gIEFkZCAnaW5kZXgnIGNo ZWNrYm94IHRvIGFsbG93IGFuIEluZGV4IHRvIGJlIGFkZGVkIHRvIGEgbWV0YSBjb2x1bW4N Ci8vICBBYmlsaXR5IHRvIHNwZWNpZnkgd2lsZGNhcmRzL21hdGNoZXMgZm9yIGl0ZW1zL2F1 dGhvcnMgaW4gdGhlIGNsaWVudCB0YWcNCi8vICBTcGVjaWZ5IHRvb2x0aXAgZXh0ZW5kZWQg YmlvIGluZm9ybWF0aW9uIGluIHByZWZzDQppZiAoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4n KSB7DQoJYWRkX3ByaXZzKCdzbWRfYmlvJywgJzEnKTsNCglyZWdpc3Rlcl90YWIoJ2V4dGVu c2lvbnMnLCAnc21kX2JpbycsIHNtZF9iaW9fZ1R4dCgnYWRtaW5fdGFiJykpOw0KCXJlZ2lz dGVyX2NhbGxiYWNrKCdzbWRfYmlvJywgJ3NtZF9iaW8nKTsNCglyZWdpc3Rlcl9jYWxsYmFj aygnc21kX2Jpb19maWVsZHMnLCAnYXV0aG9yX3VpJywgJ2V4dGVuZF9kZXRhaWxfZm9ybScp Ow0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYmlvX2FkbWluX2pzJywgJ2FkbWluX3NpZGUn LCAnaGVhZF9lbmQnKTsNCgkvLyBOb3RlIHRoZXNlIGFyZSBhbGwgcHJlIFRYUCdzIGludm9s dmVtZW50DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9iaW9fc2F2ZScsICdhZG1pbicsICdh dXRob3Jfc2F2ZScsIDEpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYmlvX3NhdmUnLCAn YWRtaW4nLCAnYXV0aG9yX3NhdmVfbmV3JywgMSk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3Nt ZF9iaW9fZGVsZXRlJywgJ2FkbWluJywgJ2FkbWluX211bHRpX2VkaXQnLCAxKTsNCn0NCiRz dGVwID0gZ3BzKCdzdGVwJyk7DQppZiAoJHN0ZXAgPT0gJ3NtZF9iaW9fZ2V0X2ltYWdlJykg ew0KCXNtZF9iaW9fZ2V0X2ltYWdlKCk7DQp9DQppZiAoJHN0ZXAgPT0gJ3NtZF9iaW9fZ2V0 X2ViaW8nKSB7DQoJc21kX2Jpb19nZXRfZWJpbygpOw0KfQ0KDQpnbG9iYWwgJHNtZF9iaW9f dHlwZXM7DQokc21kX2Jpb190eXBlcyA9IGFycmF5KA0KCQkndGV4dF9pbnB1dCcgPT4gJ1Rl eHQgYm94JywNCgkJJ2xpc3QnID0+ICdTZWxlY3QgbGlzdCcsDQoJCSdyYWRpbycgPT4gJ1Jh ZGlvIHNldCcsDQoJCSd5ZXNub3JhZGlvJyA9PiAnWWVzL25vIHJhZGlvJywNCgkJJ2NoZWNr Ym94JyA9PiAnQ2hlY2tib3goZXMpJywNCgkJJ3RleHRhcmVhJyA9PiAnVGV4dCBhcmVhJywN CgkJJ2ltYWdlJyA9PiAnSW1hZ2UnLA0KCQknZGF0ZXRpbWUnID0+ICdEYXRlL1RpbWUnDQoJ KTsNCg0KaWYgKCFkZWZpbmVkKCdTTURfQklPJykpIHsNCglkZWZpbmUoIlNNRF9CSU8iLCAn c21kX2JpbycpOw0KfQ0KaWYgKCFkZWZpbmVkKCdTTURfQklPX01FVEEnKSkgew0KCWRlZmlu ZSgiU01EX0JJT19NRVRBIiwgJ3NtZF9iaW9fbWV0YScpOw0KfQ0KDQovLyAqKioqKioqKioq KioqKioqKioqKioqKioNCi8vIEFETUlOIC0+IFVTRVJTIFRBQg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYmlvX2ZpZWxkcygkZXZ0LCAkc3RwLCAkbXQs ICRkYXRhKSB7DQoJJG91dCA9ICR2YWxzID0gYXJyYXkoKTsNCg0KCSRyc3RlcCA9IGdwcygn c3RlcCcpOw0KCWlmKHNtZF9iaW9fdGFibGVfZXhpc3QoKSkgew0KCQlpZiAoJHJzdGVwID09 ICdhdXRob3JfZWRpdCcpIHsNCgkJCWV4dHJhY3QoZ3BzYShhcnJheSgndXNlcl9pZCcpKSk7 DQoJCQkvLyBTaGFtZSB3ZSBoYXZlIHRvIGRvdWJsZSBkZS1jbHV0Y2ggaGVyZSBidXQgd2Ug Y2FuJ3QgaW5kZXggb24gdXNlcl9pZCB1bmZvcnR1bmF0ZWx5ICgnY29zIHdoZW4NCgkJCS8v IGluc2VydGluZyBuZXcgdXNlcnMsIHRoZSBiaW8gZnVuY3Rpb25zIHJ1biBfQkVGT1JFXyBh biBhdXRvX2luY3JlbWVudCBJRCBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgVFhQKQ0KCQkJJHVu YW1lID0gc2FmZV9maWVsZCgnbmFtZScsJ3R4cF91c2VycycsInVzZXJfaWQgPSAnJHVzZXJf aWQnIik7DQoJCQkkdmFscyA9IHNhZmVfcm93KCcqJywgU01EX0JJTywgInVzZXJfcmVmPSck dW5hbWUnIik7DQoJCX0NCgkJJHdpZGdldHMgPSBzYWZlX3Jvd3MoJyonLCBTTURfQklPX01F VEEsICcxPTEgT1JERVIgQlkgcG9zaXRpb24nKTsNCgkJJHRkYWMgPSAnIGNsYXNzPSJub2xp bmUiJzsNCgkJJHRkYWNfaW1hZ2UgPSAnIGNsYXNzPSJub2xpbmUgc21kX2Jpb19pbWFnZV9j ZWxsIic7DQoJCWZvcmVhY2ggKCR3aWRnZXRzIGFzICR3aWRnZXQpIHsNCgkJCSR2YWwgPSAo JHZhbHMgJiYgaXNzZXQoJHZhbHNbJHdpZGdldFsnbmFtZSddXSkpID8gJHZhbHNbJHdpZGdl dFsnbmFtZSddXSA6ICR3aWRnZXRbJ3ZhbCddOw0KCQkJJHRpdGxlID0gKCR3aWRnZXRbJ3Rp dGxlJ10pID8gJHdpZGdldFsndGl0bGUnXSA6ICR3aWRnZXRbJ25hbWUnXTsNCgkJCSRzaXpl b3B0cyA9IGRvX2xpc3QoJHdpZGdldFsnc2l6ZSddKTsNCgkJCSRzaXplMSA9ICgkc2l6ZW9w dHNbMF0gPiAwKSA/ICRzaXplb3B0c1swXSA6ICcnOw0KCQkJJHNpemUyID0gKGlzc2V0KCRz aXplb3B0c1sxXSkgJiYgJHNpemVvcHRzWzFdID4gMCkgPyAkc2l6ZW9wdHNbMV0gOiAnJzsN CgkJCSRuYW1lID0gJ3NtZF9iaW9fJy4kd2lkZ2V0WyduYW1lJ107DQoJCQlzd2l0Y2goJHdp ZGdldFsndHlwZSddKSB7DQoJCQkJY2FzZSAnbGlzdCc6DQoJCQkJCSRzZWx2ID0gc21kX2Jp b19zcGxpdHZhbCgkd2lkZ2V0Wyd2YWwnXSk7DQoJCQkJCWxpc3QoJHNlbHYsICRkZmx0KSA9 IHNtZF9iaW9fZ2V0X2RlZmF1bHQoJHNlbHYsICR2YWwpOw0KCQkJCQkkb3V0W10gPSB0cihm TGFiZWxDZWxsKCR0aXRsZSkudGRhKHNlbGVjdElucHV0KCRuYW1lLCAkc2VsdiwgJGRmbHQs IGZhbHNlLCAnJywgJG5hbWUpLCAkdGRhYyksICcgY2xhc3M9InNtZF9iaW9fc2VsZWN0ICcu JG5hbWUuJyInKTsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAncmFkaW8nOg0KCQkJCQkkc2Vs diA9IHNtZF9iaW9fc3BsaXR2YWwoJHdpZGdldFsndmFsJ10pOw0KCQkJCQlsaXN0KCRzZWx2 LCAkZGZsdCkgPSBzbWRfYmlvX2dldF9kZWZhdWx0KCRzZWx2LCAkdmFsKTsNCgkJCQkJJG91 dFtdID0gdHIoZkxhYmVsQ2VsbCgkdGl0bGUpLnRkYShyYWRpb1NldCgkc2VsdiwgJG5hbWUs ICRkZmx0KSwgJHRkYWMpLCAnIGNsYXNzPSJzbWRfYmlvX3JhZGlvICcuJG5hbWUuJyInKTsN CgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAneWVzbm9yYWRpbyc6DQoJCQkJCSRvdXRbXSA9IHRy KGZMYWJlbENlbGwoJHRpdGxlKS50ZGEoeWVzbm9SYWRpbygkbmFtZSwgJHZhbCksICR0ZGFj KSwgJyBjbGFzcz0ic21kX2Jpb19yYWRpbyAnLiRuYW1lLiciJyk7DQoJCQkJCWJyZWFrOw0K CQkJCWNhc2UgJ2NoZWNrYm94JzoNCgkJCQkJJHNlbHYgPSBzbWRfYmlvX3NwbGl0dmFsKCR3 aWRnZXRbJ3ZhbCddKTsNCgkJCQkJJHZhbCA9ICgkdmFscyAmJiBpc3NldCgkdmFsc1skd2lk Z2V0WyduYW1lJ11dKSkgPyAkdmFsc1skd2lkZ2V0WyduYW1lJ11dIDogJyc7DQoJCQkJCSRj aGVja2VkVmFscyA9IGRvX2xpc3QoJHZhbCk7DQoJCQkJCSRpdGVtcyA9IGFycmF5KCk7DQoJ CQkJCWZvcmVhY2ggKCRzZWx2IGFzICRpZHggPT4gJGxibCkgew0KCQkJCQkJLy8gTm90IHVz aW5nIGNoZWNrYm94KCkgYmVjYXVzZSBpdCBkb2Vzbid0IHN1cHBvcnQgb25jbGljaw0KCQkJ CQkJJGl0ZW1zW10gPSAnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJjYl8nLiRuYW1l LiciIHZhbHVlPSInLiRpZHguJyInLigoaW5fYXJyYXkoJGlkeCwgJGNoZWNrZWRWYWxzKSkg PyAnIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKSAuICcgY2xhc3M9ImNoZWNrYm94IiBvbmNs aWNrPSJzbWRfYmlvX2NoZWNrYm94KFwnJy4kbmFtZS4nXCcpOyIgLz4nLiRsYmw7DQoJCQkJ CX0NCgkJCQkJJG91dFtdID0gdHIoZkxhYmVsQ2VsbCgkdGl0bGUpLnRkYShqb2luKCcnLCAk aXRlbXMpLCAkdGRhYyksICcgY2xhc3M9InNtZF9iaW9fY2hlY2tib3ggJy4kbmFtZS4nIicp LmZJbnB1dCgnaGlkZGVuJywkbmFtZSwkdmFsLCcnLCcnLCcnLCcnLCcnLCRuYW1lKTsNCgkJ CQkJYnJlYWs7DQoJCQkJY2FzZSAndGV4dGFyZWEnOg0KCQkJCQkvLyBOb3QgdXNpbmcgdGV4 dF9hcmVhKCkgYmVjYXVzZSBpdCBmb3JjZXMgaW5saW5lIHN0eWxlZCB3aWR0aC9oZWlnaHQg d2hpY2ggc2hvdWxkIGJlIGluIENTUw0KCQkJCQkkc2l6ZTEgPSAoJHNpemUxID09ICcnIHx8 ICRzaXplMSA9PSAwKSA/IDQwIDogJHNpemUxOw0KCQkJCQkkc2l6ZTIgPSAoJHNpemUyID09 ICcnIHx8ICRzaXplMiA9PSAwKSA/IDUgOiAkc2l6ZTI7DQoJCQkJCSRvdXRbXSA9IHRyKGZM YWJlbENlbGwoJHRpdGxlKS50ZGEoJzx0ZXh0YXJlYSBpZD0iJy4kbmFtZS4nIiBuYW1lPSIn LiRuYW1lLiciIGNsYXNzPSJzbWRfYmlvX3RleHRhcmVhIiBjb2xzPSInLiRzaXplMS4nIiBy b3dzPSInLiRzaXplMi4nIj4nLmh0bWxzcGVjaWFsY2hhcnMoJHZhbCkuJzwvdGV4dGFyZWE+ JywgJHRkYWMpLCAnIGNsYXNzPSJzbWRfYmlvX3RleHRhcmVhICcuJG5hbWUuJyInKTsNCgkJ CQkJYnJlYWs7DQoJCQkJY2FzZSAnaW1hZ2UnOg0KCQkJCQkkcGFyZW50ID0gJHdpZGdldFsn dmFsJ107DQoJCQkJCSR2YWwgPSAoJHZhbHMgJiYgaXNzZXQoJHZhbHNbJHdpZGdldFsnbmFt ZSddXSkpID8gJHZhbHNbJHdpZGdldFsnbmFtZSddXSA6ICcnOw0KCQkJCQkkd2hlcmUgPSAo JHBhcmVudCkgPyAiY2F0ZWdvcnk9JyRwYXJlbnQnIiA6ICcxPTEnOw0KCQkJCQkkdHJlZSA9 IHNhZmVfcm93cygnKicsICd0eHBfaW1hZ2UnLCAkd2hlcmUpOw0KCQkJCQkkc2VsdiA9IGFy cmF5KCk7DQoJCQkJCWZvcmVhY2ggKCR0cmVlIGFzICRyb3cpIHsNCgkJCQkJCSRzZWx2WyRy b3dbJ2lkJ11dID0gJHJvd1snbmFtZSddOw0KCQkJCQl9DQoJCQkJCSRvdXRbXSA9IHRyKGZM YWJlbENlbGwoJHRpdGxlKS50ZGEoJzxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0iJy5odG1s c3BlY2lhbGNoYXJzKCR2YWwpLiciIG5hbWU9IicuJG5hbWUuJyIgc2l6ZT0iNCIgY2xhc3M9 InNtZF9iaW9faW1hZ2VfaWQiIC8+Jy5zZWxlY3RJbnB1dCgkbmFtZS4nX2xpc3QnLCAkc2Vs diwgJHZhbCwgdHJ1ZSwgJycpLic8ZGl2IGNsYXNzPSJzbWRfYmlvX2ltYWdlIj48L2Rpdj48 c3BhbiBjbGFzcz0ic21kX2Jpb19pbWFnZV9kYXRhIiB0aXRsZT0iJy4oKCRzaXplMSkgPyAk c2l6ZTEgOiAnJykuJywnLigoJHNpemUyKSA/ICRzaXplMiA6ICRzaXplMSkuJyI+PC9zcGFu PicsICR0ZGFjX2ltYWdlLiAnIGlkPSInLiRuYW1lLiciJyksICcgY2xhc3M9InNtZF9iaW9f aW1hZ2Vfcm93ICcuJG5hbWUuJyInKTsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAnZGF0ZXRp bWUnOg0KCQkJCWNhc2UgJ3RleHRfaW5wdXQnOg0KCQkJCQkvLyBOb3QgdXNpbmcgZklucHV0 KCkgYmVjYXVzZSBpdCBoYXMgbm8gTUFYTEVOR1RIIHByb3BlcnR5DQoJCQkJCSRzaXplMSA9 ICgkc2l6ZTEgPT0gJycgfHwgJHNpemUxID09IDApID8gMjUgOiAkc2l6ZTE7DQoJCQkJCSRz aXplMiA9ICgkc2l6ZTIgPT0gJycgfHwgJHNpemUyID09IDApID8gJHNpemUxIDogJHNpemUy Ow0KCQkJCQkkb3V0W10gPSB0cihmTGFiZWxDZWxsKCR0aXRsZSkudGRhKCc8aW5wdXQgdHlw ZT0idGV4dCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkdmFsKS4nIiBuYW1lPSInLiRu YW1lLiciIGlkPSInLiRuYW1lLiciIHNpemU9IicuJHNpemUxLiciIG1heGxlbmd0aD0iJy4k c2l6ZTIuJyIgY2xhc3M9InNtZF9iaW9fdGV4dCBlZGl0IiAvPicsICR0ZGFjKSwgJyBjbGFz cz0ic21kX2Jpb190ZXh0X2lucHV0ICcuJG5hbWUuJyInKTsNCgkJCQkJYnJlYWs7DQoJCQl9 DQoJCX0NCgl9DQoJcmV0dXJuIGpvaW4oJycsICRvdXQpOw0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCi8vIFJlYWQgYSBuYW1lL3ZhbCBhcnJheSBhbmQgcmVtb3ZlIGFu eSBbKl0gbWFya2VyIHdoaWNoIGluZGljYXRlcyBhIGRlZmF1bHQgaXRlbQ0KZnVuY3Rpb24g c21kX2Jpb19nZXRfZGVmYXVsdCgkbGlzdCwgJGN1cnIpIHsNCgkkb3V0ID0gYXJyYXkoKTsN CgkkZGZsdCA9ICRuZXdfZGZsdCA9ICcnOw0KCWZvcmVhY2ggKCRsaXN0IGFzICRpdGVtID0+ ICR2YWx1ZSkgew0KCQlpZiAoKCRwb3MgPSBzdHJwb3MoJHZhbHVlLCAnWypdJykpICE9PSBm YWxzZSkgew0KCQkJJG91dFskaXRlbV0gPSBzdWJzdHIoJHZhbHVlLCAwLCAkcG9zKTsNCgkJ CSRuZXdfZGZsdCA9ICRpdGVtOw0KCQl9IGVsc2Ugew0KCQkJJG91dFskaXRlbV0gPSAkdmFs dWU7DQoJCX0NCgkJaWYgKCRpdGVtID09ICRjdXJyKSB7DQoJCQkkZGZsdCA9ICRpdGVtOw0K CQl9DQoJfQ0KCSRkZmx0ID0gKCRkZmx0KSA/ICRkZmx0IDogJG5ld19kZmx0Ow0KCXJldHVy biBhcnJheSgkb3V0LCAkZGZsdCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KLy8gQUpBWCBjYWxscw0KZnVuY3Rpb24gc21kX2Jpb19nZXRfaW1hZ2UoKSB7DQoJZ2xv YmFsICRpbWdfZGlyOw0KDQoJJGlkID0gZ3BzKCdpZCcpOw0KCWlmICgkaWQpIHsNCgkJJHJz ID0gc2FmZV9yb3coJyonLCAndHhwX2ltYWdlJywgImlkID0gJyRpZCciKTsNCgkJZXh0cmFj dCgkcnMpOw0KCQkkb3V0ID0gYXJyYXkoKTsNCgkJJG91dFsndGh1bWInXSA9ICgkdGh1bWJu YWlsKSA/IGh1LiRpbWdfZGlyLicvJy4kaWQuJ3QnLiRleHQgOiAnJzsNCgkJJG91dFsnaW1h Z2UnXSA9IGh1LiRpbWdfZGlyLicvJy4kaWQuJGV4dDsNCgkJJG91dFsndyddID0gJHc7DQoJ CSRvdXRbJ2gnXSA9ICRoOw0KCQkkb3V0Wyd0aHcnXSA9ICgkdGh1bWJfdykgPyAkdGh1bWJf dyA6ICcnOw0KCQkkb3V0Wyd0aGgnXSA9ICgkdGh1bWJfaCkgPyAkdGh1bWJfaCA6ICcnOw0K CQlzZW5kX3htbF9yZXNwb25zZSgkb3V0KTsNCgl9IGVsc2Ugew0KCQlzZW5kX3htbF9yZXNw b25zZSgpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBJTVBP UlRBTlQ6IGNvbnN0YW50cyBOT1QgdXNlZCBmb3IgdGFibGUgbmFtZXMNCmZ1bmN0aW9uIHNt ZF9iaW9fZ2V0X2ViaW8oKSB7DQoJaW5jbHVkZV9vbmNlIHR4cGF0aC4nL3B1Ymxpc2gvdGFn aGFuZGxlcnMucGhwJzsNCg0KCSRpZCA9IGdwcygnaWQnKTsNCgkkY29yZSA9IGFycmF5KCd1 c2VyX3JlZicpOw0KCSRycyA9IHNhZmVfcm93KCcqJywgJ3NtZF9iaW8nLCAidXNlcl9yZWYg PSAnJGlkJyIpOw0KCSRtZXRhID0gc2FmZV9yb3dzKCcqJywgJ3NtZF9iaW9fbWV0YScsICIx PTEiKTsNCi8vCSRpbmNsdWRlID0gYXJyYXlfbWVyZ2UoJGNvcmUsIGFycmF5KCdtdWcnLCAn Y2VsbCcsICdkZXBhcnRtZW50JykpOyAvLyBUT0RPOiBnZXQgdGhlc2UgZnJvbSBwcmVmcy9t ZXRhIHRhYmxlDQoJJGFsbG93ZWRfdHlwZXMgPSBhcnJheSgndGV4dF9pbnB1dCcsICd0ZXh0 YXJlYScsICdkYXRldGltZScpOw0KCSRvdXQgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCRycyBh cyAkaWR4ID0+ICR2YWwpIHsNCi8vCQlpZiAoaW5fYXJyYXkoJGlkeCwgJGluY2x1ZGUpKSB7 DQoJCQlpZiAoaW5fYXJyYXkoJGlkeCwgJGNvcmUpKSB7DQoJCQkJJG91dFskaWR4XSA9IGRv U2xhc2goJHZhbCk7DQoJCQl9IGVsc2Ugew0KCQkJCWZvcmVhY2goJG1ldGEgYXMgJHJvdykg ew0KCQkJCQlpZiAoJHJvd1snbmFtZSddID09ICRpZHgpIHsNCgkJCQkJCWlmICgkcm93Wyd0 eXBlJ10gPT0gImltYWdlIikgew0KCQkJCQkJCSRvdXRbJGlkeF0gPSAnc21kX2ltYWdlOjon LnRodW1ibmFpbChhcnJheSgnaWQnPT4gJHZhbCkpOw0KCQkJCQkJfSBlbHNlIGlmIChpbl9h cnJheSgkcm93Wyd0eXBlJ10sICRhbGxvd2VkX3R5cGVzKSkgew0KCQkJCQkJCSRvdXRbJGlk eF0gPSAkcm93Wyd0aXRsZSddLic6OicuaHRtbHNwZWNpYWxjaGFycyhzdHJpcF90YWdzKCR2 YWwpLCBFTlRfUVVPVEVTKTsNCgkJCQkJCX0NCgkJCQkJCWJyZWFrOw0KCQkJCQl9DQoJCQkJ fQ0KCQkJfQ0KLy8JCX0NCgl9DQoJc2VuZF94bWxfcmVzcG9uc2UoJG91dCk7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2Jpb19hZG1pbl9qcygk ZXZ0LCAkc3RwKSB7DQoJZ2xvYmFsICRldmVudDsNCg0KCWlmICgkZXZlbnQgIT0gJ2FkbWlu JyAmJiAkZXZlbnQgIT0gJ3NtZF9iaW8nKSB7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkk Y3NzID0gc2FmZV9maWVsZCgnY3NzJywgJ3R4cF9jc3MnLCAibmFtZT0nc21kX2JpbyciKTsN CglpZiAoJGNzcykgew0KCQkkY3NzID0gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Jy5uLmJh c2U2NF9kZWNvZGUoJGNzcykubi4nPC9zdHlsZT4nOw0KCX0NCgkkY3NzIC49IDw8PEVPQ1NT DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KI3Rvb2x0aXB7DQoJcG9zaXRpb246YWJzb2x1 dGU7DQoJYm9yZGVyOjFweCBzb2xpZCAjMzMzOw0KCWJhY2tncm91bmQ6I2Y3ZjVkMTsNCglw YWRkaW5nOjJweCA1cHg7DQoJY29sb3I6IzMzMzsNCglkaXNwbGF5Om5vbmU7DQp9DQo8L3N0 eWxlPg0KRU9DU1M7DQoJZWNobyA8PDxFT0pTDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj cmlwdCI+DQovLzwhW0NEQVRBWw0KDQoJLy8gQ29uY2F0ZW5hdGUgY2hlY2tib3ggb3B0aW9u cyBmb3Igc3RvcmFnZQ0KCWZ1bmN0aW9uIHNtZF9iaW9fY2hlY2tib3goZGVzdCkgew0KCQl2 YXIgb3V0ID0gW107DQoJCWpRdWVyeSgiOmNoZWNrYm94IikuZWFjaChmdW5jdGlvbigpIHsN CgkJCXZhciBpdGVtID0galF1ZXJ5KHRoaXMpOw0KCQkJaWYgKGl0ZW0uYXR0cignbmFtZScp LnJlcGxhY2UoJ2NiXycsJycpID09IGRlc3QpIHsNCgkJCQlpZiAoaXRlbS5hdHRyKCdjaGVj a2VkJykgPT0gdHJ1ZSkgew0KCQkJCQlvdXQucHVzaChpdGVtLnZhbCgpKTsNCgkJCQl9DQoJ CQl9DQoJCX0pOw0KCQlqUXVlcnkoJyMnK2Rlc3QpLnZhbChvdXQuam9pbignLCcpKTsNCgl9 DQoNCmpRdWVyeShmdW5jdGlvbigpIHsNCgkvLyBHcmFiIGltYWdlcyBmcm9tIHRoZSBzZXJ2 ZXIgd2hlbiB0aGUgc2VsZWN0L3RleHRib3ggY2hhbmdlDQoJalF1ZXJ5KCIuc21kX2Jpb19p bWFnZV9pZCIpLmJsdXIoZnVuY3Rpb24oKSB7DQoJCWlkID0galF1ZXJ5KHRoaXMpLnBhcmVu dCgpLmF0dHIoJ2lkJyk7DQoJCXZhbCA9IGpRdWVyeSh0aGlzKS52YWwoKTsNCgkJc21kX2Jp b19nZXRfaW1hZ2UoaWQsIHZhbCk7DQoJfSkuYmx1cigpOw0KCWpRdWVyeSgiLnNtZF9iaW9f aW1hZ2VfY2VsbCAubGlzdCIpLmNoYW5nZShmdW5jdGlvbigpIHsNCgkJaWQgPSBqUXVlcnko dGhpcykucGFyZW50KCkuYXR0cignaWQnKTsNCgkJdmFsID0galF1ZXJ5KHRoaXMpLnZhbCgp Ow0KCQlzbWRfYmlvX2dldF9pbWFnZShpZCwgdmFsKTsNCgl9KTsNCglmdW5jdGlvbiBzbWRf YmlvX2dldF9pbWFnZShpZCwgdmFsKSB7DQoJCWpRdWVyeSgiIyIgKyBpZCArICIgc2VsZWN0 IG9wdGlvblt2YWx1ZT0nIit2YWwrIiddIikuYXR0cigic2VsZWN0ZWQiLCB0cnVlKTsNCgkJ alF1ZXJ5KCIjIiArIGlkICsgIiBpbnB1dCIpLnZhbCh2YWwpOw0KCQl2YXIgZGltcyA9IGpR dWVyeSgiIyIgKyBpZCArICIgc3Bhbi5zbWRfYmlvX2ltYWdlX2RhdGEiKS5hdHRyKCd0aXRs ZScpOw0KCQl2YXIgc2l6ZSA9IG5ldyBBcnJheSgpOw0KCQlpZiAoZGltcykgew0KCQkJc2l6 ZSA9IGRpbXMuc3BsaXQoIiwiKTsNCgkJfQ0KCQlzZW5kQXN5bmNFdmVudCh7DQoJCQkJZXZl bnQ6IHRleHRwYXR0ZXJuLmV2ZW50LA0KCQkJCXN0ZXA6ICdzbWRfYmlvX2dldF9pbWFnZScs DQoJCQkJaWQ6IHZhbA0KCQkJfSwgZnVuY3Rpb24oZGF0YSkgew0KCQkJCWRhdGEgPSBqUXVl cnkoZGF0YSk7DQoJCQkJaWYgKGRhdGEpIHsNCgkJCQkJdmFyIGZ1bGwgPSAwOw0KCQkJCQl2 YXIgaW1nTGluayA9IGRhdGEuZmluZCgndGh1bWInKS5hdHRyKCd2YWx1ZScpOw0KCQkJCQlp ZiAoaW1nTGluayA9PSAnJykgew0KCQkJCQkJZnVsbCA9IDE7DQoJCQkJCQl2YXIgaW1nTGlu ayA9IGRhdGEuZmluZCgnaW1hZ2UnKS5hdHRyKCd2YWx1ZScpOw0KCQkJCQl9DQoJCQkJCWlm IChzaXplWzBdID09ICcnKSB7DQoJCQkJCQlpZiAoZnVsbCA9PSAxKSB7DQoJCQkJCQkJc2l6 ZVswXSA9IGRhdGEuZmluZCgndycpLmF0dHIoJ3ZhbHVlJyk7DQoJCQkJCQl9IGVsc2Ugew0K CQkJCQkJCXNpemVbMF0gPSBkYXRhLmZpbmQoJ3RodycpLmF0dHIoJ3ZhbHVlJyk7DQoJCQkJ CQl9DQoJCQkJCX0NCgkJCQkJaWYgKHNpemVbMV0gPT0gJycpIHsNCgkJCQkJCWlmIChmdWxs ID09IDEpIHsNCgkJCQkJCQlzaXplWzFdID0gZGF0YS5maW5kKCdoJykuYXR0cigndmFsdWUn KTsNCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJc2l6ZVsxXSA9IGRhdGEuZmluZCgndGhoJyku YXR0cigndmFsdWUnKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQlqUXVlcnkoIiMiICsgaWQg KyAiIC5zbWRfYmlvX2ltYWdlIikuZmFkZUluKCkuaHRtbCgnPGltZyBzcmM9IicraW1nTGlu aysnIiB3aWR0aD0iJytzaXplWzBdKyciIGhlaWdodD0iJytzaXplWzFdKyciIC8+Jyk7DQoJ CQkJfSBlbHNlIHsNCgkJCQkJalF1ZXJ5KCIjIiArIGlkICsgIiAuc21kX2Jpb19pbWFnZSIp LmZhZGVPdXQoKS5lbXB0eSgpOw0KCQkJCX0NCgkJCX0NCgkJKTsNCgl9DQoNCgkvLyBHcmFi IHRoZSBleHRlbmRlZCBpbmZvIHdoZW4gaG92ZXJpbmcgYW4gYXV0aG9yIGluIHRoZSBsaXN0 DQoJalF1ZXJ5KCJmb3JtIHRhYmxlI2xpc3QgdHIiKS5lYWNoKGZ1bmN0aW9uKGUpIHsNCgkJ dmFyIHR0ID0gJyc7DQoJCXZhciByb3cgPSBqUXVlcnkodGhpcyk7DQoJCWlmIChyb3cuYXR0 cigidGl0bGUiKSA9PSAnJykgew0KCQkJdmFyIHBlcnNvbiA9IHJvdy5maW5kKCJ0ZDpmaXJz dCIpLnRleHQoKTsNCgkJCXNlbmRBc3luY0V2ZW50KHsNCgkJCQkJZXZlbnQ6IHRleHRwYXR0 ZXJuLmV2ZW50LA0KCQkJCQlzdGVwOiAnc21kX2Jpb19nZXRfZWJpbycsDQoJCQkJCWlkOiBw ZXJzb24NCgkJCQl9LCBmdW5jdGlvbihkYXRhKSB7DQoJCQkJCWRhdGEgPSBqUXVlcnkoZGF0 YSk7DQoJCQkJCQl2YXIgZW50cnkgPSBkYXRhLmZpbmQoJ3VzZXJfcmVmJyk7DQoJCQkJCQlv dXQgPSAnJzsNCgkJCQkJCWVudHJ5Lm5leHRBbGwoKS5lYWNoKGZ1bmN0aW9uKGl0ZW0pIHsN CgkJCQkJCQlub2RlID0galF1ZXJ5KHRoaXMpLmNvbnRleHQubm9kZU5hbWU7DQoJCQkJCQkJ aWYgKG5vZGUgIT0gJ2h0dHAtc3RhdHVzJykgew0KCQkJCQkJCQl2YWxsID0galF1ZXJ5KHRo aXMpLmF0dHIoJ3ZhbHVlJyk7DQoJCQkJCQkJCWlmICh2YWxsKSB7DQoJCQkJCQkJCQl2c3Bs aXQgPSB2YWxsLnNwbGl0KCc6OicpOw0KCQkJCQkJCQkJaWYgKHZzcGxpdFswXS5pbmRleE9m KCdzbWRfaW1hZ2UnKSA8IDApIHsNCgkJCQkJCQkJCQlvdXQgKz0gKCh2c3BsaXQubGVuZ3Ro PjEpID8gdnNwbGl0WzBdIDogbm9kZSkgKyAnOiAnOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJ dmFsbCA9ICgodnNwbGl0Lmxlbmd0aD4xKSA/IHZzcGxpdFsxXSA6IHZzcGxpdFswXSk7DQoJ CQkJCQkJCQlvdXQgKz0gdmFsbCArICc8YnIvPic7DQoJCQkJCQkJCX0gZWxzZSB7DQoJCQkJ CQkJCQlvdXQgKz0gbm9kZSsnOiAnOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJfSk7 DQoJCQkJCQlyb3cuYXR0cigidGl0bGUiLCBvdXQpOw0KCQkJCQl9DQoJCQkpOw0KCQl9DQoN CgkJeE9mZnNldCA9IDMwOw0KCQl5T2Zmc2V0ID0gMjU7DQoJCWhvdkl0ZW0gPSByb3cuZmlu ZCgidGQ6bGFzdCIpLnByZXYoKTsNCgkJaG92SXRlbS5ob3ZlcihmdW5jdGlvbihlKSB7DQoJ CQl0dCA9IGpRdWVyeSh0aGlzKS5wYXJlbnQoKS5hdHRyKCJ0aXRsZSIpOw0KCQkJaWYgKHR0 ICE9ICcnKSB7DQoJCQkJalF1ZXJ5KHRoaXMpLnBhcmVudCgpLmF0dHIoInRpdGxlIiwgIiIp Ow0KCQkJCWpRdWVyeSgiYm9keSIpLmFwcGVuZCgiPHAgaWQ9J3Rvb2x0aXAnPiIrIHR0ICsi PC9wPiIpOw0KCQkJCWpRdWVyeSgiI3Rvb2x0aXAiKQ0KCQkJCQkuY3NzKCJ0b3AiLChlLnBh Z2VZIC0geE9mZnNldCkgKyAicHgiKQ0KCQkJCQkuY3NzKCJsZWZ0IiwoZS5wYWdlWCArIHlP ZmZzZXQpICsgInB4IikNCgkJCQkJLmZhZGVJbigiZmFzdCIpOw0KCQkJfQ0KCQl9LA0KCQlm dW5jdGlvbigpIHsNCgkJCWpRdWVyeSh0aGlzKS5wYXJlbnQoKS5hdHRyKCJ0aXRsZSIsIHR0 KTsNCgkJCWpRdWVyeSgiI3Rvb2x0aXAiKS5yZW1vdmUoKTsNCgkgICAgfSk7DQoJCWhvdkl0 ZW0ubW91c2Vtb3ZlKGZ1bmN0aW9uKGUpIHsNCgkJCWpRdWVyeSgiI3Rvb2x0aXAiKQ0KCQkJ CS5jc3MoInRvcCIsKGUucGFnZVkgLSB4T2Zmc2V0KSArICJweCIpDQoJCQkJLmNzcygibGVm dCIsKGUucGFnZVggKyB5T2Zmc2V0KSArICJweCIpOw0KCQl9KTsNCg0KDQoJfSk7DQoNCgkv LyBHcmV5IG91dCB0aGUgU2l6ZSBib3ggZm9yIHRob3NlIGl0ZW1zIHRoYXQgZG9uJ3QgdXNl IGl0DQoJalF1ZXJ5KCIjcGFnZS1zbWRfYmlvIC5saXN0W25hbWU9J3R5cGUnXSIpLmNoYW5n ZShmdW5jdGlvbigpIHsNCgkJdmFyIHRoZVR5cGUgPSBqUXVlcnkoIiNwYWdlLXNtZF9iaW8g Lmxpc3RbbmFtZT0ndHlwZSddIG9wdGlvbjpzZWxlY3RlZCIpLnZhbCgpOw0KCQl2YXIgZGVz dCA9ICIjcGFnZS1zbWRfYmlvIGlucHV0W25hbWU9J3NpemUnXSI7DQoJCWlmICh0aGVUeXBl ID09ICdsaXN0JyB8fCB0aGVUeXBlID09ICdyYWRpbycgfHwgdGhlVHlwZSA9PSAneWVzbm9y YWRpbycgfHwgdGhlVHlwZSA9PSAnY2hlY2tib3gnKSB7DQoJCQlqUXVlcnkoZGVzdCkuYXR0 cigiZGlzYWJsZWQiLCB0cnVlKTsNCgkJCWpRdWVyeShkZXN0KS5wYXJlbnQoKS5wcmV2KCku Y3NzKCJjb2xvciIsICcjOTk5Jyk7DQoJCX0gZWxzZSB7DQoJCQlqUXVlcnkoZGVzdCkuYXR0 cigiZGlzYWJsZWQiLCBmYWxzZSk7DQoJCQlqUXVlcnkoZGVzdCkucGFyZW50KCkucHJldigp LmNzcygiY29sb3IiLCAnJyk7DQoJCX0NCgl9KS5jaGFuZ2UoKTsNCg0KCS8vIFBvcCB1cCB0 aGUgaGVscCB0b29sdGlwcyBiYXNlZCBvbiB0aGUgY3VycmVudCBUeXBlDQoJalF1ZXJ5KCIu cG9waGVscC5zbWRfYmlvX3NpemUiKS5ob3ZlcigNCgkJZnVuY3Rpb24oZSkgew0KCQkJdmFy IHRoZVR5cGUgPSBqUXVlcnkoIiNwYWdlLXNtZF9iaW8gLmxpc3RbbmFtZT0ndHlwZSddIG9w dGlvbjpzZWxlY3RlZCIpLnZhbCgpOw0KCQkJc3BhbmlkID0gJ3NwYW4jc21kX2Jpb19zaXpl X2hlbHBfJyt0aGVUeXBlOw0KCQkJdGhpcy50aXRsZSA9IGpRdWVyeShzcGFuaWQpLmF0dHIo InRpdGxlIik7DQoJCX0sIGZ1bmN0aW9uKGUpIHsNCgkJCXRoaXMudGl0bGUgPSAnJzsNCgkJ fQ0KCSk7DQoJalF1ZXJ5KCIucG9waGVscC5zbWRfYmlvX3ZhbCIpLmhvdmVyKA0KCQlmdW5j dGlvbihlKSB7DQoJCQl2YXIgdGhlVHlwZSA9IGpRdWVyeSgiI3BhZ2Utc21kX2JpbyAubGlz dFtuYW1lPSd0eXBlJ10gb3B0aW9uOnNlbGVjdGVkIikudmFsKCk7DQoJCQlzcGFuaWQgPSAn c3BhbiNzbWRfYmlvX3ZhbF9oZWxwXycrdGhlVHlwZTsNCgkJCXRoaXMudGl0bGUgPSBqUXVl cnkoc3BhbmlkKS5hdHRyKCJ0aXRsZSIpOw0KCQl9LCBmdW5jdGlvbihlKSB7DQoJCQl0aGlz LnRpdGxlID0gJyc7DQoJCX0NCgkpOw0KfSk7DQovL11dPg0KPC9zY3JpcHQ+DQp7JGNzc30N CkVPSlM7DQoJCX0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBNYWtlIHRo ZSBuYW1lL3ZhbCBwYWlycyBmb3Igc2VsZWN0SW5wdXQgLyByYWRpbyAvIGNoZWNrYm94IHNl dHMNCmZ1bmN0aW9uIHNtZF9iaW9fc3BsaXR2YWwoJHZhbCkgew0KCSRzZWx2ID0gYXJyYXko KTsNCg0KCSR3dmFscyA9IGV4cGxvZGUoJywnLCAkdmFsKTsNCglmb3JlYWNoICgkd3ZhbHMg YXMgJHd2YWwpIHsNCgkJJHBydHMgPSBleHBsb2RlKCc9PicsICR3dmFsKTsNCgkJaWYgKGNv dW50KCRwcnRzKSA9PSAxKSB7DQoJCQkkcHJ0c1sxXSA9ICRwcnRzWzBdOw0KCQkJJHBydHNb MF0gPSBzbWRfYmlvX3Nhbml0aXplKCRwcnRzWzBdKTsNCgkJfQ0KCQkkc2Vsdlt0cmltKCRw cnRzWzBdKV0gPSB0cmltKCRwcnRzWzFdKTsNCgl9DQoJcmV0dXJuICRzZWx2Ow0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFN1cGVyLXNhbml0aXplIHRoZSBwYXNz ZWQgdmFsdWUgc28gd2UgY2FuIG1ha2UgdmFyaWFibGUgbmFtZXMgZnJvbSB0aGUgcmV0dXJu ZWQgc3RyaW5nDQpmdW5jdGlvbiBzbWRfYmlvX3Nhbml0aXplKCR2YWwpIHsNCglyZXR1cm4g c3RydG9sb3dlcihzdHJfcmVwbGFjZSgiLSIsICJfIiwgc2FuaXRpemVGb3JVcmwoJHZhbCkp KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYmlv X3NhdmUoJGV2dCwgJHN0cCkgew0KCWdsb2JhbCAkcHJlZnM7DQoNCglpZiAoc21kX2Jpb190 YWJsZV9leGlzdCgpKSB7DQoJCSR0YXJnZXR2YXJzID0gYXJyYXkoKTsNCgkJZXh0cmFjdChk b1NsYXNoKHBzYShhcnJheSgncHJpdnMnLCAnbmFtZScsICdlbWFpbCcsICdSZWFsTmFtZScs ICd1c2VyX2lkJykpKSk7DQoJCWlmIChnZXRfcHJlZignc21kX2Jpb19zYW5pdGl6ZV9uYW1l JywgMCkgPiAwKSB7DQoJCQkvLyBTYW5pdGl6ZSBhbmQgcGFzcyB0aGUgbmV3IG5hbWUgZm9y d2FyZCB0byB0aGUgYWN0dWFsIHR4cF91c2VyIHNhdmUgcm91dGluZQ0KCQkJJG5hbWUgPSBz dHJ0b2xvd2VyKHNhbml0aXplRm9yVXJsKCRuYW1lKSk7DQoJCQkkX1BPU1RbJ25hbWUnXSA9 ICRuYW1lOw0KCQl9DQoJCSRsZW5ndGggPSBmdW5jdGlvbl9leGlzdHMoJ21iX3N0cmxlbicp ID8gbWJfc3RybGVuKCRuYW1lLCAnOGJpdCcpIDogc3RybGVuKCRuYW1lKTsNCg0KCQlpZiAo KCR1c2VyX2lkIHx8ICRuYW1lKSBhbmQgJGxlbmd0aCA8PSA2NCBhbmQgaXNfdmFsaWRfZW1h aWwoJGVtYWlsKSkgew0KCQkJZm9yZWFjaCAoJF9QT1NUIGFzICRpZHggPT4gJGl0ZW0pIHsN CgkJCQlpZiAoc3RycG9zKCRpZHgsICdzbWRfYmlvXycpID09PSAwKSB7DQoJCQkJCSR0YXJn ZXR2YXJzW10gPSAkaWR4Ow0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gRG91YmxlIGRlLWNsdXRj aCBhZ2Fpbi4uLiBkYW1taXQgOi0oDQoJCQkkdXNlcl9pZCA9IGdwcygndXNlcl9pZCcpOw0K CQkJaWYgKCR1c2VyX2lkKSB7DQoJCQkJJHVzZXJfcmVmID0gc2FmZV9maWVsZCgnbmFtZScs J3R4cF91c2VycycsInVzZXJfaWQgPSAnJHVzZXJfaWQnIik7DQoJCQl9IGVsc2Ugew0KCQkJ CSR1c2VyX3JlZiA9ICRuYW1lOw0KCQkJfQ0KDQoJCQlleHRyYWN0KGdwc2EoJHRhcmdldHZh cnMpKTsNCgkJCSRiY29scyA9IGdldFRoaW5ncygnZGVzY3JpYmUgYCcuUEZYLlNNRF9CSU8u J2AnKTsNCgkJCSRzcWxTZXQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJHRhcmdldHZhcnMg YXMgJHZhcikgew0KCQkJCSRjb2xuYW1lID0gc3RyX3JlcGxhY2UoJ3NtZF9iaW9fJywgJycs ICR2YXIpOw0KCQkJCWlmIChpbl9hcnJheSgkY29sbmFtZSwgJGJjb2xzKSkgew0KCQkJCQkk c3FsU2V0W10gPSAiYCRjb2xuYW1lYCA9ICciLmRvU2xhc2goJCR2YXIpLiInIjsNCgkJCQl9 DQoJCQl9DQoJCQlpZiAoJHNxbFNldCkgew0KCQkJCSRycyA9IHNhZmVfdXBzZXJ0KFNNRF9C SU8sIGpvaW4oJywnLCAkc3FsU2V0KSwgImB1c2VyX3JlZmAgPSAnJHVzZXJfcmVmJyIpOw0K CQkJfQ0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIHNtZF9iaW9fZGVsZXRlKCRldnQsICRzdHApIHsNCglnbG9iYWwgJHR4cF91c2VyOw0K DQoJaWYgKHNtZF9iaW9fdGFibGVfZXhpc3QoKSkgew0KCQkvLyBTaW5jZSB3ZSBhcmUgZXhl Y3V0aW5nICdwcmUnIGRlbGV0ZSB3ZSBuZWVkIHRvIHVuZm9ydHVuYXRlbHkgZHVwbGljYXRl IHNvbWUgb2YgdGhlIGNoZWNrcw0KCQkvLyBmcm9tIHR4cF9hZG1pbi5waHAgc28gd2UgbWlu aW1pc2UgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGV0ZSBzb21lb25lIGJ5IG1pc3Rha2UNCgkJ JHNlbGVjdGVkID0gcHMoJ3NlbGVjdGVkJyk7DQoJCSRtZXRob2QgPSBwcygnZWRpdF9tZXRo b2QnKTsNCgkJaWYgKCEkc2VsZWN0ZWQgb3IgIWlzX2FycmF5KCRzZWxlY3RlZCkpIHsNCgkJ CXJldHVybjsNCgkJfQ0KCQlpZiAoJG1ldGhvZCAhPSAnZGVsZXRlJykgew0KCQkJcmV0dXJu Ow0KCQl9DQoNCgkJJG5hbWVzID0gc2FmZV9jb2x1bW4oJ25hbWUnLCAndHhwX3VzZXJzJywg Im5hbWUgSU4gKCciLmpvaW4oIicsJyIsIGRvU2xhc2goJHNlbGVjdGVkKSkuIicpIEFORCBu YW1lICE9ICciLmRvU2xhc2goJHR4cF91c2VyKS4iJyIpOw0KCQlpZiAoISRuYW1lcykgcmV0 dXJuOw0KDQoJCSRhc3NpZ25fYXNzZXRzID0gcHMoJ2Fzc2lnbl9hc3NldHMnKTsNCgkJaWYg KCRhc3NpZ25fYXNzZXRzID09PSAnJykgew0KCQkJcmV0dXJuOw0KCQl9IGVsc2VpZiAoaW5f YXJyYXkoJGFzc2lnbl9hc3NldHMsICRuYW1lcykpIHsNCgkJCXJldHVybjsNCgkJfSBlbHNl IHsNCgkJCS8vIEFsbCB0aGUgY2hlY2tzIHBhc3NlZCAtLSBkbyBpdA0KCQkJc2FmZV9kZWxl dGUoU01EX0JJTywgInVzZXJfcmVmIElOICgnIi5qb2luKCInLCciLCBkb1NsYXNoKCRuYW1l cykpLiInKSIpOw0KCQl9DQoJfQ0KfQ0KDQoNCi8vICoqKioqKioqKioqKioqKioqKioqKioq Kg0KLy8gQklPIENPTkZJR1VSQVRJT04NCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Ly8gVGFiIGhhbmRsZXINCmZ1bmN0aW9uIHNtZF9iaW8oJGV2ZW50LCAkc3RlcCkgew0KCWlm KCEkc3RlcCBvciAhaW5fYXJyYXkoJHN0ZXAsIGFycmF5KA0KCQkJJ3NtZF9iaW9fbWV0YV9h ZGQnLA0KCQkJJ3NtZF9iaW9fbWV0YV9kZWwnLA0KCQkJJ3NtZF9iaW9fbWV0YV9zYXZlJywN CgkJKSkpIHsNCgkJc21kX2Jpb19jb25maWcoJycpOw0KCX0gZWxzZSAkc3RlcCgpOw0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9iaW9fY29uZmln KCRtZXNzYWdlKSB7DQoJaWYgKCFzbWRfYmlvX3RhYmxlX2V4aXN0KCkpIHsNCgkJc21kX2Jp b19pbnN0YWxsKCcnKTsNCgkJZXhpdDsNCgl9DQoNCglwYWdldG9wKHNtZF9iaW9fZ1R4dCgn YWRtaW5fdGFiJyksICRtZXNzYWdlKTsNCg0KCWVjaG8gc21kX2Jpb19tZXRhX2VkaXQoKTsN CgllY2hvIHNtZF9iaW9fbWV0YV9saXN0KCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KZnVuY3Rpb24gc21kX2Jpb19tZXRhX2VkaXQoKSB7DQoJZ2xvYmFsICRzbWRf YmlvX3R5cGVzOw0KDQoJJHZhcnMgPSBhcnJheSgnc3RlcCcsICdpZCcsICd0aXRsZScsICdu YW1lJywgJ3R5cGUnLCAnc2l6ZScsICd2YWwnLCAncG9zaXRpb24nKTsNCgkkcnMgPSBhcnJh eSgpOw0KDQoJZXh0cmFjdChncHNhKCR2YXJzKSk7DQoJaWYgKCRpZCAmJiAkc3RlcCA9PSAn bWV0YV9lZGl0Jykgew0KCQkkaWQgPSBhc3NlcnRfaW50KCRpZCk7DQoJCSRycyA9IHNhZmVf cm93KCcqJywgU01EX0JJT19NRVRBLCAiaWQgPSAkaWQiKTsNCgkJZXh0cmFjdCgkcnMpOw0K CX0NCg0KCWlmICgkc3RlcCA9PSAnc21kX2Jpb19tZXRhX3NhdmUnIHx8ICRzdGVwID09ICdz bWRfYmlvX21ldGFfYWRkJyB8fCAkc3RlcCA9PSAnc21kX2Jpb19tZXRhX2RlbCcpIHsNCgkJ Zm9yZWFjaCAoJHZhcnMgYXMgJHZhcikgew0KCQkJJCR2YXIgPSAnJzsNCgkJfQ0KCX0NCg0K CSRjYXB0aW9uID0gc21kX2Jpb19nVHh0KCgkc3RlcCA9PSAnbWV0YV9lZGl0JykgPyAnbWV0 YV9lZGl0JyA6ICdtZXRhX2FkZCcpOw0KDQoJLy8gTWFrZSB0aGUgbmFtZS92YWwgcGFpcnMg Zm9yIHNlbGVjdElucHV0DQoJJHNlbHYgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCRzbWRfYmlv X3R5cGVzIGFzICR3aWR4ID0+ICR3dmFsKSB7DQoJCSRzZWx2WyR3aWR4XSA9ICR3dmFsOw0K CX0NCg0KCXJldHVybiBmb3JtKA0KCQloZWQoJGNhcHRpb24sIDMsJyBzdHlsZT0idGV4dC1h bGlnbjogY2VudGVyOyInKS4NCg0KCQlzdGFydFRhYmxlKCdlZGl0JywgJycsICdlZGl0LXBh bmUnKS4NCg0KCQl0cigNCgkJCWZMYWJlbENlbGwoJ25hbWUnKS4NCgkJCSgkaWQgJiYgJHN0 ZXAgPT0gJ21ldGFfZWRpdCcgPyB0ZChzdHJvbmcoJG5hbWUpKSA6IGZJbnB1dENlbGwoJ25h bWUnLCAkbmFtZSkpDQoJCSkuDQoNCgkJdHIoDQoJCQlmTGFiZWxDZWxsKCd0aXRsZScpLg0K CQkJZklucHV0Q2VsbCgndGl0bGUnLCAkdGl0bGUpDQoJCSkuDQoNCgkJdHIoDQoJCQlmTGFi ZWxDZWxsKCd0eXBlJykuDQoJCQl0ZChzZWxlY3RJbnB1dCgndHlwZScsICRzZWx2LCAkdHlw ZSwgZmFsc2UpKQ0KCQkpLg0KDQoJCXRyKA0KCQkJZkxhYmVsQ2VsbChzbWRfYmlvX2dUeHQo J3NpemUnKSkuDQoJCQlmSW5wdXRDZWxsKCdzaXplJywgJHNpemUpLnRkKHRhZyhzbWRfYmlv X2dUeHQoJ2hlbHAnKSwgJ2EnLCAnIGNsYXNzPSJwb3BoZWxwIHNtZF9iaW9fc2l6ZSInKSkN CgkJKS4NCg0KCQl0cigNCgkJCWZMYWJlbENlbGwoJ3ZhbHVlJykuDQoJCQl0ZCh0ZXh0X2Fy ZWEoJ3ZhbCcsICc1MCcsICcxMjgnLCAkdmFsKSkudGQodGFnKHNtZF9iaW9fZ1R4dCgnaGVs cCcpLCAnYScsICcgY2xhc3M9InBvcGhlbHAgc21kX2Jpb192YWwiJykpDQoJCSkuDQoNCgkJ dHIoDQoJCQlmTGFiZWxDZWxsKHNtZF9iaW9fZ1R4dCgncG9zaXRpb24nKSkuDQoJCQlmSW5w dXRDZWxsKCdwb3NpdGlvbicsICRwb3NpdGlvbikNCgkJKS4NCg0KCQl0cigNCgkJCXRkKCku DQoJCQl0ZCgNCgkJCQlmSW5wdXQoJ3N1Ym1pdCcsICcnLCBnVHh0KCdzYXZlJyksICdwdWJs aXNoJykNCgkJCSkNCgkJKS4NCg0KCQllbmRUYWJsZSgpLg0KDQoJCWVJbnB1dCgnc21kX2Jp bycpLg0KCQkoJGlkID8gaElucHV0KCdpZCcsICRpZCkuaElucHV0KCduYW1lJywgJG5hbWUp LnNJbnB1dCgnc21kX2Jpb19tZXRhX3NhdmUnKSA6IHNJbnB1dCgnc21kX2Jpb19tZXRhX2Fk ZCcpKS4NCgkJdGFnKCcgJywgJ3NwYW4nLCAnIGlkPSJzbWRfYmlvX3NpemVfaGVscF90ZXh0 X2lucHV0IiB0aXRsZT0iJy5zbWRfYmlvX2dUeHQoJ3NpemVoZWxwX3RleHRfaW5wdXQnKS4n IicpLg0KCQl0YWcoJyAnLCAnc3BhbicsICcgaWQ9InNtZF9iaW9fc2l6ZV9oZWxwX2xpc3Qi IHRpdGxlPSInLnNtZF9iaW9fZ1R4dCgnaGVscF91bnVzZWQnKS4nIicpLg0KCQl0YWcoJyAn LCAnc3BhbicsICcgaWQ9InNtZF9iaW9fc2l6ZV9oZWxwX3JhZGlvIiB0aXRsZT0iJy5zbWRf YmlvX2dUeHQoJ2hlbHBfdW51c2VkJykuJyInKS4NCgkJdGFnKCcgJywgJ3NwYW4nLCAnIGlk PSJzbWRfYmlvX3NpemVfaGVscF95ZXNub3JhZGlvIiB0aXRsZT0iJy5zbWRfYmlvX2dUeHQo J2hlbHBfdW51c2VkJykuJyInKS4NCgkJdGFnKCcgJywgJ3NwYW4nLCAnIGlkPSJzbWRfYmlv X3NpemVfaGVscF9jaGVja2JveCIgdGl0bGU9Iicuc21kX2Jpb19nVHh0KCdoZWxwX3VudXNl ZCcpLiciJykuDQoJCXRhZygnICcsICdzcGFuJywgJyBpZD0ic21kX2Jpb19zaXplX2hlbHBf dGV4dGFyZWEiIHRpdGxlPSInLnNtZF9iaW9fZ1R4dCgnc2l6ZWhlbHBfdGV4dGFyZWEnKS4n IicpLg0KCQl0YWcoJyAnLCAnc3BhbicsICcgaWQ9InNtZF9iaW9fc2l6ZV9oZWxwX2ltYWdl IiB0aXRsZT0iJy5zbWRfYmlvX2dUeHQoJ3NpemVoZWxwX2ltYWdlJykuJyInKS4NCgkJdGFn KCcgJywgJ3NwYW4nLCAnIGlkPSJzbWRfYmlvX3NpemVfaGVscF9kYXRldGltZSIgdGl0bGU9 Iicuc21kX2Jpb19nVHh0KCdzaXplaGVscF90ZXh0X2lucHV0JykuJyInKS4NCg0KCQl0YWco JyAnLCAnc3BhbicsICcgaWQ9InNtZF9iaW9fdmFsX2hlbHBfdGV4dF9pbnB1dCIgdGl0bGU9 Iicuc21kX2Jpb19nVHh0KCd2YWxoZWxwX3RleHRfaW5wdXQnKS4nIicpLg0KCQl0YWcoJyAn LCAnc3BhbicsICcgaWQ9InNtZF9iaW9fdmFsX2hlbHBfbGlzdCIgdGl0bGU9Iicuc21kX2Jp b19nVHh0KCd2YWxoZWxwX2xyYycpLiciJykuDQoJCXRhZygnICcsICdzcGFuJywgJyBpZD0i c21kX2Jpb192YWxfaGVscF9yYWRpbyIgdGl0bGU9Iicuc21kX2Jpb19nVHh0KCd2YWxoZWxw X2xyYycpLiciJykuDQoJCXRhZygnICcsICdzcGFuJywgJyBpZD0ic21kX2Jpb192YWxfaGVs cF95ZXNub3JhZGlvIiB0aXRsZT0iJy5zbWRfYmlvX2dUeHQoJ3ZhbGhlbHBfeW5yJykuJyIn KS4NCgkJdGFnKCcgJywgJ3NwYW4nLCAnIGlkPSJzbWRfYmlvX3ZhbF9oZWxwX2NoZWNrYm94 IiB0aXRsZT0iJy5zbWRfYmlvX2dUeHQoJ3ZhbGhlbHBfbHJjJykuJyInKS4NCgkJdGFnKCcg JywgJ3NwYW4nLCAnIGlkPSJzbWRfYmlvX3ZhbF9oZWxwX3RleHRhcmVhIiB0aXRsZT0iJy5z bWRfYmlvX2dUeHQoJ3ZhbGhlbHBfdGV4dF9pbnB1dCcpLiciJykuDQoJCXRhZygnICcsICdz cGFuJywgJyBpZD0ic21kX2Jpb192YWxfaGVscF9pbWFnZSIgdGl0bGU9Iicuc21kX2Jpb19n VHh0KCd2YWxoZWxwX2ltYWdlJykuJyInKS4NCgkJdGFnKCcgJywgJ3NwYW4nLCAnIGlkPSJz bWRfYmlvX3ZhbF9oZWxwX2RhdGV0aW1lIiB0aXRsZT0iJy5zbWRfYmlvX2dUeHQoJ3ZhbGhl bHBfdGV4dF9pbnB1dCcpLiciJykNCgkpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCmZ1bmN0aW9uIHNtZF9iaW9fbWV0YV9saXN0KCkgew0KCWdsb2JhbCAkc21kX2Jp b190eXBlczsNCg0KCWV4dHJhY3QoZ3BzYShhcnJheSgnc29ydCcsICdkaXInLCAnY3JpdCcs ICdzZWFyY2hfbWV0aG9kJykpKTsNCglpZiAoJHNvcnQgPT09ICcnKSAkc29ydCA9IGdldF9w cmVmKCdzbWRfYmlvX21ldGFfc29ydF9jb2x1bW4nLCAnbmFtZScpOw0KCWlmICgkZGlyID09 PSAnJykgJGRpciA9IGdldF9wcmVmKCdzbWRfYmlvX21ldGFfc29ydF9kaXInLCAnYXNjJyk7 DQoJJGRpciA9ICgkZGlyID09ICdkZXNjJykgPyAnZGVzYycgOiAnYXNjJzsNCg0KCWlmICgh aW5fYXJyYXkoJHNvcnQsIGFycmF5KCduYW1lJywgJ3RpdGxlJywgJ3R5cGUnLCAnc2l6ZScs ICd2YWwnLCAncG9zaXRpb24nKSkpICRzb3J0ID0gJ3Bvc2l0aW9uJzsNCg0KCSRzb3J0X3Nx bCAgID0gJHNvcnQuJyAnLiRkaXI7DQoNCglzZXRfcHJlZignc21kX2Jpb19tZXRhX3NvcnRf Y29sdW1uJywgJHNvcnQsICdzbWRfYmlvJywgMiwgJycsIDAsIFBSRUZfUFJJVkFURSk7DQoJ c2V0X3ByZWYoJ3NtZF9iaW9fbWV0YV9zb3J0X2RpcicsICRkaXIsICdzbWRfYmlvJywgMiwg JycsIDAsIFBSRUZfUFJJVkFURSk7DQoNCgkkc3dpdGNoX2RpciA9ICgkZGlyID09ICdkZXNj JykgPyAnYXNjJyA6ICdkZXNjJzsNCg0KCSRycyA9IHNhZmVfcm93c19zdGFydCgnKicsIFNN RF9CSU9fTUVUQSwgJzEgPSAxIE9SREVSIEJZICcuJHNvcnRfc3FsKTsNCg0KCWlmICgkcnMp IHsNCgkJZWNobyAnPGZvcm0gYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9zdCIgbmFt ZT0ibG9uZ2Zvcm0iIG9uc3VibWl0PSJyZXR1cm4gdmVyaWZ5KFwnJy5nVHh0KCdhcmVfeW91 X3N1cmUnKS4nXCcpIj4nLg0KDQoJCXN0YXJ0VGFibGUoJ2xpc3QnKS4NCgkJdHIoDQoJCQlj b2x1bW5faGVhZCgnbmFtZScsICduYW1lJywgJ3NtZF9iaW8nLCB0cnVlLCAkc3dpdGNoX2Rp ciwgJycsICcnLCAoJ25hbWUnID09ICRzb3J0KSA/ICRkaXIgOiAnJykuDQoJCQljb2x1bW5f aGVhZCgndGl0bGUnLCAndGl0bGUnLCAnc21kX2JpbycsIHRydWUsICRzd2l0Y2hfZGlyLCAn JywgJycsICgndGl0bGUnID09ICRzb3J0KSA/ICRkaXIgOiAnJykuDQoJCQljb2x1bW5faGVh ZCgndHlwZScsICd0eXBlJywgJ3NtZF9iaW8nLCB0cnVlLCAkc3dpdGNoX2RpciwgJycsICcn LCAoJ3R5cGUnID09ICRzb3J0KSA/ICRkaXIgOiAnJykuDQoJCQljb2x1bW5faGVhZChzbWRf YmlvX2dUeHQoJ3NpemUnKSwgJ3NpemUnLCAnc21kX2JpbycsIHRydWUsICRzd2l0Y2hfZGly LCAnJywgJycsICgnc2l6ZScgPT0gJHNvcnQpID8gJGRpciA6ICcnKS4NCgkJCWNvbHVtbl9o ZWFkKCd2YWx1ZScsICd2YWwnLCAnc21kX2JpbycsIHRydWUsICRzd2l0Y2hfZGlyLCAnJywg JycsICgndmFsJyA9PSAkc29ydCkgPyAkZGlyIDogJycpLg0KCQkJY29sdW1uX2hlYWQoc21k X2Jpb19nVHh0KCdwb3NpdGlvbicpLCAncG9zaXRpb24nLCAnc21kX2JpbycsIHRydWUsICRz d2l0Y2hfZGlyLCAnJywgJycsICgncG9zaXRpb24nID09ICRzb3J0KSA/ICRkaXIgOiAnJyku DQoJCQloQ2VsbCgpLg0KCQkJaENlbGwoKQ0KCQkpOw0KDQoJCXdoaWxlICgkYSA9IG5leHRS b3coJHJzKSkgew0KCQkJZXh0cmFjdChkb1NwZWNpYWwoJGEpKTsNCg0KCQkJZWNobyB0cigN CgkJCQl0ZCgkbmFtZSkuDQoJCQkJdGQoJHRpdGxlKS4NCgkJCQl0ZCgkc21kX2Jpb190eXBl c1skdHlwZV0pLg0KCQkJCXRkKCRzaXplKS4NCgkJCQl0ZCgkdmFsLDIwMCkuDQoJCQkJdGQo JHBvc2l0aW9uKS4NCgkJCQl0ZChlTGluaygnc21kX2JpbycsICdtZXRhX2VkaXQnLCAnaWQn LCAkaWQsIGdUeHQoJ2VkaXQnKSkpLg0KCQkJCXRkKGRMaW5rKCdzbWRfYmlvJywgJ3NtZF9i aW9fbWV0YV9kZWwnLCAnaWQnLCAkaWQsIDEsICduYW1lJywgJG5hbWUpKQ0KCQkJKTsNCgkJ fQ0KDQoJCWVjaG8gZW5kVGFibGUoKS4nPC9mb3JtPic7DQoJfQ0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9iaW9fbWV0YV9tYWtlX2xpc3QoJHZh bCkgew0KCSR3dmFscyA9IGRvX2xpc3QoJHZhbCwgJ1xyXG4nKTsNCglpZiAoY291bnQoJHd2 YWxzKSA9PSAxKSB7DQoJCSR3dmFscyA9IGRvX2xpc3QoJHZhbCk7DQoJfQ0KCXJldHVybiBq b2luKCcsICcsIGRvQXJyYXkoJHd2YWxzLCAndHJpbScpKTsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYmlvX21ldGFfc2F2ZSgpIHsNCglleHRy YWN0KGRvU2xhc2gocHNhKGFycmF5KCdpZCcsICduYW1lJywgJ3RpdGxlJywgJ3R5cGUnLCAn c2l6ZScsICd2YWwnLCAncG9zaXRpb24nKSkpKTsNCgkkaWQgPSBhc3NlcnRfaW50KCRpZCk7 DQoJJHZhbCA9IHNtZF9iaW9fbWV0YV9tYWtlX2xpc3QoJHZhbCk7DQoNCgkkcnMgPSBzYWZl X3VwZGF0ZShTTURfQklPX01FVEEsICINCgkJdGl0bGUgPSAnJHRpdGxlJywNCgkJdHlwZSA9 ICckdHlwZScsDQoJCXNpemUgPSAnJHNpemUnLA0KCQl2YWwgPSAnJHZhbCcsDQoJCXBvc2l0 aW9uID0gJyRwb3NpdGlvbiciLA0KCQkiaWQgPSAkaWQiDQoJKTsNCg0KCWlmICgkcnMpIHsN CgkJc21kX2Jpb19jb25maWcoDQoJCQlzbWRfYmlvX2dUeHQoJ21ldGFfdXBkYXRlZCcsIGFy cmF5KCd7bmFtZX0nID0+ICRuYW1lKSkNCgkJKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2Jpb19tZXRhX2FkZCgpIHsNCglleHRyYWN0 KGRvU2xhc2gocHNhKGFycmF5KCduYW1lJywgJ3RpdGxlJywgJ3R5cGUnLCAnc2l6ZScsICd2 YWwnLCAncG9zaXRpb24nKSkpKTsNCgkkbmFtZSA9IHNtZF9iaW9fc2FuaXRpemUoJG5hbWUp Ow0KDQoJaWYgKCFlbXB0eSgkbmFtZSkgJiYgc21kX2Jpb19tZXRhX2NoZWNrKCRuYW1lKSkg ew0KCQkkc2l6ZSA9IChlbXB0eSgkc2l6ZSkpID8gMjUgOiAkc2l6ZTsNCgkJLy9UT0RPOiBt YWtlIHRoZSBzZWxlY3Rpb24gb2YgY29sdW1uIG1vcmUgaW50ZWxsaWdlbnQgYmFzZWQgb24g dGhlIGdpdmVuIHR5cGUNCgkJaWYgKCR0eXBlID09ICd0ZXh0YXJlYScpIHsNCgkJCSRhc2l6 ZSA9ICc0MDk2JzsgLy9UT0RPOiBGaW5kIGEgd2F5IHRvIHVzZXIgc3BlY2lmeSB0aGlzDQoJ CQkkY29sdHlwZSA9ICd0ZXh0JzsNCgkJfSBlbHNlIHsNCgkJCSRhc2l6ZSA9ICc2NCc7IC8v VE9ETzogRmluZCBhIHdheSB0byB1c2VyIHNwZWNpZnkgdGhpcw0KCQkJJGNvbHR5cGUgPSAn dmFyY2hhcic7DQoJCX0NCgkJJHJldCA9IHNhZmVfYWx0ZXIoU01EX0JJTywgIkFERCBgJG5h bWVgICRjb2x0eXBlKCRhc2l6ZSkgTlVMTCIpOw0KCQkkdmFsID0gc21kX2Jpb19tZXRhX21h a2VfbGlzdCgkdmFsKTsNCg0KCQlpZiAoJHJldCkgew0KCQkJJHJzID0gc2FmZV9pbnNlcnQo U01EX0JJT19NRVRBLCAiDQoJCQkJbmFtZSA9ICckbmFtZScsDQoJCQkJdGl0bGUgPSAnJHRp dGxlJywNCgkJCQl0eXBlID0gJyR0eXBlJywNCgkJCQlzaXplID0gJyRzaXplJywNCgkJCQl2 YWwgPSAnJHZhbCcsDQoJCQkJcG9zaXRpb24gPSAnJHBvc2l0aW9uJw0KCQkJIik7DQoNCgkJ CWlmICgkcnMpIHsNCgkJCQlzbWRfYmlvX2NvbmZpZyhzbWRfYmlvX2dUeHQoJ21ldGFfYWRk ZWQnKSk7DQoJCQkJcmV0dXJuOw0KCQkJfQ0KCQkJCQl9DQoJfQ0KDQoJc21kX2Jpb19jb25m aWcoYXJyYXkoc21kX2Jpb19nVHh0KCdtZXRhX25vdF9hZGRlZCcpLCBFX0VSUk9SKSk7DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2Jpb19tZXRh X2RlbCgpIHsNCglleHRyYWN0KGdwc2EoYXJyYXkoJ2lkJywnbmFtZScpKSk7DQoNCgkkaWQg PSBhc3NlcnRfaW50KCRpZCk7DQoJJG1lc3NhZ2UgPSBzbWRfYmlvX2dUeHQoJ21ldGFfbm90 X2RlbGV0ZWQnKTsNCg0KCSRleGlzdHMgPSBzbWRfYmlvX21ldGFfY2hlY2soJG5hbWUpOw0K CSRyZXQgPSBAc2FmZV9hbHRlcihTTURfQklPLCAiRFJPUCBDT0xVTU4gYCRuYW1lYCIpOw0K CWlmICgkcmV0IHx8ICRleGlzdHMpIHsNCgkJJHJldCA9IHNhZmVfZGVsZXRlKFNNRF9CSU9f TUVUQSwgImlkPSckaWQnIik7DQoJCSRtZXNzYWdlID0gc21kX2Jpb19nVHh0KCdtZXRhX2Rl bGV0ZWQnKTsNCgl9DQoNCglzbWRfYmlvX2NvbmZpZygkbWVzc2FnZSk7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2Jpb19tZXRhX2NoZWNrKCRj b2wpIHsNCgkkdWNvbHMgPSBnZXRUaGluZ3MoJ2Rlc2NyaWJlIGAnLlBGWC4ndHhwX3VzZXJz YCcpOw0KCSRiY29scyA9IGdldFRoaW5ncygnZGVzY3JpYmUgYCcuUEZYLlNNRF9CSU8uJ2An KTsNCgkkY29scyA9IGFycmF5X21lcmdlKCR1Y29scywgJGJjb2xzKTsNCiAJcmV0dXJuICgh aW5fYXJyYXkoJGNvbCwgJGNvbHMpKTsNCn0NCg0KDQovLyAqKioqKioqKioqKioqKioqKioq KioqKioNCi8vIFRBQkxFIEdFTkVSQVRJT04NCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KZnVuY3Rpb24gc21kX2Jpb190YWJsZV9leGlzdCgpIHsNCglpZiAoZ3BzKCdkZWJ1Zycp KSB7DQoJCWVjaG8gIisrIFRBQkxFICIuU01EX0JJT19NRVRBLiIgSEFTICIuY291bnQoQHNh ZmVfc2hvdygnY29sdW1ucycsIFNNRF9CSU9fTUVUQSkpLiIgQ09MVU1OUzsiOw0KCX0NCgly ZXR1cm4oQHNhZmVfc2hvdygnY29sdW1ucycsIFNNRF9CSU9fTUVUQSkpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9iaW9faW5zdGFsbCgkbWVz c2FnZSkgew0KCWdsb2JhbCAkc21kX2Jpb190eXBlczsNCg0KCSR2ZXJzaW9uID0gbXlzcWxf Z2V0X3NlcnZlcl9pbmZvKCk7DQoJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9IDA7DQoJ aWYgKCR2ZXJzaW9uIDwgIjQuMS4yIikgew0KCQkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCdd Kys7DQoJCXRyaWdnZXJfZXJyb3IoInNtZF9iaW8gcmVxdWlyZXMgTXlTUUwgdjQuMS4yIG9y IGdyZWF0ZXIuIik7DQoJfSBlbHNlIHsNCgkJJHJldCA9ICcnOw0KCQkkc3FsID0gYXJyYXko KTsNCgkJJHNxbFtdID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGAiLlBGWC5TTURf QklPLiJgICgNCgkJCWB1c2VyX3JlZmAgdmFyY2hhcig2NCkgTk9UIE5VTEwgZGVmYXVsdCAn JywNCgkJCVVOSVFVRSBLRVkgYHVzZXJfcmVmYCAoYHVzZXJfcmVmYCkNCgkJKSBFTkdJTkU9 TXlJU0FNIFBBQ0tfS0VZUz0xICI7DQoNCgkJJHNxbFtdID0gIkNSRUFURSBUQUJMRSBJRiBO T1QgRVhJU1RTIGAiLlBGWC5TTURfQklPX01FVEEuImAgKA0KCQkJYGlkYCBpbnQoNCkgTk9U IE5VTEwgYXV0b19pbmNyZW1lbnQsDQoJCQlgdGl0bGVgIHZhcmNoYXIoNjQpIE5VTEwgZGVm YXVsdCAnJywNCgkJCWBuYW1lYCB2YXJjaGFyKDY0KSBOT1QgTlVMTCBkZWZhdWx0ICcnLA0K CQkJYHR5cGVgIHNldCgiLmRvUXVvdGUoam9pbigiJywnIiwgYXJyYXlfa2V5cygkc21kX2Jp b190eXBlcykpKS4iKSBOT1QgTlVMTCBkZWZhdWx0ICd0ZXh0X2lucHV0JywNCgkJCWBzaXpl YCB2YXJjaGFyKDEwKSBOVUxMIGRlZmF1bHQgMCwNCgkJCWB2YWxgIHRleHQgTlVMTCBkZWZh dWx0ICcnLA0KCQkJYHBvc2l0aW9uYCB0aW55aW50KDMpIE5VTEwgZGVmYXVsdCAwLA0KCQkJ UFJJTUFSWSBLRVkgKGBpZGApLA0KCQkJVU5JUVVFIEtFWSAoYG5hbWVgKQ0KCQkpIEVOR0lO RT1NeUlTQU0gQVVUT19JTkNSRU1FTlQ9MSI7DQoNCgkJaWYoZ3BzKCdkZWJ1ZycpKSB7DQoJ CQlkbXAoJHNxbCk7DQoJCX0NCgkJZm9yZWFjaCAoJHNxbCBhcyAkcXJ5KSB7DQoJCQkkcmV0 ID0gc2FmZV9xdWVyeSgkcXJ5KTsNCgkJCWlmICgkcmV0PT09ZmFsc2UpIHsNCgkJCQkkR0xP QkFMU1sndHhwX2Vycl9jb3VudCddKys7DQoJCQkJZWNobyAiPGI+Ii4kR0xPQkFMU1sndHhw X2Vycl9jb3VudCddLiIuPC9iPiAiLm15c3FsX2Vycm9yKCkuIjxiciAvPlxuIjsNCgkJCQll Y2hvICI8IS0tXG4gJHFyeSBcbi0tPlxuIjsNCgkJCX0NCgkJfQ0KCX0NCg0KCWlmICgkR0xP QkFMU1sndHhwX2Vycl9jb3VudCddID09IDApIHsNCgkJJG1lc3NhZ2UgPSBzbWRfYmlvX2dU eHQoJ3RibF9pbnN0YWxsZWQnKTsNCgkJc21kX2Jpb19jb25maWcoJG1lc3NhZ2UpOw0KCX0g ZWxzZSB7DQoJCSRtZXNzYWdlID0gc21kX2Jpb19nVHh0KCd0Ymxfbm90X2luc3RhbGxlZCcp Ow0KCQlzbWRfYmlvX2NvbmZpZygkbWVzc2FnZSk7DQoJfQ0KfQ0KDQovLyAqKioqKioqKioq KioqKioqKioqKioqKioNCi8vIENMSUVOVC1TSURFIFRBR1MNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2Jpb19pbmZvKCRhdHRzLCAkdGhpbmc9TlVMTCkg ew0KCWdsb2JhbCAkdGhpc2FydGljbGU7DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQkn YXV0aG9yJyA9PiAnJywNCgkJJ2l0ZW1zJyA9PiAnU01EX0FMTCcsDQoJCSdleGNsdWRlJyA9 PiAnJywNCgkJJ2Zvcm0nID0+ICcnLA0KCQknd3JhcHRhZycgPT4gJycsDQoJCSdicmVhaycg PT4gJycsDQoJCSdjbGFzcycgPT4gJycsDQoJCSdsYWJlbCcgPT4gJzEnLA0KCQknbGFiZWx0 YWcnID0+ICcnLA0KCQknbGFiZWxjbGFzcycgPT4gJ1NNRF9ERkxUJywNCgkJJ2l0ZW13cmFw dGFnJyA9PiAnJywNCgkJJ2l0ZW1jbGFzcycgPT4gJ1NNRF9ERkxUJywNCgkJJ2RlYnVnJyA9 PiAnMCcsDQoJKSwgJGF0dHMpKTsNCg0KCSRhdXRob3IgPSAoJGF1dGhvcikgPyAkYXV0aG9y IDogKGlzc2V0KCR0aGlzYXJ0aWNsZSkgPyAkdGhpc2FydGljbGVbJ2F1dGhvcmlkJ10gOiAn Jyk7DQoJJGF1dGhvciA9IGRvX2xpc3QoJGF1dGhvcik7DQoJJGF1dGhvcnMgPSBhcnJheSgp Ow0KCSR0aGluZyA9IChlbXB0eSgkZm9ybSkpID8gJHRoaW5nIDogZmV0Y2hfZm9ybSgkZm9y bSk7DQoNCgkvLyBFeHBhbmQgYW55IHByaXYgbGV2ZWxzDQoJZm9yZWFjaCAoJGF1dGhvciBh cyAkdXNlcikgew0KCQlpZiAoc3RycG9zKHN0cnRvbG93ZXIoJHVzZXIpLCAic21kX3ByaXZz IikgPT09IDApIHsNCgkJCSRhcHJpdnMgPSBleHBsb2RlKCc6JywgJHVzZXIpOw0KCQkJYXJy YXlfc2hpZnQoJGFwcml2cyk7IC8vIFJlbW92ZSBzbWRfcHJpdnMgdG9rZW4gZnJvbSB0aGUg YXJyYXkNCgkJCSRhdXRob3JzID0gYXJyYXlfbWVyZ2UoJGF1dGhvcnMsIHNhZmVfY29sdW1u KCduYW1lJywgJ3R4cF91c2VycycsICdwcml2cyBpbiAoJyAuIGRvUXVvdGUoam9pbigiJywn IiwgJGFwcml2cykpIC4gJyknKSk7DQoJCX0gZWxzZSB7DQoJCQkkYXV0aG9yc1tdID0gJHVz ZXI7DQoJCX0NCgl9DQoNCgkkaXRlbXMgPSBkb19saXN0KCRpdGVtcyk7DQoNCgkkZXhjbHVk ZSA9IGRvX2xpc3QoJGV4Y2x1ZGUpOw0KCSRmaW5hbCA9ICcnOw0KDQoJLy8gVGhlIGluZGlj ZXMgYXJlIHRoZSBnVHh0KCkgbmFtZXMgZm9yIHRoZSBhc3NvY2lhdGVkIGl0ZW0NCgkkY29y ZUNvbHMgPSBhcnJheSgnaWQnID0+ICd1c2VyX2lkJywgJ25hbWUnID0+ICduYW1lJywgJ3Jl YWxfbmFtZScgPT4gJ1JlYWxOYW1lJywgJ2VtYWlsJyA9PiAnZW1haWwnLCAncHJpdmlsZWdl cycgPT4gJ3ByaXZzJywgJ2RhdGUnID0+ICdsYXN0X2FjY2VzcycpOw0KDQoJaWYgKCRhdXRo b3JzKSB7DQoJCSRtZXRhID0gc2FmZV9yb3dzKCcqJywgU01EX0JJT19NRVRBLCAnMT0xJyk7 DQoJCSRjbWV0YSA9IHNhZmVfc2hvdygnY29sdW1ucycsICd0eHBfdXNlcnMnKTsNCgkJJG51 bSA9IGNvdW50KCRtZXRhKTsNCgkJJGxpc3RfdHlwZXMgPSBhcnJheSgnY2hlY2tib3gnLCAn cmFkaW8nLCAnbGlzdCcpOw0KDQoJCWZvcmVhY2goJGNtZXRhIGFzICRpbmZvKSB7DQoJCQlp ZiAoIWluX2FycmF5KCRpbmZvWydGaWVsZCddLCAkY29yZUNvbHMpKSBjb250aW51ZTsNCgkJ CSRtZXRhWyRudW1dWyduYW1lJ10gPSAkaW5mb1snRmllbGQnXTsNCgkJCSR0RmllbGQgPSBq b2luKCcnLCBhcnJheV9rZXlzKCRjb3JlQ29scywgJGluZm9bJ0ZpZWxkJ10pKTsNCgkJCSRt ZXRhWyRudW1dWyd0aXRsZSddID0gKGdUeHQoJHRGaWVsZCkgPT0gJHRGaWVsZCkgPyBzbWRf YmlvX2dUeHQoJHRGaWVsZCkgOiBnVHh0KCR0RmllbGQpOw0KCQkJJGxlbmd0aCA9ICgoJG9m ZiA9IHN0cnBvcygkaW5mb1snVHlwZSddLCAnKCcpKSAhPT0gZmFsc2UpID8gJG9mZiA6IHN0 cmxlbigkaW5mb1snVHlwZSddKTsgLy8gRmluZCB0aGUgZmlyc3Qgb3BlbiBicmFja2V0IG9y IGVuZCBvZiBzdHJpbmcNCgkJCSRtZXRhWyRudW1dWyd0eXBlJ10gPSBzdWJzdHIoJGluZm9b J1R5cGUnXSwgMCwgJGxlbmd0aCk7DQoJCQkkbnVtKys7DQoJCX0NCgkJaWYgKCRkZWJ1ZyA+ IDEpIHsNCgkJCWVjaG8gJysrIE1FVEEgREFUQSArKyc7DQoJCQlkbXAoJG1ldGEpOw0KCQl9 DQoNCgkJLy8gRXhjbHVzaW9ucyBvdmVycmlkZSBnaXZlbiBpdGVtcw0KCQlpZiAoJGV4Y2x1 ZGVbMF0gIT0gJycgfHwgaW5fYXJyYXkoJ1NNRF9BTEwnLCAkaXRlbXMpKSB7DQoJCQkkaXRl bXMgPSBzYWZlX2NvbHVtbignbmFtZScsIFNNRF9CSU9fTUVUQSwgJzE9MScpOw0KCQkJJGl0 ZW1zID0gYXJyYXlfbWVyZ2UoJGl0ZW1zLCAkY29yZUNvbHMpOw0KCQl9DQoNCgkJZm9yZWFj aCAoJGF1dGhvcnMgYXMgJHVzZXIpIHsNCgkJCSRjYmlvID0gc2FmZV9yb3coJyonLCAndHhw X3VzZXJzJywgIm5hbWU9JyR1c2VyJyIpOw0KCQkJJGViaW8gPSBzYWZlX3JvdygnKicsIFNN RF9CSU8sICJ1c2VyX3JlZj0nJHVzZXInIik7DQoJCQkkaWR4ID0gLTE7DQoJCQkkb3V0ID0g YXJyYXkoKTsNCgkJCSRyZXBsYWNlbWVudHMgPSBhcnJheSgpOw0KDQoJCQlmb3JlYWNoICgk aXRlbXMgYXMgJGlyZWYgPT4gJHdoYXRub3QpIHsNCgkJCQlpZiAoaW5fYXJyYXkoJHdoYXRu b3QsICRleGNsdWRlKSkgY29udGludWU7DQoNCgkJCQkvLyBGaW5kIHRoZSBtZXRhIHJvdw0K CQkJCWZvcmVhY2ggKCRtZXRhIGFzICRudW0gPT4gJGRhdGEpIHsNCgkJCQkJaWYgKCRkYXRh WyduYW1lJ10gPT0gJHdoYXRub3QpIHsNCgkJCQkJCSRpZHggPSAkbnVtOw0KCQkJCQkJYnJl YWs7DQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKCRpZHggPiAtMSkgew0KCQkJCQlpZiAoaW5f YXJyYXkoJHdoYXRub3QsICRjb3JlQ29scykpIHsNCgkJCQkJCSRyb3cgPSBpc3NldCgkY2Jp b1skd2hhdG5vdF0pID8gJGNiaW9bJHdoYXRub3RdIDogJyc7DQoJCQkJCX0gZWxzZSB7DQoJ CQkJCQkkcm93ID0gaXNzZXQoJGViaW9bJHdoYXRub3RdKSA/ICRlYmlvWyR3aGF0bm90XSA6 ICcnOw0KCQkJCQl9DQoNCgkJCQkJaWYgKCRyb3cpIHsNCgkJCQkJCWlmIChpbl9hcnJheSgk bWV0YVskaWR4XVsndHlwZSddLCAkbGlzdF90eXBlcykpIHsNCgkJCQkJCQkkcm93ID0gZG9f bGlzdCgkcm93KTsNCgkJCQkJCQkkcm93ID0gam9pbignLCAnLCRyb3cpOw0KCQkJCQkJfQ0K CQkJCQkJJHRoZUNsYXNzID0gKCRpdGVtY2xhc3M9PSdTTURfREZMVCcpID8gJyBzbWRfYmlv XycuJG1ldGFbJGlkeF1bJ25hbWUnXSA6ICgoJGl0ZW1jbGFzcykgPyAkaXRlbWNsYXNzIDog JycpOw0KCQkJCQkJJGxhYkNsYXNzID0gKCRsYWJlbGNsYXNzPT0nU01EX0RGTFQnKSA/ICcg c21kX2Jpb18nLiRtZXRhWyRpZHhdWyduYW1lJ10gOiAoKCRsYWJlbGNsYXNzKSA/ICRsYWJl bGNsYXNzIDogJycpOw0KCQkJCQkJJHRoZVRpdGxlID0gJG1ldGFbJGlkeF1bJ3RpdGxlJ107 DQoJCQkJCQkkdGhlTmFtZSA9ICRtZXRhWyRpZHhdWyduYW1lJ107DQoJCQkJCQkkcmVwbGFj ZW1lbnRzWyd7c21kX2Jpb19pbmZvX2l0ZW19J10gPSAkcm93Ow0KCQkJCQkJaWYgKGluX2Fy cmF5KCRtZXRhWyRpZHhdWyd0eXBlJ10sICRsaXN0X3R5cGVzKSkgew0KCQkJCQkJCSRjaG9z ZW5zID0gZG9fbGlzdCgkcm93KTsNCgkJCQkJCQkkbnYgPSBzbWRfYmlvX3NwbGl0dmFsKCRt ZXRhWyRpZHhdWyd2YWwnXSk7DQoJCQkJCQkJbGlzdCgkbnYsICRkZmx0KSA9IHNtZF9iaW9f Z2V0X2RlZmF1bHQoJG52LCAkcm93KTsNCgkJCQkJCQkkbGlzdGN0cj0xOw0KCQkJCQkJCSRj aG9zZW5jdHI9MDsNCgkJCQkJCQlmb3JlYWNoKCRudiBhcyAkbGlzdGl0ZW0gPT4gJGxpc3Rs YWJlbCkgew0KCQkJCQkJCQkkcmVwbGFjZW1lbnRzWyd7c21kX2Jpb18nLiR0aGVOYW1lLidf aXRlbV8nLiRsaXN0Y3RyLid9J10gPSAkbGlzdGl0ZW07DQoJCQkJCQkJCSRyZXBsYWNlbWVu dHNbJ3tzbWRfYmlvXycuJHRoZU5hbWUuJ19sYWJlbF8nLiRsaXN0Y3RyLid9J10gPSAkbGlz dGxhYmVsOw0KCQkJCQkJCQlpZiAoaW5fYXJyYXkoJGxpc3RpdGVtLCAkY2hvc2VucykpIHsN CgkJCQkJCQkJCSRjaG9zZW5jdHIrKzsNCgkJCQkJCQkJCSRyZXBsYWNlbWVudHNbJ3tzbWRf YmlvXycuJHRoZU5hbWUuJ19jaG9zZW5fJy4kY2hvc2VuY3RyLid9J10gPSAkbGlzdGl0ZW07 DQoJCQkJCQkJCQkkcmVwbGFjZW1lbnRzWyd7c21kX2Jpb18nLiR0aGVOYW1lLidfY2hvc2Vu X2xhYmVsXycuJGNob3NlbmN0ci4nfSddID0gJGxpc3RsYWJlbDsNCgkJCQkJCQkJfQ0KCQkJ CQkJCQkkbGlzdGN0cisrOw0KCQkJCQkJCX0NCgkJCQkJCQkkcmVwbGFjZW1lbnRzWyd7c21k X2Jpb18nLiR0aGVOYW1lLidfY291bnR9J10gPSAkbGlzdGN0ci0xOw0KCQkJCQkJCSRyZXBs YWNlbWVudHNbJ3tzbWRfYmlvXycuJHRoZU5hbWUuJ19jaG9zZW5fY291bnR9J10gPSAkY2hv c2VuY3RyOw0KCQkJCQkJfQ0KCQkJCQkJJHJlcGxhY2VtZW50c1sne3NtZF9iaW9faW5mb19u YW1lfSddID0gJHRoZU5hbWU7DQoJCQkJCQkkcmVwbGFjZW1lbnRzWyd7c21kX2Jpb19pbmZv X3RpdGxlfSddID0gJHRoZVRpdGxlOw0KCQkJCQkJJHJlcGxhY2VtZW50c1sne3NtZF9iaW9f aW5mb19pdGVtY2xhc3N9J10gPSAkdGhlQ2xhc3M7DQoJCQkJCQkkcmVwbGFjZW1lbnRzWyd7 c21kX2Jpb19pbmZvX2xhYmVsY2xhc3N9J10gPSAkbGFiQ2xhc3M7DQoJCQkJCQkkcmVwbGFj ZW1lbnRzWyd7c21kX2Jpb18nLiR0aGVOYW1lLid9J10gPSAkcm93Ow0KCQkJCQkJaWYgKCRk ZWJ1Zykgew0KCQkJCQkJCWVjaG8gJysrIFJFUExBQ0VNRU5UUyArKyc7DQoJCQkJCQkJZG1w KCRyZXBsYWNlbWVudHMpOw0KCQkJCQkJfQ0KCQkJCQkJJHRvUGFyc2UgPSAoIWVtcHR5KCR0 aGluZykpID8gJHRoaW5nIDogKHRhZygoKCRsYWJlbD09MSkgPyAkdGhlVGl0bGUgOiAoKCRs YWJlbD09JycpID8gJycgOiAoKCRsYWJlbCkgPyAkbGFiZWwgOiAkdGhlTmFtZSkpKSwgKCgk bGFiZWx0YWcpPyRsYWJlbHRhZzonYnIvJyksICgoJGxhYmVsY2xhc3MpPyAnIGNsYXNzPSIn LiRsYWJDbGFzcy4nIicgOiAnJykpLigoJGl0ZW13cmFwdGFnKSA/IGRvVGFnKCRyb3csICRp dGVtd3JhcHRhZywgJHRoZUNsYXNzKTogJHJvdykpOw0KDQoJCQkJCQkkb3V0W10gPSBwYXJz ZShzdHJ0cigkdG9QYXJzZSwgJHJlcGxhY2VtZW50cykpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJ fQ0KDQoJCQkkZmluYWwgLj0gKCR3cmFwdGFnKSA/IGRvV3JhcCgkb3V0LCAkd3JhcHRhZywg JGJyZWFrLCAkY2xhc3MpIDogam9pbignJywgJG91dCk7DQoJCX0NCgl9DQoJcmV0dXJuICRm aW5hbDsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBBIHdyYXBwZXIg dG8gYXJ0aWNsZV9jdXN0b20gdGhhdCBhdXRvIHNldHMgdGhlIHVzZXIgdG8gdGhlIG9uZSBz cGVjaWZpZWQNCi8vIG9yIHRoZSBjdXJyZW50IGFydGljbGUncyBhdXRob3IuDQovLyBOT1RF OiBsQXR0cygpIGlzIE5PVCB1c2VkIGJlY2F1c2UgdGhhdCBsaW1pdHMgdGhlIHBsdWdpbiBh dHRyaWJ1dGVzLg0KZnVuY3Rpb24gc21kX2Jpb19hcnRpY2xlcygkYXR0cywgJHRoaW5nPU5V TEwpIHsNCglnbG9iYWwgJHRoaXNhcnRpY2xlOw0KDQoJJGF1dGhvciA9IChpc3NldCgkYXR0 c1snYXV0aG9yJ10pKSA/ICRhdHRzWydhdXRob3InXSA6IChpc3NldCgkdGhpc2FydGljbGUp ID8gJHRoaXNhcnRpY2xlWydhdXRob3JpZCddIDogJycpOw0KCSRhdHRzWydhdXRob3InXSA9 ICRhdXRob3I7DQoJcmV0dXJuIHBhcnNlQXJ0aWNsZXMoJGF0dHMsICcxJywgJHRoaW5nKTsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBQbHVnaW4tc3BlY2lmaWMg cmVwbGFjZW1lbnQgc3RyaW5ncyAtIGxvY2FsaXNlIGFzIHJlcXVpcmVkDQpmdW5jdGlvbiBz bWRfYmlvX2dUeHQoJHdoYXQsICRhdHRzID0gYXJyYXkoKSkgew0KCSRsYW5nID0gYXJyYXko DQoJCSdhZG1pbl90YWInID0+ICdCaW8gQ29uZmlnJywNCgkJJ2hlbHAnID0+ICdUaXAnLA0K CQknaGVscF91bnVzZWQnID0+ICdVbnVzZWQgZm9yIHRoaXMgVHlwZScsDQoJCSdpZCcgPT4g J0lEJywNCgkJJ25hbWUnID0+ICdOYW1lJywNCgkJJ21ldGFfYWRkJyA9PiAnQWRkIGJpbyBp dGVtJywNCgkJJ21ldGFfYWRkZWQnID0+ICdCaW8gaXRlbSBhZGRlZCcsDQoJCSdtZXRhX25v dF9hZGRlZCcgPT4gJ1Byb2JsZW0gYWRkaW5nIGJpbyBpdGVtOiBjaGVjayBuYW1lIGlzIG5v dCBhbHJlYWR5IHVzZWQnLA0KCQknbWV0YV9kZWxldGVkJyA9PiAnQmlvIGl0ZW0gYW5kIGFs bCBpdHMgZGF0YSBkZWxldGVkJywNCgkJJ21ldGFfbm90X2RlbGV0ZWQnID0+ICdQcm9ibGVt IGRlbGV0aW5nIGJpbyBpdGVtOiBpdCBtYXkgc3RpbGwgZXhpc3QnLA0KCQknbWV0YV9lZGl0 JyA9PiAnRWRpdCBiaW8gaXRlbScsDQoJCSdtZXRhX3VwZGF0ZWQnID0+ICdCaW8gaXRlbSAi e25hbWV9IiB1cGRhdGVkJywNCgkJJ3Bvc2l0aW9uJyA9PiAnUG9zaXRpb24nLA0KCQkncHJp dmlsZWdlcycgPT4gJ1ByaXZpbGVnZXMnLA0KCQkncmVhbF9uYW1lJyA9PiAnRnVsbCBuYW1l JywNCgkJJ3NpemUnID0+ICdTaXplJywNCgkJJ3NpemVoZWxwX3RleHRfaW5wdXQnID0+ICdV cCB0byB0d28gdmFsdWVzIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzOiAx KSBvZiB0aGUgaW5wdXQgYm94IG9uIHRoZSBBZG1pbi0+VXNlcnMgdGFiLCAyKSB0aGUgdXNl ciBpcyBhbGxvd2VkIHRvIGVudGVyJywNCgkJJ3NpemVoZWxwX3RleHRhcmVhJyA9PiAnVXAg dG8gdHdvIHZhbHVlcyBzcGVjaWZ5aW5nIHRoZSBkaW1lbnNpb25zIG9mIHRoZSB0ZXh0YXJl YSBpbiBjaGFyYWN0ZXJzOiAxKSBXaWR0aCwgMikgSGVpZ2h0JywNCgkJJ3NpemVoZWxwX2lt YWdlJyA9PiAnVGhlIHgsIHkgZGltZW5zaW9ucyBvZiB0aGUgaW1hZ2UvdGh1bWJuYWlsIG9u IHRoZSBBZG1pbi0+VXNlcnMgdGFiLiBJZiBvbmx5IG9uZSB2YWx1ZSBpcyBnaXZlbiwgdGhl IGltYWdlIHdpbGwgYmUgc3F1YXJlLiBJZiBlaXRoZXIgdmFsdWUgaXMgb21pdHRlZCwgdGhl IGRpbWVuc2lvbnMgc3RvcmVkIGluIHRoZSBkYXRhYmFzZSB3aWxsIGJlIHVzZWQgaW5zdGVh ZCcsDQoJCSd2YWxoZWxwX3RleHRfaW5wdXQnID0+ICdUaGUgZGVmYXVsdCB2YWx1ZSB0aGF0 IHdpbGwgYXBwZWFyIGluIHRoZSB0ZXh0IGJveCcsDQoJCSd2YWxoZWxwX2xyYycgPT4gJ0Nv bW1hLSBvciBuZXdsaW5lLXNlcGFyYXRlZCBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb25zIGlu IHRoZSBzZXQuIElmIHlvdSBsaXN0IG9ubHkgaXRlbSBsYWJlbHMsIHRoZSBuYW1lcyB3aWxs IGJlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgKGxvd2VyIGNhc2UsIG5vIHNwYWNlcykuIFlv dSBtYXkgc3BlY2lmeSB5b3VyIG93biBuYW1lcyB1c2luZzogbmFtZTEgPT4gTGFiZWwgMSwg bmFtZTIgLT4gTGFiZWwgMiwgLi4uJywNCgkJJ3ZhbGhlbHBfeW5yJyA9PiAnRGVmYXVsdCB2 YWx1ZSBvZiB0aGUgWWVzL05vIGNoZWNrYm94LiAwIChvciBvbWl0dGVkKSA9IE5vOyAxID0g WWVzJywNCgkJJ3ZhbGhlbHBfaW1hZ2UnID0+ICdMaW1pdCB0aGUgaW1hZ2VzIGluIHRoZSBk cm9wZG93biB0byB0aGUgb25lcyBpbiB0aGlzIGdpdmVuIHBhcmVudCBpbWFnZSBjYXRlZ29y eS4gSWYgb21pdHRlZCwgYWxsIGltYWdlcyBhcmUgYXZhaWxhYmxlJywNCgkJJ3RibF9pbnN0 YWxsZWQnID0+ICdUYWJsZXMgaW5zdGFsbGVkLicsDQoJCSd0Ymxfbm90X2luc3RhbGxlZCcg PT4gJ1RhYmxlcyBOT1QgaW5zdGFsbGVkLicsDQoJCSd0aXRsZScgPT4gJ1RpdGxlJywNCgkJ J3R5cGUnID0+ICdUeXBlJywNCgkJJ3ZhbHVlJyA9PiAnVmFsdWUnLA0KCSk7DQoJcmV0dXJu IHN0cnRyKCRsYW5nWyR3aGF0XSwgJGF0dHMpOw0KfSI7czo0OiJ0eXBlIjtzOjE6IjEiO3M6 NToib3JkZXIiO3M6MToiNSI7czo1OiJmbGFncyI7czoxOiIwIjtzOjQ6ImhlbHAiO3M6MTg4 OTI6IjxkaXYgaWQ9InNtZF9oZWxwIj4KCgk8aDE+c21kX2JpbzwvaDE+CgoJPHA+Q29uZmln dXJlIGFkZGl0aW9uYWwgdXNlciBiaW9ncmFwaGljYWwgaW5mb3JtYXRpb24gdG8gYmUgY29s bGVjdGVkIHdoZW4gYXV0aG9ycyBhcmUgY3JlYXRlZCwgdGhlbiBzaG93IHRoYXQgaW5mbyBh cyBieWxpbmVzIGFnYWluc3QgeW91ciBhcnRpY2xlcy4gQSBiaXQgbGlrZSBjdXN0b20gZmll bGRzIGZvciB1c2VyIGluZm8uPC9wPgoKCTxoMj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJCTxs aT5EZWZpbmUgb25seSB0aGUgaW5mbyB5b3UgcmVxdWlyZSB0byBiZSBjb2xsZWN0ZWQgYWJv dXQgeW91ciBhdXRob3JzICYjODIxMjsgdG90YWxseSBjdXN0b21pc2FibGU8L2xpPgoJCTxs aT5JbmZvIGlzIGNvbGxlY3RlZC9lZGl0ZWQgb24gdGhlIEFkbWluLSZndDtVc2VycyB0YWIg YmVuZWF0aCB0aGUgZXhpc3RpbmcgdXNlciBpbmZvPC9saT4KCQk8bGk+Q2hvb3NlIGZyb20g YSB2YXJpZXR5IG9mIHR5cGVzIG9mIGNvbnRlbnQ6IHRleHQsIHJhZGlvIGJ1dHRvbnMsIHNl bGVjdCBsaXN0cywgY2hlY2tib3hlcywgaW1hZ2VzJiM4MjMwOzwvbGk+CgkJPGxpPk91dHB1 dCBhbnkgcGllY2VzIG9mIHRoZSBiaW9ncmFwaGljYWwgaW5mbyBpbiB5b3VyIGFydGljbGUg ZmxvdyB1c2luZyBhIHNpbmdsZSwgZmxleGlibGUgdGFnPC9saT4KCQk8bGk+SW1hZ2UgdGh1 bWJuYWlsIHByZXZpZXcvc2VsZWN0aW9uIG9uIHRoZSBBZG1pbi0mZ3Q7VXNlcnMgdGFiPC9s aT4KCQk8bGk+T3B0aW9uYWwgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gdG8gbW9k aWZ5IHRoZSBsYXlvdXQgb2YgdGhlIEFkbWluLSZndDtVc2VycyB0YWI8L2xpPgoJPC91bD4K Cgk8aDI+QXV0aG9yIC8gQ3JlZGl0czwvaDI+CgoJPHA+PGEgaHJlZj0iaHR0cDovL3N0ZWZk YXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPi4gVGhlIHBsdWdpbiBpcyBhIGxv Z2ljYWwgZXh0ZW5zaW9uIG9mIHB2Y191c2Vyc19pbmZvIGJ5IFBldGVyIFYuIENvb2sgKHRo ZSBzbWRfYmlvX2FydGljbGVzIHRhZyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBwdmNf YXV0aG9yX2FydGljbGVzKS4gVGhhbmtzIGFsc28gdG8gcGllbWFuIGZvciBzZXR0aW5nIHRo ZSB3aGVlbHMgaW4gbW90aW9uIGFuZCBuZXQtY2FydmVyIGZvciBoaXMgaW5pbWl0YWJsZSBr bmFjayBvZiBtYWtpbmcgdGhpbmdzIGJldHRlci48L3A+CgoJPGgyPkluc3RhbGxhdGlvbiAv IFVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cCBjbGFzcz0icmVxdWlyZWQiPlJlcXVpcmVzIFRl eHRwYXR0ZXJuIDQuMi4wKzwvcD4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0 aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy8xMTE2L3NtZF9i aW8iPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRh d3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRo ZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBh bmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBWaXNpdCB0aGUgPGEgaHJlZj0i aHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTMxNDk2Ij5m b3J1bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGluZm8gb3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNj ZXNzIG9yIG90aGVyd2lzZSBvZiB0aGUgcGx1Z2luLjwvcD4KCgk8cD5XaGVuIHlvdSBmaXJz dCB2aXNpdCB0aGUgRXh0ZW5zaW9uLSZndDtCaW8gQ29uZmlnIHBhZ2UsIHRoZSBleHRyYSB0 YWJsZXMgd2lsIGJlIGluc3RhbGxlZCBhdXRvbWF0aWNhbGx5LjwvcD4KCgk8cD5UbyB1bmlu c3RhbGwsIHNpbXBseSBkZWxldGUgZnJvbSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyBwYWdl LiBCdXQgbm90ZSB0aGUgZXh0cmEgdGFibGVzIHdpbGwgcmVtYWluIHVudGlsIHlvdSBkZWxl dGUgdGhlbSBtYW51YWxseS4gQSBwbGFubmVkIGZlYXR1cmUgaXMgdG8gYWRkIGJ1dHRvbnMg dG8gdGhlIGludGVyZmFjZSB0byBhbGxvdyBkZWxldGlvbiBvZiBhbGwgYWRkaXRpb25hbCBi aW8gaW5mb3JtYXRpb24gYW5kL29yIHJlbW92YWwgb2YgdGhlIHVuZGVybHlpbmcgdGFibGVz LjwvcD4KCgk8aDI+Q29uZmlndXJpbmcgYmlvIGl0ZW1zPC9oMj4KCgk8cD5WaXNpdCB0aGUg RXh0ZW5zaW9ucy0mZ3Q7QmlvIGNvbmZpZyB0YWIuIEFkZCBiaW8gaXRlbXMgc3VjaCBhcyBj ZWxsL3dvcmsvZmF4IG51bWJlcnMsIGRlcGFydG1lbnQsIG11Z3Nob3QsIHBvc3RhbCBhZGRy ZXNzLCBqb2IgdGl0bGUsIHdoYXRldmVyIHlvdSB3aXNoLiBKdXN0IGFkZCBvbmUgYXQgYSB0 aW1lIGFuZCBoaXQgU2F2ZSBpbiBiZXR3ZWVuLiBUaGUgaXRlbXMgd2lsbCBiZSBsaXN0ZWQg YmVsb3cgdGhlIGZvcm0sIGFuZCBjYW4gYmUgc29ydGVkIGF0IHdpbGwuIEVhY2ggaXRlbSBj b21wcmlzZXM6PC9wPgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5OYW1lPC9zdHJvbmc+IDogYW4g aW50ZXJuYWwgbmFtZSB3aXRoIHdoaWNoIHlvdSB3aXNoIHRvIHJlZmVyIHRvIHlvdXIgYmlv IGl0ZW0uIEF2b2lkIGNoYXJhY3RlcnMgc3VjaCBhcyBzcGFjZXMgYW5kICYjODIxNjt3ZWly ZCYjODIxNzsgY2hhcmFjdGVycyBoZXJlPC9saT4KCQk8bGk+PHN0cm9uZz5UaXRsZTwvc3Ry b25nPiA6IGEgaHVtYW4tZnJpZW5kbHkgbmFtZSBmb3IgeW91ciBiaW8gaXRlbS4gVGhpcyBp cyBkaXNwbGF5ZWQgdG8gdGhlIGxlZnQgb2YgdGhlIGlucHV0IGNvbnRyb2wgb24gdGhlIEFk bWluLSZndDtVc2VycyBwYW5lbCwgYW5kIGFzIGEgbGFiZWwgb24geW91ciBhcnRpY2xlIHBh Z2VzPC9saT4KCQk8bGk+PHN0cm9uZz5UeXBlPC9zdHJvbmc+IDogdGhlIHR5cGUgb2YgZGF0 YSB5b3Ugd2lzaCB0byBjb2xsZWN0LiBUaGlzIHdpbGwgYmUgdGhlIHZhcmlldHkgb2YgaW5w dXQgY29udHJvbCB5b3Ugc2VlIG9uIHRoZSBBZG1pbi0mZ3Q7VXNlcnMgdGFiPC9saT4KCQk8 bGk+PHN0cm9uZz5TaXplPC9zdHJvbmc+IDogdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGNob3Nl biBpbnB1dCBjb250cm9sLiBUYWtlcyBvbmUgb3IgdHdvIGNvbW1hLXNlcGFyYXRlZCB2YWx1 ZXMsIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB3aGljaCBkZXBlbmRzIG9uIHRoZSBpdGVtIDxl bT5UeXBlPC9lbT46Cgk8dWw+CgkJPGxpPmZvciB0ZXh0LWJhc2VkIGlucHV0IGZpZWxkcywg dGhlIGZpcnN0IGlzIHRoZSB3aWR0aCBvZiB0aGUgYm94IChpbiBjaGFyYWN0ZXJzKSBhbmQg dGhlIHNlY29uZCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhIHVzZXIg Y2FuIHR5cGUgKDAgPSBsZWF2ZSBhdCBkZWZhdWx0KTwvbGk+CgkJPGxpPmZvciB0ZXh0YXJl YXMsIGl0IGlzIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBib3ggaW4gY2hhcmFjdGVy cywgcmVzcGVjdGl2ZWx5PC9saT4KCQk8bGk+Zm9yIGltYWdlcywgdGhlIHR3byB2YWx1ZXMg YXJlIHRoZSB4IGFuZCB5IGRpbWVuc2lvbnMgb2YgdGhlIGltYWdlL3RodW1ibmFpbCBvbiB0 aGUgQWRtaW4tJmd0O1VzZXJzIHRhYi4gSWYgb25seSBvbmUgdmFsdWUgaXMgZ2l2ZW4sIHRo ZSBpbWFnZSB3aWxsIGJlIHNxdWFyZS4gSWYgZWl0aGVyIHZhbHVlIGlzIG9taXR0ZWQsIHRo ZSBpbWFnZSBvciB0aHVtYm5haWwgZGltZW5zaW9ucyAoYXMgc3RvcmVkIGluIHRoZSBkYXRh YmFzZSkgYXJlIHVzZWQgaW5zdGVhZDwvbGk+CgkJPGxpPmZvciBvdGhlciB0eXBlcywgdGhl IFNpemUgaXMgY3VycmVudGx5IHVudXNlZDwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzdHJv bmc+VmFsdWU8L3N0cm9uZz4gOiBkZXBlbmRzIG9uIHRoZSBpdGVtIDxlbT5UeXBlPC9lbT46 Cgk8dWw+CgkJPGxpPmZvciB0ZXh0LWJhc2VkIGl0ZW1zLCB0aGlzIGlzIHRoZSBkZWZhdWx0 IHZhbHVlIHRoYXQgd2lsbCBiZSBpbiB0aGUgdGV4dCBib3guIFlvdSBjYW4gdXNlIHRoaXMg dG8gaW5pdGlhbGlzZSBhbiBlbnRyeSwgb3Igb2ZmZXIgaW5zdHJ1Y3Rpb25zIGxpa2UgJiM4 MjIwO1R5cGUgeW91ciBqb2IgZGVzY3JpcHRpb24gaGVyZSYjODIyMTs8L2xpPgoJCTxsaT5m b3IgbGlzdCwgcmFkaW8gYW5kIGNoZWNrYm94IGl0ZW1zLCB0aGlzIGlzIHVzZWQgdG8gY29u ZmlndXJlIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4gRWl0aGVyIHB1dCBvbmUgaXRlbSBwZXIg bGluZSBvciB1c2UgYSBjb21tYSB0byBzZXBhcmF0ZSBlYWNoIGl0ZW0uIElmIHlvdSBqdXN0 IGxpc3QgaXRlbXMsIHRoZXkgd2lsbCBiZSB1c2VkIGFzIGxhYmVscyBleGFjdGx5IGFzIHlv dSBkZWZpbmUgdGhlbS4gV2hlbiByZWZlcnJpbmcgdG8gdGhlbSBpbiA8Y29kZT4mbHQ7dHhw OnNtZF9iaW9faW5mbyAvJmd0OzwvY29kZT4gdGhlaXIgPGVtPm5hbWVzPC9lbT4gd2lsbCBi ZSBhbGwgbG93ZXIgY2FzZSwgaGF2ZSAmIzgyMTY7bm9uLXdlYi1zYWZlJiM4MjE3OyBjaGFy YWN0ZXJzIHJlbW92ZWQsIGFuZCB3aWxsIGhhdmUgc3BhY2VzIGNvbnZlcnRlZCB0byB1bmRl cnNjb3Jlcy4gSWYgeW91IHdpc2ggdG8gZGVmaW5lIHlvdXIgb3duIG5hbWVzIGFuZCBsYWJl bHMsIHVzZSB0aGUgc3ludGF4OiA8Y29kZT5vcHRpb25fbmFtZTEgPSZndDsgb3B0aW9uX2xh YmVsMSwgb3B0aW9uX25hbWUyID0mZ3Q7IG9wdGlvbl9sYWJlbDIsIC4uLjwvY29kZT4uIEZv ciBleGFtcGxlIGEgRGVwYXJ0bWVudHMgZHJvcGRvd24gbGlzdCBtaWdodCBiZSBkZWZpbmVk IGFzIDxjb2RlPnNhbGVzID0mZ3Q7IFNhbGVzLCBta3RnID0mZ3Q7IE1hcmtldGluZywgZW5n ID0mZ3Q7IEVuZ2luZWVyaW5nLCBxdWFsID0mZ3Q7IFF1YWxpdHkgYXNzdXJhbmNlLCBpdCA9 Jmd0OyBUZWNoIHN1cHBvcnQ8L2NvZGU+IG9yIDxjb2RlPlNhbGVzLCBNYXJrZXRpbmcsIEVu Z2luZWVyaW5nLCBRdWFsaXR5IGFzc3VyYW5jZSwgVGVjaCBzdXBwb3J0PC9jb2RlPiAmIzgy MTI7IGluIHdoaWNoIGNhc2UgeW91IHdvdWxkIHJlZmVyIHRvIHlvdXIgbmV3IGl0ZW1zIHdp dGggdGhlc2UgbmFtZXMsIHJlc3BlY3RpdmVseTogPGNvZGU+c2FsZXMsIG1hcmtldGluZywg ZW5naW5lZXJpbmcsIHF1YWxpdHlfYXNzdXJhbmNlLCB0ZWNoX3N1cHBvcnQ8L2NvZGU+LiBJ biBzZWxlY3QgbGlzdHMsIHlvdSBtYXkgcHV0IGFuIGVtcHR5IGl0ZW0gYXQgdGhlIHRvcCBp ZiB5b3Ugd2lzaC4gSW4gc2VsZWN0IGxpc3RzIGFuZCByYWRpbyBzZXRzIHlvdSBtYXkgYWxz byBtYXJrIG9uZSBsYWJlbCB3aXRoIDxjb2RlPlsqXTwvY29kZT4gdG8gaW5kaWNhdGUgaXQg aXMgdGhlIGRlZmF1bHQ8L2xpPgoJCTxsaT5mb3IgaW1hZ2VzLCBpdCBjYW4gYmUgdXNlZCB0 byBzcGVjaWZ5IHRoZSBwYXJlbnQgY2F0ZWdvcnkgbmFtZSB1bmRlciB3aGljaCB0aGUgZGVz aXJlZCBpbWFnZXMgYXJlIHN0b3JlZC4gSWYgb21pdHRlZCwgYWxsIGltYWdlcyBhcmUgYXZh aWxhYmxlIGluIHRoZSBpbWFnZSBzZWxlY3QgbGlzdDwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxp PjxzdHJvbmc+UG9zaXRpb248L3N0cm9uZz4gOiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGl0 ZW1zIGFwcGVhciBvbiB0aGUgQWRtaW4tJmd0O1VzZXJzIHRhYi4gVGhlIGxvd2VyIHRoZSBu dW1iZXIgdGhlIGhpZ2hlciB1cCB0aGUgc2NyZWVuIGl0IHdpbGwgYmUuIFRoZSBudW1iZXJz IDxlbT5kbyBub3Q8L2VtPiBoYXZlIHRvIGJlIHNlcXVlbnRpYWwgJiM4MjEyOyBpdCBpcyBh ZHZpc2VkIHlvdSBzZXQgdGhlbSB3aXRoIGEgZ2FwIGJldHdlZW4gdGhlbSAoZS5nLiAxMCBv ciAyMCkgc28geW91IGNhbiBhbHRlciB0aGUgb3JkZXIgZmFpcmx5IGVhc2lseTwvbGk+Cgk8 L3VsPgoKCTxwPk5vdGUgdGhhdCB0aGUgRGF0ZS90aW1lIFR5cGUgaXMgZnVuY3Rpb25hbGx5 IGlkZW50aWNhbCB0byBhIFRleHQgYm94LiBUaGlzIG1heSBjaGFuZ2UgaW4gZnV0dXJlLjwv cD4KCgk8aDI+RW50ZXJpbmcgdXNlciBkYXRhPC9oMj4KCgk8cD5Zb3VyIGNvbmZpZ3VyZWQg aXRlbXMgd2lsbCBhcHBlYXIgb24gdGhlIEFkbWluLSZndDtVc2VycyB0YWIgYmVuZWF0aCB0 aGUgdXN1YWwgY3JvcCBvZiBkYXRhIGlucHV0IGNvbnRyb2xzLiBTaW1wbHkgZW50ZXIgZGF0 YSBpbiB0aGVtIGFuZCBpdCB3aWxsIGJlIHNhdmVkIGFsb25nIHdpdGggdGhlIGV4aXN0aW5n IHVzZXIgZGF0YS4gSGl0IDxlbT5FZGl0PC9lbT4gYW5kIGFueSBjb25maWd1cmVkIGluZm8g d2lsbCBiZSByZXRyaWV2ZWQgZm9yIGVkaXRpbmcuPC9wPgoKCTxwPldoZW4gY2hvb3Npbmcg YW4gaW1hZ2UsIHlvdSBjYW4gZWl0aGVyIHR5cGUgaXRzIElEIGluIHRoZSBib3ggb3IgdXNl IHRoZSBkcm9wZG93biBzZWxlY3QgbGlzdCB0byBjaG9vc2UgYW4gaW1hZ2UuIFRoZSBjaG9z ZW4gaW1hZ2Ugd2lsbCBhcHBlYXIgYmVsb3cgdGhlIGlucHV0IGNvbnRyb2xzLjwvcD4KCgk8 cD5JZiB5b3Ugd2lzaCB0byBhbHRlciB0aGUgbGF5b3V0IG9mIHRoZSBpbnB1dCBjb250cm9s cywgeW91IG1heSBjcmVhdGUgYSBzdGFuZGFyZCBzdHlsZXNoZWV0IGluIFByZXNlbnRhdGlv bi0mZ3Q7U3R5bGUgYW5kIG5hbWUgaXQgPGNvZGU+c21kX2JpbzwvY29kZT4uIEl0IHdpbGwg YmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuPC9wPgoKCTxwPlRvIHZpZXcgdGhlIGV4dGVuZGVk IGJpbyBpbmZvcm1hdGlvbiBmb3IgYSB1c2VyLCBob3ZlciBvdmVyIHRoZSA8ZW0+RWRpdDwv ZW0+IGxpbmsgb2YgYW4gaXRlbSBpbiB0aGUgbGlzdDsgYSB0b29sdGlwIHdpbGwgYXBwZWFy IHNob3dpbmcgc29tZSBvZiB0aGUgZXh0ZW5kZWQgYmlvLjwvcD4KCgk8aDI+RGlzcGxheWlu ZyB1c2VyIGJpbyBpbmZvPC9oMj4KCgk8aDM+PGNvZGU+Jmx0O3R4cDpzbWRfYmlvX2luZm8m Z3Q7PC9jb2RlPjwvaDM+CgoJPHA+VXNlIHRoaXMgdGFnIHRvIGRpc3BsYXkgcGllY2VzIG9m IGluZm8gZnJvbSB0aGUgYmlvZ3JhcGh5LiBPbmUgb3IgbW9yZSBvZiB0aGVzZSB0YWdzIGNh biBiZSBlbXBsb3llZCBkZXBlbmRpbmcgb24gaG93IHlvdSBwcmVmZXIgdG8gd29yay4gSXQg bWF5IGFsc28gYmUgdXNlZCBhcyBhIGNvbnRhaW5lciAob3IgdmlhIHRoZSA8Y29kZT5mb3Jt PC9jb2RlPiBhdHRyaWJ1dGUpIHRvIGFsbG93IHlvdSB0byBlbWJlZCBvdGhlciBUZXhwYXR0 ZXJuIHRhZ3MgYW5kL29yIHNwZWNpYWwgPGEgaHJlZj0iI3JlcHRhZ3MiPnJlcGxhY2VtZW50 IHRhZ3M8L2E+IHRvIGZvcm1hdCB0aGUgb3V0cHV0LjwvcD4KCgk8cD5Vc2UgdGhlIGZvbGxv d2luZyBhdHRyaWJ1dGVzIHRvIHR3ZWFrIHRoZSBvdXRwdXQ6PC9wPgoKCTx1bD4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPmF1dGhvcjwvc3Bhbj4gOiBsaXN0IG9mIGF1dGhvciBsb2dp biBuYW1lcyB5b3Ugd2lzaCB0byBkaXNwbGF5IGluZm8gZnJvbS4gSWYgb21pdHRlZCwgdGhl IGN1cnJlbnQgKGluZGl2aWR1YWwgYXJ0aWNsZSkgYXV0aG9yIHdpbGwgYmUgdXNlZC4gWW91 IG1heSBzcGVjaWZ5IGFueSBpdGVtIGFzIDxjb2RlPlNNRF9QUklWUzo8L2NvZGU+IGFuZCB0 aGVuIGNvbG9uLXNlcGFyYXRlIHByaXYgbnVtYmVycy4gQW55IHVzZXJzIHdpdGggdGhvc2Ug bWF0Y2hpbmcgbGV2ZWwocykgd2lsbCBiZSBkaXNwbGF5ZWQ8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+aXRlbXM8L3NwYW4+IDogbGlzdCBvZiBiaW8gaXRlbSA8ZW0+bmFtZXM8 L2VtPiB5b3Ugd2lzaCB0byBkaXNwbGF5LCBpbiB0aGUgb3JkZXIgeW91IHdpc2ggdG8gZGlz cGxheSB0aGVtLiBEZWZhdWx0cyB0byBhbGwgaXRlbXMuIE5vdGUgeW91IGNhbiBhbHNvIHVz ZSBiaW8gaW5mb3JtYXRpb24gZnJvbSB0aGUgc3RhbmRhcmQgPHNwYW4gY2xhc3M9ImNhcHMi PlRYUDwvc3Bhbj4gdXNlciBpbmZvLCBpLmUuIHlvdSBjYW4gdXNlIGFueSBvZiB0aGUgZm9s bG93aW5nLCAoY2FzZSBzZW5zaXRpdmUpIDoKCTx1bD4KCQk8bGk+PGNvZGU+dXNlcl9pZDwv Y29kZT48L2xpPgoJCTxsaT48Y29kZT5uYW1lPC9jb2RlPiAobG9naW4gbmFtZSk8L2xpPgoJ CTxsaT48Y29kZT5SZWFsTmFtZTwvY29kZT48L2xpPgoJCTxsaT48Y29kZT5lbWFpbDwvY29k ZT48L2xpPgoJCTxsaT48Y29kZT5wcml2czwvY29kZT48L2xpPgoJCTxsaT48Y29kZT5sYXN0 X2FjY2VzczwvY29kZT48L2xpPgoJPC91bD48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+ZXhjbHVkZTwvc3Bhbj4gOiBsaXN0IG9mIGJpbyBpdGVtIDxlbT5uYW1lczwvZW0+IHlv dSBkbyA8c3Ryb25nPm5vdDwvc3Ryb25nPiB3aXNoIHRvIGRpc3BsYXkuIFRoaXMgb3ZlcnJp ZGVzIDxjb2RlPml0ZW1zPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5m b3JtPC9zcGFuPiA6IHRoZSBuYW1lIG9mIGEgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bh bj4gRm9ybSB3aXRoIHdoaWNoIHRvIHByb2Nlc3MgZWFjaCBpdGVtLiBJZiBub3Qgc3BlY2lm aWVkLCB0aGUgdGFnJiM4MjE3O3MgY29udGFpbmVyIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiBJ ZiB0aGUgY29udGFpbmVyIGlzIGVtcHR5LCBkZWZhdWx0IG91dHB1dCBpcyB1c2VkPC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPml0ZW13cmFwdGFnPC9zcGFuPiA6IChYKUhUTUwg dGFnIHRvIHdyYXAgYXJvdW5kIGVhY2ggaXRlbTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5pdGVtY2xhc3M8L3NwYW4+IDogZml4ZWQgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwv c3Bhbj4gY2xhc3MgbmFtZSB0byBhZGQgdG8gZWFjaCBpdGVtLiBUaGUgZGVmYXVsdCBpcyB0 byBhdXRvbWF0aWNhbGx5IGFzc2lnbiA8Y29kZT5zbWRfYmlvX25hbWVfb2ZfaXRlbTwvY29k ZT4gKGUuZy4gc21kX2Jpb19jZWxsLCBzbWRfYmlvX2RlcHQsIGV0Yyk8L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+YnJlYWs8L3NwYW4+IDogKFgpSFRNTCB0YWcgdG8gcHV0IGJl dHdlZW4gZWFjaCBpdGVtPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPndyYXB0YWc8 L3NwYW4+IDogKFgpSFRNTCB0YWcgdG8gd3JhcCBhcm91bmQgZWFjaCBhdXRob3ImIzgyMTc7 cyByZWNvcmQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2xhc3M8L3NwYW4+IDog PHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgdG8gYXBwbHkgdG8gdGhlIHdy YXB0YWc8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGFiZWx0YWc8L3NwYW4+IDog KFgpSFRNTCB0YWcgdG8gd3JhcCBhcm91bmQgdGhlIGl0ZW0mIzgyMTc7cyBsYWJlbCAoaWYg dXNlZCk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGFiZWxjbGFzczwvc3Bhbj4g OiA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzcyB0byBhcHBseSB0byB0aGUg bGFiZWwuIFRoZSBkZWZhdWx0IGlzIHRvIGF1dG9tYXRpY2FsbHkgYXNzaWduIDxjb2RlPnNt ZF9iaW9fbmFtZV9vZl9pdGVtPC9jb2RlPiAoZS5nLiBzbWRfYmlvX3Bob25lLCBzbWRfYmlv X2hvbWVfYWRkcmVzcywgZXRjKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5sYWJl bDwvc3Bhbj4gOiB3aGV0aGVyIHRvIGRpc3BsYXkgYSBsYWJlbCBvciBub3QgZm9yIGVhY2gg aXRlbS4gQ2hvb3NlIGZyb206Cgk8dWw+CgkJPGxpPjxzdHJvbmc+MTwvc3Ryb25nPiA6IChk ZWZhdWx0KSBEaXNwbGF5IHRoZSBUaXRsZSBvZiB0aGUgaXRlbTwvbGk+CgkJPGxpPjxzdHJv bmc+MDwvc3Ryb25nPiA6IERpc3BsYXkgdGhlIE5hbWUgb2YgdGhlIGl0ZW08L2xpPgoJCTxs aT48c3Ryb25nPnNvbWUgbGFiZWw8L3N0cm9uZz4gOiBEaXNwbGF5IHRoZSBnaXZlbiB0ZXh0 IGFzIGEgbGFiZWw8L2xpPgoJCTxsaT4mIzgyMjA7JiM4MjIxOyAoaS5lLiBlbXB0eSkgOiBE byBub3QgZGlzcGxheSBhbnkgbGFiZWw8L2xpPgoJPC91bD48L2xpPgoJPC91bD4KCgk8aDQg aWQ9InJlcHRhZ3MiPlJlcGxhY2VtZW50IHRhZ3M8L2g0PgoKCTxwPkluc2lkZSB0aGUgc21k X2Jpb19pbmZvIDxjb2RlPmZvcm08L2NvZGU+IG9yIGNvbnRhaW5lciB5b3UgbWF5IHV0aWxp c2Ugc3BlY2lhbCByZXBsYWNlbWVudCB0YWdzIHRoYXQgYWxsb3cgeW91IHRvIGRpc3BsYXkg YW55IHBpZWNlcyBvZiBjb250ZW50IGZyb20gdGhlIGN1cnJlbnQgaXRlbS4gVGhlIGNvcmUg cmVwbGFjZW1lbnQgdGFncyBhcmU6PC9wPgoKCTx1bD4KCQk8bGk+PGNvZGU+e3NtZF9iaW9f aW5mb19pdGVtfTwvY29kZT4gOiB0aGUgZ2l2ZW4gdmFsdWUgb2YgdGhlIGN1cnJlbnQgaXRl bTwvbGk+CgkJPGxpPjxjb2RlPntzbWRfYmlvX2luZm9fbmFtZX08L2NvZGU+IDogdGhlIHNh bml0aXplZCBuYW1lIG9mIHRoZSBjb2x1bW4gY29ycmVzcG9uZGluZyB0byB0aGlzIGl0ZW08 L2xpPgoJCTxsaT48Y29kZT57c21kX2Jpb19pbmZvX3RpdGxlfTwvY29kZT4gOiB0aGUgaHVt YW4tZnJpZW5kbHkgdGl0bGUgeW91IGFzc2lnbmVkIHRoaXMgaXRlbTwvbGk+CgkJPGxpPjxj b2RlPntzbWRfYmlvX2luZm9faXRlbWNsYXNzfTwvY29kZT4gOiB0aGUgbmFtZSBvZiB0aGUg Y2xhc3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaXRlbTwvbGk+CgkJPGxpPjxjb2RlPntzbWRf YmlvX2luZm9fbGFiZWxjbGFzc308L2NvZGU+IDogdGhlIG5hbWUgb2YgdGhlIGNsYXNzIGFz c29jaWF0ZWQgd2l0aCB0aGlzIGl0ZW0mIzgyMTc7cyBsYWJlbDwvbGk+CgkJPGxpPjxjb2Rl PntzbWRfYmlvXypuYW1lKn08L2NvZGU+IDogdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBpdGVt IChlLmcuIDxjb2RlPnNtZF9iaW9fY2VsbDwvY29kZT4sIDxjb2RlPnNtZF9iaW9fZGVwYXJ0 bWVudDwvY29kZT4sIGV0Yyk8L2xpPgoJPC91bD4KCgk8cD5JZiB5b3UgaGF2ZSBlbGVjdGVk IHRvIGV4dHJhY3QgYSBsaXN0IGl0ZW0gc3VjaCBhcyByYWRpbywgbGlzdCBvciBjaGVja2Jv eCB5b3Ugd2lsbCBoYXZlIHNvbWUgbW9yZSByZXBsYWNlbWVudCB0YWdzIGluIHRoZSBmb2xs b3dpbmcgZm9ybWF0OjwvcD4KCgk8dWw+CgkJPGxpPjxjb2RlPntzbWRfYmlvXypuYW1lKl9p dGVtX059PC9jb2RlPiA6IHRoZSB2YWx1ZSBvZiBlYWNoIG5hbWVkIGl0ZW0gaW4gdHVybiwg d2hlcmUgTiBzdGFydHMgYXQgMSBhbmQgaW5jcmVtZW50czwvbGk+CgkJPGxpPjxjb2RlPntz bWRfYmlvXypuYW1lKl9sYWJlbF9OfTwvY29kZT4gOiB0aGUgdmFsdWUgb2YgZWFjaCBuYW1l ZCBpdGVtJiM4MjE3O3MgbGFiZWwgaW4gdHVybi4gQWdhaW4sIE4gc3RhcnRzIGF0IDEgYW5k IGNvdW50cyB1cCBmb3IgZXZlcnkgaXRlbSBpbiB5b3VyIGxpc3Q8L2xpPgoJCTxsaT48Y29k ZT57c21kX2Jpb18qbmFtZSpfY2hvc2VuX059PC9jb2RlPiA6IHRoZSB2YWx1ZSBvZiBlYWNo IHNlbGVjdGVkIGl0ZW0gaW4gdHVybiwgd2hlcmUgTiBzdGFydHMgYXQgMSBhbmQgaW5jcmVt ZW50cy4gRm9yIHNlbGVjdCBhbmQgcmFkaW8gbGlzdHMgdGhlcmUgd2lsbCBiZSBvbmx5IG9u ZTsgZm9yIGNoZWNrYm94IGdyb3VwcyB0aGVyZSBtYXkgYmUgbW9yZTwvbGk+CgkJPGxpPjxj b2RlPntzbWRfYmlvXypuYW1lKl9jaG9zZW5fbGFiZWxfTn08L2NvZGU+IDogdGhlIHZhbHVl IG9mIGVhY2ggc2VsZWN0ZWQgaXRlbSYjODIxNztzIGxhYmVsIGluIHR1cm4sIHdoZXJlIE4g c3RhcnRzIGF0IDEgYW5kIGluY3JlbWVudHM8L2xpPgoJCTxsaT48Y29kZT57c21kX2Jpb18q bmFtZSpfY291bnR9PC9jb2RlPiA6IHRoZSB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMgaW4g dGhlIG5hbWVkIGxpc3Q8L2xpPgoJCTxsaT48Y29kZT57c21kX2Jpb18qbmFtZSpfY2hvc2Vu X2NvdW50fTwvY29kZT4gOiB0aGUgdG90YWwgbnVtYmVyIG9mIHNlbGVjdGVkIGVsZW1lbnRz IGluIHRoZSBuYW1lZCBsaXN0PC9saT4KCTwvdWw+CgoJPGg0PlJlcGxhY2VtZW50IHRhZyBu b3RlczwvaDQ+CgoJPHA+SWYgeW91IGV4dHJhY3QgbW9yZSB0aGFuIG9uZSBpdGVtIGF0IG9u Y2UgaW4geW91ciA8Y29kZT5pdGVtczwvY29kZT4gYXR0cmlidXRlLCB0aGUgaW5kaXZpZHVh bCBuYW1lZCByZXBsYWNlbWVudCB2YXJpYWJsZSB3b24mIzgyMTc7dCBiZSBhdmFpbGFibGUg dW50aWwgdGhlIHBsdWdpbiBoYXMgZGlzY292ZXJlZCB0aGVtLiBGb3IgZXhhbXBsZTo8L3A+ Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9i aW9faW5mbyBpdGVtcz0mcXVvdDtjZWxsLCBtdWcsIGRlcHQmcXVvdDsmZ3Q7CntzbWRfYmlv X2luZm9fdGl0bGV9OiB7c21kX2Jpb19jZWxsfSZsdDticiAvJmd0Owp7c21kX2Jpb19pbmZv X3RpdGxlfToge3NtZF9iaW9fbXVnfSZsdDticiAvJmd0Owp7c21kX2Jpb19pbmZvX3RpdGxl fToge3NtZF9iaW9fZGVwdH0mbHQ7YnIgLyZndDsKJmx0Oy90eHA6c21kX2Jpb19pbmZvJmd0 Owo8L2NvZGU+PC9wcmU+CgoJPHA+d291bGQgb3V0cHV0OjwvcD4KCjxwcmUgY2xhc3M9ImJs b2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPk1vYmlsZSBudW1iZXI6IDU1NS1TUVVJRApNb2Jp bGUgbnVtYmVyOiB7c21kX2Jpb19tdWd9Ck1vYmlsZSBudW1iZXI6IHtzbWRfYmlvX2RlcHR9 Ck11Z3Nob3Q6IDU1NS1TUVVJRApNdWdzaG90OiAyCk11Z3Nob3Q6IHtzbWRfYmlvX2RlcHR9 CkRlcHQ6IDU1NS1TUVVJRApEZXB0OiAyCkRlcHQ6IGVuZwo8L2NvZGU+PC9wcmU+CgoJPHA+ Tm90IHF1aXRlIHdoYXQgeW91IHdhbnRlZCEgRm9yIHRoaXMgcmVhc29uIGl0IGlzIGJlc3Qg dG8gdXNlIHRoZSBpbmRpdmlkdWFsIG5hbWVkIGl0ZW1zIDxzdHJvbmc+b25seTwvc3Ryb25n PiB3aGVuIHlvdSBhcmUgdXNpbmcgYSBzaW5nbGUgPGNvZGU+aXRlbTwvY29kZT4uIFNlZSA8 YSBocmVmPSIjZWc0Ij5FeGFtcGxlIDQ8L2E+IGZvciB3YXlzIHJvdW5kIHRoaXM6PC9wPgoK CTxwPklmIHlvdSB3aXNoIHRvIHNlZSBhbiBlbnRpcmUgbGlzdCBvZiBhdmFpbGFibGUgcmVw bGFjZW1lbnQgdGFncyBhcyB0aGUgcGx1Z2luIGJ1aWxkcyB0aGVtIHVwLCBhZGQgPGNvZGU+ ZGVidWc9JnF1b3Q7MSZxdW90OzwvY29kZT4gdG8geW91ciBzbWRfYmlvX2luZm8gdGFnLjwv cD4KCgk8aDM+PGNvZGU+Jmx0O3R4cDpzbWRfYmlvX2FydGljbGVzJmd0OzwvY29kZT48L2gz PgoKCTxwPkEgc2ltcGxlIGNvbnZlbmllbmNlIHdyYXBwZXIgZm9yIDxjb2RlPiZsdDt0eHA6 YXJ0aWNsZV9jdXN0b20gLyZndDs8L2NvZGU+IHRoYXQgc2V0cyB0aGUgPGNvZGU+YXV0aG9y PC9jb2RlPiBhdHRyaWJ1dGUgdG8gdGhlIHBlcnNvbiB3aG8gd3JvdGUgdGhlIGN1cnJlbnQg YXJ0aWNsZS4gSWYgeW91IHNwZWNpZnkgYW4gYXV0aG9yLCB0aGF0IHBlcnNvbiB3aWxsIGJl IHVzZWQgaW5zdGVhZC4gSW4gYWxsIG90aGVyIHJlZ2FyZHMsIHRoZSB0YWcgZnVuY3Rpb25z IGlkZW50aWNhbGx5IHRvIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5uZXQvd2lraS9p bmRleC5waHA/dGl0bGU9YXJ0aWNsZV9jdXN0b20iPmFydGljbGVfY3VzdG9tPC9hPiBhbmQg Y2FuIGJlIHVzZWQgYXMgYSBjb250YWluZXIgaWYgeW91IHdpc2guPC9wPgoKCTxwIGNsYXNz PSJyZXF1aXJlZCI+PHNwYW4gY2xhc3M9ImNhcHMiPklNUE9SVEFOVDwvc3Bhbj46IHRha2Ug Y2FyZSB3aGVuIHVzaW5nIHRoaXMgdGFnIGluc2lkZSB5b3VyIGRlZmF1bHQgZm9ybS4gSWYg eW91IGRvIG5vdCBzcGVjaWZ5IHlvdXIgb3duIGNvbnRhaW5lciBvciBhIGRlZGljYXRlZCA8 Y29kZT5mb3JtPC9jb2RlPiwgeW91IHdpbGwgcmVjZWl2ZSBhIDxlbT5jaXJjdWxhciByZWZl cmVuY2UgZXJyb3I8L2VtPiBmcm9tIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGFz IGl0IHRyaWVzIHRvIGNhbGwgdGhlIGRlZmF1bHQgZm9ybSwgd2hpY2ggY2FsbHMgdGhlIGRl ZmF1bHQgZm9ybSwgd2hpY2ggY2FsbHMgdGhlIGRlZmF1bHQgZm9ybSYjODIzMDs8L3A+CgoJ PGgyPkV4YW1wbGVzPC9oMj4KCgk8aDMgaWQ9ImVnMSI+RXhhbXBsZSAxOiBMaXN0IGJpbyBm aWVsZHM8L2gzPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0 O3R4cDpzbWRfYmlvX2luZm8KICAgICBpdGVtcz0mcXVvdDtqb2J0aXRsZSwgZXh0ZW5zaW9u LCBjZWxsLCBkZXBhcnRtZW50JnF1b3Q7CiAgICAgbGFiZWx0YWc9JnF1b3Q7ZHQmcXVvdDsg d3JhcHRhZz0mcXVvdDtkbCZxdW90OwogICAgIGl0ZW13cmFwdGFnPSZxdW90O2RkJnF1b3Q7 IGNsYXNzPSZxdW90O3JlY29yZCZxdW90OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+U2hv d3MgdGhlIGpvYiB0aXRsZSwgd29yayYjODIxNztzIGV4dGVuc2lvbiBudW1iZXIsIGNlbGwg cGhvbmUgbnVtYmVyIGFuZCBkZXBhcnRtZW50IG9mIHRoZSBjdXJyZW50IGF1dGhvciwgYXMg YSBkZWZpbml0aW9uIGxpc3QuPC9wPgoKCTxoMyBpZD0iZWcyIj5FeGFtcGxlIDI6IExpc3Qg dXNlcnMgYnkgcHJpdiBsZXZlbDwvaDM+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xh c3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9iaW9faW5mbwogICAgIGF1dGhvcj0mcXVvdDttcl9w dWIsIFNNRF9QUklWUzo0OjMmcXVvdDsKICAgICBpdGVtcz0mcXVvdDtuYW1lLCBSZWFsTmFt ZSwgZGVwYXJ0bWVudCZxdW90OwogICAgIGxhYmVsdGFnPSZxdW90O2R0JnF1b3Q7IHdyYXB0 YWc9JnF1b3Q7ZGwmcXVvdDsKICAgICBpdGVtd3JhcHRhZz0mcXVvdDtkZCZxdW90OyAvJmd0 Owo8L2NvZGU+PC9wcmU+CgoJPHA+U2hvd3MgdGhlIG5hbWUsIHJlYWwgbmFtZSBhbmQgZGVw YXJ0bWVudCBvZiBhbGwgPGVtPkNvcHkgRWRpdG9yczwvZW0+IGFuZCA8ZW0+U3RhZmYgV3Jp dGVyczwvZW0+IGFuZCB0aGUgdXNlciAmIzgyMTY7bXJfcHViJiM4MjE3Oy48L3A+CgoJPGgz IGlkPSJlZzMiPkV4YW1wbGUgMzogVXNpbmcgc21kX2Jpb19hcnRpY2xlczwvaDM+Cgo8cHJl IGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9iaW9faW5m byBpdGVtcz0mcXVvdDtwaG90byZxdW90OyBsYWJlbD0mcXVvdDsmcXVvdDsmZ3Q7CiAgICZs dDt0eHA6aW1hZ2UgaWQ9JnF1b3Q7e3NtZF9iaW9fcGhvdG99JnF1b3Q7IC8mZ3Q7CiZsdDsv dHhwOnNtZF9iaW9faW5mbyZndDsgUmVjZW50IGFydGljbGVzIGJ5CiAgICZsdDthIGhyZWY9 JnF1b3Q7L2Rlc2tzLyZsdDt0eHA6c21kX2Jpb19pbmZvCiAgICAgICAgaXRlbXM9JiMzOTtk ZXBhcnRtZW50JiMzOTsgbGFiZWw9JnF1b3Q7JnF1b3Q7IC8mZ3Q7JnF1b3Q7Jmd0OwogICAg ICAgICZsdDt0eHA6c21kX2Jpb19pbmZvIGl0ZW1zPSZxdW90O1JlYWxOYW1lJnF1b3Q7CiAg ICAgICAgICAgbGFiZWw9JnF1b3Q7JnF1b3Q7IC8mZ3Q7CiAgICAgJmx0Oy9hJmd0OzoKJmx0 O3R4cDpzbWRfYmlvX2FydGljbGVzIGxpbWl0PSZxdW90OzYmcXVvdDsKICAgICB3cmFwdGFn PSZxdW90O3VsJnF1b3Q7IGJyZWFrPSZxdW90O2xpJnF1b3Q7Jmd0OwogICAmbHQ7dHhwOnBl cm1saW5rJmd0OyZsdDt0eHA6dGl0bGUgLyZndDsmbHQ7L3R4cDpwZXJtbGluayZndDsKJmx0 Oy90eHA6c21kX2Jpb19hcnRpY2xlcyZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPkRpc3BsYXlz IHRoZSBhdXRob3IgcGhvdG8sIHRoZSBhdXRob3ImIzgyMTc7cyBSZWFsTmFtZSBsaW5rZWQg dG8gdGhlIHNlY3Rpb24gdGhhdCBleHBsYWlucyBhYm91dCB0aGUgZGVwYXJ0bWVudCB0byB3 aGljaCBzaGUgYmVsb25ncywgdGhlbiBsaXN0cyB0aGUgNiBtb3N0IHJlY2VudCBhcnRpY2xl cyBieSBoZXIuIE5vdGUgdGhlIHVzZSBvZiA8Y29kZT5sYWJlbD0mcXVvdDsmcXVvdDs8L2Nv ZGU+IHRvIHN1cHByZXNzIHRoZSBhdXRvbWF0aWMgbGFiZWxsaW5nIG9mIGl0ZW1zIGFuZCBv dXIgdXNlIG9mIGEgcmVwbGFjZW1lbnQgdGFnIHRvIGZlZWQgPGNvZGU+Jmx0O3R4cDppbWFn ZSAvJmd0OzwvY29kZT4gd2l0aCB0aGUgSUQgb2YgdGhlIHNlbGVjdGVkIHBob3RvLjwvcD4K Cgk8aDMgaWQ9ImVnNCI+RXhhbXBsZSA0OiBOZXN0aW5nIHRhZ3M8L2gzPgoKPHByZSBjbGFz cz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfYmlvX2luZm8gYXV0 aG9yPSZxdW90O1NNRF9QUklWUzo1JnF1b3Q7IGl0ZW1zPSZxdW90O25hbWUmcXVvdDsmZ3Q7 CiAgICZsdDshLS0gRm9yIGVhY2ggYXV0aG9yJiMzOTtzIG5hbWUgLS0mZ3Q7CiAgICZsdDth IGNsYXNzPSZxdW90O2ltYWdlJnF1b3Q7CiAgICAgaHJlZj0mcXVvdDsvYmxvZy8mbHQ7dHhw OnNtZF9iaW9faW5mbyBhdXRob3I9JnF1b3Q7e3NtZF9iaW9faW5mb19pdGVtfSZxdW90Owog ICAgICAgaXRlbXM9JnF1b3Q7bmFtZSZxdW90OyBsYWJlbD0mcXVvdDsmcXVvdDsgLyZndDsm cXVvdDsKICAgICB0aXRsZT0mcXVvdDticm93c2Ugb3RoZXIgcG9zdHMgYnkgdGhpcyBhdXRo b3ImcXVvdDsmZ3Q7CiAgICAgICZsdDtpbWcgY2xhc3M9JnF1b3Q7dGh1bWImcXVvdDsKICAg ICAgICBzcmM9JnF1b3Q7L2ltYWdlcy8mbHQ7dHhwOnNtZF9iaW9faW5mbyBhdXRob3I9JiMz OTt7c21kX2Jpb19pbmZvX2l0ZW19JiMzOTsKICAgICAgICBpdGVtcz0mIzM5O2ltYWdlJiMz OTsgbGFiZWw9JiMzOTsmIzM5OyAvJmd0Oy5qcGcmcXVvdDsgLyZndDsKICAgJmx0Oy9hJmd0 OwogICAmbHQ7ZGl2IGNsYXNzPSZxdW90O3N1bW1hcnkmcXVvdDsmZ3Q7CiAgICAgICZsdDt0 eHA6c21kX2Jpb19pbmZvIGF1dGhvcj0mIzM5O3tzbWRfYmlvX2luZm9faXRlbX0mIzM5OwoJ ICAgICBpdGVtcz0mIzM5O3Byb2ZpbGUmIzM5OyBsYWJlbD0mIzM5OyYjMzk7IC8mZ3Q7CiAg ICZsdDsvZGl2Jmd0OwombHQ7L3R4cDpzbWRfYmlvX2luZm8mZ3Q7CjwvY29kZT48L3ByZT4K Cgk8cD5Ob3RlIHRoYXQgd2UgaXRlcmF0ZSBvdmVyIGVhY2ggYXV0aG9yIGZpcnN0IGFuZCB0 aGVuIHBsdWcgdGhlIDxjb2RlPntzbWRfYmlvX2luZm9faXRlbX08L2NvZGU+ICh0aGUgYXV0 aG9yJiM4MjE3O3MgbmFtZSkgaW50byBlYWNoIG5lc3RlZCA8Y29kZT5zbWRfYmlvX2luZm88 L2NvZGU+IHRhZy4gVGhpcyBwdWxscyBvdXQgaW5kaXZpZHVhbCBpdGVtcyBqdXN0IGZvciB0 aGF0IGF1dGhvciBhbmQgaW5zZXJ0cyB0aGVtIGluIHRoZSBtYXJrdXAsIGFnYWluIHVzaW5n IDxjb2RlPmxhYmVsPSZxdW90OyZxdW90OzwvY29kZT4gdG8gb21pdCB0aGUgbGFiZWwuPC9w PgoKCTxoMj5DaGFuZ2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+MTQgSnVsIDA5IHwgMC4xIHwg SW5pdGlhbCAobm9uLXB1YmxpYykgcmVsZWFzZTwvbGk+CgkJPGxpPjIxIEF1ZyAwOSB8IDAu MiB8IEZpcnN0IHB1YmxpYyByZWxlYXNlIDsgbm8gaW1hZ2UvdGh1bWIgb3V0cHV0IDsgZXhw ZXJpbWVudGFsIDxjb2RlPm9wdGlvbnM8L2NvZGU+IGF0dHJpYnV0ZSByZW1vdmVkIDsgY29u dGFpbmVyL2Zvcm0gYWNjZXB0cyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB0YWdz IDsgZml4ZWQgdGV4dGJveCBzaXplIGxpbWl0ICh0aGFua3MgTWF0dEQpPC9saT4KCQk8bGk+ MzEgQXVnIDA5IHwgMC4zIHwgUmVtb3ZlZCA8Y29kZT5pdGVtPC9jb2RlPiBhdHRyaWJ1dGUg OyBmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgaWYgdXNpbmcgc2luZ2xlIGl0ZW1zIDsgaGlkZGVu IHByZWYgPGNvZGU+c21kX2Jpb19zYW5pdGl6ZV9uYW1lPC9jb2RlPiBmb3JjZXMgc2FuaXRp emVkIGxvZ2luIG5hbWVzPC9saT4KCQk8bGk+MDggSnVuIDEwIHwgMC4zMSB8IEphdmFzY3Jp cHQgb25seSBhcHBlYXJzIG9uIGFkbWluIHRhYiAodGhhbmtzIHJlZGJvdC9Hb2NvbSk8L2xp PgoJPC91bD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NTICoqKiAtLT4KPHN0 eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNz bWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3Vy aWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZD Qzt9CiNzbWRfaGVscCBjb2RlLmJsb2NrIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6 MXB4IGRvdHRlZCAjOTk5OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBkaXNwbGF5OmJs b2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21kX2hlbHAg aDEgeyBjb2xvcjogIzM2OTsgZm9udDogMjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJn aW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgfQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90 dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGNvbG9yOiAjMzY5OyBm b250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI3NtZF9oZWxwIGgzIHsgY29sb3I6 ICMyNzU2ODU7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNw YWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNl OyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30KI3NtZF9oZWxwIGg0IHsgZm9udDogYm9s ZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46 IDEwcHggMCAwIDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9CiNzbWRfaGVscCAuYXRu bSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOiMzM2Q7IH0KI3NtZF9oZWxwIC5tYW5kIHsg YmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNzbWRfaGVscCB0 YWJsZSB7d2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVt O30KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGgge2JvcmRlcjoxcHggc29saWQgIzk5OTsg cGFkZGluZzouNWVtIDA7fQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJl OyB9CiNzbWRfaGVscCAucmVxdWlyZWQge2NvbG9yOnJlZDt9CiNzbWRfaGVscCBsaSB7IG1h cmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRv cDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5EIFBMVUdJTiBDU1MgKioqIC0tPgoiO3M6 MzoibWQ1IjtzOjMyOiI4ZTFhYjE4NmY2YzA4NDRhZmU4NWVhNzFlYmU1OGM2OSI7fQ==