# Name: smd_remote_file v0.43 # Type: Admin/Client side plugin # Allows remote URL files to be handled from the Files tab # 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: # ..................................................................... YToxMDp7czo0OiJuYW1lIjtzOjE1OiJzbWRfcmVtb3RlX2ZpbGUiO3M6NjoiYXV0aG9yIjtz OjExOiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZk YXdzb24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuNDMiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjU2OiJBbGxvd3MgcmVtb3RlIFVSTCBmaWxlcyB0byBiZSBoYW5kbGVkIGZyb20gdGhl IEZpbGVzIHRhYiI7czo0OiJjb2RlIjtzOjE0NjI2OiIvLyBzbWRfcmVtb3RlX2ZpbGUgYnkg U3RlZiBEYXdzb24NCg0KLy8gWXVrIDotKA0KZ2xvYmFsICRzbWRfcmVtb3RlX2ZpbGVfdmFy czsNCiRzbWRfcmVtb3RlX2ZpbGVfdmFycyA9IGFycmF5KA0KCSdtc2cnID0+ICcnLA0KCSdt aW5fdHhwX3ZlcicgPT4gJzQuMC42JywNCik7DQoNCmlmIChAdHhwaW50ZXJmYWNlID09PSAn YWRtaW4nICYmIGdwcygnZXZlbnQnKSA9PT0gImZpbGUiKSB7DQoJaWYgKHZlcnNpb25fY29t cGFyZShAdHhwX3ZlcnNpb24sICRzbWRfcmVtb3RlX2ZpbGVfdmFyc1snbWluX3R4cF92ZXIn XSwgIj49IikpIHsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9yZW1vdGVfZmlsZV9yZXBs YWNlJywgJ2ZpbGUnLCAnc21kX3JlbW90ZV9maWxlX3JlcGxhY2UnKTsNCgkJcmVnaXN0ZXJf Y2FsbGJhY2soJ3NtZF9yZW1vdGVfZmlsZV91cGRhdGUnLCAnZmlsZScsICdmaWxlX3NhdmUn KTsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9yZW1vdGVfZmlsZV9jcmVhdGUnLCAnZmls ZScsICdzbWRfcmVtb3RlX2ZpbGVfY3JlYXRlJywgMSk7DQoJCXJlZ2lzdGVyX2NhbGxiYWNr KCdzbWRfcmVtb3RlX2ZpbGUnLCAnZmlsZScpOw0KCX0gZWxzZSB7DQoJCXRyaWdnZXJfZXJy b3IoZ1R4dCgndHhwX3ZlcnNpb24nKSAuICIgIiAuJHNtZF9yZW1vdGVfZmlsZV92YXJzWydt aW5fdHhwX3ZlciddLiAiIHJlcXVpcmVkLiIpOw0KCX0NCn0NCg0KaWYgKHR4cGludGVyZmFj ZSA9PT0gJ3B1YmxpYycpIHsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3JlbW90ZV9kb3du bG9hZCcsICdmaWxlX2Rvd25sb2FkJyk7DQp9DQoNCi8vIEJsb3ctYnktYmxvdyBlcXVpdmFs ZW50IG9mIGZpbGVfZG93bmxvYWRfbGluaywganVzdCBhIHJlbW90ZS1hd2FyZSB2ZXJzaW9u Lg0KLy8gQWRkcyB0aGUgY2hvb3NlIG9wdGlvbi4gRGVmYXVsdHMgdG8gMCAoID0gcmFuZG9t LCBmb3IgbG9hZCBiYWxhbmNpbmcpLiBTcGVjaWZ5DQovLyBhbnkgaGlnaGVyIGludGVnZXIg dG8gZ3JhYiB0aGF0IHBhcnRpY3VsYXIgZW50cnkgZnJvbSB0aGUgZmlsZSAoaWYgaXQgZXhp c3RzLCBlbHNlIHVzZSAxc3QpDQpmdW5jdGlvbiBzbWRfZmlsZV9kb3dubG9hZF9saW5rKCRh dHRzLCAkdGhpbmcpIHsNCglnbG9iYWwgJHRoaXNmaWxlOw0KCWV4dHJhY3QobEF0dHMoYXJy YXkoDQoJCSdmaWxlbmFtZScgPT4gJycsDQoJCSdpZCcgPT4gJycsDQoJCSdjaG9vc2UnID0+ ICcwJywNCgkJJ3Nob3dfbGluaycgPT4gJzAnLA0KCSksICRhdHRzKSk7DQoNCgkvLyBSZW1v dmUgdGhlIGV4dHJhIGF0dHJpYnV0ZXMgbm90IGluIHRoZSBvcmlnaW5hbCB0YWcNCgl1bnNl dCgkYXR0c1snc2hvd19saW5rJ10pOw0KCXVuc2V0KCRhdHRzWydjaG9vc2UnXSk7DQoNCgkk a2V5cyA9IGFycmF5KCJzbWRfY2hvb3NlIiA9PiAkY2hvb3NlKTsNCgkkb3V0ID0gZmlsZV9k b3dubG9hZF9saW5rKCRhdHRzLCAkdGhpbmcpOw0KDQoJaWYgKHN0cnBvcygkb3V0LCAiLmxp bmsiKSkgew0KCQkkb3JpZ0xpbmsgPSBleHBsb2RlKCciJywgJG91dCk7DQoJCSRpZHggPSAo Y291bnQoJG9yaWdMaW5rKSA9PSAxKSA/IDAgOiAxOw0KCQkkb3JpZ0xpbmtbJGlkeF0gPSAo KCRzaG93X2xpbmspID8gJG9yaWdMaW5rWyRpZHhdIDogc3RyX3JlcGxhY2UoIi5saW5rIiwg IiIsICRvcmlnTGlua1skaWR4XSkpIC4gam9pbl9xcygka2V5cyk7IC8vIFdpbGwgaWdub3Jl IGpvaW5fcXMgaWYgY2hvb3NlIGlzIDANCgkJJG91dCA9IGltcGxvZGUoJyInLCAkb3JpZ0xp bmspOw0KCX0NCglyZXR1cm4gJG91dDsNCn0NCg0KLy8gRXF1aXZhbGVudCB0byBmaWxlX2Rv d25sb2FkX25hbWUgYnV0IG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgLmxpbmsNCmZ1bmN0aW9u IHNtZF9maWxlX2Rvd25sb2FkX25hbWUoJGF0dHMpIHsNCglnbG9iYWwgJHRoaXNmaWxlOw0K CWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSdzaG93X2xpbmsnID0+ICcwJywNCgkpLCAkYXR0 cykpOw0KCWFzc2VydF9maWxlKCk7DQoJcmV0dXJuICgkc2hvd19saW5rKSA/ICR0aGlzZmls ZVsnZmlsZW5hbWUnXSA6IHN0cl9yZXBsYWNlKCIubGluayIsICIiLCAkdGhpc2ZpbGVbJ2Zp bGVuYW1lJ10pOw0KfQ0KDQovLyBBZGQgYW4gaW1hZ2UgdG8gdGhlIGRvd25sb2FkIGZvcm0g d2hpY2gsIGJ5IGRlZmF1bHQsIGlzIGJhc2VkIG9uIHRoZSBmaWxlbmFtZSBvZiB0aGUgZG93 bmxvYWQgaXRzZWxmDQpmdW5jdGlvbiBzbWRfZmlsZV9kb3dubG9hZF9pbWFnZSgkYXR0cykg ew0KCWdsb2JhbCAkdGhpc2ZpbGU7DQoJYXNzZXJ0X2ZpbGUoKTsNCg0KCWV4dHJhY3QobEF0 dHMoYXJyYXkoDQoJCSdmaWxlbmFtZScgPT4gJycsDQoJCSdpZCcgPT4gJycsDQoJCSdleHRl bnNpb24nID0+ICdqcGcnLA0KCQknaWZtaXNzaW5nJyA9PiAnP3JlZicsDQoJCSd0aHVtYicg PT4gJzAnLA0KCQknY2xhc3MnID0+ICcnLA0KCQknd3JhcHRhZycgPT4gJycsDQoJKSwgJGF0 dHMpKTsNCgkkZmlsZWxpbmsgPSAkdGhpc2ZpbGVbJ2ZpbGVuYW1lJ107DQoJaWYgKCRmaWxl bmFtZSA9PSAiIikgew0KCQkkZmlsZW5hbWUgPSAkZmlsZWxpbms7DQoJfQ0KCSRmaWxlbmFt ZSA9IHN0cl9yZXBsYWNlKCIubGluayIsICIiLCAkZmlsZW5hbWUpIC4gKCgkZXh0ZW5zaW9u PT0iIikgPyAnJyA6ICcuJy4kZXh0ZW5zaW9uKTsNCg0KCSRpbWcgPSAnJzsNCglpZiAoJGlk KSB7DQoJCSRpbWcgPSAoJHRodW1iPT0wKSA/IEBpbWFnZShhcnJheSgiaWQiID0+ICRpZCwg ImNsYXNzIiA9PiAkY2xhc3MsICJ3cmFwdGFnIiA9PiAkd3JhcHRhZykpIDogQHRodW1ibmFp bChhcnJheSgiaWQiID0+ICRpZCwgImNsYXNzIiA9PiAkY2xhc3MsICJ3cmFwdGFnIiA9PiAk d3JhcHRhZykpOw0KCX0gZWxzZSBpZiAoKHN0cnBvcygkZmlsZW5hbWUsICJodHRwOi8vIikg PT09IDApIHx8IChzdHJwb3MoJGZpbGVuYW1lLCAiLyIpID09PSAwKSkgew0KCQkkaW1nID0g KCgkd3JhcHRhZz09IiIpID8gJycgOiAnPCcuJHdyYXB0YWcuICgoJGNsYXNzPT0iIikgPyAn JyA6ICcgY2xhc3M9IicuJGNsYXNzLiciJykgLic+JykgLiAnPGltZyBzcmM9IicuJGZpbGVu YW1lLiciJy4gKCgkd3JhcHRhZz09IiIgJiYgJGNsYXNzKSA/ICcgY2xhc3M9IicuJGNsYXNz LiciJyA6ICcnKSAuICcvPicuICgoJHdyYXB0YWc9PSIiKSA/ICcnIDogJzwvJy4kd3JhcHRh Zy4nPicpOw0KCX0gZWxzZSB7DQoJCSRpbWcgPSAoJHRodW1iPT0wKSA/IEBpbWFnZShhcnJh eSgibmFtZSIgPT4gJGZpbGVuYW1lLCAiY2xhc3MiID0+ICRjbGFzcywgIndyYXB0YWciID0+ ICR3cmFwdGFnKSkgOiBAdGh1bWJuYWlsKGFycmF5KCJuYW1lIiA9PiAkZmlsZW5hbWUsICJj bGFzcyIgPT4gJGNsYXNzLCAid3JhcHRhZyIgPT4gJHdyYXB0YWcpKTsNCgl9DQoJJHdyYXBw ZXIgPSAoKCR3cmFwdGFnPT0iIikgPyAnQEBSRVBMJyA6ICc8Jy4kd3JhcHRhZy4gKCgkY2xh c3M9PSIiKSA/ICcnIDogJyBjbGFzcz0iJy4kY2xhc3MuJyInKSAuJz5AQFJFUEw8LycuJHdy YXB0YWcuJz4nKTsNCglpZiAoc3RycG9zKCRpZm1pc3NpbmcsICI/cmVmIikgPT09IDApIHsN CgkJJGRpc3BsYXkgPSAoJGlkKSA/ICRpZCA6ICRmaWxlbmFtZTsNCgkJJG1pc3NpbmcgPSBz dHJfcmVwbGFjZSgiQEBSRVBMIiwgJGRpc3BsYXksICR3cmFwcGVyKTsNCgl9IGVsc2UgaWYg KHN0cnBvcygkaWZtaXNzaW5nLCAiP2ltYWdlIikgPT09IDApIHsNCgkJJGltZ1BhcnRzID0g ZXhwbG9kZSgiOiIsICRpZm1pc3NpbmcpOw0KCQlpZiAoY291bnQoJGltZ1BhcnRzKSA9PSAy KSB7DQoJCQkkaW1nT3B0cyA9IGFycmF5KCk7DQoJCQlpZihpc19udW1lcmljKCRpbWdQYXJ0 c1sxXSkpIHsNCgkJCQkkaW1nT3B0c1siaWQiXSA9ICRpbWdQYXJ0c1sxXTsNCgkJCX0gZWxz ZSB7DQoJCQkJJGltZ09wdHNbIm5hbWUiXSA9ICRpbWdQYXJ0c1sxXTsNCgkJCX0NCgkJCSRt aXNzaW5nID0gc3RyX3JlcGxhY2UoIkBAUkVQTCIsICgoJHRodW1iPT0wKSA/IEBpbWFnZSgk aW1nT3B0cykgOiBAdGh1bWJuYWlsKCRpbWdPcHRzKSksICR3cmFwcGVyKTsNCgkJfSBlbHNl IHsNCgkJCSRtaXNzaW5nID0gIiI7DQoJCX0NCgl9IGVsc2UgaWYgKCRpZm1pc3NpbmcgPT0g IiIpIHsNCgkJJG1pc3NpbmcgPSAiIjsNCgl9IGVsc2Ugew0KCQkkbWlzc2luZyA9IHN0cl9y ZXBsYWNlKCJAQFJFUEwiLCAkaWZtaXNzaW5nLCAkd3JhcHBlcik7DQoJfQ0KCXJldHVybiAo JGltZykgPyAkaW1nIDogJG1pc3Npbmc7DQp9DQoNCi8vIEdlbmVyaWMgY2FsbGJhY2sgd2hp Y2ggaXMgZmlyZWQgX2FmdGVyXyB0aGUgRmlsZXMgcGFnZSBoYXMgbG9hZGVkLg0KLy8gUGVy Zm9ybXMgZGlzcGxheSBjbGVhbnVwL2luc2VydGlvbiBhbmQgcG9zdCBwcm9jZXNzaW5nIG9m IGFueSBmaWxlIGluc2VydHMvZWRpdHMNCmZ1bmN0aW9uIHNtZF9yZW1vdGVfZmlsZSgkZXZl bnQsICRzdGVwKSB7DQoJZ2xvYmFsICRzbWRfcmVtb3RlX2ZpbGVfdmFyczsNCg0KCSRoZWxw TGluayA9ICc8YSB0YXJnZXQ9Il9ibGFuayInLg0KCQkJJyBocmVmPSJodHRwOi8vc3RlZmRh d3Nvbi5jb20vc21kX3JlbW90ZV9maWxlX3VybF9wb3B1cCInLg0KCQkJJyBvbmNsaWNrPSJw b3BXaW4odGhpcy5ocmVmKTsgcmV0dXJuIGZhbHNlOyIgY2xhc3M9InBvcGhlbHAiPj88L2E+ JzsNCglpZiAoJHN0ZXAgPT0gImZpbGVfZWRpdCIgfHwgJHN0ZXAgPT0gImZpbGVfcmVwbGFj ZSIpIHsNCgkJJGlkID0gYXNzZXJ0X2ludChncHMoJ2lkJykpOw0KCQkkcnMgPSBzYWZlX3Jv dygnZmlsZW5hbWUnLCd0eHBfZmlsZScsJ2lkID0gJy4gJGlkKTsNCgkJaWYgKHN0cnBvcygk cnNbJ2ZpbGVuYW1lJ10sICIubGluayIpICE9PSBmYWxzZSkgew0KCQkJJHVsX2Zvcm0gPSB0 cmltKGZvcm0oZUlucHV0KCdmaWxlJykuIHNJbnB1dCgnc21kX3JlbW90ZV9maWxlX3JlcGxh Y2UnKS4gaElucHV0KCdpZCcsJGlkKS4NCgkJCQkJZ3JhZignQWRkIFVSTCcuc3AuJGhlbHBM aW5rLnNwLmZJbnB1dCgndGV4dCcsICdzbWRfcmVtb3RlX3VybCcsICcnLCAnZWRpdCcsICdF bnRlciBhIFVSTCB0byBhZGQgdG8gdGhpcyBmaWxlJywgJycsICczMicpLnNwLg0KCQkJCQkJ Ik92ZXJ3cml0ZToiLnNwLmNoZWNrYm94KCdzbWRfcmVtb3RlX2JsYXQnLCAnc21kX3JlbW90 ZV9ibGF0JywgMCkuc3AuDQoJCQkJCQlmSW5wdXQoJ3N1Ym1pdCcsICcnLCAnVXBsb2FkJywg J3NtYWxsZXJib3gnKSkNCgkJCQksICd0ZXh0LWFsaWduOiBjZW50ZXI7JykpOw0KCQkJZWNo byBzbWRfcmVtb3RlX2pzKCckKCIudXBsb2FkLWZvcm0iKS5yZXBsYWNlV2l0aChcJycuJHVs X2Zvcm0uJ1wnKTsnKTsNCgkJfQ0KCX0gZWxzZSB7DQoJCSR1bF9mb3JtID0gdHJpbShmb3Jt KGVJbnB1dCgnZmlsZScpLiBzSW5wdXQoJ3NtZF9yZW1vdGVfZmlsZV9jcmVhdGUnKS4NCgkJ CQkJZ3JhZignb3IgVVJMJy5zcC4kaGVscExpbmsuc3AuZklucHV0KCd0ZXh0JywgJ3NtZF9y ZW1vdGVfdXJsJywgJycsICdlZGl0JywgJ0VudGVyIGEgVVJMIHRvIHVwbG9hZCB0byBUWFAn LCAnJywgJzMyJykuc3AuDQoJCQkJCQlmSW5wdXQoJ3N1Ym1pdCcsICcnLCAnVXBsb2FkJywg J3NtYWxsZXJib3gnKSkNCgkJCQksICd0ZXh0LWFsaWduOiBjZW50ZXI7JykpOw0KCQllY2hv IHNtZF9yZW1vdGVfanMoJyQoIi51cGxvYWQtZm9ybSIpLmFwcGVuZChcJycuJHVsX2Zvcm0u J1wnKTsnKTsNCgl9DQoNCglpZiAoJHNtZF9yZW1vdGVfZmlsZV92YXJzWydtc2cnXSAhPSAi Iikgew0KCQllY2hvIHNtZF9yZW1vdGVfanMoJyQoIiNuYXYtcHJpbWFyeSB0YWJsZSB0ZDpl cSgwKSIpLmFwcGVuZChcJycuJHNtZF9yZW1vdGVfZmlsZV92YXJzWydtc2cnXS4nXCcpOycp Ow0KCX0NCn0NCg0KLy8gV2hlbiBhIGZpbGUgaXMgInJlcGxhY2VkIiB3aXRoIGEgbmV3IFVS TCB0aGUgZXhpc3RpbmcgZmlsZSBuYW1lIG11c3QgcmVtYWluDQovLyB1bmNoYW5nZWQuIEJ5 IGRlZmF1bHQgdGhlIG5ldyBVUkwgaXMgYXBwZW5kZWQgdG8gdGhlIC5saW5rIGZpbGUgdW5s ZXNzIHRoZSAnb3ZlcndyaXRlJw0KLy8gY2hlY2tib3ggaXMgc2V0DQpmdW5jdGlvbiBzbWRf cmVtb3RlX2ZpbGVfcmVwbGFjZSgpIHsNCglnbG9iYWwgJGZpbGVfYmFzZV9wYXRoLCAkc21k X3JlbW90ZV9maWxlX3ZhcnM7DQoNCglleHRyYWN0KGdwc2EoYXJyYXkoJ3NtZF9yZW1vdGVf dXJsJywgJ3NtZF9yZW1vdGVfYmxhdCcsICdpZCcpKSk7DQoJJGlkID0gYXNzZXJ0X2ludCgk aWQpOw0KCSR1cmwgPSB0cmltKCRzbWRfcmVtb3RlX3VybCk7DQoJJHJzID0gc2FmZV9yb3co J2ZpbGVuYW1lJywndHhwX2ZpbGUnLCdpZCA9ICcuJGlkKTsNCg0KCWlmIChzdHJwb3MoJHJz WydmaWxlbmFtZSddLCAiLmxpbmsiKSAhPT0gZmFsc2UpIHsNCgkJaWYgKHN0cnBvcygkdXJs LCAiaHR0cCIpID09PSAwKSB7DQoJCQkkd3JpdGVNb2RlID0gKCRzbWRfcmVtb3RlX2JsYXQp ID8gInciIDogImEiOw0KCQkJJGRlc3RfZmlsZXBhdGggPSBidWlsZF9maWxlX3BhdGgoJGZp bGVfYmFzZV9wYXRoLCAkcnNbJ2ZpbGVuYW1lJ10pOw0KCQkJc21kX3JlbW90ZV9maWxlX3dy aXRlKCRkZXN0X2ZpbGVwYXRoLCAkcnNbJ2ZpbGVuYW1lJ10sICR1cmwsICR3cml0ZU1vZGUp Ow0KCQl9IGVsc2Ugew0KCQkJJHNtZF9yZW1vdGVfZmlsZV92YXJzWydtc2cnXSA9IGdUeHQo J2ZpbGVfdXBsb2FkX2ZhaWxlZCcpIC4gKChlbXB0eSgkc21kX3JlbW90ZV91cmwpKSA/ICcg LSAnLmdUeHQoJ3VwbG9hZF9lcnJfbm9fZmlsZScpIDogJycpOw0KCQl9DQoJfQ0KfQ0KDQov LyBFdmVyeSB0aW1lIGEgZmlsZSBpcyBzYXZlZC9lZGl0ZWQsIFRYUCByZWNhbGN1bGF0ZXMg aXRzIHNpemUgZnJvbSB0aGUgcmVhbCBmaWxlIChncnJyKS4NCi8vIFRoaXMgaXMgdW5kZXNp cmFibGUgc28gaXQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgcmVtb3RlIFVS TCBmaWxlIGluc3RlYWQuDQpmdW5jdGlvbiBzbWRfcmVtb3RlX2ZpbGVfdXBkYXRlKCkgew0K CWV4dHJhY3QoZ3BzYShhcnJheSgnaWQnKSkpOw0KCXNtZF9yZW1vdGVfc2V0X3NpemUoJGlk KTsNCn0NCg0KLy8gU2V0cyB0aGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gVFhQIGRhdGFiYXNlIGZp bGUgdG8gdGhhdCBvZiBpdHMgY29ycmVzcG9uZGluZyAicmVhbCIgcmVtb3RlIFVSTCBmaWxl IHNpemUNCmZ1bmN0aW9uIHNtZF9yZW1vdGVfc2V0X3NpemUoJGlkX29yX2ZpbGUpIHsNCgln bG9iYWwgJGZpbGVfYmFzZV9wYXRoOw0KDQoJaWYgKGlzX251bWVyaWMoJGlkX29yX2ZpbGUp KSB7DQoJCSRmaWxlbmFtZSA9IHRyaW0oc2FmZV9maWVsZCgiZmlsZW5hbWUiLCAidHhwX2Zp bGUiLCAiaWQ9Ii5pbnR2YWwoJGlkX29yX2ZpbGUpKSk7DQoJfSBlbHNlIHsNCgkJJGZpbGVu YW1lID0gdHJpbShkb1NsYXNoKCRpZF9vcl9maWxlKSk7DQoJfQ0KCWlmIChzdHJwb3MoJGZp bGVuYW1lLCAiLmxpbmsiKSkgew0KCQkkZmlsZXBhdGggPSBidWlsZF9maWxlX3BhdGgoJGZp bGVfYmFzZV9wYXRoLCAkZmlsZW5hbWUpOw0KCQkkdXJsID0gc21kX3JlbW90ZV9maWxlX2xp c3QoJGZpbGVwYXRoLCAxLCAxKTsNCgkJaWYgKGNvdW50KCR1cmwpID4gMCkgew0KCQkJJGhk cnMgPSBzbWRfZ2V0X2hlYWRlcnMoJHVybFswXSwgMSk7DQoJCQkkc2l6ZSA9ICgkaGRycyA9 PT0gZmFsc2UgfHwgIWlzc2V0KCRoZHJzWydjb250ZW50LWxlbmd0aCddKSkgPyAxIDogJGhk cnNbJ2NvbnRlbnQtbGVuZ3RoJ107DQoJCQlzYWZlX3VwZGF0ZSgidHhwX2ZpbGUiLCAic2l6 ZT0iLiRzaXplLCAiZmlsZW5hbWU9JyIuJGZpbGVuYW1lLiInIik7DQoJCX0NCgl9DQp9DQoN Ci8vIENhbGxiYWNrIGZvciB1cGxvYWRpbmcgYSBVUkwgZnJvbSB0aGUgRmlsZXMgdGFiDQpm dW5jdGlvbiBzbWRfcmVtb3RlX2ZpbGVfY3JlYXRlKCkgew0KCWdsb2JhbCAkZmlsZV9iYXNl X3BhdGgsICRzbWRfcmVtb3RlX2ZpbGVfdmFyczsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNh KGFycmF5KCdzbWRfcmVtb3RlX3VybCcsJ2NhdGVnb3J5JywncGVybWlzc2lvbnMnLCdkZXNj cmlwdGlvbicpKSkpOw0KDQoJJHVybCA9IHRyaW0oJHNtZF9yZW1vdGVfdXJsKTsNCgkvLyBP bmx5IGludGVyY2VwdCByZW1vdGUgZmlsZXM7IGxlYXZlIGV2ZXJ5dGhpbmcgZWxzZSBmb3Ig VFhQIHRvIG1hbmFnZQ0KCWlmIChzdHJwb3MoJHVybCwgImh0dHAiKSA9PT0gMCkgew0KCQkk aGRycyA9IHNtZF9nZXRfaGVhZGVycygkdXJsLCAxKTsNCgkJJHNpemUgPSAoJGhkcnMgPT09 IGZhbHNlIHx8ICFpc3NldCgkaGRyc1snY29udGVudC1sZW5ndGgnXSkpID8gMSA6ICRoZHJz Wydjb250ZW50LWxlbmd0aCddOw0KDQoJCS8vIE1ha2UgYSBmaWxlbmFtZSBhbmQgZnVsbCBw YXRoOiB1bmVuY29kZWQNCgkJJGRlc3RfZmlsZW5hbWUgPSBiYXNlbmFtZSh1cmxkZWNvZGUo JHVybCkpLiIubGluayI7DQoJCSRkZXN0X2ZpbGVwYXRoID0gYnVpbGRfZmlsZV9wYXRoKCRm aWxlX2Jhc2VfcGF0aCwgJGRlc3RfZmlsZW5hbWUpOw0KDQoJCWlmIChmaWxlX2V4aXN0cygk ZGVzdF9maWxlcGF0aCkpIHsNCgkJCXNtZF9yZW1vdGVfZmlsZV93cml0ZSgkZGVzdF9maWxl cGF0aCwgJGRlc3RfZmlsZW5hbWUsICR1cmwpOw0KCQl9IGVsc2Ugew0KCQkJLy8gRmlsZSBk b2Vzbid0IGV4aXN0IHNvIGNyZWF0ZSBpdCBhbmQgcHV0IHRoZSBVUkwgaW5zaWRlDQoJCQkk dG1wID0gdGVtcG5hbSgiL3RtcCIsICJzbWRfIik7DQoJCQkkaGFuZGxlID0gZm9wZW4oJHRt cCwgInciKTsNCgkJCWZ3cml0ZSgkaGFuZGxlLCAkdXJsLm4pOw0KCQkJZmNsb3NlKCRoYW5k bGUpOw0KCQkJcmVuYW1lKCR0bXAsICRkZXN0X2ZpbGVwYXRoKTsNCg0KCQkJLy8gQWRkIHRo ZSBmaWxlIHRvIFRYUA0KCQkJJHJldCA9IHNhZmVfaW5zZXJ0KCJ0eHBfZmlsZSIsDQoJCQkJ ImZpbGVuYW1lID0gJyRkZXN0X2ZpbGVuYW1lJywNCgkJCQkgY2F0ZWdvcnkgPSAnJGNhdGVn b3J5JywNCgkJCQkgcGVybWlzc2lvbnMgPSAnJHBlcm1pc3Npb25zJywNCgkJCQkgZGVzY3Jp cHRpb24gPSAnJGRlc2NyaXB0aW9uJywNCgkJCQkgc2l6ZSA9ICckc2l6ZScsDQoJCQkJIGNy ZWF0ZWQgPSBub3coKSwNCgkJCQkgbW9kaWZpZWQgPSBub3coKQ0KCQkJIik7DQoJCQkkc21k X3JlbW90ZV9maWxlX3ZhcnNbJ21zZyddID0gZ1R4dCgnZmlsZV91cGxvYWRlZCcsIGFycmF5 KCd7bmFtZX0nID0+IHVybGRlY29kZSgkdXJsKSkpOw0KCQl9DQoJfSBlbHNlIHsNCgkJJHNt ZF9yZW1vdGVfZmlsZV92YXJzWydtc2cnXSA9IGdUeHQoJ2ZpbGVfdXBsb2FkX2ZhaWxlZCcp IC4gKChlbXB0eSgkc21kX3JlbW90ZV91cmwpKSA/ICcgLSAnLmdUeHQoJ3VwbG9hZF9lcnJf bm9fZmlsZScpIDogJycpOw0KCX0NCn0NCg0KLy8gQXBwZW5kIGEgVVJMIHRvIHRoZSBnaXZl biBmaWxlLiBJZiB3cml0ZU1vZGU9InciIHRoZSB3aG9sZSBmaWxlIGlzIHJlcGxhY2VkDQpm dW5jdGlvbiBzbWRfcmVtb3RlX2ZpbGVfd3JpdGUoJGZpbGVwYXRoLCAkZmlsZW5hbWUsICR1 cmwsICR3cml0ZU1vZGU9ImEiKSB7DQoJZ2xvYmFsICRzbWRfcmVtb3RlX2ZpbGVfdmFyczsN Cg0KCS8vIFJlYWQgdGhlIHdob2xlIGZpbGUgYmVjYXVzZSB3ZSBvbmx5IHdhbnQgdG8gYWRk IHRoZSBVUkwgaWYgaXQncyBub3QgdGhlcmUgYWxyZWFkeQ0KCSRsaW5lcyA9IHNtZF9yZW1v dGVfZmlsZV9saXN0KCRmaWxlcGF0aCwgMCwgMSk7DQoJaWYgKCFpbl9hcnJheSgkdXJsLCAk bGluZXMpIHx8ICR3cml0ZU1vZGUgPT0gInciKSB7DQoJCSRoYW5kbGUgPSBmb3BlbigkZmls ZXBhdGgsICR3cml0ZU1vZGUpOw0KCQlmd3JpdGUoJGhhbmRsZSwgJHVybC5uKTsNCgkJZmNs b3NlKCRoYW5kbGUpOw0KCQkkc21kX3JlbW90ZV9maWxlX3ZhcnNbJ21zZyddID0gZ1R4dCgn ZmlsZV91cGxvYWRlZCcsIGFycmF5KCd7bmFtZX0nID0+IHVybGRlY29kZSgkdXJsKSkpOw0K CX0gZWxzZSB7DQoJCSRzbWRfcmVtb3RlX2ZpbGVfdmFyc1snbXNnJ10gPSBnVHh0KCdmaWxl X2FscmVhZHktZXhpc3RzJywgYXJyYXkoJ3tuYW1lfScgPT4gdXJsZGVjb2RlKCR1cmwpKSk7 DQoJfQ0KCS8vIFNldCB0aGUgc2l6ZSBqdXN0IGluIGNhc2UNCglzbWRfcmVtb3RlX3NldF9z aXplKCRmaWxlbmFtZSk7DQp9DQoNCi8vIFJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaG9z ZW4gZmlsZSAoZnVsbCBwYXRoIHJlcXVpcmVkKSBhbmQgZ2V0IGxpbmVzIGZyb20gd2l0aGlu LCBhZGRpbmcgdGhlbSB0byBhbiBhcnJheS4NCi8vICAkb2Zmc2V0IGlzIHdoZXJlIHRvIHN0 YXJ0IGZyb20uIE5vcm1hbGx5IDEgPSAxc3Qgcm93LCAyID0gMm5kIHJvdyBhbmQgc28gb24u IDAgPSBhIHJhbmRvbSByb3cuDQovLyAgJHF0eSBzcGVjaWZpZXMgaG93IG1hbnkgcm93cyB0 byBwdWxsLiAwID0gdW5saW1pdGVkLg0KZnVuY3Rpb24gc21kX3JlbW90ZV9maWxlX2xpc3Qo JGZuYW1lLCAkcXR5PTEsICRvZmZzZXQ9MCkgew0KCSRvdXQgPSBhcnJheSgpOw0KCWlmIChm aWxlX2V4aXN0cygkZm5hbWUpKSB7DQoJCSRmZCA9IGZvcGVuKCRmbmFtZSwgInIiKTsNCgkJ Ly8gUmVhZCB0aGUgd2hvbGUgZmlsZSBpbiAoeWVzIHRoZXJlJ3MgdGhlIGZpbGUoKSBjYWxs LCBidXQgZmdldHMoKSBpcyBzdXBwb3NlZGx5IHF1aWNrZXIgb24gdHh0IGZpbGVzKQ0KCQl3 aGlsZSAoIWZlb2YoJGZkKSkgew0KCQkJJGxpbmUgPSBydHJpbShmZ2V0cygkZmQpKTsNCgkJ CWlmICgkbGluZSAhPSAiIikgew0KCQkJICAgJGxpbmVzW10gPSAkbGluZTsNCgkJCX0NCgkJ fQ0KCQlmY2xvc2UgKCRmZCk7DQoJCWlmICgkb2Zmc2V0ID09IDApIHsNCgkJCXNodWZmbGUo JGxpbmVzKTsNCgkJCSRvZmZzZXQgPSAxOw0KCQl9DQoJCSRvZmZzZXQgPSAoJG9mZnNldCA+ IGNvdW50KCRsaW5lcykpID8gMSA6ICRvZmZzZXQ7DQoJCSRvdXQgPSAoJHF0eSA9PSAwKSA/ ICRsaW5lcyA6IGFycmF5X3NsaWNlKCRsaW5lcywgJG9mZnNldC0xLCAkcXR5KTsNCgl9DQoJ cmV0dXJuICRvdXQ7DQp9DQoNCi8vIENhbGxlZCBqdXN0IGJlZm9yZSBhIGRvd25sb2FkIGlz IGluaXRpYXRlZA0KZnVuY3Rpb24gc21kX3JlbW90ZV9kb3dubG9hZCgkZXZlbnQsICRzdGVw KSB7DQoJZ2xvYmFsICRwcmV0ZXh0LCAkaWQsICRmaWxlX2Jhc2VfcGF0aCwgJGZpbGVfZXJy b3I7DQoNCglpZiAoIWlzc2V0KCRmaWxlX2Vycm9yKSkgew0KCQkvLyBHZXQgdGhlICJ0cnVl IiBmaWxlbmFtZSAodW5mb3J0dW5hdGVseSBmcm9tIHRoZSBkYXRhYmFzZSA9IDEgZXh0cmEg cXVlcnkpLg0KCQkkcmVhbF9maWxlID0gc2FmZV9yb3coImZpbGVuYW1lLCBzaXplIiwgInR4 cF9maWxlIiwgImlkPSIuaW50dmFsKCRpZCkpOw0KCQlpZiAoc3RycG9zKCRyZWFsX2ZpbGVb J2ZpbGVuYW1lJ10sICIubGluayIpID4gMCkgew0KCQkJJGNob29zZSA9IDA7DQoJCQkvLyBH ZXQgYW55IG92ZXJyaWRpbmcgdmFsdWUgb2Ygc21kX2Nob29zZSBmcm9tIHRoZSBxdWVyeSBz dHJpbmcNCgkJCWlmICgkcHJldGV4dFsncXMnXSkgew0KCQkJCWxpc3QoJHFrZXksICRxdmFs KSA9IGV4cGxvZGUoIj0iLCAkcHJldGV4dFsncXMnXSk7DQoJCQkJaWYgKCRxa2V5ID09ICJz bWRfY2hvb3NlIikgew0KCQkJCQlpZiAoJHF2YWwgPiAwKSB7DQoJCQkJCQkkY2hvb3NlID0g aW50dmFsKCRxdmFsKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIFRoZSBmaWxlIHNp emUsIGhvd2V2ZXIsIGlzIHRoYXQgb2YgdGhlIHJlbW90ZSBmaWxlDQoJCQkkcmVtb3RlVVJM ID0gc21kX3JlbW90ZV9maWxlX2xpc3QoYnVpbGRfZmlsZV9wYXRoKCRmaWxlX2Jhc2VfcGF0 aCwgJHJlYWxfZmlsZVsnZmlsZW5hbWUnXSksIDEsICRjaG9vc2UpOw0KCQkJaWYgKGNvdW50 KCRyZW1vdGVVUkwpID4gMCkgew0KCQkJCSR1cmwgPSAkcmVtb3RlVVJMWzBdOw0KCQkJCS8v IFRlc3QgdGhlIGZpbGUgZXhpc3RzOiBzbG93LCBidXQgcmVkdWNlcyBmYWxzZSBkb3dubG9h ZCBjb3VudCBpbmNyZW1lbnRzDQoJCQkJJGhkcnMgPSBzbWRfZ2V0X2hlYWRlcnMoJHVybCwg MSk7DQoJCQkJJGFsbGtleSA9IHN0cnRvbG93ZXIoaW1wbG9kZSgiICIsIGFycmF5X2tleXMo JGhkcnMpKSk7DQoJCQkJaWYgKHN0cnBvcygkYWxsa2V5LCAiMjAwIikgPiAwICYmIHN0cnBv cygkYWxsa2V5LCAib2siKSA+IDApIHsNCgkJCQkJaGVhZGVyKCdDb250ZW50LURlc2NyaXB0 aW9uOiBGaWxlIERvd25sb2FkJyk7DQoJCQkJCWhlYWRlcignQ29udGVudC1UeXBlOiBhcHBs aWNhdGlvbi9vY3RldC1zdHJlYW0nKTsNCgkJCQkJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0 aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iJyAuIGJhc2VuYW1lKCRyZWFsX2ZpbGVbJ2Zp bGVuYW1lJ10pIC4gJyI7IHNpemUgPSAiJy4kcmVhbF9maWxlWydzaXplJ10uJyInKTsNCgkJ CQkJLy8gRml4IGZvciBsYW1lIElFIDYgcGRmIGJ1ZyBvbiBzZXJ2ZXJzIGNvbmZpZ3VyZWQg dG8gc2VuZCBjYWNoZSBoZWFkZXJzDQoJCQkJCWhlYWRlcignQ2FjaGUtQ29udHJvbDogcHJp dmF0ZScpOw0KCQkJCQlAaW5pX3NldCgiemxpYi5vdXRwdXRfY29tcHJlc3Npb24iLCAiT2Zm Iik7DQoJCQkJCUBzZXRfdGltZV9saW1pdCgwKTsNCgkJCQkJQGlnbm9yZV91c2VyX2Fib3J0 KHRydWUpOw0KDQoJCQkJCS8vIEhhbmQtb2ZmIHRvIHRoZSByZW1vdGUgZmlsZQ0KCQkJCQlo ZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCk7DQoNCgkJCQkJLy8gcmVjb3JkIGRvd25sb2Fk IGlmIHRoZSBmaWxlIHNpemVzIG1hdGNoDQoJCQkJCWlmIChpbnR2YWwoJGhkcnNbJ2NvbnRl bnQtbGVuZ3RoJ10pID09IGludHZhbCgkcmVhbF9maWxlWydzaXplJ10pKSB7DQoJCQkJCQlz YWZlX3VwZGF0ZSgidHhwX2ZpbGUiLCAiZG93bmxvYWRzPWRvd25sb2FkcysxIiwgJ2lkPScu aW50dmFsKCRpZCkpOw0KCQkJCQkJbG9nX2hpdCgnMjAwJyk7DQoJCQkJCX0NCgkJCQkJLy8g cmVtb3RlIGRvd25sb2FkIGRvbmU6IGdhbWUgb3Zlcg0KCQkJCQlleGl0KDApOw0KDQoJCQkJ fSBlbHNlIHsNCgkJCQkJJGZpbGVfZXJyb3IgPSA0MDQ7DQoJCQkJfQ0KCQkJfSBlbHNlIHsN CgkJCQkkZmlsZV9lcnJvciA9IDQwNDsNCgkJCX0NCgkJfQ0KCX0NCgkvLyByZW1vdGUgZG93 bmxvYWQgbm90IGRvbmUgLSBsZWF2ZSB0byBUWFAgdG8gaGFuZGxlIGVycm9yIG9yICJsb2Nh bCIgZmlsZSBkb3dubG9hZA0KCXJldHVybjsNCn0NCg0KZnVuY3Rpb24gc21kX3JlbW90ZV9q cygkY29udGVudCkgew0KCSRvdXQgPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi PicubjsNCgkkb3V0IC49ICRjb250ZW50Lm47DQoJJG91dCAuPSAnPC9zY3JpcHQ+Jy5uOw0K CXJldHVybiAkb3V0Ow0KfQ0KDQovLyBQSFA0IGVtdWxhdGlvbihpc2gpIG9mIFBIUDUncyBn ZXRfaGVhZGVycygpLiBTdG9sZW4gZnJvbSBwaHAubmV0IGFuZCBtb2RkZWQNCmZ1bmN0aW9u IHNtZF9nZXRfaGVhZGVycygkdXJsLCAkZm9ybWF0PTApIHsNCglpZiAoISR1cmwpIHsNCgkJ cmV0dXJuIGZhbHNlOw0KCX0NCgkkdWluZm89cGFyc2VfdXJsKCR1cmwpOw0KCSRoZWFkZXJz ID0gYXJyYXkoKTsNCglpZiAoaXNfY2FsbGFibGUoJ2NoZWNrZG5zcnInKSAmJiAhY2hlY2tk bnNycigkdWluZm9bJ2hvc3QnXS4nLicsJ01YJykgJiYgIWNoZWNrZG5zcnIoJHVpbmZvWydo b3N0J10uJy4nLCdBJykpIHsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkkcG9ydCA9IGlzc2V0 KCR1aW5mb1sncG9ydCddKSA/ICR1aW5mb1sncG9ydCddIDogODA7DQoJJGZwPWZzb2Nrb3Bl bigkdWluZm9bJ2hvc3QnXSwgJHBvcnQsICRlcnJubywgJGVycnN0ciwgNSk7DQoNCglpZigk ZnApIHsNCgkJJGhlYWQgPSAiR0VUICIuQCR1aW5mb1sncGF0aCddLiI/Ii5AJHVpbmZvWydx dWVyeSddLiIgSFRUUC8xLjBcclxuIjsNCgkJJGhlYWQgLj0gIkhvc3Q6ICIuQCR1aW5mb1sn aG9zdCddLiI6Ii4kcG9ydC4iXHJcbiI7DQoJCSRoZWFkIC49ICJDb25uZWN0aW9uOiBDbG9z ZVxyXG4iOw0KCQkkaGVhZCAuPSAiQWNjZXB0OiAqLypcclxuIjsNCgkJaWYgKEAkdWluZm9b J3VzZXInXSkgew0KCQkJJGhlYWQgLj0gIkF1dGhvcml6YXRpb246IEJhc2ljICIuYmFzZTY0 X2VuY29kZSgkdWluZm9bJ3VzZXInXS4nOicuJHVpbmZvWydwYXNzJ10pLiJcclxuIjsNCgkJ fQ0KCQkkaGVhZCAuPSAiXHJcbiI7DQoJCWZwdXRzKCRmcCwgJGhlYWQpOw0KCQkkZW9oZWFk ZXIgPSBmYWxzZTsNCgkJd2hpbGUoIWZlb2YoJGZwKSBvciAoJGVvaGVhZGVyPT10cnVlKSkg ew0KCQkJaWYoJGhlYWRlcj1mZ2V0cygkZnAsIDEwMjQpKSB7DQoJCQkJaWYgKCRoZWFkZXIg PT0gIlxyXG4iKSB7DQoJCQkJCSRlb2hlYWRlciA9IHRydWU7DQoJCQkJCWJyZWFrOw0KCQkJ CX0gZWxzZSB7DQoJCQkJCSRoZWFkZXIgPSB0cmltKCRoZWFkZXIpOw0KCQkJCX0NCgkJCQlp ZigkZm9ybWF0ID09IDEpIHsNCgkJCQkJJGtleSA9IHN0cnRvbG93ZXIoYXJyYXlfc2hpZnQo ZXhwbG9kZSgnOiAnLCRoZWFkZXIpKSk7DQoJCQkJCWlmKCRrZXkgPT0gJGhlYWRlcikgew0K CQkJCQkJJGhlYWRlcnNbXSA9ICRoZWFkZXI7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkaGVh ZGVyc1ska2V5XT1zdWJzdHIoJGhlYWRlcixzdHJsZW4oJGtleSkrMik7DQoJCQkJCX0NCgkJ CQkJdW5zZXQoJGtleSk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJGhlYWRlcnNbXSA9ICRoZWFk ZXI7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiAkaGVhZGVyczsNCg0KCX0gZWxzZSB7 DQoJCXJldHVybiBmYWxzZTsNCgl9DQp9IjtzOjQ6InR5cGUiO3M6MToiMSI7czo1OiJvcmRl ciI7czoxOiI1IjtzOjQ6ImhlbHAiO3M6MTkzMDk6IjxkaXYgaWQ9InNtZF9oZWxwIj4KCgk8 aDEgaWQ9InRvcCI+c21kX3JlbW90ZV9maWxlPC9oMT4KCgk8aDIgaWQ9Im92ZXJ2aWV3Ij5P dmVydmlldzwvaDI+CgoJPHA+VXBsb2FkaW5nIGxhcmdlIGZpbGVzIHRocm91Z2ggVGV4dFBh dHRlcm4mIzgyMTc7cyBGaWxlcyB0YWIgaXMgaGl0IGFuZCBtaXNzIGRlcGVuZGluZyBvbiB0 aGUgc2l6ZSAvIHR5cGUgb2YgZmlsZSwgdGhlIHNlcnZlciBsaW1pdHMgYW5kIHNvIG9uLiBT b21ldGltZXMgeW91IGp1c3QgZG9uJiM4MjE3O3QgaGF2ZSB0aGUgYmFuZHdpZHRoIGF2YWls YWJsZSB0byBob3N0IG1lZGlhIGNvbnRlbnQuPC9wPgoKCTxwPlRoaXJkIHBhcnR5IHNpdGVz IHN1Y2ggYXMgZmlsZWRlbi5jb20gb2ZmZXIgdGhlIGFiaWxpdHkgdG8gdXBsb2FkIGZhaXJs eSBzaXplYWJsZSBmaWxlcyBhbmQgdGhlbiBmcmVlbHkgaG90bGluayB0byB0aGVtICh3aXRo aW4gcXVpdGUgZ2VuZXJvdXMgYmFuZHdpZHRoIGxpbWl0cykgc28gdGhleSBjYW4gYmUgc2hh cmVkLiBUYWtlIGFkdmFudGFnZSBvZiB0aGlzIHNlcnZpY2UgYnkgaW50ZWdyYXRpbmcgdGhl IHJlbW90ZSBmaWxlcyBpbnRvIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHdpdGgg dGhpcyBwbHVnaW4uPC9wPgoKCTxoMiBpZD0iY29udGVudHMiPkNvbnRlbnRzPC9oMj4KCgk8 dWw+CgkJPGxpPjxhIGhyZWY9IiNmZWF0dXJlcyI+RmVhdHVyZXM8L2E+PC9saT4KCQk8bGk+ PGEgaHJlZj0iI2F1dGhvciI+QXV0aG9yPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNpbnN0 YWxsIj5JbnN0YWxsYXRpb24gLyBVbmluc3RhbGxhdGlvbjwvYT48L2xpPgoJCTxsaT48YSBo cmVmPSIjcHJlcmVxIj5QcmUtcmVxdWlzaXRlczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIj ZmlsZXN0YWIiPlRoZSBGaWxlcyB0YWI8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI211bHRp cGxlcyI+TXVsdGlwbGUgcGVyc29uYWxpdGllczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIj dXNhZ2UiPlRhZyB1c2FnZTwvYT4KCTx1bD4KCQk8bGk+PGEgaHJlZj0iI2ZkbCI+c21kX2Zp bGVfZG93bmxvYWRfbGluazwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjZmRuIj5zbWRfZmls ZV9kb3dubG9hZF9uYW1lPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNmZGkiPnNtZF9maWxl X2Rvd25sb2FkX2ltYWdlPC9hPjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNo b3dpdHdvcmtzIj5Ib3cgaXQgd29ya3M8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2V4YW1w bGVzIj5FeGFtcGxlczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjY2hhbmdlbG9nIj5DaGFu Z2Vsb2c8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2NyZWRpdHMiPkNyZWRpdHM8L2E+PC9s aT4KCTwvdWw+CgoJPGgyIGlkPSJmZWF0dXJlcyI+RmVhdHVyZXM8L2gyPgoKCTx1bD4KCQk8 bGk+TWFuYWdlIGxpbmtzIHRvIHRoaXJkIHBhcnR5IGZpbGVzIGRpcmVjdGx5IGZyb20gdGhl IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IEZpbGVzIHRhYiwgYXMgaWYgdGhleSB3 ZXJlIG5hdGl2ZWx5IGluc2lkZSBUZXh0UGF0dGVybi4gQ2F0ZWdvcnkgLyBkZXNjcmlwdGlv biAvIHN0YXR1cyAvIGRvd25sb2FkIGNvdW50IGFsbCBzdXBwb3J0ZWQ8L2xpPgoJCTxsaT5V c2Ugc3RhbmRhcmQgPGNvZGU+Jmx0O3R4cDpmaWxlX2Rvd25sb2FkX2xpc3QgLyZndDs8L2Nv ZGU+IHRhZ3MgdG8gYnVpbGQgbGlzdHMgb2YgbG9jYWwgYW5kIHJlbW90ZSBmaWxlczwvbGk+ CgkJPGxpPlRocmVlIG5ldyB0YWdzOiA8Y29kZT4mbHQ7dHhwOnNtZF9maWxlX2Rvd25sb2Fk X2xpbmsmZ3Q7PC9jb2RlPiBmb3IgY2hvb3Npbmcgc3BlY2lmaWMgcmVtb3RlIGZpbGVzLCA8 Y29kZT4mbHQ7dHhwOnNtZF9maWxlX2Rvd25sb2FkX25hbWUmZ3Q7PC9jb2RlPiBmb3Igc2hv d2luZyByZW1vdGUgZmlsZSBuYW1lcyBhbmQgPGNvZGU+Jmx0O3R4cDpzbWRfZmlsZV9kb3du bG9hZF9pbWFnZSZndDs8L2NvZGU+IGZvciBzaG93aW5nIGltYWdlcyBiYXNlZCBvbiB0aGUg ZmlsZW5hbWUgb2YgdGhlIGRvd25sb2FkPC9saT4KCQk8bGk+VXBsb2FkIGlkZW50aWNhbCBm aWxlcyB0byBtb3JlIHRoYW4gb25lIHBsYWNlIG9uIHRoZSB3ZWIgYW5kIHRlbGwgPHNwYW4g Y2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGhlIHZhcmlvdXMgYWx0ZXJuYXRpdmVzLiA8Y29k ZT5maWxlX2Rvd25sb2FkX2xpbms8L2NvZGU+IGFuZCA8Y29kZT5zbWRfZmlsZV9kb3dubG9h ZF9saW5rPC9jb2RlPiB3aWxsIGNob29zZSBhIHJhbmRvbSBsb2NhdGlvbiB0byBoZWxwIGxv YWQtYmFsYW5jZSB5b3VyIGF2YWlsYWJsZSBiYW5kd2lkdGg8L2xpPgoJCTxsaT5ObyBtb2Rp ZmljYXRpb25zIHRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBkYXRhYmFz ZToganVzdCBhIGJlYXV0aWZ1bCBjaGVhdCBzdWdnZXN0ZWQgYnkgcnV1ZCAodGhhbmtzISk8 L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImF1dGhvciI+QXV0aG9yPC9oMj4KCgk8cD48YSBocmVm PSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vY29tbWVudEZvcm0iPlN0ZWYgRGF3c29uPC9hPi4g Rm9yIG90aGVyIHNvZnR3YXJlIGJ5IG1lLCBvciB0byBtYWtlIGEgZG9uYXRpb24sIHNlZSB0 aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9h Pi48L3A+CgoJPGgyIGlkPSJpbnN0YWxsIj5JbnN0YWxsYXRpb24gYW5kIFVuaW5zdGFsbGF0 aW9uPC9oMj4KCgk8cCBjbGFzcz0icmVxdWlyZWQiPlJlcXVpcmVzIFRleHRQYXR0ZXJuIHY0 LjAuNiBvciBncmVhdGVyIGluc3RhbGxlZC48L3A+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdp biBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMv OTAxL3NtZF9yZW1vdGVfZmlsZSI+dGV4dHBhdHRlcm4ub3JnPC9hPiwgb3IgdGhlIDxhIGhy ZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUgcGFnZTwvYT4sIHBhc3Rl IHRoZSBjb2RlIGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IEFkbWlu IC0mZ3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxlIHRoZSBwbHVnaW4uIFZp c2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3Bp Yy5waHA/aWQ9MjQ2NzMiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0byBy ZXBvcnQgb24gdGhlIHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9wPgoK CTxwPlRvIHJlbW92ZSB0aGUgcGx1Z2luLCBzaW1wbHkgZGVsZXRlIGl0IGZyb20gdGhlIEFk bWluLSZndDtQbHVnaW5zIHRhYi48L3A+CgoJPGgyIGlkPSJwcmVyZXEiPlByZS1yZXF1aXNp dGVzPC9oMj4KCgk8cD5DaG9vc2UgYW55IHRoaXJkIHBhcnR5IGZpbGUgaG9zdGVyIHRoYXQg b2ZmZXJzIGZyZWUgZG93bmxvYWRzIG9mIHlvdXIgc3R1ZmYuIENyZWF0ZSBhbiBhY2NvdW50 LCB1cGxvYWQgZmlsZXMgdG8gaXQsIGFuZCBtYWtlIHN1cmUgeW91IGtub3cgaG93IHRvIGdl dCBEaXJlY3QgTGluayA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMgZnJvbSB0aGVp ciBpbnRlcmZhY2UgKGl0JiM4MjE3O3MgdXN1YWxseSBmYWlybHkgb2J2aW91cykuIFlvdSYj ODIxNztsbCBuZWVkIHRoZXNlIHRvIHBhc3RlIGludG8gVGV4dFBhdHRlcm4uPC9wPgoKCTxw PlRoZW4gc2ltcGx5IGhvcCBvdmVyIHRvIHRoZSA8YSBocmVmPSIjZmlsZXN0YWIiPkZpbGVz IHRhYjwvYT4gdG8gZ2V0IHN0YXJ0ZWQuPC9wPgoKCTxoMiBpZD0iZmlsZXN0YWIiPlRoZSBG aWxlcyB0YWI8L2gyPgoKCTxwPlRoZSBwbHVnaW4gYWRkcyBvbmUgaW5wdXQgZm9ybSBmaWVs ZCB0byB0aGUgRmlsZXMgdGFiLiBGcm9tIHlvdXIgdGhpcmQgcGFydHkgc2l0ZShzKSBvZiBj aG9pY2UsIHNpbXBseSBjb3B5IGEgd2ViLWZyaWVuZGx5IChpLmUuIHVybC1lbmNvZGVkKSBo b3RsaW5rIGFuZCBwYXN0ZSBpdCBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9z cGFuPiBib3guIFlvdSBjYW4gdXN1YWxseSB0ZWxsIGlmIHRoZSBsaW5rIGlzIHVybC1lbmNv ZGVkIGJlY2F1c2UgaXQmIzgyMTc7bGwgcHJvYmFibHkgaGF2ZSA8Y29kZT4lMjA8L2NvZGU+ IGluIHBsYWNlIG9mIGFueSBzcGFjZXMgaW4gdGhlIGZpbGVuYW1lLiBUaGUgZGlyZWN0b3J5 IHBhcnQgaXMsIGhvd2V2ZXIsIDxlbT5ub3Q8L2VtPiB1c3VhbGx5IGVuY29kZWQgKGkuZS4g YW55IGZvcndhcmQgc2xhc2hlcyBhbmQgY29sb25zIGV0YyByZW1haW4pLjwvcD4KCgk8cD5B IHR5cGljYWwgZmlsZSBtaWdodCBsb29rIGxpa2UgdGhpczo8L3A+Cgo8cHJlPmh0dHA6Ly93 d3cuZmlsZWRlbi5jb20vZmlsZXMvMjAwNy8xMS8xLwogICAgIDEyMzQ1NjcvSGVyZSUyMGlz JTIwc29tZSUyMG11c2ljLm1wMwo8L3ByZT4KCgk8cD5UaGUgbGluayBtdXN0IGJlIGFuIGFi c29sdXRlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+LCBiZWdpbm5pbmcgPGNvZGU+ aHR0cDovLzwvY29kZT4uIE9uY2UgeW91IGhhdmUgcGFzdGVkIGl0IGluLCBoaXQgVXBsb2Fk IG5leHQgdG8gdGhlIGJveCBhbmQgYSBuZXcgc3BlY2lhbCAmIzgyMTY7bGluayYjODIxNzsg ZmlsZSB3aWxsIGJlIGNyZWF0ZWQgaW4gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4u IEl0IHRha2VzIG9uIHRoZSBmaWxlbmFtZSBleGFjdGx5IGFzIGl0IGFwcGVhcnMgaW4geW91 ciA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiAod2l0aCA8Y29kZT4ubGluazwvY29k ZT4gYWRkZWQpLiBTbyBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgYSBuZXcgZmlsZSBjYWxsZWQg PGNvZGU+SGVyZSBpcyBzb21lIG11c2ljLm1wMy5saW5rPC9jb2RlPiB3aWxsIGJlIG1hZGUg aW4geW91ciBzdGFuZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBmaWxlcyBk aXJlY3RvcnkuPC9wPgoKCTxwPlRoZSBuZXcgJiM4MjIwO2ZpbGUmIzgyMjE7IHdpbGwgYXBw ZWFyIGluIHRoZSBsaXN0IGp1c3QgbGlrZSBhbnkgcmVhbCBmaWxlIGluIFRleHRQYXR0ZXJu LiBZb3UgY2FuIGVkaXQgaXQgdG8gYWRkIGEgZGVzY3JpcHRpb24sIGNhdGVnb3J5LCBzZXQg aXRzIHN0YXR1czogZXZlcnl0aGluZyB5b3UgY2FuIGRvIHdpdGggYSBjb252ZW50aW9uYWwg ZmlsZS4gSnVzdCBkb24mIzgyMTc7dCByZW5hbWUgaXQhPC9wPgoKCTxoMiBpZD0ibXVsdGlw bGVzIj5NdWx0aXBsZSBwZXJzb25hbGl0aWVzPC9oMj4KCgk8cD5UaGlyZCBwYXJ0eSBzaXRl cyBkb24mIzgyMTc7dCBnaXZlIHlvdSBzb21ldGhpbmcgZm9yIG5vdGhpbmc7IHRoZXkgbm9y bWFsbHkgaGF2ZSBhIGJhbmR3aWR0aCBjYXAsIGp1c3QgbGlrZSB5b3VyIHdlYiBob3N0ZXIg cHJvYmFibHkgZG9lcy4gSWYgeW91IHdhbnQgdG8gZGlzdHJpYnV0ZSB5b3VyIG11c2ljIG9y IGxhdGVzdCB2aWRlbywgYSBmZXcgdGhvdXNhbmQgaGl0cyBwZXIgbW9udGggYW5kIHlvdXIg YmFuZHdpZHRoIGlzIGdvbmUuPC9wPgoKCTxwPlNvIHNwcmVhZCB0aGUgbG9hZCBhcm91bmQg dGhlIEludGVybmV0LiBHZXQgYWNjb3VudHMgYXQgdmFyaW91cyB0aGlyZCBwYXJ0eSBzaXRl cyBhbmQgdXBsb2FkIGV4YWN0bHkgdGhlIHNhbWUgZmlsZSAobWFrZSBzdXJlIHRoZSBmaWxl bmFtZXMgYXJlIGlkZW50aWNhbCAmIzgyMTE7IGluY2x1ZGluZyBjYVNlIFNlbnNJVGl2SXRZ KS4gVGhlbiBqdXN0IHBhc3RlIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMg aW50byB0aGUgdXBsb2FkIGJveDogc21kX3JlbW90ZV9maWxlIHdpbGwgb25seSBtYWludGFp biBvbmUgcGh5c2ljYWwgZmlsZSB3aXRoaW4gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bh bj4gYnV0IHdpbGwgaG9sZCBkZXRhaWxzIG9mIHlvdXIgb3RoZXIgY29waWVzIGZvciB5b3Uu IFVzaW5nIGVpdGhlciB0aGUgc3RhbmRhcmQgPGNvZGU+ZmlsZV9kb3dubG9hZF9saW5rPC9j b2RlPiBvciB0aGUgbmV3IDxhIGhyZWY9IiNmZGwiPnNtZF9maWxlX2Rvd25sb2FkX2xpbms8 L2E+IHRhZyB3aWxsIHJhbmRvbWx5IHBpY2sgb25lIG9mIHlvdXIgZG93bmxvYWQgbG9jYXRp b25zIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGZpbGUgZXZlcnkgdGltZSB0aGUgcGFnZSBsb2Fk cywgc3ByZWFkaW5nIHlvdXIgYmFuZHdpZHRoIHVzYWdlLjwvcD4KCgk8cD5XaGVuIHlvdSBz ZWxlY3QgYSAubGluayBmaWxlIGZvciBlZGl0aW5nIGZyb20gdGhlIEZpbGVzIHRhYiwgeW91 IHdpbGwgc2VlIGEgZGlhbG9nIGJveCBhdCB0aGUgYm90dG9tIGZvciBhZGRpbmcgbW9yZSA8 c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMgdG8geW91ciBmaWxlLiBQYXN0ZSB0aGUg dXJsLWVuY29kZWQgZGlyZWN0IGxpbmsgZmlsZSBuYW1lIGludG8gdGhlIGJveCBhbmQgaGl0 IFVwbG9hZCB0byBhcHBlbmQgaXQgdG8gdGhlIGV4aXN0aW5nIG9uZS4gSWYgeW91IGNoZWNr IHRoZSBPdmVyd3JpdGUgYm94IHRoZW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3Nw YW4+IHlvdSBzdXBwbHkgd2lsbCBvdmVyd3JpdGUgPGVtPmFsbDwvZW0+IDxzcGFuIGNsYXNz PSJjYXBzIj5VUkw8L3NwYW4+cyBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGUgZmlsZS4gSXQg ZG9lcyB0aGlzIHdpdGhvdXQgd2FybmluZywgc28gY29uc2lkZXIgdGhpcyBhIHdhcm5pbmch PC9wPgoKCTxoMiBpZD0idXNhZ2UiPlRhZyB1c2FnZTwvaDI+CgoJPGgzIGNsYXNzPSJ0YWcg IiBpZD0iZmRsIj5zbWRfZmlsZV9kb3dubG9hZF9saW5rPC9oMz4KCgk8cCBjbGFzcz0idGFn LXN1bW1hcnkiPkFuIGV4YWN0IGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBzdGFuZGFy ZCA8Y29kZT4mbHQ7dHhwOmZpbGVfZG93bmxvYWRfbGluayZndDs8L2NvZGU+IHRhZywgd2l0 aCB0d28gZXh0cmEgb3B0aW9ucy4gVXNlIHRoZSB0YWcgaW4gZXhhY3RseSB0aGUgc2FtZSB3 YXkgYXMgeW91IHdvdWxkIG5vcm1hbGx5LiBUaGUgb25seSBzdWJ0bGUgZGlmZmVyZW5jZSBp biB0aGlzIHRhZyYjODIxNztzIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRoYXQgaXQgd2lsbCBy ZW1vdmUgYW55IDxjb2RlPi5saW5rPC9jb2RlPiBvbiB0aGUgZW5kIG9mIHRoZSBmaWxlIG5h bWVzIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlICh0aGUgPGNvZGU+Lmxpbms8L2NvZGU+IHN1 ZmZpeGVzIGFsd2F5cyByZW1haW4gdmlzaWJsZSBpbiB0aGUgRmlsZXMgdGFiIHRvIHJlbWlu ZCB5b3UpLiBUaGUgPGNvZGU+Lmxpbms8L2NvZGU+IGNhbiBiZSByZWluc3RhdGVkIHdpdGgg dGhlIDxhIGhyZWY9IiNmZGxzaG93bGluayI+c2hvd19saW5rPC9hPiBhdHRyaWJ1dGUuPC9w PgoKCTxoNCBjbGFzcz0iYXR0cyAiPkF0dHJpYnV0ZXM8L2g0PgoKCTx1bD4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0dC1uYW1lIj5pZDwvc3Bhbj4gOiB0aGUgSUQgb2YgdGhlIGZpbGUgeW91 IHdhbnQgdG8gbGluayB0by4gSWYgbGVmdCBibGFuaywgaXQgY2FuIGJlIHN1cHBsaWVkIGZy b20gd2hhdGV2ZXIgaXMgYmV0d2VlbiB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyB0YWc8L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmZpbGVuYW1lPC9zcGFuPiA6IHRoZSBm aWxlbmFtZSBvZiB0aGUgZmlsZSB5b3Ugd2FudCB0byBsaW5rIHRvLiBJZiBsZWZ0IGJsYW5r LCBpdCBjYW4gYmUgc3VwcGxpZWQgZnJvbSB3aGF0ZXZlciBpcyBiZXR3ZWVuIHRoZSBvcGVu aW5nIGFuZCBjbG9zaW5nIHRhZy4gSWYgYm90aCBmaWxlbmFtZSBhbmQgSUQgYXJlIHNwZWNp ZmllZCwgSUQgdGFrZXMgcHJlY2VkZW5jZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQt bmFtZSI+Y2hvb3NlPC9zcGFuPiA6IGdvdmVybnMgaG93IHRvIGNob29zZSB3aGljaCByZW1v dGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdG8gc2VydmUuIElmIHVzaW5nIHRo ZSBzdGFuZGFyZCA8Y29kZT5maWxlX2Rvd25sb2FkX2xpbms8L2NvZGU+IHRhZyAob3IgYnkg ZGVmYXVsdCBpbiB0aGlzIHRhZyksIGl0IGlzIHNldCB0byA8Y29kZT4wPC9jb2RlPiB3aGlj aCBtZWFucyAmIzgyMTY7cmFuZG9tbHkgcGljayBhIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8 L3NwYW4+IGZyb20gdGhvc2UgSSYjODIxNzt2ZSB1cGxvYWRlZCBmb3IgdGhpcyBmaWxlJiM4 MjE3OyAod2hlcmUgd291bGQgYW4gc21kXyBwbHVnaW4gYmUgd2l0aG91dCBhIHJhbmRvbSBv cHRpb24sIGVoPyEpLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIGhpZ2hlciBudW1iZXIgdG8g cGljayB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gZnJvbSB0aGF0IHBhcnRp Y3VsYXIgc2xvdC4gU28gPGNvZGU+Y2hvb3NlPSZxdW90OzEmcXVvdDs8L2NvZGU+IHdpbGwg YWx3YXlzIHNlbGVjdCB0aGUgMXN0IGZpbGUgeW91IHVwbG9hZGVkIGFuZCBkZWxpdmVyIHRo YXQ7IDxjb2RlPmNob29zZT0mcXVvdDsyJnF1b3Q7PC9jb2RlPiB0aGUgc2Vjb25kOyBhbmQg c28gb24uIElmIHlvdSBzcGVjaWZ5IGEgbnVtYmVyIGJpZ2dlciB0aGFuIHRoZSBudW1iZXIg b2YgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zIHN0b3JlZCBhZ2FpbnN0IGEgZmls ZSwgaXQgcGlja3MgdGhlIGZpcnN0IG9uZSB5b3UgdXBsb2FkZWQuPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0dC1uYW1lIj5zaG93X2xpbms8L3NwYW4+IDogc2V0IHRvIDAgYnkgZGVm YXVsdCwgd2hpY2ggaGlkZXMgdGhlIDxjb2RlPi5saW5rPC9jb2RlPiBvbiB0aGUgZW5kIG9m IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cy4gU2V0IGl0IHRvIDEgdG8gbWFrZSB0 aGUgdGFnIGJlaGF2ZSBsaWtlIHRoZSBidWlsdC1pbiA8Y29kZT5maWxlX2Rvd25sb2FkX2xp bms8L2NvZGU+PC9saT4KCTwvdWw+CgoJPGgzIGNsYXNzPSJ0YWcgIiBpZD0iZmRuIj5zbWRf ZmlsZV9kb3dubG9hZF9uYW1lPC9oMz4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPkFuIGV4 YWN0IGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBzdGFuZGFyZCA8Y29kZT4mbHQ7dHhw OmZpbGVfZG93bmxvYWRfbmFtZSZndDs8L2NvZGU+IHRhZywgYnV0IHdpdGggb25lIGF0dHJp YnV0ZS4gVGhpcyB0YWcmIzgyMTc7cyBkZWZhdWx0IGJlaGF2aW91ciB3aWxsIHJlbW92ZSBh bnkgPGNvZGU+Lmxpbms8L2NvZGU+IG9uIHRoZSBlbmQgb2YgZmlsZSBuYW1lcy48L3A+CgoJ PGg0IGNsYXNzPSJhdHRzICI+QXR0cmlidXRlczwvaDQ+CgoJPHVsPgoJCTxsaT48c3BhbiBj bGFzcz0iYXR0LW5hbWUiPnNob3dfbGluazwvc3Bhbj4gOiBzZXQgdG8gMCBieSBkZWZhdWx0 LCB3aGljaCBoaWRlcyB0aGUgPGNvZGU+Lmxpbms8L2NvZGU+IG9uIHRoZSBlbmQgb2YgZmls ZSBuYW1lcy4gU2V0IGl0IHRvIDEgdG8gbWFrZSB0aGUgdGFnIGJlaGF2ZSBsaWtlIHRoZSBi dWlsdC1pbiA8Y29kZT5maWxlX2Rvd25sb2FkX25hbWU8L2NvZGU+PC9saT4KCTwvdWw+CgoJ PGgzIGNsYXNzPSJ0YWcgIiBpZD0iZmRpIj5zbWRfZmlsZV9kb3dubG9hZF9pbWFnZTwvaDM+ CgoJPHAgY2xhc3M9InRhZy1zdW1tYXJ5Ij5XaGVuIGxpbmtpbmcgdG8gZXh0ZXJuYWwgY29u dGVudCAoZXNwZWNpYWxseSBtZWRpYSBmaWxlcykgaXQgaXMgb2Z0ZW4gdXNlZnVsIHRvIG1h a2UgYSBtaW5pIGltYWdlIHRvIGdvIHdpdGggaXQsIHN1Y2ggYXMgYSBzdGlsbCBmcm9tIGEg bW92aWUgb3Igc29tZSBhcnR3b3JrIGZvciBhbiBtcDMgdHJhY2suIFlvdSBjYW4gb2YgY291 cnNlIGVtYmVkIGEgPGNvZGU+Jmx0O3R4cDppbWFnZSZndDs8L2NvZGU+IHRhZyBpbiB5b3Vy IGRvd25sb2FkIGZvcm0sIGJ1dCB0aGF0IHdpbGwgZ2l2ZSBhIHN0YXRpYyBpbWFnZSBmb3Ig ZWFjaCBmaWxlLiBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IGltYWdlcyB0aGF0 IHZhcnkgd2l0aCB0aGUgZmlsZW5hbWUgb2YgdGhlIHJlbW90ZSAob3IgbG9jYWwgb2YgY291 cnNlKSBmaWxlLjwvcD4KCgk8cD5UbyB1c2UgaXQsIGp1c3QgdXBsb2FkIGFuIGltYWdlIChi eSBkZWZhdWx0IGEganBnKSB2aWEgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgy MTc7cyBJbWFnZXMgdGFiIGFuZCBnaXZlIGl0IHRoZSBleGFjdCBzYW1lIGZpbGVuYW1lIGFz IHRoZSByZW1vdGUgZmlsZSBpdCByZXByZXNlbnRzLCBwbHVzIGl0cyBub3JtYWwgaW1hZ2Ug ZmlsZSBleHRlbnNpb24uIGkuZS4gaWYgeW91ciByZW1vdGUgZmlsZSB3YXMgPGNvZGU+TWFu IGFuZCBib3kubXBnPC9jb2RlPiB5b3Ugd291bGQgdXBsb2FkIGFuIGltYWdlIGFuZCBuYW1l IGl0IDxjb2RlPk1hbiBhbmQgYm95Lm1wZy5qcGc8L2NvZGU+LiBEbyB0aGlzIGZvciBlYWNo IGZpbGUgYW5kIHRoZW4gdXNlIHRoaXMgdGFnIHRvIGRpc3BsYXkgdGhlbS48L3A+CgoJPHA+ QnkgZGVmYXVsdCwgaWYgYW55IGltYWdlIGRvZXNuJiM4MjE3O3QgZXhpc3QsIHRoZSB0YWcg b3V0cHV0cyB0aGUgaW1hZ2UgZmlsZW5hbWUgaW5zdGVhZCAoaWYgdXNpbmcgdGhlIDxjb2Rl PmZpbGVuYW1lPC9jb2RlPikgb3IgdGhlIGlkIChpZiB1c2luZyB0aGUgPGNvZGU+aWQ8L2Nv ZGU+KS4gVGhpcyBiZWhhdmlvdXIgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgPGNvZGU+ aWZtaXNzaW5nPC9jb2RlPiBvcHRpb24uPC9wPgoKCTxoNCBjbGFzcz0iYXR0cyAiPkF0dHJp YnV0ZXM8L2g0PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5pZDwvc3Bh bj4gOiB0aGUgSUQgb2YgYW4gaW1hZ2UgdG8gZGlzcGxheTwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdHQtbmFtZSI+ZmlsZW5hbWU8L3NwYW4+IDogdGhlIGZpbGVuYW1lIG9mIGFuIGlt YWdlIHRvIGRpc3BsYXkuIElmIGJvdGggZmlsZW5hbWUgYW5kIElEIGFyZSBzcGVjaWZpZWQs IElEIHRha2VzIHByZWNlZGVuY2UuIE5vdGUgdGhhdCBpbiB0aGlzIGFuZCA8Y29kZT5pZDwv Y29kZT4gbW9kZXMsIHRoZSB0YWcgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgPGNvZGU+ Jmx0O3R4cDppbWFnZSZndDs8L2NvZGU+LiBUaGUgZXhjZXB0aW9uIGlzIHRoYXQgeW91IGRv IG5vdCBoYXZlIHRvIHNwZWNpZnkgdGhlIGltYWdlIGZpbGUgPGNvZGU+ZXh0ZW5zaW9uPC9j b2RlPiwgYXMgaXQgZG9lcyB0aGF0IGZvciB5b3UgYnkgZGVmYXVsdCBpZiB5b3UgdXNlIDxz cGFuIGNsYXNzPSJjYXBzIj5KUEc8L3NwYW4+cyBhbmQgeW91IGNhbiBzcGVjaWZ5IHRodW1i bmFpbHMgaW5zdGVhZCB1c2luZyA8Y29kZT50aHVtYjwvY29kZT48L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXR0LW5hbWUiPmV4dGVuc2lvbjwvc3Bhbj4gOiBzYXZlcyB5b3UgaGF2aW5n IHRvIHNwZWNpZnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGluIHRoZSA8Y29kZT5maWxlbmFtZTwv Y29kZT4gcGFyYW1ldGVyLiBFbnRlciBpdCBoZXJlIDxlbT53aXRob3V0PC9lbT4gdGhlIGRv dC4gQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8gPGNvZGU+ZXh0ZW5zaW9uPSZxdW90O2pwZyZx dW90OzwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnRodW1iPC9z cGFuPiA6IHNldCB0byAwIGJ5IGRlZmF1bHQsIHdoaWNoIG1lYW5zIHVzZSB0aGUgZnVsbCBz aXplIGltYWdlLiBJZiB5b3UgaGF2ZSBjcmVhdGVkIHRodW1ibmFpbHMgeW91IG1heSB1c2Ug PGNvZGU+dGh1bWI9JnF1b3Q7MSZxdW90OzwvY29kZT4gdG8gdXNlIHRob3NlIGluc3RlYWQ8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmlmbWlzc2luZzwvc3Bhbj4gOiB3 aGVuIGFuIGltYWdlIGZpbGUgaXMgbWlzc2luZywgdGhpcyBvcHRpb24mIzgyMTc7cyBkZWZh dWx0IHNldHRpbmcgb2YgPGNvZGU+aWZtaXNzaW5nPSZxdW90Oz9yZWYmcXVvdDs8L2NvZGU+ IHdpbGwgZGlzcGxheSBlaXRoZXIgdGhlIGltYWdlIGZpbGVuYW1lIG9yIGl0cyBJRCBpZiBp dCB3YXMgdXNlZC4gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzcGVjaWZ5IGEgZGVkaWNhdGVk ICYjODIxNjtubyBwaWMmIzgyMTc7IGltYWdlIGJ5IHVwbG9hZGluZyBvbmUgYW5kIHVzaW5n IHRoZSBzcGVjaWFsIGNvZGUgPGNvZGU+aWZtaXNzaW5nPSZxdW90Oz9pbWFnZTpJRF9vcl9u YW1lJnF1b3Q7PC9jb2RlPiAoZS5nLiA8Y29kZT5pZm1pc3Npbmc9JnF1b3Q7P2ltYWdlOjMy JnF1b3Q7PC9jb2RlPiBvciA8Y29kZT5pZm1pc3Npbmc9JnF1b3Q7P2ltYWdlOk5vUGljLmpw ZyZxdW90OzwvY29kZT4pLiBJZiBub3QgdXNpbmcgdGhlIHNwZWNpYWwgY29kZXMsIHB1dCBh bnkgdGV4dCB5b3UgbGlrZSBoZXJlLCBmb3IgZXhhbXBsZSA8Y29kZT5pZm1pc3Npbmc9JnF1 b3Q7Tm8gaW1hZ2UgeWV0JnF1b3Q7PC9jb2RlPi4gVXNlIDxjb2RlPmlmbWlzc2luZz0mcXVv dDsmcXVvdDs8L2NvZGU+IHRvIG91dHB1dCBub3RoaW5nIGluIHRoZSBldmVudCBvZiBhIG1p c3NpbmcgaW1hZ2U8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPndyYXB0YWc8 L3NwYW4+IDogdGhlIHRhZyB0byB3cmFwIGFyb3VuZCB0aGUgb3V0c2lkZSBvZiB0aGUgaW1h Z2UuIFNwZWNpZnkgaXQgd2l0aCBubyBhbmdsZSBtYXJrZXJzLCBlLmcuIDxjb2RlPndyYXB0 YWc9JnF1b3Q7cCZxdW90OzwvY29kZT4uIERlZmF1bHRzIHRvIGVtcHR5IChpLmUuIG5vIHdy YXB0YWcpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5jbGFzczwvc3Bhbj4g OiB0aGUgY2xhc3MgbmFtZSB0byBhcHBseSB0byB0aGUgaW1hZ2UuIElmIHVzaW5nIDxjb2Rl PndyYXB0YWc8L2NvZGU+IHRoZSBjbGFzcyBpcyBhcHBsaWVkIHRvIHRoZSBzdXJyb3VuZGlu ZyB0YWcuIElmIGl0IGlzIG9taXR0ZWQgdGhlIGNsYXNzIGlzIGFwcGxpZWQgZGlyZWN0bHkg dG8gdGhlIGltYWdlLiBEZWZhdWx0OiBlbXB0eSAoaS5lLiBubyBjbGFzcyk8L2xpPgoJPC91 bD4KCgk8aDIgaWQ9Imhvd2l0d29ya3MiPkhvdyBpdCB3b3JrczwvaDI+CgoJPHA+Rm9yIHRo ZSBjdXJpb3VzLCB0aGUgcGx1Z2luIGp1c3QgY3JlYXRlcyBhIGR1bW15IHRleHQgZmlsZSB3 aXRoIHRoZSBuYW1lIG9mIHlvdXIgZmlsZSBwbHVzIHRoZSBzcGVjaWFsIHN1ZmZpeCA8Y29k ZT4ubGluazwvY29kZT4gdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSBhIHN0YW5kYXJkIGZpbGUu IEV2ZXJ5IHRpbWUgeW91IGFkZCBhIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IG9m IHRoZSBzYW1lIG5hbWUgaXQgaXMgYWRkZWQgYXMgYSBuZXcgbGluZSB3aXRoaW4gdGhpcyBm aWxlLjwvcD4KCgk8cD5UaGlzIG1lYW5zIHlvdSBjYW4gc2h1ZmZsZSB0aGUgb3JkZXIgb2Yg PHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zLCBkZWxldGUgcmVtb3RlIGZpbGVzIG9y IGVkaXQgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyBkaXJlY3RseSBpZiB5 b3Ugc28gd2lzaCBieSBzaW1wbHkgZG93bmxvYWRpbmcgdGhlIHJlbGV2YW50IC5saW5rIGZp bGUgZnJvbSB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5GVFA8L3NwYW4+IHNlcnZlciwgZWRp dGluZyBpdCBhbmQgcmUtdXBsb2FkaW5nIGl0LiBBcyBsb25nIGFzIHlvdSBtYWtlIHN1cmUg eW91IGhhdmUgb25lIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHBlciBsaW5lIGV2 ZXJ5dGhpbmcgd2lsbCB3b3JrLjwvcD4KCgk8cD5JbmNpZGVudGFsbHksIHRoZSByZWFsIGZp bGUgc2l6ZSBpcyByZS1yZWFkIChmcm9tIHRoZSAxc3QgZmlsZSBsaXN0ZWQgaW4gdGhlIC5s aW5rIGZpbGUpIGV2ZXJ5IHRpbWUgdGhlIGxvY2FsIGZpbGUgaXMgZWRpdGVkIGJlY2F1c2Ug b3RoZXJ3aXNlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IG92ZXJ3cml0ZXMgaXQg d2l0aCB0aGUgc2l6ZSBvZiB0aGUgZHVtbXkgdGV4dCBmaWxlLiBUaGlzIGhhcyBwb3RlbnRp YWwgcmFtaWZpY2F0aW9ucyB3aGVuIGRvd25sb2FkaW5nIGJlY2F1c2UgPGVtPnRoZSBwbHVn aW4gY2hlY2tzIHRoYXQgdGhlIHJlbW90ZSBmaWxlIHNpemUgbWF0Y2hlcyB0aGUgb25lIGlu IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBpbnRlcmZhY2UgYmVmb3JlIHNl cnZpbmcgdGhlIGZpbGU8L2VtPi4gSWYgb25lIG9mIHlvdXIgdXBsb2FkZWQgZmlsZXMgaXMg YSBkaWZmZXJlbnQgc2l6ZSBpdCB3aWxsIHJlZnVzZSB0byBkb3dubG9hZC48L3A+CgoJPHA+ VGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0byB0cnkgdG8gbWFpbnRhaW4gZG93bmxvYWQgY291 bnQgaW50ZWdyaXR5LiBJbnN0ZWFkIG9mIGRpc2hpbmcgb3V0IGEgc3RhbmRhcmQgNDA0IG1l c3NhZ2UsIHNvbWUgc2VydmVycyB3aWxsIHJlZGlyZWN0IHRvIGFuIGltYWdlIG9yIDxzcGFu IGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBmaWxlIHRvIHRlbGwgeW91IHRoYXQgYSBmaWxl IGlzIG1pc3NpbmcuIFRoaXMgcmV0dXJucyBhIHN0YXR1cyBjb2RlIG9mICYjODIxNzsyMDAg T0smIzgyMTc7IHRvIGluZGljYXRlIHRoYXQgdGhlIGRvd25sb2FkIG9mIHRoZSByZXBsYWNl bWVudCBjb250ZW50IHdlbnQgb2ssIGJ1dCBpbiB0aGlzIGNhc2Ugd2UgZG8gPGVtPm5vdDwv ZW0+IHdhbnQgdG8gaW5jcmVtZW50IHRoZSBjb3VudGVyOyB0aGUgZmlsZSYjODIxNztzIHN0 aWxsIG1pc3NpbmcgYWZ0ZXIgYWxsISBVbmRlciByYXJlIGNpcmN1bXN0YW5jZXMgeW91IG1p Z2h0IGZpbmQgdGhhdCB0aGUgcHJvdmlkZXIgcmV0dXJucyBjb250ZW50IGV4YWN0bHkgdGhl IHNhbWUgbGVuZ3RoIGFzIHRoZSBmaWxlIGl0c2VsZiBhbmQgdGhlIGNvdW50IHdvdWxkIHRo ZW4gYmUgd3JvbmdseSBpbmNyZW1lbnRlZC4gUHJhY3RpY2FsbHksIHlvdXIgZmlsZSBpcyBn b2luZyB0byBiZSBsYXJnZXIgdGhhbiB0aGVpciByZXBsYWNlbWVudCBzbyBpdCB3b24mIzgy MTc7dCBtYXR0ZXIuPC9wPgoKCTxwPk5vdGUgdGhhdCB0aGUgJiM4MjE2O2Rvd25sb2FkJiM4 MjE3OyBsaW5rIG5leHQgdG8gZWFjaCBmaWxlIG9uIHRoZSBGaWxlcyB0YWIgb2YgdGhlIGFk bWluIGludGVyZmFjZSBhbHdheXMgY2hvb3NlcyBhIHJhbmRvbSBmaWxlIGZyb20gdGhvc2Ug dXBsb2FkZWQgd2l0aCB0aGF0IG5hbWUuPC9wPgoKCTxwPktub3duIGlzc3VlOiBJZiBlZGl0 aW5nIGEgJiM4MjIwO25vcm1hbCYjODIyMTsgZmlsZSAobm90IGEgLmxpbmspIGFuZCB5b3Ug aGl0IHRoZSBVcGxvYWQgYnV0dG9uIDxlbT53aXRob3V0IHNwZWNpZnlpbmcgYSBmaWxlPC9l bT4sIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB1cGxvYWQgYm94IGRvZXMg bm90IGFwcGVhciBvbiB0aGUgRmlsZSBMaXN0IHBhZ2UuIEhpdHRpbmcgdGhlIEZpbGVzIHRh YiBhZ2FpbiBvciBwZXJmb3JtaW5nIHNvbWUgb3RoZXIgYWN0aW9uIHJlLWluc3RhdGVzIGl0 LiAqc2hydWcqPC9wPgoKCTxoMiBpZD0iZXhhbXBsZXMiPkV4YW1wbGVzPC9oMj4KCgk8aDMg aWQ9ImVnMSI+RXhhbXBsZSAxPC9oMz4KCgk8cD5JbiB5b3VyIDxjb2RlPmZpbGVzPC9jb2Rl PiBmb3JtOjwvcD4KCjxwcmU+Jmx0O3R4cDpmaWxlX2Rvd25sb2FkX2xpbmsmZ3Q7CiAmbHQ7 dHhwOnNtZF9maWxlX2Rvd25sb2FkX25hbWUgLyZndDsgWyZsdDt0eHA6ZmlsZV9kb3dubG9h ZF9zaXplCiAgICAgZm9ybWF0PSZxdW90O2F1dG8mcXVvdDsgZGVjaW1hbHM9JnF1b3Q7MiZx dW90OyAvJmd0O10KJmx0Oy90eHA6ZmlsZV9kb3dubG9hZF9saW5rJmd0Owo8L3ByZT4KCgk8 aDMgaWQ9ImVnMiI+RXhhbXBsZSAyPC9oMz4KCjxwcmU+Jmx0O3R4cDpzbWRfZmlsZV9kb3du bG9hZF9saW5rIGNob29zZT0mcXVvdDsyJnF1b3Q7CiAgICAgc2hvd19saW5rPSZxdW90OzEm cXVvdDsgLyZndDsKPC9wcmU+CgoJPHA+V2lsbCBhbHdheXMgc2VsZWN0IHRoZSAybmQgPHNw YW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gZnJvbSB0aG9zZSB1cGxvYWRlZCBmb3IgZWFj aCBmaWxlLiBTaG93cyB0aGUgPGNvZGU+Lmxpbms8L2NvZGU+IG9uIHRoZSBlbmQgb2YgZWFj aCByZW1vdGUgZmlsZS48L3A+CgoJPGgzIGlkPSJlZzMiPkV4YW1wbGUgMzwvaDM+Cgo8cHJl PiZsdDt0eHA6c21kX2ZpbGVfZG93bmxvYWRfbGluayZndDsKICZsdDt0eHA6c21kX2ZpbGVf ZG93bmxvYWRfaW1hZ2UgaWZtaXNzaW5nPSZxdW90O1NvcnJ5LCBubyBpbWFnZSBmb3VuZCZx dW90OwogICAgIHdyYXB0YWc9JnF1b3Q7c3BhbiZxdW90OyBjbGFzcz0mcXVvdDtkbG9hZCZx dW90OyAvJmd0OwombHQ7L3R4cDpzbWRfZmlsZV9kb3dubG9hZF9saW5rJmd0Owo8L3ByZT4K Cgk8cD5EaXNwbGF5cyBhbiBpbWFnZSB3aXRoIHRoZSBzYW1lIG5hbWUgKHBsdXMgLmpwZykg YXMgdGhlIHJlbW90ZSBmaWxlLiBUaGUgaW1hZ2UgaXMgY2xpY2thYmxlIHRvIGFsbG93IHRo ZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQgYnV0IGlmIHRoZSBpbWFnZSBpcyBub3QgZm91bmQs IHRoZSB0ZXh0ICYjODIyMDtTb3JyeSwgbm8gaW1hZ2UgZm91bmQmIzgyMjE7IHdpbGwgYmUg ZGlzcGxheWVkIGluc3RlYWQgKHRoZSB0ZXh0IGlzIGFsc28gY2xpY2thYmxlKS4gV3JhcHMg dGhlIGltZyBvciB0ZXh0IGluIDxjb2RlPiZsdDtzcGFuJmd0OzwvY29kZT4gdGFncyB3aXRo IGEgY2xhc3Mgb2YgPGNvZGU+ZGxvYWQ8L2NvZGU+LjwvcD4KCgk8aDIgaWQ9ImNoYW5nZWxv ZyI+Q2hhbmdlbG9nPC9oMj4KCgk8dWw+CgkJPGxpPjEyIE5vdiAwNyB8IDAuMSB8IEluaXRp YWwgcmVsZWFzZTwvbGk+CgkJPGxpPjA0IERlYyAwNyB8IDAuMiB8IEFkZGVkIGRvd25sb2Fk IGNvdW50ZXIgYW5kIHNvbWUgYmV0dGVyIHN0YXR1cyBtZXNzYWdlczwvbGk+CgkJPGxpPjA0 IERlYyAwNyB8IDAuMyB8IFJlbW92ZWQgLmxpbmsgd2hlbiB1c2luZyA8Y29kZT5zbWRfZmls ZV9kb3dubG9hZF9saW5rPC9jb2RlPiA7IGFkZGVkIDxjb2RlPnNob3dfbGluazwvY29kZT4g YXR0cmlidXRlIDsgaW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcgY29kZSA7IGRvd25sb2FkIGNv dW50IG9ubHkgaW5jcmVhc2VzIGlmIGZpbGUgc2l6ZXMgbWF0Y2g8L2xpPgoJCTxsaT4wNSBE ZWMgMDcgfCAwLjMxIHwgRmlsZSBpcyBjaGVja2VkIGZvciBlcnJvciBjb25kaXRpb24gcHJp b3IgdG8gZG93bmxvYWQgaW4gbGluZSB3aXRoIGNvcmUgY2hhbmdlc2V0IHIyNzIwICh0aGFu a3MgTWFyeSkgJiM4MjExOyBjYW4gYmUgcmVtb3ZlZCB3aGVuIDQuMC42IGlzIHJlbGVhc2Vk PC9saT4KCQk8bGk+MTIgRGVjIDA3IHwgMC4zMiB8IEVuaGFuY2VkIGlmbWlzc2luZyB0byBp bmNsdWRlIGltYWdlIHN1cHBvcnQ7IGNoYW5nZWQgdGhlID9maWxlIGF0dHJpYnV0ZSB0byA/ cmVmIChpdCYjODIxNztzIGEgYmV0dGVyIG5hbWUpPC9saT4KCQk8bGk+MDMgRmViIDA4IHwg MC40IHwgUmVxdWlyZXMgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gNC4wLjYgOyBy ZW1vdmVkIGVycm9yIGNoZWNrIGZyb20gdjAuMzEgOyBhZGRlZC9pbXByb3ZlZCByZXBsYWNl IHJlbW90ZSBmaWxlIDsgcmVkdWNlZCB0aW1lb3V0IGZvciBhY2Nlc3NpbmcgcmVtb3RlIDxz cGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHRvIHRyeSBhbmQgcHJldmVudCB1Z2x5IHdh cm5pbmdzPC9saT4KCQk8bGk+MDIgQXByIDA4IHwgMC40MSB8IEFkZGVkIHNtZF9maWxlX2Rv d25sb2FkX25hbWUgKHRoYW5rcyBhc3dpaGFydCk8L2xpPgoJCTxsaT4wOSBBcHIgMDggfCAw LjQyIHwgRml4ZWQgbWlub3IgZWRnZSBjYXNlIGJ1ZyBpbiBzbWRfZmlsZV9kb3dubG9hZF9s aW5rPC9saT4KCQk8bGk+MTAgSnVuIDA4IHwgMC40MyB8IEZpeGVkIHNwdXJpb3VzIGNoYXJh Y3RlcnMgaW4gdGhlIHNpbmdsZSB0YWcgdmVyc2lvbiBvZiBzbWRfZmlsZV9kb3dubG9hZF9s aW5rICh0aGFua3MgaWJsYXN0b2ZmKTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iY3JlZGl0cyI+ Q3JlZGl0czwvaDI+CgoJPHA+SSBjYW5ub3QgcG9zc2libHkgY2xhaW0gYWxsIHRoZSBjcmVk aXQgZm9yIHRoaXMgaHVuayBvZiBjb2RlLiBUaGUgcGx1Z2luIHdvdWxkIG5vdCBoYXZlIGV4 aXN0ZWQgaWYgaXQgd2VyZW4mIzgyMTc7dCBmb3IgdGhlIGFtYXppbmcgbWluZCBvZiBSdXVk IHZhbiBNZWxpY2suIEhlIHN1Z2dlc3RlZCBhIHZlcnkgY2xldmVyIHNvbHV0aW9uIHRvIG15 IHJlbW90ZSBmaWxlIHByZWRpY2FtZW50LiBJIGJ1aWx0IG9uIHRoYXQsIGV4dGVuZGVkIGl0 LCByZWZpbmVkIGl0LCBwbHVnaW5pc2VkIGl0IGFuZCBnYXZlIGl0IHRvIHlvdS4gTWFueSB0 aGFua3MgdG8gUnV1ZCBmb3IgdGhlIGF3ZXNvbWUgc3VwcG9ydCBoZSBvZmZlcnMgdGhlIGNv bW11bml0eSwgYW5kIGFsc28gdG8gV2V0IGZvciBoaXMgYXNzaXN0YW5jZSB3aXRoIGhlbHBp bmcgbWUgdW5kZXJzdGFuZCB0aGUgY29yZS48L3A+Cgo8L2Rpdj4KPCEtLSAqKiogQkVHSU4g UExVR0lOIENTUyAqKiogLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCAu cmVxdWlyZWQgeyBjb2xvcjpyZWQ7IHBhZGRpbmc6LjVlbSAwOyBmb250LXdlaWdodDpib2xk OyB9CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21kX2hlbHAgLmF0dC1uYW1l IHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJv bGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7 IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQojc21kX2hlbHAgY29kZS5zZWRfY29kZV90 YWcgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGJhY2tn cm91bmQtY29sb3I6ICNmMGU2OGM7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHgg MjBweDsgcGFkZGluZzoxMHB4OyB9CiNzbWRfaGVscCBhOmxpbmssICNzbWRfaGVscCBhOnZp c2l0ZWQgeyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90 dG9tOiAxcHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30KI3NtZF9oZWxwIGE6 aG92ZXIsICNzbWRfaGVscCBhOmFjdGl2ZSB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRp b246IG5vbmU7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRv bToxcHg7fQojc21kX2hlbHAgaDEgeyBjb2xvcjogIzM2OTsgZm9udDogMjBweCBHZW9yZ2lh LCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgfQojc21kX2hl bHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAw IDA7IGNvbG9yOiAjMzY5OyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI3Nt ZF9oZWxwIGgzIHsgY29sb3I6ICMxMDgwMzA7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fu cy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxNXB4IDAgMDt0ZXh0LXRy YW5zZm9ybTogdXBwZXJjYXNlO30KPC9zdHlsZT4KPCEtLSAqKiogRU5EIFBMVUdJTiBDU1Mg KioqIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiIzMTVkMzAwNDhhYTdhZjM2MmI4ODE1ODU0YmFk MGQ5ZCI7fQ==