# Name: smd_calendar v0.50 # Type: Public side plugin # Calendar / event / schedule system with events as TXP articles # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEyOiJzbWRfY2FsZW5kYXIiO3M6NjoiYXV0aG9yIjtzOjEx OiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdz b24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuNTAiO3M6MTE6ImRlc2NyaXB0aW9uIjtz OjYyOiJDYWxlbmRhciAvIGV2ZW50IC8gc2NoZWR1bGUgc3lzdGVtIHdpdGggZXZlbnRzIGFz IFRYUCBhcnRpY2xlcyI7czo0OiJjb2RlIjtzOjc0MDM1OiIvLyBCYXNlZCBvbiBtZHBfY2Fs ZW5kYXIgLSB0aGFua3MgTWFyc2hhbGwhDQovLyBUT0RPOiAqIGFsbG93IHRhYmxlIGhlYWRl ciB0byBiZSByZW1vdmVkIC8gcmVzdHlsZWQgY29tcGxldGVseSAodGhlIG1vbnRoL3dlZWsg ZHJvcGRvd24gJiBuYXYgaWNvbnMpDQovLyAgICAgICAgIC0tIGEgZm9ybSAobmF2Zm9ybT8p IGZvciB0aGUgaGVhZGVyIHJvdyB3aXRoIGFjY2VzcyB0byBhbGwgdmFycyBzdWNoIGFzIHdo aWNoIG1vbnRoIGlzIGJlaW5nIGRpc3BsYXllZD8NCi8vICAgICAgICAgLS0gdG9vbHMgdG8g YWxsb3cgdGhlIGhlYWRlciB0byBiZSBnZW5lcmF0ZWQgZnJvbSBjb21wb25lbnRzIGFuZCBs YWlkIG91dCBpbiBhbnkgbWFubmVyPw0KLy8gICAgICAgKiB0ZXN0IHRhYmxlIGNhcHRpb24g LyBzdW1tYXJ5DQovLyAgICAgICAqIHRlc3QgaGVhZGVyZm9ybSAvIGRheSBuYW1lcyBjdXN0 b21pc2F0aW9uDQovLyAgICAgICAqIGFsbG93IFVSTCB2YXJzIHRvIGJlIHBhc3NlZCBhcyBQ T1NUICh0byBieXBhc3MgZ2JwX3Blcm1saW5rcykNCi8vICAgICAgICogYWRkIGN1c3RvbSBy b3dzIHRvIHRoZSB0YWJsZSAoaGVhZGVyLCBmb290ZXIpIC0tIGhlYWRlciBjb3VsZCBiZSB1 c2VkIHRvIHJlcGxhY2UgdGhlIGN1cnJlbnQgbmF2L2Ryb3Bkb3ducw0KDQppZiggJGRhdGUg PSBncHMoJ2RhdGUnKSApIHsNCgkkX0dFVFsnbW9udGgnXSA9ICRkYXRlOw0KfQ0KZnVuY3Rp b24gc21kX2NhbGVuZGFyKCRhdHRzLCAkdGhpbmc9JycpIHsNCglnbG9iYWwgJHByZXRleHQs ICR0aGlzYXJ0aWNsZSwgJHZhcmlhYmxlLCAkcHJlZnMsICRzbWRfY2FsX2ZsYWcsICRzbWRf ZGF0ZSwgJHNtZF9jYWxpbmZvLCAkc21kX2NhbF91Y2xzOw0KDQoJZXh0cmFjdChsQXR0cyhh cnJheSgNCgkJJ3RpbWUnID0+ICdhbnknLA0KCQknc2l6ZScgPT4gJ2xhcmdlJywNCgkJJ2V4 cGlyZWQnID0+ICcnLA0KCQknY2F0ZWdvcnknID0+ICcnLA0KCQknc3ViY2F0cycgPT4gJycs DQoJCSdzZWN0aW9uJyA9PiAnJywNCgkJJ2F1dGhvcicgPT4gJycsDQoJCSdyZWFsbmFtZScg PT4gJycsDQoJCSdzdGF0dXMnID0+ICdsaXZlJywNCgkJJ3Nob3dhbGwnID0+ICcwJywNCgkJ J3N0YXRpYycgPT4gJycsDQoJCSdmb3JtJyA9PiAnJywNCgkJJ3NwYW5mb3JtJyA9PiAnU01E X1NBTUUnLA0KCQkncmVjdXJmb3JtJyA9PiAnU01EX1NBTUUnLA0KCQknY2VsbGZvcm0nID0+ ICcnLA0KCQknaGVhZGVyZm9ybScgPT4gJycsDQoJCSdzdGVwZmllbGQnID0+ICcnLA0KCQkn c2tpcGZpZWxkJyA9PiAnJywNCgkJJ29taXRmaWVsZCcgPT4gJycsDQoJCSdleHRyYWZpZWxk JyA9PiAnJywNCgkJJ2V4dHJhc3RyaWN0JyA9PiAnMCcsDQoJCSdkYXRlZmllbGRzJyA9PiAn JywNCgkJJ3Nob3dza2lwcGVkJyA9PiAnMCcsDQoJCSdzaG93c3Bhbm5lZCcgPT4gJzEnLA0K CQknaG9saWRheXMnID0+ICcnLA0KCQknaG9saWRheWZsYWdzJyA9PiAnc3RhbmRhcmQnLA0K CQknY2xhc3NsZXZlbHMnID0+ICdjZWxsLCBldmVudCcsDQoJCSdsaW5rcG9zdGVkJyA9PiAn cmVjdXIsIG11bHRpLCBtdWx0aXByZXYsIG11bHRpbGFzdCcsDQoJCSdjbGFzc3ByZWZpeGVz JyA9PiAnc21kX2NhbF8sIHNtZF9jYWxfZXZfJywNCgkJJ2NsYXNzJyA9PiAnJywNCgkJJ3Jv d2NsYXNzJyA9PiAnJywNCgkJJ2NlbGxjbGFzcycgPT4gJycsDQoJCSdlbXB0eWNsYXNzJyA9 PiAnZW1wdHknLA0KCQknaXNvd2Vla2NsYXNzJyA9PiAnd2VlaycsDQoJCSduYXZjbGFzcycg PT4gJ25hdnByZXYsIG5hdm5leHQnLA0KCQknbmF2YXJyb3cnID0+ICcmIzYwOywgJiM2Mjsn LA0KCQknbmF2aWQnID0+ICcnLA0KCQknZXZlbnRjbGFzc2VzJyA9PiAnY2F0ZWdvcnknLA0K CQknZXZlbnR3cmFwdGFnJyA9PiAnc3BhbicsDQoJCSdzZWxlY3QnID0+ICcnLA0KCQknc2Vs ZWN0YnRuJyA9PiAnJywNCgkJJ215Y2xhc3MnID0+ICcnLA0KCQknbXl3cmFwdGFnJyA9PiAn JywNCgkJJ2NhcHRpb24nID0+ICcnLA0KCQknc3VtbWFyeScgPT4gJycsDQoJCSdpZCcgPT4g JycsDQoJCSd3ZWVrJyA9PiAnJywNCgkJJ21vbnRoJyA9PiAnJywNCgkJJ3llYXInID0+ICcn LA0KCQkncmVtYXAnID0+ICcnLA0KCQkneWVhcndpZHRoJyA9PiAnMCcsDQoJCSdpc293ZWVr cycgPT4gJycsDQoJCSdkYXlmb3JtYXQnID0+ICdBQkJSJywNCgkJJ21vbnRoZm9ybWF0JyA9 PiAnRlVMTCcsDQoJCSdmaXJzdGRheScgPT4gMCwNCgkJJ21haW50YWluJyA9PiAnY2FsaWQn LA0KCQknbmFtZXZhbCcgPT4gJycsDQoJCSdnbXQnID0+IDAsDQoJCSdsYW5nJyA9PiAnJywN CgkJJ2RlYnVnJyA9PiAwLA0KCSksICRhdHRzKSk7DQoNCgkkc2l6ZSA9IChpbl9hcnJheSgk c2l6ZSwgYXJyYXkoJ3NtYWxsJywgJ2xhcmdlJykpKSA/ICRzaXplIDogJ2xhcmdlJzsNCgkk ZnV0dXJlID0gKCAkdGltZSAhPSAncGFzdCcgKSA/IHRydWUgOiBmYWxzZTsgLy8gRGV0ZXJt aW5lIGhlYWRpbmcgc3R5bGUNCgkkc3RhdHVzID0gKCRzdGF0dXMpID8gJHN0YXR1cyA6ICds aXZlJzsgLy8gaW4gY2FzZSBzdGF0dXMgaXMgZW1wdHkNCgkkZmlyc3RkYXkgPSAoJGlzb3dl ZWtzID09ICcnKSA/ICRmaXJzdGRheSA6IDE7DQoJJHNwYW5mb3JtID0gKCRzcGFuZm9ybSA9 PSAnU01EX1NBTUUnKSA/ICRmb3JtIDogJHNwYW5mb3JtOw0KCSRyZWN1cmZvcm0gPSAoJHJl Y3VyZm9ybSA9PSAnU01EX1NBTUUnKSA/ICRmb3JtIDogJHJlY3VyZm9ybTsNCgkkY2VsbGZv cm0gPSAoZW1wdHkoJGNlbGxmb3JtKSkgPyAnJyA6IGZldGNoX2Zvcm0oJGNlbGxmb3JtKTsN CgkkaGVhZGVyZm9ybSA9IChlbXB0eSgkaGVhZGVyZm9ybSkpID8gJycgOiBmZXRjaF9mb3Jt KCRoZWFkZXJmb3JtKTsNCgkkZnJvbnRwYWdlID0gKCRzZWN0aW9uPT0nJyAmJiAkcHJldGV4 dFsncyddPT0nZGVmYXVsdCcpID8gdHJ1ZSA6IGZhbHNlOw0KDQoJLy8gU2V0IHVwIHRoZSBj bGFzcyBwcmVmaXhlcw0KCSRjbGV2cyA9IGRvX2xpc3QoJGNsYXNzbGV2ZWxzKTsNCgkkY2xz ID0gZG9fbGlzdCgkY2xhc3NwcmVmaXhlcyk7DQoJJGNsc19wZnggPSAkZXZjX3BmeCA9ICRj bHNbMF07DQoJaWYgKGNvdW50KCRjbHMpID4gMSl7DQoJCSRldmNfcGZ4ID0gJGNsc1sxXTsN Cgl9DQoNCgkvLyBTZXQgdXAgdGhlIG5hdiBjbGFzcyhlcykNCgkkbWFpbnRhaW4gPSBkb19s aXN0KCRtYWludGFpbik7DQoJJG5hdmFycm93ID0gZG9fbGlzdCgkbmF2YXJyb3cpOw0KCSRu YXZwYXJyID0gJG5hdmFycm93WzBdOw0KCSRuYXZuYXJyID0gKGNvdW50KCRuYXZhcnJvdykg PiAxKSA/ICRuYXZhcnJvd1sxXSA6ICRuYXZhcnJvd1swXTsNCgkkbmF2Y2xhc3MgPSBkb19s aXN0KCRuYXZjbGFzcyk7DQoJJG5hdnBjbGFzcyA9ICRuYXZjbGFzc1swXTsNCgkkbmF2bmNs YXNzID0gKGNvdW50KCRuYXZjbGFzcykgPiAxKSA/ICRuYXZjbGFzc1sxXSA6ICRuYXZjbGFz c1swXTsNCg0KCS8vIEZpbHRlcnMNCgkkZm9wdHMgPSBhcnJheSgpOw0KCSRjYXRTUUwgPSAk c2VjU1FMID0gJGF1dGhTUUwgPSAkZnBTUUwgPSAnJzsNCglpZigkY2F0ZWdvcnkpIHsNCgkJ JGZvcHRzWydjJ10gPSAkY2F0ZWdvcnk7IC8vIFRPRE86IENhbiBmb3B0cyB0YWtlIGEgbGlz dD8gU2hvdWxkIGl0IGluY2x1ZGUgc3ViY2F0cz8NCgkJJGFsbGNhdHMgPSBkb19saXN0KCRj YXRlZ29yeSk7DQoJCSRzdWJjYXRzID0gKGVtcHR5KCRzdWJjYXRzKSkgPyAwIDogKChzdHJ0 b2xvd2VyKCRzdWJjYXRzKT09ImFsbCIpID8gOTk5OTkgOiBpbnR2YWwoJHN1YmNhdHMpKTsN CgkJaWYgKCRzdWJjYXRzKSB7DQoJCQkkb3V0Y2F0cyA9IGFycmF5KCk7DQoJCQlmb3JlYWNo ICgkYWxsY2F0cyBhcyAkY2F0KSB7DQoJCQkJJGNhdHMgPSBnZXRUcmVlKGRvc2xhc2goJGNh dCksICdhcnRpY2xlJyk7DQoJCQkJZm9yZWFjaCAoJGNhdHMgYXMgJGpkeCA9PiAkdmFsKSB7 DQoJCQkJCWlmICgkY2F0c1skamR4XVsnbGV2ZWwnXSA8PSAkc3ViY2F0cykgew0KCQkJCQkJ JG91dGNhdHNbXSA9ICRjYXRzWyRqZHhdWyduYW1lJ107DQoJCQkJCX0NCgkJCQl9DQoJCQl9 DQoJCQkkYWxsY2F0cyA9ICRvdXRjYXRzOw0KCQl9DQoJCSRjYXRTUUwgPSBkb1F1b3RlKGpv aW4oIicsJyIsIGRvU2xhc2goJGFsbGNhdHMpKSk7DQoJCSRjYXRTUUwgPSAiIEFORCAoIENh dGVnb3J5MSBJTiAoIi4kY2F0U1FMLiIpIE9SIENhdGVnb3J5MiBJTiAoIi4kY2F0U1FMLiIp ICkgIjsNCgl9DQoJaWYoJHNlY3Rpb24pIHsNCgkJJHNlY3MgPSBkb19saXN0KCRzZWN0aW9u KTsNCgkJJHNtZF9jYWxpbmZvWydzJ10gPSAkc2Vjc1swXTsNCgkJJHNlY1NRTCA9IGRvUXVv dGUoam9pbigiJywnIiwgZG9TbGFzaCgkc2VjcykpKTsNCgkJJHNlY1NRTCA9ICIgQU5EIFNl Y3Rpb24gSU4gKCIuJHNlY1NRTC4iKSAiOw0KCX0NCglpZigkcmVhbG5hbWUpIHsNCgkJJGF1 dGhvcnMgPSBzYWZlX2NvbHVtbignbmFtZScsICd0eHBfdXNlcnMnLCAnUmVhbE5hbWUgSU4g KCcuIGRvUXVvdGUoam9pbigiJywnIiwgZG9BcnJheShkb19saXN0KCRyZWFsbmFtZSksICd1 cmxkZWNvZGUnKSkpIC4nKScgKTsNCgkJJGF1dGhvciA9IGpvaW4oJywnLCAkYXV0aG9ycyk7 DQoJfQ0KCWlmKCRhdXRob3IpIHsNCgkJJGZvcHRzWydhdXRob3InXSA9IGh0bWxlbnRpdGll cyhncHMoJ2F1dGhvcicpKTsNCgkJJGF1dGhTUUwgPSBkb1F1b3RlKGpvaW4oIicsJyIsIGRv U2xhc2goZG9fbGlzdCgkYXV0aG9yKSkpKTsNCgkJJGF1dGhTUUwgPSAiIEFORCBBdXRob3JJ RCBJTiAoIi4kYXV0aFNRTC4iKSAiOw0KCX0NCglpZiAoJGZyb250cGFnZSAmJiAhJHNob3dh bGwpIHsNCgkJJGZwU1FMID0gZmlsdGVyRnJvbnRQYWdlKCk7DQoJfQ0KCSRzbWRfY2FsaW5m b1snZXZpZCddID0gMDsNCgkkc21kX2NhbGluZm9bJ2FydGlkJ10gPSAkdGhpc2FydGljbGVb J3RoaXNpZCddOw0KCSRzbWRfY2FsaW5mb1snYXJ0aXRsZSddID0gJHRoaXNhcnRpY2xlWyd1 cmxfdGl0bGUnXTsNCgkkbmFtZXZhbCA9IGRvX2xpc3QoJG5hbWV2YWwpOw0KCWZvcmVhY2gg KCRuYW1ldmFsIGFzICRudikgew0KCQkkbnYgPSBleHBsb2RlKCI9IiwgJG52KTsNCgkJaWYg KCRudlswXSkgew0KCQkJJGZvcHRzWyRudlswXV0gPSAoKGlzc2V0KCRudlsxXSkpID8gJG52 WzFdIDogJycpOw0KCQl9DQoJfQ0KCSRzdGF0dXMgPSBkb19saXN0KCRzdGF0dXMpOw0KCSRz dGF0aSA9IGFycmF5KCk7DQoJZm9yZWFjaCAoJHN0YXR1cyBhcyAkc3RhdCkgew0KCQlpZiAo ZW1wdHkoJHN0YXQpKSB7DQoJCQljb250aW51ZTsNCgkJfSBlbHNlIGlmIChpc19udW1lcmlj KCRzdGF0KSkgew0KCQkJJHN0YXRpW10gPSAkc3RhdDsNCgkJfSBlbHNlIHsNCgkJCSRzdGF0 aVtdID0gZ2V0U3RhdHVzTnVtKCRzdGF0KTsNCgkJfQ0KCX0NCgkkc3RhdGkgPSAiIFN0YXR1 cyBJTiAoIi5qb2luKCcsJywgJHN0YXRpKS4iKSI7DQoNCgkkZXhwaXJlZCA9ICgkZXhwaXJl ZCkgPyAkZXhwaXJlZCA6ICRwcmVmc1sncHVibGlzaF9leHBpcmVkX2FydGljbGVzJ107DQoJ JGV4cGlyZWQgPSAoKCRleHBpcmVkKSA/ICcnIDogJyBBTkQgKG5vdygpIDw9IEV4cGlyZXMg T1IgRXhwaXJlcyA9ICcuTlVMTERBVEVUSU1FLicpJyk7DQoJJGV2ZW50Y2xhc3NlcyA9IGRv X2xpc3QoJGV2ZW50Y2xhc3Nlcyk7DQoJJGhvbGlkYXlmbGFncyA9IGRvX2xpc3QoJGhvbGlk YXlmbGFncyk7DQoJJGxpbmtwb3N0ZWQgPSBkb19saXN0KCRsaW5rcG9zdGVkKTsNCgkkZGF0 ZWZpZWxkcyA9IGRvX2xpc3QoJGRhdGVmaWVsZHMpOw0KDQoJLy8gV29yayBvdXQgdGhlIGZp cnN0IGFuZCBsYXN0IHBvc3RzIHRvIGRldGVybWluZSB0aGUgeWVhciByYW5nZSAtIHByb2Jh Ymx5IGEgYmV0dGVyIHdheSBvZiBkb2luZyB0aGlzIHRoYW4gMyBxdWVyaWVzDQoJJGZpbHQg PSAkc3RhdGkgLiAoKCRjYXRlZ29yeSkgPyAkY2F0U1FMIDogJycpIC4gKCgkc2VjdGlvbikg PyAkc2VjU1FMIDogJycpIC4gKCgkYXV0aG9yKSA/ICRhdXRoU1FMIDogJycpIC4gJGZwU1FM Ow0KCSRlYXJsaWVzdCA9IHNhZmVfZmllbGQoJ3VuaXhfdGltZXN0YW1wKFBvc3RlZCkgQVMg dVBvc3RlZCcsICd0ZXh0cGF0dGVybicsICRmaWx0IC4nIE9SREVSIEJZIFBvc3RlZCBBU0Mg TElNSVQgMCwgMScsICRkZWJ1Zyk7DQoJJGxwID0gc2FmZV9maWVsZCgndW5peF90aW1lc3Rh bXAoUG9zdGVkKSBBUyB1UG9zdGVkJywgJ3RleHRwYXR0ZXJuJywgJGZpbHQgLicgT1JERVIg QlkgUG9zdGVkIERFU0MgTElNSVQgMCwgMScsICRkZWJ1Zyk7DQoJJGxtID0gc2FmZV9maWVs ZCgndW5peF90aW1lc3RhbXAoTGFzdE1vZCkgQVMgdUxhc3RNb2QnLCAndGV4dHBhdHRlcm4n LCAkZmlsdCAuJyBPUkRFUiBCWSBMYXN0TW9kIERFU0MgTElNSVQgMCwgMScsICRkZWJ1Zyk7 DQoJJGxhdGVzdCA9ICgkdGltZT09InBhc3QiKSA/IHRpbWUoKSA6ICgoJGxwID4gJGxtKSA/ ICRscCA6ICRsbSk7DQoNCgkkeWVhcndpZHRoID0gZG9fbGlzdCgkeWVhcndpZHRoKTsNCgkk eWVhcndpZHRoWzBdID0gKGVtcHR5KCR5ZWFyd2lkdGhbMF0pKSA/IDAgOiAkeWVhcndpZHRo WzBdOw0KCWlmIChjb3VudCgkeWVhcndpZHRoKSA9PSAxKSB7DQoJCSR5ZWFyd2lkdGhbMV0g PSAkeWVhcndpZHRoWzBdOw0KCX0NCgkkdXNlbm93ID0gYXJyYXkoZmFsc2UsZmFsc2UpOw0K CWZvcmVhY2ggKCR5ZWFyd2lkdGggYXMgJHlyaWR4ID0+ICR5cml0ZW0pIHsNCgkJaWYgKHN0 cnBvcygkeXJpdGVtLCJjIikgIT09IGZhbHNlKSB7DQoJCQkkeWVhcndpZHRoWyR5cmlkeF0g PSBpbnR2YWwoJHlyaXRlbSk7DQoJCQkkdXNlbm93WyR5cmlkeF0gPSB0cnVlOw0KCQl9DQoJ fQ0KDQoJLy8gUmVtYXAgdy9tL3kgdG8gb3RoZXIgdmFycyBpZiByZXF1aXJlZA0KCSRyZW1h cCA9IGRvX2xpc3QoJHJlbWFwKTsNCgkkZG1hcCA9IGFycmF5KCJ5IiA9PiAieSIsICJtIiA9 PiAibSIsICJ3IiA9PiAidyIpOw0KCWZvcmVhY2ggKCRyZW1hcCBhcyAkZHBhaXIpIHsNCgkJ JGRwYWlyID0gZG9fbGlzdCgkZHBhaXIsICc6Jyk7DQoJCSRkbWFwWyRkcGFpclswXV0gPSAo aXNzZXQoJGRwYWlyWzFdKSkgPyAkZHBhaXJbMV0gOiAkZHBhaXJbMF07DQoJfQ0KCSRlYXJs aWVzdCA9IGRhdGUoIlkiLCBzdHJ0b3RpbWUoIi0iLiR5ZWFyd2lkdGhbMF0uIiB5ZWFyIiwg KCAoZW1wdHkoJGVhcmxpZXN0KSB8fCAkdXNlbm93WzBdPT10cnVlKSA/IHRpbWUoKSA6ICRl YXJsaWVzdCkgKSApOw0KCSRsYXRlc3QgPSBkYXRlKCJZIiwgc3RydG90aW1lKCIrIi4keWVh cndpZHRoWzFdLiIgeWVhciIsICggKGVtcHR5KCRsYXRlc3QpIHx8ICR1c2Vub3dbMV09PXRy dWUpID8gdGltZSgpIDogJGxhdGVzdCkgKSApOw0KDQoJLy8gQ2hlY2sgdGhlIFVSTCBmb3Ig Y3VycmVudCBkYXRlIGFuZCBjYWxlbmRhciB0YXJnZXQgaW5mbw0KCSRpbl9jYWxpZCA9IGdw cygnY2FsaWQnKTsNCgkkaW5feWVhciA9IChncHMoJGRtYXBbInkiXSkgYW5kIGlzX251bWVy aWMoZ3BzKCRkbWFwWyJ5Il0pKSkgPyAoaW50KWdwcygkZG1hcFsieSJdKSA6ICcnOw0KCSRp bl9tb250aCA9IChncHMoJGRtYXBbIm0iXSkgYW5kIGlzX251bWVyaWMoZ3BzKCRkbWFwWyJt Il0pKSkgPyAoaW50KWdwcygkZG1hcFsibSJdKSA6ICcnOw0KCSRpbl93ZWVrID0gKGdwcygk ZG1hcFsidyJdKSBhbmQgaXNfbnVtZXJpYyhncHMoJGRtYXBbInciXSkpKSA/IChpbnQpZ3Bz KCRkbWFwWyJ3Il0pIDogJyc7DQoNCglpZigkc3RhdGljKSB7IC8vIGlmIHdlJ3JlIHN0YXRp YyB3L28gYW55IHN1cHBsaWVkIHZhcnMsIHVzZSB0aGUgY3VycmVudCBkYXRlDQoJCWlmKCEk eWVhcikgeyAkeWVhciA9IHNhZmVfc3RyZnRpbWUoJyVZJyk7IH0NCgkJaWYoISRtb250aCkg eyAkbW9udGggPSBzYWZlX3N0cmZ0aW1lKCclbScpOyB9DQoJfSBlbHNlIHsgLy8gb3RoZXJ3 aXNlIHVzZSBjdXJyZW50IGRhdGUgb25seSBpZiB0aGVyZSdzIG5vdGhpbmcgZWxzZQ0KCQlp ZiggJGlkID09ICRpbl9jYWxpZCApIHsgLy8gdXNlIGluY29taW5nDQoJCQkkeWVhciA9ICgk aW5feWVhcikgPyAkaW5feWVhciA6ICgoJHllYXIpID8gJHllYXIgOiBzYWZlX3N0cmZ0aW1l KCclWScpKTsNCgkJCSRtb250aCA9ICgkaW5fbW9udGgpID8gJGluX21vbnRoIDogKCgkbW9u dGgpID8gJG1vbnRoIDogc2FmZV9zdHJmdGltZSgnJW0nKSk7DQoJCQkvLyBJZiB3ZWVrIGlz IHVzZWQsIGFkanVzdCBtb250aCBzbyBpdCBlbmNvbXBhc3NlcyB0aGUgZ2l2ZW4gd2Vlaw0K CQkJJHdlZWsgPSAkaW5fd2VlazsNCgkJCWlmICgkd2Vlaykgew0KCQkJCSRtb250aCA9IHNh ZmVfc3RyZnRpbWUoIiVtIiwgc3RydG90aW1lKCR5ZWFyLiJXIi5zdHJfcGFkKCR3ZWVrLCAy LCAnMCcsIFNUUl9QQURfTEVGVCkpKTsgLy8gR2V0IHRoZSBtb250aCBmcm9tIHRoZSB3ZWVr DQoJCQl9DQoJCX0gZWxzZSB7IC8vIHVzZSBjdXJyZW50DQoJCQlpZighJHllYXIpIHsgJHll YXIgPSBzYWZlX3N0cmZ0aW1lKCclWScpOyB9DQoJCQlpZighJG1vbnRoKSB7ICRtb250aCA9 IHNhZmVfc3RyZnRpbWUoJyVtJyk7IH0NCgkJCWlmKCR3ZWVrKSB7ICRtb250aCA9IHNhZmVf c3RyZnRpbWUoIiVtIiwgc3RydG90aW1lKCR5ZWFyLiJXIi5zdHJfcGFkKCR3ZWVrLCAyLCAn MCcsIFNUUl9QQURfTEVGVCkpKTsgfQ0KCQl9DQoJfQ0KCSRzbWRfY2FsaW5mb1snaWQnXSA9 ICgkaW5fY2FsaWQpID8gJGluX2NhbGlkIDogJGlkOw0KCSRzbWRfZGF0ZVsneSddID0gJHll YXI7ICRzbWRfZGF0ZVsnbSddID0gJG1vbnRoOyAvLyAkd2Vlay9kYXkvaXNveWVhciBhcmUg c2V0IHBlciBldmVudCBsYXRlcg0KDQoJJHRzX2ZpcnN0ID0gbWt0aW1lKDAsIDAsIDAsICRt b250aCwgMSwgJHllYXIpOw0KCSR0c19sYXN0ID0gbWt0aW1lKDIzLCA1OSwgNTksICRtb250 aCwgZGF0ZSgndCcsJHRzX2ZpcnN0KSwgJHllYXIpOw0KCSR0c19sYXN0b2ZmID0gJHRzX2xh c3QgLSB0el9vZmZzZXQoJHRzX2xhc3QpOw0KCWlmICgkZGVidWcpIHsNCgkJZWNobyAiKysg VEhJUyBNT05USCdTIENBTEVOREFSIFsgc3RhcnQgc3RhbXAgLy8gZW5kIGRhdGUgLy8gZW5k IHN0YW1wIC8vIGVuZCBkYXRlIC8vIHR6IG9mZnNldCAoZW5kKSBdICsrIjsNCgkJZG1wKCR0 c19maXJzdCwgZGF0ZSgnWS1tLWQgSDppOnMnLCAkdHNfZmlyc3QpLCAkdHNfbGFzdCwgZGF0 ZSgnWS1tLWQgSDppOnMnLCAkdHNfbGFzdCksICR0c19sYXN0b2ZmKTsNCgl9DQoJJGV4dHJh c3FsID0gJGNhdFNRTCAuICRzZWNTUUwgLiAkYXV0aFNRTCAuICRmcFNRTDsNCg0KCXN3aXRj aCgkdGltZSkgew0KCQljYXNlICJhbnkiIDogYnJlYWs7DQoJCWNhc2UgImZ1dHVyZSIgOiAk ZXh0cmFzcWwgLj0gIiBBTkQgUG9zdGVkID4gQ1VSREFURSgpIjsgYnJlYWs7DQoJCWRlZmF1 bHQgOiAkZXh0cmFzcWwgLj0gIiBBTkQgUG9zdGVkIDwgQ1VSREFURSgpIjsgYnJlYWs7IC8v IFRoZSBwYXN0DQoJfQ0KDQoJLy8gSG9saWRheXMgYXJlIGdsb2JhbCAnZXhjbHVzaW9ucycs IGVpdGhlciBkZWZpbmVkIGRpcmVjdGx5IG9yIGluIGEgdHhwOnZhcmlhYmxlDQoJJGhvbGlk YXlzID0gZG9fbGlzdCgkaG9saWRheXMpOw0KCSR0eHBob2xzID0gZG9fbGlzdCgkaG9saWRh eXNbMF0sICI6Iik7DQoJaWYgKCR0eHBob2xzWzBdID09ICJ0eHB2YXIiKSB7DQoJCSRob2xp ZGF5cyA9IGRvX2xpc3QoJHZhcmlhYmxlWyR0eHBob2xzWzFdXSk7DQoJfQ0KCS8vIEZvcmNl IGVhY2ggaG9saWRheSB0byBhIGtub3duIGZvcm1hdC4gSG9saWRheXMgd2l0aG91dCB5ZWFy cyB1c2UgY3VycmVudCB5ZWFyDQoJZm9yZWFjaCAoJGhvbGlkYXlzIGFzICRrZXkgPT4gJHZh bCkgew0KCQlpZiAoZW1wdHkoJHZhbCkpIGNvbnRpbnVlOw0KCQkkbnVtcGFydHMgPSBwcmVn X21hdGNoKCcvXihbXGRcd10rKS4/KFtcZFx3XSspLj8oW1xkXHddKyk/JC8nLCAkdmFsLCAk cGFydHMpOw0KDQoJCWlmICgkbnVtcGFydHMpIHsNCgkJCWlmIChjb3VudCgkcGFydHMpID09 IDMpIHsNCgkJCQkkcGFydHNbM10gPSAkeWVhcjsNCiAgICAgICAgIH0NCgkJCSR2YWwgPSBz dHJfcGFkKCRwYXJ0c1sxXSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLictJy5zdHJfcGFkKCRw YXJ0c1syXSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLictJy4kcGFydHNbM107DQoJCX0NCgkJ JGhvbGlkYXlzWyRrZXldID0gZGF0ZSgiZC1NLVkiLCBzYWZlX3N0cnRvdGltZSgkdmFsKSk7 DQoJfQ0KDQoJaWYgKCRkZWJ1ZyA+IDAgJiYgIWVtcHR5KCRob2xpZGF5cykgJiYgJGhvbGlk YXlzWzBdICE9ICcnKSB7DQoJCWVjaG8gIisrIEhPTElEQVlTICsrICI7DQoJCWRtcCgkaG9s aWRheXMpOw0KCX0NCg0KCS8vIEdldCBhbGwgbWF0Y2hpbmcgYXJ0aWNsZXMgaW4gKGFuZCBi ZWZvcmUpIHRoaXMgbW9udGgNCgkkZXZlbnRzID0gYXJyYXkoKTsNCgkkc3FsMiA9ICRzdGF0 aSAuICIgSEFWSU5HIHVQb3N0ZWQgPD0gIi4kdHNfbGFzdG9mZi4gJGV4cGlyZWQgLiAkZXh0 cmFzcWwgLiIgT1JERVIgQlkgUG9zdGVkIEFTQyI7DQoJJGdyYWJDb2xzID0gJyosIHVuaXhf dGltZXN0YW1wKFBvc3RlZCkgYXMgdVBvc3RlZCwgdW5peF90aW1lc3RhbXAoTGFzdE1vZCkg YXMgdUxhc3RNb2QsIHVuaXhfdGltZXN0YW1wKEV4cGlyZXMpIGFzIHVFeHBpcmVzJzsNCgkk ZXZsaXN0ID0gc2FmZV9yb3dzKCRncmFiQ29scywgJ3RleHRwYXR0ZXJuJywgJHNxbDIsICRk ZWJ1Zyk7DQoJYXJ0aWNsZV9wdXNoKCk7DQoNCgkvLyBJZiBhbnkgZXZlbnRzIHJlY3VyIGFu ZCBmYWxsIHdpdGhpbiB0aGUgY3VycmVudCBtb250aCwgYWRkIHRob3NlIGFzIHdlbGwNCgkv LyBJZiBhbnkgZGF0ZXMgYXJlIHRvIGJlIGV4Y2x1ZGVkLCB0aGUgZW50cnkgaXMgc2tpcHBl ZCBVTkxFU1Mgc2hvd3NraXBwZWQgaW5kaWNhdGVzIG90aGVyd2lzZQ0KCWZvcmVhY2ggKCRl dmxpc3QgYXMgJHJvdykgew0KCQkkaWR4ID0gMDsgLy8gSW4gY2FzZSB0aGUgMXN0IGRheSBv ZiB0aGUgbW9udGggaXMgYSBjb250aW51YXRpb24gb2YgYW4gZXZlbnQgZnJvbSB0aGUgZW5k IG9mIHRoZSBwcmV2aW91cyBtb250aA0KCQkkc3RhcnQgPSAoIWVtcHR5KCRkYXRlZmllbGRz WzBdKSAmJiAhZW1wdHkoJHJvd1skZGF0ZWZpZWxkc1swXV0pICYmICgkc3RkdCA9IHN0cnRv dGltZSgkcm93WyRkYXRlZmllbGRzWzBdXSkpICE9PSBmYWxzZSkgPyAkc3RkdCA6ICRyb3db J3VQb3N0ZWQnXSArIHR6X29mZnNldCgkcm93Wyd1UG9zdGVkJ10pOw0KCQkkc3RhcnRfZGF0 ZSA9IGRhdGUoIlktbS1kIiwgJHN0YXJ0KTsgLy8gRm9yIHJlY3VycmluZy9zcGFubmVkIGV2 ZW50cyBvbiBhIG1pbmljYWwsIHRoaXMgaXMgdGhlIGV2ZW50IHRoZSBjZWxsIGxpbmtzIHRv DQoJCSRyZWFsX2VuZCA9IChpc3NldCgkZGF0ZWZpZWxkc1sxXSkgJiYgIWVtcHR5KCRyb3db JGRhdGVmaWVsZHNbMV1dKSAmJiAoJGVuZHQgPSBzdHJ0b3RpbWUoJHJvd1skZGF0ZWZpZWxk c1sxXV0pKSAhPT0gZmFsc2UpID8gJGVuZHQgOiAoKCRyb3dbJ3VFeHBpcmVzJ109PTApID8g MCA6ICRyb3dbJ3VFeHBpcmVzJ10gKyB0el9vZmZzZXQoJHJvd1sndUV4cGlyZXMnXSkpOw0K DQoJCS8vIElmIGVuZCA8IHN0YXJ0IHRoZSB1c2VyLXNwZWNpZmllZCBkYXRlcyBjYW5ub3Qg YmUgdHJ1c3RlZA0KCQlpZiAoJHJlYWxfZW5kICE9IDAgJiYgJHJlYWxfZW5kIDw9ICRzdGFy dCkgew0KCQkJJHN0YXJ0ID0gJHJvd1sndVBvc3RlZCddICsgdHpfb2Zmc2V0KCRyb3dbJ3VQ b3N0ZWQnXSk7DQoJCQkkcmVhbF9lbmQgPSAkcm93Wyd1RXhwaXJlcyddICsgdHpfb2Zmc2V0 KCRyb3dbJ3VFeHBpcmVzJ10pOw0KCQkJdHJpZ2dlcl9lcnJvcignRXhwaXJ5IGNhbm5vdCBi ZSBiZWZvcmUgc3RhcnQgZGF0ZSBpbiAiJy4kcm93WydUaXRsZSddLiciOiBpZ25vcmVkJywg RV9VU0VSX1dBUk5JTkcpOw0KCQl9DQoNCgkJJGVuZCA9ICgkcmVhbF9lbmQgIT0gMCAmJiAk cmVhbF9lbmQgPCAkdHNfbGFzdCkgPyAkcmVhbF9lbmQgOiAkdHNfbGFzdDsNCgkJJHJlYWxf ZGlmZiA9ICgkcmVhbF9lbmQ9PTApID8gMCA6ICRyZWFsX2VuZCAtICRzdGFydDsNCgkJJGZh a2VfZGlmZiA9IHN0cnRvdGltZShkYXRlKCJZLU0tZCIsICRyZWFsX2VuZCkgLiAiIDIzOjU5 OjU5Iik7DQoJCSRkaWZmID0gKCRyZWFsX2VuZD09MCkgPyAwIDogJGZha2VfZGlmZiAtICRz dGFydDsNCgkJJHNtZF9jYWxfZmxhZyA9ICRzbWRfY2FsX3VjbHMgPSBhcnJheSgpOw0KDQoJ CSRldl9tb250aCA9IGRhdGUoJ20nLCAkc3RhcnQpOw0KCQkkZXZfeWVhciA9IGRhdGUoJ1kn LCAkc3RhcnQpOw0KCQkkZXZfaHIgPSBkYXRlKCdIJywgJHN0YXJ0KTsNCgkJJGV2X21uID0g ZGF0ZSgnaScsICRzdGFydCk7DQoJCSRldl9zYyA9IGRhdGUoJ3MnLCAkc3RhcnQpOw0KDQoJ CWlmICgkZGVidWcgPiAxKSB7DQoJCQllY2hvICcrKyBFVkVOVCBTVEFSVCAvLyBFTkQgLy8g KGlmIG5vbi16ZXJvKSBSRUFMIEVORCArKyc7DQoJCQlkbXAoZGF0ZSgnZC1NLVkgSDppOnMn LCAkc3RhcnQpIC4nIC8vICcuIGRhdGUoJ2QtTS1ZIEg6aTpzJywgJGVuZCkgLicgLy8gJy4g KCAoJHJlYWxfZW5kID09IDApID8gJycgOiBkYXRlKCdkLU0tWSBIOmk6cycsICRyZWFsX2Vu ZCkgKSk7DQoJCQlkbXAoJHJvd1snVGl0bGUnXSk7DQoJCQlpZiAoJGRlYnVnID4gMikgew0K CQkJCWRtcCgkcm93KTsNCgkJCX0NCgkJfQ0KDQoJCSRtdWx0aSA9ICgkcmVhbF9lbmQgPiAk c3RhcnQgJiYgJHJlYWxfZW5kID4gJHRzX2ZpcnN0ICYmIChkYXRlKCJkLW0tWSIsICRyZWFs X2VuZCkgIT0gZGF0ZSgiZC1tLVkiLCAkc3RhcnQpKSkgPyB0cnVlIDogZmFsc2U7DQoJCSRy ZWN1ciA9IChlbXB0eSgkcm93WyRzdGVwZmllbGRdKSkgPyBmYWxzZSA6IHRydWU7DQoJCSRo b2xfaGl0ID0gaW5fYXJyYXkoZGF0ZSgiZC1NLVkiLCAkc3RhcnQpLCAkaG9saWRheXMpOw0K CQkkZXZjbGFzc2VzID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAoJGV2ZW50Y2xhc3NlcyBhcyAk ZXZjbHMpIHsNCgkJCXN3aXRjaCAoJGV2Y2xzKSB7DQoJCQkJY2FzZSAiIjoNCgkJCQkJYnJl YWs7DQoJCQkJY2FzZSAiZ2NhdCI6DQoJCQkJCWlmIChpc3NldCgkcHJldGV4dFsnYyddKSAm JiAhZW1wdHkoJHByZXRleHRbJ2MnXSkpIHsNCgkJCQkJCSRldmNsYXNzZXNbXSA9ICRldmNf cGZ4LiRwcmV0ZXh0WydjJ107DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiY2F0 ZWdvcnkiOg0KCQkJCQlpZiAoaXNzZXQoJHJvd1snQ2F0ZWdvcnkxJ10pICYmICFlbXB0eSgk cm93WydDYXRlZ29yeTEnXSkpIHsNCgkJCQkJCSRldmNsYXNzZXNbXSA9ICRldmNfcGZ4LiRy b3dbJ0NhdGVnb3J5MSddOw0KCQkJCQl9DQoJCQkJCWlmIChpc3NldCgkcm93WydDYXRlZ29y eTInXSkgJiYgIWVtcHR5KCRyb3dbJ0NhdGVnb3J5MiddKSkgew0KCQkJCQkJJGV2Y2xhc3Nl c1tdID0gJGV2Y19wZnguJHJvd1snQ2F0ZWdvcnkyJ107DQoJCQkJCX0NCgkJCQkJYnJlYWs7 DQoJCQkJY2FzZSAic2VjdGlvbiI6DQoJCQkJCWlmIChpc3NldCgkcHJldGV4dFsncyddKSAm JiAhZW1wdHkoJHByZXRleHRbJ3MnXSkpIHsNCgkJCQkJCSRldmNsYXNzZXNbXSA9ICRldmNf cGZ4LiRwcmV0ZXh0WydzJ107DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiYXV0 aG9yIjoNCgkJCQkJaWYgKGlzc2V0KCRwcmV0ZXh0WydhdXRob3InXSkgJiYgIWVtcHR5KCRw cmV0ZXh0WydhdXRob3InXSkpIHsNCgkJCQkJCSRldmNsYXNzZXNbXSA9ICRldmNfcGZ4LiRw cmV0ZXh0WydhdXRob3InXTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQlkZWZhdWx0Og0K CQkJCQlpZiAoaXNzZXQoJHJvd1skZXZjbHNdKSAmJiAhZW1wdHkoJHJvd1skZXZjbHNdKSkg ew0KCQkJCQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y19wZnguJHJvd1skZXZjbHNdOw0KCQkJCQl9 DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCSRldmNsYXNzZXMgPSAoJGV2Y2xhc3Nlcykg PyAnICcuIGpvaW4oJyAnLCAkZXZjbGFzc2VzKSA6ICcnOw0KCQkkaWdub3JlID0gJG9taXQg PSAkY2ZsYWcgPSBhcnJheSgpOw0KDQoJCWlmICgkZGVidWcgPiAxICYmICRldmNsYXNzZXMp IHsNCgkJCWVjaG8gJysrIEVWRU5UIENMQVNTRVMgKysnOw0KCQkJZG1wKCRldmNsYXNzZXMp Ow0KCQl9DQoNCgkJLy8gRXZlbnRzIHRoYXQgc3RhcnQgb3IgYXJlIGFkZGVkIHRoaXMgbW9u dGgNCgkJaWYgKCgkc3RhcnQgPCAkZW5kKSAmJiAoJHN0YXJ0ID4gJHRzX2ZpcnN0KSkgew0K CQkJcG9wdWxhdGVBcnRpY2xlRGF0YSgkcm93KTsNCgkJCSRzbWRfY2FsaW5mb1snZXZpZCdd ID0gJHJvd1snSUQnXTsNCgkJCS8vIGEgc3RhbmRhcmQgZXZlbnQgb3Igc3RhcnQgb2YgYSBt dWx0aQ0KCQkJaWYgKCRzaG93c3Bhbm5lZCAmJiAkbXVsdGkgJiYgISRyZWN1cikgew0KCQkJ CSRzbWRfY2FsX2ZsYWdbXSA9ICdtdWx0aWZpcnN0JzsNCgkJCX0NCgkJCWlmICgkcmVjdXIp IHsNCgkJCQkkc21kX2NhbF9mbGFnW10gPSAncmVjdXJmaXJzdCc7DQoJCQl9DQoJCQlpZiAo ISRzbWRfY2FsX2ZsYWcpIHsNCgkJCQkkc21kX2NhbF9mbGFnW10gPSAnc3RhbmRhcmQnOw0K CQkJfQ0KCQkJaWYgKCAoICRob2xfaGl0ICYmICFpbl9hcnJheSgnbXVsdGknLCRob2xpZGF5 ZmxhZ3MpICYmIGluX2FycmF5KCdtdWx0aWZpcnN0Jywkc21kX2NhbF9mbGFnKSApIHx8ICgg JGhvbF9oaXQgJiYgIWluX2FycmF5KCdzdGFuZGFyZCcsJGhvbGlkYXlmbGFncykgJiYgaW5f YXJyYXkoJ3N0YW5kYXJkJywkc21kX2NhbF9mbGFnKSApICkgew0KCQkJCSRzbWRfY2FsX2Zs YWdbXSA9ICdjYW5jZWwnOw0KCQkJfQ0KCQkJZm9yZWFjaCAoJHNtZF9jYWxfZmxhZyBhcyAk aXRlbSkgew0KCQkJCSRjZmxhZ1tdID0gJGNsc19wZnguJGl0ZW07DQoJCQl9DQoNCgkJCSRp ZHggPSAkc21kX2RhdGVbJ2QnXSA9IChpbnQpc3RyZnRpbWUoJyVkJywgJHN0YXJ0KTsNCgkJ CSRzbWRfZGF0ZVsndyddID0gc3RyZnRpbWUoc21kX2NhbF9yZWZvcm1hdF93aW4oJyVWJywg JHN0YXJ0KSwgJHN0YXJ0KTsNCgkJCSRzbWRfZGF0ZVsnaXknXSA9IHN0cmZ0aW1lKHNtZF9j YWxfcmVmb3JtYXRfd2luKCclRycsICRzdGFydCksICRzdGFydCk7DQoJCQkkdXNlX3Bvc3Rl ZCA9IGluX2FycmF5KCdzdGFuZGFyZCcsICRsaW5rcG9zdGVkKTsNCgkJCSRvcCA9ICgkdGhp bmcpID8gcGFyc2UoJHRoaW5nKSA6ICgoJGZvcm0pID8gcGFyc2VfZm9ybSgkZm9ybSkgOiAo KCRzaXplPT0ic21hbGwiKSA/IHNtZF9jYWxfbWluaWxpbmsoJHJvdywgJGlkeCwgJG1vbnRo LCAkeWVhciwgJHVzZV9wb3N0ZWQpIDogaHJlZigkcm93WydUaXRsZSddLCBwZXJtbGlua3Vy bCgkcm93KSwgJyB0aXRsZT0iJy4kcm93WydUaXRsZSddLiciJykpICk7DQoNCgkJCSRldmVu dHNbJGlkeF1bXSA9IGFycmF5KCdldicgPT4gJG9wLCAnZmxhZycgPT4gJHNtZF9jYWxfZmxh ZywgJ2NsYXNzZXMnID0+ICgoJGNmbGFnKSA/IGpvaW4oJyAnLGFycmF5X21lcmdlKCRjZmxh ZywgJHNtZF9jYWxfdWNscykpIDogJycpLiRldmNsYXNzZXMsICdwb3N0ZWQnID0+ICRzdGFy dF9kYXRlKTsNCgkJCSRzbWRfY2FsX2ZsYWcgPSAkY2ZsYWcgPSAkc21kX2NhbF91Y2xzID0g YXJyYXkoKTsNCgkJCSR1c2VfcG9zdGVkID0gJyc7DQoJCX0NCg0KCQkvLyBHZW5lcmF0ZSBh IHNraXAgYXJyYXkgZm9yIHRoaXMgZXZlbnQNCgkJaWYgKCRza2lwZmllbGQgJiYgJHJvd1sk c2tpcGZpZWxkXSAhPSAnJykgew0KCQkJJGlnbm9yZXMgPSBkb19saXN0KCRyb3dbJHNraXBm aWVsZF0pOw0KCQkJZm9yZWFjaCAoJGlnbm9yZXMgYXMgJHZhbCkgew0KCQkJCSRpZ3JuZyA9 IHNtZF9leHBhbmRfZGF0ZXJhbmdlKCR2YWwsICRzdGFydCwgJGVuZCk7DQoJCQkJZm9yZWFj aCAoJGlncm5nIGFzICR0aGV2YWwpIHsNCgkJCQkJJGlnbm9yZVtdID0gZGF0ZSgiZC1NLVki LCAkdGhldmFsKTsgLy8gRm9yY2UgZWFjaCBkYXRlIHRvIGEga25vd24gZm9ybWF0DQoJCQkJ fQ0KCQkJfQ0KCQl9DQoJCS8vIEdlbmVyYXRlIGFuIG9taXQgYXJyYXkgZm9yIHRoaXMgZXZl bnQNCgkJaWYgKCRvbWl0ZmllbGQgJiYgJHJvd1skb21pdGZpZWxkXSAhPSAnJykgew0KCQkJ JG9taXRzID0gZG9fbGlzdCgkcm93WyRvbWl0ZmllbGRdKTsNCgkJCWZvcmVhY2ggKCRvbWl0 cyBhcyAkdmFsKSB7DQoJCQkJJG9tcm5nID0gc21kX2V4cGFuZF9kYXRlcmFuZ2UoJHZhbCwg JHN0YXJ0LCAkZW5kKTsNCgkJCQlmb3JlYWNoICgkb21ybmcgYXMgJHRoZXZhbCkgew0KCQkJ CQkkb21pdFtdID0gZGF0ZSgiZC1NLVkiLCAkdGhldmFsKTsNCgkJCQl9DQoJCQl9DQoJCX0N CgkJaWYgKCRkZWJ1ZyA+IDEgJiYgKCRpZ25vcmUgfHwgJG9taXQpKSB7DQoJCQllY2hvICcr KyBPTUlUVEVEIERBVEVTICsrJzsNCgkJCWRtcCgkb21pdCk7DQoJCQllY2hvICcrKyBDQU5D RUxMRUQgREFURVMgKysnOw0KCQkJZG1wKCRpZ25vcmUpOw0KCQl9DQoJCS8vIENhbGN1bGF0 ZSB0aGUgZGF0ZSBvZmZzZXRzIGFuZCBjaGVjayByZWN1cnJpbmcgZXZlbnRzIHRoYXQgZmFs bCB3aXRoaW4gdGhlIG1vbnRoIG9mIGludGVyZXN0DQoJCWlmICgkc3RlcGZpZWxkICYmICRy b3dbJHN0ZXBmaWVsZF0gIT0gJycpIHsNCgkJCSRmcmVxID0gZG9fbGlzdCgkcm93WyRzdGVw ZmllbGRdKTsNCgkJCSRzdGFtcG9mZiA9IChpbnQpKDM2MDAqJGV2X2hyKSArIChpbnQpKDYw KiRldl9tbikgKyAoaW50KSRldl9zYzsNCgkJCWZvcmVhY2ggKCRmcmVxIGFzICRpbnRlcnZh bCkgew0KCQkJCSRtYXhfbG9vcCA9IDk5OTk5OyAvLyBZdWssIGJ1dCBwcmFjdGljYWxseSBs aW1pdGxlc3MNCgkJCQkkb3JpZ2VydmFsID0gJGludGVydmFsOw0KCQkJCSRpbnRlcnZhbCA9 IHN0cl9yZXBsYWNlKCI/bW9udGgiLCBkYXRlKCdGJywgbWt0aW1lKDAsMCwwLCRtb250aCwx KSksICRpbnRlcnZhbCk7DQoJCQkJJGludGVydmFsID0gc3RyX3JlcGxhY2UoIj95ZWFyIiwg JHllYXIsICRpbnRlcnZhbCk7DQoJCQkJaWYgKHN0cnBvcygkaW50ZXJ2YWwsICJsYXN0Iikg PT09IDApIHsNCgkJCQkJJGludGVydmFsID0gZGF0ZSgibCwgRiBqUyBZIiwgc3RydG90aW1l KCAkaW50ZXJ2YWwsIG1rdGltZSgxMiwgMCwgMCwgZGF0ZSgibiIsIG1rdGltZSgwLDAsMCwk bW9udGgsMSwkeWVhcikpKzEsIDEsICR5ZWFyKSApKTsNCgkJCQkJJG1heF9sb29wID0gMTsN CgkJCQl9IGVsc2UgaWYgKHN0cnBvcygkaW50ZXJ2YWwsICJmaXJzdCIpID09PSAwKSB7DQoJ CQkJCSRpbnRlcnZhbCA9IGRhdGUoImwsIEYgalMgWSIsIHN0cnRvdGltZSggJGludGVydmFs LCBta3RpbWUoMTIsIDAsIDAsICgoJG1vbnRoPjEpID8gJG1vbnRoLTEgOiAxMiksIGRhdGUo InQiLCBta3RpbWUoMCwwLDAsJG1vbnRoLTEsMSwoKCRtb250aD09MSkgPyAkeWVhci0xOiAk eWVhcikpKSwgKCgkbW9udGg9PTEpID8gJHllYXItMTogJHllYXIpKSApKTsNCgkJCQkJJG1h eF9sb29wID0gMTsNCgkJCQl9IGVsc2UgaWYgKHN0cnBvcygkaW50ZXJ2YWwsICJ0aGlzIikg PT09IDApIHsNCgkJCQkJJG1heF9sb29wID0gMTsNCgkJCQl9DQoJCQkJJHRzX2xvb3AgPSAw Ow0KCQkJCSR0c19jdXJyID0gJHN0YXJ0Ow0KCQkJCWlmIChzdHJwb3MoJG9yaWdlcnZhbCwg Ij9tb250aCIpIHx8IHN0cnBvcygkb3JpZ2VydmFsLCAiP3llYXIiKSkgew0KCQkJCQkkbWF4 X2xvb3AgPSAxOw0KICAgICAgICAgICAgfQ0KDQoJCQkJd2hpbGUgKCR0c19jdXJyIDwgJGVu ZCAmJiAkdHNfbG9vcCA8ICRtYXhfbG9vcCkgew0KCQkJCQlpZiAoJG1heF9sb29wID09IDEp IHsNCgkJCQkJCSR0c19jdXJyID0gc3RydG90aW1lKCRpbnRlcnZhbCk7DQoJCQkJCQkkdHNf Y3VyciA9ICgkdHNfY3VyciA8ICRzdGFydCB8fCAkdHNfY3VyciA+ICRlbmQpID8gJHN0YXJ0 IDogJHRzX2N1cnI7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkdHNfY3VyciA9IHN0cnRvdGlt ZSgkaW50ZXJ2YWwsICR0c19jdXJyKTsNCgkJCQkJfQ0KCQkJCQlpZiAoJHRzX2N1cnIgPT09 IGZhbHNlKSB7DQoJCQkJCQkkdHNfbG9vcCsrOw0KCQkJCQkJYnJlYWs7DQoJCQkJCX0gZWxz ZSB7DQoJCQkJCQlpZiAoJGRlYnVnID4gMSkgew0KCQkJCQkJCWRtcCgiSU5URVJWQUw6ICIu IGRhdGUoJ2QtTS1ZIEg6aTpzJywgJHRzX2N1cnIrJHN0YW1wb2ZmKSk7DQoJCQkJCQl9DQoJ CQkJCQlpZiAoJHRzX2N1cnIgPCAkZW5kICYmICR0c19jdXJyID49ICR0c19maXJzdCAmJiAk dHNfY3VyciAhPSAkc3RhcnQpIHsNCgkJCQkJCQkvLyBBIHJlY3VycmluZyBldmVudC4gQ2hl Y2sgaXQgaXNuJ3QgYSBob2xpZGF5IG9yIHRvIGJlIGlnbm9yZWQNCgkJCQkJCQlwb3B1bGF0 ZUFydGljbGVEYXRhKCRyb3cpOw0KCQkJCQkJCSRvcCA9ICcnOw0KCQkJCQkJCSRpZHggPSAo aW50KXN0cmZ0aW1lKCclZCcsICR0c19jdXJyKTsNCgkJCQkJCQkkc21kX2NhbF9mbGFnW10g PSAncmVjdXInOw0KCQkJCQkJCSR0aGlzZGF0ZSA9IGRhdGUoImQtTS1ZIiwgJHRzX2N1cnIp Ow0KCQkJCQkJCSRvbWl0X21lID0gaW5fYXJyYXkoJHRoaXNkYXRlLCAkb21pdCk7DQoJCQkJ CQkJJHNob3dfbWUgPSAhaW5fYXJyYXkoJHRoaXNkYXRlLCAkaWdub3JlKTsNCgkJCQkJCQkk aG9sX2hpdCA9IGluX2FycmF5KCR0aGlzZGF0ZSwgJGhvbGlkYXlzKTsNCgkJCQkJCQkkc2hv d19ob2wgPSAoJGhvbF9oaXQgJiYgIWluX2FycmF5KCdyZWN1cicsJGhvbGlkYXlmbGFncykg KSA/IGZhbHNlIDogdHJ1ZTsNCgkJCQkJCQkkdXNlX3Bvc3RlZCA9IGluX2FycmF5KGFycmF5 KCdyZWN1cicsICdyZWN1cmZpcnN0JywgJ3JlY3VybGFzdCcpLCAkbGlua3Bvc3RlZCk7DQoJ CQkJCQkJaWYgKCAkb21pdF9tZSApIHsNCgkJCQkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ29t aXQnOw0KCQkJCQkJCX0NCgkJCQkJCQlpZiAoICghJHNob3dfbWUgfHwgISRzaG93X2hvbCkg JiYgISRvbWl0X21lICkgew0KCQkJCQkJCQkkc21kX2NhbF9mbGFnW10gPSAnY2FuY2VsJzsN CgkJCQkJCQl9DQoJCQkJCQkJZm9yZWFjaCAoJHNtZF9jYWxfZmxhZyBhcyAkaXRlbSkgew0K CQkJCQkJCQkkY2ZsYWdbXSA9ICRjbHNfcGZ4LiRpdGVtOw0KCQkJCQkJCX0NCg0KCQkJCQkJ CS8vIENyZWF0ZSB0aGUgZXZlbnRzIHRoYXQgYXBwZWFyIGluIHRoZSBjZWxsIGJ1dCBvbmx5 IGlmIHRoZXkndmUgbm90IGFwcGVhcmVkIGJlZm9yZSwgb3IgYXJlIHRvIGJlIGlnbm9yZWQv b21pdHRlZA0KCQkJCQkJCWlmICghJG9taXRfbWUpIHsNCgkJCQkJCQkJaWYgKCgkc2hvd19t ZSAmJiAkc2hvd19ob2wpIHx8ICRzaG93c2tpcHBlZCkgew0KCQkJCQkJCQkJJHNtZF9kYXRl WydkJ10gPSAkaWR4Ow0KCQkJCQkJCQkJJHNtZF9kYXRlWyd3J10gPSBzdHJmdGltZShzbWRf Y2FsX3JlZm9ybWF0X3dpbignJVYnLCAkdHNfY3VyciksICR0c19jdXJyKTsNCgkJCQkJCQkJ CSRzbWRfZGF0ZVsnaXknXSA9IHN0cmZ0aW1lKHNtZF9jYWxfcmVmb3JtYXRfd2luKCclRycs ICR0c19jdXJyKSwgJHRzX2N1cnIpOw0KCQkJCQkJCQkJJG9wID0gKCRyZWN1cmZvcm0pID8g cGFyc2VfZm9ybSgkcmVjdXJmb3JtKSA6ICgoJHRoaW5nKSA/IHBhcnNlKCR0aGluZykgOiAo KCRzaXplPT0ic21hbGwiKSA/IHNtZF9jYWxfbWluaWxpbmsoJHJvdywgJGlkeCwgJG1vbnRo LCAkeWVhciwgJHVzZV9wb3N0ZWQpIDogaHJlZigkcm93WydUaXRsZSddLCBwZXJtbGlua3Vy bCgkcm93KSwgJyB0aXRsZT0iJy4kcm93WydUaXRsZSddLiciJykpICk7DQoJCQkJCQkJCX0N CgkJCQkJCQl9DQoJCQkJCQkJJHVzZWQgPSBhcnJheSgpOw0KCQkJCQkJCWlmIChpc3NldCgk ZXZlbnRzWyRpZHhdKSAmJiAkZXZlbnRzWyRpZHhdICE9IE5VTEwpIHsNCgkJCQkJCQkJZm9y ZWFjaCAoJGV2ZW50c1skaWR4XSBhcyAkZXYpIHsNCgkJCQkJCQkJCSR1c2VkW10gPSAkZXZb J2V2J107DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQkJaWYgKGlzc2V0KCRldmVudHNb JGlkeF0pICYmICRldmVudHNbJGlkeF0gPT0gTlVMTCB8fCAhaW5fYXJyYXkoJG9wLCAkdXNl ZCkpIHsNCgkJCQkJCQkJJGV2ZW50c1skaWR4XVtdID0gYXJyYXkoJ2V2JyA9PiAkb3AsICdm bGFnJyA9PiAkc21kX2NhbF9mbGFnLCAnY2xhc3NlcycgPT4gKCgkY2ZsYWcpID8gam9pbign ICcsYXJyYXlfbWVyZ2UoJGNmbGFnLCAkc21kX2NhbF91Y2xzKSkgOiAnJykuJGV2Y2xhc3Nl cywgJ3Bvc3RlZCcgPT4gJHN0YXJ0X2RhdGUpOw0KCQkJCQkJCX0NCgkJCQkJCQkkc21kX2Nh bF9mbGFnID0gJGNmbGFnID0gJHNtZF9jYWxfdWNscyA9IGFycmF5KCk7DQoJCQkJCQkJJHVz ZV9wb3N0ZWQgPSAnJzsNCgkJCQkJCX0NCgkJCQkJCSR0c19sb29wKys7DQoJCQkJCX0NCgkJ CQl9DQoJCQl9DQoJCX0gZWxzZSBpZiAoJHNob3dzcGFubmVkICYmICRtdWx0aSkgew0KCQkJ Ly8gTm9uLXJlY3VycmluZyBldmVudHMgbWF5IHNwYW4gbW9yZSB0aGFuIG9uZSBkYXRlIGJ1 dCB0aGV5IG11c3Qgc3RpbGwgcmVzcGVjdCBpZ25vcmVkIGRhdGVzIGFuZCBob2xpZGF5cw0K CQkJcG9wdWxhdGVBcnRpY2xlRGF0YSgkcm93KTsNCgkJCSRsYXN0ZGF5ID0gKGludClzdHJm dGltZSgnJWQnLCAkZW5kKTsNCgkJCSRyZWFsX2xhc3RkYXkgPSAoaW50KXN0cmZ0aW1lKCcl ZCcsICRyZWFsX2VuZCk7DQoJCQl3aGlsZSAoKyskaWR4IDw9ICRsYXN0ZGF5KSB7DQoJCQkJ JG9wID0gJyc7DQoJCQkJJG11bHRpZmxhZyA9ICgkaWR4PT0kcmVhbF9sYXN0ZGF5KSA/ICdt dWx0aWxhc3QnIDogKCgkaWR4PT0xKSA/ICdtdWx0aXByZXYnIDogJ211bHRpJyk7DQoJCQkJ JHNtZF9jYWxfZmxhZ1tdID0gJG11bHRpZmxhZzsNCgkJCQkkdGhpc3RpbWUgPSBta3RpbWUo MCwgMCwgMCwgJG1vbnRoLCAkaWR4LCAkeWVhcik7DQoJCQkJJHRoaXNkYXRlID0gZGF0ZSgi ZC1NLVkiLCAkdGhpc3RpbWUpOw0KCQkJCSRvbWl0X21lID0gaW5fYXJyYXkoJHRoaXNkYXRl LCAkb21pdCk7DQoJCQkJJHNob3dfbWUgPSAhaW5fYXJyYXkoJHRoaXNkYXRlLCAkaWdub3Jl KTsNCgkJCQkkaG9sX2hpdCA9IGluX2FycmF5KCR0aGlzZGF0ZSwgJGhvbGlkYXlzKTsNCgkJ CQkkc2hvd19ob2wgPSAoJGhvbF9oaXQgJiYgIWluX2FycmF5KCdtdWx0aScsJGhvbGlkYXlm bGFncykgKSA/IGZhbHNlIDogdHJ1ZTsNCgkJCQkkdXNlX3Bvc3RlZCA9IGluX2FycmF5KGFy cmF5KCdtdWx0aScsICdtdWx0aWZpcnN0JywgJ211bHRpbGFzdCcsICdtdWx0aXByZXYnKSwg JGxpbmtwb3N0ZWQpOw0KCQkJCWlmICggJG9taXRfbWUgKSB7DQoJCQkJCSRzbWRfY2FsX2Zs YWdbXSA9ICdvbWl0JzsNCgkJCQl9DQoJCQkJaWYgKCAoISRzaG93X21lIHx8ICEkc2hvd19o b2wpICYmICEkb21pdF9tZSApIHsNCgkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ2NhbmNlbCc7 DQoJCQkJfQ0KCQkJCWZvcmVhY2ggKCRzbWRfY2FsX2ZsYWcgYXMgJGl0ZW0pIHsNCgkJCQkJ JGNmbGFnW10gPSAkY2xzX3BmeC4kaXRlbTsNCgkJCQl9DQoJCQkJLy8gQ3JlYXRlIHRoZSBz cGFubmVkIGV2ZW50IHRoYXQgYXBwZWFycyBpbiB0aGUgY2VsbA0KCQkJCWlmICghJG9taXRf bWUpIHsNCgkJCQkJaWYgKCAoJHNob3dfbWUgJiYgJHNob3dfaG9sKSB8fCAkc2hvd3NraXBw ZWQpIHsNCgkJCQkJCSRzbWRfZGF0ZVsnZCddID0gJGlkeDsNCgkJCQkJCSRzbWRfZGF0ZVsn dyddID0gc3RyZnRpbWUoc21kX2NhbF9yZWZvcm1hdF93aW4oJyVWJywgJHRoaXN0aW1lKSwg JHRoaXN0aW1lKTsNCgkJCQkJCSRzbWRfZGF0ZVsnaXknXSA9IHN0cmZ0aW1lKHNtZF9jYWxf cmVmb3JtYXRfd2luKCclRycsICR0aGlzdGltZSksICR0aGlzdGltZSk7DQoJCQkJCQkkb3Ag PSAoJHNwYW5mb3JtKSA/IHBhcnNlX2Zvcm0oJHNwYW5mb3JtKSA6ICgoJHRoaW5nKSA/IHBh cnNlKCR0aGluZykgOiAoKCRzaXplPT0ic21hbGwiKSA/IHNtZF9jYWxfbWluaWxpbmsoJHJv dywgJGlkeCwgJG1vbnRoLCAkeWVhciwgJHVzZV9wb3N0ZWQpIDogaHJlZignJnJhcnI7Jywg cGVybWxpbmt1cmwoJHJvdyksICcgdGl0bGU9IicuJHJvd1snVGl0bGUnXS4nIicpKSApOw0K CQkJCQl9DQoJCQkJfQ0KCQkJCSRldmVudHNbJGlkeF1bXSA9IGFycmF5KCdldicgPT4gJG9w LCAnZmxhZycgPT4gJHNtZF9jYWxfZmxhZywgJ2NsYXNzZXMnID0+ICgoJGNmbGFnKSA/IGpv aW4oJyAnLGFycmF5X21lcmdlKCRjZmxhZywgJHNtZF9jYWxfdWNscykpIDogJycpLiRldmNs YXNzZXMsICdwb3N0ZWQnID0+ICRzdGFydF9kYXRlKTsNCgkJCQkkc21kX2NhbF9mbGFnID0g JGNmbGFnID0gJHNtZF9jYWxfdWNscyA9IGFycmF5KCk7DQoJCQkJJHVzZV9wb3N0ZWQgPSAn JzsNCgkJCX0NCgkJfQ0KCQkvLyBBZGQgYW55IGV4dHJhIGRhdGVzIGZvciB0aGlzIGV2ZW50 IHRoYXQgYXJlIHdpdGhpbiB0aGUgY3VycmVudCBtb250aA0KCQlpZiAoJGV4dHJhZmllbGQg JiYgJHJvd1skZXh0cmFmaWVsZF0gIT0gJycpIHsNCgkJCSR4dHJhID0gZG9fbGlzdCgkcm93 WyRleHRyYWZpZWxkXSk7DQoJCQkkZXZfaHIgPSBkYXRlKCdIJywgJHN0YXJ0KTsNCgkJCSRl dl9tbiA9IGRhdGUoJ2knLCAkc3RhcnQpOw0KCQkJJGV2X3NjID0gZGF0ZSgncycsICRzdGFy dCk7DQoJCQkkc3RhbXBvZmYgPSAoaW50KSgzNjAwKiRldl9ocikgKyAoaW50KSg2MCokZXZf bW4pICsgKGludCkkZXZfc2M7DQoJCQlmb3JlYWNoICgkeHRyYSBhcyAkdmFsKSB7DQoJCQkJ aWYgKHN0cnBvcygkdmFsLCAiKyIpID09PSBmYWxzZSkgew0KCQkJCQkkZXhybmcgPSBzbWRf ZXhwYW5kX2RhdGVyYW5nZSgkdmFsKTsNCgkJCQkJJHZhbCA9IGRhdGUoIlktbS1kIiwgJGV4 cm5nWzBdKTsNCgkJCQkJJHNwaWR0aCA9IGNvdW50KCRleHJuZyk7DQoJCQkJCSRzcGV4ID0g MDsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkY2hrID0gJHNob3dzcGFubmVkICYmICEkcmVjdXI7 DQoJCQkJCSRzcGlkdGggPSAkY2hrID8gY2VpbCgkZGlmZiAvICg2MCo2MCoyNCkpIDogMTsg Ly8gZGF5cyBiZXR3ZWVuIGRhdGVzDQoJCQkJCSR2YWwgPSBydHJpbSgkdmFsLCAnKycpOw0K CQkJCQkkc3BleCA9ICRjaGsgPyAxIDogMDsNCgkJCQl9DQoNCgkJCQlmb3IgKCRqZHggPSAx OyAkamR4IDw9ICRzcGlkdGg7ICRqZHgrKykgew0KCQkJCQkkdG0gPSBzYWZlX3N0cnRvdGlt ZSgkdmFsIC4gKCgkamR4PT0xKSA/ICcnIDogJysnLigkamR4LTEpLicgZGF5cycpKTsNCgkJ CQkJaWYgKCRkaWZmID4gMCAmJiAkamR4ID09IDEpIHsNCgkJCQkJCSRleHBzdGFtcCA9ICR0 bSskc3RhbXBvZmYrJHJlYWxfZGlmZjsNCgkJCQkJfQ0KCQkJCQkkaWR4ID0gJHNtZF9kYXRl WydkJ10gPSAoaW50KXN0cmZ0aW1lKCclZCcsICR0bSk7DQoJCQkJCSRkdCA9IGRhdGUoIlkt bS1kIiwgJHRtKTsNCgkJCQkJJGxzdCA9ICgkZXh0cmFzdHJpY3QpID8gJGVuZCA6ICR0c19s YXN0Ow0KCQkJCQlpZiAoJHRtIDwgJGxzdCAmJiAkdG0gPj0gJHRzX2ZpcnN0KSB7DQoJCQkJ CQkkZmFrZXJvdyA9ICRyb3c7DQoJCQkJCQkkZmFrZXJvd1snUG9zdGVkJ10gPSBkYXRlKCJZ LW0tZCBIOmk6cyIsICR0bSskc3RhbXBvZmYpOw0KCQkJCQkJJGZha2Vyb3dbJ3VQb3N0ZWQn XSA9ICR0bSskc3RhbXBvZmY7DQoJCQkJCQlpZiAoJGRpZmY+MCkgew0KCQkJCQkJCSRmYWtl cm93WydFeHBpcmVzJ10gPSBkYXRlKCJZLW0tZCBIOmk6cyIsICRleHBzdGFtcCk7DQoJCQkJ CQkJJGZha2Vyb3dbJ3VFeHBpcmVzJ10gPSAkZXhwc3RhbXA7DQoJCQkJCQl9DQoNCgkJCQkJ CXBvcHVsYXRlQXJ0aWNsZURhdGEoJGZha2Vyb3cpOw0KCQkJCQkJJHNtZF9jYWxfZmxhZ1td ID0gJ2V4dHJhJzsNCgkJCQkJCSRjZmxhZ1tdID0gJGNsc19wZnguJ2V4dHJhJzsNCgkJCQkJ CSRvbWl0X21lID0gZmFsc2U7DQoJCQkJCQkkc2hvd19tZSA9ICRzaG93X2hvbCA9IHRydWU7 DQoJCQkJCQlpZiAoJHNwZXgpIHsNCgkJCQkJCQkkbXVsdGlmbGFnID0gKCRqZHg9PTEpID8g J211bHRpZmlyc3QnIDogKCgkamR4PT0kc3BpZHRoKSA/ICdtdWx0aWxhc3QnIDogKCgkaWR4 PT0xKSA/ICdtdWx0aXByZXYnIDogJ211bHRpJykpOw0KCQkJCQkJCSR0aGlzZGF0ZSA9IGRh dGUoImQtTS1ZIiwgJHRtKTsNCgkJCQkJCQkkb21pdF9tZSA9IGluX2FycmF5KCR0aGlzZGF0 ZSwgJG9taXQpOw0KCQkJCQkJCSRzaG93X21lID0gIWluX2FycmF5KCR0aGlzZGF0ZSwgJGln bm9yZSk7DQoJCQkJCQkJJGhvbF9oaXQgPSBpbl9hcnJheSgkdGhpc2RhdGUsICRob2xpZGF5 cyk7DQoJCQkJCQkJJHNob3dfaG9sID0gKCRob2xfaGl0ICYmICFpbl9hcnJheSgnbXVsdGkn LCRob2xpZGF5ZmxhZ3MpICkgPyBmYWxzZSA6IHRydWU7DQoJCQkJCQkJJHVzZV9wb3N0ZWQg PSBpbl9hcnJheSgnZXh0cmEnLCAkbGlua3Bvc3RlZCk7DQoJCQkJCQkJaWYgKCRvbWl0X21l KSB7DQoJCQkJCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdvbWl0JzsNCgkJCQkJCQl9DQoJCQkJ CQkJaWYgKCAoISRzaG93X21lIHx8ICEkc2hvd19ob2wpICYmICEkb21pdF9tZSApIHsNCgkJ CQkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ2NhbmNlbCc7DQoJCQkJCQkJfQ0KCQkJCQkJCSRz bWRfY2FsX2ZsYWdbXSA9ICRtdWx0aWZsYWc7DQoJCQkJCQkJJGNmbGFnW10gPSAkY2xzX3Bm eC4kbXVsdGlmbGFnOw0KCQkJCQkJfQ0KCQkJCQkJaWYgKCEkb21pdF9tZSkgew0KCQkJCQkJ CWlmICggKCRzaG93X21lICYmICRzaG93X2hvbCkgfHwgJHNob3dza2lwcGVkKSB7DQoJCQkJ CQkJCSRzbWRfZGF0ZVsndyddID0gc3RyZnRpbWUoc21kX2NhbF9yZWZvcm1hdF93aW4oJyVW JywgJHRtKSwgJHRtKTsNCgkJCQkJCQkJJHNtZF9kYXRlWydpeSddID0gc3RyZnRpbWUoc21k X2NhbF9yZWZvcm1hdF93aW4oJyVHJywgJHRtKSwgJHRtKTsNCgkJCQkJCQkJJG9wID0gKCRz cGV4ICYmICRzcGFuZm9ybSkgPyBwYXJzZV9mb3JtKCRzcGFuZm9ybSkgOiAoKCR0aGluZykg PyBwYXJzZSgkdGhpbmcpIDogKCgkZm9ybSkgPyBwYXJzZV9mb3JtKCRmb3JtKSA6ICgoJHNp emU9PSJzbWFsbCIpID8gc21kX2NhbF9taW5pbGluaygkcm93LCAkaWR4LCAkbW9udGgsICR5 ZWFyLCAkdXNlX3Bvc3RlZCkgOiBocmVmKCgoJHNwZXggJiYgJGpkeD4xKSA/ICcmcmFycjsn IDogJHJvd1snVGl0bGUnXSksIHBlcm1saW5rdXJsKCRyb3cpLCAnIHRpdGxlPSInLiRyb3db J1RpdGxlJ10uJyInKSkgKSk7DQoJCQkJCQkJCSRldmVudHNbJGlkeF1bXSA9IGFycmF5KCdl dicgPT4gJG9wLCAnZmxhZycgPT4gJHNtZF9jYWxfZmxhZywgJ2NsYXNzZXMnID0+ICgoJGNm bGFnKSA/IGpvaW4oJyAnLGFycmF5X21lcmdlKCRjZmxhZywgJHNtZF9jYWxfdWNscykpIDog JycpLiRldmNsYXNzZXMsICdwb3N0ZWQnID0+ICRkdCk7DQoJCQkJCQkJCSRzbWRfY2FsX2Zs YWcgPSAkY2ZsYWcgPSAkc21kX2NhbF91Y2xzID0gYXJyYXkoKTsNCgkJCQkJCQkJJHVzZV9w b3N0ZWQgPSAnJzsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJ CX0NCgl9DQoJYXJ0aWNsZV9wb3AoKTsNCg0KCWlmICgkZGVidWcgPiAxICYmICRldmVudHMp IHsNCgkJZWNobyAnKysgQUxMIEVWRU5UUyArKyc7DQoJCWRtcCgkZXZlbnRzKTsNCgl9DQoN CgkvLyBHZW5lcmF0ZSB0aGUgY2FsZW5kYXINCgkkY2FsZW5kYXIgPSBuZXcgU01EX0NhbGVu ZGFyKCRzaXplLCAkeWVhciwgJG1vbnRoLCAkZXZlbnRzLCAkc2VjdGlvbiwgJGNhdGVnb3J5 LCAkZGVidWcpOw0KCSRjYWxlbmRhci0+c2V0V2Vlaygkd2Vlayk7DQoJJGNhbGVuZGFyLT5z ZXRHTVQoJGdtdCk7DQoJJGNhbGVuZGFyLT5zZXRMYW5nKCRsYW5nKTsNCgkkY2FsZW5kYXIt PnNldENsYXNzTGV2ZWxzKCRjbGV2cyk7DQoJJGNhbGVuZGFyLT5zZXRDbGFzc1ByZWZpeCgk Y2xzX3BmeCk7DQoJJGNhbGVuZGFyLT5zZXRFdmVudFdyYXB0YWcoJGV2ZW50d3JhcHRhZyk7 DQoJJGNhbGVuZGFyLT5zZXRDZWxsRm9ybSgkY2VsbGZvcm0pOw0KCSRjYWxlbmRhci0+c2V0 SGRyRm9ybSgkaGVhZGVyZm9ybSk7DQoJJGNhbGVuZGFyLT5zZXRNWVdyYXB0YWcoJG15d3Jh cHRhZyk7DQoJJGNhbGVuZGFyLT5zZXRTdW1tYXJ5KCRzdW1tYXJ5KTsNCgkkY2FsZW5kYXIt PnNldENhcHRpb24oJGNhcHRpb24pOw0KCSRjYWxlbmRhci0+c2V0VGFibGVJRCgkaWQpOw0K CSRjYWxlbmRhci0+c2V0VGFibGVDbGFzcygkY2xhc3MpOw0KCSRjYWxlbmRhci0+c2V0Um93 Q2xhc3MoJHJvd2NsYXNzKTsNCgkkY2FsZW5kYXItPnNldENlbGxDbGFzcygkY2VsbGNsYXNz KTsNCgkkY2FsZW5kYXItPnNldEVtcHR5Q2xhc3MoJGVtcHR5Y2xhc3MpOw0KCSRjYWxlbmRh ci0+c2V0SVNPV2Vla0NsYXNzKCRpc293ZWVrY2xhc3MpOw0KCSRjYWxlbmRhci0+c2V0TmF2 SW5mbygkbmF2cGNsYXNzLCRuYXZuY2xhc3MsJG5hdnBhcnIsJG5hdm5hcnIsJG5hdmlkKTsN CgkkY2FsZW5kYXItPnNldE5hdktlZXAoJG1haW50YWluKTsNCgkkY2FsZW5kYXItPnNldE1Z Q2xhc3MoJG15Y2xhc3MpOw0KCSRjYWxlbmRhci0+c2V0TmFtZUZvcm1hdCgkZGF5Zm9ybWF0 LCAiZCIpOw0KCSRjYWxlbmRhci0+c2V0TmFtZUZvcm1hdCgkbW9udGhmb3JtYXQsICJtIik7 DQoJJGNhbGVuZGFyLT5zZXRSZW1hcCgkZG1hcCk7DQoJJGNhbGVuZGFyLT5zZXRTaG93SVNP V2VlaygkaXNvd2Vla3MpOw0KCSRjYWxlbmRhci0+c2V0RVllYXIoJGVhcmxpZXN0KTsNCgkk Y2FsZW5kYXItPnNldExZZWFyKCRsYXRlc3QpOw0KCSRjYWxlbmRhci0+c2V0RmlsdGVyT3B0 cygkZm9wdHMpOw0KCSRjYWxlbmRhci0+c2V0SG9saWRheXMoJGhvbGlkYXlzKTsNCgkkY2Fs ZW5kYXItPnNldFNlbGVjdG9ycyhkb19saXN0KCRzZWxlY3QpLCAkc2VsZWN0YnRuKTsNCgkk Y2FsZW5kYXItPnNldEZpcnN0RGF5T2ZXZWVrKCRmaXJzdGRheSk7DQoNCglyZXR1cm4gJGNh bGVuZGFyLT5kaXNwbGF5KCRzdGF0aWMsICRmdXR1cmUpOw0KfQ0KDQpjbGFzcyBTTURfQ2Fs ZW5kYXIgZXh0ZW5kcyBTTURfUmF3X0NhbGVuZGFyIHsNCgkvLyBPdmVycmlkZSBDb25zdHJ1 Y3Rvcg0KCS8vIFBlcm1pdHMgbXVsdGlwbGUgZXZlbnRzIHRvIHNob3cgcGVyIGRheQ0KCXZh ciAkc2VjdGlvbiA9ICcnOw0KCXZhciAkY2F0ZWdvcnkgPSAnJzsNCgl2YXIgJHNpemUgPSAn JzsNCgl2YXIgJGRlYnVnID0gMDsNCgl2YXIgJGV2ZW50cyA9IGFycmF5KCk7DQoJZnVuY3Rp b24gU01EX0NhbGVuZGFyKCRzaXplLCR5ZWFyLCRtb250aCwkZXZlbnRzLCRzZWN0aW9uLCRj YXRlZ29yeSwgJGRlYnVnPTApIHsNCgkJJHRoaXMtPmRlYnVnID0gJGRlYnVnOw0KCQkkdGhp cy0+c2VjdGlvbiA9ICRzZWN0aW9uOw0KCQkkdGhpcy0+Y2F0ZWdvcnkgPSAkY2F0ZWdvcnk7 DQoJCSR0aGlzLT5ldmVudHMgPSAkZXZlbnRzOw0KCQkkdGhpcy0+c2l6ZSA9ICRzaXplOw0K CQkkdGhpcy0+c21kX1Jhd19DYWxlbmRhcigkeWVhciwkbW9udGgsJGRlYnVnKTsNCgl9DQoN CgkvLyBPdmVycmlkZSBkc3BEYXlDZWxsIHRvIGRpc3BsYXkgc3R1ZmYgcmlnaHQNCglmdW5j dGlvbiBkc3BEYXlDZWxsKCR0aGVkYXkpIHsNCgkJZ2xvYmFsICRzbWRfY2FsX2ZsYWcsICRz bWRfY2FsaW5mbywgJHNtZF9jYWxfdWNscywgJHNtZF9kYXRlLCAkcGVybWxpbmtfbW9kZTsN Cg0KCQkkc21kX2NhbF9mbGFnID0gJHNtZF9jYWxfdWNscyA9IGFycmF5KCk7DQoJCSRoYXNh cnRpY2xlID0gaXNzZXQoJHRoaXMtPmV2ZW50c1skdGhlZGF5XSk7DQoJCSRub3cgPSB0aW1l KCkgKyB0el9vZmZzZXQoKTsNCg0KCQkkdGhlZGF0ZSA9IG1rdGltZSgwLCAwLCAwLCAkdGhp cy0+bW9udGgsICR0aGVkYXksICR0aGlzLT55ZWFyKTsNCgkJJGhvbF9oaXQgPSBpbl9hcnJh eShkYXRlKCJkLU0tWSIsICR0aGVkYXRlKSwgJHRoaXMtPmhvbGlkYXlzKTsNCgkJaWYgKCRo YXNhcnRpY2xlKSB7DQoJCQkkc21kX2NhbF9mbGFnW10gPSAnZXZlbnQnOw0KCQl9DQoJCWlm ICgkaG9sX2hpdCkgew0KCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ2hvbHMnOw0KCQl9DQoJCSRj ZmxhZyA9IGFycmF5KCk7DQoJCWZvcmVhY2ggKCRzbWRfY2FsX2ZsYWcgYXMgJGl0ZW0pIHsN CgkJCSRjZmxhZ1tdID0gJHRoaXMtPmNsc19wZnguJGl0ZW07DQoJCX0NCgkJJHRkY2xhc3Mg PSB0cmltKCR0aGlzLT5jZWxsY2xhc3MgLiAoKCRjZmxhZykgPyAnICcuam9pbignICcsICRj ZmxhZykgOiAnJykpOw0KCQkkcnVubmluZ2NsYXNzID0gKGluX2FycmF5KCJjZWxsIiwgJHRo aXMtPmNsc19sZXYpIHx8IGluX2FycmF5KCJjZWxscGx1cyIsICR0aGlzLT5jbHNfbGV2KSkg PyBleHBsb2RlKCcgJywgJHRkY2xhc3MpIDogYXJyYXkoKTsNCgkJaWYoJHRoaXMtPnllYXIg PT0gZGF0ZSgnWScsJG5vdykgYW5kICR0aGlzLT5tb250aCA9PSBkYXRlKCduJywkbm93KSBh bmQgJHRoZWRheSA9PSBkYXRlKCdqJywkbm93KSApIHsNCgkJCSRzbWRfY2FsX2ZsYWdbXSA9 ICd0b2RheSc7DQoJCQkkcnVubmluZ2NsYXNzW10gPSAkdGhpcy0+Y2xzX3BmeC4ndG9kYXkn Ow0KCQl9DQoNCgkJJG91dCA9ICRmbGFncyA9IGFycmF5KCk7DQoJCSRmb3V0ID0gYXJyYXko J3N0YW5kYXJkJz0+YXJyYXkoKSwncmVjdXInPT5hcnJheSgpLCdyZWN1cmZpcnN0Jz0+YXJy YXkoKSwnbXVsdGlmaXJzdCc9PmFycmF5KCksJ211bHRpJz0+YXJyYXkoKSwnbXVsdGlwcmV2 Jz0+YXJyYXkoKSwnbXVsdGlsYXN0Jz0+YXJyYXkoKSwnY2FuY2VsJz0+YXJyYXkoKSwnZXh0 cmEnPT5hcnJheSgpKTsNCgkJaWYgKGVtcHR5KCR0aGlzLT5jZWxsZm9ybSkpIHsNCgkJCSRv dXRbXSA9IGhlZCgkdGhlZGF5LDQpOw0KCQl9DQoJCWlmKCBpc3NldCgkdGhpcy0+ZXZlbnRz WyR0aGVkYXldKSApIHsNCgkJCSRkYXlzX2V2ZW50cyA9ICR0aGlzLT5ldmVudHNbJHRoZWRh eV07DQoJCQlmb3JlYWNoKCRkYXlzX2V2ZW50cyBhcyAkZXYpIHsNCgkJCQkkZXZjbGFzcyA9 IHRyaW0oJGV2WydjbGFzc2VzJ10pOw0KCQkJCSRmbGFncyA9IGFycmF5X21lcmdlKCRmbGFn cywgJGV2WydmbGFnJ10pOw0KCQkJCWlmIChpbl9hcnJheSgiY2VsbHBsdXMiLCAkdGhpcy0+ Y2xzX2xldikpIHsNCgkJCQkJZm9yZWFjaCAoZXhwbG9kZSgnICcsICRldmNsYXNzKSBhcyAk ZXZjKSB7DQoJCQkJCQkkcnVubmluZ2NsYXNzW109ICRldmM7DQoJCQkJCX0NCgkJCQl9DQoJ CQkJJGNscyA9ICgkZXZjbGFzcyAmJiBpbl9hcnJheSgiZXZlbnQiLCAkdGhpcy0+Y2xzX2xl dikpID8gJyBjbGFzcz0iJy50cmltKCRldmNsYXNzKS4nIicgOiAnJzsNCgkJCQkkb3AgPSAo JHRoaXMtPmV2d3JhcHRhZykgPyB0YWcoJGV2WydldiddLCAkdGhpcy0+ZXZ3cmFwdGFnLCAk Y2xzKSA6ICRldlsnZXYnXTsNCgkJCQlmb3JlYWNoICgkZXZbJ2ZsYWcnXSBhcyAkZmxldikg ew0KCQkJCQkkZm91dFskZmxldl1bXSA9ICRvcDsNCgkJCQl9DQoJCQkJJG91dFtdID0gJG9w Ow0KCQkJfQ0KCQl9DQoNCgkJLy8gQW1hbGdhbWF0ZSB0aGUgZXZlbnQtbGV2ZWwgY2xhc3Nl cyBhbmQgY2VsbC1sZXZlbCBjbGFzc2VzIGlmIHJlcXVpcmVkDQoJCSRydW5uaW5nY2xhc3Mg PSBhcnJheV91bmlxdWUoJHJ1bm5pbmdjbGFzcyk7DQoJCWlmIChpbl9hcnJheSgiY2VsbHBs dXMiLCAkdGhpcy0+Y2xzX2xldikpIHsNCgkJCSRzbWRfY2FsX2ZsYWcgPSBhcnJheV9tZXJn ZSgkc21kX2NhbF9mbGFnLCAkZmxhZ3MpOw0KCQl9DQoNCgkJaWYgKCR0aGlzLT5jZWxsZm9y bSkgew0KCQkJJHRoaXN0aW1lID0gbWt0aW1lKDAsIDAsIDAsICR0aGlzLT5tb250aCwgJHRo ZWRheSwgJHRoaXMtPnllYXIpOw0KCQkJJHNtZF9jYWxpbmZvWydpZCddID0gJHRoaXMtPnRh YmxlSUQ7DQoJCQkkc21kX2RhdGVbJ3knXSA9ICR0aGlzLT55ZWFyOw0KCQkJJHNtZF9kYXRl WydtJ10gPSAkdGhpcy0+bW9udGg7DQoJCQkkc21kX2RhdGVbJ3cnXSA9IHN0cmZ0aW1lKHNt ZF9jYWxfcmVmb3JtYXRfd2luKCclVicsICR0aGlzdGltZSksICR0aGlzdGltZSk7DQoJCQkk c21kX2RhdGVbJ2l5J10gPSBzdHJmdGltZShzbWRfY2FsX3JlZm9ybWF0X3dpbignJUcnLCAk dGhpc3RpbWUpLCAkdGhpc3RpbWUpOw0KCQkJJHNtZF9kYXRlWydkJ10gPSAkdGhlZGF5Ow0K CQkJJHJlcHMgPSBhcnJheSgNCgkJCQkne2V2aWR9JyA9PiAkc21kX2NhbGluZm9bJ2V2aWQn XSwNCgkJCQkne3N0YW5kYXJkfScgPT4gam9pbignJywkZm91dFsnc3RhbmRhcmQnXSksDQoJ CQkJJ3tyZWN1cn0nID0+IGpvaW4oJycsJGZvdXRbJ3JlY3VyJ10pLA0KCQkJCSd7cmVjdXJm aXJzdH0nID0+IGpvaW4oJycsJGZvdXRbJ3JlY3VyZmlyc3QnXSksDQoJCQkJJ3thbGxyZWN1 cn0nID0+IGpvaW4oJycsYXJyYXlfbWVyZ2UoJGZvdXRbJ3JlY3VyJ10sICRmb3V0WydyZWN1 cmZpcnN0J10pKSwNCgkJCQkne211bHRpZmlyc3R9JyA9PiBqb2luKCcnLCRmb3V0WydtdWx0 aWZpcnN0J10pLA0KCQkJCSd7bXVsdGlwcmV2fScgPT4gam9pbignJywkZm91dFsnbXVsdGlw cmV2J10pLA0KCQkJCSd7bXVsdGl9JyA9PiBqb2luKCcnLCRmb3V0WydtdWx0aWxhc3QnXSks DQoJCQkJJ3ttdWx0aWxhc3R9JyA9PiBqb2luKCcnLCRmb3V0WydtdWx0aWxhc3QnXSksDQoJ CQkJJ3thbGxtdWx0aX0nID0+IGpvaW4oJycsYXJyYXlfbWVyZ2UoJGZvdXRbJ211bHRpZmly c3QnXSwkZm91dFsnbXVsdGknXSwkZm91dFsnbXVsdGlwcmV2J10sJGZvdXRbJ211bHRpbGFz dCddKSksDQoJCQkJJ3tjYW5jZWx9JyA9PiBqb2luKCcnLCRmb3V0WydjYW5jZWwnXSksDQoJ CQkJJ3tleHRyYX0nID0+IGpvaW4oJycsJGZvdXRbJ2V4dHJhJ10pLA0KCQkJCSd7ZXZlbnRz fScgPT4gam9pbignJywkb3V0KSwNCgkJCQkne2RheX0nID0+ICR0aGVkYXksDQoJCQkJJ3tk YXl6ZXJvc30nID0+IHN0cl9wYWQoJHRoZWRheSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLA0K CQkJCSd7d2Vla2RheX0nID0+ICgoaXNfYXJyYXkoJHRoaXMtPmRheU5hbWVGbXQpKSA/ICR0 aGlzLT5kYXlOYW1lc1tkYXRlKCd3JywkdGhpc3RpbWUpXSA6IHN0cmZ0aW1lKCR0aGlzLT5k YXlOYW1lRm10LCAkdGhpc3RpbWUpKSwNCgkJCQkne3dlZWtkYXlhYmJyfScgPT4gc3RyZnRp bWUoJyVhJywgJHRoaXN0aW1lKSwNCgkJCQkne3dlZWtkYXlmdWxsfScgPT4gc3RyZnRpbWUo JyVBJywgJHRoaXN0aW1lKSwNCgkJCQkne3dlZWt9JyA9PiAkc21kX2RhdGVbJ3cnXSwNCgkJ CQkne21vbnRofScgPT4gJHRoaXMtPm1vbnRoLA0KCQkJCSd7bW9udGh6ZXJvc30nID0+IHN0 cl9wYWQoJHRoaXMtPm1vbnRoLCAyLCAnMCcsIFNUUl9QQURfTEVGVCksDQoJCQkJJ3ttb250 aG5hbWV9JyA9PiAoKGlzX2FycmF5KCR0aGlzLT5tdGhOYW1lRm10KSkgPyAkdGhpcy0+bXRo TmFtZXNbZGF0ZSgnbicsJHRoaXN0aW1lKV0gOiBzdHJmdGltZSgkdGhpcy0+bXRoTmFtZUZt dCwgJHRoaXN0aW1lKSksDQoJCQkJJ3ttb250aG5hbWVhYmJyfScgPT4gc3RyZnRpbWUoJyVi JywgJHRoaXN0aW1lKSwNCgkJCQkne21vbnRobmFtZWZ1bGx9JyA9PiBzdHJmdGltZSgnJUIn LCAkdGhpc3RpbWUpLA0KCQkJCSd7eWVhcn0nID0+ICR0aGlzLT55ZWFyLA0KCQkJCSd7c2hv cnR5ZWFyfScgPT4gc3RyZnRpbWUoJyV5JywgJHRoaXN0aW1lKSwNCgkJCQkne2lzb3llYXJ9 JyA9PiAkc21kX2RhdGVbJ2l5J10sDQoJCQkJJ3tzaG9ydGlzb3llYXJ9JyA9PiBzdHJmdGlt ZShzbWRfY2FsX3JlZm9ybWF0X3dpbignJWcnLCAkdGhpc3RpbWUpLCAkdGhpc3RpbWUpLA0K CQkJKTsNCgkJCSRjZWxsb3V0ID0gcGFyc2Uoc3RydHIoJHRoaXMtPmNlbGxmb3JtLCAkcmVw cykpOw0KCQkJJGNhcnJheSA9IGFycmF5X21lcmdlKCRydW5uaW5nY2xhc3MsICRzbWRfY2Fs X3VjbHMpOw0KCQkJJHNtZF9jYWxfdWNscyA9IGFycmF5KCk7DQoNCgkJCXJldHVybiBkb1Rh ZygkY2VsbG91dCwndGQnLGpvaW4oJyAnLCRjYXJyYXkpKTsNCgkJfSBlbHNlIHsNCgkJCXJl dHVybiBkb1RhZyhqb2luKCcnLCRvdXQpLCd0ZCcsam9pbignICcsJHJ1bm5pbmdjbGFzcykp Ow0KCQl9DQoJfQ0KDQoJZnVuY3Rpb24gZGlzcGxheSgkc3RhdGljPWZhbHNlLCAkZnV0dXJl PWZhbHNlKSB7DQoJCSRzdW0gPSAoJHRoaXMtPnRibFN1bW1hcnkpID8gJyBzdW1tYXJ5PSIn LiR0aGlzLT50YmxTdW1tYXJ5LiciJyA6ICcnOw0KCQkkaWQgPSAoJHRoaXMtPnRhYmxlSUQp ID8gJyBpZD0iJy4kdGhpcy0+dGFibGVJRC4nIicgOiAnJzsNCgkJJGNbXSA9ICgkdGhpcy0+ dGJsQ2FwdGlvbikgPyAnPGNhcHRpb24+Jy4kdGhpcy0+dGJsQ2FwdGlvbi4nPC9jYXB0aW9u PicgOiAnJzsNCgkJJGNbXSA9ICR0aGlzLT5kc3BIZWFkZXIoJHN0YXRpYywgJGZ1dHVyZSk7 DQoJCSRjW10gPSAkdGhpcy0+ZHNwRGF5TmFtZXMoKTsNCgkJJGNbXSA9ICR0aGlzLT5kc3BE YXlDZWxscygpOw0KDQoJCXJldHVybiBkb1RhZyhqb2luKCcnLCRjKSwndGFibGUnLCR0aGlz LT50YWJsZWNsYXNzLCRzdW0uJGlkKTsNCgl9DQoNCglmdW5jdGlvbiBkc3BIZWFkZXIoJHN0 YXRpYywgJGZ1dHVyZSkgew0KCQlnbG9iYWwgJHByZXRleHQsICRzbWRfY2FsaW5mbzsNCg0K CQkkY3Vycm1vID0gJHRoaXMtPm1vbnRoOw0KCQkkY3VycnlyID0gJHRoaXMtPnllYXI7DQoJ CSRuYXZwY2xhc3MgPSAkdGhpcy0+Z2V0TmF2SW5mbygicGMiKTsNCgkJJG5hdm5jbGFzcyA9 ICR0aGlzLT5nZXROYXZJbmZvKCJuYyIpOw0KCQkkbmF2cGFycm93ID0gJHRoaXMtPmdldE5h dkluZm8oInBhIik7DQoJCSRuYXZuYXJyb3cgPSAkdGhpcy0+Z2V0TmF2SW5mbygibmEiKTsN CgkJJG5hdmlkID0gJHRoaXMtPmdldE5hdkluZm8oImlkIik7DQoJCSRuYXZwY2xhc3MgPSAo JG5hdnBjbGFzcykgPyAnIGNsYXNzPSInLiRuYXZwY2xhc3MuJyInIDogJyc7DQoJCSRuYXZu Y2xhc3MgPSAoJG5hdm5jbGFzcykgPyAnIGNsYXNzPSInLiRuYXZuY2xhc3MuJyInIDogJyc7 DQoJCSRmb3B0cyA9ICR0aGlzLT5mb3B0czsNCg0KCQkkc2VjID0gKGlzc2V0KCRzbWRfY2Fs aW5mb1sncyddKSAmJiAhZW1wdHkoJHNtZF9jYWxpbmZvWydzJ10pKSA/ICRzbWRfY2FsaW5m b1sncyddIDogJyc7DQoJCWZvcmVhY2ggKCR0aGlzLT5tYWludGFpbiBhcyAkY29sKSB7DQoJ CQlzd2l0Y2ggKCRjb2wpIHsNCgkJCQljYXNlICJzZWN0aW9uIjoNCgkJCQkJJHNlYyA9ICgk cHJldGV4dFsncyddKSA/ICRwcmV0ZXh0WydzJ10gOiAkc2VjOw0KCQkJCQlicmVhazsNCgkJ CQljYXNlICJhcnRpY2xlIjoNCgkJCQkJaWYgKCRwcmV0ZXh0WydpZCddKSB7DQoJCQkJCQkk Zm9wdHMgPSBhcnJheSgnaWQnID0+ICRwcmV0ZXh0WydpZCddKSArICRmb3B0czsNCgkJCQkJ fQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICJjYXRlZ29yeSI6DQoJCQkJCWlmICgkcHJldGV4 dFsnYyddKSB7DQoJCQkJCQkkZm9wdHMgPSBhcnJheSgnYycgPT4gJHByZXRleHRbJ2MnXSkg KyAkZm9wdHM7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiYXV0aG9yIjoNCgkJ CQkJaWYgKGdwcygnYXV0aG9yJykpIHsNCgkJCQkJCSRmb3B0cyA9IGFycmF5KCdhdXRob3In ID0+IGdwcygnYXV0aG9yJykpICsgJGZvcHRzOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJ CWNhc2UgInBnIjoNCgkJCQkJaWYgKCRwcmV0ZXh0WydwZyddKSB7DQoJCQkJCQkkZm9wdHMg PSBhcnJheSgncGcnID0+ICRwcmV0ZXh0WydwZyddKSArICRmb3B0czsNCgkJCQkJfQ0KCQkJ CQlicmVhazsNCgkJCQljYXNlICJjYWxpZCI6DQoJCQkJCWlmICgkdGhpcy0+dGFibGVJRCkg ew0KCQkJCQkJJGZvcHRzID0gYXJyYXkoJ2NhbGlkJyA9PiAkdGhpcy0+dGFibGVJRCkgKyAk Zm9wdHM7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJZGVmYXVsdDoNCgkJCQkJaWYgKGdw cygkY29sKSkgew0KCQkJCQkJJGZvcHRzID0gYXJyYXkoJGNvbCA9PiBncHMoJGNvbCkpICsg JGZvcHRzOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCSRmb3B0cyA9IGFy cmF5X3VuaXF1ZSgkZm9wdHMpOw0KCQkkZmlsdGVycyA9IGFycmF5KCk7DQoJCSRmaWx0ZXJI aWQgPSBhcnJheSgpOw0KCQlpZiAoISRzdGF0aWMpIHsNCgkJCWZvcmVhY2goJGZvcHRzIGFz ICRrZXkgPT4gJHZhbCkgew0KCQkJCSRmaWx0ZXJzW10gPSAka2V5Lic9Jy4kdmFsOw0KCQkJ CSRmaWx0ZXJIaWRbXSA9IGhJbnB1dCgka2V5LCAkdmFsKTsNCgkJCX0NCgkJfQ0KCQkkZmls dGVyVVJMID0gam9pbihhLCAkZmlsdGVycyk7DQoNCgkJLy8gV2VlayBzZWxlY3QgbGlzdA0K CQlpZiAoJHRoaXMtPnVzZVNlbGVjdG9yKCd3ZWVrJykgJiYgISRzdGF0aWMpIHsNCgkJCSRj dXJyd2sgPSAoJHRoaXMtPndlZWspID8gJHRoaXMtPndlZWsgOiBkYXRlKCdXJywgc2FmZV9z dHJ0b3RpbWUoJGN1cnJ5ci4iLSIuJGN1cnJtby4iLTEgMTI6MDAiKSk7DQoJCQlmb3IgKCAk aWR4ID0gMTsgJGlkeCA8PSA1MzsgJGlkeCsrICkgew0KCQkJCSR0YWdhdHRzID0gJyB2YWx1 ZT0iJy4kaWR4LiciJzsNCgkJCQlpZiAoICRpZHggPT0gJGN1cnJ3ayApICR0YWdhdHRzIC49 ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7DQoJCQkJJG9wdGlvbnRhZ3NbXSA9IGRvVGFnKCR0 aGlzLT5zZWxwZnhbJ3dlZWsnXS5zdHJfcGFkKCRpZHgsIDIsICcwJywgU1RSX1BBRF9MRUZU KS4kdGhpcy0+c2Vsc2Z4Wyd3ZWVrJ10sICdvcHRpb24nLCAnJywgJHRhZ2F0dHMpOw0KCQkJ fQ0KCQkJJHNlbGVjdG9yW10gPSBkb1RhZyhqb2luKG4sICRvcHRpb250YWdzKSwgJ3NlbGVj dCcsICgoJHRoaXMtPm15d3JhcHRhZykgPyAnJyA6ICR0aGlzLT5teWNsYXNzKSwgJyBuYW1l PSInLiR0aGlzLT5yZW1hcFsndyddLiciJy4oKCR0aGlzLT5zZWxidG4pID8gJycgOiAnIG9u Y2hhbmdlPSJzdWJtaXQoKSInKSwgJycpDQogICAJCQkJLiAoKCR0aGlzLT51c2VTZWxlY3Rv cigneWVhcicpKSA/ICcnIDogaElucHV0KCR0aGlzLT5yZW1hcFsneSddLCAkY3VycnlyKSk7 DQoJCQkkb3B0aW9udGFncyA9IGFycmF5KCk7IC8vIEJsYW5rIG91dA0KCQl9DQoNCgkJLy8g TW9udGggc2VsZWN0IGxpc3QgLSBub3RlIG1rdGltZSBoYXMgdGhlIGRheSBmb3JjZWQgdG8g MS4gSWYgbm90IHlvdSBnZXQNCgkJLy8gYml6YXJyZSByZXBlYXRlZCBtb250aCBuYW1lcyBv biB0aGUgMzFzdCBvZiBzb21lIG1vbnRocyA6LVwNCgkJaWYgKCEkdGhpcy0+dXNlU2VsZWN0 b3IoJ3dlZWsnKSkgew0KCQkJaWYgKCR0aGlzLT51c2VTZWxlY3RvcignbW9udGgnKSAmJiAh JHN0YXRpYykgew0KCQkJCWZvciAoICRpZHggPSAxOyAkaWR4IDw9IDEyOyAkaWR4KysgKSB7 DQoJCQkJCSR0YWdhdHRzID0gJyB2YWx1ZT0iJy4kaWR4LiciJzsNCgkJCQkJaWYgKCAkaWR4 ID09ICRjdXJybW8gKSAkdGFnYXR0cyAuPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOw0KCQkJ CQkkb3B0aW9udGFnc1tdID0gZG9UYWcoJHRoaXMtPnNlbHBmeFsnbW9udGgnXS4oKGlzX2Fy cmF5KCR0aGlzLT5tdGhOYW1lRm10KSkgPyAkdGhpcy0+bXRoTmFtZXNbZGF0ZSgnbicsbWt0 aW1lKDEyLDAsMCwkaWR4LDEpKV0gOiBzYWZlX3N0cmZ0aW1lKCR0aGlzLT5tdGhOYW1lRm10 LCBta3RpbWUoMTIsMCwwLCRpZHgsMSkgKSkuJHRoaXMtPnNlbHNmeFsnbW9udGgnXSwgJ29w dGlvbicsICcnLCAkdGFnYXR0cyk7DQoJCQkJfQ0KCQkJCSRzZWxlY3RvcltdID0gZG9UYWco am9pbihuLCAkb3B0aW9udGFncyksICdzZWxlY3QnLCAoKCR0aGlzLT5teXdyYXB0YWcpID8g JycgOiAkdGhpcy0+bXljbGFzcyksICcgbmFtZT0iJy4kdGhpcy0+cmVtYXBbJ20nXS4nIicu KCgkdGhpcy0+c2VsYnRuKSA/ICcnIDogJyBvbmNoYW5nZT0ic3VibWl0KCkiJyksICcnKQ0K CSAgIAkJCQkuICgoJHRoaXMtPnVzZVNlbGVjdG9yKCd5ZWFyJykpID8gJycgOiBoSW5wdXQo JHRoaXMtPnJlbWFwWyd5J10sICRjdXJyeXIpKTsNCgkJCQkkb3B0aW9udGFncyA9IGFycmF5 KCk7IC8vIEJsYW5rIG91dA0KCQkJfSBlbHNlIHsNCgkJCQkkc2VsZWN0b3JbXSA9IGRvVGFn KCR0aGlzLT5nZXRNb250aE5hbWUoKSwgJ3NwYW4nLCAoKCR0aGlzLT5teXdyYXB0YWcpID8g JycgOiAkdGhpcy0+bXljbGFzcykpOw0KCQkJfQ0KCQl9DQoNCgkJLy8gWWVhciBzZWxlY3Qg bGlzdA0KCQkkeTAgPSAkdGhpcy0+ZXlyOw0KCQkkeTEgPSAkdGhpcy0+bHlyOw0KCQlpZiAo JHRoaXMtPnVzZVNlbGVjdG9yKCd5ZWFyJykgJiYgKCR5MCAhPSAkeTEpICYmICEkc3RhdGlj KSB7DQoJCQlmb3IgKCAkaWR4ID0gJHkwOyAkaWR4IDw9ICR5MTsgJGlkeCsrICkgew0KCQkJ CSR0YWdhdHRzID0gJyB2YWx1ZT0iJy4kaWR4LiciJzsNCgkJCQlpZiAoICRpZHggPT0gJGN1 cnJ5ciApICR0YWdhdHRzIC49ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7DQoJCQkJJG9wdGlv bnRhZ3NbXSA9IGRvVGFnKCR0aGlzLT5zZWxwZnhbJ3llYXInXS4kaWR4LiR0aGlzLT5zZWxz ZnhbJ3llYXInXSwgJ29wdGlvbicsICcnLCAkdGFnYXR0cyk7DQoJCQl9DQoJCQkkc2VsZWN0 b3JbXSA9IGRvVGFnKGpvaW4obiwgJG9wdGlvbnRhZ3MpLCAnc2VsZWN0JywgKCgkdGhpcy0+ bXl3cmFwdGFnKSA/ICcnIDogJHRoaXMtPm15Y2xhc3MpLCAnIG5hbWU9IicuJHRoaXMtPnJl bWFwWyd5J10uJyInLigoJHRoaXMtPnNlbGJ0bikgPyAnJyA6ICcgb25jaGFuZ2U9InN1Ym1p dCgpIicpLCAnJykNCgkJCQkJLiAoKCR0aGlzLT51c2VTZWxlY3RvcignbW9udGgnKSB8fCAk dGhpcy0+dXNlU2VsZWN0b3IoJ3dlZWsnKSkgPyAnJyA6IGhJbnB1dCgkdGhpcy0+cmVtYXBb J20nXSwgJGN1cnJtbykpOw0KCQl9IGVsc2Ugew0KCQkJJHNlbGVjdG9yW10gPSBkb1RhZygk Y3VycnlyLCAnc3BhbicsICgoJHRoaXMtPm15d3JhcHRhZykgPyAnJyA6ICR0aGlzLT5teWNs YXNzKSk7DQoJCX0NCg0KCQkkZXh0cmFzID0gJyc7DQoJCWlmICghJHN0YXRpYyAmJiAoICR0 aGlzLT51c2VTZWxlY3RvcignbW9udGgnKSB8fCAkdGhpcy0+dXNlU2VsZWN0b3IoJ3llYXIn KSApKSB7DQoJCQlpZiAoJHRoaXMtPnNlbGJ0bikgew0KCQkJCSRleHRyYXMgLj0gZG9UYWco JycsICdpbnB1dCcsICdzbWRfY2FsX2lucHV0JywgJyB0eXBlPSJzdWJtaXQiIHZhbHVlPSIn LiR0aGlzLT5zZWxidG4uJyInKTsNCgkJCX0NCgkJCSRleHRyYXMgLj0gam9pbignJywgJGZp bHRlckhpZCk7DQoJCX0NCg0KCQkkdXJscCA9IHBhcnNlX3VybCgkcHJldGV4dFsncmVxdWVz dF91cmknXSk7DQoJCSRzZWxlY3RvciA9ICc8Zm9ybSBhY3Rpb249IicuJHVybHBbJ3BhdGgn XS4nIiBtZXRob2Q9ImdldCInLigoJG5hdmlkKSA/ICcgaWQ9IicuJG5hdmlkLiciJyA6ICcn KS4nPicuZG9UYWcoam9pbihzcCwgJHNlbGVjdG9yKS4kZXh0cmFzLCAkdGhpcy0+bXl3cmFw dGFnLCAkdGhpcy0+bXljbGFzcykuJzwvZm9ybT4nOw0KDQoJCSRuYXZfYmFja19saW5rID0g JHRoaXMtPm5hdmlnYXRpb24oJGN1cnJ5ciwgJGN1cnJtbywgJy0nLCAkZmlsdGVyVVJMLCAk c2VjKTsNCgkJJG5hdl9md2RfbGluayAgPSAkdGhpcy0+bmF2aWdhdGlvbigkY3VycnlyLCAk Y3Vycm1vLCAnKycsICRmaWx0ZXJVUkwsICRzZWMpOw0KDQoJCSRuYXZfYmFjayA9ICghJHN0 YXRpYyAmJiAkbmF2X2JhY2tfbGluaykgPyAnPGEgaHJlZj0iJy4kbmF2X2JhY2tfbGluay4n IicuJG5hdnBjbGFzcy4nPicuJG5hdnBhcnJvdy4nPC9hPicgOiAnJm5ic3A7JzsNCgkJJG5h dl9md2QgID0gKCEkc3RhdGljICYmICRmdXR1cmUgJiYgJG5hdl9md2RfbGluaykgPyAnPGEg aHJlZj0iJy4kbmF2X2Z3ZF9saW5rLiciJy4kbmF2bmNsYXNzLic+Jy4kbmF2bmFycm93Lic8 L2E+JyA6ICcmbmJzcDsnOw0KDQoJCSRjW10gPSBkb1RhZygkbmF2X2JhY2ssJ3RoJyk7DQoJ CSRjW10gPSAnPHRoIGNvbHNwYW49IicuKCgkdGhpcy0+c2hvd0lTT1dlZWspID8gNiA6IDUp LiciPicuJHNlbGVjdG9yLic8L3RoPic7DQoJCSRjW10gPSBkb1RhZygkbmF2X2Z3ZCwndGgn KTsNCg0KCQlyZXR1cm4gZG9UYWcoam9pbignJywkYyksJ3RyJywgJ3NtZF9jYWxfbmF2cm93 Jyk7DQoJfQ0KDQoJZnVuY3Rpb24gbmF2aWdhdGlvbigkeWVhciwkbW9udGgsJGRpcmVjdGlv biwkZmx0LCRzZWM9JycpIHsNCgkJZ2xvYmFsICRwZXJtbGlua19tb2RlOw0KDQoJCWlmKCRk aXJlY3Rpb24gPT0gJy0nKSB7DQoJCQlpZigkbW9udGggLSAxIDwgMSkgew0KCQkJCSRtb250 aCA9IDEyOw0KCQkJCSR5ZWFyIC09IDE7DQoJCQl9IGVsc2Ugew0KCQkJCSRtb250aCAtPSAx Ow0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJaWYoJG1vbnRoICsgMSA+IDEyKSB7DQoJCQkJJG1v bnRoID0gMTsNCgkJCQkkeWVhciArPSAxOw0KCQkJfSBlbHNlIHsNCgkJCQkkbW9udGggKz0g MTsNCgkJCX0NCgkJfQ0KDQoJCS8vIEFib3J0IGlmIHdlJ3JlIGFib3V0IHRvIGdvIG91dCBv ZiByYW5nZQ0KCQlpZiAoJHllYXIgPCAkdGhpcy0+ZXlyIHx8ICR5ZWFyID4gJHRoaXMtPmx5 cikgew0KCQkJcmV0dXJuICcnOw0KCQl9DQoJCSRmbHQgPSAoJGZsdCkgPyBhLiRmbHQgOiAn JzsNCgkJaWYoJHBlcm1saW5rX21vZGUgIT0gJ21lc3N5Jykgew0KCQkJJHVybCA9ICcnOw0K CQkJaWYgKCRzZWMgJiYgc3RycG9zKCRwZXJtbGlua19tb2RlLCAnc2VjdGlvbicgIT09IGZh bHNlKSkgew0KCQkJCSR1cmwgPSBodS4kc2VjLicvJy4oKCRwZXJtbGlua19tb2RlPT0nc2Vj dGlvbl9pZF90aXRsZScpID8gJHNtZF9jYWxpbmZvWydhcnRpZCddIDogJycpLiRzbWRfY2Fs aW5mb1snYXJ0aXRsZSddOw0KCQkJfQ0KCQkJcmV0dXJuICR1cmwuIj8iLiR0aGlzLT5yZW1h cFsnbSddLiI9JG1vbnRoIi5hLiR0aGlzLT5yZW1hcFsneSddLiI9JHllYXIiLiRmbHQ7DQoJ CX0gZWxzZSB7IC8vIGZvciBtZXNzeSBVUkxzIHdlIG5lZWQgdG8gYnVpbGQgdGhlIGVudGly ZSByZXF1ZXN0IHN0cmluZyBmaXJzdCwgdGhlbiB0YWNrIG9uIHRoZSByZXN0DQoJCQkkb3V0 ID0gbWFrZU91dCgnaWQnLCdzJywnYycsJ3EnLCdwZycsJ3AnLCdtb250aCcpOw0KCQkJJG91 dFsncyddID0gKCRzZWMpID8gJHNlYyA6ICRvdXRbJ3MnXTsNCgkJCSRyID0gJz8nOw0KCQkJ Zm9yZWFjaCgkb3V0IGFzICRrZXkgPT4gJHZhbCApIHsNCgkJCQkkciAuPSAoJHZhbCkgPyAi JGtleT0kdmFsIi5hIDogJyc7DQoJCQl9DQoJCQlyZXR1cm4gJHIuJHRoaXMtPnJlbWFwWydt J10uIj0kbW9udGgiLmEuJHRoaXMtPnJlbWFwWyd5J10uIj0keWVhciIuJGZsdDsNCgkJfQ0K CX0NCn0NCg0KLyoqDQoqIEJhc2ljIENhbGVuZGFyIGRhdGEgYW5kIGRpc3BsYXkNCiogaHR0 cDovL3d3dy5vc2Nhcm0ub3JnL3N0YXRpYy9wZy9jYWxlbmRhckNsYXNzLw0KKiBAYXV0aG9y IE9zY2FyIE1lcmlkYQ0KKiBAY3JlYXRlZCBKYW4gMTggMjAwNA0KKi8NCmNsYXNzIFNNRF9S YXdfQ2FsZW5kYXIgew0KdmFyICRnbXQgPSAxLCAkbGFuZywgJGRlYnVnID0gMDsNCnZhciAk eWVhciwgJGV5ciwgJGx5ciwgJG1vbnRoLCAkd2VlazsNCnZhciAkZGF5TmFtZUZtdCwgJG10 aE5hbWVGbXQsICRkYXlOYW1lcywgJG10aE5hbWVzLCAkc3RhcnREYXksICRlbmREYXksICRm aXJzdERheU9mV2VlayA9IDAsICRzdGFydE9mZnNldCA9IDA7DQp2YXIgJHNlbGVjdG9ycywg JHNlbGJ0biwgJHNlbHBmeCwgJHNlbHNmeDsNCnZhciAkc2hvd0lTT1dlZWssICRJU09XZWVr SGVhZCwgJElTT1dlZWtDZWxsOw0KdmFyICRjbHNfbGV2LCAkY2xzX3BmeCwgJGZvcHRzOw0K dmFyICRldndyYXB0YWcsICRteXdyYXB0YWc7DQp2YXIgJHJvd2NsYXNzLCAkY2VsbGNsYXNz LCAkZW1wdHljbGFzcywgJGlzb2NsYXNzLCAkbXljbGFzcywgJHRhYmxlSUQsICR0YmxTdW1t YXJ5LCAkdGJsQ2FwdGlvbjsNCnZhciAkbmF2cGNsYXNzLCAkbmF2bmNsYXNzLCAkbmF2cGFy cm93LCAkbmF2bmFycm93LCAkbmF2aWQ7DQp2YXIgJGhvbGlkYXlzLCAkY2VsbGZvcm0sICRo ZHJmb3JtLCAkbWFpbnRhaW4sICRyZW1hcDsNCi8qKg0KKiBDb25zdHJ1Y3Rvcg0KKg0KKiBA cGFyYW0gaW50ZWdlciwgeWVhcg0KKiBAcGFyYW0gaW50ZWdlciwgbW9udGgNCiogQHJldHVy biBvYmplY3QNCiogQHB1YmxpYw0KKi8NCmZ1bmN0aW9uIFNNRF9SYXdfQ2FsZW5kYXIgKCR5 ciwgJG1vLCAkZGVidWc9MCkgew0KCSR0aGlzLT5zZXREZWJ1ZygkZGVidWcpOw0KCSR0aGlz LT5zZXRZZWFyKCR5cik7DQoJJHRoaXMtPnNldE1vbnRoKCRtbyk7DQoJJHRoaXMtPnNldENs YXNzUHJlZml4KCdzbWRfY2FsXycpOw0KDQoJJHRoaXMtPnN0YXJ0VGltZSA9IHN0cnRvdGlt ZSggIiR5ci0kbW8tMDEgMDA6MDAiICk7DQoJJHRoaXMtPnN0YXJ0RGF5ID0gZGF0ZSggJ0Qn LCAkdGhpcy0+c3RhcnRUaW1lICk7DQoJJHRoaXMtPmVuZERheSA9IGRhdGUoICd0JywgJHRo aXMtPnN0YXJ0VGltZSApOw0KCSR0aGlzLT5lbmRUaW1lID0gc3RydG90aW1lKCAiJHlyLSRt by0iLiR0aGlzLT5lbmREYXkuIiAyMzo1OTo1OSIgKTsNCglpZiAoJHRoaXMtPmRlYnVnKSB7 DQoJCWVjaG8gIisrIFRISVMgTU9OVEgnUyBSRU5ERVJFRCBDQUxFTkRBUiBbIHN0YXJ0IHN0 YW1wIC8vIGVuZCBkYXRlIC8vIHN0YXJ0IGRheSAvLyBlbmQgc3RhbXAgLy8gZW5kIGRhdGUg Ly8gZW5kIGRheSBudW1iZXIgXSArKyI7DQoJCWRtcCgkdGhpcy0+c3RhcnRUaW1lLCBkYXRl KCdZLW0tZCBIOmk6cycsICR0aGlzLT5zdGFydFRpbWUpLCAkdGhpcy0+c3RhcnREYXksICR0 aGlzLT5lbmRUaW1lLCBkYXRlKCdZLW0tZCBIOmk6cycsICR0aGlzLT5lbmRUaW1lKSwgJHRo aXMtPmVuZERheSk7DQoJfQ0KCSR0aGlzLT5zZXROYW1lRm9ybWF0KCclYScsICdkJyk7DQoJ JHRoaXMtPnNldE5hbWVGb3JtYXQoJyVCJywgJ20nKTsNCgkkdGhpcy0+c2V0Rmlyc3REYXlP ZldlZWsoMCk7DQoJJHRoaXMtPnNldFNob3dJU09XZWVrKCcnKTsNCgkkdGhpcy0+c2V0VGFi bGVJRCgnJyk7DQoJJHRoaXMtPnNldFRhYmxlQ2xhc3MoJycpOw0KfQ0KLy8gPT09IGVuZCBD YWxlbmRhciA9PT0NCi8vIEdldHRlcnMNCmZ1bmN0aW9uIHVzZVNlbGVjdG9yKCR2YWwpIHsg cmV0dXJuIGluX2FycmF5KCR2YWwsICR0aGlzLT5zZWxlY3RvcnMpOyB9DQpmdW5jdGlvbiBn ZXREYXlOYW1lKCRkYXkpIHsgcmV0dXJuICgkdGhpcy0+ZGF5TmFtZXNbJGRheSU3XSk7IH0N CmZ1bmN0aW9uIGdldE1vbnRoTmFtZSgpIHsNCglpZiAoaXNfYXJyYXkoJHRoaXMtPm10aE5h bWVGbXQpKSB7DQoJCXJldHVybiAkdGhpcy0+bXRoTmFtZXNbZGF0ZSgnbicsJHRoaXMtPnN0 YXJ0VGltZSldOw0KCX0gZWxzZSB7DQoJCXJldHVybiBzdHJmdGltZSgkdGhpcy0+bXRoTmFt ZUZtdCwgJHRoaXMtPnN0YXJ0VGltZSk7DQoJfQ0KfQ0KZnVuY3Rpb24gZ2V0TmF2SW5mbygk dHlwZSkgew0KCSRyID0gJyc7DQoJc3dpdGNoICgkdHlwZSkgew0KCQljYXNlICJpZCI6ICRy ID0gJHRoaXMtPm5hdmlkOyBicmVhazsNCgkJY2FzZSAicGMiOiAkciA9ICR0aGlzLT5uYXZw Y2xhc3M7IGJyZWFrOw0KCQljYXNlICJuYyI6ICRyID0gJHRoaXMtPm5hdm5jbGFzczsgYnJl YWs7DQoJCWNhc2UgInBhIjogJHIgPSAkdGhpcy0+bmF2cGFycm93OyBicmVhazsNCgkJY2Fz ZSAibmEiOiAkciA9ICR0aGlzLT5uYXZuYXJyb3c7IGJyZWFrOw0KCX0NCglyZXR1cm4gJHI7 DQp9DQovLyBTZXR0ZXJzDQpmdW5jdGlvbiBzZXREZWJ1ZygkZCl7ICR0aGlzLT5kZWJ1ZyA9 ICRkOyB9DQpmdW5jdGlvbiBzZXRHTVQoJGIpeyAkdGhpcy0+Z210ID0gJGI7IH0NCmZ1bmN0 aW9uIHNldExhbmcoJGNvZGUpeyAkdGhpcy0+bGFuZyA9ICRjb2RlOyB9DQpmdW5jdGlvbiBz ZXRTdW1tYXJ5KCR0eHQpeyAkdGhpcy0+dGJsU3VtbWFyeSA9ICR0eHQ7IH0NCmZ1bmN0aW9u IHNldENhcHRpb24oJHR4dCl7ICR0aGlzLT50YmxDYXB0aW9uID0gJHR4dDsgfQ0KZnVuY3Rp b24gc2V0Q2VsbEZvcm0oJGZybSl7ICR0aGlzLT5jZWxsZm9ybSA9ICRmcm07IH0NCmZ1bmN0 aW9uIHNldEhkckZvcm0oJGZybSl7ICR0aGlzLT5oZHJmb3JtID0gJGZybTsgfQ0KZnVuY3Rp b24gc2V0VGFibGVJRCgkaWQpeyAkdGhpcy0+dGFibGVJRCA9ICRpZDsgfQ0KZnVuY3Rpb24g c2V0WWVhcigkeXIpeyAkdGhpcy0+eWVhciA9ICR5cjsgfQ0KZnVuY3Rpb24gc2V0RVllYXIo JHlyKXsgJHRoaXMtPmV5ciA9ICR5cjsgfQ0KZnVuY3Rpb24gc2V0TFllYXIoJHlyKXsgJHRo aXMtPmx5ciA9ICR5cjsgfQ0KZnVuY3Rpb24gc2V0TW9udGgoJG10aCl7ICR0aGlzLT5tb250 aCA9IChpbnQpJG10aDsgfQ0KZnVuY3Rpb24gc2V0V2Vlaygkd2spew0KCWlmICgkd2spIHsN CgkJJHdrID0gc3RyX3BhZCgkd2ssIDIsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJJHRoaXMt PndlZWsgPSAkd2s7DQoJCSR0aGlzLT5tb250aCA9IHNhZmVfc3RyZnRpbWUoIiVtIiwgc3Ry dG90aW1lKCR0aGlzLT55ZWFyLiJXIi4kd2spKTsNCgl9DQp9DQpmdW5jdGlvbiBzZXROYXZL ZWVwKCRhcil7ICR0aGlzLT5tYWludGFpbiA9ICRhcjsgfQ0KZnVuY3Rpb24gc2V0U2hvd0lT T1dlZWsoJHZhbCkgew0KCSR0aGlzLT5zaG93SVNPV2VlayA9ICgkdmFsKSA/IHRydWUgOiBm YWxzZTsNCglpZiAoJHZhbCkgew0KCQkkdmFsID0gZG9fbGlzdCgkdmFsKTsNCgkJJHRoaXMt PklTT1dlZWtIZWFkID0gJHZhbFswXTsNCgkJJHRoaXMtPklTT1dlZWtDZWxsID0gKGlzc2V0 KCR2YWxbMV0pKSA/ICR2YWxbMV0gOiAne3dlZWt9JzsNCgl9DQp9DQpmdW5jdGlvbiBzZXRS ZW1hcCgkbWFwKXsgJHRoaXMtPnJlbWFwID0gJG1hcDsgfQ0KZnVuY3Rpb24gc2V0Q2xhc3NM ZXZlbHMoJGNscyl7ICR0aGlzLT5jbHNfbGV2ID0gJGNsczsgfQ0KZnVuY3Rpb24gc2V0Q2xh c3NQcmVmaXgoJGNscyl7ICR0aGlzLT5jbHNfcGZ4ID0gJGNsczsgfQ0KZnVuY3Rpb24gc2V0 RXZlbnRXcmFwdGFnKCR3cmFwKXsgJHRoaXMtPmV2d3JhcHRhZyA9ICR3cmFwOyB9DQpmdW5j dGlvbiBzZXRNWVdyYXB0YWcoJHdyYXApeyAkdGhpcy0+bXl3cmFwdGFnID0gJHdyYXA7IH0N CmZ1bmN0aW9uIHNldFRhYmxlQ2xhc3MoJGNscykgeyAkdGhpcy0+dGFibGVjbGFzcyA9ICgk Y2xzKSA/ICR0aGlzLT5jbHNfcGZ4LiRjbHMgOiAnJzsgfQ0KZnVuY3Rpb24gc2V0Um93Q2xh c3MoJGNscyl7ICR0aGlzLT5yb3djbGFzcyA9ICgkY2xzKSA/ICR0aGlzLT5jbHNfcGZ4LiRj bHMgOiAnJzsgfQ0KZnVuY3Rpb24gc2V0Q2VsbENsYXNzKCRjbHMpeyAkdGhpcy0+Y2VsbGNs YXNzID0gKCRjbHMpID8gJHRoaXMtPmNsc19wZnguJGNscyA6ICcnOyB9DQpmdW5jdGlvbiBz ZXRFbXB0eUNsYXNzKCRjbHMpeyAkdGhpcy0+ZW1wdHljbGFzcyA9ICgkY2xzKSA/ICR0aGlz LT5jbHNfcGZ4LiRjbHMgOiAnJzsgfQ0KZnVuY3Rpb24gc2V0SVNPV2Vla0NsYXNzKCRjbHMp eyAkdGhpcy0+aXNvY2xhc3MgPSAoJGNscykgPyAkdGhpcy0+Y2xzX3BmeC4kY2xzIDogJyc7 IH0NCmZ1bmN0aW9uIHNldE5hdkluZm8oJGNsc3AsICRjbHNuLCAkYXJycCwgJGFycm4sICRu aWQpew0KCSR0aGlzLT5uYXZwY2xhc3MgPSAoJGNsc3ApID8gJHRoaXMtPmNsc19wZnguJGNs c3AgOiAnJzsNCgkkdGhpcy0+bmF2bmNsYXNzID0gKCRjbHNuKSA/ICR0aGlzLT5jbHNfcGZ4 LiRjbHNuIDogJyc7DQoJJHRoaXMtPm5hdnBhcnJvdyA9ICgkYXJycCkgPyAkYXJycCA6ICcn Ow0KCSR0aGlzLT5uYXZuYXJyb3cgPSAoJGFycm4pID8gJGFycm4gOiAnJzsNCgkkdGhpcy0+ bmF2aWQgPSAoJG5pZCkgPyAkdGhpcy0+Y2xzX3BmeC4kbmlkIDogJyc7DQp9DQpmdW5jdGlv biBzZXRNWUNsYXNzKCRjbHMpeyAkdGhpcy0+bXljbGFzcyA9ICgkY2xzKSA/ICR0aGlzLT5j bHNfcGZ4LiRjbHMgOiAnJzsgfQ0KZnVuY3Rpb24gc2V0RmlsdGVyT3B0cygkZikgeyAkdGhp cy0+Zm9wdHMgPSAkZjsgfQ0KZnVuY3Rpb24gc2V0SG9saWRheXMoJGhvbHMpIHsgJHRoaXMt PmhvbGlkYXlzID0gJGhvbHM7IH0NCmZ1bmN0aW9uIHNldFNlbGVjdG9ycygkc2VsLCAkYnRu KSB7DQoJZm9yZWFjaCAoJHNlbCBhcyAkaWR4ID0+ICRpdGVtKSB7DQoJCSRzZWxwYXJ0cyA9 IGV4cGxvZGUoIjoiLCAkaXRlbSk7DQoJCSRzZWxbJGlkeF0gPSAkc2VscGFydHNbMF07DQoJ CSR0aGlzLT5zZWxwZnhbJHNlbHBhcnRzWzBdXSA9IChpc3NldCgkc2VscGFydHNbMV0pKSA/ ICRzZWxwYXJ0c1sxXSA6ICcnOw0KCQkkdGhpcy0+c2Vsc2Z4WyRzZWxwYXJ0c1swXV0gPSAo aXNzZXQoJHNlbHBhcnRzWzJdKSkgPyAkc2VscGFydHNbMl0gOiAnJzsNCgl9DQoJJHRoaXMt PnNlbGVjdG9ycyA9ICRzZWw7DQoJJHRoaXMtPnNlbGJ0biA9ICRidG47DQp9DQpmdW5jdGlv biBzZXRGaXJzdERheU9mV2VlaygkZCkgew0KCSR0aGlzLT5maXJzdERheU9mV2VlayA9ICgo aW50KSRkIDw9IDYgYW5kIChpbnQpJGQgPj0gMCkgPyAoaW50KSRkIDogMDsNCgkkdGhpcy0+ c3RhcnRPZmZzZXQgPSBkYXRlKCd3JywgJHRoaXMtPnN0YXJ0VGltZSkgLSAkdGhpcy0+Zmly c3REYXlPZldlZWs7DQoJaWYgKCAkdGhpcy0+c3RhcnRPZmZzZXQgPCAwICkgew0KCQkkdGhp cy0+c3RhcnRPZmZzZXQgPSA3IC0gYWJzKCR0aGlzLT5zdGFydE9mZnNldCk7DQoJfQ0KfQ0K LyoqDQoqIGZybTogYW55IHZhbGlkIFBIUCBzdHJmdGltZSgpIHN0cmluZyBvciBBQkJSL0ZV TEwNCiogdHlwOiBkIHRvIHNldCBkYXksIG0gdG8gc2V0IG1vbnRoIGZvcm1hdA0KKi8NCmZ1 bmN0aW9uIHNldE5hbWVGb3JtYXQoJGZybSwgJHR5cD0iZCIpIHsNCglzd2l0Y2ggKCRmcm0p IHsNCgkJY2FzZSAiZnVsbCI6DQoJCWNhc2UgIkZVTEwiOg0KCQkJJGZtdCA9ICgkdHlwID09 ICdkJykgPyAiJUEiIDogIiVCIjsNCgkJCWJyZWFrOw0KCQljYXNlICJhYmJyIjoNCgkJY2Fz ZSAiQUJCUiI6DQoJCQkkZm10ID0gKCR0eXAgPT0gJ2QnKSA/ICIlYSIgOiAiJWIiOw0KCQkJ YnJlYWs7DQoJCWRlZmF1bHQ6DQoJCQlpZiAoc3RycG9zKCRmcm0sICclJykgPT09IDApIHsN CgkJCQkkZm10ID0gJGZybTsNCgkJCX0gZWxzZSB7DQoJCQkJJGZybSA9IHRyaW0oJGZybSwg J3t9Jyk7DQoJCQkJJGZybSA9IGRvX2xpc3QoJGZybSk7DQoJCQkJJGZtdCA9ICRmcm07DQoJ CQl9DQoJCQlicmVhazsNCgl9DQoNCglpZiAoJHR5cCA9PSAiZCIpIHsNCgkJJHRoaXMtPmRh eU5hbWVGbXQgPSAkZm10Ow0KCQkkdGhpcy0+ZGF5TmFtZXMgPSBhcnJheSgpOw0KDQoJCS8v IFRoaXMgaXMgZG9uZSB0byBtYWtlIHN1cmUgU3VuZGF5IGlzIGFsd2F5cyB0aGUgZmlyc3Qg ZGF5IG9mIG91ciBhcnJheQ0KCQkvLyBVbml4IHRpbWUgZ2V0cyBhIGxpdHRsZSBmdW5reSBh dCB0aGUgYmVnaW5uaW5nIGRlcGVuZGluZyB1cG9uIHRoZSB0aW1lem9uZS4NCgkJJHNlcnZl cm9mZnNldCA9IGdtbWt0aW1lKDAsMCwwKSAtIG1rdGltZSgwLDAsMCk7DQoJCSRzdGFydCA9 ICgkc2VydmVyb2Zmc2V0IDwgMCkgPyA0IDogMzsNCgkJJGVuZCA9ICRzdGFydCArIDc7DQoJ CWZvcigkaT0kc3RhcnQ7ICRpPCRlbmQ7ICRpKyspIHsNCgkJCWlmIChpc19hcnJheSgkZm10 KSkgew0KCQkJCSR0aGlzLT5kYXlOYW1lc1tdID0gJGZtdFskaS0kc3RhcnRdOw0KCQkJfSBl bHNlIHsNCgkJCQkkdGhpcy0+ZGF5TmFtZXNbXSA9IHVjZmlyc3Qoc3RyZnRpbWUoJGZtdCwg ODY0MDAqJGkpKTsNCgkJCX0NCgkJfQ0KCX0gZWxzZSB7DQoJCSR0aGlzLT5tdGhOYW1lRm10 ID0gJGZtdDsNCgkJJHRoaXMtPm10aE5hbWVzID0gYXJyYXkoKTsNCgkJZm9yICgkaT0wOyAk aTwxMjsgJGkrKykgew0KCQkJaWYgKGlzX2FycmF5KCRmbXQpKSB7DQoJCQkJJHRoaXMtPm10 aE5hbWVzWyRpKzFdID0gJGZtdFskaV07DQoJCQl9IGVsc2Ugew0KCQkJCSR0aGlzLT5tdGhO YW1lc1skaSsxXSA9IHVjZmlyc3Qoc3RyZnRpbWUoJGZtdCwgODY0MDAqJGkpKTsNCgkJCX0N CgkJfQ0KCX0NCn0NCi8qKg0KKiBSZXR1cm4gbWFya3VwIGZvciBkaXNwbGF5aW5nIHRoZSBj YWxlbmRhci4NCiogQHJldHVybg0KKiBAcHVibGljDQoqLw0KZnVuY3Rpb24gZGlzcGxheSAo ICkgew0KCSRpZCA9ICgkdGhpcy0+dGFibGVJRCkgPyAnIGlkPSInLiR0aGlzLT50YWJsZUlE LiciJyA6ICcnOw0KCSRjW10gPSAnPHRhYmxlJy4kaWQuJz4nOw0KCSRjW10gPSAkdGhpcy0+ ZHNwRGF5TmFtZXMoKTsNCgkkY1tdID0gJHRoaXMtPmRzcERheUNlbGxzKCk7DQoJJGNbXSA9 ICc8L3RhYmxlPic7DQoNCglyZXR1cm4gam9pbignJywkYyk7DQp9DQovLyA9PT0gZW5kIGRp c3BsYXkgPT09DQovKioNCiogRGlzcGxheXMgdGhlIHJvdyBvZiBkYXkgbmFtZXMuDQoqIEBy ZXR1cm4gc3RyaW5nDQoqIEBwcml2YXRlDQoqLw0KZnVuY3Rpb24gZHNwRGF5TmFtZXMgKCAp IHsNCglpZiAoJHRoaXMtPmhkcmZvcm0pIHsNCgkJJHJlcHMgPSBhcnJheSgNCgkJCSd7Zmly c3RkYXl9JyA9PiAkdGhpcy0+Zmlyc3REYXlPZldlZWssDQoJCQkne2RheW5hbWVzfScgPT4g am9pbignLCcsICR0aGlzLT5kYXlOYW1lcyksDQoJCQkne2lzb3dlZWtoZWFkfScgPT4gJHRo aXMtPklTT1dlZWtIZWFkLA0KCQkJJ3t3ZWVrfScgPT4gZGF0ZSgnVycsICR0aGlzLT5zdGFy dFRpbWUpLA0KCQkJJ3ttb250aH0nID0+IGRhdGUoJ24nLCAkdGhpcy0+c3RhcnRUaW1lKSwN CgkJCSd7eWVhcn0nID0+IGRhdGUoJ1knLCAkdGhpcy0+c3RhcnRUaW1lKSwNCgkJCSd7aXNv eWVhcn0nID0+IGRhdGUoJ28nLCAkdGhpcy0+c3RhcnRUaW1lKSwNCgkJKTsNCg0KCQlyZXR1 cm4gcGFyc2Uoc3RydHIoJHRoaXMtPmhkcmZvcm0sICRyZXBzKSk7DQoJfSBlbHNlIHsNCgkJ JGNbXSA9ICc8dGhlYWQ+PHRyIGNsYXNzPSJzbWRfY2FsX2RheW5hbWVzIj4nOw0KDQoJCSRp ID0gJHRoaXMtPmZpcnN0RGF5T2ZXZWVrOw0KCQkkaiA9IDA7IC8vIGNvdW50IG51bWJlciBv ZiBkYXlzIGRpc3BsYXllZA0KCQkkZW5kID0gZmFsc2U7DQoNCgkJaWYgKCR0aGlzLT5zaG93 SVNPV2Vlaykgew0KCQkJJGNbXSA9ICI8dGg+Ii4kdGhpcy0+SVNPV2Vla0hlYWQuIjwvdGg+ IjsNCgkJfQ0KCQlmb3IoJGogPSAwOyAkajw9NjsgJGorKywgJGkrKykgew0KCQkJaWYoJGkg PT0gNykgeyAkaSA9IDA7IH0NCgkJCSRjW10gPSAnPHRoPicuJHRoaXMtPmdldERheU5hbWUo JGkpLiI8L3RoPiI7DQoJCX0NCg0KCQkkY1tdID0gJzwvdHI+PC90aGVhZD4nOw0KCQlyZXR1 cm4gam9pbignJywkYyk7DQoJfQ0KfQ0KLy8gPT09IGVuZCBkc3BEYXlOYW1lcyA9PT0NCi8q Kg0KKiBEaXNwbGF5cyBhbGwgZGF5IGNlbGxzIGZvciB0aGUgbW9udGgNCioNCiogQHJldHVy biBzdHJpbmcNCiogQHByaXZhdGUNCiovDQpmdW5jdGlvbiBkc3BEYXlDZWxscyAoICkgew0K CSRpID0gMDsgLy8gY2VsbCBjb3VudGVyDQoJJGVtcHR5Q2xhc3MgPSAkdGhpcy0+ZW1wdHlj bGFzczsNCgkkaXNvQ2xhc3MgPSAkdGhpcy0+aXNvY2xhc3M7DQoJJHJvd0NsYXNzID0gJHRo aXMtPnJvd2NsYXNzOw0KCSRyb3dDbGFzcyA9ICgkcm93Q2xhc3MpID8gJyBjbGFzcz0iJy4k cm93Q2xhc3MuJyInIDogJyc7DQoNCgkkY1tdID0gJzx0cicuJHJvd0NsYXNzLic+JzsNCg0K CWlmICgkdGhpcy0+c2hvd0lTT1dlZWspIHsNCgkJJHJlcHMgPSBhcnJheSgNCgkJCSd7d2Vl a30nID0+IGRhdGUoJ1cnLCAkdGhpcy0+c3RhcnRUaW1lKSwNCgkJCSd7bW9udGh9JyA9PiBk YXRlKCduJywgJHRoaXMtPnN0YXJ0VGltZSksDQoJCQkne3llYXJ9JyA9PiBkYXRlKCdZJywg JHRoaXMtPnN0YXJ0VGltZSksDQoJCQkne2lzb3llYXJ9JyA9PiBkYXRlKCdvJywgJHRoaXMt PnN0YXJ0VGltZSksDQoJCSk7DQoJCSR3a2NlbGwgPSBzdHJ0cigkdGhpcy0+SVNPV2Vla0Nl bGwsICRyZXBzKTsNCgkJJGNbXSA9ICc8dGQgY2xhc3M9IicuJGlzb0NsYXNzLiciPicuJHdr Y2VsbC4nPC90ZD4nOw0KCX0NCgkvLyBmaXJzdCBkaXNwbGF5IGVtcHR5IGNlbGxzIGJhc2Vk IG9uIHdoYXQgd2Vla2RheSB0aGUgbW9udGggc3RhcnRzIGluDQoJZm9yKCAkaj0wOyAkajwk dGhpcy0+c3RhcnRPZmZzZXQ7ICRqKysgKQl7DQoJCSRpKys7DQoJCSRjW10gPSAnPHRkIGNs YXNzPSInLiRlbXB0eUNsYXNzLiciPiZuYnNwOzwvdGQ+JzsNCgl9IC8vIGVuZCBvZmZzZXQg Y2VsbHMNCg0KCS8vIHdyaXRlIG91dCB0aGUgcmVzdCBvZiB0aGUgZGF5cywgYXQgZWFjaCBz dW5kYXksIHN0YXJ0IGEgbmV3IHJvdy4NCglmb3IoICRkPTE7ICRkPD0kdGhpcy0+ZW5kRGF5 OyAkZCsrICkgew0KCQkkaSsrOw0KCQkkY1tdID0gJHRoaXMtPmRzcERheUNlbGwoICRkICk7 DQoJCWlmICggJGklNyA9PSAwICkgeyAkY1tdID0gJzwvdHI+JzsgfQ0KCQlpZiAoICRkPCR0 aGlzLT5lbmREYXkgJiYgJGklNyA9PSAwICkgew0KCQkJJGNbXSA9ICc8dHInLiRyb3dDbGFz cy4nPic7DQoJCQlpZiAoJHRoaXMtPnNob3dJU09XZWVrKSB7DQoJCQkJJHRoZVRpbWUgPSBz YWZlX3N0cnRvdGltZSgkdGhpcy0+eWVhci4iLSIuJHRoaXMtPm1vbnRoLiItIi4oaW50KSgk ZCArIDEpIC4iIDAwOjAwIik7DQoJCQkJJHJlcHMgPSBhcnJheSgNCgkJCQkJJ3t3ZWVrfScg PT4gZGF0ZSgnVycsICR0aGVUaW1lKSwNCgkJCQkJJ3ttb250aH0nID0+IGRhdGUoJ24nLCAk dGhlVGltZSksDQoJCQkJCSd7eWVhcn0nID0+IGRhdGUoJ1knLCAkdGhlVGltZSksDQoJCQkJ CSd7aXNveWVhcn0nID0+IGRhdGUoJ28nLCAkdGhlVGltZSksDQoJCQkJKTsNCgkJCQkkd2tj ZWxsID0gc3RydHIoJHRoaXMtPklTT1dlZWtDZWxsLCAkcmVwcyk7DQoJCQkJJGNbXSA9ICc8 dGQgY2xhc3M9IicuJGlzb0NsYXNzLiciPicuJHdrY2VsbC4nPC90ZD4nOw0KCQkJfQ0KCQl9 DQoJfQ0KCS8vIGZpbGwgaW4gdGhlIGZpbmFsIHJvdw0KCSRsZWZ0ID0gNyAtICggJGklNyAp Ow0KCWlmICggJGxlZnQgPCA3KQl7DQoJCWZvciAoICRqPTA7ICRqPCRsZWZ0OyAkaisrICkJ ew0KCQkgICRjW10gPSAnPHRkIGNsYXNzPSInLiRlbXB0eUNsYXNzLiciPiZuYnNwOzwvdGQ+ JzsNCgkJfQ0KCQkkY1tdID0gIlxuXHQ8L3RyPiI7DQoJfQ0KCXJldHVybiBqb2luKCcnLCRj KTsNCn0NCi8vID09PSBlbmQgZHNwRGF5Q2VsbHMgPT09DQovKioNCiogb3V0cHV0cyB0aGUg Y29udGVudHMgZm9yIGEgZ2l2ZW4gZGF5DQoqDQoqIEBwYXJhbSBpbnRlZ2VyLCBkYXkNCiog QGFic3RyYWN0DQoqLw0KZnVuY3Rpb24gZHNwRGF5Q2VsbCAoICRkYXkgKSB7DQoJcmV0dXJu ICc8dGQ+Jy4kZGF5Lic8L3RkPic7DQp9DQovLyA9PT0gZW5kIGRheUNlbGwgPT09DQp9IC8v IGVuZCBjbGFzcw0KDQpmdW5jdGlvbiBzbWRfY2FsX21pbmlsaW5rKCRyb3csICRkYXksICRt b250aCwgJHllYXIsICR1c2VfcG9zdGVkPWZhbHNlKSB7DQoJZ2xvYmFsICRwZXJtbGlua19t b2RlOw0KDQoJaWYoICRwZXJtbGlua19tb2RlICE9ICd5ZWFyX21vbnRoX2RheV90aXRsZScg KSB7DQoJCSRsaW5rZGF0ZSA9ICgkdXNlX3Bvc3RlZCkgPyAkcm93Wydwb3N0ZWQnXSA6ICR5 ZWFyLictJy5zdHJfcGFkKCRtb250aCwyLCIwIixTVFJfUEFEX0xFRlQpLictJy5zdHJfcGFk KCRkYXksMiwiMCIsU1RSX1BBRF9MRUZUKTsNCgkJJGhyZWYgPSAnIGhyZWY9IicuaHUuJz9k YXRlPScuJGxpbmtkYXRlOw0KCQlpZigkcm93WydzZWN0aW9uJ10pIHsgJGhyZWYgPSAkaHJl Zi5hLidzPScuJHJvd1snc2VjdGlvbiddOyB9DQovLwkJaWYoJGNhdGVnb3J5KSB7ICRocmVm ID0gJGhyZWYuYS4nYz0nLiRjYXRlZ29yeTsgfQ0KCQkkaHJlZiAuPSAnIic7DQoJfSBlbHNl IHsNCgkJJHNlY3Rpb24gPSAoJHJvd1snc2VjdGlvbiddKSA/ICRyb3dbJ3NlY3Rpb24nXS4n LycgOiAnJzsNCgkJJGxpbmtkYXRlID0gKCR1c2VfcG9zdGVkKSA/IHByZWdfcmVwbGFjZSgi LSIsICIvIiwgJHJvd1sncG9zdGVkJ10pIDogJHllYXIuJy8nLnN0cl9wYWQoJG1vbnRoLDIs IjAiLFNUUl9QQURfTEVGVCkuJy8nLnN0cl9wYWQoJGRheSwyLCIwIixTVFJfUEFEX0xFRlQp Ow0KCQkkaHJlZiA9ICcgaHJlZj0iJy5odS4kc2VjdGlvbi4kbGlua2RhdGUuJyInOw0KCX0N Cg0KCXJldHVybiAkaHJlZjsNCn0NCg0KLy8gUGVyZm9ybSBvbmUgb2YgMiB0eXBlcyBvZiB0 ZXN0OiBhIGZsYWctYmFzZWQgdGVzdCwgb3IgYW4gaW5mby1iYXNlZCB0ZXN0DQpmdW5jdGlv biBzbWRfaWZfY2FsKCRhdHRzLCAkdGhpbmcpIHsNCglnbG9iYWwgJHNtZF9jYWxfZmxhZywg JHNtZF9jYWxpbmZvLCAkc21kX2RhdGU7DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQkn ZmxhZycgPT4gJycsDQoJCSdjYWxpZCcgPT4gJycsDQoJCSdpc295ZWFyJyA9PiAnJywNCgkJ J3llYXInID0+ICcnLA0KCQknbW9udGgnID0+ICcnLA0KCQknd2VlaycgPT4gJycsDQoJCSdk YXknID0+ICcnLA0KCQknbG9naWMnID0+ICdvcicsDQoJCSdkZWJ1ZycgPT4gJzAnLA0KCSks ICRhdHRzKSk7DQoNCgkkZmxhZyA9IGRvX2xpc3QoJGZsYWcpOw0KCSRjdHIgPSAkbnVtID0g MDsNCg0KCWlmICgkZGVidWcpIHsNCgkJZG1wKCRhdHRzKTsNCgl9DQoNCglpZiAoJGZsYWcg JiYgJGZsYWdbMF0gIT0gJycpIHsNCgkJJG51bSArPSBjb3VudCgkZmxhZyk7DQoJCWZvcmVh Y2ggKCRmbGFnIGFzICR3aGF0bm90KSB7DQoJCQlpZiAoZW1wdHkoJHdoYXRub3QpKSBjb250 aW51ZTsNCgkJCSRjdHIgKz0gKGluX2FycmF5KCR3aGF0bm90LCAkc21kX2NhbF9mbGFnKSB8 fCAoJHdoYXRub3QgPT0gJ1NNRF9BTlknICYmICFlbXB0eSgkc21kX2NhbF9mbGFnKSkpID8g MSA6IDA7DQoJCX0NCgl9DQoJaWYgKCRjYWxpZCkgew0KCQkkbnVtKys7DQoJCSRjdHIgKz0g KCRzbWRfY2FsaW5mb1snaWQnXSA9PT0gJGNhbGlkKSA/IDEgOiAwOw0KCX0NCglmb3JlYWNo IChhcnJheSgiaXkiID0+ICJpc295ZWFyIiwgInkiID0+ICJ5ZWFyIiwgIm0iID0+ICJtb250 aCIsICJ3IiA9PiAid2VlayIsICJkIiA9PiAiZGF5IikgYXMgJGlkeCA9PiAkdGVzdCkgew0K CQkkdGVzdGVyID0gJCR0ZXN0Ow0KCQkkY29tcGFyZSA9ICRzbWRfZGF0ZVskaWR4XTsNCg0K CQlpZiAoJHRlc3Rlcikgew0KCQkJJG51bSsrOw0KCQkJcHJlZ19tYXRjaCgnLyhbIT08Pl0r KT8oW1xkXSspLycsICR0ZXN0ZXIsICRtYXRjaGVzKTsNCgkJCWlmICgkZGVidWcpIHsNCgkJ CQlkbXAoIlRFU1QgSUY6ICIuICRjb21wYXJlLiAoKCRtYXRjaGVzWzFdKSA/ICRtYXRjaGVz WzFdIDogJz0nKSAuICRtYXRjaGVzWzJdICk7DQoJCQl9DQoJCQlzd2l0Y2ggKCRtYXRjaGVz WzFdKSB7DQoJCQkJY2FzZSAiISI6DQoJCQkJCSRjdHIgKz0gKCRjb21wYXJlIT0kbWF0Y2hl c1syXSkgPyAxIDogMDsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiPiI6DQoJCQkJCSRjdHIg Kz0gKCRjb21wYXJlPiRtYXRjaGVzWzJdKSA/IDEgOiAwOw0KCQkJCQlicmVhazsNCgkJCQlj YXNlICI+PSI6DQoJCQkJCSRjdHIgKz0gKCRjb21wYXJlPj0kbWF0Y2hlc1syXSkgPyAxIDog MDsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiPCI6DQoJCQkJCSRjdHIgKz0gKCRjb21wYXJl PCRtYXRjaGVzWzJdKSA/IDEgOiAwOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICI8PSI6DQoJ CQkJCSRjdHIgKz0gKCRjb21wYXJlPD0kbWF0Y2hlc1syXSkgPyAxIDogMDsNCgkJCQkJYnJl YWs7DQoJCQkJZGVmYXVsdDoNCgkJCQkJJGN0ciArPSAoJGNvbXBhcmU9PSRtYXRjaGVzWzJd KSA/IDEgOiAwOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCX0NCgkkcmVzdWx0ID0gKCgk Y3RyID09PSAkbnVtICYmICRsb2dpYyA9PSAiYW5kIikgfHwgJGN0ciA+IDAgJiYgJGxvZ2lj ID09ICJvciIpID8gdHJ1ZSA6IGZhbHNlOw0KCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhp bmcsICRyZXN1bHQpKTsNCn0NCg0KZnVuY3Rpb24gc21kX2NhbF9pbmZvKCRhdHRzKSB7DQoJ Z2xvYmFsICRwcmV0ZXh0LCAkdGhpc2FydGljbGUsICRzbWRfY2FsX2ZsYWcsICRzbWRfY2Fs aW5mbywgJHNtZF9kYXRlOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3R5cGUnID0+ ICdmbGFnJywNCgkJJ2pvaW4nID0+ICcgJywNCgkJJ2pvaW5fcHJlZml4JyA9PiAnU01EX0FV VE8nLA0KCQknaHRtbCcgPT4gMCwNCgkJJ2VzY2FwZScgPT4gJ2h0bWwnLA0KCSksICRhdHRz KSk7DQoNCgkvLyBUeXBlOiAwPWRhdGUsIDE9c21kX2NhbGluZm8sIDI9cHJldGV4dCwgMz10 aGlzYXJ0aWNsZSwgNChvciBvdGhlcik9dXNlciB2YWx1ZQ0KCSRtYXAgPSBhcnJheSgNCgkJ J3llYXInID0+IGFycmF5KDAsICd5JywpLA0KCQknaXNveWVhcicgPT4gYXJyYXkoMCwgJ2l5 JywgJ3knKSwNCgkJJ21vbnRoJyA9PiBhcnJheSgwLCAnbScpLA0KCQknd2VlaycgPT4gYXJy YXkoMCwgJ3cnKSwNCgkJJ2RheScgPT4gYXJyYXkoMCwgJ2QnKSwNCgkJJ3NlY3Rpb24nID0+ IGFycmF5KDMsICcnLCAncycpLA0KCQknY2F0ZWdvcnkxJyA9PiBhcnJheSgzLCAnJywgJ2Mn KSwNCgkJJ2NhdGVnb3J5MicgPT4gYXJyYXkoMywgJycsICdjJyksDQoJCSd0aGlzaWQnID0+ IGFycmF5KDMsICd0aGlzaWQnLCAnaWQnKSwNCgkJJ2FydGljbGUnID0+IGFycmF5KDEsICdh cnRpZCcsICdpZCcpLA0KCQknY2FsaWQnID0+IGFycmF5KDEsICdpZCcsICdjYWxpZCcpLA0K CQknY2F0ZWdvcnknID0+IGFycmF5KDIsICdjJyksDQoJCSdyZWFsbmFtZScgPT4gYXJyYXko MiwgJ2F1dGhvcicpLA0KCSk7DQoJJGpvaW4gPSAoJGh0bWwpID8gYSA6ICRqb2luOyAvLyBo dG1sIG1vZGUgZm9yY2VzIGFtcGVyc2FuZCBqb2luDQoJJHR5cGUgPSBkb19saXN0KCR0eXBl KTsNCgkkcmV0ID0gYXJyYXkoKTsNCglmb3JlYWNoICgkdHlwZSBhcyAkaXRlbSkgew0KCQkk cHRzID0gZG9fbGlzdCgkaXRlbSwgJzonKTsNCgkJJGl0ZW0gPSAkcHRzWzBdOw0KDQoJCWlm IChlbXB0eSgkaXRlbSkpIGNvbnRpbnVlOw0KCQkvLyBEZWZhdWx0IGh0bWwgaWQNCgkJJGhp ZCA9IChpc3NldCgkbWFwWyRpdGVtXSkpID8gKChpc3NldCgkbWFwWyRpdGVtXVsyXSkpID8g JG1hcFskaXRlbV1bMl0gOiAkbWFwWyRpdGVtXVsxXSkgOiAkaXRlbTsNCgkJLy8gVXNlci1z cGVjaWZpZWQgaHRtbGlkIG92ZXJyaWRlcyBpdA0KCQkkaGlkID0gKGNvdW50KCRwdHMpID4g MSAmJiAhZW1wdHkoJHB0c1sxXSkpID8gJHB0c1sxXSA6ICRoaWQ7DQoJCWlmICgkaXRlbSA9 PSAiZmxhZyIpIHsNCgkJCSRyZXRbXSA9ICgoJGpvaW5fcHJlZml4PT0iU01EX0FVVE8iKSA/ ICRqb2luIDogJycpLmpvaW4oJGpvaW4sICRzbWRfY2FsX2ZsYWcpOw0KCQl9IGVsc2UgaWYg KCRpdGVtID09ICJhdXRob3IiIHx8ICRpdGVtID09ICJyZWFsbmFtZSIpIHsNCgkJCSRjdXJy YXV0aG9yID0gKCR0aGlzYXJ0aWNsZSA9PSBOVUxMKSA/ICcnIDogYXV0aG9yKGFycmF5KCkp Ow0KCQkJaWYgKCRjdXJyYXV0aG9yKSB7DQoJCQkJJHJldFtdID0gKCgkaHRtbCkgPyAkaGlk Lic9JyA6ICcnKSAuICRjdXJyYXV0aG9yOw0KCQkJfQ0KCQl9IGVsc2UgaWYgKCRpdGVtID09 ICJzIikgew0KCQkJJHNlYyA9ICghZW1wdHkoJHByZXRleHRbJ3MnXSkpID8gJHByZXRleHRb J3MnXSA6ICgoaXNzZXQoJHNtZF9jYWxpbmZvWydzJ10pICYmICFlbXB0eSgkc21kX2NhbGlu Zm9bJ3MnXSkpID8gJHNtZF9jYWxpbmZvWydzJ10gOiAnJyk7DQoJCQlpZiAoJHNlYykgew0K CQkJCSRyZXRbXSA9ICgoJGh0bWwpID8gJGhpZC4nPScgOiAnJykgLiAkc2VjOw0KCQkJfQ0K CQl9IGVsc2UgaWYgKGlzc2V0KCRtYXBbJGl0ZW1dKSkgew0KCQkJJHR5cCA9ICRtYXBbJGl0 ZW1dWzBdOw0KCQkJJGlkeCA9IGVtcHR5KCRtYXBbJGl0ZW1dWzFdKSA/ICRpdGVtIDogJG1h cFskaXRlbV1bMV07DQoJCQlzd2l0Y2ggKCR0eXApIHsNCgkJCQljYXNlIDA6DQoJCQkJCWlm ICgkc21kX2RhdGVbJGlkeF0pIHsNCgkJCQkJCSRyZXRbXSA9ICgoJGh0bWwpID8gJGhpZC4n PScgOiAnJykgLiAkc21kX2RhdGVbJGlkeF07DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJ Y2FzZSAxOg0KCQkJCQlpZiAoIWVtcHR5KCRzbWRfY2FsaW5mb1skaWR4XSkpIHsNCgkJCQkJ CSRyZXRbXSA9ICgoJGh0bWwpID8gJGhpZC4nPScgOiAnJykgLiAkc21kX2NhbGluZm9bJGlk eF07DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAyOg0KCQkJCQlpZiAoIWVtcHR5 KCRwcmV0ZXh0WyRpZHhdKSkgew0KCQkJCQkJJHJldFtdID0gKCgkaHRtbCkgPyAkaGlkLic9 JyA6ICcnKSAuICRwcmV0ZXh0WyRpZHhdOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNh c2UgMzoNCgkJCQkJaWYgKCR0aGlzYXJ0aWNsZSAhPSBOVUxMICYmIGlzc2V0KCR0aGlzYXJ0 aWNsZVskaWR4XSkgJiYgIWVtcHR5KCR0aGlzYXJ0aWNsZVskaWR4XSkpIHsNCgkJCQkJCSRy ZXRbXSA9ICgoJGh0bWwpID8gJGhpZC4nPScgOiAnJykgLiAkdGhpc2FydGljbGVbJGlkeF07 DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQl9DQoJCX0gZWxzZSBpZiAoYXJyYXlfa2V5X2V4 aXN0cygkaXRlbSwgJHByZXRleHQpKSB7DQoJCQlpZiAoJHByZXRleHRbJGl0ZW1dKSB7DQoJ CQkJJHJldFtdID0gKCgkaHRtbCkgPyAkaGlkLic9JyA6ICcnKSAuICRwcmV0ZXh0WyRpdGVt XTsNCgkJCX0NCgkJfSBlbHNlIGlmIChpc3NldCgkc21kX2NhbGluZm9bJGl0ZW1dKSkgew0K CQkJaWYgKCFlbXB0eSgkc21kX2NhbGluZm9bJGl0ZW1dKSkgew0KCQkJCSRyZXRbXSA9ICgo JGh0bWwpID8gJGhpZC4nPScgOiAnJykgLiAkc21kX2NhbGluZm9bJGl0ZW1dOw0KCQkJfQ0K CQl9IGVsc2Ugew0KCQkJaWYgKCR0aGlzYXJ0aWNsZSAhPSBOVUxMICYmIGlzc2V0KCR0aGlz YXJ0aWNsZVskaXRlbV0pICYmICFlbXB0eSgkdGhpc2FydGljbGVbJGl0ZW1dKSkgew0KCQkJ CSRyZXRbXSA9ICgoJGh0bWwpID8gJGhpZC4nPScgOiAnJykgLiAkdGhpc2FydGljbGVbJGl0 ZW1dOw0KCQkJfQ0KCQl9DQoJfQ0KCSRyZXQgPSBhcnJheV91bmlxdWUoJHJldCk7DQoJJG91 dCA9ICgoJGpvaW5fcHJlZml4PT0iU01EX0FVVE8iKSA/ICgoJGh0bWwpID8gJz8nIDogJycp IDogJGpvaW5fcHJlZml4KS5qb2luKCRqb2luLCAkcmV0KTsNCglyZXR1cm4gKCRlc2NhcGU9 PSdodG1sJykgPyBodG1sc3BlY2lhbGNoYXJzKCRvdXQpIDogJG91dDsNCn0NCg0KZnVuY3Rp b24gc21kX2NhbF9ub3coJGF0dHMpIHsNCglnbG9iYWwgJGRhdGVmb3JtYXQ7DQoNCglleHRy YWN0KGxBdHRzKGFycmF5KA0KCQknZm9ybWF0JyA9PiAkZGF0ZWZvcm1hdCwNCgkJJ25vdycg PT4gJycsDQoJCSdvZmZzZXQnID0+ICcnLA0KCQknZ210JyA9PiAnJywNCgkJJ2xhbmcnID0+ ICcnLA0KCSksICRhdHRzKSk7DQoNCgkkdGhlRGF5ID0gKGdwcygnZCcpICYmIGlzX251bWVy aWMoZ3BzKCdkJykpKSA/IChpbnQpZ3BzKCdkJykgOiBzYWZlX3N0cmZ0aW1lKCclZCcpOw0K CSR0aGVNb250aCA9IChncHMoJ20nKSAmJiBpc19udW1lcmljKGdwcygnbScpKSkgPyAoaW50 KWdwcygnbScpIDogc2FmZV9zdHJmdGltZSgnJW0nKTsNCgkkdGhlWWVhciA9IChncHMoJ3kn KSAmJiBpc19udW1lcmljKGdwcygneScpKSkgPyAoaW50KWdwcygneScpIDogc2FmZV9zdHJm dGltZSgnJVknKTsNCglpZiAoJG5vdykgew0KCQkkbm93ID0gc3RyX3JlcGxhY2UoIj9tb250 aCIsIGRhdGUoJ0YnLCBta3RpbWUoMTIsMCwwLCR0aGVNb250aCwkdGhlRGF5LCR0aGVZZWFy KSksICRub3cpOw0KCQkkbm93ID0gc3RyX3JlcGxhY2UoIj95ZWFyIiwgJHRoZVllYXIsICRu b3cpOw0KCQkkbm93ID0gc3RyX3JlcGxhY2UoIj9kYXkiLCAkdGhlRGF5LCAkbm93KTsNCgkJ JG5vdyA9IGlzX251bWVyaWMoJG5vdykgPyAkbm93IDogc3RydG90aW1lKCRub3cpOw0KCX0g ZWxzZSB7DQoJCSRub3cgPSB0aW1lKCk7DQoJfQ0KDQoJaWYgKCRvZmZzZXQpIHsNCgkJJG5v dyA9IHN0cnRvdGltZSgkb2Zmc2V0LCAkbm93KTsNCgl9DQoNCgkkZm9ybWF0ID0gc21kX2Nh bF9yZWZvcm1hdF93aW4oJGZvcm1hdCwgJG5vdyk7DQoJcmV0dXJuIHNhZmVfc3RyZnRpbWUo JGZvcm1hdCwgJG5vdywgJGdtdCwgJGxhbmcpOw0KfQ0KDQovLyBTZXQgdXNlci1kZWZpbmVk IGNsYXNzZXMgZm9yIGEgY2VsbA0KZnVuY3Rpb24gc21kX2NhbF9jbGFzcygkYXR0cykgew0K CWdsb2JhbCAkc21kX2NhbF91Y2xzOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ25h bWUnID0+ICcnLA0KCSksICRhdHRzKSk7DQoNCgkkbmFtZSA9IGRvX2xpc3QoJG5hbWUpOw0K CSRzbWRfY2FsX3VjbHMgPSBhcnJheV9tZXJnZSgkc21kX2NhbF91Y2xzLCAkbmFtZSk7DQp9 DQoNCi8vIDx0eHA6YXJ0aWNsZV9jdXN0b20gLz4gcmVwbGFjZW1lbnQoaXNoKSB0YWcgdGhh dCB1bmRlcnN0YW5kcyBob3cgdG8gaGFuZGxlIHJlY3VycmluZyBldmVudHMNCmZ1bmN0aW9u IHNtZF9hcnRpY2xlX2V2ZW50KCRhdHRzLCAkdGhpbmc9TlVMTCkgew0KCWdsb2JhbCAkcHJl ZnMsICRwcmV0ZXh0LCAkdGhpc3BhZ2UsICR0aGlzYXJ0aWNsZTsNCg0KCWV4dHJhY3QobEF0 dHMoYXJyYXkoDQoJCSd0aW1lJyA9PiAnYW55JywNCgkJJ3R5cGUnID0+ICdzdGFuZGFyZCxy ZWN1cixtdWx0aScsDQoJCSdleHBpcmVkJyA9PiAnJywNCgkJJ2lkJyA9PiAnJywNCgkJJ2Nh dGVnb3J5JyA9PiAnJywNCgkJJ3NlY3Rpb24nID0+ICcnLA0KCQknYXV0aG9yJyA9PiAnJywN CgkJJ3JlYWxuYW1lJyA9PiAnJywNCgkJJ3N0YXR1cycgPT4gJ2xpdmUnLA0KCQknc29ydCcg PT4gJycsDQoJCSdmb3JtJyA9PiAnJywNCgkJJ3N0ZXBmaWVsZCcgPT4gJycsDQoJCSdza2lw ZmllbGQnID0+ICcnLA0KCQknb21pdGZpZWxkJyA9PiAnJywNCgkJJ2V4dHJhZmllbGQnID0+ ICcnLA0KCQknYWxsc3Bhbm5lZCcgPT4gJzAnLA0KCQknZGF0ZWZpZWxkcycgPT4gJycsDQoJ CSdtb250aCcgPT4gJycsDQoJCSdmcm9tJyA9PiAnJywNCgkJJ3RvJyA9PiAnJywNCgkJJ29m ZnNldCcgPT4gMCwNCgkJJ2xpbWl0JyA9PiAnMTAnLA0KCQknZXZlbnRsaW1pdCcgPT4gJzEw JywNCgkJJ3BhZ2luZycgPT4gJzEnLA0KCQkncGFnZWJ5JyA9PiAnJywNCgkJJ3Bnb25seScg PT4gJycsDQoJCSd3cmFwdGFnJyA9PiAnJywNCgkJJ2JyZWFrJyA9PiAnJywNCgkJJ2NsYXNz JyA9PiAnJywNCgkJJ2RlYnVnJyA9PiAwLA0KCSksICRhdHRzKSk7DQoNCgkvLyBQaGFzZSAx IGZpbHRlcnMNCgkkZmlsdFNRTCA9ICRzdWJTUUwgPSBhcnJheSgpOw0KCWlmKCRjYXRlZ29y eSkgew0KCQkkdG1wID0gZG9RdW90ZShqb2luKCInLCciLCBkb1NsYXNoKGRvX2xpc3QoJGNh dGVnb3J5KSkpKTsNCgkJJGZpbHRTUUxbXSA9ICcoIENhdGVnb3J5MSBJTiAoJy4kdG1wLicp IE9SIENhdGVnb3J5MiBJTiAoJy4kdG1wLicpICknOw0KCX0NCglpZigkc2VjdGlvbikgew0K CQkkZmlsdFNRTFtdID0gJ1NlY3Rpb24gSU4gKCcuZG9RdW90ZShqb2luKCInLCciLCBkb1Ns YXNoKGRvX2xpc3QoJHNlY3Rpb24pKSkpLicpJzsNCgl9DQoJaWYoJHJlYWxuYW1lKSB7DQoJ CSRhdXRob3JzID0gc2FmZV9jb2x1bW4oJ25hbWUnLCAndHhwX3VzZXJzJywgJ1JlYWxOYW1l IElOICgnLiBkb1F1b3RlKGpvaW4oIicsJyIsIGRvQXJyYXkoZG9fbGlzdCgkcmVhbG5hbWUp LCAndXJsZGVjb2RlJykpKSAuJyknICk7DQoJCSRhdXRob3IgPSBqb2luKCcsJywgJGF1dGhv cnMpOw0KCX0NCglpZigkYXV0aG9yKSB7DQoJCSRmaWx0U1FMW10gPSAnQXV0aG9ySUQgSU4g KCcuZG9RdW90ZShqb2luKCInLCciLCBkb1NsYXNoKGRvX2xpc3QoJGF1dGhvcikpKSkuJykn Ow0KCX0NCglpZigkaWQpIHsNCgkJJGZpbHRTUUxbXSA9ICdJRCBJTiAoJy5qb2luKCcsJywg YXJyYXlfbWFwKCdpbnR2YWwnLCBkb19saXN0KCRpZCkpKS4nKSc7DQoJfQ0KCSR0eXBlID0g ZG9fbGlzdCgkdHlwZSk7DQoJJHBhZ2VieSA9IChlbXB0eSgkcGFnZWJ5KSA/ICRsaW1pdCA6 ICRwYWdlYnkpOw0KDQoJZm9yZWFjaCAoJHR5cGUgYXMgJGV2dHlwKSB7DQoJCXN3aXRjaCgk ZXZ0eXApIHsNCgkJCWNhc2UgJ3N0YW5kYXJkJzoNCgkJCQlpZiAoJHN0ZXBmaWVsZCkgew0K CQkJCQkkc3ViU1FMW10gPSAiKCIuJHN0ZXBmaWVsZC4iID0gJycgQU5EIEV4cGlyZXMgPSAi Lk5VTExEQVRFVElNRS4iKSI7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAncmVjdXIn Og0KCQkJCWlmICgkc3RlcGZpZWxkKSB7DQoJCQkJCSRzdWJTUUxbXSA9ICIoIi4kc3RlcGZp ZWxkLiIgIT0gJycpIjsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlICdtdWx0aSc6DQoJ CQkJaWYgKCRzdGVwZmllbGQpIHsNCgkJCQkJJHN1YlNRTFtdID0gIigiLiRzdGVwZmllbGQu IiA9ICcnIEFORCBFeHBpcmVzICE9ICIuTlVMTERBVEVUSU1FLiIpIjsNCgkJCQl9DQoJCQkJ YnJlYWs7DQoJCX0NCgl9DQoJaWYgKCRzdWJTUUwpIHsNCgkJJGZpbHRTUUxbXSA9ICcoJy5q b2luKCcgT1IgJywgJHN1YlNRTCkuJyknOw0KCX0NCg0KCSRzdGF0dXMgPSAoJHN0YXR1cykg PyAkc3RhdHVzIDogJ2xpdmUnOyAvLyBpbiBjYXNlIHN0YXR1cyBoYXMgYmVlbiBlbXB0aWVk DQoJJHN0YXR1cyA9IGRvX2xpc3QoJHN0YXR1cyk7DQoJJHN0YXRpID0gYXJyYXkoKTsNCglm b3JlYWNoICgkc3RhdHVzIGFzICRzdGF0KSB7DQoJCWlmIChlbXB0eSgkc3RhdCkpIHsNCgkJ CWNvbnRpbnVlOw0KCQl9IGVsc2UgaWYgKGlzX251bWVyaWMoJHN0YXQpKSB7DQoJCQkkc3Rh dGlbXSA9ICRzdGF0Ow0KCQl9IGVsc2Ugew0KCQkJJHN0YXRpW10gPSBnZXRTdGF0dXNOdW0o JHN0YXQpOw0KCQl9DQoJfQ0KCSRmaWx0U1FMW10gPSAnU3RhdHVzIElOICgnLmRvUXVvdGUo am9pbigiJywnIiwgJHN0YXRpKSkuJyknOw0KDQoJJGV4cGlyZWQgPSAoJGV4cGlyZWQpID8g JGV4cGlyZWQgOiAkcHJlZnNbJ3B1Ymxpc2hfZXhwaXJlZF9hcnRpY2xlcyddOw0KCWlmICgh JGV4cGlyZWQpIHsNCgkJJGZpbHRTUUxbXSA9ICcobm93KCkgPD0gRXhwaXJlcyBPUiBFeHBp cmVzID0gJy5OVUxMREFURVRJTUUuJyknOw0KCX0NCg0KCS8vIFNvcnRpbmcgcnVsZXM6IGRh dGEgaXMgc29ydGVkIG9uY2UgYXMgaXQgaXMgZXh0cmFjdGVkIHZpYSBTUUwgYW5kIHRoZW4g YWdhaW4gYWZ0ZXIgdGhlIGZha2UgZGF0ZXMgaGF2ZSBiZWVuIGluc2VydGVkDQoJJHNvcnQg PSAoZW1wdHkoJHNvcnQpKSA/ICdQb3N0ZWQgYXNjJyA6ICRzb3J0Ow0KCSRzb3J0ID0gZG9f bGlzdCgkc29ydCk7DQoJJHNvcnRQcmVmaXggPSAiU09SVF8iOw0KCSRzb3J0T3JkZXIgPSBh cnJheSgpOw0KCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkc29ydCk7ICRpZHgrKykg ew0KCQkkc29ydGllcyA9IGV4cGxvZGUoJyAnLCAkc29ydFskaWR4XSk7DQoJCWlmIChjb3Vu dCgkc29ydGllcykgPD0gMSkgew0KCQkJJHNvcnRpZXNbMV0gPSAiYXNjIjsNCgkJfQ0KCQkk c29ydGllc1sxXSA9ICRzb3J0UHJlZml4LigoJHNvcnRpZXNbMV0gPT0gImRlc2MiKSA/ICdE RVNDJyA6ICdBU0MnKTsNCgkJJHNvcnRPcmRlcltdID0gYXJyYXkoImJ5IiA9PiAkc29ydGll c1swXSwgImRpciIgPT4gJHNvcnRpZXNbMV0pOw0KCX0NCgkkZmlsdFNRTCA9IGpvaW4oJyBB TkQgJywgJGZpbHRTUUwpOw0KCSRmaWx0U1FMIC49ICcgT1JERVIgQlkgJy5qb2luKCcsJyxk b1NsYXNoKCRzb3J0KSk7DQoNCgkkZ3JhYkNvbHMgPSAnKiwgdW5peF90aW1lc3RhbXAoUG9z dGVkKSBhcyB1UG9zdGVkLCB1bml4X3RpbWVzdGFtcChMYXN0TW9kKSBhcyB1TGFzdE1vZCwg dW5peF90aW1lc3RhbXAoRXhwaXJlcykgYXMgdUV4cGlyZXMnOw0KCSRldmxpc3QgPSBzYWZl X3Jvd3MoJGdyYWJDb2xzLCAndGV4dHBhdHRlcm4nLCAkZmlsdFNRTCwgJGRlYnVnKTsNCg0K CWlmICgkZGVidWc+Mikgew0KCQllY2hvICIrKyBSRUNPUkQgU0VUICsrIjsNCgkJZG1wKCRl dmxpc3QpOw0KCX0NCgkkYWxsX2V2cyA9ICRldl90YWxseSA9IGFycmF5KCk7DQoJJG5vdyA9 IHRpbWUoKSArIHR6X29mZnNldCgpOw0KDQoJJGV2ZW50bGltaXQgPSBkb19saXN0KCRldmVu dGxpbWl0KTsNCglpZiAoY291bnQoJGV2ZW50bGltaXQpID09IDEpIHsNCgkJJGV2ZW50bGlt aXRbMV0gPSAkZXZlbnRsaW1pdFswXTsNCgl9DQoNCgkkZGF0ZWZpZWxkcyA9IGRvX2xpc3Qo JGRhdGVmaWVsZHMpOw0KDQoJLy8gUGhhc2UgMjogZXhwYW5kIGFueSByZWN1cnJpbmcgZGF0 ZXMgYW5kIGNvbGxhdGUgYWxsIGV2ZW50cyB0aGF0IGZhbGwgd2l0aGluIHRoZSBhbGxvdGVk IHJhbmdlcw0KCWZvcmVhY2ggKCRldmxpc3QgYXMgJHJvdykgew0KCQkkZXZfcG9zdGVkID0g KCFlbXB0eSgkZGF0ZWZpZWxkc1swXSkgJiYgIWVtcHR5KCRyb3dbJGRhdGVmaWVsZHNbMF1d KSAmJiAoJHN0ZHQgPSBzdHJ0b3RpbWUoJHJvd1skZGF0ZWZpZWxkc1swXV0pKSAhPT0gZmFs c2UpID8gJHN0ZHQgOiAkcm93Wyd1UG9zdGVkJ10rdHpfb2Zmc2V0KCRyb3dbJ3VQb3N0ZWQn XSk7DQoJCSRldl9leHBpcmVzID0gKGlzc2V0KCRkYXRlZmllbGRzWzFdKSAmJiAhZW1wdHko JHJvd1skZGF0ZWZpZWxkc1sxXV0pICYmICgkZW5kdCA9IHN0cnRvdGltZSgkcm93WyRkYXRl ZmllbGRzWzFdXSkpICE9PSBmYWxzZSkgPyAkZW5kdCA6ICgoJHJvd1sndUV4cGlyZXMnXT09 MCkgPyAwIDogJHJvd1sndUV4cGlyZXMnXSt0el9vZmZzZXQoJHJvd1sndUV4cGlyZXMnXSkp Ow0KDQoJCS8vIElmIGVuZCA8IHN0YXJ0IHRoZSB1c2VyLXNwZWNpZmllZCBkYXRlcyBjYW5u b3QgYmUgdHJ1c3RlZA0KCQlpZiAoJGV2X2V4cGlyZXMgIT0gMCAmJiAkZXZfZXhwaXJlcyA8 PSAkZXZfcG9zdGVkKSB7DQoJCQkkZXZfcG9zdGVkID0gJHJvd1sndVBvc3RlZCddK3R6X29m ZnNldCgkcm93Wyd1UG9zdGVkJ10pOw0KCQkJJGV2X2V4cGlyZXMgPSAoKCRyb3dbJ3VFeHBp cmVzJ109PTApID8gMCA6ICRyb3dbJ3VFeHBpcmVzJ10rdHpfb2Zmc2V0KCRyb3dbJ3VFeHBp cmVzJ10pKTsNCgkJCXRyaWdnZXJfZXJyb3IoJ0V4cGlyeSBjYW5ub3QgYmUgYmVmb3JlIHN0 YXJ0IGRhdGUgaW4gIicuJHJvd1snVGl0bGUnXS4nIjogaWdub3JlZCcsIEVfVVNFUl9XQVJO SU5HKTsNCgkJfQ0KCQlpZiAoJGRlYnVnID4gMSkgew0KCQkJZWNobyAnKysgRVZFTlQgU1RB UlQgLy8gRU5EICsrJzsNCgkJCWRtcCgkcm93WydUaXRsZSddKTsNCgkJCWRtcCgkZXZfcG9z dGVkLCBkYXRlKCdZLW0tZCBIOmk6cycsICRldl9wb3N0ZWQpLCAkZXZfZXhwaXJlcywgZGF0 ZSgnWS1tLWQgSDppOnMnLCAkZXZfZXhwaXJlcykpOw0KCQl9DQoJCS8vIFJld3JpdGUgdGhl IHN0YXJ0L2VuZCBkYXRlcyBpbiBjYXNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZA0KCQkkcm93 Wyd1UG9zdGVkJ10gPSAkZXZfcG9zdGVkOw0KCQkkcm93WydQb3N0ZWQnXSA9IGRhdGUoIlkt bS1kIEg6aTpzIiwgJGV2X3Bvc3RlZCk7DQoJCSRyb3dbJ3VFeHBpcmVzJ10gPSAkZXZfZXhw aXJlczsNCgkJJHJvd1snRXhwaXJlcyddID0gKCRldl9leHBpcmVzPT0wKSA/ICcwMDAwLTAw LTAwIDAwOjAwOjAwJyA6IGRhdGUoIlktbS1kIEg6aTpzIiwgJGV2X2V4cGlyZXMpOw0KDQoJ CSRkaWZmID0gKCRldl9leHBpcmVzID09IDApID8gMCA6ICRldl9leHBpcmVzIC0gJGV2X3Bv c3RlZDsNCgkJJGV2X21vbnRoID0gZGF0ZSgnbScsICRldl9wb3N0ZWQpOw0KCQkkZXZfeWVh ciA9IGRhdGUoJ1knLCAkZXZfcG9zdGVkKTsNCgkJJGV2X2hyID0gZGF0ZSgnSCcsICRldl9w b3N0ZWQpOw0KCQkkZXZfbW4gPSBkYXRlKCdpJywgJGV2X3Bvc3RlZCk7DQoJCSRldl9zYyA9 IGRhdGUoJ3MnLCAkZXZfcG9zdGVkKTsNCgkJJGlnbm9yZSA9IGFycmF5KCk7DQoNCgkJLy8g R2VuZXJhdGUgYSBza2lwIGFycmF5IGZvciB0aGlzIGV2ZW50DQoJCWlmICgkc2tpcGZpZWxk ICYmICRyb3dbJHNraXBmaWVsZF0gIT0gJycpIHsNCgkJCSRpZ25vcmVzID0gZG9fbGlzdCgk cm93WyRza2lwZmllbGRdKTsNCgkJCWZvcmVhY2ggKCRpZ25vcmVzIGFzICR2YWwpIHsNCgkJ CQkkaWdybmcgPSBzbWRfZXhwYW5kX2RhdGVyYW5nZSgkdmFsLCAkZXZfcG9zdGVkLCAkZXZf ZXhwaXJlcyk7DQoJCQkJZm9yZWFjaCAoJGlncm5nIGFzICR0aGV2YWwpIHsNCgkJCQkJJGln bm9yZVtdID0gZGF0ZSgiZC1NLVkiLCAkdGhldmFsKTsgLy8gRm9yY2UgZWFjaCBkYXRlIHRv IGEga25vd24gZm9ybWF0DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCS8vIEFwcGVuZCBhbnkgb21p dHRlZCBldmVudHMNCgkJaWYgKCRvbWl0ZmllbGQgJiYgJHJvd1skb21pdGZpZWxkXSAhPSAn Jykgew0KCQkJJG9taXRzID0gZG9fbGlzdCgkcm93WyRvbWl0ZmllbGRdKTsNCgkJCWZvcmVh Y2ggKCRvbWl0cyBhcyAkdmFsKSB7DQoJCQkJJG9tcm5nID0gc21kX2V4cGFuZF9kYXRlcmFu Z2UoJHZhbCwgJGV2X3Bvc3RlZCwgJGV2X2V4cGlyZXMpOw0KCQkJCWZvcmVhY2ggKCRvbXJu ZyBhcyAkdGhldmFsKSB7DQoJCQkJCSRpZ25vcmVbXSA9IGRhdGUoImQtTS1ZIiwgJHRoZXZh bCk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWlmICgkZGVidWcgPiAxICYmICRpZ25vcmUpIHsN CgkJCWVjaG8gJysrIElHTk9SRUQgREFURVMgKysnOw0KCQkJZG1wKCRpZ25vcmUpOw0KCQl9 DQoNCgkJLy8gRG9lcyB0aGUgYmFzZSBldmVudCBkZXNlcnZlIHRvIGJlIGluIHRoZSByZXN1 bHRzPw0KCQlpZiAoc21kX2luY2x1ZGVfZXZlbnQoJGV2X3Bvc3RlZCwgJG5vdywgJGlnbm9y ZSwgJHRpbWUsICRmcm9tLCAkdG8sICRtb250aCkpIHsNCgkJCSRhbGxfZXZzW10gPSAkcm93 Ow0KCQkJJGV2X3RhbGx5WyRyb3dbJ3VQb3N0ZWQnXV0gPSAoaXNzZXQoJGV2X3RhbGx5WyRy b3dbJ3VQb3N0ZWQnXV0pKSA/ICRldl90YWxseVskcm93Wyd1UG9zdGVkJ11dKzEgOiAxOw0K CQl9DQoNCgkJLy8gQWRkIGFueSBleHRyYSBkYXRlcyBmb3IgdGhpcyBldmVudA0KCQlpZiAo JGV4dHJhZmllbGQgJiYgJHJvd1skZXh0cmFmaWVsZF0gIT0gJycpIHsNCgkJCSR4dHJhID0g ZG9fbGlzdCgkcm93WyRleHRyYWZpZWxkXSk7DQoJCQkkeHRyYXMgPSBhcnJheSgpOw0KCQkJ Zm9yZWFjaCAoJHh0cmEgYXMgJHZhbCkgew0KCQkJCSR4dHJhcyA9IGFycmF5X21lcmdlKCR4 dHJhcywgc21kX2V4cGFuZF9kYXRlcmFuZ2UoJHZhbCwgJycsICcnLCAiJWQgJUIgJVkiKSk7 DQoJCQl9DQoJCQkkc3RhbXBvZmYgPSAoaW50KSgzNjAwKiRldl9ocikgKyAoaW50KSg2MCok ZXZfbW4pICsgKGludCkkZXZfc2M7DQoJCQlmb3JlYWNoICgkeHRyYXMgYXMgJHZhbCkgew0K CQkJCSR2YWwgPSBydHJpbSgkdmFsLCAnKycpOw0KCQkJCSR0bSA9IHN0cnRvdGltZSgkdmFs KTsNCg0KCQkJCS8vIE5vICRpZ25vcmUgZm9yIGFkZGl0aW9uYWwgZXZlbnRzLCBhcyB0aGV5 IGFsd2F5cyBzaG93IHVwDQoJCQkJaWYgKHNtZF9pbmNsdWRlX2V2ZW50KCR0bSskc3RhbXBv ZmYsICRub3csIGFycmF5KCksICR0aW1lLCAkZnJvbSwgJHRvLCAkbW9udGgpKSB7DQoJCQkJ CSRmYWtlcm93ID0gJHJvdzsNCgkJCQkJJGZha2Vyb3dbJ1Bvc3RlZCddID0gZGF0ZSgiWS1t LWQgSDppOnMiLCAkdG0rJHN0YW1wb2ZmKTsNCgkJCQkJJGZha2Vyb3dbJ3VQb3N0ZWQnXSA9 ICR0bSskc3RhbXBvZmY7DQoJCQkJCWlmICgkZGlmZiA+IDApIHsNCgkJCQkJCSRmYWtlcm93 WydFeHBpcmVzJ10gPSBkYXRlKCJZLW0tZCBIOmk6cyIsICR0bSskc3RhbXBvZmYrJGRpZmYp Ow0KCQkJCQkJJGZha2Vyb3dbJ3VFeHBpcmVzJ10gPSAkdG0rJHN0YW1wb2ZmKyRkaWZmOw0K CQkJCQl9DQoJCQkJCSRhbGxfZXZzW10gPSAkZmFrZXJvdzsNCgkJCQkJJGV2X3RhbGx5WyRm YWtlcm93Wyd1UG9zdGVkJ11dID0gKGlzc2V0KCRldl90YWxseVskZmFrZXJvd1sndVBvc3Rl ZCddXSkpID8gJGV2X3RhbGx5WyRmYWtlcm93Wyd1UG9zdGVkJ11dKzEgOiAxOw0KCQkJCX0N CgkJCX0NCgkJfQ0KDQoJCWlmICgkc3RlcGZpZWxkICYmICRyb3dbJHN0ZXBmaWVsZF0gIT0g JycpIHsNCgkJCSRmcmVxID0gZG9fbGlzdCgkcm93WyRzdGVwZmllbGRdKTsNCgkJCSRtb250 aGx5ID0gZmFsc2U7DQoJCQkkY3Vycm1vbnRoID0gJGV2X21vbnRoOw0KCQkJJGN1cnJ5ZWFy ID0gJGV2X3llYXI7DQoJCQlmb3JlYWNoICgkZnJlcSBhcyAkaW50ZXJ2YWwpIHsNCgkJCQkk ZmFrZXJvdyA9ICRyb3c7DQoJCQkJJGNzdGFtcCA9ICRldl9wb3N0ZWQ7DQoJCQkJZm9yKCRp ZHggPSAwOyAkaWR4IDwgOTk5OTk7ICRpZHgrKykgew0KCQkJCQkkbHN0YW1wID0gJGNzdGFt cDsNCgkJCQkJaWYgKChpc3NldCgkZXZfdGFsbHlbJHJvd1sndVBvc3RlZCddXSkgJiYgKCRl dl90YWxseVskcm93Wyd1UG9zdGVkJ11dID49ICRldmVudGxpbWl0WzBdKSkgfHwgKCR0byAm JiAkY3N0YW1wID4gc2FmZV9zdHJ0b3RpbWUoJHRvKSkpIHsNCgkJCQkJCWJyZWFrOw0KCQkJ CQl9DQoJCQkJCSRpdmFsID0gc3RyX3JlcGxhY2UoIj9tb250aCIsIGRhdGUoJ0YnLCBta3Rp bWUoMCwwLDAsJGN1cnJtb250aCwxKSksICRpbnRlcnZhbCk7DQoJCQkJCSRpdmFsID0gc3Ry X3JlcGxhY2UoIj95ZWFyIiwgJGN1cnJ5ZWFyLCAkaXZhbCk7DQoNCgkJCQkJaWYgKHN0cnBv cygkaXZhbCwgImxhc3QiKSA9PT0gMCkgew0KCQkJCQkJJGl2YWwgPSBkYXRlKCJsLCBGIGpT IFkiLCBzdHJ0b3RpbWUoICRpdmFsLCBta3RpbWUoMTIsIDAsIDAsIGRhdGUoIm4iLCBta3Rp bWUoMCwwLDAsJGN1cnJtb250aCwxLCRjdXJyeWVhcikpKzEsIDEsICRjdXJyeWVhcikgKSk7 DQoJCQkJCQkkbW9udGhseSA9IHRydWU7DQoJCQkJCX0gZWxzZSBpZiAoc3RycG9zKCRpdmFs LCAiZmlyc3QiKSA9PT0gMCkgew0KCQkJCQkJJGl2YWwgPSBkYXRlKCJsLCBGIGpTIFkiLCBz dHJ0b3RpbWUoICRpdmFsLCBta3RpbWUoMTIsIDAsIDAsICgoJGN1cnJtb250aD4xKSA/ICRj dXJybW9udGgtMSA6IDEyKSwgZGF0ZSgidCIsIG1rdGltZSgwLDAsMCwkY3Vycm1vbnRoLTEs MSwoKCRjdXJybW9udGg9PTEpID8gJGN1cnJ5ZWFyLTE6ICRjdXJyeWVhcikpICksICgoJGN1 cnJtb250aD09MSkgPyAkY3VycnllYXItMTogJGN1cnJ5ZWFyKSkgKSk7DQoJCQkJCQkkbW9u dGhseSA9IHRydWU7DQoJCQkJCX0gZWxzZSBpZiAoc3RycG9zKCRpdmFsLCAidGhpcyIpID09 PSAwKSB7DQoJCQkJCQkkbW9udGhseSA9IHRydWU7DQoJCQkJCX0NCgkJCQkJaWYgKHN0cnBv cygkaW50ZXJ2YWwsICI/bW9udGgiKSB8fCBzdHJwb3MoJGludGVydmFsLCAiP3llYXIiKSkg ew0KCQkJCQkJJG1vbnRobHkgPSB0cnVlOw0KCSAgICAgICAgICAgIH0NCg0KCQkJCQlpZiAo JG1vbnRobHkpIHsNCgkJCQkJCSRjc3RhbXAgPSBzdHJ0b3RpbWUoJGl2YWwpOw0KCQkJCQl9 IGVsc2Ugew0KCQkJCQkJJGNzdGFtcCA9IHN0cnRvdGltZSgkaXZhbCwgJGNzdGFtcCk7DQoJ CQkJCX0NCg0KCQkJCQkvLyBUaGlzIGtsdWRnZSB0YWtlcyBhY2NvdW50IG9mIHRpbWVzdGFt cHMgbGlrZSAibGFzdCBUaHVyc2RheSIgKG9mIHRoZSBtb250aCkuIFRoZSBsYXN0ICd3aGF0 ZXZlciBkYXknIG9mDQoJCQkJCS8vIGEgbW9udGggY2FuIG9ubHkgYmUgYSBtYXhpbXVtIG9m IDMxIGRheXMgYmVmb3JlIHRoZSBsYXN0IHRpbWVzdGFtcCB3ZSBzYXcsIHNvIGNoZWNrIGZv ciB0aGF0ICgrLy0gMTAgbWlucykNCgkJCQkJJGRpZmZzdGFtcCA9ICRjc3RhbXAgLSAkbHN0 YW1wOw0KCQkJCQlpZiAoJGRpZmZzdGFtcCA8IDApIHsNCgkJCQkJCWlmICgkZGlmZnN0YW1w ID4gLSg2MCo2MCoyNCozMSkrNjAwKSB7DQoJCQkJCQkJJGNzdGFtcCA9IGZhbHNlOyAvLyBT b21lICdsYXN0IHdlZWtkYXknIG9mIHRoZSBwcmV2aW91cyBtb250aA0KCQkJCQkJfSBlbHNl IHsNCgkJCQkJCQlicmVhazsgLy8gUEhQX0lOVF9NQVggZXhjZWVkZWQNCgkJCQkJCX0NCgkJ CQkJfQ0KCQkJCQlpZiAoJGNzdGFtcCAhPT0gZmFsc2UpIHsNCgkJCQkJCWlmICgkZGVidWcg PiAxKSB7DQoJCQkJCQkJZG1wKCJJTlRFUlZBTDogIi4gJGNzdGFtcCAuICcgLy8gJyAuZGF0 ZSgnZC1NLVkgSDppOnMnLCAkY3N0YW1wKSk7DQoJCQkJCQl9DQoNCgkJCQkJCWlmICgoJGNz dGFtcCA8ICRldl9leHBpcmVzIHx8ICRldl9leHBpcmVzID09ICcwJykgJiYgKCRjc3RhbXAg IT0gJGV2X3Bvc3RlZCkpIHsNCgkJCQkJCQkkc2hvd19tZSA9IHNtZF9pbmNsdWRlX2V2ZW50 KCRjc3RhbXAsICRub3csICRpZ25vcmUsICR0aW1lLCAkZnJvbSwgJHRvLCAkbW9udGgpOw0K CQkJCQkJCWlmICgkc2hvd19tZSkgew0KCQkJCQkJCQkkZmFrZXJvd1snUG9zdGVkJ10gPSBk YXRlKCJZLW0tZCBIOmk6cyIsICRjc3RhbXApOw0KCQkJCQkJCQkkZmFrZXJvd1sndVBvc3Rl ZCddID0gJGNzdGFtcDsNCgkJCQkJCQkJJGFsbF9ldnNbXSA9ICRmYWtlcm93Ow0KCQkJCQkJ CQkkZXZfdGFsbHlbJHJvd1sndVBvc3RlZCddXSA9IChpc3NldCgkZXZfdGFsbHlbJHJvd1sn dVBvc3RlZCddXSkpID8gJGV2X3RhbGx5WyRyb3dbJ3VQb3N0ZWQnXV0rMSA6IDE7DQoJCQkJ CQkJfQ0KCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQlicmVhazsNCgkJCQkJCX0NCgkJCQkJfQ0K CQkJCQkvLyBJbmNyZW1lbnQgdGhlIG1vbnRoL3llYXIgcmVhZHkgZm9yIHRoZSBuZXh0IGlu dGVydmFsDQoJCQkJCWlmICgkbW9udGhseSkgew0KCQkJCQkJJGN1cnJ5ZWFyID0gKCRjdXJy bW9udGg9PTEyKSA/ICRjdXJyeWVhcisxIDogJGN1cnJ5ZWFyOw0KCQkJCQkJJGN1cnJtb250 aCA9ICgkY3Vycm1vbnRoPT0xMikgPyAxIDogJGN1cnJtb250aCsxOw0KCQkJCQl9DQoJCQkJ fQ0KCQkJCWlmICgkZGVidWc+MSkgew0KCQkJCQlpZiAoaXNzZXQoJGV2X3RhbGx5WyRyb3db J3VQb3N0ZWQnXV0pKSB7DQoJCQkJCQlkbXAoIlRBTExZOiAiLiAkZXZfdGFsbHlbJHJvd1sn dVBvc3RlZCddXSk7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0gZWxzZSBpZiAoJGFsbHNw YW5uZWQgJiYgZGF0ZSgiZC1tLVkiLCAkZXZfZXhwaXJlcykgIT0gZGF0ZSgiZC1tLVkiLCAk ZXZfcG9zdGVkKSkgew0KCQkJJHBvc3RkYXRlID0gZGF0ZSgiZC1tLVkiLCAkZXZfcG9zdGVk KTsNCgkJCSRmYWtlX2RpZmYgPSBzYWZlX3N0cnRvdGltZShkYXRlKCJZLU0tZCIsICRldl9l eHBpcmVzKSAuICIgMjM6NTk6NTkiKTsNCgkJCSRkaWZmID0gKCRldl9leHBpcmVzPT0wKSA/ IDAgOiAkZmFrZV9kaWZmIC0gJGV2X3Bvc3RlZDsNCgkJCSRzcGlkdGggPSBjZWlsKCRkaWZm IC8gKDYwKjYwKjI0KSk7IC8vIGRheXMgYmV0d2VlbiBkYXRlcw0KCQkJZm9yICgkamR4ID0g MTsgJGpkeCA8PSAkc3BpZHRoOyAkamR4KyspIHsNCgkJCQkkdG0gPSBzYWZlX3N0cnRvdGlt ZSgkcG9zdGRhdGUuJysnLiRqZHguJyBkYXlzJyk7DQoJCQkJJHNob3dfbWUgPSBzbWRfaW5j bHVkZV9ldmVudCgkdG0sICRub3csICRpZ25vcmUsICR0aW1lLCAkZnJvbSwgJHRvLCAkbW9u dGgpOw0KCQkJCWlmICgkc2hvd19tZSkgew0KCQkJCQkkZmFrZXJvdyA9ICRyb3c7DQoJCQkJ CSRmYWtlcm93WydQb3N0ZWQnXSA9IGRhdGUoIlktbS1kIEg6aTpzIiwgJHRtKTsNCgkJCQkJ JGZha2Vyb3dbJ3VQb3N0ZWQnXSA9ICR0bTsNCgkJCQkJJGFsbF9ldnNbXSA9ICRmYWtlcm93 Ow0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCWlmICgkZGVidWc+Mikgew0KCQllY2hvICIr KyBQUkUtU09SVEVEICsrIjsNCgkJZG1wKCRhbGxfZXZzKTsNCgl9DQoNCgkvLyBNYWtlIHVw IGFuIGFycmF5X211bHRpc29ydCBhcmcgbGlzdCBhbmQgZXhlY3V0ZSBpdA0KCWZvcmVhY2go JGFsbF9ldnMgYXMgJGtleSA9PiAkcm93KSB7DQoJCWZvcmVhY2ggKCRyb3cgYXMgJGlkZW50 aWZpZXIgPT4gJGl0ZW0pIHsNCgkJCSR2YXJuYW1lID0gImNvbF8iLiRpZGVudGlmaWVyOw0K CQkJJHskdmFybmFtZX1bJGtleV0gPSAkaXRlbTsNCgkJfQ0KCX0NCglpZihjb3VudCgkYWxs X2V2cykgPiAwKSB7DQoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkc29ydE9yZGVy KTsgJGlkeCsrKSB7DQoJCQkkc29ydGFyZ3NbXSA9ICckY29sXycuJHNvcnRPcmRlclskaWR4 XVsnYnknXTsNCgkJCSRzb3J0YXJnc1tdID0gJHNvcnRPcmRlclskaWR4XVsnZGlyJ107DQoJ CX0NCgkJJHNvcnRpdCA9ICdhcnJheV9tdWx0aXNvcnQoJy5pbXBsb2RlKCIsICIsJHNvcnRh cmdzKS4nLCAkYWxsX2V2cyk7JzsNCgkJZXZhbCgkc29ydGl0KTsNCgl9DQoNCglpZiAoJGRl YnVnPjIpIHsNCgkJZWNobyAiKysgUE9TVC1TT1JURUQgKysiOw0KCQlkbXAoJGFsbF9ldnMp Ow0KCX0NCg0KCS8vIEhhbmRsZSBwYWdpbmcNCglpZiAoJHBhZ2luZykgew0KCQkkZ3JhbmRf dG90YWwgPSBjb3VudCgkYWxsX2V2cyk7DQoJCSR0b3RhbCA9ICRncmFuZF90b3RhbCAtICRv ZmZzZXQ7DQoJCSRudW1QYWdlcyA9IGNlaWwoJHRvdGFsLyRwYWdlYnkpOw0KCQkkcGcgPSAo ISRwcmV0ZXh0WydwZyddKSA/IDEgOiAkcHJldGV4dFsncGcnXTsNCgkJJHBnb2Zmc2V0ID0g JG9mZnNldCArICgoJHBnIC0gMSkgKiAkcGFnZWJ5KTsNCgkJLy8gc2VuZCBwYWdpbmcgaW5m byB0byB0eHA6bmV3ZXIgYW5kIHR4cDpvbGRlcg0KCQkkcGFnZW91dFsncGcnXSA9ICRwZzsN CgkJJHBhZ2VvdXRbJ251bVBhZ2VzJ10gPSAkbnVtUGFnZXM7DQoJCSRwYWdlb3V0WydzJ10g PSAkcHJldGV4dFsncyddOw0KCQkkcGFnZW91dFsnYyddID0gJHByZXRleHRbJ2MnXTsNCgkJ JHBhZ2VvdXRbJ2dyYW5kX3RvdGFsJ10gPSAkZ3JhbmRfdG90YWw7DQoJCSRwYWdlb3V0Wyd0 b3RhbCddID0gJHRvdGFsOw0KDQoJCWlmIChlbXB0eSgkdGhpc3BhZ2UpKQ0KCQkJJHRoaXNw YWdlID0gJHBhZ2VvdXQ7DQoJCWlmICgkcGdvbmx5KQ0KCQkJcmV0dXJuOw0KCX0gZWxzZSB7 DQoJCSRwZ29mZnNldCA9ICRvZmZzZXQ7DQoJfQ0KDQoJLy8gUGhhc2UgMzogaXRlcmF0ZSBv dmVyIHRoZSBuZXcgYXJyYXkgb2JleWluZyBhbnkgb2Zmc2V0L2xpbWl0LiBBbnl0aGluZyBp biB0aGUgcmFuZ2UgZ2V0cyBwb3B1bGF0ZWQgYW5kIHBhcnNlZA0KCSRvdXQgPSBhcnJheSgp Ow0KCSRjdHIgPSAwOw0KCWFydGljbGVfcHVzaCgpOw0KCSRsYXN0cG9zdGVkID0gMDsNCglm b3JlYWNoICgkYWxsX2V2cyBhcyAkaWR4ID0+ICRyb3cpIHsNCgkJaWYgKCRpZHggPj0gJHBn b2Zmc2V0ICYmICRjdHIgPCAkbGltaXQpIHsNCgkJCSR0aGlzcG9zdGVkID0gZGF0ZSgnWS1t LWQnLCAkcm93Wyd1UG9zdGVkJ10pOw0KCQkJJG5leHRwb3N0ZWQgPSBpc3NldCgkYWxsX2V2 c1skaWR4KzFdKSA/IGRhdGUoJ1ktbS1kJywgJGFsbF9ldnNbJGlkeCsxXVsndVBvc3RlZCdd KSA6IDA7DQoJCQkvLyBBZGp1c3QgdGltZXMgc28gdHhwOnBvc3RlZCByZXR1cm4gY29ycmVj dCBzdGFtcHMNCgkJCSRyb3dbJ1Bvc3RlZCddID0gJHJvd1snUG9zdGVkJ10tdHpfb2Zmc2V0 KHN0cnRvdGltZSgkcm93WydQb3N0ZWQnXSkpOw0KCQkJJHJvd1sndVBvc3RlZCddID0gJHJv d1sndVBvc3RlZCddLXR6X29mZnNldCgkcm93Wyd1UG9zdGVkJ10pOw0KCQkJJHJvd1snRXhw aXJlcyddID0gJHJvd1snRXhwaXJlcyddLXR6X29mZnNldChzdHJ0b3RpbWUoJHJvd1snRXhw aXJlcyddKSk7DQoJCQkkcm93Wyd1RXhwaXJlcyddID0gJHJvd1sndUV4cGlyZXMnXS10el9v ZmZzZXQoJHJvd1sndUV4cGlyZXMnXSk7DQoJCQlwb3B1bGF0ZUFydGljbGVEYXRhKCRyb3cp Ow0KCQkJJHRoaXNhcnRpY2xlWydpc19maXJzdCddID0gKCR0aGlzcG9zdGVkICE9ICRsYXN0 cG9zdGVkKTsNCgkJCSR0aGlzYXJ0aWNsZVsnaXNfbGFzdCddID0gKCR0aGlzcG9zdGVkICE9 ICRuZXh0cG9zdGVkKTsNCgkJCSRsYXN0cG9zdGVkID0gJHRoaXNwb3N0ZWQ7DQoJCQkkb3V0 W10gPSAoJHRoaW5nKSA/IHBhcnNlKCR0aGluZykgOiAoKCRmb3JtKSA/IHBhcnNlX2Zvcm0o JGZvcm0pIDogaHJlZigkcm93WydQb3N0ZWQnXSwgcGVybWxpbmt1cmwoJHJvdyksICcgdGl0 bGU9IicuJHJvd1snVGl0bGUnXS4nIicpICk7DQoJCQkkY3RyKys7DQoJCX0NCgl9DQoJYXJ0 aWNsZV9wb3AoKTsNCglyZXR1cm4gZG9XcmFwKCRvdXQsICR3cmFwdGFnLCAkYnJlYWssICRj bGFzcyk7DQp9DQoNCi8vIEFuIHVub3B0aW1pemVkIHdvcmthcm91bmQgd2hlbiAiJVYiIGFu ZCAiJUciIGZhaWxzICh1c3VhbGx5IG9uIFdpbmRvd3MpDQovLyBBbGdvcml0aG0gYWRhcHRl ZCBmcm9tIGh0dHA6Ly93d3cucGVyc29uYWwuZWN1LmVkdS9tY2NhcnR5ci9JU093ZEFMRy50 eHQgd2l0aCB0aGFua3MuDQovLyBBbGwgb3RoZXIgc2hvcnRjdXQgYWxnb3JpdGhtcyBmYWls ZWQgZWRnZSBjYXNlcw0KZnVuY3Rpb24gc21kX2NhbF9pc29fd2VlaygkZm9ybWF0PSclVics ICR0aW1lID0gbnVsbCkgew0KCWlmICghJHRpbWUpICR0aW1lID0gdGltZSgpOw0KCQ0KCSR5 ciA9IHN0cmZ0aW1lKCIlWSIsICR0aW1lKTsNCgkkbGVhcCA9ICggKCAoJHlyICUgNCA9PSAw KSAmJiAoJHlyICUgMTAwICE9IDApICkgfHwgJHlyICUgNDAwID09IDAgKTsNCgkkbGVhcF9w cmV2ID0gKCAoICgoJHlyLTEpICUgNCA9PSAwKSAmJiAoKCR5ci0xKSAlIDEwMCAhPSAwKSAp IHx8ICgkeXItMSkgJSA0MDAgPT0gMCApOw0KCSRkYXlfb2ZfeWVhciA9IHN0cmZ0aW1lKCcl aicsICR0aW1lKTsNCg0KCS8vIEZpbmQgdGhlIHdlZWtkYXkgb2YgSmFuIDFzdCBpbiB0aGUg Z2l2ZW4geWVhcg0KCSR5eSA9ICgkeXIgLSAxKSAlIDEwMDsJDQoJJGMgPSAoJHlyIC0gMSkg LSAkeXk7DQoJJGcgPSAkeXkgKyAoJHl5IC8gNCk7DQoJJGphbjF3ZWVrZGF5ID0gMSArICgo KCgoJGMgLyAxMDApICUgNCkgKiA1KSArICRnKSAlIDcpOw0KDQoJLy8gRmluZCB3ZWVrZGF5 ICggY291bGQgdXNlOiAkd2Vla2RheSA9IHN0cmZ0aW1lKCcldScsICR0aW1lKTsgKQ0KCSRo ID0gJGRheV9vZl95ZWFyICsgKCRqYW4xd2Vla2RheSAtIDEpOw0KCSR3ZWVrZGF5ID0gMSAr ICggKCRoIC0gMSkgJSA3KTsNCg0KCS8vIEZpbmQgaWYgJHRpbWUgZmFsbHMgaW4gaXNvX3ll YXIgWS0xLCBpc29fd2VlayA1MiBvciA1Mw0KCWlmICgoJGRheV9vZl95ZWFyIDw9ICg4IC0g JGphbjF3ZWVrZGF5KSkgJiYgJGphbjF3ZWVrZGF5ID4gNCkgew0KCQkkaXNvX3llYXIgPSAk eXIgLSAxOw0KCQlpZiAoJGphbjF3ZWVrZGF5ID09IDUgfHwgKCRqYW4xd2Vla2RheSA9PSA2 ICYmICRsZWFwX3ByZXYpKSB7DQoJCQkkaXNvX3dlZWsgPSA1MzsNCgkJfSBlbHNlIHsNCgkJ CSRpc29fd2VlayA9IDUyOw0KCQl9DQogICB9IGVsc2Ugew0KCQkkaXNvX3llYXIgPSAkeXI7 DQoJfQ0KDQoJLy8gRmluZCBpZiAkdGltZSBmYWxscyBpbiBpc29feWVhciBZKzEsIGlzb193 ZWVrIDENCglpZiAoJGlzb195ZWFyID09ICR5cikgew0KCQkkaWR4ID0gKCRsZWFwKSA/IDM2 NiA6IDM2NTsNCgkJaWYgKCAoJGlkeCAtICRkYXlfb2ZfeWVhcikgPCAoNCAtICR3ZWVrZGF5 KSApIHsNCgkJCSRpc29feWVhciA9ICR5ciArIDE7DQoJCQkkaXNvX3dlZWsgPSAxOw0KCQl9 DQoJfQ0KDQoJLy8gRmluZCBpZiAkdGltZSBmYWxscyBpbiBpc29feWVhciBZLCBpc29fd2Vl ayAxIHRocnUgNTMNCglpZiAoJGlzb195ZWFyID09ICR5cikgew0KCQkkamR4ID0gJGRheV9v Zl95ZWFyICsgKDcgLSAkd2Vla2RheSkgKyAoJGphbjF3ZWVrZGF5IC0gMSk7DQoJCSRpc29f d2VlayA9ICRqZHggLyA3Ow0KCQlpZiAoJGphbjF3ZWVrZGF5ID4gNCkgew0KCQkJJGlzb193 ZWVrLS07DQoJCX0NCgl9DQoNCgkvLyBSZXBsYWNlbWVudCBhcnJheQ0KCSRyZXBzID0gYXJy YXkoDQoJCSclVicgPT4gc3RyX3BhZCgkaXNvX3dlZWssIDIsICcwJywgU1RSX1BBRF9MRUZU KSwNCgkJJyVHJyA9PiAkaXNvX3llYXIsDQoJCSclZycgPT4gc3Vic3RyKCRpc29feWVhciwg MiksDQoJKTsNCglyZXR1cm4gc3RydHIoJGZvcm1hdCwgJHJlcHMpOw0KfQ0KDQovLyBBZGFw dGVkIGZyb206IGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdHJmdGltZS5w aHANCmZ1bmN0aW9uIHNtZF9jYWxfcmVmb3JtYXRfd2luKCRmb3JtYXQsICR0cyA9IG51bGwp IHsNCgkvLyBPbmx5IFdpbiBwbGF0Zm9ybXMgbmVlZCBhcHBseQ0KCWlmICghaXNfd2luZG93 cygpKSByZXR1cm4gJGZvcm1hdDsNCglpZiAoISR0cykgJHRzID0gdGltZSgpOw0KDQoJJG1h cHBpbmcgPSBhcnJheSgNCgkJJyVDJyA9PiBzcHJpbnRmKCIlMDJkIiwgZGF0ZSgiWSIsICR0 cykgLyAxMDApLA0KCQknJUQnID0+ICclbS8lZC8leScsDQoJCSclZScgPT4gc3ByaW50Zigi JScgMmQiLCBkYXRlKCJqIiwgJHRzKSksDQoJCSclRicgPT4gJyVZLSVtLSVkJywNCgkJJyVn JyA9PiBzbWRfY2FsX2lzb193ZWVrKCclZycsICR0cyksDQoJCSclRycgPT4gc21kX2NhbF9p c29fd2VlaygnJUcnLCAkdHMpLA0KCQknJWgnID0+ICclYicsDQoJCSclbCcgPT4gc3ByaW50 ZigiJScgMmQiLCBkYXRlKCJnIiwgJHRzKSksDQoJCSclbicgPT4gIlxuIiwNCgkJJyVQJyA9 PiBkYXRlKCdhJywgJHRzKSwNCgkJJyVyJyA9PiBkYXRlKCJoOmk6cyIsICR0cykgLiAiICVw IiwNCgkJJyVSJyA9PiBkYXRlKCJIOmkiLCAkdHMpLA0KCQknJXMnID0+IGRhdGUoJ1UnLCAk dHMpLA0KCQknJXQnID0+ICJcdCIsDQoJCSclVCcgPT4gJyVIOiVNOiVTJywNCgkJJyV1JyA9 PiAoJHcgPSBkYXRlKCJ3IiwgJHRzKSkgPyAkdyA6IDcsDQoJCSclVicgPT4gc21kX2NhbF9p c29fd2VlaygnJVYnLCAkdHMpLA0KCSk7DQoJJGZvcm1hdCA9IHN0cl9yZXBsYWNlKA0KCQlh cnJheV9rZXlzKCRtYXBwaW5nKSwNCgkJYXJyYXlfdmFsdWVzKCRtYXBwaW5nKSwNCgkJJGZv cm1hdA0KCSk7DQoNCglyZXR1cm4gJGZvcm1hdDsNCn0NCg0KLy8gQ2hlY2sgdGhlIHBhc3Nl ZCB0aW1lc3RhbXAgYWdhaW5zdCBldmVyeSB0aW1lIHJlc3RyaWN0aW9uIGFuZCByZXR1cm4g dHJ1ZSBpZiBpdCBwYXNzZXMgdGhlbSBhbGwNCmZ1bmN0aW9uIHNtZF9pbmNsdWRlX2V2ZW50 KCR0cywgJG5vdywgJGlnbiwgJHRpbWUsICRmcm9tLCAkdG8sICRtb250aCkgew0KCSRzaG93 ID0gYXJyYXkoKTsNCgkkc2hvd1tdID0gIWluX2FycmF5KGRhdGUoImQtTS1ZIiwgJHRzKSwg JGlnbik7DQoJJHRpbWUgPSBkb19saXN0KCR0aW1lKTsNCgkkc2hvd29yID0gZmFsc2U7DQoJ Zm9yZWFjaCgkdGltZSBhcyAkdG0pIHsNCgkJc3dpdGNoKCR0bSkgew0KCQkJY2FzZSAiYW55 IjoNCgkJCQkkc2hvd29yID0gdHJ1ZTsNCgkJCQlicmVhazsNCgkJCWNhc2UgImZ1dHVyZSI6 DQoJCQkJJHNob3dvciA9ICRzaG93b3IgfHwgKCgkdHMgPiAkbm93KSA/IHRydWUgOiBmYWxz ZSk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICJ0b2RheSI6DQoJCQkJJHNob3dvciA9ICRzaG93 b3IgfHwgKCgkdHMgPj0gc3RydG90aW1lKGRhdGUoJ1ktbS1kIDAwOjAwOjAwJywgJG5vdykp ICYmICR0cyA8PSBzdHJ0b3RpbWUoZGF0ZSgnWS1tLWQgMjM6NTk6NTknLCAkbm93KSkpID8g dHJ1ZSA6IGZhbHNlKTsNCgkJCQlicmVhazsNCgkJCWRlZmF1bHQgOg0KCQkJCSRzaG93b3Ig PSAkc2hvd29yIHx8ICgoJHRzIDwgJG5vdykgPyB0cnVlIDogZmFsc2UpOw0KCQkJCWJyZWFr Ow0KCQl9DQoJfQ0KCSRzaG93W10gPSAkc2hvd29yOw0KCWlmICgkZnJvbSkgeyAkc2hvd1td ID0gKCR0cyA+PSBzYWZlX3N0cnRvdGltZSgkZnJvbSkpID8gdHJ1ZSA6IGZhbHNlOyB9DQoJ aWYgKCR0bykgeyAkc2hvd1tdID0gKCR0cyA8PSBzYWZlX3N0cnRvdGltZSgkdG8pKSA/IHRy dWUgOiBmYWxzZTsgfQ0KCWlmICgkbW9udGgpIHsgJHNob3dbXSA9IChkYXRlKCJZLW0iLCAk dHMpID09ICRtb250aCkgPyB0cnVlIDogZmFsc2U7IH0NCg0KCXJldHVybiAoIWluX2FycmF5 KDAsICRzaG93KSkgPyB0cnVlIDogZmFsc2U7DQp9DQoNCi8vIENvbnZlcnQgZGF0ZSByYW5n ZXMgbGlrZSAyNC1PY3QtMDggPT4gNS1Ob3YtMDggdG8gYW4gYXJyYXkgb2YgZGlzY3JldGUg ZGF0ZSBlbnRpdGllcw0KLy8gQWxzbywgd2Vla2RheSB2YWxzIHN1Y2ggYXMge1N1bjpNb246 V2VkfSB3b3VsZCByZXR1cm4gdGhvc2UgZGF5cyBiZXR3ZWVuICRzdGFydCBhbmQgJGVuZA0K ZnVuY3Rpb24gc21kX2V4cGFuZF9kYXRlcmFuZ2UoJHJhbmdlLCAkc3RhcnQ9JycsICRlbmQ9 JycsICRmbXQ9JyVzJykgew0KCSRvdXQgPSBhcnJheSgpOw0KCSRybmcgPSBkb19saXN0KCRy YW5nZSwgIj0+Iik7DQoNCglpZiAoY291bnQoJHJuZykgPiAxKSB7DQoJCS8vIFJhbmdlIGV4 cGFuc2lvbg0KCQkkZGlmZiA9IHNhZmVfc3RydG90aW1lKCRybmdbMV0pIC0gc2FmZV9zdHJ0 b3RpbWUoJHJuZ1swXSk7DQoJCSRkaWZmZGF5cyA9IGNlaWwoJGRpZmYgLyAoNjAqNjAqMjQp KTsgLy8gZGF5cyBiZXR3ZWVuIGRhdGVzDQoJCWZvciAoJGpkeCA9IDA7ICRqZHggPD0gJGRp ZmZkYXlzOyAkamR4KyspIHsNCgkJCSRvdXRbXSA9IHNhZmVfc3RyZnRpbWUoJGZtdCwgc2Fm ZV9zdHJ0b3RpbWUoJHJuZ1swXSAuICgoJGpkeD09MCkgPyAnJyA6ICcrJy4kamR4LicgZGF5 cycpKSk7DQoJCX0NCgl9IGVsc2UgaWYgKCRzdGFydCAmJiAkZW5kICYmIHN0cnBvcygkcmFu Z2UsICd7JykgPT09IDAgJiYgc3RycG9zKCRyYW5nZSwgJ30nKSA9PT0gc3RybGVuKCRyYW5n ZSktMSkgew0KCQkvLyBEYXkgb2Ygd2VlayBleHBhbnNpb24NCgkJJGRheXMgPSBkb19saXN0 KHRyaW0oJHJhbmdlLCd7fScpLCAnOicpOw0KCQkkZGlmZmRheXMgPSBjZWlsKCgkZW5kLSRz dGFydCkgLyAoNjAqNjAqMjQpKTsNCgkJZm9yICgkamR4ID0gMDsgJGpkeCA8PSAkZGlmZmRh eXM7ICRqZHgrKykgew0KCQkJJHRtID0gJHN0YXJ0ICsgKCRqZHgqNjAqNjAqMjQpOw0KCQkJ aWYgKGluX2FycmF5KGRhdGUoJ0QnLCAkdG0pLCAkZGF5cykpIHsNCgkJCQkkb3V0W10gPSBz YWZlX3N0cmZ0aW1lKCRmbXQsICR0bSk7DQoJCQl9DQoJCX0NCgl9IGVsc2Ugew0KCQkvLyBT aW5nbGUgZGF0ZQ0KCQkkb3V0W10gPSBzYWZlX3N0cmZ0aW1lKCRmbXQsIHNhZmVfc3RydG90 aW1lKCRybmdbMF0pKTsNCgl9DQoJcmV0dXJuICRvdXQ7DQp9IjtzOjQ6InR5cGUiO3M6MToi MCI7czo1OiJvcmRlciI7czoxOiI1IjtzOjU6ImZsYWdzIjtzOjE6IjAiO3M6NDoiaGVscCI7 czo2MzUwMjoiPGRpdiBpZD0ic21kX2hlbHAiPgoKCTxoMT5zbWRfY2FsZW5kYXI8L2gxPgoK CTxwPlJlbmRlciBhIGNhbGVuZGFyIHdpdGggb25lIG9yIG1vcmUgYXJ0aWNsZXMgYXMgZXZl bnRzIG9uIGVhY2ggZGF5LiBVc2VmdWwgZm9yIGdpZyBndWlkZXMsICYjODIyMDt3aGF0JiM4 MjE3O3Mgb24mIzgyMjE7IG9yIHNjaGVkdWxpbmcgYXBwcy48L3A+CgoJPGgyIGlkPSJmZWF0 dXJlcyI+RmVhdHVyZXM8L2gyPgoKCTx1bD4KCQk8bGk+RnVsbC1zaXplIC8gbWluaSA8YSBo cmVmPSIjc21kY2FsIj5jYWxlbmRhcjwvYT4gYnkgbW9udGgsIHdpdGggb3B0aW9uYWwgPHNw YW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlazwvbGk+CgkJPGxpPk5hdjogbmV4dC9w cmV2IG1vbnRoIG9yIG1vbnRoL3llYXIgZHJvcGRvd24uIFllYXIgcmFuZ2UgY2FuIGJlIGZy b20gZmlyc3QvbGFzdCBhcnRpY2xlIG9yICsvLSBOIHllYXJzPC9saT4KCQk8bGk+T25lIGFy dGljbGUgPSBvbmUgZXZlbnQsIG5hdGl2ZSB0byA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPjogUG9zdGVkIGRhdGUgPSB0aGUgZGF0ZSBpdCBhcHBlYXJzIGluIHRoZSBjYWxlbmRh ciAodW5sZXNzIG92ZXJyaWRkZW4pPC9saT4KCQk8bGk+RmlsdGVyIGV2ZW50cyBieSBjYXRl Z29yeSAvIHNlY3Rpb24gLyBhdXRob3IgLyBzdGF0dXMgLyB0aW1lIG9yIGV4cGlyeTwvbGk+ CgkJPGxpPkN1c3RvbSBmaWVsZCB0byBzcGVjaWZ5IGV2ZW50IGZyZXF1ZW5jeSAoMSB3ZWVr IC8gMTAgZGF5cyAvIDMgbW9udGhzIC8gZXRjKTwvbGk+CgkJPGxpPkN1c3RvbSBmaWVsZHMg Zm9yIGluL2V4Y2x1c2lvbnMgKGEgbGlzdCBvZiBkYXRlcyBvbiB3aGljaCB0aGF0IGV2ZW50 IGlzIChyZSlzY2hlZHVsZWQvY2FuY2VsbGVkL29taXR0ZWQpPC9saT4KCQk8bGk+TXVsdGkt ZGF5IHNwYW5uZWQgZXZlbnRzIGJhc2VkIG9uIHRoZSBhcnRpY2xlJiM4MjE3O3MgZXhwaXJ5 PC9saT4KCQk8bGk+RGlzcGxheSBmdXR1cmUsIGV4cGlyZWQgb3Igc3RpY2t5IGV2ZW50czwv bGk+CgkJPGxpPkhvbGlkYXlzIG9uIGEgcGVyLWNhbGVuZGFyIGJhc2lzPC9saT4KCQk8bGk+ RWFjaCBldmVudCBjYW4gYmUgcGFzc2VkIHRvIGEgZm9ybS9jb250YWluZXIgc28geW91IGNh biBidWlsZCBpdCB5b3VyIHdheS4gU3Bhbm5lZCBhbmQvb3IgcmVjdXJyaW5nIGV2ZW50cyBj YW4gYmUgc2VudCB0byBhIHNlcGFyYXRlIGZvcm0uIE9yIHNlbmQgZWFjaCBjZWxsIHRvIGEg Zm9ybTwvbGk+CgkJPGxpPjxhIGhyZWY9IiNpZmNhbCI+Q29uZGl0aW9uYWw8L2E+IHRlc3Rz IGZvciBmbGFncyBhbmQgZGF0ZXMgc28geW91IGNhbiBidWlsZCB5b3VyIG93biBsb2dpYzwv bGk+CgkJPGxpPlRhYmxlLSwgcm93LSwgY2VsbC0sIGFuZCBldmVudC1sZXZlbCBjbGFzc2Vz IGZvciBpbmRpY2F0aW5nIGRpZmZlcmVudCBzY2VuYXJpb3M7IGN1c3RvbSBjbGFzc2VzIGNh biBiZSBkZWZpbmVkPC9saT4KCQk8bGk+VGFncyB0byA8YSBocmVmPSIjYXJ0ZXYiPmRpc3Bs YXkgcmVjdXJyaW5nIGV2ZW50czwvYT4gOyBldmVudC9jYWxlbmRhciA8YSBocmVmPSIjY2Fs aW5mbyI+Y2hhcmFjdGVyaXN0aWNzPC9hPiA7IG9yIHRoZSA8YSBocmVmPSIjY2Fsbm93Ij5j dXJyZW50IGRhdGUvdGltZTwvYT48L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImF1dGhvciI+QXV0 aG9yIC8gY3JlZGl0czwvaDI+CgoJPHA+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29t L2NvbW1lbnRGb3JtIj5TdGVmIERhd3NvbjwvYT4uIEpvaW50bHkgZnVuZGVkIGJ5IGdlbmVy b3VzIGRvbmF0b3JzOiBtcmRhbGUsIHdvb2YsIGpha29iLCByZW5vYmlyZCBhbmQgam9lYmFp Y2guIE9yaWdpbmFsbHkgYmFzZWQgb24gbWRwX2NhbGVuZGFyLiBBbGwgcHJvcHMgdG8gdGhl IG9yaWdpbmFsIGF1dGhvciwgYW5kIG9mIGNvdXJzZSB0aGUgY2xhc3MgdXBvbiB3aGljaCB0 aGUgY2FsZW5kYXIgaXMgYmFzZWQuPC9wPgoKCTxoMiBpZD0iaW5zdGFsbCI+SW5zdGFsbGF0 aW9uIC8gVW5pbnN0YWxsYXRpb248L2gyPgoKCTxwIGNsYXNzPSJpbXBvcnRhbnQiPlJlcXVp cmVzIFRleHRwYXR0ZXJuIDQuMi4wKzwvcD4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZy b20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy8xMDUy L3NtZF9jYWxlbmRhciI+dGV4dHBhdHRlcm4ub3JnPC9hPiwgb3IgdGhlIDxhIGhyZWY9Imh0 dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUgcGFnZTwvYT4sIHBhc3RlIHRoZSBj b2RlIGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IEFkbWluIC0mZ3Q7 IFBsdWdpbnMgcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxlIHRoZSBwbHVnaW4uIFZpc2l0IHRo ZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/ aWQ9MjkzNzUiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0byByZXBvcnQg b24gdGhlIHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9wPgoKCTxwPlRv IHVuaW5zdGFsbCwgZGVsZXRlIGZyb20gdGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFnZS48 L3A+CgoJPGgyIGlkPSJuYW1pbmciPk5hbWluZyBjb252ZW50aW9uPC9oMj4KCgk8cD5UaGUg Y29yZSBvZiB0aGUgcGx1Z2luIGlzIHRoZSBzbWRfY2FsZW5kYXIgdGFnLCB3aGljaCByZW5k ZXJzIGEgc3RhbmRhcmQgY2FsZW5kYXIgd2l0aCBlYWNoIGNlbGwgY29udGFpbmluZyBvbmUg b3IgbW9yZSBldmVudHMuIEJlZm9yZSBkaXZpbmcgaW50byB0aGUgdGFncyBoZXJlIGFyZSB0 aGUgYmFzaWNzOjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jYWxpZDwv c3Bhbj4gOiB5b3UgbWF5IHB1dCBtb3JlIHRoYW4gb25lIGNhbGVuZGFyIG9uIGEgcGFnZTog ZWFjaCBjYW4gYmUgdW5pcXVlbHkgcmVmZXJlbmNlZCB3aXRoIGEgY2FsZW5kYXIgSUQ8L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2VsbDwvc3Bhbj4gOiBhIHNwZWNpZmljIGRh eSBvbiB0aGUgY2FsZW5kYXIgaW4gYSBwYXJ0aWN1bGFyIG1vbnRoL3llYXI8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+ZXZlbnQ8L3NwYW4+IDogYW4gYXJ0aWNsZS4gSXQmIzgy MTc7cyBiZXN0IHRvIHVzZSBhIGRlZGljYXRlZCBzZWN0aW9uIGZvciBldmVudHMgdG8ga2Vl cCB0aGluZ3MgbmVhdGVyLCBidXQgeW91IGNhbiBkaXNwbGF5IGV2ZW50cyBmcm9tIG1vcmUg dGhhbiBvbmUgc2VjdGlvbiBpZiB5b3Ugd2lzaC4gQW55IGFydGljbGUgd3JpdHRlbiBpbiB0 aGUgZ2l2ZW4gc2VjdGlvbihzKSB3aWxsIGFwcGVhciBvbiB0aGUgY2FsZW5kYXIgYXMgbG9u ZyBhcyBpdHMgZXhwaXJ5IGhhc24mIzgyMTc7dCBiZWVuIG1ldC4gTW9yZSB0aGFuIG9uZSBl dmVudCBtYXkgYXBwZWFyIGluIGVhY2ggY2VsbDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5ldmVudCBmbGFnPC9zcGFuPiA6IGV2ZW50cyBjYW4gZWl0aGVyIGJlIDxhIGhyZWY9 IiNldmVudHMiPnN0YW5kYXJkPC9hPiwgdGhleSBjYW4gPGEgaHJlZj0iI3JlY3VyIj5yZWN1 cjwvYT4sIHRoZXkgY2FuIHNwYW4gPGEgaHJlZj0iI211bHRpIj5tdWx0aXBsZTwvYT4gZGF5 cywgZGF0ZXMgY2FuIGJlIDxhIGhyZWY9IiNjYW5jZWwiPnVuc2NoZWR1bGVkIG9yIG9taXR0 ZWQ8L2E+IGZyb20gdGhlIGNhbGVuZGFyLCBvciA8YSBocmVmPSIjZXh0cmEiPmV4dHJhPC9h PiBkYXRlcyBjYW4gYmUgYWRkZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2Vs bCBmbGFnPC9zcGFuPiA6IGEgc2VyaWVzIG9mIGZsYWdzIGFyZSB1c2VkIHRvIGxhYmVsIGVh Y2ggY2VsbCBhY2NvcmRpbmcgdG8gd2hhdCBpdCBjb250YWlucy4gQ2VsbHMgY2FuIGVpdGhl ciBiZSBlbXB0eSAoaS5lLiBubyBkYXRlOiB0aGUgZmlsbGVyIGNlbGxzIGF0IHRoZSBzdGFy dC9lbmQgb2YgdGhlIG1vbnRoKSwgdGhleSBjYW4gYmUgYSByZWd1bGFyIGRheSAobm8gZmxh ZyksIHRoZXkgY2FuIGNvbnRhaW4gYW4gZXZlbnQsIG9yIG1heSBiZSBhIDxhIGhyZWY9IiNo b2xpZGF5cyI+aG9saWRheTwvYT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2xh c3MgbGV2ZWw8L3NwYW4+IDogKGV4cGxvcmVkIGluIHRoZSA8Y29kZT5jbGFzc2xldmVsczwv Y29kZT4gYXR0cmlidXRlKS4gRWFjaCBmbGFnZ2VkIGNlbGwgY2FuIGJlIGdpdmVuIGEgPHNw YW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgYmFzZWQgb24gaXRzIGZsYWcgbmFt ZShzKS4gVGhlIGNsYXNzIG5hbWVzIGFyZSBzaW1wbHkgZWFjaCBmbGFnIG5hbWUgcHJlZml4 ZWQgd2l0aCB0aGUgdmFsdWUgZ2l2ZW4gaW4gdGhlIDxjb2RlPmNsYXNzcHJlZml4ZXM8L2Nv ZGU+IGF0dHJpYnV0ZS4gVGhlc2UgY2xhc3NlczoKCTx1bD4KCQk8bGk+YXBwZWFyIGluIGEg Y2VsbCwgc28geW91IGNhbiBzdHlsZSB0aGUgd2hvbGUgY2VsbDwvbGk+CgkJPGxpPmFwcGVh ciBvbiBlYWNoIGV2ZW50LCBzbyB5b3UgY2FuIHN0eWxlIHBhcnRpY3VsYXIgdHlwZXMgb2Yg ZXZlbnQ8L2xpPgoJCTxsaT5tYXkgYmUgJiM4MjE2O2NvcGllZCYjODIxNzsgZnJvbSB0aGUg ZXZlbnQgdG8gdGhlIGNlbGwgaXRzZWxmLCBzbyB5b3UgY2FuIHN0eWxlIHRoZSB3aG9sZSBj ZWxsIGJhc2VkIG9uIHRoZSBldmVudHMgaXQgY29udGFpbnM8L2xpPgoJPC91bD48L2xpPgoJ PC91bD4KCgk8cD5GbGFncyBwcm92aWRlIGluZm9ybWF0aW9uIDxlbT5hYm91dDwvZW0+IHRo ZSBjZWxsIC8gZXZlbnQgICYjODIxMjsgYW5kIGNhbiBiZSB0ZXN0ZWQgd2l0aCB0aGUgY29u ZGl0aW9uYWwgdGFnICYjODIxMjsgd2hpbGUgdGhlIGNvcnJlc3BvbmRpbmcgY2xhc3MgbmFt ZXMgYXJlIGp1c3QgdGhlcmUgZm9yIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bh bj4gdXNlLjwvcD4KCgk8cD5XaGVuIGFzc2lnbmVkIGFzIGNsYXNzZXMsIGZsYWdzIDxzdHJv bmc+YWx3YXlzPC9zdHJvbmc+IHRha2UgdGhlICYjODIxNjtjbGFzcyYjODIxNzsgcHJlZml4 IChpLmUuIHRoZSAxc3QgaXRlbSBnaXZlbiBpbiBzbWRfY2FsZW5kYXImIzgyMTc7cyA8Y29k ZT5jbGFzc3ByZWZpeGVzPC9jb2RlPiBhdHRyaWJ1dGUpICYjODIxMjsgd2hldGhlciB0aGV5 IGFwcGVhciBhdCB0aGUgPGVtPmV2ZW50PC9lbT4gb3IgPGVtPmNlbGw8L2VtPiBsZXZlbHMu IFRoZSBvbmx5IGNsYXNzZXMgdGhhdCB0YWtlIHRoZSBvcHRpb25hbCAybmQgJiM4MjE2O2V2 ZW50JiM4MjE3OyBwcmVmaXggYXJlIHRoZSBmaWVsZHMgeW91IHNwZWNpZnkgaW4gdGhlIDxj b2RlPmV2ZW50Y2xhc3NlczwvY29kZT4gYXR0cmlidXRlLjwvcD4KCgk8aDIgaWQ9ImV2ZW50 cyI+U3RhbmRhcmQgY2VsbHMgYW5kIGV2ZW50czwvaDI+CgoJPHA+VGhlIGZvbGxvd2luZyBj dW11bGF0aXZlIG5hbWluZyBydWxlcyBhcHBseTo8L3A+CgoJPHVsPgoJCTxsaT5Ob3JtYWwg KGRheSkgY2VsbHMgZG9uJiM4MjE3O3QgaGF2ZSBhIGNsYXNzIGFzc2lnbmVkIHRvIHRoZW0g dW5sZXNzIHlvdSBzcGVjaWZ5IG9uZSB3aXRoIDxjb2RlPmNlbGxjbGFzczwvY29kZT48L2xp PgoJCTxsaT5BbnkgY2VsbCB0aGF0IGNvbnRhaW5zIGFuIGV2ZW50IChvZiBhbnkgdHlwZSkg aXMgZmxhZ2dlZCBhcyBhbiA8Y29kZT5ldmVudDwvY29kZT48L2xpPgoJCTxsaT5BbnkgY2Vs bCB0aGF0IGZhbGxzIG9uIGEgaG9saWRheSBpcyBnaXZlbiB0aGUgZmxhZyA8Y29kZT5ob2xz PC9jb2RlPjwvbGk+CgkJPGxpPlRoZSBjdXJyZW50IGRheSBpcyBnaXZlbiB0aGUgZmxhZyA8 Y29kZT50b2RheTwvY29kZT48L2xpPgoJPC91bD4KCgk8cD5BIHNpbmdsZSBldmVudCAoYWth IGFydGljbGUpIHdpdGggYSBQb3N0ZWQgZGF0ZSB3aWxsIGJlIGZsYWdnZWQgPGNvZGU+c3Rh bmRhcmQ8L2NvZGU+LCB1bmxlc3MgaXQgcmVjdXJzIG9yIHNwYW5zIG1vcmUgdGhhbiBvbmUg ZGF5LjwvcD4KCgk8aDIgaWQ9InJlY3VyIj5SZWN1cnJpbmcgZXZlbnRzPC9oMj4KCgk8cD5J ZiB5b3UgaGF2ZSBub21pbmF0ZWQgYSBmaWVsZCBhcyB5b3VyIDxjb2RlPnN0ZXBmaWVsZDwv Y29kZT4geW91IG1heSBlbnRlciBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZyZXF1ZW5j aWVzIGF0IHdoaWNoIHRoZSBldmVudCBpcyB0byByZXBlYXQuIFRoZSBmb3JtYXQgb2YgdGhl IHJlcGV0aXRpb24gaXMgPHN0cm9uZz5udW1iZXIgaW50ZXJ2YWw8L3N0cm9uZz4sIGUuZy4g PGNvZGU+NCB3ZWVrczwvY29kZT4gb3IgPGNvZGU+MTAgZGF5czwvY29kZT4gb3IgPGNvZGU+ NiBtb250aHM8L2NvZGU+LiBUaGUgcGx1Z2luIHdpbGwgZG8gaXRzIGJlc3QgdG8gZmlndXJl IG91dCB3aGF0IHlvdSBtZWFuLiBTZWUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3Nv ZnR3YXJlL3Rhci9tYW51YWwvaHRtbF9ub2RlL0RhdGUtaW5wdXQtZm9ybWF0cy5odG1sIj5k YXRlIGlucHV0IGZvcm1hdHM8L2E+IGZvciBtb3JlLjwvcD4KCgk8cD5BIGZldyBwb2ludHM6 PC9wPgoKCTx1bD4KCQk8bGk+PGNvZGU+c2Vjb25kIHR1ZXNkYXk8L2NvZGU+IHdpbGwgc2hv dyBhbiBldmVudCA8ZW0+ZXZlcnk8L2VtPiAybmQgVHVlc2RheSBmcm9tIHRoZSBzdGFydCBk YXRlIChpLmUuIGZvcnRuaWdodGx5KTwvbGk+CgkJPGxpPjxjb2RlPnNlY29uZCB0dWVzZGF5 ID9tb250aCA/eWVhcjwvY29kZT4gd2lsbCBzdWJzdGl0dXRlIHRoZSBjdXJyZW50IG1vbnRo IGFuZCB5ZWFyIGluIGZpcnN0LCBhbmQgPGVtPnRoZW48L2VtPiBjYWxjdWxhdGUgdGhlIGRh dGUsIHJlc3VsdGluZyBpbiB0aGUgZXZlbnQgb25seSByZWN1cnJpbmcgb24gdGhlIDJuZCBU dWVzZGF5IG9mIGVhY2ggbW9udGguIFlvdSA8c3Ryb25nPm11c3Q8L3N0cm9uZz4gdXNlIGJv dGggPGNvZGU+P21vbnRoPC9jb2RlPiBhbmQgPGNvZGU+P3llYXI8L2NvZGU+IGlmIHlvdSBj aG9vc2UgdGhpcyB0eXBlIG9mIGRhdGUgb3IgeW91ciBldmVudCB3b24mIzgyMTc7dCBhcHBl YXI8L2xpPgoJCTxsaT48Y29kZT4yMCA/bW9udGg8L2NvZGU+IHdpbGwgc2hvdyB0aGUgZXZl bnQgb24gdGhlIDIwdGggb2YgZXZlcnkgbW9udGg8L2xpPgoJCTxsaT50aGluZ3MgbGlrZSA8 Y29kZT5maXJzdCB0aHVyc2RheTwvY29kZT4gb3IgPGNvZGU+bGFzdCBmcmlkYXk8L2NvZGU+ IG9yIDxjb2RlPnRoaXMgdHVlc2RheTwvY29kZT4gZG9uJiM4MjE3O3QgbmVlZCB0aGUgPGNv ZGU+P21vbnRoPC9jb2RlPiBvciA8Y29kZT4/eWVhcjwvY29kZT4gYmVjYXVzZSB0aGV5IGNh biA8ZW0+b25seTwvZW0+IG9jY3VyIG1vbnRobHksIGFuZCB3aWxsIG9ubHkgc2hvdyB0aGUg ZXZlbnQgb24gdGhlIGdpdmVuIGRheSBvZiB0aGUgbW9udGg8L2xpPgoJPC91bD4KCgk8cD5J ZiB5b3UgY2FuIGZpbmQgYSB1c2UgZm9yIGl0LCB5b3UgbWF5IHNwZWNpZnkgbXVsdGlwbGUg ZnJlcXVlbmNpZXMsIGZvciBleGFtcGxlIDxjb2RlPjMgZGF5cywgMSB3ZWVrPC9jb2RlPi4g VGhhdCBtZWFucyB5b3Ugd291bGQgc2VlIHRoZSBldmVudCBvbiB0aGUgMXN0IGRheSwgdGhl biB0aGUgM3JkLCA2dGgsIDd0aCwgOXRoLCAxMnRoLCAxNHRoLCAxNXRoLCAxOHRoLCAyMXN0 LCAyNHRoJiM4MjMwOyBkYXlzIHRoZXJlYWZ0ZXIuIE5vdGUgdGhhdCB0aGUgZXZlbnQgb25s eSBvY2N1cnMgb25jZSBvbiB0aGUgMjFzdCBkYXkgZXZlbiB0aG91Z2ggdGhlIHR3byBmcmVx dWVuY2llcyBjbGFzaC48L3A+CgoJPHA+UmVjdXIgcnVsZXM6PC9wPgoKCTx1bD4KCQk8bGk+ VGhlIHJlcGV0aXRpb24gd2lsbCBjb250aW51ZSBmb3JldmVyPHN1cCBpZD0iZm5yZXYxNTg5 NTczODU2NGQ4ZjlmYmNkNDNhMyIgY2xhc3M9ImZvb3Rub3RlIj48YSBocmVmPSIjZm4xNTg5 NTczODU2NGQ4ZjlmYmNkNDNhMyI+MTwvYT48L3N1cD4gdW5sZXNzIHlvdSBzcGVjaWZ5IGFu IGV4cGlyeSB0aW1lPC9saT4KCQk8bGk+VGhlIHZlcnkgZmlyc3QgZXZlbnQgb2YgYSByZWN1 cnJpbmcgc2V0IHdpbGwgYmUgZmxhZ2dlZCB3aXRoIDxjb2RlPnJlY3VyZmlyc3Q8L2NvZGU+ PC9saT4KCQk8bGk+RWFjaCBmb2xsb3dpbmcgY2VsbCB0aGF0IGNvbnRhaW5zIGEgcmVjdXJy aW5nIGV2ZW50IHdpbGwgYmUgZmxhZ2dlZCB3aXRoIDxjb2RlPnJlY3VyPC9jb2RlPjwvbGk+ CgkJPGxpPkJvdGggZmxhZ3MgYXJlIGFwcGxpZWQgdG8gdGhlIGV2ZW50IGFzIGNsYXNzZXMg dXNpbmcgdGhlIGNsYXNzIHByZWZpeDwvbGk+CgkJPGxpPlJlcGVhdGVkIGV2ZW50cyBtYXkg YmUgPGEgaHJlZj0iI2NhbmNlbCI+Y2FuY2VsbGVkIG9yIG9taXR0ZWQ8L2E+IG9uIGEgcGVy LWRhdGUgYmFzaXM8L2xpPgoJPC91bD4KCgk8cCBjbGFzcz0ic21hbGwiIGlkPSJmbjE1ODk1 NzM4NTY0ZDhmOWZiY2Q0M2EzIj48c3VwPjE8L3N1cD4gJiM4MjE2O2ZvcmV2ZXImIzgyMTc7 IGlzIGxpbWl0ZWQgdG8gOTk5OTkgcmVjdXJyZW5jZXMgcGVyIGV2ZW50LCBvciAyNzQgeWVh cnMmIzgyMTc7IHdvcnRoIG9mIGRhaWx5IGV2ZW50cy4gRWl0aGVyIDxzcGFuIGNsYXNzPSJj YXBzIj5VTklYPC9zcGFuPiB3aWxsIHJ1biBvdXQgb2YgZGF0ZXMgb3IgPHNwYW4gY2xhc3M9 ImNhcHMiPlBIUDwvc3Bhbj4gd2lsbCBydW4gb3V0IG9mIG1lbW9yeSBsb25nIGJlZm9yZSB5 b3UgcmVhY2ggdGhpcyBsaW1pdCA6LSk8L3A+CgoJPGgyIGlkPSJtdWx0aSI+TXVsdGktZGF5 IChzcGFubmVkKSBldmVudHM8L2gyPgoKCTxwPkFueSBldmVudCB0aGF0IGhhczo8L3A+CgoJ PHVsPgoJCTxsaT5hIHN0YXJ0IGRhdGU8L2xpPgoJCTxsaT5hbiBleHBpcnkgZGF0ZSB0aGF0 IGlzIGEgZGF5IG9yIG1vcmUgbGF0ZXIgdGhhbiB0aGUgc3RhcnQgZGF0ZSwgYW5kPC9saT4K CQk8bGk+PGVtPmRvZXMgbm90PC9lbT4gaGF2ZSBhbnkgcmVwZXRpdGlvbiBpbiBpdHMgPGNv ZGU+c3RlcGZpZWxkPC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxwPmlzIGZsYWdnZWQgYXMgYSA8 Y29kZT5tdWx0aTwvY29kZT4uIEJ5IGRlZmF1bHQgdGhlIGZpcnN0IGV2ZW50IGlzIGRpc3Bs YXllZCBpbiBmdWxsIGFuZCBlYWNoICYjODIxNjtjb250aW51YXRpb24mIzgyMTc7IGV2ZW50 IGlzIHNob3duIG9ubHkgYXMgYSByaWdodCBhcnJvdyBpbiBzdWJzZXF1ZW50IGNlbGxzLiBF dmVudHMgbWF5IHNwYW4gbW9udGhzIG9yIHllYXJzIGFuZCB0aGUgcGx1Z2luIGZpZ3VyZXMg ZXZlcnl0aGluZyBvdXQgdXNpbmcgZmxhZyBydWxlczo8L3A+CgoJPHVsPgoJCTxsaT5UaGUg Zmlyc3QgY2VsbCBvZiBhIHNwYW5uZWQgc2V0IGlzIDxjb2RlPm11bHRpZmlyc3Q8L2NvZGU+ PC9saT4KCQk8bGk+VGhlIGxhc3QgY2VsbCBpcyA8Y29kZT5tdWx0aWxhc3Q8L2NvZGU+PC9s aT4KCQk8bGk+RXZlcnkgb3RoZXIgY2VsbCBpcyBhIDxjb2RlPm11bHRpPC9jb2RlPiA8ZW0+ ZXhjZXB0PC9lbT4gaWYgdGhlIGV2ZW50IHJvbGxzIG92ZXIgaW50byB0aGUgbmV4dCBtb250 aC4gSW4gdGhhdCBjYXNlLCB0aGUgZW50cnkgb24gdGhlIDFzdCBvZiB0aGUgbW9udGggaXMg YSA8Y29kZT5tdWx0aXByZXY8L2NvZGU+IHRvIGluZGljYXRlIGl0IGJlbG9uZ3MgdG8gYSBw cmV2aW91cyBldmVudDwvbGk+CgkJPGxpPklmIHRoZSAxc3QgZGF5IG9mIHRoZSBtb250aCBp cyB0aGUgbGFzdCBkYXkgb2YgdGhlIGV2ZW50LCB0aGUgPGNvZGU+bXVsdGlwcmV2PC9jb2Rl PiBpcyBkcm9wcGVkIGluIGZhdm91ciBvZiA8Y29kZT5tdWx0aWxhc3Q8L2NvZGU+PC9saT4K CTwvdWw+CgoJPHA+U3dpdGNoIG9mZiBzcGFubmluZyBjb21wbGV0ZWx5IHdpdGggPGNvZGU+ c2hvd3NwYW5uZWQ9JnF1b3Q7MCZxdW90OzwvY29kZT4uIEV2ZW50cyB0aGF0IGhhdmUgYW4g ZXhwaXJ5IGFyZSB0aGVuIGp1c3Qgc3RhbmRhcmQgZXZlbnRzLjwvcD4KCgk8cD4mIzgyMTY7 Q29udGludWF0aW9uJiM4MjE3OyBjZWxscyBtYXkgYmUgcHJvY2Vzc2VkIHdpdGggYSBzZXBh cmF0ZSBmb3JtICg8Y29kZT5zcGFuZm9ybTwvY29kZT4pLiBJZiB5b3UgY2hvb3NlIG5vdCB0 byB1c2UgYSA8Y29kZT5zcGFuZm9ybTwvY29kZT4sIHRoZSBzdGFuZGFyZCA8Y29kZT5mb3Jt PC9jb2RlPiBvciBjb250YWluZXIgd2lsbCBiZSB1c2VkIGFuZCB5b3Ugd2lsbCBoYXZlIHRv IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGRpZmZlcmVudCBtdWx0aSBmbGFncyB5b3Vyc2Vs ZiB1c2luZyB0aGUgPGEgaHJlZj0iI2lmY2FsIj5jb25kaXRpb25hbCB0YWc8L2E+LjwvcD4K Cgk8cD5Zb3UgY2FuIGFsc28gPGEgaHJlZj0iI2NhbmNlbCI+Y2FuY2VsIG9yIG9taXQ8L2E+ IGRheXMgb2YgYSBzcGFubmVkIGV2ZW50IGluIHRoZSBzYW1lIG1hbm5lciBhcyB5b3UgZG8g d2l0aCA8YSBocmVmPSIjcmVjdXIiPnJlY3VycmluZyBldmVudHM8L2E+LCBleGNlcHQgeW91 IGNhbm5vdCBjYW5jZWwgdGhlIGZpcnN0IGRheTsgeW91IHNob3VsZCBtb3ZlIHRoZSBldmVu dCBzdGFydCBkYXRlIGFuZCBhcG9sb2dpc2UhPC9wPgoKCTxoMiBpZD0iY2FuY2VsIj5DYW5j ZWxsaW5nIGFuZCBvbWl0dGluZyBldmVudHM8L2gyPgoKCTxwPlBsYW5zIGNoYW5nZSBhbmQg eW91IG1heSBmaW5kIHRoYXQgYSBnaWcgaGFzIHRvIGJlIGNhbmNlbGxlZC4gUGVyaGFwcyB5 b3UgYWR2ZXJ0aXNlIGEgd2Vla2x5IGJvb3QgZmFpciBidXQgdGhlIGZpZWxkIGlzIHdhdGVy bG9nZ2VkIG9uZSB3ZWVrLiBObyBwcm9ibGVtOiBub21pbmF0ZSBhIDxjb2RlPnNraXBmaWVs ZDwvY29kZT4gaW4geW91ciA8Y29kZT5zbWRfY2FsZW5kYXI8L2NvZGU+IHRhZyBhbmQgZW50 ZXIgdGhlIGRhdGUgb2YgdGhlIGNhbmNlbGxlZCBldmVudC48L3A+CgoJPHA+T3IgeW91IG1p Z2h0IHJ1biBhIHRoZWF0cmUgd2ViIHNpdGUgdGhhdCBoYXMgYSB0aHJlZS13ZWVrIHByb2R1 Y3Rpb24gcGVyZm9ybWFuY2Ugb24gd2Vla25pZ2h0cyBvbmx5LiBJbnN0ZWFkIG9mIHNldHRp bmcgdXAgdGhyZWUgc2VwYXJhdGUgZXZlbnRzICYjODIxMjsgb25lIGZvciBlYWNoIHdlZWsg JiM4MjEyOyBub21pbmF0ZSBhbiA8Y29kZT5vbWl0ZmllbGQ8L2NvZGU+IGFuZCBsaXN0IHRo ZSBkYXRlcyBvbiB3aGljaCB0aGUgcGVyZm9ybWFuY2UgZG9lcyBub3QgYWlyLiBPbWl0dGVk IGRhdGVzIHdpbGwgbm90LCB1bmRlciBhbnkgY2lyY3Vtc3RhbmNlcywgYXBwZWFyIG9uIHRo ZSBjYWxlbmRhciBhbmQgdGhleSBvdmVycmlkZSBjYW5jZWxsZWQgZGF0ZXMvaG9saWRheXMu IElmIDxjb2RlPmNlbGxwbHVzPC9jb2RlPiBtb2RlIGlzIHVzZWQsIHlvdSB3aWxsIGhvd2V2 ZXIgc2VlIGEgY2VsbCBmbGFnIGxhYmVsbGVkIDxjb2RlPm9taXQ8L2NvZGU+IChwbHVzIGNs YXNzIHByZWZpeCkgaW4gY2FzZSB5b3UgZG8gd2lzaCB0byBzdHlsZSBzdWNoIGNlbGxzLjwv cD4KCgk8cD5UbyBzcGVjaWZ5IHRoZSBkYXRlcyBpbiBlaXRoZXIgZmllbGQsIHVzZSBhbnkg YWNjZXB0YWJsZSBkYXRlIGZvcm1hdCwgYnV0IGRlcml2YXRpdmVzIG9mIGRkLW1vbnRobmFt ZS15eXl5IG9yIG1vbnRobmFtZS1kZC15eXl5IGFyZSB0aGUgbW9zdCB1bmFtYmlndW91cyB0 byBhdm9pZCBwcm9ibGVtcyAoZS5nLiBpcyA8Y29kZT4xLzU8L2NvZGU+IEphbiA1dGggb3Ig TWF5IDFzdCkuIFlvdSBjYW4gc3BlY2lmeSBhcyBtYW55IGNhbmNlbGxhdGlvbnMgb3Igb21p c3Npb25zIGFzIHlvdSBsaWtlOyBjb21tYS1zZXBhcmF0ZSBlYWNoIG9uZS4gWW91IG1heSBh bHNvIHNwZWNpZnkgcmFuZ2VzIG9mIGRhdGVzIHRvIG9taXQvY2FuY2VsIGJ5IHVzaW5nIHRo ZSBub3RhdGlvbiA8Y29kZT5zdGFydCBkYXRlID0mZ3Q7IGVuZCBkYXRlPC9jb2RlPi48L3A+ CgoJPHA+QnkgZGVmYXVsdCwgY2FuY2VsbGVkIGV2ZW50cyB3aWxsIG5vdCBhcHBlYXIgb24g dGhlIGNhbGVuZGFyLiBJZiB5b3UgdXNlIDxjb2RlPnNob3dza2lwcGVkPSZxdW90OzEmcXVv dDs8L2NvZGU+IHRoZSBldmVudCB3aWxsIGFwcGVhciBpbiB0aGUgY2VsbCBhcyBub3JtYWwg YW5kIHRoZSA8Y29kZT5jYW5jZWw8L2NvZGU+IGZsYWcgd2lsbCBhcHBseSB0byB0aGUgZXZl bnQgKGFuZCBjZWxsIGlmIHlvdSBjaG9vc2UpIHNvIHlvdSBtYXkgZGV0ZWN0L3N0eWxlIGl0 LjwvcD4KCgk8aDIgaWQ9ImV4dHJhIj5FeHRyYSBkYXRlczwvaDI+CgoJPHA+V2hlbiBldmVu dHMgYXJlIDxhIGhyZWY9IiNjYW5jZWwiPmNhbmNlbGxlZDwvYT4geW91IG1heSBlbGVjdCB0 byByZXNjaGVkdWxlIHRoZSBldmVudCBvbiBhIGRpZmZlcmVudCBkYXRlIGluc3RlYWQgb2Yg aGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBldmVudCB3aXRoIGlkZW50aWNhbCBkZXRhaWxzLiBV c2UgdGhlIDxjb2RlPmV4dHJhZmllbGQ8L2NvZGU+IHRvIHNpbXBseSBhZGQgaXQgdG8gdGhl IGNhbGVuZGFyIG9uIGl0cyBuZXcgZGF5LiBZb3UgbWlnaHQgYWxzbyB1c2UgdGhpcyBmZWF0 dXJlIGlmIHlvdSBoYXZlIGEgPGEgaHJlZj0iI3JlY3VyIj5yZWN1cnJpbmc8L2E+IGV2ZW50 IG9uIHRoZSAxc3Qgb2YgZXZlcnkgbW9udGggYnV0IGZvciBzb21lIHJlYXNvbiB5b3UgaGF2 ZSB0byBtb3ZlIG9uZSBvZiB0aGUgZXZlbnRzIGEgZGF5IG9yIHR3by4gU2ltcGx5IGNhbmNl bCB0aGUgb2ZmZW5kaW5nIGRhdGUgYW5kIGFkZCB0aGUgbmV3IGRhdGUgdXNpbmcgPGNvZGU+ ZXh0cmFmaWVsZDwvY29kZT4uPC9wPgoKCTxwPlRoZSBsaXN0IG9mIGRhdGVzIGNhbiBiZSBp biBhbnkgc3RhbmRhcmQgZGF0ZSBmb3JtYXQgKGluY2x1ZGluZyBkYXRlIHJhbmdlcyB1c2lu ZyA8Y29kZT5zdGFydCA9Jmd0OyBlbmQ8L2NvZGU+KS4gVGhleSB3aWxsIGJlIGFkZGVkIHRv IHRoZSBjYWxlbmRhciBhbmQgZmxhZ2dlZCBhcyA8Y29kZT5leHRyYTwvY29kZT4uIEFsc28g c2VlIHRoZSA8Y29kZT5leHRyYXN0cmljdDwvY29kZT4gYXR0cmlidXRlLjwvcD4KCgk8cD5J ZiB5b3VyIG9yaWdpbmFsIGV2ZW50IHNwYW5zIG1vcmUgdGhhbiBvbmUgZGF5LCB5b3UgbWF5 IGVsZWN0IHRvIHNjaGVkdWxlIHRoZSBlbnRpcmUgYmxvY2sgYWdhaW4uIEFkZCBhICYjODIx NjsrJiM4MjE3OyBhZnRlciBhbnkgZGF0ZSB5b3Ugd2lzaCB0byByZXBlYXQgaW4gaXRzIGVu dGlyZXR5LCBlLmcuIDxjb2RlPjIwMDktTWFyLTEyKywgMjAwOS1KdW4tMTgrLCAyMDA5LUZl Yi0xOTwvY29kZT4gd291bGQgY29weSB0aGUgZW50aXJlIGV2ZW50IGJsb2NrIHRvIE1hcmNo IGFuZCBKdW5lLCBidXQgb25seSB0aGUgMXN0IGRhdGUgdG8gRmViIDE5dGguIEV2ZW50cy9j ZWxscyBhcmUgZmxhZ2dlZCBhcyBib3RoIDxjb2RlPmV4dHJhPC9jb2RlPiBhbmQgPGNvZGU+ bXVsdGk8L2NvZGU+IHdoZXJlIGFwcGxpY2FibGUuPC9wPgoKCTxwPk5vdGVzOjwvcD4KCgk8 dWw+CgkJPGxpPmlmIHlvdSBzY2hlZHVsZSBhbiBleHRyYSBldmVudCBvbiBhIGRheSB0aGF0 IGFscmVhZHkgY29udGFpbnMgdGhlIHNhbWUgZXZlbnQgKHBlcmhhcHMgb24gYSBzcGFubmVk IG9yIHJlY3VycmluZyBkYXRlKSB5b3UgbWF5IHNlZSB0d28gaWRlbnRpY2FsIGV2ZW50cyBv biB0aGUgc2FtZSBkYXkuIFRyeSBhbmQgYXZvaWQgdGhpcywgdW5sZXNzIGl0JiM4MjE3O3Mg eW91ciBpbnRlbmRlZCBiZWhhdmlvdXI8L2xpPgoJCTxsaT5kYXRlIHJhbmdlcyBhbmQgdGhl ICYjODIxNjsrJiM4MjE3OyBzeW50YXggYXJlIG11dHVhbGx5IGV4bGN1c2l2ZSBvbiBhbnkg ZGF0ZSAoZS5nLiA8Y29kZT4yMDA5LU1hci0xMCsgPSZndDsgMjAwOS1NYXItMTU8L2NvZGU+ IGlzIGlsbGVnYWwpPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJob2xpZGF5cyI+SG9saWRheXM8 L2gyPgoKCTxwPlB1YmxpYyBob2xpZGF5cyBuZWVkIG5vdCBiZSBhIG51aXNhbmNlIHRvIHlv dXIgZXZlbnRzLiBHaXZlIHRoZSBwbHVnaW4gYSBob2xpZGF5IGxpc3QgYW5kIGl0JiM4MjE3 O2xsIG1ha2Ugc3VyZSBhbnkgcmVjdXJyaW5nIG9yIG11bHRpIGV2ZW50cyBhcmUgbm90IHNj aGVkdWxlZCBvbiB0aG9zZSBkYXlzLiA8YSBocmVmPSIjZXZlbnRzIj5TdGFuZGFyZDwvYT4g b25lLW9mZiBldmVudHMgYXJlIHBlcm1pdHRlZCBieSBkZWZhdWx0IGJlY2F1c2UgeW91IG1p Z2h0IHdhbnQgdG8gb3JnYW5pc2UgYSBzcGVjaWFsIGV2ZW50IG9uIHRoYXQgZGF5LCB0aG91 Z2ggeW91IGNhbiBmb3JiaWQgdGhvc2UgdG9vIGlmIHlvdSB3aXNoLjwvcD4KCgk8cD5UaGUg bGlzdCBvZiBkYXRlcyB5b3Ugc3BlY2lmeSBjYW4gYmUgZW50ZXJlZCBkaXJlY3RseSBpbiBh IHN0cmluZyBpbiB0aGUgPGNvZGU+aG9saWRheXM8L2NvZGU+IGF0dHJpYnV0ZSBvciBpbiBh IDxjb2RlPiZsdDt0eHA6dmFyaWFibGUgLyZndDs8L2NvZGU+OjwvcD4KCjxwcmUgY2xhc3M9 ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6dmFyaWFibGUgbmFtZT0mcXVv dDtuYXRfaG9scyZxdW90OwogICAgIHZhbHVlPSZxdW90O0RlYyAyNSwgMjYgRGVjLCAzMS9E ZWMsIEphbi0xLAogICAgICAgIE1heSA0IDIwMDksIDIwMDktMDgtMzEmcXVvdDsgLyZndDsK Jmx0O3R4cDpzbWRfY2FsZW5kYXIgaG9saWRheXM9JnF1b3Q7dHhwdmFyOm5hdF9ob2xzJnF1 b3Q7IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5UaGF0IGxpc3Qgc2hvd3Mgc29tZSBvZiB0 aGUgdmFyaWV0eSBhbmQgYnJlYWR0aCBvZiBmb3JtYXRzIHRoZSBwbHVnaW4gYWxsb3dzLiBU aGVyZSBhcmUgbW9yZS4gTm90ZSB0aGF0IHRoZSBldmVudHMgd2l0aG91dCBhIHllYXIgb2Nj dXIgb24gdGhlIHNhbWUgZGF0ZSBldmVyeSB5ZWFyLCB3aGVyZWFzIHRoZSBvbmVzIHdpdGgg YSB5ZWFyIHdpbGwgb25seSBvY2N1ciBvbiB0aGF0IHNwZWNpZmljIGRhdGUuPC9wPgoKCTxw Pk9uY2UgeW91ciBkYXRlcyBhcmUgZGVmaW5lZCB5b3UgY2FuIGNvbnRyb2wgd2hpY2ggZXZl bnRzIGFyZSBhbGxvd2VkIHRvIGZhbGwgb24gdGhvc2UgZGF0ZXMgdmlhIDxjb2RlPmhvbGlk YXlmbGFnczwvY29kZT4uIENvbWJpbmluZyB0aGF0IGF0dHJpYnV0ZSwgPGNvZGU+c2hvd3Nw YW5uZWQ8L2NvZGU+LCA8Y29kZT5zaG93c2tpcHBlZDwvY29kZT4gYW5kIHRoZSBmb3JtcyAm IzgyMTI7IGFsb25nIHdpdGggdGhlIGNvbmRpdGlvbmFsIHRhZyAmIzgyMTI7IGNhbiBnaXZl IGEgd2lkZSB2YXJpZXR5IG9mIHdheXMgdG8gZGlzcGxheSBldmVudHMgYW5kIGNlbGxzLjwv cD4KCgk8cD5Ib2xpZGF5IGNlbGxzIGFyZSBnaXZlbiB0aGUgZmxhZyA8Y29kZT5ob2xzPC9j b2RlPiwgYW5kIGFueSBldmVudCB0aGF0IGlzIG5vdCBzcGVjaWZpY2FsbHkgcGVybWl0dGVk IGJ5IHRoZSA8Y29kZT5ob2xpZGF5ZmxhZ3M8L2NvZGU+IGlzIGF1dG9tYXRpY2FsbHkgYXNz aWduZWQgYSA8Y29kZT5jYW5jZWw8L2NvZGU+IGZsYWcgaWYgaXQgZmFsbHMgb24gb25lIG9m IHRoZSBkYXlzLiBPbWl0dGVkIGRhdGVzIHdpbGwsIGhvd2V2ZXIsIGNhdXNlIHRoZSA8Y29k ZT5jYW5jZWw8L2NvZGU+IGZsYWcgdG8gYmUgcmVtb3ZlZC48L3A+CgoJPGgyIGlkPSJzbWRj YWwiPjxjb2RlPiZsdDt0eHA6c21kX2NhbGVuZGFyIC8mZ3Q7PC9jb2RlPjwvaDI+CgoJPHA+ UHV0IHRoaXMgdGFnIHdoZXJldmVyIHlvdSB3YW50IHlvdXIgY2FsZW5kYXIgdG8gYXBwZWFy LiBVc2UgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIHRvIGNvbnRyb2wgaXRzIG91dHB1dDo8 L3A+CgoJPGgzIGNsYXNzPSJhdHRzIj5EaXNwbGF5IGF0dHJpYnV0ZXM8L2gzPgoKCTx1bD4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNpemU8L3NwYW4+IDogY2FsZW5kYXIgc2l6ZSwg PGNvZGU+bGFyZ2U8L2NvZGU+IG9yIDxjb2RlPnNtYWxsPC9jb2RlPi4gVGhlIHNtYWxsIGlz IG1vcmUgZ2VhcmVkIHRvd2FyZHMgYSBtaW5pY2FsLCBhbHRob3VnaCBmdW5jdGlvbmFsbHkg dGhlcmUgPGEgaHJlZj0iI3NpemVkaWZmIj5pc24mIzgyMTc7dCBtdWNoIGJldHdlZW4gdGhl bTwvYT4uIERlZmF1bHQ6IGxhcmdlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZp cnN0ZGF5PC9zcGFuPiA6IHRoZSAxc3QgZGF5IG9mIHRoZSB3ZWVrIHRvIHNob3cgaW4gdGhl IGNhbGVuZGFyLiAwPVN1bmRheSwgMT1Nb25kYXkgJiM4MjMwOyA2PVNhdHVyZGF5LiBEZWZh dWx0OiAwPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmRheWZvcm1hdDwvc3Bhbj4g OiB0aGUgd2F5IGluIHdoaWNoIHRoZSBkYXkgbmFtZXMgYXJlIHJlbmRlcmVkLiA8Y29kZT5B QkJSPC9jb2RlPiAodGhlIGRlZmF1bHQpIHNob3dzIHRoZSBkYXlzIGFzIE1vbiwgVHVlLCBX ZWQsIGV0YyBvciA8Y29kZT5GVUxMPC9jb2RlPiByZW5kZXJzIHRoZWlyIGZ1bGwgbmFtZXMu IEFsdGVybmF0aXZlbHksIHN1cHBseSBhbnkgdmFsaWQgPGEgaHJlZj0iaHR0cDovL3VrMi5w aHAubmV0L3N0cmZ0aW1lIj5zdHJmdGltZTwvYT4gY29kZXMgdG8gdXNlIHRoYXQgaW5zdGVh ZC4gTG9jYWxlLXNwZWNpZmljIG5hbWVzIGFyZSByZXR1cm5lZC48ZGl2IGNsYXNzPSJicmVh ayI+WW91IGNhbiBoYXJkLWNvZGUgeW91ciBvd24gZGF5IG5hbWVzOyB3cml0ZSBlYWNoIGl0 ZW0gYXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBzdXJyb3VuZGVkIGJ5IDxjb2RlPnt9PC9j b2RlPiBicmFja2V0cy4gSWYgeW91IHdhbnRlZCB0d28tbGV0dGVyIEdlcm1hbiB3ZWVrIGRh eXMgeW91IGNvdWxkIHVzZTogPGNvZGU+ZGF5Zm9ybWF0PSZxdW90O3tTbyxNbyxEaSxNaSxE byxGcixTYX0mcXVvdDs8L2NvZGU+LiBUaGUgZmlyc3QgZGF5IGluIHRoZSBsaXN0IDxzdHJv bmc+bXVzdDwvc3Ryb25nPiByZXByZXNlbnQgU3VuZGF5IG9yIHRoaW5ncyB3aWxsIGJyZWFr PC9kaXY+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm1vbnRoZm9ybWF0PC9zcGFu PiA6IHRoZSB3YXkgaW4gd2hpY2ggdGhlIG1vbnRoIG5hbWVzIGFyZSByZW5kZXJlZC4gPGNv ZGU+RlVMTDwvY29kZT4gKHRoZSBkZWZhdWx0KSBzaG93cyB0aGUgZnVsbCBtb250aCBuYW1l cyBvciA8Y29kZT5BQkJSPC9jb2RlPiByZW5kZXJzIHRoZWlyIGFiYnJldmlhdGVkIG5hbWVz LiBBbHRlcm5hdGl2ZWx5LCBzdXBwbHkgYW55IHZhbGlkIHN0cmZ0aW1lIGNvZGVzIHRvIHVz ZSB0aGF0IGluc3RlYWQuIExvY2FsZS1zcGVjaWZpYyBuYW1lcyBhcmUgcmV0dXJuZWQuPGRp diBjbGFzcz0iYnJlYWsiPllvdSBjYW4gaGFyZC1jb2RlIHlvdXIgb3duIG1vbnRoIG5hbWVz OyB3cml0ZSBlYWNoIGl0ZW0gYXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBzdXJyb3VuZGVk IGJ5IDxjb2RlPnt9PC9jb2RlPiBicmFja2V0cy4gSWYgeW91IHdhbnRlZCBzaW5nbGUtbGV0 dGVyIG1vbnRoIG5hbWVzIHlvdSBjb3VsZCB1c2U6IDxjb2RlPm1vbnRoZm9ybWF0PSZxdW90 O3tKLEYsTSxBLE0sSixKLEEsUyxPLE4sRH0mcXVvdDs8L2NvZGU+LiBUaGUgZmlyc3QgbW9u dGggaW4gdGhlIGxpc3QgPHN0cm9uZz5tdXN0PC9zdHJvbmc+IHJlcHJlc2VudCBKYW51YXJ5 IG9yIHRoaW5ncyB3aWxsIGJyZWFrPC9kaXY+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPnNlbGVjdDwvc3Bhbj4gOiB1c2UgYSBzZWxlY3QgZHJvcGRvd24gZm9yIHJhcGlkIGFj Y2VzcyB0byB3ZWVrcywgbW9udGhzIG9yIHllYXJzIGluc3RlYWQgb2Ygc2VlaW5nIGp1c3Qg dGhlIG5hbWVzLiBEZWZhdWx0OiB1bnNldCwgYnV0IHlvdSBtYXkgbWFrZSBhIGNvbW1hLXNl cGFyYXRlZCBsaXN0IGZyb20gZWl0aGVyIDxjb2RlPndlZWs8L2NvZGU+IC8gPGNvZGU+bW9u dGg8L2NvZGU+IG9yIDxjb2RlPnllYXI8L2NvZGU+ICh3ZWVrIGFuZCBtb250aCBhcmUgbXV0 dWFsbHkgZXhjbHVzaXZlKS48ZGl2IGNsYXNzPSJicmVhayI+WW91IG1heSBhbHNvIHNwZWNp ZnkgdXAgdG8gdHdvIGV4dHJhIGFyZ3VtZW50cywgc2VwYXJhdGVkIGJ5IDxjb2RlPjo8L2Nv ZGU+IGNoYXJzLiBUaGVzZSBhZGQgdGV4dCBpbiBmcm9udCBvZiBhbmQgYmVoaW5kIHRoZSB3 ZWVrL21vbnRoL3llYXIsIHJlc3BlY3RpdmVseS4gRm9yIGV4YW1wbGU6IDxjb2RlPnNlbGVj dD0mcXVvdDt3ZWVrOldFRUsjLCB5ZWFyOiZsdDs6Jmd0OyZxdW90OzwvY29kZT4gd291bGQg cmVuZGVyIGEgc2VsZWN0IGxpc3Qgd2l0aCBlbnRyaWVzIHRoYXQgbWlnaHQgbG9vayBsaWtl IHRoaXM6IDxjb2RlPldFRUsjMTUgJmx0OzIwMDkmZ3Q7PC9jb2RlPjwvZGl2PjwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zZWxlY3RidG48L3NwYW4+IDogYnkgZGVmYXVsdCwg dGhlIHNlbGVjdCBkcm9wZG93bnMgd2lsbCBhdXRvLXN1Ym1pdCB3aGVuIHRoZXkgYXJlIGNo YW5nZWQuIElmIHlvdSBwcmVmZXIgYSBkZWRpY2F0ZWQgc3VibWl0IGJ1dHRvbiwgZ2l2ZSB0 aGUgdGV4dCB5b3Ugd2lzaCB0byBhcHBlYXIgb24gdGhlIGJ1dHRvbiBoZXJlLiBUaGUgYnV0 dG9uIGhhcyBhIGZpeGVkIGNsYXNzIG9mIDxjb2RlPnNtZF9jYWxfaW5wdXQ8L2NvZGU+PC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmlzb3dlZWtzPC9zcGFuPiA6IHNob3cgPHNw YW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlayBudW1iZXJzIGFzIGEgY29sdW1uIGF0 IHRoZSBzdGFydCBvZiB0aGUgY2FsZW5kYXIuIEFueSB0ZXh0IGluIHRoaXMgYXR0cmlidXRl IGVuYWJsZXMgdGhlIGZlYXR1cmUsIGFuZCBiZWNvbWVzIHRoZSBoZWFkaW5nIG9mIHRoZSA8 c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVrIGNvbHVtbi4gWW91IG1heSBjaGFu Z2UgdGhlIGRlZmF1bHQgd2VlayBudW1iZXIgaW4gZWFjaCBjZWxsIGJ5IGFkZGluZyBhIGNv bW1hIGFuZCBzb21lIHRleHQ7IHdoYXRldmVyIHlvdSBlbnRlciB3aWxsIGJlIHB1dCBpbiBl YWNoIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHdlZWsgY2VsbC4gVXNlIHRoZSBy ZXBsYWNlbWVudCBjb2RlcyA8Y29kZT57d2Vla308L2NvZGU+LCA8Y29kZT57bW9udGh9PC9j b2RlPiwgPGNvZGU+e3llYXJ9PC9jb2RlPiBvciA8Y29kZT57aXNveWVhcn08L2NvZGU+IGlu IHlvdXIgbWFya3VwIHRvIGluc2VydCB0aGUgcmVsZXZhbnQgaW5mby4gPGRpdiBjbGFzcz0i YnJlYWsiPkV4YW1wbGU6IDxjb2RlPmlzb3dlZWtzPSZxdW90O3drLCAje3dlZWt9JnF1b3Q7 PC9jb2RlPiB3aWxsIHJlbmRlciAmIzgyMTY7d2smIzgyMTc7IGF0IHRoZSB0b3Agb2YgdGhl IGNvbHVtbiBhbmQgc29tZXRoaW5nIGxpa2UgPGNvZGU+IzI0PC9jb2RlPiwgPGNvZGU+IzI1 PC9jb2RlPiwgPGNvZGU+IzI2PC9jb2RlPiYjODIzMDsgYmVuZWF0aCBpdC4gSWYgdGhlIGZp cnN0IGl0ZW0gaXMgb21pdHRlZCwgdGhlcmUgd2lsbCBiZSBubyBjb2x1bW4gaGVhZGluZy48 L2Rpdj48ZGl2IGNsYXNzPSJicmVhayI+Tm90ZSB0aGF0IGlmIHRoaXMgZmVhdHVyZSBpcyBl bmFibGVkLCA8Y29kZT5maXJzdGRheTwvY29kZT4gd2lsbCBiZSBmb3JjZWQgdG8gc3RhcnQg b24gYSBNb25kYXkgYXMgZ292ZXJuZWQgYnkgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088 L3NwYW4+IHNwZWNpZmljYXRpb24uIERlZmF1bHQ6IHVuc2V0PC9kaXY+PC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPm5hdmFycm93PC9zcGFuPiA6IGNvbW1hLXNlcGFyYXRlZCBw YWlyIG9mIGl0ZW1zIHlvdSB3YW50IHRvIGFwcGVhciBhcyBwcmV2L25leHQgYXJyb3dzIGlu IHRoZSBjYWxlbmRhci4gRGVmYXVsdDogPGNvZGU+JmFtcDsjNjA7LCAmYW1wOyM2Mjs8L2Nv ZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNhcHRpb248L3NwYW4+IDogYWRk IGEgY2FwdGlvbiB0byB0aGUgY2FsZW5kYXI8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+c3VtbWFyeTwvc3Bhbj4gOiBhZGQgYSBzdW1tYXJ5IHRvIHRoZSBjYWxlbmRhcjwvbGk+ Cgk8L3VsPgoKCTxoMyBjbGFzcz0iYXR0cyI+RmlsdGVyIGF0dHJpYnV0ZXM8L2gzPgoKCTx1 bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnRpbWU8L3NwYW4+IDogc2hvdyA8Y29kZT5w YXN0PC9jb2RlPiwgPGNvZGU+ZnV0dXJlPC9jb2RlPiwgb3IgPGNvZGU+YW55PC9jb2RlPiBl dmVudC4gRGVmYXVsdDogYW55PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmV4cGly ZWQ8L3NwYW4+IDogaGlkZSAoMCkgb3Igc2hvdyAoMSkgZXhwaXJlZCBldmVudHMuIExlYXZl IGJsYW5rIHRvIHVzZSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gQWR2YW5j ZWQgUHJlZmVyZW5jZSAmIzgyMTY7UHVibGlzaCBleHBpcmVkIGFydGljbGVzJiM4MjE3Ozwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zdGF0dXM8L3NwYW4+IDogZXZlbnRzIGlu IHRoaXMgc3RhdHVzIGxpc3QgYXJlIHB1Ymxpc2hlZC4gRGVmYXVsdDogbGl2ZTwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jYXRlZ29yeTwvc3Bhbj4gOiBmaWx0ZXIgZXZlbnRz IGJ5IHRoaXMgbGlzdCBvZiBjYXRlZ29yaWVzLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5zdWJjYXRzPC9zcGFuPiA6IGNvbnNpZGVyIHN1Yi1jYXRl Z29yaWVzLiBDaG9vc2UgYSBuZXN0aW5nIGxldmVsIHRvIGNvbnNpZGVyIG9yIHRoZSB3b3Jk IDxjb2RlPmFsbDwvY29kZT4uIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPnNlY3Rpb248L3NwYW4+IDogZmlsdGVyIGV2ZW50cyBieSB0aGlzIGxpc3Qg b2Ygc2VjdGlvbnMuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPmF1dGhvcjwvc3Bhbj4gOiBmaWx0ZXIgZXZlbnRzIGJ5IHRoaXMgbGlzdCBvZiBhdXRo b3IgbG9naW4gbmFtZXMuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPnJlYWxuYW1lPC9zcGFuPiA6IGZpbHRlciBldmVudHMgYnkgdGhpcyBsaXN0IG9m IGF1dGhvciBSZWFsIE5hbWVzIChub3RlOiBtYXkgYWRkIG9uZSBleHRyYSBxdWVyeSkuIERl ZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNob3dhbGw8L3Nw YW4+IDogaWYgeW91ciBjYWxlbmRhciBhcHBlYXJzIG9uIHRoZSBmcm9udCBwYWdlIGFuZCB5 b3UgaGF2ZSA8ZW0+bm90PC9lbT4gdXNlZCB0aGUgPGNvZGU+c2VjdGlvbjwvY29kZT4gYXR0 cmlidXRlIHRoZSBjYWxlbmRhciBvbmx5IHNob3dzIGV2ZW50cyBmcm9tIHNlY3Rpb25zIHRo YXQgaGF2ZSB0aGVpciA8Y29kZT5PbiBmcm9udCBwYWdlPC9jb2RlPiByYWRpbyBidXR0b24g c2V0LiBVc2UgPGNvZGU+c2hvd2FsbD0mcXVvdDsxJnF1b3Q7PC9jb2RlPiB0byBzaG93IGFs bCBldmVudHMgZnJvbSBhbGwgc2VjdGlvbnMgb24gZnJvbnQgcGFnZSBjYWxlbmRhcnM8L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bW9udGg8L3NwYW4+IDogc3RhcnQgdGhlIGNh bGVuZGFyIG9uIHRoaXMgbW9udGggZnJvbSAxIChKYW4pIHRvIDEyIChEZWMpLiBOb3JtYWwg Y2FsZW5kYXIgbmF2aWdhdGlvbiBvdmVycmlkZXMgdGhpcyB2YWx1ZS4gSWYgPGNvZGU+c3Rh dGljPC9jb2RlPiBpcyB1c2VkLCB0aGlzIG1vbnRoIGJlY29tZXMgdGhlIG9ubHkgb25lIHlv dSBtYXkgdmlldy4gSWYgdW5zZXQsIGFuZCBubyA8Y29kZT5tPTwvY29kZT4gdmFsdWUgYXBw ZWFycyBvbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gbGluZSwgdGhlIGN1 cnJlbnQgbW9udGggaXMgdXNlZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj53ZWVr PC9zcGFuPiA6IHN0YXJ0IHRoZSBjYWxlbmRhciBkdXJpbmcgdGhlIG1vbnRoIGNvbnRhaW5p bmcgdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVrIChmcm9tIDEgdG8g NTMpLiBJZ25vcmVkIGlmIDxjb2RlPnN0YXRpYzwvY29kZT4gb3Igb25lIG9mIHRoZSBjYWxl bmRhciBuYXZpZ2F0aW9uIGNvbnRyb2xzIGlzIHVzZWQuIElmIGEgPGNvZGU+dz08L2NvZGU+ IHZhbHVlIGFwcGVhcnMgb24gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGxp bmUsIHRoZSBnaXZlbiB3ZWVrIG92ZXJyaWRlcyBhbnkgbW9udGggdmFsdWU8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+eWVhcjwvc3Bhbj4gOiBzdGFydCB0aGUgY2FsZW5kYXIg YXQgdGhpcyA0LWRpZ2l0IHllYXIuIE5vcm1hbCBjYWxlbmRhciBuYXZpZ2F0aW9uIG92ZXJy aWRlcyB0aGlzIHZhbHVlLiBJZiA8Y29kZT5zdGF0aWM8L2NvZGU+IGlzIHVzZWQsIHRoaXMg eWVhciBiZWNvbWVzIHRoZSBvbmx5IG9uZSB5b3UgbWF5IHZpZXcuIElmIHVuc2V0LCBhbmQg bm8gPGNvZGU+eT08L2NvZGU+IHZhbHVlIGFwcGVhcnMgb24gdGhlIDxzcGFuIGNsYXNzPSJj YXBzIj5VUkw8L3NwYW4+IGxpbmUsIHRoZSBjdXJyZW50IHllYXIgaXMgdXNlZDwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zdGF0aWM8L3NwYW4+IDogZm9yY2UgdGhlIGNhbGVu ZGFyIHRvIGJlIGZpeGVkIHRvIG9uZSBtb250aC95ZWFyIChpLmUuIG5vIG5hdmlnYXRpb24p LiBNb250aCBhbmQgeWVhciBkZWNpZGVkIGJ5IGF0dHJpYnV0ZXMgPGNvZGU+bW9udGg8L2Nv ZGU+IGFuZCA8Y29kZT55ZWFyPC9jb2RlPiBvciAmIzgyMTI7IGlmIG9taXR0ZWQgJiM4MjEy OyB0aGUgY3VycmVudCBkYXRlIHdpbGwgYmUgdXNlZDwvbGk+Cgk8L3VsPgoKCTxoMyBjbGFz cz0iYXR0cyI+Rm9ybSBhdHRyaWJ1dGVzPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5mb3JtPC9zcGFuPiA6IHVzZSB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8 L3NwYW4+IGZvcm0gdG8gcHJvY2VzcyBlYWNoIGV2ZW50LiBJZiB0aGUgY2FsZW5kYXIgdGFn IGlzIHVzZWQgYXMgYSBjb250YWluZXIgaXQgd2lsbCBiZSB1c2VkIGluIHByZWZlcmVuY2Ug dG8gdGhlIGZvcm0uIElmIG5laXRoZXIgYXJlIHVzZWQsIGEgZGVmYXVsdCBpcyB1c2VkIChM YXJnZTogaHlwZXJsaW5rZWQgYXJ0aWNsZSB0aXRsZSwgU21hbGw6IGVtcHR5IGV2ZW50KTwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zcGFuZm9ybTwvc3Bhbj4gOiByZW5kZXIg c3Bhbm5lZCBldmVudHMgZGlmZmVyZW50bHkgdG8gc3RhbmRhcmQgZXZlbnRzOyB0aGV5IHVz dWFsbHkgdXNlIHRoZSBzYW1lIDxjb2RlPmZvcm08L2NvZGU+L2NvbnRhaW5lci4gSWYgbmVp dGhlciBhcmUgc3BlY2lmaWVkLCBhIHJpZ2h0LWFycm93IHdpbGwgYmUgdXNlZCB0byBpbmRp Y2F0ZSBjb250aW51YXRpb24gb2YgdGhlIHByZXZpb3VzIGRheSYjODIxNztzIGV2ZW50LiBO b3RlIHRoZSBmaXJzdCBkYXkgb2YgYSBzcGFubmVkIHNldCBpcyA8ZW0+bm90PC9lbT4gcGFz c2VkIHRvIHRoZSA8Y29kZT5zcGFuZm9ybTwvY29kZT47IG9ubHkgY29udGludWF0aW9uIGNl bGxzIGFyZSBwYXNzZWQgdG8gaXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+cmVj dXJmb3JtPC9zcGFuPiA6IHJlbmRlciByZWN1cnJpbmcgZXZlbnRzIGRpZmZlcmVudGx5IHRv IHN0YW5kYXJkIGV2ZW50cy4gVGhlIGZpcnN0IGV2ZW50IG9mIGEgcmVjdXJyaW5nIHNldCBp cyA8ZW0+bm90PC9lbT4gcGFzc2VkIHRvIDxjb2RlPnJlY3VyZm9ybTwvY29kZT48L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2VsbGZvcm08L3NwYW4+ICg8c3BhbiBjbGFzcz0i aW1wb3J0YW50Ij5vbmx5IG9uIGxhcmdlIGNhbGVuZGFyczwvc3Bhbj4pIDogdXNlIGlmIHlv dSB3aXNoIHRvIGJ1aWxkIGVhY2ggY2VsbCBlbnRpcmVseSBmcm9tIHNjcmF0Y2guIFRoZXJl IGFyZSBzb21lIDxhIGhyZWY9IiNjZWxsZm9ybSI+cmVwbGFjZW1lbnQgdmFyaWFibGVzPC9h PiB5b3UgY2FuIHVzZSB0byBpbnNlcnQgZHluYW1pYyBwaWVjZXMgb2YgaW5mb3JtYXRpb24g aW4geW91ciBjZWxsczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5oZWFkZXJmb3Jt PC9zcGFuPiA6IHVzZSBpZiB5b3Ugd2lzaCB0byBidWlsZCB5b3VyIGhlYWRlciB5b3Vyc2Vs Zi4gVGhlcmUgYXJlIHNvbWUgPGEgaHJlZj0iI2hkcmZvcm0iPnJlcGxhY2VtZW50IHZhcmlh YmxlczwvYT4geW91IGNhbiB1c2UgdG8gaW5zZXJ0IGR5bmFtaWMgcGllY2VzIG9mIGluZm9y bWF0aW9uIGluIHlvdXIgaGVhZGVyPC9saT4KCTwvdWw+CgoJPGgzIGNsYXNzPSJhdHRzIj5G aWVsZCBhdHRyaWJ1dGVzPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5z dGVwZmllbGQ8L3NwYW4+IDogdGhlIElEIG9mIGEgZmllbGQgd2l0aGluIHdoaWNoIGFuIGV2 ZW50IG1heSBiZSB0b2xkIHRvIHJlcGVhdC4gTm90ZSBpdCBpcyB0aGUgZmllbGQmIzgyMTc7 cyBJRCA8ZW0+bm90IGl0cyBuYW1lPC9lbT4sIHNvIGZvciBjdXN0b20gZmllbGRzIHlvdSBt dXN0IHVzZSA8Y29kZT5jdXN0b21fMTwvY29kZT4gb3IgPGNvZGU+Y3VzdG9tXzI8L2NvZGU+ IGV0Yy4gV2l0aG91dCB0aGlzIGF0dHJpYnV0ZSwgbm8gPGEgaHJlZj0iI3JlY3VyIj5yZWN1 cnJpbmcgZXZlbnRzPC9hPiBtYXkgYmUgZGVmaW5lZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5vbWl0ZmllbGQ8L3NwYW4+IDogdGhlIElEIChub3QgbmFtZSkgb2YgYSBmaWVs ZCB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBkYXRlcyBvbiB3aGljaCB0aGlzIGV2ZW50IGlz IHRvIGJlIDxhIGhyZWY9IiNjYW5jZWwiPm9taXR0ZWQ8L2E+PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPnNraXBmaWVsZDwvc3Bhbj4gOiB0aGUgSUQgb2YgYSBmaWVsZCB0aGF0 IGNvbnRhaW5zIGEgbGlzdCBvZiBkYXRlcyBvbiB3aGljaCB0aGlzIGV2ZW50IGlzIDxhIGhy ZWY9IiNjYW5jZWwiPmNhbmNlbGxlZDwvYT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+ZXh0cmFmaWVsZDwvc3Bhbj4gOiB0aGUgSUQgb2YgYSBmaWVsZCBmcm9tIHdoaWNoIGEg bGlzdCBvZiA8YSBocmVmPSIjZXh0cmEiPmFkZGl0aW9uYWwgZXZlbnQgZGF0ZXM8L2E+IG1h eSBiZSBnaXZlbjsgdGhlIHNhbWUgZXZlbnQgZGV0YWlscyB3aWxsIGJlIGNvcGllZCB0byB0 aGUgbmV3IGRheShzKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5leHRyYXN0cmlj dDwvc3Bhbj4gOiBhbnkgZGF0ZXMgaW4gPGNvZGU+ZXh0cmFmaWVsZDwvY29kZT4gYXV0b21h dGljYWxseSBhcHBlYXIgb24gdGhlIGNhbGVuZGFyLCBidXQgeW91IG1heSBjaG9vc2UgdG8g cmVzdHJpY3QgbmV3IGRhdGVzIGZyb20gYXBwZWFyaW5nIGFmdGVyIHRoZSBldmVudCYjODIx NztzIGV4cGlyeSBkYXRlIGJ5IHNldHRpbmcgPGNvZGU+ZXh0cmFzdHJpY3Q9JnF1b3Q7MSZx dW90OzwvY29kZT4uIERlZmF1bHQ6IDA8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ c2hvd3NraXBwZWQ8L3NwYW4+IDogc2hvdyAoMSkgb3IgaGlkZSAoMCkgY2FuY2VsbGVkIGV2 ZW50cyBvbiB0aGUgY2FsZW5kYXIuIERlZmF1bHQ6IDA8L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+c2hvd3NwYW5uZWQ8L3NwYW4+IDogc2hvdyAoMSkgb3IgaGlkZSAoMCkgc3Bh bm5lZCBldmVudHMgb24gdGhlIGNhbGVuZGFyLiBEZWZhdWx0OiAxPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPmRhdGVmaWVsZHM8L3NwYW4+IDogdGhlIElEcyBvZiB1cCB0byB0 d28gZmllbGRzIGZyb20gd2hpY2ggcG9zdGVkIGFuZCBleHBpcnkgZGF0ZSBzdGFtcHMgbWF5 IGJlIGdpdmVuLiBDb21tYS1zZXBhcmF0ZSB0aGUgZmllbGQgbmFtZXM7IHRoZSBmaXJzdCB3 aWxsIGJlIHVzZWQgYXMgdGhlIFBvc3RlZCBkYXRlIGFuZCB0aGUgc2Vjb25kIGFzIHRoZSBF eHBpcnkuIElmIGVpdGhlciBpcyBvbWl0dGVkIG9yIG1hbmdsZWQsIHRoZSBhcnRpY2xlJiM4 MjE3O3MgJiM4MjIwO3JlYWwmIzgyMjE7IHBvc3RlZC9leHBpcnkgZGF0ZSB3aWxsIGJlIHVz ZWQgaW5zdGVhZC4gSWYgdGhlIGV4cGlyeSBkYXRlIG9jY3VycyBiZWZvcmUgdGhlIHN0YXJ0 IGRhdGUsIHlvdXIgZGF0ZWZpZWxkcyB3aWxsIGJlIGlnbm9yZWQgYW5kIGEgd2FybmluZyB3 aWxsIGJlIGlzc3VlZDwvbGk+Cgk8L3VsPgoKCTxoMyBjbGFzcz0iYXR0cyI+Q29uZmlnIGF0 dHJpYnV0ZXM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmhvbGlkYXlz PC9zcGFuPiA6IGxpc3Qgb2YgZGF0ZXMgdGhhdCBhcmUgZGVjcmVlZCBhcyA8YSBocmVmPSIj aG9saWRheXMiPmhvbGlkYXlzPC9hPi4gTWF5IGJlIGRlZmVycmVkIHRvIGEgPGNvZGU+Jmx0 O3R4cDp2YXJpYWJsZSAvJmd0OzwvY29kZT4sIGluIHdoaWNoIGNhc2UgZGVmaW5lIHlvdXIg bGlzdCBpbiBhIG5hbWVkIHZhcmlhYmxlIGFuZCB1c2UgPGNvZGU+aG9saWRheXM9JnF1b3Q7 dHhwdmFyOm15X3Zhcl9uYW1lJnF1b3Q7PC9jb2RlPiB0byByZWFkIHRoZW0gaW50byB0aGUg cGx1Z2luPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmhvbGlkYXlmbGFnczwvc3Bh bj4gOiBwZXJtaXQgY2VydGFpbiA8YSBocmVmPSIjbmFtaW5nIj5ldmVudCBmbGFnczwvYT4g dG8gYmUgc2NoZWR1bGVkIG9uIGhvbGlkYXlzLiBEZWZhdWx0OiA8Y29kZT5zdGFuZGFyZDwv Y29kZT4gKGkuZS4gc3RhbmRhcmQgb25lLW9mZiBldmVudHMpIGJ1dCBvdGhlcnMgbWF5IGJl IGxpc3RlZCBhcyB3ZWxsLiBDaG9vc2UgZnJvbSA8Y29kZT5zdGFuZGFyZDwvY29kZT4sIDxj b2RlPnJlY3VyPC9jb2RlPiBvciA8Y29kZT5tdWx0aTwvY29kZT48L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+aWQ8L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1M PC9zcGFuPiBJRCB0byBhcHBseSB0byB0aGUgdGFibGUgdGhhdCBob2xkcyB0aGUgY2FsZW5k YXIuIFRoaXMgaXMgdGhlIHZhbHVlIG9mIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9z cGFuPiB2YXJpYWJsZSA8Y29kZT5jYWxpZDwvY29kZT4uIERlZmF1bHQ6IHVuc2V0PC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm5hdmlkPC9zcGFuPiA6IHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+SFRNTDwvc3Bhbj4gSUQgdG8gYXBwbHkgdG8gdGhlIHByZXYvbmV4dC9tb250 aC95ZWFyIG5hdmlnYXRpb24gZm9ybS4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+eWVhcndpZHRoPC9zcGFuPiA6IGEgY29tbWEtc2VwYXJhdGVkIGxp c3QgdGhhdCBzcGVjaWZpZXMgaG93IG1hbnkgeWVhcnMgeW91ciBjYWxlbmRhciBzcGFucy4g VGhlIGRlZmF1bHQgKDApIHVzZXMgdGhlIGVhcmxpZXN0IChwb3N0ZWQpIGV2ZW50IGluIHRo ZSBzZWN0aW9uIGFzIHRoZSBlYXJsaWVzdCB5ZWFyLCBhbmQgdGhlIGxhdGVzdCAobW9kaWZp ZWQgb3IgcG9zdGVkLCB3aGljaGV2ZXIgaXMgZ3JlYXRlcikgZXZlbnQgYXMgdGhlIGxhdGVz dCB5ZWFyLiBZb3Ugd2lsbCBub3QgYmUgcGVybWl0dGVkIHRvIG5hdmlnYXRlIHRoZSBjYWxl bmRhciBvdXRzaWRlIHRoaXMgcmFuZ2UuPGRpdiBjbGFzcz0iYnJlYWsiPlRvIHdpZGVuIHRo ZSByYW5nZSwgc3BlY2lmeSBzb21lIHZhbHVlcywgZm9yIGV4YW1wbGUgPGNvZGU+eWVhcndp ZHRoPSZxdW90OzIsNCZxdW90OzwvY29kZT4gd2lsbCBzdWJ0cmFjdCAyIHdob2xlIHllYXJz IGZyb20gdGhlIGVhcmxpZXN0IGV2ZW50IGFuZCBhZGQgNCB3aG9sZSB5ZWFycyB0byB0aGUg bGF0ZXN0IGV2ZW50LiBJZiB5b3Ugc3BlY2lmeSBhIHNpbmdsZSBudW1iZXIsIHRoYXQgdmFs dWUgd2lsbCBiZSB1c2VkIHRvIGV4cGFuZCB0aGUgcmFuZ2UgZXF1YWxseSBpbiBib3RoIGRp cmVjdGlvbnMuPC9kaXY+PGRpdiBjbGFzcz0iYnJlYWsiPiBJZiB5b3UgYWRkICYjODIxNjtj JiM4MjE3OyB0byBlaXRoZXIgdmFsdWUgdGhlIGN1cnJlbnQgeWVhciBpcyB1c2VkIGluc3Rl YWQgb2YgdGhlIGVhcmxpZXN0IG9yIGxhdGVzdCBldmVudCwgZS5nLiA8Y29kZT55ZWFyd2lk dGg9JnF1b3Q7Miw0YyZxdW90OzwvY29kZT4gd2lsbCBzdWJ0cmFjdCAyIHllYXJzIGZyb20g dGhlIGVhcmxpZXN0IGV2ZW50IGFuZCBhZGQgNCB3aG9sZSB5ZWFycyB0byB0b2RheSYjODIx NztzIGRhdGU8L2Rpdj48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+cmVtYXA8L3Nw YW4+IDogd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgY2FsZW5kYXJzIG9uIGEgcGFnZSBp dCBpcyBvZnRlbiBiZW5lZmljaWFsIHRvIHVzZSBkaWZmZXJlbnQgbmFtZXMgZm9yIDxjb2Rl Pnc9PC9jb2RlPiwgPGNvZGU+bT08L2NvZGU+IG9yIDxjb2RlPnk9PC9jb2RlPiBpbiB0aGUg PHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gc28geW91IGNhbiBuYXZpZ2F0ZSBjYWxl bmRhcnMgaW5kaXZpZHVhbGx5LiBSZW5hbWUgdGhlIHcsIG0sICZhbXA7IHkgdmFyaWFibGVz LCBmb3IgZXhhbXBsZTogPGNvZGU+cmVtYXA9JnF1b3Q7dzp3aywgeTp5ciZxdW90OzwvY29k ZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGlua3Bvc3RlZDwvc3Bhbj4gKDxz cGFuIGNsYXNzPSJpbXBvcnRhbnQiPm9ubHkgb24gc21hbGwgY2FsZW5kYXJzPC9zcGFuPikg OiBlYWNoIGNlbGwgdGhhdCBjb250YWlucyBhbiA8YSBocmVmPSIjbmFtaW5nIj5ldmVudCBm bGFnPC9hPiBvZiB0aGUgZ2l2ZW4gdHlwZShzKSB3aWxsIGhhdmUgaXRzIGRheSBudW1iZXIg bGlua2VkIHRvIHRoZSBldmVudCYjODIxNztzIHRydWUgc3RhcnQgZGF0ZSBpbnN0ZWFkIG9m IHRoZSBjZWxsJiM4MjE3O3MgZGF0ZS4gVGh1cywgaWYgeW91IGhhdmUgYSB3ZWVrbHkgZXZl bnQgdGhhdCBzdGFydHMgb24gdGhlIDIwdGggRGVjZW1iZXIgMjAwOCwgc2V0dGluZyA8Y29k ZT5saW5rcG9zdGVkPSZxdW90O3JlY3VyJnF1b3Q7PC9jb2RlPiB3aWxsIGNhdXNlIHRoZSBs aW5rIHRvIGJlIDxjb2RlPmRhdGU9MjAwOC0xMi0yMDwvY29kZT4gZXZlcnkgd2Vlay4gVGhp cyBhbGxvd3MgeW91IHRvIGFsd2F5cyBsaW5rIHRvIGEgdmFsaWQgYXJ0aWNsZS9ldmVudC4g V2l0aG91dCBsaW5rcG9zdGVkLCB0aGUgZGF0ZXMgd291bGQgYmUgMjAwOC0xMi0yMCwgMjAw OC0xMi0yNywgMjAwOS0wMS0wMywgYW5kIHNvIG9uLiBEZWZhdWx0OiA8Y29kZT5yZWN1ciwg bXVsdGksIG11bHRpcHJldiwgbXVsdGlsYXN0PC9jb2RlPiAoaS5lLiBhbnkgcmVjdXJyaW5n IG9yIHNwYW5uZWQgZXZlbnQpLiBOb3RlIHRoYXQgaWYgbW9yZSB0aGFuIG9uZSBldmVudCBv Y2N1cnMgaW4gdGhlIGNlbGwsIHRoZSBsaW5rIHdpbGwgb25seSBiZSB0byB0aGUgZmlyc3Qg ZXZlbnQgdGhlIHBsdWdpbiBmaW5kczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5t YWludGFpbjwvc3Bhbj4gOiBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRo ZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB3aGVuIG5hdmlnYXRpbmcgdGhlIGNh bGVuZGFyIHVzaW5nIHRoZSBuZXh0L3ByZXYgb3IgbW9udGgveWVhciBzZWxlY3QgbGlzdHMu IEl0ZW1zIHRoYXQgeW91IHdhbnQgdG8gcHJlc2VydmUgc2hvdWxkIGJlIGNvbW1hLXNlcGFy YXRlZC4gQ2hvb3NlIGZyb20gPGNvZGU+Y2FsaWQ8L2NvZGU+LCA8Y29kZT5zZWN0aW9uPC9j b2RlPiwgPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+LCA8Y29kZT5hdXRob3I8L2NvZGU+LCA8Y29k ZT5hcnRpY2xlPC9jb2RlPiwgPGNvZGU+cGc8L2NvZGU+IG9yIHlvdXIgb3duIDxzcGFuIGNs YXNzPSJjYXBzIj5VUkw8L3NwYW4+IHZhcmlhYmxlLiBEZWZhdWx0OiA8Y29kZT5jYWxpZDwv Y29kZT4uPGRpdiBjbGFzcz0iYnJlYWsiPlVzZSA8Y29kZT5tYWludGFpbj0mcXVvdDtzZWN0 aW9uLCBhcnRpY2xlLCBjYWxpZCZxdW90OzwvY29kZT4gaWYgeW91IGhhdmUgYW4gaW5kaXZp ZHVhbCBhcnRpY2xlIHBhZ2Ugd2l0aCBhIGNhbGVuZGFyIGluIGEgc2lkZWJhciwgc28gdGhl IGN1cnJlbnRseSB2aWV3ZWQgYXJ0aWNsZSB3aWxsIHJlbWFpbiBpbiB2aWV3IHdoZW4gY2hh bmdpbmcgZGF0ZS4gSWYgeW91IHdpc2ggdG8gbWFpbnRhaW4gc3RhdGUgeW91cnNlbGYgb3Ig ZG8gc29tZXRoaW5nIGV4b3RpYywgZW1wdHkgdGhpcyBhdHRyaWJ1dGUgZmlyc3QgdG8gYXZv aWQgd2VpcmRuZXNzPC9kaXY+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm5hbWV2 YWw8L3NwYW4+IDogYWRkIHlvdXIgb3duIG5hbWUvdmFsdWUgcGFpcnMgdG8gdGhlIGNhbGVu ZGFyJiM4MjE3O3MgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4uIGUuZy4gPGNvZGU+ bmFtZXZhbD0mcXVvdDt0cmFja2VyPW15Y2FsLCBrZWVwPTEmcXVvdDs8L2NvZGU+IHdvdWxk IGFkZCA8Y29kZT4/dHJhY2tlcj1teWNhbCZhbXA7a2VlcD0xPC9jb2RlPiB0byB0aGUgPHNw YW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4uIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byA8Y29k ZT5tYWludGFpbjwvY29kZT4gc29tZSB2YWx1ZXMgd2hpY2ggeW91IGNhbiYjODIxNzt0IGFk ZCB0byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gb24gcGFnZSBsb2FkPC9s aT4KCTwvdWw+CgoJPGgzIGNsYXNzPSJhdHRzIj5TdHlsZSBhdHRyaWJ1dGVzPC9oMz4KCgk8 dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jbGFzc2xldmVsczwvc3Bhbj4gOiBjbGFz c2VzIGNhbiBiZSBhcHBsaWVkIHRvIGV2ZW50cywgY2VsbHMsIG9yIGJvdGguIFlvdSBtYXkg YWxzbyBwcm9tb3RlIChpLmUuIGNvcHkpIGFsbCBldmVudC1sZXZlbCBjbGFzc2VzIHRoYXQg b2NjdXIgaW4gYSBkYXkgdG8gdGhlIGNlbGwgbGV2ZWwgc28geW91IGNhbiBjb2xvdXIgdGhl IGNlbGwgYmFzZWQgb24gdGhlIGV2ZW50cyB0aGF0IGl0IGNvbnRhaW5zLiBVc2UgYW55IG9m IDxjb2RlPmV2ZW50PC9jb2RlPiwgPGNvZGU+Y2VsbDwvY29kZT4sIG9yIDxjb2RlPmNlbGxw bHVzPC9jb2RlPiAoZm9yIGNvcHlpbmcgdW5pcXVlIGV2ZW50IGNsYXNzZXMgdG8gdGhlIGNl bGwpLiBOb3RlIHlvdSBzaG91bGQgbm90IHVzZSA8Y29kZT5jZWxsPC9jb2RlPiBhbmQgPGNv ZGU+Y2VsbHBsdXM8L2NvZGU+IHRvZ2V0aGVyIGJlY2F1c2UgdGhlIGxhdHRlciBvdmVycmlk ZXMgdGhlIGZvcm1lci4gRGVmYXVsdDogPGNvZGU+Y2VsbCwgZXZlbnQ8L2NvZGU+PC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzcHJlZml4ZXM8L3NwYW4+IDogYSBjb21t YS1zZXBhcmF0ZWQgbGlzdCBvZiB1cCB0byB0d28gcHJlZml4ZXMgdG8gYXBwbHkgdG8geW91 ciBjbGFzcyBuYW1lcy4gVGhlIGZpcnN0IHByZWZpeCBpcyBhcHBsaWVkIHRvIGNlbGwtbGV2 ZWwgY2xhc3NlcyAoYW5kIGZsYWdzKSBhbmQgdGhlIHNlY29uZCBwcmVmaXggaXMgYXBwbGll ZCB0byBldmVudCBjbGFzc2VzIChzZWUgPGNvZGU+ZXZlbnRjbGFzc2VzPC9jb2RlPikuIElm IHlvdSBvbmx5IHNwZWNpZnkgb25lIHByZWZpeCwgaXQgd2lsbCBiZSB1c2VkIGZvciBib3Ro LiBJZiB5b3UgdXNlIDxjb2RlPmNsYXNzcHJlZml4ZXM9JnF1b3Q7JnF1b3Q7PC9jb2RlPiB0 aGVuIG5vIHByZWZpeGVzIHdpbGwgYmUgdXNlZCBhdCBhbGwuIERlZmF1bHQ6IDxjb2RlPnNt ZF9jYWxfLCBzbWRfY2FsX2V2XzwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+Y2xhc3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGNhbGVuZGFyIHRhYmxl IGl0c2VsZi4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ cm93Y2xhc3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgb2YgZWFjaCB0YWJsZSByb3cuIERl ZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNlbGxjbGFzczwv c3Bhbj4gOiB0aGUgY2xhc3MgbmFtZSBvZiBlYWNoIHRhYmxlIGNlbGwuIERlZmF1bHQ6IHVu c2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmVtcHR5Y2xhc3M8L3NwYW4+IDog dGhlIGNsYXNzIG5hbWUgb2YgYW55IGNlbGxzIHRoYXQgZG9uJiM4MjE3O3QgY29udGFpbiBh IGRheSBudW1iZXIgKGkuZS4gdGhlIGJsYW5rIGNlbGxzIGF0IHRoZSBzdGFydCBhbmQgZW5k IG9mIGEgbW9udGgpLiBEZWZhdWx0OiA8Y29kZT5lbXB0eTwvY29kZT48L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+aXNvd2Vla2NsYXNzPC9zcGFuPiA6IHRoZSBjbGFzcyBuYW1l IG9mIGVhY2ggY2VsbCBjb250YWluaW5nIGFuIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3Nw YW4+IHdlZWsuIERlZmF1bHQ6IDxjb2RlPndlZWs8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPm5hdmNsYXNzPC9zcGFuPiA6IHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBw cmV2L25leHQgbW9udGggbmF2IGFycm93cy4gSWYgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBp cyB1c2VkLCB0aGUgZmlyc3QgaXRlbSB3aWxsIGJlIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBv ZiB0aGUgcHJldmlvdXMgbW9udGgsIHRoZSAybmQgaXRlbSBvZiB0aGUgbmV4dCBtb250aC4g SWYgYSBzaW5nbGUgdmFsdWUgaXMgdXNlZCwgYm90aCBjbGFzcyBuYW1lcyB3aWxsIGJlIHRo ZSBzYW1lLiBEZWZhdWx0OiA8Y29kZT5uYXZwcmV2LCBuYXZuZXh0PC9jb2RlPjwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5teWNsYXNzPC9zcGFuPiA6IHRoZSBjbGFzcyBuYW1l IG9mIGJvdGggdGhlIG1vbnRoIGFuZCB5ZWFyIGluIHRoZSBjYWxlbmRhciBoZWFkZXIgKGVp dGhlciB0aGUgPGNvZGU+Jmx0O3NwYW4mZ3Q7PC9jb2RlPiBvciA8Y29kZT4mbHQ7c2VsZWN0 Jmd0OzwvY29kZT4gdGFncykuIElmIDxjb2RlPm15d3JhcHRhZzwvY29kZT4gaXMgdXNlZCwg dGhlIGNsYXNzIGlzIGFwcGxpZWQgdG8gdGhlIHdyYXB0YWcgaW5zdGVhZC4gRGVmYXVsdDog dW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZXZlbnRjbGFzc2VzPC9zcGFu PiA6IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaXRlbXMgdG8gYWRkIGFzIGNsYXNzZXMg dG8gZWFjaCBldmVudCAoZWFjaCBwcmVmaXhlZCB3aXRoIHRoZSBldmVudCBwcmVmaXgpLiBJ dCBkZWZhdWx0cyB0byA8Y29kZT5jYXRlZ29yeTwvY29kZT4gc28gaXQgYWRkcyB0aGUgQ2F0 ZWdvcnkxIGFuZCAyIG5hbWVzIGFzIGNsYXNzIGlkZW50aWZpZXJzIHRvIGVhY2ggZXZlbnQu PGRpdiBjbGFzcz0iYnJlYWsiPklmIHlvdSB3aXNoIHRvIGV4dGVuZCBvciBhbHRlciB0aGlz LCBnaXZlIGEgbGlzdCBvZiBmaWVsZHMgdGhhdCB5b3Ugd2FudCB0byBhcHBseSB0byB0aGUg ZXZlbnQgKGUuZy4gPGNvZGU+ZXZlbnRjbGFzc2VzPSZxdW90O0lELCBBdXRob3JJRCwgY3Vz dG9tXzUmcXVvdDs8L2NvZGU+IHdvdWxkIGFkZCB0aHJlZSBjbGFzc2VzIHRvIGVhY2ggZXZl bnQgY29ycmVzcG9uZGluZyB0byB0aGUgZXZlbnQmIzgyMTc7cyBJRCwgaXRzIGF1dGhvciAo bG9naW4pIG5hbWUgYW5kIHRoZSBjb250ZW50cyBvZiBjdXN0b21fNSkuIElmIHlvdSB1c2Ug PGNvZGU+Y2VsbHBsdXM8L2NvZGU+LCB0aGVzZSBjbGFzc2VzIHdpbGwgYmUgY29waWVkIHRv IHRoZSBjZWxsIGxldmVsLjwvZGl2PjxkaXYgY2xhc3M9ImJyZWFrIj5Tb21lIHNwZWNpYWwg bmFtZXMgZXhpc3Q6IDxjb2RlPmNhdGVnb3J5PC9jb2RlPiByZXR1cm5zIGJvdGggQ2F0ZWdv cnkxIGFuZCBDYXRlZ29yeTIgKGlmIHNldCk7IDxjb2RlPmdjYXQ8L2NvZGU+IHdpbGwgcmV0 dXJuIHRoZSBjdXJyZW50ICYjODIxNjtnbG9iYWwmIzgyMTc7IGNhdGVnb3J5IChpZiBmaWx0 ZXJpbmcgYnkgY2F0ZWdvcnkpOyA8Y29kZT5hdXRob3I8L2NvZGU+IHJldHVybnMgdGhlIGF1 dGhvciBJRCAoaWYgZmlsdGVyaW5nIGJ5IGF1dGhvcik7IDxjb2RlPnNlY3Rpb248L2NvZGU+ IGdpdmVzIHRoZSBjdXJyZW50IHNlY3Rpb248L2Rpdj48L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+ZXZlbnR3cmFwdGFnPC9zcGFuPiA6IHRoZSAoWClIVE1MIHRhZywgd2l0aG91 dCBpdHMgYnJhY2tldHMsIHRvIHdyYXAgZWFjaCBldmVudCB3aXRoLiBEZWZhdWx0OiA8Y29k ZT5zcGFuPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5teXdyYXB0YWc8 L3NwYW4+IDogdGhlIChYKUhUTUwgdGFnLCB3aXRob3V0IGl0cyBicmFja2V0cywgdG8gd3Jh cCBhcm91bmQgPGVtPmJvdGg8L2VtPiBtb250aCArIHllYXIgZHJvcGRvd24gc2VsZWN0IGxp c3RzIGFuZCBzdWJtaXQgYnV0dG9uIChpdCB3cmFwcyB0aGUgbG90LCBjb21iaW5lZCkuIERl ZmF1bHQ6IHVuc2V0PC9saT4KCTwvdWw+CgoJPGgyIGlkPSJjZWxsZm9ybSI+VXNpbmcgYSA8 Y29kZT5jZWxsZm9ybTwvY29kZT4gd2l0aCByZXBsYWNlbWVudCB2YXJpYWJsZXM8L2gyPgoK CTxwPklmIHlvdSBkb24mIzgyMTc7dCBsaWtlIHRoZSBsYXlvdXQgb2YgdGhlIGRlZmF1bHQg Y2VsbCwgeW91IGNhbiBkbyBpdCB5b3Vyc2VsZiB3aXRoIHRoZSA8Y29kZT5jZWxsZm9ybTwv Y29kZT4gYXR0cmlidXRlLiBUaGUgY2VsbHMgYXJlIGdlbmVyYXRlZCA8ZW0+bGFzdDwvZW0+ LCBzbyBieSB0aGUgdGltZSB0aGUgcGx1Z2luIHJlYWNoZXMgdGhpcyBhdHRyaWJ1dGUsIGFs bCBldmVudHMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIGJ5IGFueSBvZiB5b3VyIGZv cm1zL2NvbnRhaW5lcnMuPC9wPgoKCTxwPlRvIGJ1aWxkIHlvdXIgb3duIGNlbGxzIHlvdSBv ZnRlbiBuZWVkIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIGV2ZW50cyB0aGF0IGZhbGwgb24g YSBwYXJ0aWN1bGFyIGRheTsgb3IgdGhlIHdlZWssIG1vbnRoIG9yIGRheSBudW1iZXJzLCBl dGMuIFNvICYjODIxMjsgaW4gYWRkaXRpb24gdG8geW91ciB1c3VhbCBtYXJrdXAgYW5kIDxz cGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRhZ3MgJiM4MjEyOyB5b3UgbWF5IGFsc28g aW5zZXJ0IGFueSBvZiB0aGUgZm9sbG93aW5nIHJlcGxhY2VtZW50cyB0byBoYXZlIHRoZSBy ZWxldmFudCB2YWx1ZSBpbnNlcnRlZCBpbiB0aGUgY2VsbDo8L3A+CgoJPHVsPgoJCTxsaT48 Y29kZT57ZGF5fTwvY29kZT4gLyA8Y29kZT5kYXl6ZXJvczwvY29kZT4gOiBkYXkgb2YgdGhl IHdlZWsgKDEtMzEgLyAwMS0zMSk8L2xpPgoJCTxsaT48Y29kZT57d2Vla2RheX08L2NvZGU+ IDogd2Vla2RheSBpbiB0aGUgbG9jYWwgbGFuZ3VhZ2UsIG9yIGZyb20geW91ciA8Y29kZT5k YXlmb3JtYXQ8L2NvZGU+IGxpc3Q8L2xpPgoJCTxsaT48Y29kZT57d2Vla2RheWZ1bGx9PC9j b2RlPiBvciA8Y29kZT57d2Vla2RheWFiYnJ9PC9jb2RlPiA6IHdlZWtkYXkgaW4gdGhlIGxv Y2FsIGxhbmd1YWdlPC9saT4KCQk8bGk+PGNvZGU+e3dlZWt9PC9jb2RlPiA6IDxzcGFuIGNs YXNzPSJjYXBzIj5JU088L3NwYW4+IHdlZWsgbnVtYmVyICgwMS01Myk8L2xpPgoJCTxsaT48 Y29kZT57bW9udGh9PC9jb2RlPiAvIDxjb2RlPm1vbnRoemVyb3M8L2NvZGU+IDogbW9udGgg bnVtYmVyICgxLTEyIC8gMDEtMTIpPC9saT4KCQk8bGk+PGNvZGU+e21vbnRobmFtZX08L2Nv ZGU+IDogbW9udGggbmFtZSBpbiB0aGUgbG9jYWwgbGFuZ3VhZ2UsIG9yIGZyb20geW91ciA8 Y29kZT5tb250aGZvcm1hdDwvY29kZT4gbGlzdDwvbGk+CgkJPGxpPjxjb2RlPnttb250aG5h bWVmdWxsfTwvY29kZT4gb3IgPGNvZGU+e21vbnRobmFtZWFiYnJ9PC9jb2RlPiA6IG1vbnRo IG5hbWUgaW4gdGhlIGxvY2FsIGxhbmd1YWdlPC9saT4KCQk8bGk+PGNvZGU+e3llYXJ9PC9j b2RlPiA6IDQtZGlnaXQgeWVhcjwvbGk+CgkJPGxpPjxjb2RlPntzaG9ydHllYXJ9PC9jb2Rl PiA6IDItZGlnaXQgeWVhcjwvbGk+CgkJPGxpPjxjb2RlPntpc295ZWFyfTwvY29kZT4gOiA0 IGRpZ2l0IDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHllYXI8L2xpPgoJCTxsaT48 Y29kZT57c2hvcnRpc295ZWFyfTwvY29kZT4gOiAyIGRpZ2l0IDxzcGFuIGNsYXNzPSJjYXBz Ij5JU088L3NwYW4+IHllYXI8L2xpPgoJCTxsaT48Y29kZT57ZXZpZH08L2NvZGU+IDogZXZl bnQgKGFydGljbGUpIElEPC9saT4KCQk8bGk+PGNvZGU+e2V2ZW50c308L2NvZGU+IDogYWxs IGV2ZW50cyBmb3IgdGhlIGRheTwvbGk+CgkJPGxpPjxjb2RlPntzdGFuZGFyZH08L2NvZGU+ IDogb25seSBzdGFuZGFyZCBldmVudHM8L2xpPgoJCTxsaT48Y29kZT57cmVjdXJmaXJzdH08 L2NvZGU+IC8gPGNvZGU+e3JlY3VyfTwvY29kZT4gOiB2YXJpb3VzIHJlY3VycmluZyBldmVu dHM8L2xpPgoJCTxsaT48Y29kZT57YWxscmVjdXJ9PC9jb2RlPiA6IGFsbCByZWN1cnJpbmcg ZXZlbnRzIGZvciB0aGUgZGF5PC9saT4KCQk8bGk+PGNvZGU+e211bHRpZmlyc3R9PC9jb2Rl PiAvIDxjb2RlPnttdWx0aX08L2NvZGU+IC8gPGNvZGU+e211bHRpcHJldn08L2NvZGU+IC8g PGNvZGU+e211bHRpbGFzdH08L2NvZGU+IDogdmFyaW91cyBtdWx0aSBldmVudHM8L2xpPgoJ CTxsaT48Y29kZT57YWxsbXVsdGl9PC9jb2RlPiA6IGFsbCBtdWx0aSBldmVudHMgZm9yIHRo ZSBkYXk8L2xpPgoJCTxsaT48Y29kZT57Y2FuY2VsfTwvY29kZT4gOiBvbmx5IGNhbmNlbGxl ZCBldmVudHM8L2xpPgoJCTxsaT48Y29kZT57ZXh0cmF9PC9jb2RlPiA6IG9ubHkgZXh0cmEg ZXZlbnRzPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJoZHJmb3JtIj5Vc2luZyBhIDxjb2RlPmhl YWRlcmZvcm08L2NvZGU+PC9oMj4KCgk8cD5Zb3UgY2FuIGNyZWF0ZSB5b3VyIG93biBoZWFk ZXIgaWYgeW91IHdpc2ggYW5kIGVtcGxveSBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXBsYWNl bWVudHMgaW4gdGhlIG1hcmt1cDo8L3A+CgoJPHVsPgoJCTxsaT48Y29kZT57Zmlyc3RkYXl9 PC9jb2RlPiA6IGN1cnJlbnQgd2Vla2RheSAoYXMgYSBudW1iZXIgZnJvbSAwIHRvIDYpPC9s aT4KCQk8bGk+PGNvZGU+e2RheW5hbWVzfTwvY29kZT4gOiBjb21tYS1zZXBhcmF0ZWQgZGF5 IG5hbWVzPC9saT4KCQk8bGk+PGNvZGU+e2lzb3dlZWtoZWFkfTwvY29kZT4gOiA8c3BhbiBj bGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVrIGhlYWRpbmc8L2xpPgoJCTxsaT48Y29kZT57 d2Vla308L2NvZGU+IDogPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlazwvbGk+ CgkJPGxpPjxjb2RlPnttb250aH08L2NvZGU+IDogbW9udGg8L2xpPgoJCTxsaT48Y29kZT57 eWVhcn08L2NvZGU+IDogeWVhcjwvbGk+CgkJPGxpPjxjb2RlPntpc295ZWFyfTwvY29kZT4g OiA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB5ZWFyPC9saT4KCTwvdWw+CgoJPGgy IGlkPSJzaXplZGlmZiI+RGlmZmVyZW5jZXMgYmV0d2VlbiBsYXJnZSBhbmQgc21hbGwgY2Fs ZW5kYXJzPC9oMj4KCgk8cD5Ob3QgYSBsb3QhIEJ1dCB0aGVyZSBhcmUgc29tZSBzdWJ0bGV0 aWVzOjwvcD4KCgk8dWw+CgkJPGxpPjxjb2RlPmNlbGxmb3JtPC9jb2RlPiBjYW5ub3QgYmUg dXNlZCBvbiBhIHNtYWxsIGNhbGVuZGFyPC9saT4KCQk8bGk+QnkgZGVmYXVsdCwgbm8gZXZl bnRzIGFyZSBwbGFjZWQgaW4gdGhlIHNtYWxsIGNhbGVuZGFyLiBZb3UgY2FuIGFkZCB0aGVt IHlvdXJzZWxmIGlmIHlvdSB3aXNoIGJlY2F1c2UgeW91IGNhbiB1c2UgdGhlIHNhbWUgZm9y bS9jb250YWluZXIgbWVjaGFuaXNtIGFzIHRoZSBsYXJnZSBjYWxlbmRhcjwvbGk+CgkJPGxp PlRoZSBvbmx5IHRoaW5nIHJlbmRlcmVkIGluIGEgc21hbGwgY2FsZW5kYXIgY2VsbCBpcyB0 aGUgaHlwZXJsaW5rZWQgZGF0ZSBhbmQgYW55IDxhIGhyZWY9IiNuYW1pbmciPmZsYWdzPC9h PiBzbyB5b3UgY2FuIHN0eWxlIHRoZSBib3hlczwvbGk+CgkJPGxpPjxjb2RlPmNsYXNzbGV2 ZWxzPC9jb2RlPiBhcmUgaWdub3JlZDogZXZlcnl0aGluZyBpcyBhdXRvbWF0aWNhbGx5IGFz c2lnbmVkIGF0IHRoZSBjZWxsIGxldmVsIChpLmUuIDxjb2RlPmNlbGxwbHVzPC9jb2RlPiBp cyBzZXQpPC9saT4KCQk8bGk+PGNvZGU+ZXZlbnRjbGFzc2VzPC9jb2RlPiBhcmUgc3RpbGwg aG9ub3VyZWQgaWYgeW91IHdpc2ggdG8gdXNlIGEgPGNvZGU+Zm9ybTwvY29kZT4gdG8gcHJv Y2VzcyB0aGVtIHlvdXJzZWxmPC9saT4KCQk8bGk+VGhlIHNtYWxsIGNhbGVuZGFyIG91dHB1 dHMgeWVhci1tb250aC1kYXktdGl0bGUgb3IgbWVzc3kgcGVybWxpbmtzIG9ubHk8L2xpPgoJ PC91bD4KCgk8aDIgaWQ9ImlmY2FsIj5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2lmX2NhbCZn dDs8L2NvZGU+PC9oMj4KCgk8cD5UaGlzIGNvbmRpdGlvbmFsIHRhZyBhbGxvd3MgeW91ICYj ODIxMjsgaW5zaWRlIHlvdXIgY29udGFpbmVyL2Zvcm1zICAmIzgyMTI7IHRvIHRlc3QgY2Vy dGFpbiBjb25kaXRpb25zIG9mIHRoZSBjdXJyZW50IGV2ZW50L2NlbGwuIEZvciBlbmhhbmNl ZCBjb25kaXRpb25hbCBjaGVja2luZyAocGVyaGFwcyBpbiBjb25qdW5jdGlvbiB3aXRoIDxh IGhyZWY9IiNjYWxub3ciPnNtZF9jYWxfbm93PC9hPiksIGNvbnNpZGVyIHRoZSBzbWRfaWYg cGx1Z2luLjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0iYXR0c2lmY2FsIj5BdHRyaWJ1 dGVzPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5mbGFnPC9zcGFuPiA6 IHRoZSBjZWxsIG9yIGV2ZW50IGZsYWcocykgeW91IHdhbnQgdG8gdGVzdCwgZWFjaCBzZXBh cmF0ZWQgYnkgYSBjb21tYS4gQ2hvb3NlIGZyb206IDxjb2RlPmV2ZW50PC9jb2RlPiwgPGNv ZGU+c3RhbmRhcmQ8L2NvZGU+LCA8Y29kZT5yZWN1cmZpcnN0PC9jb2RlPiwgPGNvZGU+cmVj dXI8L2NvZGU+LCA8Y29kZT5tdWx0aWZpcnN0PC9jb2RlPiwgPGNvZGU+bXVsdGlsYXN0PC9j b2RlPiwgPGNvZGU+bXVsdGk8L2NvZGU+LCA8Y29kZT5tdWx0aXByZXY8L2NvZGU+LCA8Y29k ZT5jYW5jZWw8L2NvZGU+LCA8Y29kZT5vbWl0PC9jb2RlPiwgPGNvZGU+ZXh0cmE8L2NvZGU+ LCA8Y29kZT5ob2xzPC9jb2RlPiwgPGNvZGU+dG9kYXk8L2NvZGU+LCBvciB0aGUgc3BlY2lh bCBmbGFnIDxjb2RlPlNNRF9BTlk8L2NvZGU+IHdoaWNoIHdpbGwgdHJpZ2dlciBpZiB0aGUg Y2VsbCBvciBldmVudCBjb250YWlucyBhbnkgb2YgdGhlIGFib3ZlLiBEZWZhdWx0OiB1bnNl dDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jYWxpZDwvc3Bhbj4gOiB0aGUgY2Fs ZW5kYXIgSUQgeW91IHdpc2ggdG8gY2hlY2sgZm9yIGEgbWF0Y2guIERlZmF1bHQ6IHVuc2V0 PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnllYXI8L3NwYW4+IDogdGhlIHllYXIg dGhlIGN1cnJlbnQgY2VsbCBmYWxscyBpbi4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+aXNveWVhcjwvc3Bhbj4gOiB0aGUgPHNwYW4gY2xhc3M9ImNh cHMiPklTTzwvc3Bhbj4geWVhciB0aGUgY3VycmVudCBjZWxsIGZhbGxzIGluLiBEZWZhdWx0 OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5tb250aDwvc3Bhbj4gOiB0 aGUgbW9udGggbnVtYmVyICgxLTEyKSB0aGF0IHRoZSBjdXJyZW50IGNlbGwgZmFsbHMgaW4u IERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPndlZWs8L3Nw YW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHdlZWsgbnVtYmVyIHRo YXQgdGhlIGN1cnJlbnQgY2VsbCBmYWxscyBpbi4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+ZGF5PC9zcGFuPiA6IHRoZSBkYXkgbnVtYmVyIHRoZSBj dXJyZW50IGNlbGwgZmFsbHMgaW4uIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPmxvZ2ljPC9zcGFuPiA6IHdoZXRoZXIgeW91IHdhbnQgdG8gY2hlY2sg aWYgPGVtPmFsbDwvZW0+IHRlc3RzIHlvdSBub21pbmF0ZWQgYXJlIHRydWUgaW4gdGhlIGN1 cnJlbnQgY2VsbCAoPGNvZGU+bG9naWM9JnF1b3Q7YW5kJnF1b3Q7PC9jb2RlPikgb3IgPGVt PmF0IGxlYXN0IG9uZTwvZW0+IG9mIHRoZSB0ZXN0cyBpcyB0cnVlICg8Y29kZT5sb2dpYz0m cXVvdDtvciZxdW90OzwvY29kZT4pLiBEZWZhdWx0OiA8Y29kZT5vcjwvY29kZT48L2xpPgoJ PC91bD4KCgk8cD4mIzgyMTY7QW5kJiM4MjE3OyBsb2dpYyBpcyBnb29kIGZvciBjaGVja2lu ZyBpZiB0aGUgY2VsbCBpcyBvZiBhIGNlcnRhaW4gdHlwZSA8c3BhbiBjbGFzcz0iY2FwcyI+ QU5EPC9zcGFuPiBpcyBsYXRlciB0aGFuIHRoZSAxNXRoIG9mIHRoZSBtb250aCwgZm9yIGV4 YW1wbGUuPC9wPgoKCTxwPlJ1ZGltZW50YXJ5IGNvbXBhcmF0b3JzIGNhbiBiZSBhcHBsaWVk IHRvIHRoZSA8Y29kZT4oaXNvKXllYXI8L2NvZGU+LCA8Y29kZT5tb250aDwvY29kZT4sIDxj b2RlPndlZWs8L2NvZGU+IGFuZCA8Y29kZT5kYXk8L2NvZGU+IGF0dHJpYnV0ZXMuIE5vcm1h bGx5IHRoZSB2YWx1ZSB5b3Ugc3VwcGx5IHdpbGwgYmUgdGVzdGVkIGZvciBhbiBleGFjdCBt YXRjaCBidXQgaWYgeW91IHByZWZpeCBpdCB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNo YXJhY3RlciBzZXF1ZW5jZXMgdGhlbiB0aGUgYmVoYXZpb3VyIGNoYW5nZXM6PC9wPgoKCTx1 bD4KCQk8bGk+PGNvZGU+Jmd0OzwvY29kZT4gdGVzdHMgaWYgYXR0cmlidXRlIGlzIDxlbT5n cmVhdGVyIHRoYW48L2VtPiB0aGUgZ2l2ZW4gdmFsdWUgKGUuZy4gPGNvZGU+eWVhcj0mcXVv dDsmZ3Q7MjAwOCZxdW90OzwvY29kZT4pPC9saT4KCQk8bGk+PGNvZGU+Jmd0Oz08L2NvZGU+ IHRlc3RzIGlmIGF0dHJpYnV0ZSBpcyA8ZW0+Z3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvPC9l bT4gdGhlIGdpdmVuIHZhbHVlIChlLmcuIDxjb2RlPm1vbnRoPSZxdW90OyZndDs9NyZxdW90 OzwvY29kZT4pPC9saT4KCQk8bGk+PGNvZGU+Jmx0OzwvY29kZT4gdGVzdHMgaWYgYXR0cmli dXRlIGlzIDxlbT5sZXNzIHRoYW48L2VtPiB0aGUgZ2l2ZW4gdmFsdWU8L2xpPgoJCTxsaT48 Y29kZT4mbHQ7PTwvY29kZT4gdGVzdHMgaWYgYXR0cmlidXRlIGlzIDxlbT5sZXNzIHRoYW4g b3IgZXF1YWwgdG88L2VtPiB0aGUgZ2l2ZW4gdmFsdWU8L2xpPgoJCTxsaT48Y29kZT4hPC9j b2RlPiB0ZXN0cyBpZiBhdHRyaWJ1dGUgaXMgPGVtPm5vdDwvZW0+IHRoZSBnaXZlbiB2YWx1 ZSAoZS5nLiA8Y29kZT5kYXk9JnF1b3Q7ITE1JnF1b3Q7PC9jb2RlPik8L2xpPgoJPC91bD4K Cgk8aDIgaWQ9ImNhbGluZm8iPlRhZzogPGNvZGU+Jmx0O3R4cDpzbWRfY2FsX2luZm8gLyZn dDs8L2NvZGU+PC9oMj4KCgk8cD5JbnNpZGUgeW91ciBjb250YWluZXIvZm9ybXMsIHVzZSB0 aGlzIHRhZyB0byBvdXRwdXQgY2VydGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVu dCBldmVudC48L3A+CgoJPGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0dHNjYWxpbmZvIj5BdHRy aWJ1dGVzPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50eXBlPC9zcGFu PiA6IHRoZSB0eXBlKHMpIG9mIGluZm9ybWF0aW9uIHlvdSB3YW50IHRvIHJldHVybiwgZWFj aCBzZXBhcmF0ZWQgYnkgYSBjb21tYS4gQ2hvb3NlIGZyb206IDxjb2RlPmZsYWc8L2NvZGU+ LCA8Y29kZT5jYWxpZDwvY29kZT4sIDxjb2RlPihpc28peWVhcjwvY29kZT4gLyA8Y29kZT5t b250aDwvY29kZT4gLyA8Y29kZT53ZWVrPC9jb2RlPiAvIDxjb2RlPmRheTwvY29kZT4sIDxj b2RlPnM8L2NvZGU+IChjdXJyZW50IHNlY3Rpb24pIC8gPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+ IC8gPGNvZGU+YXV0aG9yPC9jb2RlPiAob3IgPGNvZGU+cmVhbG5hbWU8L2NvZGU+KSwgPGNv ZGU+YXJ0aWNsZTwvY29kZT4gKGlkIG9mIHRoZSBjdXJyZW50bHkgdmlld2VkIGFydGljbGUp LCBvciBhbnkgb3RoZXIgYXJ0aWNsZSB2YXJpYWJsZSBzdWNoIGFzIDxjb2RlPnNlY3Rpb248 L2NvZGU+ICh0aGUgY3VycmVudCBhcnRpY2xlJiM4MjE3O3Mgc2VjdGlvbiksIDxjb2RlPmF1 dGhvcmlkPC9jb2RlPiwgPGNvZGU+YXJ0aWNsZV9pbWFnZTwvY29kZT4sIGV0YzxkaXYgY2xh c3M9ImJyZWFrIj5JZiB1c2luZyB0aGUgPGNvZGU+aHRtbDwvY29kZT4gYXR0cmlidXRlLCB5 b3UgbWF5IG9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgbmFtZSB5b3Ugd2FudCB0aGUgdmFyaWFi bGUgdG8gYXBwZWFyIGFzIGluIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBz dHJpbmcuIFRoZSB2YXJpYWJsZXMgYWxsIHRha2Ugb24gc2Vuc2libGUgZGVmYXVsdHMgKGUu Zy4gJiM4MjE2O3NlY3Rpb24mIzgyMTc7IGJlY29tZXMgPGNvZGU+P3M9Jmx0O3NlY3Rpb24g bmFtZSZndDs8L2NvZGU+LCAmIzgyMTY7Y2F0ZWdvcnkxJiM4MjE3OyBiZWNvbWVzIDxjb2Rl Pj9jPSZsdDtjYXRlZ29yeTEgbmFtZSZndDs8L2NvZGU+LCBldGMpIGJ1dCBpZiwgc2F5LCB5 b3Ugd2FudGVkIGNhdGVnb3J5MSB0byBiZSBrbm93biBhcyA8Y29kZT50aGVfY2F0PC9jb2Rl PiB5b3UgY291bGQgd3JpdGUgPGNvZGU+Jmx0O3R4cDpzbWRfY2FsX2luZm8gdHlwZT0mcXVv dDtjYXRnZW9yeTp0aGVfY2F0JnF1b3Q7IGh0bWw9JnF1b3Q7MSZxdW90OyAvJmd0OzwvY29k ZT4uIFlvdSB3b3VsZCB0aGVuIHNlZSA8Y29kZT4/dGhlX2NhdD0mbHQ7Y2F0ZWdvcnkxIG5h bWUmZ3Q7PC9jb2RlPjwvZGl2PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5qb2lu PC9zcGFuPiA6IHRoZSBjaGFyYWN0ZXJzIHlvdSB3YW50IHRvIHVzZSB0byBzZXBhcmF0ZSBl YWNoIGl0ZW0geW91IGFza2VkIGZvci4gTm90ZSBpdCBpcyB0aGUgY2hhcmFjdGVycyA8ZW0+ YmV0d2VlbjwvZW0+IGVhY2ggaXRlbSBzbyB0aGUgdmVyeSBmaXJzdCBlbnRyeSB3aWxsIDxz dHJvbmc+bm90PC9zdHJvbmc+IGhhdmUgdGhlIDxjb2RlPmpvaW48L2NvZGU+IGluIGZyb250 IG9mIGl0IChzZWUgPGNvZGU+am9pbl9wcmVmaXg8L2NvZGU+KS4gRGVmYXVsdDogYSBzcGFj ZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5qb2luX3ByZWZpeDwvc3Bhbj4gOiB0 aGUgc3RyaW5nIHlvdSB3YW50IHRvIHB1dCBpbiBmcm9udCBvZiB0aGUgZmlyc3QgaXRlbSBp biB0aGUgcmV0dXJuZWQgbGlzdC4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IHRoaXMgYXR0cmli dXRlIGl0IGRlZmF1bHRzIHRvIDxjb2RlPlNNRF9BVVRPPC9jb2RlPiB3aGljaCB0cmllcyB0 byBiZSBjbGV2ZXI6Cgk8dWw+CgkJPGxpPmlmIHVzaW5nIDxjb2RlPnR5cGU9JnF1b3Q7Zmxh ZyZxdW90OzwvY29kZT4gdGhlIGpvaW5fcHJlZml4IGlzIHNldCB0byB0aGUgc2FtZSBhcyA8 Y29kZT5qb2luPC9jb2RlPi4gVGh1cyB3aXRoIDxjb2RlPmpvaW49JnF1b3Q7IGNhbF8mcXVv dDs8L2NvZGU+IHlvdSBtaWdodCBnZXQgPGNvZGU+IGNhbF9tdWx0aSBjYWxfdG9kYXkgY2Fs X2hvbHM8L2NvZGU+PC9saT4KCQk8bGk+aWYgdXNpbmcgPGNvZGU+aHRtbD0mcXVvdDsxJnF1 b3Q7PC9jb2RlPiB0aGUgam9pbl9wcmVmaXggaXMgc2V0IHRvIGEgcXVlc3Rpb24gbWFyaywg dGh1czogPGNvZGU+dHlwZT0mcXVvdDttb250aCx5ZWFyLGNhdGVnb3J5JnF1b3Q7IGh0bWw9 JnF1b3Q7MSZxdW90OzwvY29kZT4gbWlnaHQgcmVuZGVyIDxjb2RlPj9tPTEyJmFtcDt5PTIw MDgmYW1wO2M9Z2lnczwvY29kZT4sIHdoaWNoIGNhbiBiZSBwdXQgc3RyYWlnaHQgb24gdGhl IGVuZCBvZiBhbiBhbmNob3I8L2xpPgoJPC91bD48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+aHRtbDwvc3Bhbj4gOiBJZiBzZXQgdG8gPGNvZGU+MTwvY29kZT4sIHJldHVybnMg bm90IG9ubHkgdGhlIHZhbHVlcyB5b3Ugc3BlY2lmaWVkIGJ1dCB0aGVpciA8c3BhbiBjbGFz cz0iY2FwcyI+VVJMPC9zcGFuPiB2YXJpYWJsZSBuYW1lcyBhcyB3ZWxsLCBnaXZpbmcgeW91 IHRoZSBlbnRpcmUgc3RyaW5nIGFzIGEgdmFsaWQgc2V0IG9mIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+IHBhcmFtZXRlcnMgd2hpY2ggY2FuIGJlIGFkZGVkIHRvIGFuIGFuY2hv ci4gSXQgb3ZlcnJpZGVzIHRoZSA8Y29kZT5qb2luPC9jb2RlPiBhdHRyaWJ1dGUgYW5kIHNl dHMgaXQgdG8gYW4gYW1wZXJzYW5kLiBEZWZhdWx0OiAwLjxkaXYgY2xhc3M9ImJyZWFrIj5U aGlzIGF0dHJpYnV0ZSBpcyB1c2VmdWwgaWYgeW91IGFyZSBidWlsZGluZyB5b3VyIG93biBj b250ZW50IGluc2lkZSBlYWNoIGNlbGwgdmlhIGEgPGNvZGU+Zm9ybTwvY29kZT4gYW5kIHdp c2ggdG8gbWFpbnRhaW4gdGhlIGN1cnJlbnQgc2VhcmNoIGVudmlyb25tZW50LiBJZiB5b3Ug YWxsb3cgcGVvcGxlIHRvIGZpbHRlciBldmVudHMgYnkgY2F0ZWdvcnkgb3IgYXV0aG9yIHlv dSBjYW4gdXNlIHRoaXMgdG8gcmV0dXJuIHRoZSAmIzgyMTY7Y3VycmVudCYjODIxNzsgc3Rh dGUgb2YgY2VydGFpbiB2YXJpYWJsZXMgc28geW91IGNhbiBwYXNzIHRoZW0gdG8gdGhlIG5l eHQgcGFnZSBhbmQgbWFpbnRhaW4gc3RhdGU8L2Rpdj48L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+ZXNjYXBlPC9zcGFuPiA6IGVzY2FwZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRN TDwvc3Bhbj4gZW50aXRpZXMgc3VjaCBhcyA8Y29kZT4mbHQ7PC9jb2RlPiwgPGNvZGU+Jmd0 OzwvY29kZT4gYW5kIDxjb2RlPiZhbXA7PC9jb2RlPiBmb3IgcGFnZSB2YWxpZGF0aW9uIHB1 cnBvc2VzLiBTZXQgdG8gPGNvZGU+ZXNjYXBlPSZxdW90OyZxdW90OzwvY29kZT4gdG8gdHVy biBpdCBvZmYuIERlZmF1bHQ6IDxjb2RlPmh0bWw8L2NvZGU+PC9saT4KCTwvdWw+CgoJPGgy IGlkPSJjYWxjbGFzcyI+VGFnOiA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxfY2xhc3MgLyZndDs8 L2NvZGU+PC9oMj4KCgk8cD5JbnNpZGUgeW91ciBjb250YWluZXIvZm9ybXMsIHVzZSB0aGlz IHRhZyB0byBhZGQgYSBsaXN0IG9mIGNsYXNzZXMgdG8gdGhlIGN1cnJlbnQgY2VsbC9ldmVu dC4gVmVyeSB1c2VmdWwgaWYgYnVpbGRpbmcgY2VsbHMgeW91cnNlbGYgYmVjYXVzZSBpbnNp ZGUgYSA8YSBocmVmPSIjaWZjYWwiPmNvbmRpdGlvbmFsPC9hPiB0YWcgeW91IGNvdWxkIGFk ZCBwYXJ0aWN1bGFyIGNsYXNzIG5hbWVzIGJhc2VkIG9uIHNvbWUgdmFsdWUgaW4gYSBjZWxs LjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0iYXR0c2NhbGNsYXNzIj5BdHRyaWJ1dGVz PC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5uYW1lPC9zcGFuPiA6IGEg Y29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3NuYW1lcyB0byBhZGQgdG8gdGhlIGN1cnJl bnQgY2VsbC9ldmVudC4gVGhlc2UgYXJlIDxzdHJvbmc+bm90PC9zdHJvbmc+IHN1YmplY3Qg dG8gYW55IDxjb2RlPmNsYXNzcHJlZml4ZXM8L2NvZGU+IHNvIHdpbGwgYWx3YXlzIGFwcGVh ciBleGFjdGx5IGFzIHlvdSB3cml0ZSB0aGVtPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJjYWxu b3ciPlRhZzogPGNvZGU+Jmx0O3R4cDpzbWRfY2FsX25vdyAvJmd0OzwvY29kZT48L2gyPgoK CTxwPlJldHVybiB0aGUgY3VycmVudCBkYXRlL3RpbWUsIGZvcm1hdHRlZCBob3dldmVyIHlv dSBwbGVhc2UuIFVzZWZ1bCBmb3IgZXh0cmFjdGluZyBwYXJ0cyBvZiB0aGUgY3VycmVudCBz eXN0ZW0gdGltZXN0YW1wIHRvIGNvbXBhcmUgdGhpbmdzIHZpYSBvdGhlciBjb25kaXRpb25h bCBwbHVnaW5zIG9yIHRoZSA8Y29kZT4mbHQ7dHhwOnNtZF9pZl9jYWwmZ3Q7PC9jb2RlPiB0 YWcuPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRzY2Fsbm93Ij5BdHRyaWJ1dGVz PC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5mb3JtYXQ8L3NwYW4+IDog dGhlIHdheSB5b3Ugd2FudCB0aGUgZGF0ZS90aW1lIHJlcHJlc2VudGVkLiBVc2UgYW55IHZh bGlkIDxhIGhyZWY9Imh0dHA6Ly91azIucGhwLm5ldC9zdHJmdGltZSI+c3RyZnRpbWU8L2E+ IHN0cmluZy4gRGVmYXVsdHMgdG8gdGhlIGRhdGUgZm9ybWF0IHlvdSBzZXQgaW4gQmFzaWMg UHJlZnMuIEZ1bGwgV2luZG93cyBzdXBwb3J0LCBldmVuIGZvciB0aG9zZSB2YWx1ZXMgd2hl cmUgc3RyZnRpbWUoKSBpbmRpY2F0ZXMgb3RoZXJ3aXNlPC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPm5vdzwvc3Bhbj4gOiBpZiB5b3UgZG9uJiM4MjE3O3Qgd2FudCB0aGUgdGlt ZSB0byBiZSAmIzgyMTY7bm93JiM4MjE3OyB5b3UgY2FuIHN0YXRlIHdoYXQgdGltZSAmIzgy MTY7bm93JiM4MjE3OyBpcyEgVXNlIGFueSBzdGFuZGFyZCBkYXRlL3RpbWUgZm9ybWF0LiAg RGVmYXVsdDogdGhlIHRpbWUgYXQgd2hpY2ggeW91IGNhbGwgdGhlIHRhZy48ZGl2IGNsYXNz PSJicmVhayI+WW91IG1heSBhbHNvIHVzZSB0aGUgY29kZXMgPGNvZGU+P2RheTwvY29kZT4s IDxjb2RlPj9tb250aDwvY29kZT4gb3IgPGNvZGU+P3llYXI8L2NvZGU+IGluIHlvdXIgdGlt ZSBzdHJpbmcgd2hpY2ggd2lsbCBkbyBvbmUgb2YgdHdvIHRoaW5nczoKCTx1bD4KCQk8bGk+ cmVwbGFjZSB0aGUgY29kZXMgd2l0aCB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bh bj4gcGFyYW1ldGVycyA8Y29kZT5kPTwvY29kZT4sIDxjb2RlPm09PC9jb2RlPiBvciA8Y29k ZT55PTwvY29kZT4sIGlmIHRoZXkgYXJlIGJlaW5nIHVzZWQ8L2xpPgoJCTxsaT51c2UgdGhl IGN1cnJlbnQgZGF5LCBtb250aCBvciB5ZWFyIChpLmUuIHRoZSBwYXJ0cyBvZiB0b2RheSYj ODIxNztzIGRhdGUpPGJyIC8+CjwvZGl2PjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5vZmZzZXQ8L3NwYW4+IDogYW4gb2Zmc2V0IGludG8gdGhlIGZ1dHVy ZSB0aGF0IHlvdSB3aXNoIHRvIGFwcGx5IHRvIDxjb2RlPm5vdzwvY29kZT4uIGUuZy4gPGNv ZGU+MiBtb250aHM8L2NvZGU+LiBTZWUgPGEgaHJlZj0iI2VnNiI+RXhhbXBsZSA2PC9hPiBm b3IgYSBwcmFjdGljYWwgYXBwbGljYXRpb24gb2YgdGhpcyBhdHRyaWJ1dGU8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+Z210PC9zcGFuPiA6IHJldHVybiBlaXRoZXIgbG9jYWwg dGltZSAoMCkgYWNjb3JkaW5nIHRvIHRoZSB0aW1lIHpvbmUgc2V0IGluIEJhc2ljIFByZWZz LCBvciA8c3BhbiBjbGFzcz0iY2FwcyI+R01UPC9zcGFuPiB0aW1lICgxKS4gRGVmYXVsdDog MDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5sYW5nPC9zcGFuPiA6IGFuIDxzcGFu IGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IGxhbmd1YWdlIGNvZGUgdGhhdCBmb3JtYXRzIHRp bWUgc3RyaW5ncyBzdWl0YWJsZSBmb3IgdGhlIHNwZWNpZmllZCBsYW5ndWFnZSAob3IgbG9j YWxlKSBhcyBkZWZpbmVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dp a2kvSVNPXzYzOSI+PHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gNjM5PC9hPi4gRGVm YXVsdDogdW5zZXQgKGkuZS4gdXNlIHRoZSB2YWx1ZSBhcyBzdGF0ZWQgaW4gPHNwYW4gY2xh c3M9ImNhcHMiPlRYUDwvc3Bhbj4gcHJlZnMpPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJhcnRl diI+VGFnOiA8Y29kZT4mbHQ7dHhwOnNtZF9hcnRpY2xlX2V2ZW50IC8mZ3Q7PC9jb2RlPjwv aDI+CgoJPHA+V2hlbiB5b3UgY3JlYXRlIGV2ZW50cywgdGhleSByZWFsbHkgb25seSBleGlz dCBvbmNlIGFzIGEgc2luZ2xlIGFydGljbGU7IHRoZSByZXBldGl0aW9uIGlzIGEgdHJpY2su IFRodXMgdGhlIGJ1aWx0LWluIGFydGljbGUgdGFncyBvbmx5IHNob3cgdGhlIHNpbmdsZSwg cmVhbCBhcnRpY2xlcy48L3A+CgoJPHA+VGhpcyB0YWcgJiM4MjEyOyBzaW1pbGFyIGluIGZ1 bmN0aW9uIHRvIDxjb2RlPiZsdDt0eHA6YXJ0aWNsZV9jdXN0b20gLyZndDs8L2NvZGU+ICYj ODIxMjsgYWxsb3dzIHlvdSB0byBzZWUgcmVjdXJyaW5nIGFydGljbGVzIGFzIGlmIHRoZXkg d2VyZSAmIzgyMTY7cmVhbCYjODIxNzsgYXJ0aWNsZXMgaW4gdGhlIGRhdGFiYXNlLiBJbnNp ZGUgdGhlIHRhZyYjODIxNztzIDxjb2RlPmZvcm08L2NvZGU+IG9yIGNvbnRhaW5lciB5b3Ug Y2FuIHVzZSBhbGwgZXhpc3RpbmcgYXJ0aWNsZSB0YWdzIHRvIGRpc3BsYXkgYW55IGluZm9y bWF0aW9uIHlvdSBsaWtlIGFib3V0IGVhY2ggJiM4MjE2O3ZpcnR1YWwmIzgyMTc7IGFydGlj bGUuPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRzYXJ0ZXYiPkF0dHJpYnV0ZXM8 L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnN0ZXBmaWVsZDwvc3Bhbj4g OiBzYW1lIGFzIHNtZF9jYWxlbmRhcjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5z a2lwZmllbGQ8L3NwYW4+IDogc2FtZSBhcyBzbWRfY2FsZW5kYXI8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+b21pdGZpZWxkPC9zcGFuPiA6IHNhbWUgYXMgc21kX2NhbGVuZGFy PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmV4dHJhZmllbGQ8L3NwYW4+IDogc2Ft ZSBhcyBzbWRfY2FsZW5kYXI8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZGF0ZWZp ZWxkczwvc3Bhbj4gOiBzYW1lIGFzIHNtZF9jYWxlbmRhcjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5hbGxzcGFubmVkPC9zcGFuPiA6IG5vcm1hbGx5LCBhbnkgZXZlbnQgdGhh dCBoYXMgYSBzdGFydCBkYXRlIGluIHRoZSBwYXN0IHdpbGwgYmUgb21pdHRlZCBmcm9tIHRo ZSBsaXN0LiBXaGVuIGRlYWxpbmcgd2l0aCBzcGFubmVkIGV2ZW50cywgeW91IG1heSB3aXNo IHRvIHNob3cgcmVtYWluaW5nIGRheXMgaW4gYSBCcm9hZHdheSBzaG93JiM4MjE3O3Mgc2No ZWR1bGUgZXZlbiB0aG91Z2ggdGhlIGV2ZW50IHN0YXJ0ZWQgc29tZSBtb250aHMgYWdvLiBT ZXQgPGNvZGU+YWxsc3Bhbm5lZD0mcXVvdDsxJnF1b3Q7PC9jb2RlPiB0byBkbyB0aGlzLiBE ZWZhdWx0OiAwPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnR5cGU8L3NwYW4+IDog dGhlIHR5cGVzIG9mIGV2ZW50IHRvIGRpc3BsYXkuIERlZmF1bHQ6IDxjb2RlPnN0YW5kYXJk LCByZWN1ciwgbXVsdGk8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNl Y3Rpb248L3NwYW4+IDogcmVzdHJpY3QgZXZlbnRzIHRvIGEgbGlzdCBvZiBzZWN0aW9ucy4g RGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2F0ZWdvcnk8 L3NwYW4+IDogcmVzdHJpY3QgZXZlbnRzIHRvIGEgbGlzdCBvZiBjYXRlZ29yaWVzLiBEZWZh dWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5hdXRob3I8L3NwYW4+ IDogcmVzdHJpY3QgZXZlbnRzIHRvIGEgbGlzdCBvZiBhdXRob3IgbG9naW4gbmFtZXMuIERl ZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnJlYWxuYW1lPC9z cGFuPiA6IHJlc3RyaWN0IGV2ZW50cyB0byBhIGxpc3Qgb2YgYXV0aG9yIFJlYWwgTmFtZXMg KG5vdGU6IG1heSBhZGQgb25lIGV4dHJhIHF1ZXJ5KS4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+aWQ8L3NwYW4+IDogcmVzdHJpY3QgZXZlbnRzIHRv IGEgbGlzdCBvZiBhcnRpY2xlIElEcy4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+c3RhdHVzPC9zcGFuPiA6IHJlc3RyaWN0IGV2ZW50cyB0byB0aGlz IGFydGljbGUgc3RhdHVzIGxpc3QuIERlZmF1bHQ6IGxpdmU8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+ZXhwaXJlZDwvc3Bhbj4gOiBkZWZpbml0aXZlbHkgaGlkZSAoMCkgb3Ig c2hvdyAoMSkgZXhwaXJlZCBldmVudHMuIExlYXZlIGJsYW5rIHRvIHVzZSB0aGUgPHNwYW4g Y2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gQWR2YW5jZWQgUHJlZmVyZW5jZSAmIzgyMTY7UHVi bGlzaCBleHBpcmVkIGFydGljbGVzJiM4MjE3OzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj50aW1lPC9zcGFuPiA6IG9ubHkgc2hvdyBldmVudHMgaW4gdGhpcyB0aW1lIGZyYW1l LiBDaG9vc2UgZnJvbSA8Y29kZT5hbnk8L2NvZGU+LCA8Y29kZT50b2RheTwvY29kZT4sIDxj b2RlPmZ1dHVyZTwvY29kZT4gb3IgPGNvZGU+cGFzdDwvY29kZT4uIERlZmF1bHQ6IGFueTwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5tb250aDwvc3Bhbj4gOiBvbmx5IHNob3cg ZXZlbnRzIHRoYXQgb2NjdXIgaW4gdGhlIGdpdmVuIDxzcGFuIGNsYXNzPSJjYXBzIj5ZWVlZ PC9zcGFuPi1tbS4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+ZnJvbTwvc3Bhbj4gOiBvbmx5IHNob3cgZXZlbnRzIGZyb20gdGhpcyBzdGFydCBkYXRl LiBDYW4gYmUgYW55IHZhbGlkIGRhdGUgZm9ybWF0LiBEZWZhdWx0OiB1bnNldCAoaS5lLiBh bGwgZGF0ZXMpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnRvPC9zcGFuPiA6IG9u bHkgc2hvdyBldmVudHMgdXAgdG8gdGhpcyBlbmQgZGF0ZS4gQ2FuIGJlIGFueSB2YWxpZCBk YXRlIGZvcm1hdC4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+c29ydDwvc3Bhbj4gOiBvcmRlciB0aGUgZXZlbnRzIGJ5IHRoaXMgY29sdW1uIChjYXNl LXNlbnNpdGl2ZSkuIFRoZSBtb3N0IHVzZWZ1bCB2YWx1ZSBpcyB0aGUgZGVmYXVsdDogPGNv ZGU+UG9zdGVkIGFzYzwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zm9y bTwvc3Bhbj4gOiBwYXNzIGVhY2ggbWF0Y2hpbmcgZXZlbnQgdG8gdGhlIGdpdmVuIDxzcGFu IGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGZvcm0uIE5vdGUgdGhhdCB1c2luZyB0aGUgY29u dGFpbmVyIG92ZXJyaWRlcyB0aGlzIGF0dHJpYnV0ZSwgYW5kIGlmIHlvdSBzcGVjaWZ5IG5l aXRoZXIgYSBmb3JtIG5vciBjb250YWluZXIsIHlvdSB3aWxsIHNlZSBhIGxpc3Qgb2YgYXJ0 aWNsZSBwb3N0ZWQgZGF0ZXMuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPnBhZ2luZzwvc3Bhbj4gOiB1bmxpa2UgYXJ0aWNsZV9jdXN0b20sIGV2ZW50 cyBmcm9tIHRoZSBzbWRfYXJ0aWNsZV9ldmVudCB0YWcgbWF5IGJlIHBhZ2VkIHVzaW5nIDxj b2RlPiZsdDt0eHA6b2xkZXIgLyZndDs8L2NvZGU+IGFuZCA8Y29kZT4mbHQ7dHhwOm5ld2Vy IC8mZ3Q7PC9jb2RlPi4gSWYgeW91IHdpc2ggdG8gc2hvdyBhbiBldmVudCBsaXN0IG9uIHRo ZSBzYW1lIHBhZ2UgYXMgYSBzdGFuZGFyZCBhcnRpY2xlIGxpc3QsIHRoZSBvbGRlci9uZXdl ciB0YWdzIHdpbGwgbmF2aWdhdGUgYm90aCBsaXN0cyBzaW11bHRhbmVvdXNseSBzbyB5b3Ug bWF5IG5lZWQgdG8gdHVybiBwYWdpbmcgb24gKDEpIG9yIG9mZiAoMCkuIERlZmF1bHQ6IDE8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+b2Zmc2V0PC9zcGFuPiA6IGJlZ2luIGRp c3BsYXlpbmcgZXZlbnRzIGZyb20gdGhpcyBwb3NpdGlvbiwgaW5zdGVhZCBvZiBmcm9tIHRo ZSBzdGFydCBvZiB0aGUgbGlzdCBvZiBldmVudHMuIERlZmF1bHQ6IDA8L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+bGltaXQ8L3NwYW4+IDogb25seSBzaG93IHRoaXMgbWFueSBl dmVudHMgbWF4aW11bSA8c3Ryb25nPnBlciBwYWdlPC9zdHJvbmc+LCBpLmUuIHRoZSBudW1i ZXIgb2YgZXZlbnRzIHRvIGRpc3BsYXksIHdoZXRoZXIgdGhleSBjb21lIGZyb20gb25lICYj ODIxNjtyZWFsJiM4MjE3OyBhcnRpY2xlIG9yIG1hbnkuIERlZmF1bHQ6IDEwPC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmV2ZW50bGltaXQ8L3NwYW4+IDogb25seSBzaG93IHRo aXMgbWFueSBldmVudHMgbWF4aW11bSwgPHN0cm9uZz5wZXIgZXZlbnQ8L3N0cm9uZz4uIFNv IGlmIHlvdSBoYXZlIGEgd2Vla2x5IHJlcGVhdGVkIGV2ZW50IHRoYXQgbGFzdHMgZm9yIGZv dXIgbW9udGhzIGFuZCB5b3Ugc2V0IDxjb2RlPmV2ZW50bGltaXQ9JnF1b3Q7NiZxdW90Ozwv Y29kZT4geW91IHdpbGwgb25seSBzZWUgYSBtYXhpbXVtIG9mIDYgZXZlbnRzIGZyb20gZXZl cnkgYXJ0aWNsZSBjb250YWluaW5nIHJlcGV0aXRpb24uIFRoZSByYW5nZSAoc3RhcnQgYW5k IGVuZCBkYXRlKSBpcyBkZXRlcm1pbmVkIGJ5IG90aGVyIHBsdWdpbiBhdHRyaWJ1dGVzLiBE ZWZhdWx0OiAxMDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5wYWdlYnk8L3NwYW4+ IDogZXNvdGVyaWMgcGFnaW5nIGZlYXR1cmUsIGlkZW50aWNhbCB0byA8Y29kZT4mbHQ7dHhw OmFydGljbGUgLyZndDs8L2NvZGU+LiBEZWZhdWx0OiBzYW1lIGFzIDxjb2RlPmxpbWl0PC9j b2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5wZ29ubHk8L3NwYW4+IDogc2V0 IHRvIDEgdG8gcGVyZm9ybSB0aGUgcGFnaW5nIGFjdGlvbiB3aXRob3V0IGRpc3BsYXlpbmcg YW55dGhpbmcuIFByb2JhYmx5IHVzZWxlc3MuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPndyYXB0YWc8L3NwYW4+IDogdGhlIChYKUhUTUwgdGFnIHdp dGhvdXQgYnJhY2tldHMgdG8gd3JhcCB0aGUgbGlzdCBpbi4gRGVmYXVsdDogdW5zZXQ8L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+YnJlYWs8L3NwYW4+IDogdGhlIChYKUhUTUwg dGFnIHRvIHNlcGFyYXRlIGVhY2ggaXRlbSB3aXRoLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jbGFzczwvc3Bhbj4gOiB0aGUgPHNwYW4gY2xhc3M9 ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgdG8gYXBwbHkgdG8gdGhlIHdyYXB0YWcuIERlZmF1 bHQ6IHVuc2V0PC9saT4KCTwvdWw+CgoJPHA+SXQgaXMgd29ydGggbm90aW5nIHRoYXQgdGhp cyB0YWcgZXhlY3V0ZXMgaW4gMy1waGFzZXM6PC9wPgoKCTxvbD4KCQk8bGk+UHJlLWZpbHRl cjogYWxsIGV2ZW50cyB0aGF0IG1hdGNoIDxjb2RlPnR5cGU8L2NvZGU+LCA8Y29kZT5jYXRl Z29yeTwvY29kZT4sIDxjb2RlPnNlY3Rpb248L2NvZGU+LCA8Y29kZT5hdXRob3I8L2NvZGU+ LCA8Y29kZT5zdGF0dXM8L2NvZGU+LCA8Y29kZT5pZDwvY29kZT4sIGFuZCA8Y29kZT5leHBp cmVkPC9jb2RlPiBhcmUgZXh0cmFjdGVkPC9saT4KCQk8bGk+VGltZS1maWx0ZXI6IGFueSAm IzgyMjA7dGltZS1iYXNlZCYjODIyMTsgYXR0cmlidXRlcyBhcmUgdGhlbiBhcHBsaWVkIHRv IHRoZSBhYm92ZSBsaXN0LiBBdCB0aGlzIHBvaW50LCBhbnkgPGNvZGU+ZXh0cmFmaWVsZDwv Y29kZT4sIDxjb2RlPnN0ZXBmaWVsZDwvY29kZT4sIDxjb2RlPm9taXRmaWVsZDwvY29kZT4s IG9yIDxjb2RlPnNraXBmaWVsZDwvY29kZT4gYXJlIGNhbGN1bGF0ZWQgdG8gZmluZCByZXBl YXRlZCBkYXRlcyAodXAgdG8gYXMgbWFueSBhcyA8Y29kZT5ldmVudGxpbWl0PC9jb2RlPiBh bGxvd3Mgb3IgdGhlIGNhbGN1bGF0aW9uIGV4Y2VlZHMgdGhlIGV2ZW50JiM4MjE3O3MgZXhw aXJ5IHRpbWUpLiBUaGUgYXR0cmlidXRlcyA8Y29kZT50aW1lPC9jb2RlPiwgPGNvZGU+bW9u dGg8L2NvZGU+LCA8Y29kZT5mcm9tPC9jb2RlPiwgYW5kIDxjb2RlPnRvPC9jb2RlPiBhcmUg dXNlZCB0byByZWZpbmUgdGhlIGZpbHRyYXRpb24gaGVyZTwvbGk+CgkJPGxpPk91dHB1dDog d2hhdGV2ZXIgdGhlIHByZXZpb3VzIHBoYXNlcyBoYXZlIGxlZnQgYmVoaW5kIGlzIHN1Ympl Y3QgdG8gYW55IDxjb2RlPnBhZ2luZzwvY29kZT4sIDxjb2RlPm9mZnNldDwvY29kZT4gYW5k IDxjb2RlPmxpbWl0PC9jb2RlPiB5b3UgbWF5IGhhdmUgc3BlY2lmaWVkLCB0aGVuIHdyYXBw ZWQgYW5kIGRpc3BsYXllZDwvbGk+Cgk8L29sPgoKCTxoMiBjbGFzcz0iZXhhbXBsZXMiPkV4 YW1wbGVzPC9oMj4KCgk8aDMgaWQ9ImVnMSI+RXhhbXBsZSAxOiBiYXNpYyBjYWxlbmRhcjwv aDM+CgoJPHA+WW91IGhhdmUgdGhlIGVudGlyZSBhcnNlbmFsIG9mIDxzcGFuIGNsYXNzPSJj YXBzIj5UWFA8L3NwYW4+IHRhZ3MgYXZhaWxhYmxlIHRvIHlvdSBpbiBhIGNhbGVuZGFyLiBU aHVzIHlvdSBjYW4gc2V0IHRoZSBhcnRpY2xlJiM4MjE3O3Mgc3RhcnQgYW5kIGVuZCBkYXRl cyB0byB0aGUgc2FtZSBkYXkgYW5kIHNldCB0aGUgc3RhcnQgYW5kIGVuZCB0aW1lcyB0byBp bmRpY2F0ZSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgZXZlbnQuIFlvdSBjYW4gdGhlbiB1 c2Ugc3RhbmRhcmQgPGNvZGU+Jmx0O3R4cDpwb3N0ZWQgLyZndDs8L2NvZGU+IG9yIDxjb2Rl PiZsdDt0eHA6ZXhwaXJlcyAvJmd0OzwvY29kZT4gdGFncyB3aXRoIHZhcmlvdXMgPGNvZGU+ Zm9ybWF0PC9jb2RlPiBzdHJpbmdzIHRvIHJlbmRlciB0aGUgZXZlbnQmIzgyMTc7cyBjcml0 ZXJpYS48L3A+CgoJPHA+U2ltaWxhcmx5IHlvdSBjYW4gdXNlIGFueSBvdGhlciA8c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB0YWdzIHRvIHNob3cgYXMgbXVjaCBvciBhcyBsaXR0 bGUgZGV0YWlsIGFzIHlvdSBsaWtlIGluIHRoZSBjYWxlbmRhciBjZWxsLjwvcD4KCjxwcmUg Y2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2NhbGVuZGFy IHNlY3Rpb249JnF1b3Q7ZXZlbnRzJnF1b3Q7Jmd0OwombHQ7ZGl2Jmd0OwogICBFdmVudDog Jmx0O3R4cDpwZXJtbGluayZndDsmbHQ7dHhwOnRpdGxlIC8mZ3Q7Jmx0Oy90eHA6cGVybWxp bmsmZ3Q7CiAgICZsdDticiAvJmd0OyZsdDt0eHA6ZXhjZXJwdCAvJmd0OwombHQ7L2RpdiZn dDsKJmx0O2RpdiBjbGFzcz0mcXVvdDtldnRpbWUmcXVvdDsmZ3Q7CiAgIFN0YXJ0OiAmbHQ7 dHhwOnBvc3RlZCBmb3JtYXQ9JnF1b3Q7JUg6JU0mcXVvdDsgLyZndDsKJmx0Oy9kaXYmZ3Q7 CiZsdDtkaXYgY2xhc3M9JnF1b3Q7ZXZ0aW1lJnF1b3Q7Jmd0OwogICBFbmQ6ICZsdDt0eHA6 ZXhwaXJlcyBmb3JtYXQ9JnF1b3Q7JUg6JU0mcXVvdDsgLyZndDsKJmx0Oy9kaXYmZ3Q7CiZs dDsvdHhwOnNtZF9jYWxlbmRhciZndDsKPC9jb2RlPjwvcHJlPgoKCTxoMyBpZD0iZWcyIj5F eGFtcGxlIDI6IGNvbmRpdGlvbmFsIGNhbGVuZGFyPC9oMz4KCgk8cD5Vc2luZyB0aGUgY29u ZGl0aW9uYWwgdGFnIHlvdSBjYW4gdGFrZSBhY3Rpb24gaWYgY2VydGFpbiBldmVudHMgY29u dGFpbiBwYXJ0aWN1bGFyIGZsYWdzLiBUaGlzIGV4YW1wbGUgYWxzbyBzaG93IGEgY29tcGxl dGVseSB1c2VsZXNzIG1hbm5lciBvZiBlbXBsb3lpbmcgPGNvZGU+Jmx0O3R4cDpzbWRfY2Fs X25vdyAvJmd0OzwvY29kZT4uPC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNz PSJibG9jayI+VGltZSBpczogJmx0O3R4cDpzbWRfY2FsX25vdyBmb3JtYXQ9JnF1b3Q7JVQm cXVvdDsgLyZndDsKJmx0O3R4cDpzbWRfY2FsZW5kYXIgZm9ybT0mcXVvdDtldmZvcm0mcXVv dDsKICAgICBzdGVwZmllbGQ9JnF1b3Q7Y3VzdG9tXzMmcXVvdDsgc2tpcGZpZWxkPSZxdW90 O2N1c3RvbV82JnF1b3Q7CiAgICAgc3BhbmZvcm09JnF1b3Q7bXVsdGlzJnF1b3Q7IC8mZ3Q7 CjwvY29kZT48L3ByZT4KCgk8cD5JbiBmb3JtIDxjb2RlPmV2Zm9ybTwvY29kZT46PC9wPgoK PHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfaWZf Y2FsIGZsYWc9JnF1b3Q7cmVjdXImcXVvdDsmZ3Q7CiAgJmx0O3R4cDpwZXJtbGluayZndDso UkVDVVIpJmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiZsdDt0eHA6ZWxzZSAvJmd0OwogICAmbHQ7 dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6dGl0bGUgLyZndDsmbHQ7L3R4cDpwZXJtbGluayZn dDsKICAgJmx0O3R4cDpzbWRfaWZfY2FsIGZsYWc9JnF1b3Q7bXVsdGlmaXJzdCZxdW90OyZn dDsKICAgICAgJmx0O3NwYW4gY2xhc3M9JnF1b3Q7cmlnaHQmcXVvdDsmZ3Q7JmFtcDtsYXF1 bzstLSZsdDsvc3BhbiZndDsKICAgJmx0Oy90eHA6c21kX2lmX2NhbCZndDsKICAgJmx0O3R4 cDpzbWRfaWZfY2FsIGZsYWc9JnF1b3Q7cmVjdXJmaXJzdCZxdW90OyZndDsKICAgICAgJmx0 O3NwYW4mZ3Q7T25lIG9mIG1hbnkuLi4mbHQ7L3NwYW4mZ3Q7CiAgICZsdDsvdHhwOnNtZF9p Zl9jYWwmZ3Q7CiZsdDsvdHhwOnNtZF9pZl9jYWwmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5B bmQgaW4gZm9ybSA8Y29kZT5tdWx0aXM8L2NvZGU+OjwvcD4KCjxwcmUgY2xhc3M9ImJsb2Nr Ij48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2lmX2NhbCBmbGFnPSZxdW90O211 bHRpLCBtdWx0aXByZXYmcXVvdDsmZ3Q7CiAgICZsdDt0eHA6cGVybWxpbmsmZ3Q7LS0mYW1w O3JhcXVvOy0tJmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiZsdDsvdHhwOnNtZF9pZl9jYWwmZ3Q7 CiZsdDt0eHA6c21kX2lmX2NhbCBmbGFnPSZxdW90O211bHRpbGFzdCZxdW90OyZndDsKICAg Jmx0O3R4cDpwZXJtbGluayZndDsKICAgICAgJmx0O3NwYW4gY2xhc3M9JnF1b3Q7bGVmdCZx dW90OyZndDstLSZhbXA7cmFxdW87Jmx0Oy9zcGFuJmd0OyBFTkQgJmx0O3R4cDp0aXRsZSAv Jmd0OwogICAmbHQ7L3R4cDpwZXJtbGluayZndDsKJmx0Oy90eHA6c21kX2lmX2NhbCZndDsK PC9jb2RlPjwvcHJlPgoKCTxwPk5vdGljZSB0aGF0IDxjb2RlPm11bHRpZmlyc3Q8L2NvZGU+ IGlzIHRlc3RlZCBpbnNpZGUgdGhlIHNhbWUgZm9ybSBhcyBzdGFuZGFyZCBldmVudHMuIFRo aXMgaXMgYmVjYXVzZSBvbmx5IDxlbT5jb250aW51YXRpb24gc3Bhbm5lZCBjZWxsczwvZW0+ IGFyZSBwYXNzZWQgdG8gdGhlIDxjb2RlPnNwYW5mb3JtPC9jb2RlPjsgdGhlIGZpcnN0IGV2 ZW50IG9mIGEgc3Bhbm5lZCBncm91cCBpcyBqdXN0IGxpa2UgYW55IHN0YW5kYXJkIGV2ZW50 LiBTaW1pbGFybHksIGlmIHlvdSBoYWQgYmVlbiB1c2luZyA8Y29kZT5yZWN1cmZvcm08L2Nv ZGU+IHRoZSBmaXJzdCBldmVudCBvZiB0aGUgcmVjdXJyaW5nIHNldCB3b3VsZCBiZSBwcm9j ZXNzZWQgaW4gdGhlIHVzdWFsIGZvcm0vY29udGFpbmVyIGFuZCBldmVyeSBzdWJzZXF1ZW50 IGV2ZW50IHdvdWxkIGJlIHBhc3NlZCB0byB0aGUgZGVkaWNhdGVkIGZvcm0uPC9wPgoKCTxo MyBpZD0iZWczIj5FeGFtcGxlIDM6IGNsYXNzZXM8L2gzPgoKCTxwPllvdSBjb3VsZCB1c2Ug dGhlIGNhbGVuZGFyIHRhZ3MgdG8gb3V0cHV0IHZhcmlvdXMgcGllY2VzIG9mIGZsYWcgaW5m b3JtYXRpb24gdG8gYnVpbGQgeW91ciBvd24gY2xhc3MgbmFtZXMuIFRoaXMgZXhhbXBsZSBh bHNvIGRlbW9uc3RyYXRlcyB0aGUgPGNvZGU+aHRtbDwvY29kZT4gYXR0cmlidXRlIG9mIDxj b2RlPiZsdDt0eHA6c21kX2NhbF9pbmZvIC8mZ3Q7PC9jb2RlPiB0byBidWlsZCB1cCBhIHF1 ZXJ5IHN0cmluZyB0aGF0IGlzIHBhc3NlZCBhbG9uZyB3aXRoIGFuIGV2ZW50JiM4MjE3O3Mg PGNvZGU+Y2F0ZWdvcnkxPC9jb2RlPiB3aGVuIGEgdmlzaXRvciBjbGlja3MgdGhlIGFuY2hv ci48L3A+CgoJPHA+VGhpcyBhbGxvd3MgeW91ciBzaXRlIHZpc2l0b3JzIHRvIGZpbHRlciBl dmVudHMgYnkgY2F0ZWdvcnkgd2hpbGUgcmV0YWluaW5nIHRoZSBhYmlsaXR5IHRvIHNob3cg dGhlIGNhbGVuZGFyIGZvciB0aGUgY3VycmVudCBtb250aC95ZWFyIGFuZCBzZWN0aW9uIHRo ZXkgYXJlIHZpZXdpbmcgaW5zdGVhZCBvZiBkcm9wcGluZyBiYWNrIHRvIHRoZSBjdXJyZW50 IG1vbnRoL3llYXIgbGlrZSBvdGhlciBjYWxlbmRhciBzeXN0ZW1zIG9mdGVuIGRvLjwvcD4K CjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2Nh bGVuZGFyIGlzb3dlZWtzPSZxdW90O1dFRUsjJnF1b3Q7CiAgICAgeWVhcndpZHRoPSZxdW90 OzAsMiZxdW90OyBzZWxlY3Q9JnF1b3Q7eWVhciwgbW9udGgmcXVvdDsKICAgICBzdGVwZmll bGQ9JnF1b3Q7Y3VzdG9tXzEmcXVvdDsgc2tpcGZpZWxkPSZxdW90O2N1c3RvbV8yJnF1b3Q7 CiAgICAgc2hvd3NraXBwZWQ9JnF1b3Q7MSZxdW90OyBleHBpcmVkPSZxdW90OzEmcXVvdDsm Z3Q7CiAgICZsdDtzcGFuIGNsYXNzPSZxdW90OyZsdDt0eHA6c21kX2NhbF9pbmZvIGpvaW49 JnF1b3Q7IGNhbF8mcXVvdDsgLyZndDsmcXVvdDsmZ3Q7CiAgICAgICZsdDt0eHA6cGVybWxp bmsmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvdHhwOnBlcm1saW5rJmd0OwogICAgICAm bHQ7YSBocmVmPSZxdW90Oz9jPSZsdDt0eHA6Y2F0ZWdvcnkxCiAgICAgICAgIC8mZ3Q7JmFt cDsmbHQ7dHhwOnNtZF9jYWxfaW5mbyB0eXBlPSZxdW90O3MsIHllYXIsCiAgICAgICAgIG1v bnRoLCBjYWxpZCZxdW90OyBodG1sPSZxdW90OzEmcXVvdDsgam9pbl9wcmVmaXg9JnF1b3Q7 JnF1b3Q7CiAgICAgICAgIC8mZ3Q7JnF1b3Q7Jmd0OyZsdDt0eHA6Y2F0ZWdvcnkxIHRpdGxl PSZxdW90OzEmcXVvdDsgLyZndDsmbHQ7L2EmZ3Q7CiAgICZsdDsvc3BhbiZndDsKJmx0Oy90 eHA6c21kX2NhbGVuZGFyJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+V2hhdCBpcyBhbHNvIHVz ZWZ1bCBhYm91dCB0aGUgPGNvZGU+Jmx0O3R4cDpzbWRfY2FsX2luZm8gLyZndDs8L2NvZGU+ IHRhZyBpcyB0aGF0IGlmIGEgcGFydGljdWxhciB2YWx1ZSBpcyBub3Qgc2V0IGl0IHdpbGwg PGVtPm5vdDwvZW0+IGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQuPC9wPgoKCTxoMyBpZD0i ZWc0Ij5FeGFtcGxlIDQ6IHVwY29taW5nIGV2ZW50czwvaDM+CgoJPHA+TGlzdCB0aGUgbmV4 dCA1IHVwY29taW5nICYjODIxMjsgcmVjdXJyaW5nICYjODIxMjsgZXZlbnRzLCBwbHVzIGFu eSBzdGFuZGFyZCBhbmQgc3Bhbm5lZCBldmVudHMsIGZvcm1hdHRpbmcgdGhlbSBhcyBhIGRl ZmluaXRpb24gbGlzdC48L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJs b2NrIj4mbHQ7aDImZ3Q7VXBjb21pbmcgRXZlbnRzJmx0Oy9oMiZndDsKJmx0O3R4cDpzbWRf YXJ0aWNsZV9ldmVudCBzdGVwZmllbGQ9JnF1b3Q7Y3VzdG9tXzEmcXVvdDsKICAgICB3cmFw dGFnPSZxdW90O2RsJnF1b3Q7IHRpbWU9JnF1b3Q7ZnV0dXJlJnF1b3Q7IGV2ZW50bGltaXQ9 JnF1b3Q7NSZxdW90OyZndDsKICAgJmx0O3R4cDppZl9kaWZmZXJlbnQmZ3Q7CiAgICAgJmx0 O2R0Jmd0OyZsdDt0eHA6cG9zdGVkIGZvcm1hdD0mcXVvdDslQiAlWSZxdW90OyAvJmd0OyZs dDsvZHQmZ3Q7CiAgICZsdDsvdHhwOmlmX2RpZmZlcmVudCZndDsKICAgJmx0O2RkJmd0Owog ICAgICAmbHQ7dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6dGl0bGUvJmd0OyZsdDsvdHhwOnBl cm1saW5rJmd0OwogICAgICAmbHQ7dHhwOnBvc3RlZCAvJmd0OwogICAmbHQ7L2RkJmd0Owom bHQ7L3R4cDpzbWRfYXJ0aWNsZV9ldmVudCZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPklmIHlv dSBhZGQgcGFnaW5hdGlvbiB0YWdzIHlvdSBjYW4gZmxpcCB0aHJvdWdoIGFsbCB0aGUgZXZl bnRzOyB0aGV5IHdpbGwgYmUgZGlzcGxheWVkIDEwIGF0IGEgdGltZSBvbiBlYWNoIHBhZ2Ug KGlmIHlvdSB3YW50IHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggcGFnZSB5b3UgYXJlIG9uIGFz IHlvdSBmbGlwIHRocm91Z2ggYSBjYWxlbmRhciB0aGF0IGlzIGluIGEgc2lkZWJhciwgYWRk IDxjb2RlPnBnPC9jb2RlPiB0byB0aGUgPGNvZGU+bWFpbnRhaW48L2NvZGU+IGF0dHJpYnV0 ZSBpbiB5b3VyIGNhbGVuZGFyKS48L3A+CgoJPHA+Tm90ZSB0aGUgaHlwZXJsaW5rZWQgdGl0 bGUgc2hvd24gaGVyZSB3aWxsIGRpc3BsYXkgdGhlICYjODIxNjtyZWFsJiM4MjE3OyBhcnRp Y2xlIHdoZW4gY2xpY2tlZC4gSWYgeW91IHdhbnRlZCB0byBhbGxvdyBwZW9wbGUgdG8gYm9v ayBhbiBldmVudCBvbiB5b3VyIGluZGl2aWR1YWwgYXJ0aWNsZSwgdHJ5IHRoaXM6PC9wPgoK PHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDppZl9pbmRp dmlkdWFsX2FydGljbGUmZ3Q7CiAmbHQ7dHhwOmFydGljbGUgbGltaXQ9JnF1b3Q7MSZxdW90 OyZndDsKICAmbHQ7aDMmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvaDMmZ3Q7CiAgJmx0 O3R4cDpib2R5IC8mZ3Q7CiAgJmx0O3AmZ3Q7UGxlYXNlIGNob29zZSBhIGRhdGUgdG8gYm9v azombHQ7L3AmZ3Q7CiAgJmx0O3NlbGVjdCZndDsKICAmbHQ7dHhwOnNtZF9hcnRpY2xlX2V2 ZW50IHN0ZXBmaWVsZD0mcXVvdDtjdXN0b21fMSZxdW90OwogICAgdHlwZT0mcXVvdDtyZWN1 ciZxdW90OyBpZD0mIzM5OyZsdDt0eHA6YXJ0aWNsZV9pZCAvJmd0OyYjMzk7Jmd0OwogICAg Jmx0O29wdGlvbgogICAgIHZhbHVlPSYjMzk7Jmx0O3R4cDpwb3N0ZWQgZm9ybWF0PSZxdW90 OyVHLSVtLSVkJnF1b3Q7LyZndDsmIzM5OyZndDsKICAgICAgJmx0O3R4cDpwb3N0ZWQgZm9y bWF0PSZxdW90OyVtICVkLCAkRyZxdW90OyAvJmd0OwogICAgJmx0Oy9vcHRpb24mZ3Q7CiAg Jmx0Oy90eHA6c21kX2FydGljbGVfZXZlbnQmZ3Q7CiAgJmx0Oy9zZWxlY3QmZ3Q7CiAmbHQ7 L3R4cDphcnRpY2xlJmd0OwombHQ7L3R4cDppZl9pbmRpdmlkdWFsX2FydGljbGUmZ3Q7Cjwv Y29kZT48L3ByZT4KCgk8cD5XaXRoIHNvbWUgY3VubmluZyB5b3UgY291bGQgZXZlbiBhZGQg dGhlICYjODIxNjt2aXJ0dWFsJiM4MjE3OyBkYXRlIHRoYXQgdGhleSBjaG9zZSBpbiB5b3Vy IG9yaWdpbmFsIHNtZF9hcnRpY2xlX2V2ZW50IGxpc3QgYW5kIHBhc3MgaXQgYXMgYSA8c3Bh biBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB2YXJpYWJsZSB0byB5b3VyIGluZGl2aWR1YWwg YXJ0aWNsZSB3aGVyZSB5b3UgY291bGQgcmVhZCB0aGUgdmFsdWUgYW5kIHByZS1zZWxlY3Qg dGhlIGRhdGUgZm9yIHRoZSB2aXN0b3IuPC9wPgoKCTxoMyBpZD0iZWc1Ij5FeGFtcGxlIDU6 IGlDYWwgc3luY2hyb25pc2F0aW9uPC9oMz4KCgk8cD5Ib3cgYWJvdXQgYmVpbmcgYWJsZSB0 byBvdXRwdXQgeW91ciBldmVudHMgaW4gaUNhbCBmb3JtYXQgc28gb3RoZXIgcGVvcGxlIGNh biBzeW5jIHRoZWlyIGNhbGVuZGFycyB0byB5b3Vycz8gUHV0IHRoaXMgaW4gYSBuZXcgUGFn ZSB0ZW1wbGF0ZSBpbiBpdHMgb3duIFNlY3Rpb246PC9wPgoKPHByZSBjbGFzcz0iYmxvY2si Pjxjb2RlIGNsYXNzPSJibG9jayI+QkVHSU46VkNBTEVOREFSClZFUlNJT046Mi4wClgtV1It Q0FMTkFNRTpHaWdzIENhbGVuZGFyClBST0RJRDotLy9BcHBsZSBDb21wdXRlciwgSW5jLy9p Q2FsIDEuNS8vRU4KWC1XUi1USU1FWk9ORTpFdXJvcGUvTG9uZG9uCiZsdDt0eHA6c21kX2Fy dGljbGVfZXZlbnQgZm9ybT0mcXVvdDtpY3NpdGVtJnF1b3Q7IHRpbWU9JnF1b3Q7YW55JnF1 b3Q7CnNlY3Rpb249JnF1b3Q7Z2lncyZxdW90OyBsaW1pdD0mcXVvdDsxMDAwJnF1b3Q7Jmd0 OwogQkVHSU46VkVWRU5UCiBEVFNUQVJUOiZsdDt0eHA6cG9zdGVkIGZvcm1hdD0mcXVvdDsl WSVtJWRUJUglaSVzJnF1b3Q7IC8mZ3Q7CiBEVEVORDombHQ7dHhwOmV4cGlyZXMgZm9ybWF0 PSZxdW90OyVZJW0lZFQlSCVpJXMmcXVvdDsgLyZndDsKIFNVTU1BUlk6Jmx0O3R4cDp0aXRs ZSAvJmd0OwogRU5EOlZFVkVOVAombHQ7L3R4cDpzbWRfYXJ0aWNsZV9ldmVudCZndDsKRU5E OlZDQUxFTkRBUgo8L2NvZGU+PC9wcmU+CgoJPHA+VGhhdCB3aWxsIG91dHB1dCBhbiBpQ2Fs LWZvcm1hdHRlZCBnaWcgbGlzdCAocmVwZWF0ZWQgb3Igb3RoZXJ3aXNlKS4gSWYgeW91IGdv dCBmcmVha3kgd2l0aCBpdCBhbmQgYWRkZWQgc29tZSBjb25kaXRpb25hbCBsb2dpYyBpbnNp ZGUgdGhlIHRlbXBsYXRlIHlvdSBjb3VsZCBldmVuIHJlYWQgaW4gPHNwYW4gY2xhc3M9ImNh cHMiPlVSTDwvc3Bhbj4gdmFyaWFibGVzIGFuZCBwbHVnIHRoZW0gaW4uIFRodXMgeW91IGNv dWxkIGxpbmsgdG8gaXQgZGlyZWN0bHkgb2ZmIHRoZSBjYWxlbmRhciBpdHNlbGYsIHBhc3Mg aW4gdGhlIHNlY3Rpb24sIGNhdGVnb3J5IG9yIGV2ZW50IGluZm8gYW5kIGhhdmUgYSBjdXN0 b21pc2VkIGlDYWwgc3RyZWFtIHB1bXBlZCBvdXQgb2YgVGV4dHBhdHRlcm4uPC9wPgoKCTxw PlRoYW5rcyB0byB3b29mIGZvciBicmluZ2luZyB0aGUgb3JpZ2luYWwgPGEgaHJlZj0iaHR0 cDovL2RlLW9ubGluZS5jby51ay8yMDA2LzA1LzA1L3RleHRwYXR0ZXJuLWFuZC1pY2FsIj5E YXZpZCBFbWVyeTwvYT4gYXJ0aWNsZSB0byBteSBhdHRlbnRpb24uPC9wPgoKCTxoMyBpZD0i ZWc2Ij5FeGFtcGxlIDY6IHJlZGVmaW5pbmcgbm93PC9oMz4KCgk8cD5Vc2luZyB0aGUgPGNv ZGU+bm93PC9jb2RlPiBhbmQgPGNvZGU+b2Zmc2V0PC9jb2RlPiBhdHRyaWJ1dGVzIG9mIDxj b2RlPiZsdDt0eHA6c21kX2NhbF9ub3cgLyZndDs8L2NvZGU+IHlvdSBjYW4gZWZmZWN0aXZl bHkgc2V0ICYjODIxNjtub3cmIzgyMTc7IHRvIGJlIGFueSB0aW1lIHlvdSBsaWtlIGFuZCBt YWtlIGNhbGN1bGF0aW9ucyBiYXNlZCBvbiBhIHBhcnRpY3VsYXIgZGF0ZS48L3A+CgoJPHA+ UGx1Z2dpbmcgdGhlIDxjb2RlPj9tb250aDwvY29kZT4gYW5kIDxjb2RlPj95ZWFyPC9jb2Rl PiBjb2RlcyBpbiBhbGxvd3MgeW91IHRvIG1ha2UgPGNvZGU+Jmx0O3R4cDpzbWRfYXJ0aWNs ZV9ldmVudCAvJmd0OzwvY29kZT4gdHJhY2sgdGhlIGNhbGVuZGFyLiBTbyB5b3UgY2FuIGF1 dG9tYXRpY2FsbHkgc2hvdyBvbmx5IHRoZSBldmVudHMgdGhhdCBvY2N1ciBpbiB0aGUgbW9u dGggdGhlIHZpc2l0b3IgaXMgYnJvd3NpbmcgdmlhIHRoZSBjYWxlbmRhcjo8L3A+Cgo8cHJl IGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9jYWxlbmRh ciBzdGVwZmllbGQ9JnF1b3Q7Y3VzdG9tXzEmcXVvdDsgLyZndDsKJmx0O2gyJmd0O0V2ZW50 cyB0aGlzIG1vbnRoJmx0Oy9oMiZndDsKJmx0O3R4cDpzbWRfYXJ0aWNsZV9ldmVudCBzdGVw ZmllbGQ9JnF1b3Q7Y3VzdG9tXzEmcXVvdDsKICAgICBmcm9tPSYjMzk7Jmx0O3R4cDpzbWRf Y2FsX25vdyBub3c9JnF1b3Q7MDEtP21vbnRoLT95ZWFyJnF1b3Q7IC8mZ3Q7JiMzOTsKICAg ICB0bz0mIzM5OyZsdDt0eHA6c21kX2NhbF9ub3cgbm93PSZxdW90Oz9tb250aC0/eWVhciZx dW90OwogICAgICAgIG9mZnNldD0mcXVvdDsxIG1vbnRoJnF1b3Q7IC8mZ3Q7JiMzOTsgdGlt ZT0mcXVvdDthbnkmcXVvdDsgd3JhcHRhZz0mcXVvdDt1bCZxdW90OyZndDsKJmx0O2xpJmd0 OyZsdDt0eHA6cGVybWxpbmsmZ3Q7Jmx0O2ImZ3Q7Jmx0O3R4cDp0aXRsZS8mZ3Q7Jmx0Oy9i Jmd0OyZsdDsvdHhwOnBlcm1saW5rJmd0OyZsdDsvbGkmZ3Q7CiZsdDsvdHhwOnNtZF9hcnRp Y2xlX2V2ZW50Jmd0Owo8L2NvZGU+PC9wcmU+Cgo8L2Rpdj4KPCEtLSAqKiogQkVHSU4gUExV R0lOIENTUyAqKiogLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxp bmUtaGVpZ2h0OjEuNSA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZv bnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tn cm91bmQtY29sb3I6ICNmMGU2OGM7IGNvbG9yOiMzMzM7IH0KI3NtZF9oZWxwIGNvZGUuYmxv Y2sgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGRpc3Bs YXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFkZGluZzoxMHB4OyB9CiNzbWRf aGVscCBoMSB7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0 ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4 IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBmb250OiAxN3B4IEdlb3JnaWEsIHNh bnMtc2VyaWY7IH0KI3NtZF9oZWxwIGgzIHsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5z LXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwOyB0ZXh0LWRl Y29yYXRpb246dW5kZXJsaW5lOyB9CiNzbWRfaGVscCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBB cmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAg MDsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQojc21kX2hlbHAgLmF0bm0geyBmb250 LXdlaWdodDpib2xkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJhY2tncm91bmQ6I2VlZTsgYm9y ZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFibGUgeyB3aWR0aDo5MCU7IHRl eHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJvdHRvbToxZW07IGJvcmRlci1jb2xsYXBzZTpj b2xsYXBzZTsgfQojc21kX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7IGJvcmRlcjoxcHggc29s aWQgIzk5OTsgcGFkZGluZzouNWVtOyB9CiNzbWRfaGVscCB1bCB7IGxpc3Qtc3R5bGUtdHlw ZTpzcXVhcmU7IH0KI3NtZF9oZWxwIC5pbXBvcnRhbnQgeyBjb2xvcjpyZWQ7IH0KI3NtZF9o ZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVweCAzMHB4OyB9CiNzbWRfaGVscCAuYnJlYWsg eyBtYXJnaW4tdG9wOjVweDsgfQo8L3N0eWxlPgo8IS0tICoqKiBFTkQgUExVR0lOIENTUyAq KiogLS0+CiI7czozOiJtZDUiO3M6MzI6Ijc3YWViM2I2ZjFmMTQ1MmEwNGQ0MGJkM2U5MmMx NzkwIjt9