# Name: smd_remote_file v0.4 # Type: Admin/Client side plugin # Allows remote URL files to be handled from the Files tab # Author: Stef Dawson # URL: http://stefdawson.com/ # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTU6InNtZF9yZW1vdGVfZmlsZSI7czo2OiJhdXRob3IiO3M6 MTE6IlN0ZWYgRGF3c29uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRh d3Nvbi5jb20vIjtzOjc6InZlcnNpb24iO3M6MzoiMC40IjtzOjExOiJkZXNjcmlwdGlvbiI7 czo1NjoiQWxsb3dzIHJlbW90ZSBVUkwgZmlsZXMgdG8gYmUgaGFuZGxlZCBmcm9tIHRoZSBG aWxlcyB0YWIiO3M6NDoiY29kZSI7czoxNDI3NToiLy8gc21kX3JlbW90ZV9maWxlIGJ5IFN0 ZWYgRGF3c29uDQoNCi8vIFl1ayA6LSgNCmdsb2JhbCAkc21kX3JlbW90ZV9maWxlX3ZhcnM7 DQokc21kX3JlbW90ZV9maWxlX3ZhcnMgPSBhcnJheSgNCgknbXNnJyA9PiAnJywNCgknbWlu X3R4cF92ZXInID0+ICc0LjAuNicsDQopOw0KDQppZiAodHhwaW50ZXJmYWNlID09PSAnYWRt aW4nICYmIGdwcygnZXZlbnQnKSA9PT0gImZpbGUiKSB7DQoJaWYgKHZlcnNpb25fY29tcGFy ZSh0eHBfdmVyc2lvbiwgJHNtZF9yZW1vdGVfZmlsZV92YXJzWydtaW5fdHhwX3ZlciddLCAi Pj0iKSkgew0KCQlyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3JlbW90ZV9maWxlX3JlcGxhY2Un LCAnZmlsZScsICdzbWRfcmVtb3RlX2ZpbGVfcmVwbGFjZScpOw0KCQlyZWdpc3Rlcl9jYWxs YmFjaygnc21kX3JlbW90ZV9maWxlX3VwZGF0ZScsICdmaWxlJywgJ2ZpbGVfc2F2ZScpOw0K CQlyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3JlbW90ZV9maWxlX2NyZWF0ZScsICdmaWxlJywg J3NtZF9yZW1vdGVfZmlsZV9jcmVhdGUnLCAxKTsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3Nt ZF9yZW1vdGVfZmlsZScsICdmaWxlJyk7DQoJfSBlbHNlIHsNCgkJdHJpZ2dlcl9lcnJvcihn VHh0KCd0eHBfdmVyc2lvbicpIC4gIiAiIC4kc21kX3JlbW90ZV9maWxlX3ZhcnNbJ21pbl90 eHBfdmVyJ10uICIgcmVxdWlyZWQuIik7DQoJfQ0KfQ0KDQppZiAodHhwaW50ZXJmYWNlID09 PSAncHVibGljJykgew0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfcmVtb3RlX2Rvd25sb2Fk JywgJ2ZpbGVfZG93bmxvYWQnKTsNCn0NCg0KLy8gQmxvdy1ieS1ibG93IGVxdWl2YWxlbnQg b2YgZmlsZV9kb3dubG9hZF9saW5rLCBqdXN0IGEgcmVtb3RlLWF3YXJlIHZlcnNpb24uDQov LyBBZGRzIHRoZSBjaG9vc2Ugb3B0aW9uLiBEZWZhdWx0cyB0byAwICggPSByYW5kb20sIGZv ciBsb2FkIGJhbGFuY2luZykuIFNwZWNpZnkNCi8vIGFueSBoaWdoZXIgaW50ZWdlciB0byBn cmFiIHRoYXQgcGFydGljdWxhciBlbnRyeSBmcm9tIHRoZSBmaWxlIChpZiBpdCBleGlzdHMs IGVsc2UgdXNlIDFzdCkNCmZ1bmN0aW9uIHNtZF9maWxlX2Rvd25sb2FkX2xpbmsoJGF0dHMs ICR0aGluZykgew0KCWdsb2JhbCAkdGhpc2ZpbGU7DQoJZXh0cmFjdChsQXR0cyhhcnJheSgN CgkJJ2ZpbGVuYW1lJyA9PiAnJywNCgkJJ2lkJyA9PiAnJywNCgkJJ2Nob29zZScgPT4gJzAn LA0KCQknc2hvd19saW5rJyA9PiAnMCcsDQoJKSwgJGF0dHMpKTsNCg0KCS8vIFJlbW92ZSB0 aGUgZXh0cmEgYXR0cmlidXRlcyBub3QgaW4gdGhlIG9yZ2luYWwgdGFnDQoJdW5zZXQoJGF0 dHNbJ3Nob3dfbGluayddKTsNCgl1bnNldCgkYXR0c1snY2hvb3NlJ10pOw0KDQoJJGtleXMg PSBhcnJheSgic21kX2Nob29zZSIgPT4gJGNob29zZSk7DQoJJG91dCA9IGZpbGVfZG93bmxv YWRfbGluaygkYXR0cywgJHRoaW5nKTsNCglpZiAoc3RycG9zKCR0aGlzZmlsZVsnZmlsZW5h bWUnXSwgIi5saW5rIikpIHsNCgkJJG9yaWdMaW5rID0gZXhwbG9kZSgnIicsICRvdXQpOw0K CQkkb3JpZ0xpbmtbMV0gPSAoKCRzaG93X2xpbmspID8gJG9yaWdMaW5rWzFdIDogc3RyX3Jl cGxhY2UoIi5saW5rIiwgIiIsICRvcmlnTGlua1sxXSkpIC4gam9pbl9xcygka2V5cyk7IC8v IFdpbGwgaWdub3JlIGpvaW5fcXMgaWYgY2hvb3NlIGlzIDANCgkJJG91dCA9IGltcGxvZGUo JyInLCAkb3JpZ0xpbmspOw0KCX0NCglyZXR1cm4gJG91dDsNCn0NCg0KLy8gQWRkIGFuIGlt YWdlIHRvIHRoZSBkb3dubG9hZCBmb3JtIHdoaWNoLCBieSBkZWZhdWx0LCBpcyBiYXNlZCBv biB0aGUgZmlsZW5hbWUgb2YgdGhlIGRvd25sb2FkIGl0c2VsZg0KZnVuY3Rpb24gc21kX2Zp bGVfZG93bmxvYWRfaW1hZ2UoJGF0dHMpIHsNCglnbG9iYWwgJHRoaXNmaWxlOw0KCWFzc2Vy dF9maWxlKCk7DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQknZmlsZW5hbWUnID0+ICcn LA0KCQknaWQnID0+ICcnLA0KCQknZXh0ZW5zaW9uJyA9PiAnanBnJywNCgkJJ2lmbWlzc2lu ZycgPT4gJz9yZWYnLA0KCQkndGh1bWInID0+ICcwJywNCgkJJ2NsYXNzJyA9PiAnJywNCgkJ J3dyYXB0YWcnID0+ICcnLA0KCSksICRhdHRzKSk7DQoJJGZpbGVsaW5rID0gJHRoaXNmaWxl WydmaWxlbmFtZSddOw0KCWlmICgkZmlsZW5hbWUgPT0gIiIpIHsNCgkJJGZpbGVuYW1lID0g JGZpbGVsaW5rOw0KCX0NCgkkZmlsZW5hbWUgPSBzdHJfcmVwbGFjZSgiLmxpbmsiLCAiIiwg JGZpbGVuYW1lKSAuICgoJGV4dGVuc2lvbj09IiIpID8gJycgOiAnLicuJGV4dGVuc2lvbik7 DQoNCgkkaW1nID0gJyc7DQoJaWYgKCRpZCkgew0KCQkkaW1nID0gKCR0aHVtYj09MCkgPyBA aW1hZ2UoYXJyYXkoImlkIiA9PiAkaWQsICJjbGFzcyIgPT4gJGNsYXNzLCAid3JhcHRhZyIg PT4gJHdyYXB0YWcpKSA6IEB0aHVtYm5haWwoYXJyYXkoImlkIiA9PiAkaWQsICJjbGFzcyIg PT4gJGNsYXNzLCAid3JhcHRhZyIgPT4gJHdyYXB0YWcpKTsNCgl9IGVsc2UgaWYgKChzdHJw b3MoJGZpbGVuYW1lLCAiaHR0cDovLyIpID09PSAwKSB8fCAoc3RycG9zKCRmaWxlbmFtZSwg Ii8iKSA9PT0gMCkpIHsNCgkJJGltZyA9ICgoJHdyYXB0YWc9PSIiKSA/ICcnIDogJzwnLiR3 cmFwdGFnLiAoKCRjbGFzcz09IiIpID8gJycgOiAnIGNsYXNzPSInLiRjbGFzcy4nIicpIC4n PicpIC4gJzxpbWcgc3JjPSInLiRmaWxlbmFtZS4nIicuICgoJHdyYXB0YWc9PSIiICYmICRj bGFzcykgPyAnIGNsYXNzPSInLiRjbGFzcy4nIicgOiAnJykgLiAnLz4nLiAoKCR3cmFwdGFn PT0iIikgPyAnJyA6ICc8LycuJHdyYXB0YWcuJz4nKTsNCgl9IGVsc2Ugew0KCQkkaW1nID0g KCR0aHVtYj09MCkgPyBAaW1hZ2UoYXJyYXkoIm5hbWUiID0+ICRmaWxlbmFtZSwgImNsYXNz IiA9PiAkY2xhc3MsICJ3cmFwdGFnIiA9PiAkd3JhcHRhZykpIDogQHRodW1ibmFpbChhcnJh eSgibmFtZSIgPT4gJGZpbGVuYW1lLCAiY2xhc3MiID0+ICRjbGFzcywgIndyYXB0YWciID0+ ICR3cmFwdGFnKSk7DQoJfQ0KCSR3cmFwcGVyID0gKCgkd3JhcHRhZz09IiIpID8gJ0BAUkVQ TCcgOiAnPCcuJHdyYXB0YWcuICgoJGNsYXNzPT0iIikgPyAnJyA6ICcgY2xhc3M9IicuJGNs YXNzLiciJykgLic+QEBSRVBMPC8nLiR3cmFwdGFnLic+Jyk7DQoJaWYgKHN0cnBvcygkaWZt aXNzaW5nLCAiP3JlZiIpID09PSAwKSB7DQoJCSRkaXNwbGF5ID0gKCRpZCkgPyAkaWQgOiAk ZmlsZW5hbWU7DQoJCSRtaXNzaW5nID0gc3RyX3JlcGxhY2UoIkBAUkVQTCIsICRkaXNwbGF5 LCAkd3JhcHBlcik7DQoJfSBlbHNlIGlmIChzdHJwb3MoJGlmbWlzc2luZywgIj9pbWFnZSIp ID09PSAwKSB7DQoJCSRpbWdQYXJ0cyA9IGV4cGxvZGUoIjoiLCAkaWZtaXNzaW5nKTsNCgkJ aWYgKGNvdW50KCRpbWdQYXJ0cykgPT0gMikgew0KCQkJJGltZ09wdHMgPSBhcnJheSgpOw0K CQkJaWYoaXNfbnVtZXJpYygkaW1nUGFydHNbMV0pKSB7DQoJCQkJJGltZ09wdHNbImlkIl0g PSAkaW1nUGFydHNbMV07DQoJCQl9IGVsc2Ugew0KCQkJCSRpbWdPcHRzWyJuYW1lIl0gPSAk aW1nUGFydHNbMV07DQoJCQl9DQoJCQkkbWlzc2luZyA9IHN0cl9yZXBsYWNlKCJAQFJFUEwi LCAoKCR0aHVtYj09MCkgPyBAaW1hZ2UoJGltZ09wdHMpIDogQHRodW1ibmFpbCgkaW1nT3B0 cykpLCAkd3JhcHBlcik7DQoJCX0gZWxzZSB7DQoJCQkkbWlzc2luZyA9ICIiOw0KCQl9DQoJ fSBlbHNlIGlmICgkaWZtaXNzaW5nID09ICIiKSB7DQoJCSRtaXNzaW5nID0gIiI7DQoJfSBl bHNlIHsNCgkJJG1pc3NpbmcgPSBzdHJfcmVwbGFjZSgiQEBSRVBMIiwgJGlmbWlzc2luZywg JHdyYXBwZXIpOw0KCX0NCglyZXR1cm4gKCRpbWcpID8gJGltZyA6ICRtaXNzaW5nOw0KfQ0K DQovLyBHZW5lcmljIGNhbGxiYWNrIHdoaWNoIGlzIGZpcmVkIF9hZnRlcl8gdGhlIEZpbGVz IHBhZ2UgaGFzIGxvYWRlZC4NCi8vIFBlcmZvcm1zIGRpc3BsYXkgY2xlYW51cC9pbnNlcnRp b24gYW5kIHBvc3QgcHJvY2Vzc2luZyBvZiBhbnkgZmlsZSBpbnNlcnRzL2VkaXRzDQpmdW5j dGlvbiBzbWRfcmVtb3RlX2ZpbGUoJGV2ZW50LCAkc3RlcCkgew0KCWdsb2JhbCAkc21kX3Jl bW90ZV9maWxlX3ZhcnM7DQoNCgkkaGVscExpbmsgPSAnPGEgdGFyZ2V0PSJfYmxhbmsiJy4N CgkJCScgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9yZW1vdGVfZmlsZV91cmxf cG9wdXAiJy4NCgkJCScgb25jbGljaz0icG9wV2luKHRoaXMuaHJlZik7IHJldHVybiBmYWxz ZTsiIGNsYXNzPSJwb3BoZWxwIj4/PC9hPic7DQoJaWYgKCRzdGVwID09ICJmaWxlX2VkaXQi IHx8ICRzdGVwID09ICJmaWxlX3JlcGxhY2UiKSB7DQoJCSRpZCA9IGFzc2VydF9pbnQoZ3Bz KCdpZCcpKTsNCgkJJHJzID0gc2FmZV9yb3coJ2ZpbGVuYW1lJywndHhwX2ZpbGUnLCdpZCA9 ICcuICRpZCk7DQoJCWlmIChzdHJwb3MoJHJzWydmaWxlbmFtZSddLCAiLmxpbmsiKSAhPT0g ZmFsc2UpIHsNCgkJCSR1bF9mb3JtID0gdHJpbShmb3JtKGVJbnB1dCgnZmlsZScpLiBzSW5w dXQoJ3NtZF9yZW1vdGVfZmlsZV9yZXBsYWNlJykuIGhJbnB1dCgnaWQnLCRpZCkuDQoJCQkJ CWdyYWYoJ0FkZCBVUkwnLnNwLiRoZWxwTGluay5zcC5mSW5wdXQoJ3RleHQnLCAnc21kX3Jl bW90ZV91cmwnLCAnJywgJ2VkaXQnLCAnRW50ZXIgYSBVUkwgdG8gYWRkIHRvIHRoaXMgZmls ZScsICcnLCAnMzInKS5zcC4NCgkJCQkJCSJPdmVyd3JpdGU6Ii5zcC5jaGVja2JveCgnc21k X3JlbW90ZV9ibGF0JywgJ3NtZF9yZW1vdGVfYmxhdCcsIDApLnNwLg0KCQkJCQkJZklucHV0 KCdzdWJtaXQnLCAnJywgJ1VwbG9hZCcsICdzbWFsbGVyYm94JykpDQoJCQkJLCAndGV4dC1h bGlnbjogY2VudGVyOycpKTsNCgkJCWVjaG8gc21kX3JlbW90ZV9qcygnJCgiLnVwbG9hZC1m b3JtIikucmVwbGFjZVdpdGgoXCcnLiR1bF9mb3JtLidcJyk7Jyk7DQoJCX0NCgl9IGVsc2Ug ew0KCQkkdWxfZm9ybSA9IHRyaW0oZm9ybShlSW5wdXQoJ2ZpbGUnKS4gc0lucHV0KCdzbWRf cmVtb3RlX2ZpbGVfY3JlYXRlJykuDQoJCQkJCWdyYWYoJ29yIFVSTCcuc3AuJGhlbHBMaW5r LnNwLmZJbnB1dCgndGV4dCcsICdzbWRfcmVtb3RlX3VybCcsICcnLCAnZWRpdCcsICdFbnRl ciBhIFVSTCB0byB1cGxvYWQgdG8gVFhQJywgJycsICczMicpLnNwLg0KCQkJCQkJZklucHV0 KCdzdWJtaXQnLCAnJywgJ1VwbG9hZCcsICdzbWFsbGVyYm94JykpDQoJCQkJLCAndGV4dC1h bGlnbjogY2VudGVyOycpKTsNCgkJZWNobyBzbWRfcmVtb3RlX2pzKCckKCIudXBsb2FkLWZv cm0iKS5hcHBlbmQoXCcnLiR1bF9mb3JtLidcJyk7Jyk7DQoJfQ0KDQoJaWYgKCRzbWRfcmVt b3RlX2ZpbGVfdmFyc1snbXNnJ10gIT0gIiIpIHsNCgkJZWNobyBzbWRfcmVtb3RlX2pzKCck KCIjbmF2LXByaW1hcnkgdGFibGUgdGQ6ZXEoMCkiKS5hcHBlbmQoXCcnLiRzbWRfcmVtb3Rl X2ZpbGVfdmFyc1snbXNnJ10uJ1wnKTsnKTsNCgl9DQp9DQoNCi8vIFdoZW4gYSBmaWxlIGlz ICJyZXBsYWNlZCIgd2l0aCBhIG5ldyBVUkwgdGhlIGV4aXN0aW5nIGZpbGUgbmFtZSBtdXN0 IHJlbWFpbg0KLy8gdW5jaGFuZ2VkLiBCeSBkZWZhdWx0IHRoZSBuZXcgVVJMIGlzIGFwcGVu ZGVkIHRvIHRoZSAubGluayBmaWxlIHVubGVzcyB0aGUgJ292ZXJ3cml0ZScNCi8vIGNoZWNr Ym94IGlzIHNldA0KZnVuY3Rpb24gc21kX3JlbW90ZV9maWxlX3JlcGxhY2UoKSB7DQoJZ2xv YmFsICRmaWxlX2Jhc2VfcGF0aCwgJHNtZF9yZW1vdGVfZmlsZV92YXJzOw0KDQoJZXh0cmFj dChncHNhKGFycmF5KCdzbWRfcmVtb3RlX3VybCcsICdzbWRfcmVtb3RlX2JsYXQnLCAnaWQn KSkpOw0KCSRpZCA9IGFzc2VydF9pbnQoJGlkKTsNCgkkdXJsID0gdHJpbSgkc21kX3JlbW90 ZV91cmwpOw0KCSRycyA9IHNhZmVfcm93KCdmaWxlbmFtZScsJ3R4cF9maWxlJywnaWQgPSAn LiRpZCk7DQoNCglpZiAoc3RycG9zKCRyc1snZmlsZW5hbWUnXSwgIi5saW5rIikgIT09IGZh bHNlKSB7DQoJCWlmIChzdHJwb3MoJHVybCwgImh0dHAiKSA9PT0gMCkgew0KCQkJJHdyaXRl TW9kZSA9ICgkc21kX3JlbW90ZV9ibGF0KSA/ICJ3IiA6ICJhIjsNCgkJCSRkZXN0X2ZpbGVw YXRoID0gYnVpbGRfZmlsZV9wYXRoKCRmaWxlX2Jhc2VfcGF0aCwgJHJzWydmaWxlbmFtZSdd KTsNCgkJCXNtZF9yZW1vdGVfZmlsZV93cml0ZSgkZGVzdF9maWxlcGF0aCwgJHJzWydmaWxl bmFtZSddLCAkdXJsLCAkd3JpdGVNb2RlKTsNCgkJfSBlbHNlIHsNCgkJCSRzbWRfcmVtb3Rl X2ZpbGVfdmFyc1snbXNnJ10gPSBnVHh0KCdmaWxlX3VwbG9hZF9mYWlsZWQnKSAuICgoZW1w dHkoJHNtZF9yZW1vdGVfdXJsKSkgPyAnIC0gJy5nVHh0KCd1cGxvYWRfZXJyX25vX2ZpbGUn KSA6ICcnKTsNCgkJfQ0KCX0NCn0NCg0KLy8gRXZlcnkgdGltZSBhIGZpbGUgaXMgc2F2ZWQv ZWRpdGVkLCBUWFAgcmVjYWxjdWxhdGVzIGl0cyBzaXplIGZyb20gdGhlIHJlYWwgZmlsZSAo Z3JycikuDQovLyBUaGlzIGlzIHVuZGVzaXJhYmxlIHNvIGl0IGlzIHJlcGxhY2VkIHdpdGgg dGhlIHNpemUgb2YgdGhlIHJlbW90ZSBVUkwgZmlsZSBpbnN0ZWFkLg0KZnVuY3Rpb24gc21k X3JlbW90ZV9maWxlX3VwZGF0ZSgpIHsNCglleHRyYWN0KGdwc2EoYXJyYXkoJ2lkJykpKTsN CglzbWRfcmVtb3RlX3NldF9zaXplKCRpZCk7DQp9DQoNCi8vIFNldHMgdGhlIHNpemUgb2Yg dGhlIGdpdmVuIFRYUCBkYXRhYmFzZSBmaWxlIHRvIHRoYXQgb2YgaXRzIGNvcnJlc3BvbmRp bmcgInJlYWwiIHJlbW90ZSBVUkwgZmlsZSBzaXplDQpmdW5jdGlvbiBzbWRfcmVtb3RlX3Nl dF9zaXplKCRpZF9vcl9maWxlKSB7DQoJZ2xvYmFsICRmaWxlX2Jhc2VfcGF0aDsNCg0KCWlm IChpc19udW1lcmljKCRpZF9vcl9maWxlKSkgew0KCQkkZmlsZW5hbWUgPSB0cmltKHNhZmVf ZmllbGQoImZpbGVuYW1lIiwgInR4cF9maWxlIiwgImlkPSIuaW50dmFsKCRpZF9vcl9maWxl KSkpOw0KCX0gZWxzZSB7DQoJCSRmaWxlbmFtZSA9IHRyaW0oZG9TbGFzaCgkaWRfb3JfZmls ZSkpOw0KCX0NCglpZiAoc3RycG9zKCRmaWxlbmFtZSwgIi5saW5rIikpIHsNCgkJJGZpbGVw YXRoID0gYnVpbGRfZmlsZV9wYXRoKCRmaWxlX2Jhc2VfcGF0aCwgJGZpbGVuYW1lKTsNCgkJ JHVybCA9IHNtZF9yZW1vdGVfZmlsZV9saXN0KCRmaWxlcGF0aCwgMSwgMSk7DQoJCWlmIChj b3VudCgkdXJsKSA+IDApIHsNCgkJCSRoZHJzID0gc21kX2dldF9oZWFkZXJzKCR1cmxbMF0s IDEpOw0KCQkJJHNpemUgPSAoJGhkcnMgPT09IGZhbHNlIHx8ICFpc3NldCgkaGRyc1snY29u dGVudC1sZW5ndGgnXSkpID8gMSA6ICRoZHJzWydjb250ZW50LWxlbmd0aCddOw0KCQkJc2Fm ZV91cGRhdGUoInR4cF9maWxlIiwgInNpemU9Ii4kc2l6ZSwgImZpbGVuYW1lPSciLiRmaWxl bmFtZS4iJyIpOw0KCQl9DQoJfQ0KfQ0KDQovLyBDYWxsYmFjayBmb3IgdXBsb2FkaW5nIGEg VVJMIGZyb20gdGhlIEZpbGVzIHRhYg0KZnVuY3Rpb24gc21kX3JlbW90ZV9maWxlX2NyZWF0 ZSgpIHsNCglnbG9iYWwgJGZpbGVfYmFzZV9wYXRoLCAkc21kX3JlbW90ZV9maWxlX3ZhcnM7 DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc21kX3JlbW90ZV91cmwnLCdjYXRl Z29yeScsJ3Blcm1pc3Npb25zJywnZGVzY3JpcHRpb24nKSkpKTsNCg0KCSR1cmwgPSB0cmlt KCRzbWRfcmVtb3RlX3VybCk7DQoJLy8gT25seSBpbnRlcmNlcHQgcmVtb3RlIGZpbGVzOyBs ZWF2ZSBldmVyeXRoaW5nIGVsc2UgZm9yIFRYUCB0byBtYW5hZ2UNCglpZiAoc3RycG9zKCR1 cmwsICJodHRwIikgPT09IDApIHsNCgkJJGhkcnMgPSBzbWRfZ2V0X2hlYWRlcnMoJHVybCwg MSk7DQoJCSRzaXplID0gKCRoZHJzID09PSBmYWxzZSB8fCAhaXNzZXQoJGhkcnNbJ2NvbnRl bnQtbGVuZ3RoJ10pKSA/IDEgOiAkaGRyc1snY29udGVudC1sZW5ndGgnXTsNCg0KCQkvLyBN YWtlIGEgZmlsZW5hbWUgYW5kIGZ1bGwgcGF0aDogdW5lbmNvZGVkDQoJCSRkZXN0X2ZpbGVu YW1lID0gYmFzZW5hbWUodXJsZGVjb2RlKCR1cmwpKS4iLmxpbmsiOw0KCQkkZGVzdF9maWxl cGF0aCA9IGJ1aWxkX2ZpbGVfcGF0aCgkZmlsZV9iYXNlX3BhdGgsICRkZXN0X2ZpbGVuYW1l KTsNCg0KCQlpZiAoZmlsZV9leGlzdHMoJGRlc3RfZmlsZXBhdGgpKSB7DQoJCQlzbWRfcmVt b3RlX2ZpbGVfd3JpdGUoJGRlc3RfZmlsZXBhdGgsICRkZXN0X2ZpbGVuYW1lLCAkdXJsKTsN CgkJfSBlbHNlIHsNCgkJCS8vIEZpbGUgZG9lc24ndCBleGlzdCBzbyBjcmVhdGUgaXQgYW5k IHB1dCB0aGUgVVJMIGluc2lkZQ0KCQkJJHRtcCA9IHRlbXBuYW0oIi90bXAiLCAic21kXyIp Ow0KCQkJJGhhbmRsZSA9IGZvcGVuKCR0bXAsICJ3Iik7DQoJCQlmd3JpdGUoJGhhbmRsZSwg JHVybC5uKTsNCgkJCWZjbG9zZSgkaGFuZGxlKTsNCgkJCXJlbmFtZSgkdG1wLCAkZGVzdF9m aWxlcGF0aCk7DQoNCgkJCS8vIEFkZCB0aGUgZmlsZSB0byBUWFANCgkJCSRyZXQgPSBzYWZl X2luc2VydCgidHhwX2ZpbGUiLA0KCQkJCSJmaWxlbmFtZSA9ICckZGVzdF9maWxlbmFtZScs DQoJCQkJIGNhdGVnb3J5ID0gJyRjYXRlZ29yeScsDQoJCQkJIHBlcm1pc3Npb25zID0gJyRw ZXJtaXNzaW9ucycsDQoJCQkJIGRlc2NyaXB0aW9uID0gJyRkZXNjcmlwdGlvbicsDQoJCQkJ IHNpemUgPSAnJHNpemUnLA0KCQkJCSBjcmVhdGVkID0gbm93KCksDQoJCQkJIG1vZGlmaWVk ID0gbm93KCkNCgkJCSIpOw0KCQkJJHNtZF9yZW1vdGVfZmlsZV92YXJzWydtc2cnXSA9IGdU eHQoJ2ZpbGVfdXBsb2FkZWQnLCBhcnJheSgne25hbWV9JyA9PiB1cmxkZWNvZGUoJHVybCkp KTsNCgkJfQ0KCX0gZWxzZSB7DQoJCSRzbWRfcmVtb3RlX2ZpbGVfdmFyc1snbXNnJ10gPSBn VHh0KCdmaWxlX3VwbG9hZF9mYWlsZWQnKSAuICgoZW1wdHkoJHNtZF9yZW1vdGVfdXJsKSkg PyAnIC0gJy5nVHh0KCd1cGxvYWRfZXJyX25vX2ZpbGUnKSA6ICcnKTsNCgl9DQp9DQoNCi8v IEFwcGVuZCBhIFVSTCB0byB0aGUgZ2l2ZW4gZmlsZS4gSWYgd3JpdGVNb2RlPSJ3IiB0aGUg d2hvbGUgZmlsZSBpcyByZXBsYWNlZA0KZnVuY3Rpb24gc21kX3JlbW90ZV9maWxlX3dyaXRl KCRmaWxlcGF0aCwgJGZpbGVuYW1lLCAkdXJsLCAkd3JpdGVNb2RlPSJhIikgew0KCWdsb2Jh bCAkc21kX3JlbW90ZV9maWxlX3ZhcnM7DQoNCgkvLyBSZWFkIHRoZSB3aG9sZSBmaWxlIGJl Y2F1c2Ugd2Ugb25seSB3YW50IHRvIGFkZCB0aGUgVVJMIGlmIGl0J3Mgbm90IHRoZXJlIGFs cmVhZHkNCgkkbGluZXMgPSBzbWRfcmVtb3RlX2ZpbGVfbGlzdCgkZmlsZXBhdGgsIDAsIDEp Ow0KCWlmICghaW5fYXJyYXkoJHVybCwgJGxpbmVzKSB8fCAkd3JpdGVNb2RlID09ICJ3Iikg ew0KCQkkaGFuZGxlID0gZm9wZW4oJGZpbGVwYXRoLCAkd3JpdGVNb2RlKTsNCgkJZndyaXRl KCRoYW5kbGUsICR1cmwubik7DQoJCWZjbG9zZSgkaGFuZGxlKTsNCgkJJHNtZF9yZW1vdGVf ZmlsZV92YXJzWydtc2cnXSA9IGdUeHQoJ2ZpbGVfdXBsb2FkZWQnLCBhcnJheSgne25hbWV9 JyA9PiB1cmxkZWNvZGUoJHVybCkpKTsNCgl9IGVsc2Ugew0KCQkkc21kX3JlbW90ZV9maWxl X3ZhcnNbJ21zZyddID0gZ1R4dCgnZmlsZV9hbHJlYWR5LWV4aXN0cycsIGFycmF5KCd7bmFt ZX0nID0+IHVybGRlY29kZSgkdXJsKSkpOw0KCX0NCgkvLyBTZXQgdGhlIHNpemUganVzdCBp biBjYXNlDQoJc21kX3JlbW90ZV9zZXRfc2l6ZSgkZmlsZW5hbWUpOw0KfQ0KDQovLyBSZWFk IHRoZSBjb250ZW50cyBvZiB0aGUgY2hvc2VuIGZpbGUgKGZ1bGwgcGF0aCByZXF1aXJlZCkg YW5kIGdldCBsaW5lcyBmcm9tIHdpdGhpbiwgYWRkaW5nIHRoZW0gdG8gYW4gYXJyYXkuDQov LyAgJG9mZnNldCBpcyB3aGVyZSB0byBzdGFydCBmcm9tLiBOb3JtYWxseSAxID0gMXN0IHJv dywgMiA9IDJuZCByb3cgYW5kIHNvIG9uLiAwID0gYSByYW5kb20gcm93Lg0KLy8gICRxdHkg c3BlY2lmaWVzIGhvdyBtYW55IHJvd3MgdG8gcHVsbC4gMCA9IHVubGltaXRlZC4NCmZ1bmN0 aW9uIHNtZF9yZW1vdGVfZmlsZV9saXN0KCRmbmFtZSwgJHF0eT0xLCAkb2Zmc2V0PTApIHsN Cgkkb3V0ID0gYXJyYXkoKTsNCglpZiAoZmlsZV9leGlzdHMoJGZuYW1lKSkgew0KCQkkZmQg PSBmb3BlbigkZm5hbWUsICJyIik7DQoJCS8vIFJlYWQgdGhlIHdob2xlIGZpbGUgaW4gKHll cyB0aGVyZSdzIHRoZSBmaWxlKCkgY2FsbCwgYnV0IGZnZXRzKCkgaXMgc3VwcG9zZWRseSBx dWlja2VyIG9uIHR4dCBmaWxlcykNCgkJd2hpbGUgKCFmZW9mKCRmZCkpIHsNCgkJCSRsaW5l ID0gcnRyaW0oZmdldHMoJGZkKSk7DQoJCQlpZiAoJGxpbmUgIT0gIiIpIHsNCgkJCSAgICRs aW5lc1tdID0gJGxpbmU7DQoJCQl9DQoJCX0NCgkJZmNsb3NlICgkZmQpOw0KCQlpZiAoJG9m ZnNldCA9PSAwKSB7DQoJCQlzaHVmZmxlKCRsaW5lcyk7DQoJCQkkb2Zmc2V0ID0gMTsNCgkJ fQ0KCQkkb2Zmc2V0ID0gKCRvZmZzZXQgPiBjb3VudCgkbGluZXMpKSA/IDEgOiAkb2Zmc2V0 Ow0KCQkkb3V0ID0gKCRxdHkgPT0gMCkgPyAkbGluZXMgOiBhcnJheV9zbGljZSgkbGluZXMs ICRvZmZzZXQtMSwgJHF0eSk7DQoJfQ0KCXJldHVybiAkb3V0Ow0KfQ0KDQovLyBDYWxsZWQg anVzdCBiZWZvcmUgYSBkb3dubG9hZCBpcyBpbml0aWF0ZWQNCmZ1bmN0aW9uIHNtZF9yZW1v dGVfZG93bmxvYWQoJGV2ZW50LCAkc3RlcCkgew0KCWdsb2JhbCAkcHJldGV4dCwgJGlkLCAk ZmlsZV9iYXNlX3BhdGgsICRmaWxlX2Vycm9yOw0KDQoJaWYgKCFpc3NldCgkZmlsZV9lcnJv cikpIHsNCgkJLy8gR2V0IHRoZSAidHJ1ZSIgZmlsZW5hbWUgKHVuZm9ydHVuYXRlbHkgZnJv bSB0aGUgZGF0YWJhc2UgPSAxIGV4dHJhIHF1ZXJ5KS4NCgkJJHJlYWxfZmlsZSA9IHNhZmVf cm93KCJmaWxlbmFtZSwgc2l6ZSIsICJ0eHBfZmlsZSIsICJpZD0iLmludHZhbCgkaWQpKTsN CgkJaWYgKHN0cnBvcygkcmVhbF9maWxlWydmaWxlbmFtZSddLCAiLmxpbmsiKSA+IDApIHsN CgkJCSRjaG9vc2UgPSAwOw0KCQkJLy8gR2V0IGFueSBvdmVycmlkaW5nIHZhbHVlIG9mIHNt ZF9jaG9vc2UgZnJvbSB0aGUgcXVlcnkgc3RyaW5nDQoJCQlpZiAoJHByZXRleHRbJ3FzJ10p IHsNCgkJCQlsaXN0KCRxa2V5LCAkcXZhbCkgPSBleHBsb2RlKCI9IiwgJHByZXRleHRbJ3Fz J10pOw0KCQkJCWlmICgkcWtleSA9PSAic21kX2Nob29zZSIpIHsNCgkJCQkJaWYgKCRxdmFs ID4gMCkgew0KCQkJCQkJJGNob29zZSA9IGludHZhbCgkcXZhbCk7DQoJCQkJCX0NCgkJCQl9 DQoJCQl9DQoJCQkvLyBUaGUgZmlsZSBzaXplLCBob3dldmVyLCBpcyB0aGF0IG9mIHRoZSBy ZW1vdGUgZmlsZQ0KCQkJJHJlbW90ZVVSTCA9IHNtZF9yZW1vdGVfZmlsZV9saXN0KGJ1aWxk X2ZpbGVfcGF0aCgkZmlsZV9iYXNlX3BhdGgsICRyZWFsX2ZpbGVbJ2ZpbGVuYW1lJ10pLCAx LCAkY2hvb3NlKTsNCgkJCWlmIChjb3VudCgkcmVtb3RlVVJMKSA+IDApIHsNCgkJCQkkdXJs ID0gJHJlbW90ZVVSTFswXTsNCgkJCQkvLyBUZXN0IHRoZSBmaWxlIGV4aXN0czogc2xvdywg YnV0IHJlZHVjZXMgZmFsc2UgZG93bmxvYWQgY291bnQgaW5jcmVtZW50cw0KCQkJCSRoZHJz ID0gc21kX2dldF9oZWFkZXJzKCR1cmwsIDEpOw0KCQkJCSRhbGxrZXkgPSBzdHJ0b2xvd2Vy KGltcGxvZGUoIiAiLCBhcnJheV9rZXlzKCRoZHJzKSkpOw0KCQkJCWlmIChzdHJwb3MoJGFs bGtleSwgIjIwMCIpID4gMCAmJiBzdHJwb3MoJGFsbGtleSwgIm9rIikgPiAwKSB7DQoJCQkJ CWhlYWRlcignQ29udGVudC1EZXNjcmlwdGlvbjogRmlsZSBEb3dubG9hZCcpOw0KCQkJCQlo ZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyk7DQoJCQkJ CWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Iicg LiBiYXNlbmFtZSgkcmVhbF9maWxlWydmaWxlbmFtZSddKSAuICciOyBzaXplID0gIicuJHJl YWxfZmlsZVsnc2l6ZSddLiciJyk7DQoJCQkJCS8vIEZpeCBmb3IgbGFtZSBJRSA2IHBkZiBi dWcgb24gc2VydmVycyBjb25maWd1cmVkIHRvIHNlbmQgY2FjaGUgaGVhZGVycw0KCQkJCQlo ZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IHByaXZhdGUnKTsNCgkJCQkJQGluaV9zZXQoInpsaWIu b3V0cHV0X2NvbXByZXNzaW9uIiwgIk9mZiIpOw0KCQkJCQlAc2V0X3RpbWVfbGltaXQoMCk7 DQoJCQkJCUBpZ25vcmVfdXNlcl9hYm9ydCh0cnVlKTsNCg0KCQkJCQkvLyBIYW5kLW9mZiB0 byB0aGUgcmVtb3RlIGZpbGUNCgkJCQkJaGVhZGVyKCdMb2NhdGlvbjogJyAuICR1cmwpOw0K DQoJCQkJCS8vIHJlY29yZCBkb3dubG9hZCBpZiB0aGUgZmlsZSBzaXplcyBtYXRjaA0KCQkJ CQlpZiAoaW50dmFsKCRoZHJzWydjb250ZW50LWxlbmd0aCddKSA9PSBpbnR2YWwoJHJlYWxf ZmlsZVsnc2l6ZSddKSkgew0KCQkJCQkJc2FmZV91cGRhdGUoInR4cF9maWxlIiwgImRvd25s b2Fkcz1kb3dubG9hZHMrMSIsICdpZD0nLmludHZhbCgkaWQpKTsNCgkJCQkJCWxvZ19oaXQo JzIwMCcpOw0KCQkJCQl9DQoJCQkJCS8vIHJlbW90ZSBkb3dubG9hZCBkb25lOiBnYW1lIG92 ZXINCgkJCQkJZXhpdCgwKTsNCg0KCQkJCX0gZWxzZSB7DQoJCQkJCSRmaWxlX2Vycm9yID0g NDA0Ow0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJJGZpbGVfZXJyb3IgPSA0MDQ7DQoJCQl9 DQoJCX0NCgl9DQoJLy8gcmVtb3RlIGRvd25sb2FkIG5vdCBkb25lIC0gbGVhdmUgdG8gVFhQ IHRvIGhhbmRsZSBlcnJvciBvciAibG9jYWwiIGZpbGUgZG93bmxvYWQNCglyZXR1cm47DQp9 DQoNCmZ1bmN0aW9uIHNtZF9yZW1vdGVfanMoJGNvbnRlbnQpIHsNCgkkb3V0ID0gJzxzY3Jp cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nLm47DQoJJG91dCAuPSAkY29udGVudC5uOw0K CSRvdXQgLj0gJzwvc2NyaXB0PicubjsNCglyZXR1cm4gJG91dDsNCn0NCg0KLy8gUEhQNCBl bXVsYXRpb24oaXNoKSBvZiBQSFA1J3MgZ2V0X2hlYWRlcnMoKS4gU3RvbGVuIGZyb20gcGhw Lm5ldCBhbmQgbW9kZGVkDQpmdW5jdGlvbiBzbWRfZ2V0X2hlYWRlcnMoJHVybCwgJGZvcm1h dD0wKSB7DQoJaWYgKCEkdXJsKSB7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJJHVpbmZvPXBh cnNlX3VybCgkdXJsKTsNCgkkaGVhZGVycyA9IGFycmF5KCk7DQoJaWYgKGlzX2NhbGxhYmxl KCdjaGVja2Ruc3JyJykgJiYgIWNoZWNrZG5zcnIoJHVpbmZvWydob3N0J10uJy4nLCdNWCcp ICYmICFjaGVja2Ruc3JyKCR1aW5mb1snaG9zdCddLicuJywnQScpKSB7DQoJCXJldHVybiBm YWxzZTsNCgl9DQoJJHBvcnQgPSBpc3NldCgkdWluZm9bJ3BvcnQnXSkgPyAkdWluZm9bJ3Bv cnQnXSA6IDgwOw0KCSRmcD1mc29ja29wZW4oJHVpbmZvWydob3N0J10sICRwb3J0LCAkZXJy bm8sICRlcnJzdHIsIDUpOw0KDQoJaWYoJGZwKSB7DQoJCSRoZWFkID0gIkdFVCAiLkAkdWlu Zm9bJ3BhdGgnXS4iPyIuQCR1aW5mb1sncXVlcnknXS4iIEhUVFAvMS4wXHJcbiI7DQoJCSRo ZWFkIC49ICJIb3N0OiAiLkAkdWluZm9bJ2hvc3QnXS4iOiIuJHBvcnQuIlxyXG4iOw0KCQkk aGVhZCAuPSAiQ29ubmVjdGlvbjogQ2xvc2VcclxuIjsNCgkJJGhlYWQgLj0gIkFjY2VwdDog Ki8qXHJcbiI7DQoJCWlmIChAJHVpbmZvWyd1c2VyJ10pIHsNCgkJCSRoZWFkIC49ICJBdXRo b3JpemF0aW9uOiBCYXNpYyAiLmJhc2U2NF9lbmNvZGUoJHVpbmZvWyd1c2VyJ10uJzonLiR1 aW5mb1sncGFzcyddKS4iXHJcbiI7DQoJCX0NCgkJJGhlYWQgLj0gIlxyXG4iOw0KCQlmcHV0 cygkZnAsICRoZWFkKTsNCgkJJGVvaGVhZGVyID0gZmFsc2U7DQoJCXdoaWxlKCFmZW9mKCRm cCkgb3IgKCRlb2hlYWRlcj09dHJ1ZSkpIHsNCgkJCWlmKCRoZWFkZXI9ZmdldHMoJGZwLCAx MDI0KSkgew0KCQkJCWlmICgkaGVhZGVyID09ICJcclxuIikgew0KCQkJCQkkZW9oZWFkZXIg PSB0cnVlOw0KCQkJCQlicmVhazsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkaGVhZGVyID0gdHJp bSgkaGVhZGVyKTsNCgkJCQl9DQoJCQkJaWYoJGZvcm1hdCA9PSAxKSB7DQoJCQkJCSRrZXkg PSBzdHJ0b2xvd2VyKGFycmF5X3NoaWZ0KGV4cGxvZGUoJzogJywkaGVhZGVyKSkpOw0KCQkJ CQlpZigka2V5ID09ICRoZWFkZXIpIHsNCgkJCQkJCSRoZWFkZXJzW10gPSAkaGVhZGVyOw0K CQkJCQl9IGVsc2Ugew0KCQkJCQkJJGhlYWRlcnNbJGtleV09c3Vic3RyKCRoZWFkZXIsc3Ry bGVuKCRrZXkpKzIpOw0KCQkJCQl9DQoJCQkJCXVuc2V0KCRrZXkpOw0KCQkJCX0gZWxzZSB7 DQoJCQkJCSRoZWFkZXJzW10gPSAkaGVhZGVyOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1 cm4gJGhlYWRlcnM7DQoNCgl9IGVsc2Ugew0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KfSI7czo0 OiJ0eXBlIjtzOjE6IjEiO3M6NDoiaGVscCI7czoxODU0NjoiCTxwPjxkaXYgaWQ9InNtZF9o ZWxwIj48L3A+CgoJPGgxIGlkPSJ0b3AiPnNtZF9yZW1vdGVfZmlsZTwvaDE+CgoJPGgyIGlk PSJvdmVydmlldyI+T3ZlcnZpZXc8L2gyPgoKCTxwPlVwbG9hZGluZyBsYXJnZSBmaWxlcyB0 aHJvdWdoIFRleHRQYXR0ZXJuJiM4MjE3O3MgRmlsZXMgdGFiIGlzIGhpdCBhbmQgbWlzcyBk ZXBlbmRpbmcgb24gdGhlIHNpemUgLyB0eXBlIG9mIGZpbGUsIHRoZSBzZXJ2ZXIgbGltaXRz IGFuZCBzbyBvbi4gU29tZXRpbWVzIHlvdSBqdXN0IGRvbiYjODIxNzt0IGhhdmUgdGhlIGJh bmR3aWR0aCBhdmFpbGFibGUgdG8gaG9zdCBtZWRpYSBjb250ZW50LjwvcD4KCgk8cD5UaGly ZCBwYXJ0eSBzaXRlcyBzdWNoIGFzIGZpbGVkZW4uY29tIG9mZmVyIHRoZSBhYmlsaXR5IHRv IHVwbG9hZCBmYWlybHkgc2l6ZWFibGUgZmlsZXMgYW5kIHRoZW4gZnJlZWx5IGhvdGxpbmsg dG8gdGhlbSAod2l0aGluIHF1aXRlIGdlbmVyb3VzIGJhbmR3aWR0aCBsaW1pdHMpIHNvIHRo ZXkgY2FuIGJlIHNoYXJlZC4gVGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBzZXJ2aWNlIGJ5IGlu dGVncmF0aW5nIHRoZSByZW1vdGUgZmlsZXMgaW50byA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiB3aXRoIHRoaXMgcGx1Z2luLjwvcD4KCgk8aDIgaWQ9ImNvbnRlbnRzIj5Db250 ZW50czwvaDI+CgoJPHVsPgoJCTxsaT48YSBocmVmPSIjZmVhdHVyZXMiPkZlYXR1cmVzPC9h PjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNhdXRob3IiPkF1dGhvcjwvYT48L2xpPgoJCTxsaT48 YSBocmVmPSIjaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2E+PC9s aT4KCQk8bGk+PGEgaHJlZj0iI3ByZXJlcSI+UHJlLXJlcXVpc2l0ZXM8L2E+PC9saT4KCQk8 bGk+PGEgaHJlZj0iI2ZpbGVzdGFiIj5UaGUgRmlsZXMgdGFiPC9hPjwvbGk+CgkJPGxpPjxh IGhyZWY9IiNtdWx0aXBsZXMiPk11bHRpcGxlIHBlcnNvbmFsaXRpZXM8L2E+PC9saT4KCQk8 bGk+PGEgaHJlZj0iI3VzYWdlIj5UYWcgdXNhZ2U8L2E+Cgk8dWw+CgkJPGxpPjxhIGhyZWY9 IiNmZGwiPnNtZF9maWxlX2Rvd25sb2FkX2xpbms8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0i I2ZkaSI+c21kX2ZpbGVfZG93bmxvYWRfaW1hZ2U8L2E+PC9saT4KCTwvdWw+PC9saT4KCQk8 bGk+PGEgaHJlZj0iI2hvd2l0d29ya3MiPkhvdyBpdCB3b3JrczwvYT48L2xpPgoJCTxsaT48 YSBocmVmPSIjZXhhbXBsZXMiPkV4YW1wbGVzPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNj aGFuZ2Vsb2ciPkNoYW5nZWxvZzwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjY3JlZGl0cyI+ Q3JlZGl0czwvYT48L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImZlYXR1cmVzIj5GZWF0dXJlczwv aDI+CgoJPHVsPgoJCTxsaT5NYW5hZ2UgbGlua3MgdG8gdGhpcmQgcGFydHkgZmlsZXMgZGly ZWN0bHkgZnJvbSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gRmlsZXMgdGFi LCBhcyBpZiB0aGV5IHdlcmUgbmF0aXZlbHkgaW5zaWRlIFRleHRQYXR0ZXJuLiBDYXRlZ29y eSAvIGRlc2NyaXB0aW9uIC8gc3RhdHVzIC8gZG93bmxvYWQgY291bnQgYWxsIHN1cHBvcnRl ZDwvbGk+CgkJPGxpPlVzZSBzdGFuZGFyZCA8Y29kZT4mbHQ7dHhwOmZpbGVfZG93bmxvYWRf bGlzdCAvJmd0OzwvY29kZT4gdGFncyB0byBidWlsZCBsaXN0cyBvZiBsb2NhbCBhbmQgcmVt b3RlIGZpbGVzPC9saT4KCQk8bGk+VHdvIG5ldyB0YWdzOiA8Y29kZT4mbHQ7dHhwOnNtZF9m aWxlX2Rvd25sb2FkX2xpbmsmZ3Q7PC9jb2RlPiBmb3IgY2hvb3Npbmcgc3BlY2lmaWMgcmVt b3RlIGZpbGVzLCBhbmQgPGNvZGU+Jmx0O3R4cDpzbWRfZmlsZV9kb3dubG9hZF9pbWFnZSZn dDs8L2NvZGU+IGZvciBzaG93aW5nIGltYWdlcyBiYXNlZCBvbiB0aGUgZmlsZW5hbWUgb2Yg dGhlIGRvd25sb2FkPC9saT4KCQk8bGk+VXBsb2FkIGlkZW50aWNhbCBmaWxlcyB0byBtb3Jl IHRoYW4gb25lIHBsYWNlIG9uIHRoZSB3ZWIgYW5kIHRlbGwgPHNwYW4gY2xhc3M9ImNhcHMi PlRYUDwvc3Bhbj4gdGhlIHZhcmlvdXMgYWx0ZXJuYXRpdmVzLiA8Y29kZT5maWxlX2Rvd25s b2FkX2xpbms8L2NvZGU+IGFuZCA8Y29kZT5zbWRfZmlsZV9kb3dubG9hZF9saW5rPC9jb2Rl PiB3aWxsIGNob29zZSBhIHJhbmRvbSBsb2NhdGlvbiB0byBoZWxwIGxvYWQtYmFsYW5jZSB5 b3VyIGF2YWlsYWJsZSBiYW5kd2lkdGg8L2xpPgoJCTxsaT5ObyBtb2RpZmljYXRpb25zIHRv IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBkYXRhYmFzZToganVzdCBhIGJl YXV0aWZ1bCBjaGVhdCBzdWdnZXN0ZWQgYnkgcnV1ZCAodGhhbmtzISk8L2xpPgoJPC91bD4K Cgk8aDIgaWQ9ImF1dGhvciI+QXV0aG9yPC9oMj4KCgk8cD48YSBocmVmPSJodHRwOi8vc3Rl ZmRhd3Nvbi5jb20vY29tbWVudEZvcm0iPlN0ZWYgRGF3c29uPC9hPi4gRm9yIG90aGVyIHNv ZnR3YXJlIGJ5IG1lLCBvciB0byBtYWtlIGEgZG9uYXRpb24sIHNlZSB0aGUgPGEgaHJlZj0i aHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPi48L3A+CgoJPGgy IGlkPSJpbnN0YWxsIj5JbnN0YWxsYXRpb24gYW5kIFVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8 cCBjbGFzcz0icmVxdWlyZWQiPlJlcXVpcmVzIFRleHRQYXR0ZXJuIHY0LjAuNiBvciBncmVh dGVyIGluc3RhbGxlZC48L3A+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhl ciA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvOTAxL3NtZF9yZW1v dGVfZmlsZSI+dGV4dHBhdHRlcm4ub3JnPC9hPiwgb3IgdGhlIDxhIGhyZWY9Imh0dHA6Ly9z dGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUgcGFnZTwvYT4sIHBhc3RlIHRoZSBjb2RlIGlu dG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IEFkbWluIC0mZ3Q7IFBsdWdp bnMgcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxlIHRoZSBwbHVnaW4uIFZpc2l0IHRoZSA8YSBo cmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MjQ2 NzMiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0byByZXBvcnQgb24gdGhl IHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9wPgoKCTxwPlRvIHJlbW92 ZSB0aGUgcGx1Z2luLCBzaW1wbHkgZGVsZXRlIGl0IGZyb20gdGhlIEFkbWluLSZndDtQbHVn aW5zIHRhYi48L3A+CgoJPGgyIGlkPSJwcmVyZXEiPlByZS1yZXF1aXNpdGVzPC9oMj4KCgk8 cD5DaG9vc2UgYW55IHRoaXJkIHBhcnR5IGZpbGUgaG9zdGVyIHRoYXQgb2ZmZXJzIGZyZWUg ZG93bmxvYWRzIG9mIHlvdXIgc3R1ZmYuIENyZWF0ZSBhbiBhY2NvdW50LCB1cGxvYWQgZmls ZXMgdG8gaXQsIGFuZCBtYWtlIHN1cmUgeW91IGtub3cgaG93IHRvIGdldCBEaXJlY3QgTGlu ayA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMgZnJvbSB0aGVpciBpbnRlcmZhY2Ug KGl0JiM4MjE3O3MgdXN1YWxseSBmYWlybHkgb2J2aW91cykuIFlvdSYjODIxNztsbCBuZWVk IHRoZXNlIHRvIHBhc3RlIGludG8gVGV4dFBhdHRlcm4uPC9wPgoKCTxwPlRoZW4gc2ltcGx5 IGhvcCBvdmVyIHRvIHRoZSA8YSBocmVmPSIjZmlsZXN0YWIiPkZpbGVzIHRhYjwvYT4gdG8g Z2V0IHN0YXJ0ZWQuPC9wPgoKCTxoMiBpZD0iZmlsZXN0YWIiPlRoZSBGaWxlcyB0YWI8L2gy PgoKCTxwPlRoZSBwbHVnaW4gYWRkcyBvbmUgaW5wdXQgZm9ybSBmaWVsZCB0byB0aGUgRmls ZXMgdGFiLiBGcm9tIHlvdXIgdGhpcmQgcGFydHkgc2l0ZShzKSBvZiBjaG9pY2UsIHNpbXBs eSBjb3B5IGEgd2ViLWZyaWVuZGx5IChpLmUuIHVybC1lbmNvZGVkKSBob3RsaW5rIGFuZCBw YXN0ZSBpdCBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBib3guIFlv dSBjYW4gdXN1YWxseSB0ZWxsIGlmIHRoZSBsaW5rIGlzIHVybC1lbmNvZGVkIGJlY2F1c2Ug aXQmIzgyMTc7bGwgcHJvYmFibHkgaGF2ZSA8Y29kZT4lMjA8L2NvZGU+IGluIHBsYWNlIG9m IGFueSBzcGFjZXMgaW4gdGhlIGZpbGVuYW1lLiBUaGUgZGlyZWN0b3J5IHBhcnQgaXMsIGhv d2V2ZXIsIDxlbT5ub3Q8L2VtPiB1c3VhbGx5IGVuY29kZWQgKGkuZS4gYW55IGZvcndhcmQg c2xhc2hlcyBhbmQgY29sb25zIGV0YyByZW1haW4pLjwvcD4KCgk8cD5BIHR5cGljYWwgZmls ZSBtaWdodCBsb29rIGxpa2UgdGhpczo8L3A+Cgo8cHJlPmh0dHA6Ly93d3cuZmlsZWRlbi5j b20vZmlsZXMvMjAwNy8xMS8xLwogICAgIDEyMzQ1NjcvSGVyZSUyMGlzJTIwc29tZSUyMG11 c2ljLm1wMwo8L3ByZT4KCgk8cD5UaGUgbGluayBtdXN0IGJlIGFuIGFic29sdXRlIDxzcGFu IGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+LCBiZWdpbm5pbmcgPGNvZGU+aHR0cDovLzwvY29k ZT4uIE9uY2UgeW91IGhhdmUgcGFzdGVkIGl0IGluLCBoaXQgVXBsb2FkIG5leHQgdG8gdGhl IGJveCBhbmQgYSBuZXcgc3BlY2lhbCAmIzgyMTY7bGluayYjODIxNzsgZmlsZSB3aWxsIGJl IGNyZWF0ZWQgaW4gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4uIEl0IHRha2VzIG9u IHRoZSBmaWxlbmFtZSBleGFjdGx5IGFzIGl0IGFwcGVhcnMgaW4geW91ciA8c3BhbiBjbGFz cz0iY2FwcyI+VVJMPC9zcGFuPiAod2l0aCA8Y29kZT4ubGluazwvY29kZT4gYWRkZWQpLiBT byBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgYSBuZXcgZmlsZSBjYWxsZWQgPGNvZGU+SGVyZSBp cyBzb21lIG11c2ljLm1wMy5saW5rPC9jb2RlPiB3aWxsIGJlIG1hZGUgaW4geW91ciBzdGFu ZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBmaWxlcyBkaXJlY3RvcnkuPC9w PgoKCTxwPlRoZSBuZXcgJiM4MjIwO2ZpbGUmIzgyMjE7IHdpbGwgYXBwZWFyIGluIHRoZSBs aXN0IGp1c3QgbGlrZSBhbnkgcmVhbCBmaWxlIGluIFRleHRQYXR0ZXJuLiBZb3UgY2FuIGVk aXQgaXQgdG8gYWRkIGEgZGVzY3JpcHRpb24sIGNhdGVnb3J5LCBzZXQgaXRzIHN0YXR1czog ZXZlcnl0aGluZyB5b3UgY2FuIGRvIHdpdGggYSBjb252ZW50aW9uYWwgZmlsZS4gSnVzdCBk b24mIzgyMTc7dCByZW5hbWUgaXQhPC9wPgoKCTxoMiBpZD0ibXVsdGlwbGVzIj5NdWx0aXBs ZSBwZXJzb25hbGl0aWVzPC9oMj4KCgk8cD5UaGlyZCBwYXJ0eSBzaXRlcyBkb24mIzgyMTc7 dCBnaXZlIHlvdSBzb21ldGhpbmcgZm9yIG5vdGhpbmc7IHRoZXkgbm9ybWFsbHkgaGF2ZSBh IGJhbmR3aWR0aCBjYXAsIGp1c3QgbGlrZSB5b3VyIHdlYiBob3N0ZXIgcHJvYmFibHkgZG9l cy4gSWYgeW91IHdhbnQgdG8gZGlzdHJpYnV0ZSB5b3VyIG11c2ljIG9yIGxhdGVzdCB2aWRl bywgYSBmZXcgdGhvdXNhbmQgaGl0cyBwZXIgbW9udGggYW5kIHlvdXIgYmFuZHdpZHRoIGlz IGdvbmUuPC9wPgoKCTxwPlNvIHNwcmVhZCB0aGUgbG9hZCBhcm91bmQgdGhlIEludGVybmV0 LiBHZXQgYWNjb3VudHMgYXQgdmFyaW91cyB0aGlyZCBwYXJ0eSBzaXRlcyBhbmQgdXBsb2Fk IGV4YWN0bHkgdGhlIHNhbWUgZmlsZSAobWFrZSBzdXJlIHRoZSBmaWxlbmFtZXMgYXJlIGlk ZW50aWNhbCAmIzgyMTE7IGluY2x1ZGluZyBjYVNlIFNlbnNJVGl2SXRZKS4gVGhlbiBqdXN0 IHBhc3RlIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMgaW50byB0aGUgdXBs b2FkIGJveDogc21kX3JlbW90ZV9maWxlIHdpbGwgb25seSBtYWludGFpbiBvbmUgcGh5c2lj YWwgZmlsZSB3aXRoaW4gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gYnV0IHdpbGwg aG9sZCBkZXRhaWxzIG9mIHlvdXIgb3RoZXIgY29waWVzIGZvciB5b3UuIFVzaW5nIGVpdGhl ciB0aGUgc3RhbmRhcmQgPGNvZGU+ZmlsZV9kb3dubG9hZF9saW5rPC9jb2RlPiBvciB0aGUg bmV3IDxhIGhyZWY9IiNmZGwiPnNtZF9maWxlX2Rvd25sb2FkX2xpbms8L2E+IHRhZyB3aWxs IHJhbmRvbWx5IHBpY2sgb25lIG9mIHlvdXIgZG93bmxvYWQgbG9jYXRpb25zIGFzc29jaWF0 ZWQgd2l0aCBlYWNoIGZpbGUgZXZlcnkgdGltZSB0aGUgcGFnZSBsb2Fkcywgc3ByZWFkaW5n IHlvdXIgYmFuZHdpZHRoIHVzYWdlLjwvcD4KCgk8cD5XaGVuIHlvdSBzZWxlY3QgYSAubGlu ayBmaWxlIGZvciBlZGl0aW5nIGZyb20gdGhlIEZpbGVzIHRhYiwgeW91IHdpbGwgc2VlIGEg ZGlhbG9nIGJveCBhdCB0aGUgYm90dG9tIGZvciBhZGRpbmcgbW9yZSA8c3BhbiBjbGFzcz0i Y2FwcyI+VVJMPC9zcGFuPnMgdG8geW91ciBmaWxlLiBQYXN0ZSB0aGUgdXJsLWVuY29kZWQg ZGlyZWN0IGxpbmsgZmlsZSBuYW1lIGludG8gdGhlIGJveCBhbmQgaGl0IFVwbG9hZCB0byBh cHBlbmQgaXQgdG8gdGhlIGV4aXN0aW5nIG9uZS4gSWYgeW91IGNoZWNrIHRoZSBPdmVyd3Jp dGUgYm94IHRoZW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHlvdSBzdXBw bHkgd2lsbCBvdmVyd3JpdGUgPGVtPmFsbDwvZW0+IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8 L3NwYW4+cyBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGUgZmlsZS4gSXQgZG9lcyB0aGlzIHdp dGhvdXQgd2FybmluZywgc28gY29uc2lkZXIgdGhpcyBhIHdhcm5pbmchPC9wPgoKCTxoMiBp ZD0idXNhZ2UiPlRhZyB1c2FnZTwvaDI+CgoJPGgzIGNsYXNzPSJ0YWcgIiBpZD0iZmRsIj5z bWRfZmlsZV9kb3dubG9hZF9saW5rPC9oMz4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPkFu IGV4YWN0IGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBzdGFuZGFyZCA8Y29kZT4mbHQ7 dHhwOmZpbGVfZG93bmxvYWRfbGluayZndDs8L2NvZGU+IHRhZywgd2l0aCB0d28gZXh0cmEg b3B0aW9ucy4gVXNlIHRoZSB0YWcgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgeW91IHdv dWxkIG5vcm1hbGx5LiBUaGUgb25seSBzdWJ0bGUgZGlmZmVyZW5jZSBpbiB0aGlzIHRhZyYj ODIxNztzIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRoYXQgaXQgd2lsbCByZW1vdmUgYW55IDxj b2RlPi5saW5rPC9jb2RlPiBvbiB0aGUgZW5kIG9mIHRoZSBmaWxlIG5hbWVzIGluIHRoZSBw dWJsaWMgaW50ZXJmYWNlICh0aGUgPGNvZGU+Lmxpbms8L2NvZGU+IHN1ZmZpeGVzIGFsd2F5 cyByZW1haW4gdmlzaWJsZSBpbiB0aGUgRmlsZXMgdGFiIHRvIHJlbWluZCB5b3UpLiBUaGUg PGNvZGU+Lmxpbms8L2NvZGU+IGNhbiBiZSByZWluc3RhdGVkIHdpdGggdGhlIDxhIGhyZWY9 IiNmZGxzaG93bGluayI+c2hvd19saW5rPC9hPiBhdHRyaWJ1dGUuPC9wPgoKCTxoNCBjbGFz cz0iYXR0cyAiIGlkPSJhdHRyaWJ1dGVzIj5BdHRyaWJ1dGVzPC9oND4KCgk8dWwgY2xhc3M9 ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmlkPC9zcGFuPiA6IHRoZSBJ RCBvZiB0aGUgZmlsZSB5b3Ugd2FudCB0byBsaW5rIHRvLiBJZiBsZWZ0IGJsYW5rLCBpdCBj YW4gYmUgc3VwcGxpZWQgZnJvbSB3aGF0ZXZlciBpcyBiZXR3ZWVuIHRoZSBvcGVuaW5nIGFu ZCBjbG9zaW5nIHRhZzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ZmlsZW5h bWU8L3NwYW4+IDogdGhlIGZpbGVuYW1lIG9mIHRoZSBmaWxlIHlvdSB3YW50IHRvIGxpbmsg dG8uIElmIGxlZnQgYmxhbmssIGl0IGNhbiBiZSBzdXBwbGllZCBmcm9tIHdoYXRldmVyIGlz IGJldHdlZW4gdGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgdGFnLiBJZiBib3RoIGZpbGVuYW1l IGFuZCBJRCBhcmUgc3BlY2lmaWVkLCBJRCB0YWtlcyBwcmVjZWRlbmNlPC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5jaG9vc2U8L3NwYW4+IDogZ292ZXJucyBob3cgdG8g Y2hvb3NlIHdoaWNoIHJlbW90ZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB0byBz ZXJ2ZS4gSWYgdXNpbmcgdGhlIHN0YW5kYXJkIDxjb2RlPmZpbGVfZG93bmxvYWRfbGluazwv Y29kZT4gdGFnIChvciBieSBkZWZhdWx0IGluIHRoaXMgdGFnKSwgaXQgaXMgc2V0IHRvIDxj b2RlPjA8L2NvZGU+IHdoaWNoIG1lYW5zICYjODIxNjtyYW5kb21seSBwaWNrIGEgPHNwYW4g Y2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gZnJvbSB0aG9zZSBJJiM4MjE3O3ZlIHVwbG9hZGVk IGZvciB0aGlzIGZpbGUmIzgyMTc7ICh3aGVyZSB3b3VsZCBhbiBzbWRfIHBsdWdpbiBiZSB3 aXRob3V0IGEgcmFuZG9tIG9wdGlvbiwgZWg/ISkuIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEg aGlnaGVyIG51bWJlciB0byBwaWNrIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFu PiBmcm9tIHRoYXQgcGFydGljdWxhciBzbG90LiBTbyA8Y29kZT5jaG9vc2U9JnF1b3Q7MSZx dW90OzwvY29kZT4gd2lsbCBhbHdheXMgc2VsZWN0IHRoZSAxc3QgZmlsZSB5b3UgdXBsb2Fk ZWQgYW5kIGRlbGl2ZXIgdGhhdDsgPGNvZGU+Y2hvb3NlPSZxdW90OzImcXVvdDs8L2NvZGU+ IHRoZSBzZWNvbmQ7IGFuZCBzbyBvbi4gSWYgeW91IHNwZWNpZnkgYSBudW1iZXIgYmlnZ2Vy IHRoYW4gdGhlIG51bWJlciBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMgc3Rv cmVkIGFnYWluc3QgYSBmaWxlLCBpdCBwaWNrcyB0aGUgZmlyc3Qgb25lIHlvdSB1cGxvYWRl ZC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnNob3dfbGluazwvc3Bhbj4g OiBzZXQgdG8gMCBieSBkZWZhdWx0LCB3aGljaCBoaWRlcyB0aGUgPGNvZGU+Lmxpbms8L2Nv ZGU+IG9uIHRoZSBlbmQgb2YgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zLiBTZXQg aXQgdG8gMSB0byBtYWtlIHRoZSB0YWcgYmVoYXZlIGxpa2UgdGhlIGJ1aWx0LWluIDxjb2Rl PmZpbGVfZG93bmxvYWRfbGluazwvY29kZT48L2xpPgoJPC91bD4KCgk8aDMgY2xhc3M9InRh ZyAiIGlkPSJmZGkiPnNtZF9maWxlX2Rvd25sb2FkX2ltYWdlPC9oMz4KCgk8cCBjbGFzcz0i dGFnLXN1bW1hcnkiPldoZW4gbGlua2luZyB0byBleHRlcm5hbCBjb250ZW50IChlc3BlY2lh bGx5IG1lZGlhIGZpbGVzKSBpdCBpcyBvZnRlbiB1c2VmdWwgdG8gbWFrZSBhIG1pbmkgaW1h Z2UgdG8gZ28gd2l0aCBpdCwgc3VjaCBhcyBhIHN0aWxsIGZyb20gYSBtb3ZpZSBvciBzb21l IGFydHdvcmsgZm9yIGFuIG1wMyB0cmFjay4gWW91IGNhbiBvZiBjb3Vyc2UgZW1iZWQgYSA8 Y29kZT4mbHQ7dHhwOmltYWdlJmd0OzwvY29kZT4gdGFnIGluIHlvdXIgZG93bmxvYWQgZm9y bSwgYnV0IHRoYXQgd2lsbCBnaXZlIGEgc3RhdGljIGltYWdlIGZvciBlYWNoIGZpbGUuIFRo aXMgdGFnIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgaW1hZ2VzIHRoYXQgdmFyeSB3aXRoIHRo ZSBmaWxlbmFtZSBvZiB0aGUgcmVtb3RlIChvciBsb2NhbCBvZiBjb3Vyc2UpIGZpbGUuPC9w PgoKCTxwPlRvIHVzZSBpdCwganVzdCB1cGxvYWQgYW4gaW1hZ2UgKGJ5IGRlZmF1bHQgYSBq cGcpIHZpYSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIEltYWdlcyB0 YWIgYW5kIGdpdmUgaXQgdGhlIGV4YWN0IHNhbWUgZmlsZW5hbWUgYXMgdGhlIHJlbW90ZSBm aWxlIGl0IHJlcHJlc2VudHMsIHBsdXMgaXRzIG5vcm1hbCBpbWFnZSBmaWxlIGV4dGVuc2lv bi4gaS5lLiBpZiB5b3VyIHJlbW90ZSBmaWxlIHdhcyA8Y29kZT5NYW4gYW5kIGJveS5tcGc8 L2NvZGU+IHlvdSB3b3VsZCB1cGxvYWQgYW4gaW1hZ2UgYW5kIG5hbWUgaXQgPGNvZGU+TWFu IGFuZCBib3kubXBnLmpwZzwvY29kZT4uIERvIHRoaXMgZm9yIGVhY2ggZmlsZSBhbmQgdGhl biB1c2UgdGhpcyB0YWcgdG8gZGlzcGxheSB0aGVtLjwvcD4KCgk8cD5CeSBkZWZhdWx0LCBp ZiBhbnkgaW1hZ2UgZG9lc24mIzgyMTc7dCBleGlzdCwgdGhlIHRhZyBvdXRwdXRzIHRoZSBp bWFnZSBmaWxlbmFtZSBpbnN0ZWFkIChpZiB1c2luZyB0aGUgPGNvZGU+ZmlsZW5hbWU8L2Nv ZGU+KSBvciB0aGUgaWQgKGlmIHVzaW5nIHRoZSA8Y29kZT5pZDwvY29kZT4pLiBUaGlzIGJl aGF2aW91ciBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSA8Y29kZT5pZm1pc3Npbmc8L2Nv ZGU+IG9wdGlvbi48L3A+CgoJPGg0IGNsYXNzPSJhdHRzICIgaWQ9ImF0dHJpYnV0ZXMiPkF0 dHJpYnV0ZXM8L2g0PgoKCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dHQtbmFtZSI+aWQ8L3NwYW4+IDogdGhlIElEIG9mIGFuIGltYWdlIHRvIGRpc3BsYXk8L2xp PgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFt ZSI+ZmlsZW5hbWU8L3NwYW4+IDogdGhlIGZpbGVuYW1lIG9mIGFuIGltYWdlIHRvIGRpc3Bs YXkuIElmIGJvdGggZmlsZW5hbWUgYW5kIElEIGFyZSBzcGVjaWZpZWQsIElEIHRha2VzIHBy ZWNlZGVuY2UuIE5vdGUgdGhhdCBpbiB0aGlzIGFuZCA8Y29kZT5pZDwvY29kZT4gbW9kZXMs IHRoZSB0YWcgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgPGNvZGU+Jmx0O3R4cDppbWFn ZSZndDs8L2NvZGU+LiBUaGUgZXhjZXB0aW9uIGlzIHRoYXQgeW91IGRvIG5vdCBoYXZlIHRv IHNwZWNpZnkgdGhlIGltYWdlIGZpbGUgPGNvZGU+ZXh0ZW5zaW9uPC9jb2RlPiwgYXMgaXQg ZG9lcyB0aGF0IGZvciB5b3UgYnkgZGVmYXVsdCBpZiB5b3UgdXNlIDxzcGFuIGNsYXNzPSJj YXBzIj5KUEc8L3NwYW4+cyBhbmQgeW91IGNhbiBzcGVjaWZ5IHRodW1ibmFpbHMgaW5zdGVh ZCB1c2luZyA8Y29kZT50aHVtYjwvY29kZT48L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0 cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ZXh0ZW5zaW9uPC9zcGFuPiA6IHNh dmVzIHlvdSBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgZmlsZSBleHRlbnNpb24gaW4gdGhlIDxj b2RlPmZpbGVuYW1lPC9jb2RlPiBwYXJhbWV0ZXIuIEVudGVyIGl0IGhlcmUgPGVtPndpdGhv dXQ8L2VtPiB0aGUgZG90LiBCeSBkZWZhdWx0IGl0IGlzIHNldCB0byA8Y29kZT5leHRlbnNp b249JnF1b3Q7anBnJnF1b3Q7PC9jb2RlPjwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRz Ij4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj50aHVtYjwvc3Bhbj4gOiBzZXQgdG8g MCBieSBkZWZhdWx0LCB3aGljaCBtZWFucyB1c2UgdGhlIGZ1bGwgc2l6ZSBpbWFnZS4gSWYg eW91IGhhdmUgY3JlYXRlZCB0aHVtYm5haWxzIHlvdSBtYXkgdXNlIDxjb2RlPnRodW1iPSZx dW90OzEmcXVvdDs8L2NvZGU+IHRvIHVzZSB0aG9zZSBpbnN0ZWFkPC9saT4KCTwvdWw+Cgk8 dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmlmbWlzc2lu Zzwvc3Bhbj4gOiB3aGVuIGFuIGltYWdlIGZpbGUgaXMgbWlzc2luZywgdGhpcyBvcHRpb24m IzgyMTc7cyBkZWZhdWx0IHNldHRpbmcgb2YgPGNvZGU+aWZtaXNzaW5nPSZxdW90Oz9yZWYm cXVvdDs8L2NvZGU+IHdpbGwgZGlzcGxheSBlaXRoZXIgdGhlIGltYWdlIGZpbGVuYW1lIG9y IGl0cyBJRCBpZiBpdCB3YXMgdXNlZC4gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzcGVjaWZ5 IGEgZGVkaWNhdGVkICYjODIxNjtubyBwaWMmIzgyMTc7IGltYWdlIGJ5IHVwbG9hZGluZyBv bmUgYW5kIHVzaW5nIHRoZSBzcGVjaWFsIGNvZGUgPGNvZGU+aWZtaXNzaW5nPSZxdW90Oz9p bWFnZTpJRF9vcl9uYW1lJnF1b3Q7PC9jb2RlPiAoZS5nLiA8Y29kZT5pZm1pc3Npbmc9JnF1 b3Q7P2ltYWdlOjMyJnF1b3Q7PC9jb2RlPiBvciA8Y29kZT5pZm1pc3Npbmc9JnF1b3Q7P2lt YWdlOk5vUGljLmpwZyZxdW90OzwvY29kZT4pLiBJZiBub3QgdXNpbmcgdGhlIHNwZWNpYWwg Y29kZXMsIHB1dCBhbnkgdGV4dCB5b3UgbGlrZSBoZXJlLCBmb3IgZXhhbXBsZSA8Y29kZT5p Zm1pc3Npbmc9JnF1b3Q7Tm8gaW1hZ2UgeWV0JnF1b3Q7PC9jb2RlPi4gVXNlIDxjb2RlPmlm bWlzc2luZz0mcXVvdDsmcXVvdDs8L2NvZGU+IHRvIG91dHB1dCBub3RoaW5nIGluIHRoZSBl dmVudCBvZiBhIG1pc3NpbmcgaW1hZ2U8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+d3JhcHRhZzwvc3Bhbj4gOiB0aGUgdGFn IHRvIHdyYXAgYXJvdW5kIHRoZSBvdXRzaWRlIG9mIHRoZSBpbWFnZS4gU3BlY2lmeSBpdCB3 aXRoIG5vIGFuZ2xlIG1hcmtlcnMsIGUuZy4gPGNvZGU+d3JhcHRhZz0mcXVvdDtwJnF1b3Q7 PC9jb2RlPi4gRGVmYXVsdHMgdG8gZW1wdHkgKGkuZS4gbm8gd3JhcHRhZyk8L2xpPgoJPC91 bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+Y2xh c3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgdG8gYXBwbHkgdG8gdGhlIGltYWdlLiBJZiB1 c2luZyA8Y29kZT53cmFwdGFnPC9jb2RlPiB0aGUgY2xhc3MgaXMgYXBwbGllZCB0byB0aGUg c3Vycm91bmRpbmcgdGFnLiBJZiBpdCBpcyBvbWl0dGVkIHRoZSBjbGFzcyBpcyBhcHBsaWVk IGRpcmVjdGx5IHRvIHRoZSBpbWFnZS4gRGVmYXVsdDogZW1wdHkgKGkuZS4gbm8gY2xhc3Mp PC9saT4KCTwvdWw+CgoJPGgyIGlkPSJob3dpdHdvcmtzIj5Ib3cgaXQgd29ya3M8L2gyPgoK CTxwPkZvciB0aGUgY3VyaW91cywgdGhlIHBsdWdpbiBqdXN0IGNyZWF0ZXMgYSBkdW1teSB0 ZXh0IGZpbGUgd2l0aCB0aGUgbmFtZSBvZiB5b3VyIGZpbGUgcGx1cyB0aGUgc3BlY2lhbCBz dWZmaXggPGNvZGU+Lmxpbms8L2NvZGU+IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gYSBzdGFu ZGFyZCBmaWxlLiBFdmVyeSB0aW1lIHlvdSBhZGQgYSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJM PC9zcGFuPiBvZiB0aGUgc2FtZSBuYW1lIGl0IGlzIGFkZGVkIGFzIGEgbmV3IGxpbmUgd2l0 aGluIHRoaXMgZmlsZS48L3A+CgoJPHA+VGhpcyBtZWFucyB5b3UgY2FuIHNodWZmbGUgdGhl IG9yZGVyIG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cywgZGVsZXRlIHJlbW90 ZSBmaWxlcyBvciBlZGl0IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMgZGly ZWN0bHkgaWYgeW91IHNvIHdpc2ggYnkgc2ltcGx5IGRvd25sb2FkaW5nIHRoZSByZWxldmFu dCAubGluayBmaWxlIGZyb20geW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+RlRQPC9zcGFuPiBz ZXJ2ZXIsIGVkaXRpbmcgaXQgYW5kIHJlLXVwbG9hZGluZyBpdC4gQXMgbG9uZyBhcyB5b3Ug bWFrZSBzdXJlIHlvdSBoYXZlIG9uZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBw ZXIgbGluZSBldmVyeXRoaW5nIHdpbGwgd29yay48L3A+CgoJPHA+SW5jaWRlbnRhbGx5LCB0 aGUgcmVhbCBmaWxlIHNpemUgaXMgcmUtcmVhZCAoZnJvbSB0aGUgMXN0IGZpbGUgbGlzdGVk IGluIHRoZSAubGluayBmaWxlKSBldmVyeSB0aW1lIHRoZSBsb2NhbCBmaWxlIGlzIGVkaXRl ZCBiZWNhdXNlIG90aGVyd2lzZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBvdmVy d3JpdGVzIGl0IHdpdGggdGhlIHNpemUgb2YgdGhlIGR1bW15IHRleHQgZmlsZS4gVGhpcyBo YXMgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgd2hlbiBkb3dubG9hZGluZyBiZWNhdXNlIDxl bT50aGUgcGx1Z2luIGNoZWNrcyB0aGF0IHRoZSByZW1vdGUgZmlsZSBzaXplIG1hdGNoZXMg dGhlIG9uZSBpbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gaW50ZXJmYWNl IGJlZm9yZSBzZXJ2aW5nIHRoZSBmaWxlPC9lbT4uIElmIG9uZSBvZiB5b3VyIHVwbG9hZGVk IGZpbGVzIGlzIGEgZGlmZmVyZW50IHNpemUgaXQgd2lsbCByZWZ1c2UgdG8gZG93bmxvYWQu PC9wPgoKCTxwPlRoZSByZWFzb24gZm9yIHRoaXMgaXMgdG8gdHJ5IHRvIG1haW50YWluIGRv d25sb2FkIGNvdW50IGludGVncml0eS4gSW5zdGVhZCBvZiBkaXNoaW5nIG91dCBhIHN0YW5k YXJkIDQwNCBtZXNzYWdlLCBzb21lIHNlcnZlcnMgd2lsbCByZWRpcmVjdCB0byBhbiBpbWFn ZSBvciA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gZmlsZSB0byB0ZWxsIHlvdSB0 aGF0IGEgZmlsZSBpcyBtaXNzaW5nLiBUaGlzIHJldHVybnMgYSBzdGF0dXMgY29kZSBvZiAm IzgyMTc7MjAwIE9LJiM4MjE3OyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBkb3dubG9hZCBvZiB0 aGUgcmVwbGFjZW1lbnQgY29udGVudCB3ZW50IG9rLCBidXQgaW4gdGhpcyBjYXNlIHdlIGRv IDxlbT5ub3Q8L2VtPiB3YW50IHRvIGluY3JlbWVudCB0aGUgY291bnRlcjsgdGhlIGZpbGUm IzgyMTc7cyBzdGlsbCBtaXNzaW5nIGFmdGVyIGFsbCEgVW5kZXIgcmFyZSBjaXJjdW1zdGFu Y2VzIHlvdSBtaWdodCBmaW5kIHRoYXQgdGhlIHByb3ZpZGVyIHJldHVybnMgY29udGVudCBl eGFjdGx5IHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgZmlsZSBpdHNlbGYgYW5kIHRoZSBjb3Vu dCB3b3VsZCB0aGVuIGJlIHdyb25nbHkgaW5jcmVtZW50ZWQuIFByYWN0aWNhbGx5LCB5b3Vy IGZpbGUgaXMgZ29pbmcgdG8gYmUgbGFyZ2VyIHRoYW4gdGhlaXIgcmVwbGFjZW1lbnQgc28g aXQgd29uJiM4MjE3O3QgbWF0dGVyLjwvcD4KCgk8cD5Ob3RlIHRoYXQgdGhlICYjODIxNjtk b3dubG9hZCYjODIxNzsgbGluayBuZXh0IHRvIGVhY2ggZmlsZSBvbiB0aGUgRmlsZXMgdGFi IG9mIHRoZSBhZG1pbiBpbnRlcmZhY2UgYWx3YXlzIGNob29zZXMgYSByYW5kb20gZmlsZSBm cm9tIHRob3NlIHVwbG9hZGVkIHdpdGggdGhhdCBuYW1lLjwvcD4KCgk8cD5Lbm93biBpc3N1 ZTogSWYgZWRpdGluZyBhICYjODIyMDtub3JtYWwmIzgyMjE7IGZpbGUgKG5vdCBhIC5saW5r KSBhbmQgeW91IGhpdCB0aGUgVXBsb2FkIGJ1dHRvbiA8ZW0+d2l0aG91dCBzcGVjaWZ5aW5n IGEgZmlsZTwvZW0+LCB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdXBsb2Fk IGJveCBkb2VzIG5vdCBhcHBlYXIgb24gdGhlIEZpbGUgTGlzdCBwYWdlLiBIaXR0aW5nIHRo ZSBGaWxlcyB0YWIgYWdhaW4gb3IgcGVyZm9ybWluZyBzb21lIG90aGVyIGFjdGlvbiByZS1p bnN0YXRlcyBpdC4gKnNocnVnKjwvcD4KCgk8aDIgaWQ9ImV4YW1wbGVzIj5FeGFtcGxlczwv aDI+CgoJPGgzIGlkPSJlZzEiPkV4YW1wbGUgMTwvaDM+CgoJPHA+SW4geW91ciA8Y29kZT5m aWxlczwvY29kZT4gZm9ybTo8L3A+Cgo8cHJlPiZsdDt0eHA6ZmlsZV9kb3dubG9hZF9saW5r Jmd0OwogJmx0O3R4cDpmaWxlX2Rvd25sb2FkX25hbWUgLyZndDsgWyZsdDt0eHA6ZmlsZV9k b3dubG9hZF9zaXplCiAgICAgZm9ybWF0PSZxdW90O2F1dG8mcXVvdDsgZGVjaW1hbHM9JnF1 b3Q7MiZxdW90OyAvJmd0O10KJmx0Oy90eHA6ZmlsZV9kb3dubG9hZF9saW5rJmd0Owo8L3By ZT4KCgk8aDMgaWQ9ImVnMiI+RXhhbXBsZSAyPC9oMz4KCjxwcmU+Jmx0O3R4cDpzbWRfZmls ZV9kb3dubG9hZF9saW5rIGNob29zZT0mcXVvdDsyJnF1b3Q7CiAgICAgc2hvd19saW5rPSZx dW90OzEmcXVvdDsgLyZndDsKPC9wcmU+CgoJPHA+V2lsbCBhbHdheXMgc2VsZWN0IHRoZSAy bmQgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gZnJvbSB0aG9zZSB1cGxvYWRlZCBm b3IgZWFjaCBmaWxlLiBTaG93cyB0aGUgPGNvZGU+Lmxpbms8L2NvZGU+IG9uIHRoZSBlbmQg b2YgZWFjaCByZW1vdGUgZmlsZS48L3A+CgoJPGgzIGlkPSJlZzMiPkV4YW1wbGUgMzwvaDM+ Cgo8cHJlPiZsdDt0eHA6c21kX2ZpbGVfZG93bmxvYWRfbGluayZndDsKICZsdDt0eHA6c21k X2ZpbGVfZG93bmxvYWRfaW1hZ2UgaWZtaXNzaW5nPSZxdW90O1NvcnJ5LCBubyBpbWFnZSBm b3VuZCZxdW90OwogICAgIHdyYXB0YWc9JnF1b3Q7c3BhbiZxdW90OyBjbGFzcz0mcXVvdDtk bG9hZCZxdW90OyAvJmd0OwombHQ7L3R4cDpzbWRfZmlsZV9kb3dubG9hZF9saW5rJmd0Owo8 L3ByZT4KCgk8cD5EaXNwbGF5cyBhbiBpbWFnZSB3aXRoIHRoZSBzYW1lIG5hbWUgKHBsdXMg LmpwZykgYXMgdGhlIHJlbW90ZSBmaWxlLiBUaGUgaW1hZ2UgaXMgY2xpY2thYmxlIHRvIGFs bG93IHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQgYnV0IGlmIHRoZSBpbWFnZSBpcyBub3Qg Zm91bmQsIHRoZSB0ZXh0ICYjODIyMDtTb3JyeSwgbm8gaW1hZ2UgZm91bmQmIzgyMjE7IHdp bGwgYmUgZGlzcGxheWVkIGluc3RlYWQgKHRoZSB0ZXh0IGlzIGFsc28gY2xpY2thYmxlKS4g V3JhcHMgdGhlIGltZyBvciB0ZXh0IGluIDxjb2RlPiZsdDtzcGFuJmd0OzwvY29kZT4gdGFn cyB3aXRoIGEgY2xhc3Mgb2YgPGNvZGU+ZGxvYWQ8L2NvZGU+LjwvcD4KCgk8aDIgaWQ9ImNo YW5nZWxvZyI+Q2hhbmdlbG9nPC9oMj4KCgk8dWw+CgkJPGxpPjEyIE5vdiAwNyB8IDAuMSB8 IEluaXRpYWwgcmVsZWFzZTwvbGk+CgkJPGxpPjA0IERlYyAwNyB8IDAuMiB8IEFkZGVkIGRv d25sb2FkIGNvdW50ZXIgYW5kIHNvbWUgYmV0dGVyIHN0YXR1cyBtZXNzYWdlczwvbGk+CgkJ PGxpPjA0IERlYyAwNyB8IDAuMyB8IFJlbW92ZWQgLmxpbmsgd2hlbiB1c2luZyA8Y29kZT5z bWRfZmlsZV9kb3dubG9hZF9saW5rPC9jb2RlPiA7IGFkZGVkIDxjb2RlPnNob3dfbGluazwv Y29kZT4gYXR0cmlidXRlIDsgaW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcgY29kZSA7IGRvd25s b2FkIGNvdW50IG9ubHkgaW5jcmVhc2VzIGlmIGZpbGUgc2l6ZXMgbWF0Y2g8L2xpPgoJCTxs aT4wNSBEZWMgMDcgfCAwLjMxIHwgRmlsZSBpcyBjaGVja2VkIGZvciBlcnJvciBjb25kaXRp b24gcHJpb3IgdG8gZG93bmxvYWQgaW4gbGluZSB3aXRoIGNvcmUgY2hhbmdlc2V0IHIyNzIw ICh0aGFua3MgTWFyeSkgJiM4MjExOyBjYW4gYmUgcmVtb3ZlZCB3aGVuIDQuMC42IGlzIHJl bGVhc2VkPC9saT4KCQk8bGk+MTIgRGVjIDA3IHwgMC4zMiB8IEVuaGFuY2VkIGlmbWlzc2lu ZyB0byBpbmNsdWRlIGltYWdlIHN1cHBvcnQ7IGNoYW5nZWQgdGhlID9maWxlIGF0dHJpYnV0 ZSB0byA/cmVmIChpdCYjODIxNztzIGEgYmV0dGVyIG5hbWUpPC9saT4KCQk8bGk+MDMgRmVi IDA4IHwgMC40IHwgUmVxdWlyZXMgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gNC4w LjYgOyByZW1vdmVkIGVycm9yIGNoZWNrIGZyb20gdjAuMzEgOyBhZGRlZC9pbXByb3ZlZCBy ZXBsYWNlIHJlbW90ZSBmaWxlIDsgcmVkdWNlZCB0aW1lb3V0IGZvciBhY2Nlc3NpbmcgcmVt b3RlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHRvIHRyeSBhbmQgcHJldmVudCB1 Z2x5IHdhcm5pbmdzPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJjcmVkaXRzIj5DcmVkaXRzPC9o Mj4KCgk8cD5JIGNhbm5vdCBwb3NzaWJseSBjbGFpbSBhbGwgdGhlIGNyZWRpdCBmb3IgdGhp cyBodW5rIG9mIGNvZGUuIFRoZSBwbHVnaW4gd291bGQgbm90IGhhdmUgZXhpc3RlZCBpZiBp dCB3ZXJlbiYjODIxNzt0IGZvciB0aGUgYW1hemluZyBtaW5kIG9mIFJ1dWQgdmFuIE1lbGlj ay4gSGUgc3VnZ2VzdGVkIGEgdmVyeSBjbGV2ZXIgc29sdXRpb24gdG8gbXkgcmVtb3RlIGZp bGUgcHJlZGljYW1lbnQuIEkgYnVpbHQgb24gdGhhdCwgZXh0ZW5kZWQgaXQsIHJlZmluZWQg aXQsIHBsdWdpbmlzZWQgaXQgYW5kIGdhdmUgaXQgdG8geW91LiBNYW55IHRoYW5rcyB0byBS dXVkIGZvciB0aGUgYXdlc29tZSBzdXBwb3J0IGhlIG9mZmVycyB0aGUgY29tbXVuaXR5LCBh bmQgYWxzbyB0byBXZXQgZm9yIGhpcyBhc3Npc3RhbmNlIHdpdGggaGVscGluZyBtZSB1bmRl cnN0YW5kIHRoZSBjb3JlLjwvcD4KCgk8cD48L2Rpdj48L3A+CjwhLS0gLS0tIEJFR0lOIFBM VUdJTiBDU1MgLS0tIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojc21kX2hlbHAgLnJl cXVpcmVkIHsgY29sb3I6cmVkOyBwYWRkaW5nOi41ZW0gMDsgZm9udC13ZWlnaHQ6Ym9sZDsg fQojc21kX2hlbHAgeyBsaW5lLWhlaWdodDoxLjUgO30KI3NtZF9oZWxwIC5hdHQtbmFtZSB7 IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KI3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xk OyBmb250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBi YWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkNDO30KI3NtZF9oZWxwIGNvZGUuc2VkX2NvZGVfdGFn IHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBiYWNrZ3Jv dW5kLWNvbG9yOiAjZjBlNjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIw cHg7IHBhZGRpbmc6MTBweDsgfQojc21kX2hlbHAgYTpsaW5rLCAjc21kX2hlbHAgYTp2aXNp dGVkIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRv bTogMXB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNzbWRfaGVscCBhOmhv dmVyLCAjc21kX2hlbHAgYTphY3RpdmUgeyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9u OiBub25lOyBib3JkZXItYm90dG9tOiAycHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206 MXB4O30KI3NtZF9oZWxwIGgxIHsgY29sb3I6ICMzNjk7IGZvbnQ6IDIwcHggR2VvcmdpYSwg c2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxw IGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAw OyBjb2xvcjogIzM2OTsgZm9udDogMTdweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNzbWRf aGVscCBoMyB7IGNvbG9yOiAjMTA4MDMwOyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMt c2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTVweCAwIDA7dGV4dC10cmFu c2Zvcm06IHVwcGVyY2FzZTt9Cjwvc3R5bGU+CjwhLS0gLS0tIEVORCBQTFVHSU4gQ1NTIC0t LSAtLT4KIjtzOjM6Im1kNSI7czozMjoiMTMyYTA3Y2UyZDJlNTk0MjJlM2FlODEwNzgyMWZk MTIiO30=