# Name: smd_calendar v0.41 # Type: Client 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: # ..................................................................... YToxMDp7czo0OiJuYW1lIjtzOjEyOiJzbWRfY2FsZW5kYXIiO3M6NjoiYXV0aG9yIjtzOjEx OiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdz b24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuNDEiO3M6MTE6ImRlc2NyaXB0aW9uIjtz OjYyOiJDYWxlbmRhciAvIGV2ZW50IC8gc2NoZWR1bGUgc3lzdGVtIHdpdGggZXZlbnRzIGFz IFRYUCBhcnRpY2xlcyI7czo0OiJjb2RlIjtzOjYzMzMxOiIvLyBCYXNlZCBvbiBtZHBfY2Fs ZW5kYXIgLSB0aGFua3MgTWFyc2hhbGwhDQovL1RPRE86IEludmVzdGlnYXRlDQovKg0KJGQg PSBuZXcgRGF0ZVRpbWUoJzIwMDgtMTItMjIgMTI6NTInKTsNCmVjaG8gJGQtPmdldFRpbWV6 b25lKCktPmdldE5hbWUoKTsNCiovDQppZiggJGRhdGUgPSBncHMoJ2RhdGUnKSApIHsNCgkk X0dFVFsnbW9udGgnXSA9ICRkYXRlOw0KfQ0KZnVuY3Rpb24gc21kX2NhbGVuZGFyKCRhdHRz LCAkdGhpbmc9JycpIHsNCglnbG9iYWwgJHByZXRleHQsICR0aGlzYXJ0aWNsZSwgJHZhcmlh YmxlLCAkcHJlZnMsICRzbWRfY2FsX2ZsYWcsICRzbWRfZGF0ZSwgJHNtZF9jYWxpbmZvLCAk c21kX2NhbF91Y2xzOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3RpbWUnID0+ICdh bnknLA0KCQknc2l6ZScgPT4gJ2xhcmdlJywNCgkJJ2V4cGlyZWQnID0+ICcnLA0KCQknY2F0 ZWdvcnknID0+ICcnLA0KCQknc2VjdGlvbicgPT4gJycsDQoJCSdhdXRob3InID0+ICcnLA0K CQkncmVhbG5hbWUnID0+ICcnLA0KCQknc3RhdHVzJyA9PiAnbGl2ZScsDQoJCSdzaG93YWxs JyA9PiAnMCcsDQoJCSdzdGF0aWMnID0+ICcnLA0KCQknZm9ybScgPT4gJycsDQoJCSdzcGFu Zm9ybScgPT4gJ1NNRF9TQU1FJywNCgkJJ3JlY3VyZm9ybScgPT4gJ1NNRF9TQU1FJywNCgkJ J2NlbGxmb3JtJyA9PiAnJywNCgkJJ3N0ZXBmaWVsZCcgPT4gJycsDQoJCSdza2lwZmllbGQn ID0+ICcnLA0KCQknb21pdGZpZWxkJyA9PiAnJywNCgkJJ2V4dHJhZmllbGQnID0+ICcnLA0K CQknZXh0cmFzdHJpY3QnID0+ICcwJywNCgkJJ3Nob3dza2lwcGVkJyA9PiAnMCcsDQoJCSdz aG93c3Bhbm5lZCcgPT4gJzEnLA0KCQknaG9saWRheXMnID0+ICcnLA0KCQknaG9saWRheWZs YWdzJyA9PiAnc3RhbmRhcmQnLA0KCQknY2xhc3NsZXZlbHMnID0+ICdjZWxsLCBldmVudCcs DQoJCSdsaW5rcG9zdGVkJyA9PiAncmVjdXIsIG11bHRpLCBtdWx0aXByZXYsIG11bHRpbGFz dCcsDQoJCSdjbGFzc3ByZWZpeGVzJyA9PiAnc21kX2NhbF8sIHNtZF9jYWxfZXZfJywNCgkJ J2NsYXNzJyA9PiAnJywNCgkJJ3Jvd2NsYXNzJyA9PiAnJywNCgkJJ2NlbGxjbGFzcycgPT4g JycsDQoJCSdlbXB0eWNsYXNzJyA9PiAnZW1wdHknLA0KCQknaXNvd2Vla2NsYXNzJyA9PiAn d2VlaycsDQoJCSduYXZjbGFzcycgPT4gJ25hdnByZXYsIG5hdm5leHQnLA0KCQknbmF2YXJy b3cnID0+ICcmIzYwOywgJiM2MjsnLA0KCQknbmF2aWQnID0+ICcnLA0KCQknZXZlbnRjbGFz c2VzJyA9PiAnY2F0ZWdvcnknLA0KCQknZXZlbnR3cmFwdGFnJyA9PiAnc3BhbicsDQoJCSdz ZWxlY3QnID0+ICcnLA0KCQknc2VsZWN0YnRuJyA9PiAnJywNCgkJJ215Y2xhc3MnID0+ICcn LA0KCQknbXl3cmFwdGFnJyA9PiAnJywNCgkJJ2lkJyA9PiAnJywNCgkJJ3dlZWsnID0+ICcn LA0KCQknbW9udGgnID0+ICcnLA0KCQkneWVhcicgPT4gJycsDQoJCSdyZW1hcCcgPT4gJycs DQoJCSd5ZWFyd2lkdGgnID0+ICcwJywNCgkJJ2lzb3dlZWtzJyA9PiAnJywNCgkJJ2RheWZv cm1hdCcgPT4gJ0FCQlInLA0KCQknbW9udGhmb3JtYXQnID0+ICdGVUxMJywNCgkJJ2ZpcnN0 ZGF5JyA9PiAwLA0KCQknbWFpbnRhaW4nID0+ICdjYWxpZCcsDQoJCSduYW1ldmFsJyA9PiAn JywNCgkJJ2dtdCcgPT4gMCwNCgkJJ2xhbmcnID0+ICcnLA0KCQknZGVidWcnID0+IDAsDQoJ KSwgJGF0dHMpKTsNCg0KCSRmdXR1cmUgPSAoICR0aW1lICE9ICdwYXN0JyApID8gdHJ1ZSA6 IGZhbHNlOyAvLyBEZXRlcm1pbmUgaGVhZGluZyBzdHlsZQ0KCSRzdGF0dXMgPSAoJHN0YXR1 cykgPyAkc3RhdHVzIDogJ2xpdmUnOyAvLyBpbiBjYXNlIHN0YXR1cyBoYXMgYmVlbiBlbXB0 aWVkDQoJJGZpcnN0ZGF5ID0gKCRpc293ZWVrcyA9PSAnJykgPyAkZmlyc3RkYXkgOiAxOw0K CSRzcGFuZm9ybSA9ICgkc3BhbmZvcm0gPT0gJ1NNRF9TQU1FJykgPyAkZm9ybSA6ICRzcGFu Zm9ybTsNCgkkcmVjdXJmb3JtID0gKCRyZWN1cmZvcm0gPT0gJ1NNRF9TQU1FJykgPyAkZm9y bSA6ICRyZWN1cmZvcm07DQoJJGNlbGxmb3JtID0gKGVtcHR5KCRjZWxsZm9ybSkpID8gJycg OiBmZXRjaF9mb3JtKCRjZWxsZm9ybSk7DQoJJGZyb250cGFnZSA9ICgkc2VjdGlvbj09Jycg JiYgJHByZXRleHRbJ3MnXT09J2RlZmF1bHQnKSA/IHRydWUgOiBmYWxzZTsNCg0KCS8vIFNl dCB1cCB0aGUgY2xhc3MgcHJlZml4ZXMNCgkkY2xldnMgPSBkb19saXN0KCRjbGFzc2xldmVs cyk7DQoJJGNscyA9IGRvX2xpc3QoJGNsYXNzcHJlZml4ZXMpOw0KCSRjbGFzc3ByZWZpeCA9 ICRldmNsYXNzcHJlZml4ID0gJGNsc1swXTsNCglpZiAoY291bnQoJGNscykgPiAxKXsNCgkJ JGV2Y2xhc3NwcmVmaXggPSAkY2xzWzFdOw0KCX0NCg0KCS8vIFNldCB1cCB0aGUgbmF2IGNs YXNzKGVzKQ0KCSRtYWludGFpbiA9IGRvX2xpc3QoJG1haW50YWluKTsNCgkkbmF2YXJyb3cg PSBkb19saXN0KCRuYXZhcnJvdyk7DQoJJG5hdnBhcnIgPSAkbmF2YXJyb3dbMF07DQoJJG5h dm5hcnIgPSAoY291bnQoJG5hdmFycm93KSA+IDEpID8gJG5hdmFycm93WzFdIDogJG5hdmFy cm93WzBdOw0KCSRuYXZjbGFzcyA9IGRvX2xpc3QoJG5hdmNsYXNzKTsNCgkkbmF2cGNsYXNz ID0gJG5hdmNsYXNzWzBdOw0KCSRuYXZuY2xhc3MgPSAoY291bnQoJG5hdmNsYXNzKSA+IDEp ID8gJG5hdmNsYXNzWzFdIDogJG5hdmNsYXNzWzBdOw0KDQoJLy8gRmlsdGVycw0KCSRmb3B0 cyA9IGFycmF5KCk7DQoJJGNhdFNRTCA9ICRzZWNTUUwgPSAkYXV0aFNRTCA9ICRmcFNRTCA9 ICcnOw0KCWlmKCRjYXRlZ29yeSkgew0KCQkkZm9wdHNbJ2MnXSA9ICRjYXRlZ29yeTsNCgkJ JGNhdFNRTCA9IGRvUXVvdGUoam9pbigiJywnIiwgZG9TbGFzaChkb19saXN0KCRjYXRlZ29y eSkpKSk7DQoJCSRjYXRTUUwgPSAiIEFORCAoIENhdGVnb3J5MSBJTiAoIi4kY2F0U1FMLiIp IE9SIENhdGVnb3J5MiBJTiAoIi4kY2F0U1FMLiIpICkgIjsNCgl9DQoJaWYoJHNlY3Rpb24p IHsNCgkJJHNlY3MgPSBkb19saXN0KCRzZWN0aW9uKTsNCgkJJHNtZF9jYWxpbmZvWydzJ10g PSAkc2Vjc1swXTsNCgkJJHNlY1NRTCA9IGRvUXVvdGUoam9pbigiJywnIiwgZG9TbGFzaCgk c2VjcykpKTsNCgkJJHNlY1NRTCA9ICIgQU5EIFNlY3Rpb24gSU4gKCIuJHNlY1NRTC4iKSAi Ow0KCX0NCglpZigkcmVhbG5hbWUpIHsNCgkJJGF1dGhvcnMgPSBzYWZlX2NvbHVtbignbmFt ZScsICd0eHBfdXNlcnMnLCAnUmVhbE5hbWUgSU4gKCcuIGRvUXVvdGUoam9pbigiJywnIiwg ZG9BcnJheShkb19saXN0KCRyZWFsbmFtZSksICd1cmxkZWNvZGUnKSkpIC4nKScgKTsNCgkJ JGF1dGhvciA9IGpvaW4oJywnLCAkYXV0aG9ycyk7DQoJfQ0KCWlmKCRhdXRob3IpIHsNCgkJ JGZvcHRzWydhdXRob3InXSA9IGh0bWxlbnRpdGllcyhncHMoJ2F1dGhvcicpKTsNCgkJJGF1 dGhTUUwgPSBkb1F1b3RlKGpvaW4oIicsJyIsIGRvU2xhc2goZG9fbGlzdCgkYXV0aG9yKSkp KTsNCgkJJGF1dGhTUUwgPSAiIEFORCBBdXRob3JJRCBJTiAoIi4kYXV0aFNRTC4iKSAiOw0K CX0NCglpZiAoJGZyb250cGFnZSAmJiAhJHNob3dhbGwpIHsNCgkJJGZwU1FMID0gZmlsdGVy RnJvbnRQYWdlKCk7DQoJfQ0KCSRzbWRfY2FsaW5mb1snYXJ0aWQnXSA9ICR0aGlzYXJ0aWNs ZVsndGhpc2lkJ107DQoJJHNtZF9jYWxpbmZvWydhcnRpdGxlJ10gPSAkdGhpc2FydGljbGVb J3VybF90aXRsZSddOw0KCSRuYW1ldmFsID0gZG9fbGlzdCgkbmFtZXZhbCk7DQoJZm9yZWFj aCAoJG5hbWV2YWwgYXMgJG52KSB7DQoJCSRudiA9IGV4cGxvZGUoIj0iLCAkbnYpOw0KCQlp ZiAoJG52WzBdKSB7DQoJCQkkZm9wdHNbJG52WzBdXSA9ICgoaXNzZXQoJG52WzFdKSkgPyAk bnZbMV0gOiAnJyk7DQoJCX0NCgl9DQoJJHN0YXR1cyA9IGRvX2xpc3QoJHN0YXR1cyk7DQoJ JHN0YXRpID0gYXJyYXkoKTsNCglmb3JlYWNoICgkc3RhdHVzIGFzICRzdGF0KSB7DQoJCWlm IChlbXB0eSgkc3RhdCkpIHsNCgkJCWNvbnRpbnVlOw0KCQl9IGVsc2UgaWYgKGlzX251bWVy aWMoJHN0YXQpKSB7DQoJCQkkc3RhdGlbXSA9ICRzdGF0Ow0KCQl9IGVsc2Ugew0KCQkJJHN0 YXRpW10gPSBnZXRTdGF0dXNOdW0oJHN0YXQpOw0KCQl9DQoJfQ0KCSRzdGF0aSA9ICIgU3Rh dHVzIElOICgiLmpvaW4oJywnLCAkc3RhdGkpLiIpIjsNCg0KCSRleHBpcmVkID0gKCRleHBp cmVkKSA/ICRleHBpcmVkIDogJHByZWZzWydwdWJsaXNoX2V4cGlyZWRfYXJ0aWNsZXMnXTsN CgkkZXhwaXJlZCA9ICgoJGV4cGlyZWQpID8gJycgOiAnIEFORCAobm93KCkgPD0gRXhwaXJl cyBPUiBFeHBpcmVzID0gJy5OVUxMREFURVRJTUUuJyknKTsNCgkkZXZlbnRjbGFzc2VzID0g ZG9fbGlzdCgkZXZlbnRjbGFzc2VzKTsNCgkkaG9saWRheWZsYWdzID0gZG9fbGlzdCgkaG9s aWRheWZsYWdzKTsNCgkkbGlua3Bvc3RlZCA9IGRvX2xpc3QoJGxpbmtwb3N0ZWQpOw0KDQoJ Ly8gV29yayBvdXQgdGhlIGZpcnN0IGFuZCBsYXN0IHBvc3RzIHRvIGRldGVybWluZSB0aGUg eWVhciByYW5nZSAtIHByb2JhYmx5IGEgYmV0dGVyIHdheSBvZiBkb2luZyB0aGlzIHRoYW4g MyBxdWVyaWVzDQoJJGZpbHQgPSAkc3RhdGkgLiAoKCRjYXRlZ29yeSkgPyAkY2F0U1FMIDog JycpIC4gKCgkc2VjdGlvbikgPyAkc2VjU1FMIDogJycpIC4gKCgkYXV0aG9yKSA/ICRhdXRo U1FMIDogJycpIC4gJGZwU1FMOw0KCSRlYXJsaWVzdCA9IHNhZmVfZmllbGQoJ3VuaXhfdGlt ZXN0YW1wKFBvc3RlZCkgQVMgdVBvc3RlZCcsICd0ZXh0cGF0dGVybicsICRmaWx0IC4nIE9S REVSIEJZIFBvc3RlZCBBU0MgTElNSVQgMCwgMScsICRkZWJ1Zyk7DQoJJGxwID0gc2FmZV9m aWVsZCgndW5peF90aW1lc3RhbXAoUG9zdGVkKSBBUyB1UG9zdGVkJywgJ3RleHRwYXR0ZXJu JywgJGZpbHQgLicgT1JERVIgQlkgUG9zdGVkIERFU0MgTElNSVQgMCwgMScsICRkZWJ1Zyk7 DQoJJGxtID0gc2FmZV9maWVsZCgndW5peF90aW1lc3RhbXAoTGFzdE1vZCkgQVMgdUxhc3RN b2QnLCAndGV4dHBhdHRlcm4nLCAkZmlsdCAuJyBPUkRFUiBCWSBMYXN0TW9kIERFU0MgTElN SVQgMCwgMScsICRkZWJ1Zyk7DQoJJGxhdGVzdCA9ICgkdGltZT09InBhc3QiKSA/IHRpbWUo KSA6ICgoJGxwID4gJGxtKSA/ICRscCA6ICRsbSk7DQoNCgkkeWVhcndpZHRoID0gZG9fbGlz dCgkeWVhcndpZHRoKTsNCgkkeWVhcndpZHRoWzBdID0gKGVtcHR5KCR5ZWFyd2lkdGhbMF0p KSA/IDAgOiAkeWVhcndpZHRoWzBdOw0KCWlmIChjb3VudCgkeWVhcndpZHRoKSA9PSAxKSB7 DQoJCSR5ZWFyd2lkdGhbMV0gPSAkeWVhcndpZHRoWzBdOw0KCX0NCgkkdXNlbm93ID0gYXJy YXkoZmFsc2UsZmFsc2UpOw0KCWZvcmVhY2ggKCR5ZWFyd2lkdGggYXMgJHlyaWR4ID0+ICR5 cml0ZW0pIHsNCgkJaWYgKHN0cnBvcygkeXJpdGVtLCJjIikgIT09IGZhbHNlKSB7DQoJCQkk eWVhcndpZHRoWyR5cmlkeF0gPSBpbnR2YWwoJHlyaXRlbSk7DQoJCQkkdXNlbm93WyR5cmlk eF0gPSB0cnVlOw0KCQl9DQoJfQ0KDQoJLy8gUmVtYXAgdy9tL3kgdG8gb3RoZXIgdmFycyBp ZiByZXF1aXJlZA0KCSRyZW1hcCA9IGRvX2xpc3QoJHJlbWFwKTsNCgkkZG1hcCA9IGFycmF5 KCJ5IiA9PiAieSIsICJtIiA9PiAibSIsICJ3IiA9PiAidyIpOw0KCWZvcmVhY2ggKCRyZW1h cCBhcyAkZHBhaXIpIHsNCgkJJGRwYWlyID0gZG9fbGlzdCgkZHBhaXIsICc6Jyk7DQoJCSRk bWFwWyRkcGFpclswXV0gPSAoaXNzZXQoJGRwYWlyWzFdKSkgPyAkZHBhaXJbMV0gOiAkZHBh aXJbMF07DQoJfQ0KCSRlYXJsaWVzdCA9IGRhdGUoIlkiLCBzdHJ0b3RpbWUoIi0iLiR5ZWFy d2lkdGhbMF0uIiB5ZWFyIiwgKCAoZW1wdHkoJGVhcmxpZXN0KSB8fCAkdXNlbm93WzBdPT10 cnVlKSA/IHRpbWUoKSA6ICRlYXJsaWVzdCkgKSApOw0KCSRsYXRlc3QgPSBkYXRlKCJZIiwg c3RydG90aW1lKCIrIi4keWVhcndpZHRoWzFdLiIgeWVhciIsICggKGVtcHR5KCRsYXRlc3Qp IHx8ICR1c2Vub3dbMV09PXRydWUpID8gdGltZSgpIDogJGxhdGVzdCkgKSApOw0KDQoJLy8g Q2hlY2sgdGhlIFVSTCBmb3IgY3VycmVudCBkYXRlIGFuZCBjYWxlbmRhciB0YXJnZXQgaW5m bw0KCSRpbmNvbWluZ19jYWxpZCA9IGdwcygnY2FsaWQnKTsNCgkkaW5jb21pbmdfeWVhciA9 IChncHMoJGRtYXBbInkiXSkgYW5kIGlzX251bWVyaWMoZ3BzKCRkbWFwWyJ5Il0pKSkgPyAo aW50KWdwcygkZG1hcFsieSJdKSA6ICcnOw0KCSRpbmNvbWluZ19tb250aCA9IChncHMoJGRt YXBbIm0iXSkgYW5kIGlzX251bWVyaWMoZ3BzKCRkbWFwWyJtIl0pKSkgPyAoaW50KWdwcygk ZG1hcFsibSJdKSA6ICcnOw0KCSRpbmNvbWluZ193ZWVrID0gKGdwcygkZG1hcFsidyJdKSBh bmQgaXNfbnVtZXJpYyhncHMoJGRtYXBbInciXSkpKSA/IChpbnQpZ3BzKCRkbWFwWyJ3Il0p IDogJyc7DQoNCglpZigkc3RhdGljKSB7IC8vIGlmIHdlJ3JlIHN0YXRpYyB3L28gYW55IHN1 cHBsaWVkIHZhcnMsIHVzZSB0aGUgY3VycmVudCBkYXRlDQoJCWlmKCEkeWVhcikgeyAkeWVh ciA9IHNhZmVfc3RyZnRpbWUoJyVZJyk7IH0NCgkJaWYoISRtb250aCkgeyAkbW9udGggPSBz YWZlX3N0cmZ0aW1lKCclbScpOyB9DQoJfSBlbHNlIHsgLy8gb3RoZXJ3aXNlIHVzZSBjdXJy ZW50IGRhdGUgb25seSBpZiB0aGVyZSdzIG5vdGhpbmcgZWxzZQ0KCQlpZiggJGlkID09ICRp bmNvbWluZ19jYWxpZCApIHsgLy8gdXNlIGluY29taW5nDQoJCQkkeWVhciA9ICgkaW5jb21p bmdfeWVhcikgPyAkaW5jb21pbmdfeWVhciA6ICgoJHllYXIpID8gJHllYXIgOiBzYWZlX3N0 cmZ0aW1lKCclWScpKTsNCgkJCSRtb250aCA9ICgkaW5jb21pbmdfbW9udGgpID8gJGluY29t aW5nX21vbnRoIDogKCgkbW9udGgpID8gJG1vbnRoIDogc2FmZV9zdHJmdGltZSgnJW0nKSk7 DQoJCQkvLyBJZiB3ZWVrIGlzIHVzZWQsIGFkanVzdCBtb250aCBzbyBpdCBlbmNvbXBhc3Nl cyB0aGUgZ2l2ZW4gd2Vlaw0KCQkJJHdlZWsgPSAkaW5jb21pbmdfd2VlazsNCgkJCWlmICgk d2Vlaykgew0KCQkJCSRtb250aCA9IHNhZmVfc3RyZnRpbWUoIiVtIiwgc3RydG90aW1lKCR5 ZWFyLiJXIi5zdHJfcGFkKCR3ZWVrLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkpKTsgLy8gR2V0 IHRoZSBtb250aCBmcm9tIHRoZSB3ZWVrDQoJCQl9DQoJCX0gZWxzZSB7IC8vIHVzZSBjdXJy ZW50DQoJCQlpZighJHllYXIpIHsgJHllYXIgPSBzYWZlX3N0cmZ0aW1lKCclWScpOyB9DQoJ CQlpZighJG1vbnRoKSB7ICRtb250aCA9IHNhZmVfc3RyZnRpbWUoJyVtJyk7IH0NCgkJCWlm KCR3ZWVrKSB7ICRtb250aCA9IHNhZmVfc3RyZnRpbWUoIiVtIiwgc3RydG90aW1lKCR5ZWFy LiJXIi5zdHJfcGFkKCR3ZWVrLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkpKTsgfQ0KCQl9DQoJ fQ0KCSRzbWRfY2FsaW5mb1snaWQnXSA9ICgkaW5jb21pbmdfY2FsaWQpID8gJGluY29taW5n X2NhbGlkIDogJGlkOw0KCSRzbWRfZGF0ZVsneSddID0gJHllYXI7ICRzbWRfZGF0ZVsnbSdd ID0gJG1vbnRoOyAvLyAkd2Vlay9kYXkvaXNveWVhciBhcmUgc2V0IHBlciBldmVudCBsYXRl cg0KDQoJLy8gVGhlIHRpbWVzIGluIHRoZSBEQiBhcmUgc3RvcmVkIHVzaW5nIHRoZSBzZXJ2 ZXIncyBsb2NhbCB0aW1lLCBzbyB3ZSBkb24ndA0KCS8vIHdhbnQgdG8gYWRqdXN0IGFueXRo aW5nIChzaW5jZSBta3RpbWUgdXNlcyB0aGUgc2VydmVyJ3MgbG9jYWwgdGltZSkuDQoJLy9U T0RPOiBXb3JyeSBhYm91dCBnbXQgLyBkc3QNCgkkdHNfZmlyc3QgPSBta3RpbWUoMCwgMCwg MCwgJG1vbnRoLCAxLCAkeWVhcik7DQoJJHRzX2xhc3QgPSBta3RpbWUoMjMsIDU5LCA1OSwg JG1vbnRoLCBkYXRlKCd0JywkdHNfZmlyc3QpLCAkeWVhcik7DQoNCgkkZXh0cmFzcWwgPSAk Y2F0U1FMIC4gJHNlY1NRTCAuICRhdXRoU1FMIC4gJGZwU1FMOw0KCXN3aXRjaCgkdGltZSkg ew0KCQljYXNlICJhbnkiIDogYnJlYWs7DQoJCWNhc2UgImZ1dHVyZSIgOiAkZXh0cmFzcWwg Lj0gIiBBTkQgUG9zdGVkID4gQ1VSREFURSgpIjsgYnJlYWs7DQoJCWRlZmF1bHQgOiAkZXh0 cmFzcWwgLj0gIiBBTkQgUG9zdGVkIDwgQ1VSREFURSgpIjsgYnJlYWs7IC8vIFRoZSBwYXN0 DQoJfQ0KDQoJLy8gSG9saWRheXMgYXJlIGdsb2JhbCAnZXhjbHVzaW9ucycsIGVpdGhlciBk ZWZpbmVkIGRpcmVjdGx5IG9yIGluIGEgPHR4cDp2YXJpYWJsZSAvPg0KCSRob2xpZGF5cyA9 IGRvX2xpc3QoJGhvbGlkYXlzKTsNCgkkdHhwaG9scyA9IGRvX2xpc3QoJGhvbGlkYXlzWzBd LCAiOiIpOw0KCWlmICgkdHhwaG9sc1swXSA9PSAidHhwdmFyIikgew0KCQkkaG9saWRheXMg PSBkb19saXN0KCR2YXJpYWJsZVskdHhwaG9sc1sxXV0pOw0KCX0NCgkvLyBGb3JjZSBlYWNo IGhvbGlkYXkgdG8gYSBrbm93biBmb3JtYXQuIEhvbGlkYXlzIHdpdGhvdXQgeWVhcnMgdXNl IGN1cnJlbnQgeWVhcg0KCWZvcmVhY2ggKCRob2xpZGF5cyBhcyAka2V5ID0+ICR2YWwpIHsN CgkJaWYgKGVtcHR5KCR2YWwpKSBjb250aW51ZTsNCgkJJG51bXBhcnRzID0gcHJlZ19tYXRj aCgnL14oW1xkXHddKykuPyhbXGRcd10rKS4/KFtcZFx3XSspPyQvJywgJHZhbCwgJHBhcnRz KTsNCg0KCQlpZiAoJG51bXBhcnRzKSB7DQoJCQlpZiAoY291bnQoJHBhcnRzKSA9PSAzKSB7 DQoJCQkJJHBhcnRzWzNdID0gJHllYXI7DQogICAgICAgICB9DQoJCQkkdmFsID0gc3RyX3Bh ZCgkcGFydHNbMV0sIDIsICcwJywgU1RSX1BBRF9MRUZUKS4nLScuc3RyX3BhZCgkcGFydHNb Ml0sIDIsICcwJywgU1RSX1BBRF9MRUZUKS4nLScuJHBhcnRzWzNdOw0KCQl9DQoJCSRob2xp ZGF5c1ska2V5XSA9IGRhdGUoImQtTS1ZIiwgc3RydG90aW1lKCR2YWwpKTsNCgl9DQoNCglp ZiAoJGRlYnVnID4gMCAmJiAhZW1wdHkoJGhvbGlkYXlzKSAmJiAkaG9saWRheXNbMF0gIT0g JycpIHsNCgkJZWNobyAiKysgSE9MSURBWVMgKysgIjsNCgkJZG1wKCRob2xpZGF5cyk7DQoJ fQ0KDQoJLy8gR2V0IGFsbCBtYXRjaGluZyBhcnRpY2xlcyBpbiAoYW5kIGJlZm9yZSkgdGhp cyBtb250aA0KCSRldmVudHMgPSBhcnJheSgpOw0KCSRzcWwyID0gJHN0YXRpIC4gIiBIQVZJ TkcgdVBvc3RlZCA8PSAiLiR0c19sYXN0IC4gJGV4cGlyZWQgLiAkZXh0cmFzcWwgLiIgT1JE RVIgQlkgUG9zdGVkIEFTQyI7DQoJJGdyYWJDb2xzID0gJyosIHVuaXhfdGltZXN0YW1wKFBv c3RlZCkgYXMgdVBvc3RlZCwgdW5peF90aW1lc3RhbXAoTGFzdE1vZCkgYXMgdUxhc3RNb2Qs IHVuaXhfdGltZXN0YW1wKEV4cGlyZXMpIGFzIHVFeHBpcmVzJzsNCgkkZXZsaXN0ID0gc2Fm ZV9yb3dzKCRncmFiQ29scywgJ3RleHRwYXR0ZXJuJywgJHNxbDIsICRkZWJ1Zyk7DQoJYXJ0 aWNsZV9wdXNoKCk7DQoNCgkvLyBJZiBhbnkgZXZlbnRzIHJlY3VyIGFuZCBmYWxsIHdpdGhp biB0aGUgY3VycmVudCBtb250aCwgYWRkIHRob3NlIGFzIHdlbGwNCgkvLyBJZiBhbnkgZGF0 ZXMgYXJlIHRvIGJlIGV4Y2x1ZGVkLCB0aGUgZW50cnkgaXMgc2tpcHBlZCBVTkxFU1Mgc2hv d3NraXBwZWQgaW5kaWNhdGVzIG90aGVyd2lzZQ0KCWZvcmVhY2ggKCRldmxpc3QgYXMgJHJv dykgew0KCQkkaWR4ID0gMDsgLy8gSW4gY2FzZSB0aGUgMXN0IGRheSBvZiB0aGUgbW9udGgg aXMgYSBjb250aW51YXRpb24gb2YgYW4gZXZlbnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBwcmV2 aW91cyBtb250aA0KCQkkc3RhcnQgPSAkcm93Wyd1UG9zdGVkJ107DQoJCSRzdGFydF9kYXRl ID0gZGF0ZSgiWS1tLWQiLCAkc3RhcnQpOyAvLyBGb3IgcmVjdXJyaW5nL3NwYW5uZWQgZXZl bnRzIG9uIGEgbWluaWNhbCwgdGhpcyBpcyB0aGUgZXZlbnQgdGhlIGNlbGwgbGlua3MgdG8N CgkJJHJlYWxfZW5kID0gJHJvd1sndUV4cGlyZXMnXTsNCgkJJGVuZCA9ICgkcmVhbF9lbmQg IT0gMCAmJiAkcmVhbF9lbmQgPCAkdHNfbGFzdCkgPyAkcmVhbF9lbmQgOiAkdHNfbGFzdDsN CgkJJHJlYWxfZGlmZiA9ICgkcmVhbF9lbmQ9PTApID8gMCA6ICRyZWFsX2VuZCAtICRzdGFy dDsNCgkJJGZha2VfZGlmZiA9IHN0cnRvdGltZShkYXRlKCJZLU0tZCIsICRyZWFsX2VuZCkg LiAiIDIzOjU5OjU5Iik7DQoJCSRkaWZmID0gKCRyZWFsX2VuZD09MCkgPyAwIDogJGZha2Vf ZGlmZiAtICRzdGFydDsNCgkJJHNtZF9jYWxfZmxhZyA9ICRzbWRfY2FsX3VjbHMgPSBhcnJh eSgpOw0KDQoJCWlmICgkZGVidWcgPiAxKSB7DQoJCQllY2hvICcrKyBFVkVOVCBTVEFSVCAv LyBFTkQgLy8gUkVBTCBFTkQgKysnOw0KCQkJZG1wKCRyb3dbJ1RpdGxlJ10pOw0KCQkJZG1w KGRhdGUoJ2QtTS1ZIEg6aTpzJywgJHN0YXJ0KSAuJyAvLyAnLiBkYXRlKCdkLU0tWSBIOmk6 cycsICRlbmQpIC4nIC8vICcuIGRhdGUoJ2QtTS1ZIEg6aTpzJywgJHJlYWxfZW5kKSk7DQoJ CQlpZiAoJGRlYnVnID4gMikgew0KCQkJCWRtcCgkcm93KTsNCgkJCX0NCgkJfQ0KDQoJCSRt dWx0aSA9ICgkcm93Wyd1RXhwaXJlcyddID4gJHJvd1sndVBvc3RlZCddICYmICRyb3dbJ3VF eHBpcmVzJ10gPiAkdHNfZmlyc3QgJiYgKGRhdGUoImQtbS1ZIiwgJHJvd1sndUV4cGlyZXMn XSkgIT0gZGF0ZSgiZC1tLVkiLCAkcm93Wyd1UG9zdGVkJ10pKSkgPyB0cnVlIDogZmFsc2U7 DQoJCSRyZWN1ciA9IChlbXB0eSgkcm93WyRzdGVwZmllbGRdKSkgPyBmYWxzZSA6IHRydWU7 DQoJCSRob2xfaGl0ID0gaW5fYXJyYXkoZGF0ZSgiZC1NLVkiLCAkc3RhcnQpLCAkaG9saWRh eXMpOw0KCQkkZXZjbGFzc2VzID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAoJGV2ZW50Y2xhc3Nl cyBhcyAkZXZjbHMpIHsNCgkJCXN3aXRjaCAoJGV2Y2xzKSB7DQoJCQkJY2FzZSAiIjoNCgkJ CQkJYnJlYWs7DQoJCQkJY2FzZSAiZ2NhdCI6DQoJCQkJCWlmIChpc3NldCgkcHJldGV4dFsn YyddKSAmJiAhZW1wdHkoJHByZXRleHRbJ2MnXSkpIHsNCgkJCQkJCSRldmNsYXNzZXNbXSA9 ICRldmNsYXNzcHJlZml4LiRwcmV0ZXh0WydjJ107DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJ CQkJY2FzZSAiY2F0ZWdvcnkiOg0KCQkJCQlpZiAoaXNzZXQoJHJvd1snQ2F0ZWdvcnkxJ10p ICYmICFlbXB0eSgkcm93WydDYXRlZ29yeTEnXSkpIHsNCgkJCQkJCSRldmNsYXNzZXNbXSA9 ICRldmNsYXNzcHJlZml4LiRyb3dbJ0NhdGVnb3J5MSddOw0KCQkJCQl9DQoJCQkJCWlmIChp c3NldCgkcm93WydDYXRlZ29yeTInXSkgJiYgIWVtcHR5KCRyb3dbJ0NhdGVnb3J5MiddKSkg ew0KCQkJCQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y2xhc3NwcmVmaXguJHJvd1snQ2F0ZWdvcnky J107DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAic2VjdGlvbiI6DQoJCQkJCWlm IChpc3NldCgkcHJldGV4dFsncyddKSAmJiAhZW1wdHkoJHByZXRleHRbJ3MnXSkpIHsNCgkJ CQkJCSRldmNsYXNzZXNbXSA9ICRldmNsYXNzcHJlZml4LiRwcmV0ZXh0WydzJ107DQoJCQkJ CX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiYXV0aG9yIjoNCgkJCQkJaWYgKGlzc2V0KCRw cmV0ZXh0WydhdXRob3InXSkgJiYgIWVtcHR5KCRwcmV0ZXh0WydhdXRob3InXSkpIHsNCgkJ CQkJCSRldmNsYXNzZXNbXSA9ICRldmNsYXNzcHJlZml4LiRwcmV0ZXh0WydhdXRob3InXTsN CgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQlkZWZhdWx0Og0KCQkJCQlpZiAoaXNzZXQoJHJv d1skZXZjbHNdKSAmJiAhZW1wdHkoJHJvd1skZXZjbHNdKSkgew0KCQkJCQkJJGV2Y2xhc3Nl c1tdID0gJGV2Y2xhc3NwcmVmaXguJHJvd1skZXZjbHNdOw0KCQkJCQl9DQoJCQkJCWJyZWFr Ow0KCQkJfQ0KCQl9DQoJCSRldmNsYXNzZXMgPSAoJGV2Y2xhc3NlcykgPyAnICcuIGpvaW4o JyAnLCAkZXZjbGFzc2VzKSA6ICcnOw0KCQkkaWdub3JlID0gJG9taXQgPSAkY2ZsYWcgPSBh cnJheSgpOw0KDQoJCWlmICgkZGVidWcgPiAxICYmICRldmNsYXNzZXMpIHsNCgkJCWVjaG8g JysrIEVWRU5UIENMQVNTRVMgKysnOw0KCQkJZG1wKCRldmNsYXNzZXMpOw0KCQl9DQoNCgkJ Ly8gRXZlbnRzIHRoYXQgc3RhcnQgb3IgYXJlIGFkZGVkIHRoaXMgbW9udGgNCgkJaWYgKCRz dGFydCA8ICRlbmQgJiYgJHN0YXJ0ID4gJHRzX2ZpcnN0KSB7DQoJCQlwb3B1bGF0ZUFydGlj bGVEYXRhKCRyb3cpOw0KCQkJLy8gYSBzdGFuZGFyZCBldmVudCBvciBzdGFydCBvZiBhIG11 bHRpDQoJCQlpZiAoJHNob3dzcGFubmVkICYmICRtdWx0aSAmJiAhJHJlY3VyKSB7DQoJCQkJ JHNtZF9jYWxfZmxhZ1tdID0gJ211bHRpZmlyc3QnOw0KCQkJfQ0KCQkJaWYgKCRyZWN1cikg ew0KCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdyZWN1cmZpcnN0JzsNCgkJCX0NCgkJCWlmICgh JHNtZF9jYWxfZmxhZykgew0KCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdzdGFuZGFyZCc7DQoJ CQl9DQoJCQlpZiAoICggJGhvbF9oaXQgJiYgIWluX2FycmF5KCdtdWx0aScsJGhvbGlkYXlm bGFncykgJiYgaW5fYXJyYXkoJ211bHRpZmlyc3QnLCRzbWRfY2FsX2ZsYWcpICkgfHwgKCAk aG9sX2hpdCAmJiAhaW5fYXJyYXkoJ3N0YW5kYXJkJywkaG9saWRheWZsYWdzKSAmJiBpbl9h cnJheSgnc3RhbmRhcmQnLCRzbWRfY2FsX2ZsYWcpICkgKSB7DQoJCQkJJHNtZF9jYWxfZmxh Z1tdID0gJ2NhbmNlbCc7DQoJCQl9DQoJCQlmb3JlYWNoICgkc21kX2NhbF9mbGFnIGFzICRp dGVtKSB7DQoJCQkJJGNmbGFnW10gPSAkY2xhc3NwcmVmaXguJGl0ZW07DQoJCQl9DQoNCgkJ CSRpZHggPSAkc21kX2RhdGVbJ2QnXSA9IChpbnQpc3RyZnRpbWUoJyVkJywgJHN0YXJ0KTsN CgkJCSRzbWRfZGF0ZVsndyddID0gc3RyZnRpbWUoJyVWJywgJHN0YXJ0KTsNCgkJCSRzbWRf ZGF0ZVsnaXknXSA9IHN0cmZ0aW1lKCclRycsICRzdGFydCk7DQoJCQkkb3AgPSAoJHRoaW5n KSA/IHBhcnNlKCR0aGluZykgOiAoKCRmb3JtKSA/IHBhcnNlX2Zvcm0oJGZvcm0pIDogKCgk c2l6ZT09InNtYWxsIikgPyAnJyA6IGhyZWYoJHJvd1snVGl0bGUnXSwgcGVybWxpbmt1cmwo JHJvdyksICcgdGl0bGU9IicuJHJvd1snVGl0bGUnXS4nIicpKSApOw0KCQkJJGV2ZW50c1sk aWR4XVtdID0gYXJyYXkoJ2V2JyA9PiAkb3AsICdmbGFnJyA9PiAkc21kX2NhbF9mbGFnLCAn Y2xhc3NlcycgPT4gKCgkY2ZsYWcpID8gam9pbignICcsYXJyYXlfbWVyZ2UoJGNmbGFnLCAk c21kX2NhbF91Y2xzKSkgOiAnJykuJGV2Y2xhc3NlcywgJ3Bvc3RlZCcgPT4gJHN0YXJ0X2Rh dGUpOw0KCQkJJHNtZF9jYWxfZmxhZyA9ICRjZmxhZyA9ICRzbWRfY2FsX3VjbHMgPSBhcnJh eSgpOw0KCQl9DQoNCgkJLy8gR2VuZXJhdGUgYSBza2lwIGFycmF5IGZvciB0aGlzIGV2ZW50 DQoJCWlmICgkc2tpcGZpZWxkICYmICRyb3dbJHNraXBmaWVsZF0gIT0gJycpIHsNCgkJCSRp Z25vcmUgPSBkb19saXN0KCRyb3dbJHNraXBmaWVsZF0pOw0KCQkJZm9yZWFjaCAoJGlnbm9y ZSBhcyAka2V5ID0+ICR2YWwpIHsNCgkJCQkkaWdub3JlWyRrZXldID0gZGF0ZSgiZC1NLVki LCBzdHJ0b3RpbWUoJHZhbCkpOyAvLyBGb3JjZSBlYWNoIGRhdGUgdG8gYSBrbm93biBmb3Jt YXQNCgkJCX0NCgkJfQ0KCQkvLyBHZW5lcmF0ZSBhbiBvbWl0IGFycmF5IGZvciB0aGlzIGV2 ZW50DQoJCWlmICgkb21pdGZpZWxkICYmICRyb3dbJG9taXRmaWVsZF0gIT0gJycpIHsNCgkJ CSRvbWl0ID0gZG9fbGlzdCgkcm93WyRvbWl0ZmllbGRdKTsNCgkJCWZvcmVhY2ggKCRvbWl0 IGFzICRrZXkgPT4gJHZhbCkgew0KCQkJCSRvbWl0WyRrZXldID0gZGF0ZSgiZC1NLVkiLCBz dHJ0b3RpbWUoJHZhbCkpOw0KCQkJfQ0KCQl9DQoJCWlmICgkZGVidWcgPiAxICYmICgkaWdu b3JlIHx8ICRvbWl0KSkgew0KCQkJZWNobyAnKysgT01JVFRFRCBEQVRFUyArKyc7DQoJCQlk bXAoJG9taXQpOw0KCQkJZWNobyAnKysgQ0FOQ0VMTEVEIERBVEVTICsrJzsNCgkJCWRtcCgk aWdub3JlKTsNCgkJfQ0KCQkvLyBDYWxjdWxhdGUgdGhlIGRhdGUgb2Zmc2V0cyBhbmQgY2hl Y2sgcmVjdXJyaW5nIGV2ZW50cyB0aGF0IGZhbGwgd2l0aGluIHRoZSBtb250aCBvZiBpbnRl cmVzdA0KCQlpZiAoJHN0ZXBmaWVsZCAmJiAkcm93WyRzdGVwZmllbGRdICE9ICcnKSB7DQoJ CQkkZnJlcSA9IGRvX2xpc3QoJHJvd1skc3RlcGZpZWxkXSk7DQoJCQlmb3JlYWNoICgkZnJl cSBhcyAkaW50ZXJ2YWwpIHsNCgkJCQkkbWF4X2xvb3AgPSA5OTk5OTsgLy8gWXVrLCBidXQg cHJhY3RpY2FsbHkgbGltaXRsZXNzDQoJCQkJJG9yaWdlcnZhbCA9ICRpbnRlcnZhbDsNCgkJ CQkkaW50ZXJ2YWwgPSBzdHJfcmVwbGFjZSgiP21vbnRoIiwgZGF0ZSgnRicsIGdtbWt0aW1l KDAsMCwwLCRtb250aCwxKSksICRpbnRlcnZhbCk7DQoJCQkJJGludGVydmFsID0gc3RyX3Jl cGxhY2UoIj95ZWFyIiwgJHllYXIsICRpbnRlcnZhbCk7DQoJCQkJaWYgKHN0cnBvcygkaW50 ZXJ2YWwsICJsYXN0IikgPT09IDApIHsNCgkJCQkJJGludGVydmFsID0gZGF0ZSgibCwgRiBq UyBZIiwgc3RydG90aW1lKCRpbnRlcnZhbCwgbWt0aW1lKDEyLCAwLCAwLCBkYXRlKCJuIixt a3RpbWUoMCwwLDAsJG1vbnRoLDEsJHllYXIpKSsxLCAxLCAkeWVhcikpKTsNCgkJCQkJJG1h eF9sb29wID0gMTsNCgkJCQl9IGVsc2UgaWYgKHN0cnBvcygkaW50ZXJ2YWwsICJmaXJzdCIp ID09PSAwKSB7DQoJCQkJCSRpbnRlcnZhbCA9IGRhdGUoImwsIEYgalMgWSIsIHN0cnRvdGlt ZSgkaW50ZXJ2YWwsIG1rdGltZSgxMiwgMCwgMCwgKCgkbW9udGg+MSkgPyAkbW9udGgtMSA6 IDEyKSwgZGF0ZSgidCIsbWt0aW1lKDAsMCwwLCRtb250aC0xLDEsKCgkbW9udGg9PTEpID8g JHllYXItMTogJHllYXIpKSksICgoJG1vbnRoPT0xKSA/ICR5ZWFyLTE6ICR5ZWFyKSkpKTsN CgkJCQkJJG1heF9sb29wID0gMTsNCgkJCQl9DQoJCQkJJHRzX2xvb3AgPSAwOw0KCQkJCSR0 c19jdXJyID0gJHN0YXJ0Ow0KCQkJCWlmIChzdHJwb3MoJG9yaWdlcnZhbCwgIj9tb250aCIp IHx8IHN0cnBvcygkb3JpZ2VydmFsLCAiP3llYXIiKSkgew0KCQkJCQkkbWF4X2xvb3AgPSAx Ow0KICAgICAgICAgICAgfQ0KDQoJCQkJd2hpbGUgKCR0c19jdXJyIDwgJGVuZCAmJiAkdHNf bG9vcCA8ICRtYXhfbG9vcCkgew0KCQkJCQlpZiAoJG1heF9sb29wID09IDEpIHsNCgkJCQkJ CSR0c19jdXJyID0gc3RydG90aW1lKCRpbnRlcnZhbCk7DQoJCQkJCQkkdHNfY3VyciA9ICgk dHNfY3VyciA8ICRzdGFydCB8fCAkdHNfY3VyciA+ICRlbmQpID8gJHN0YXJ0IDogJHRzX2N1 cnI7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkdHNfY3VyciA9IHN0cnRvdGltZSgkaW50ZXJ2 YWwsICR0c19jdXJyKTsNCgkJCQkJfQ0KCQkJCQlpZiAoJHRzX2N1cnIgPT09IGZhbHNlKSB7 DQoJCQkJCQkkdHNfbG9vcCsrOw0KCQkJCQkJYnJlYWs7DQoJCQkJCX0gZWxzZSB7DQoJCQkJ CQlpZiAoJGRlYnVnID4gMSkgew0KCQkJCQkJCWRtcCgiSU5URVJWQUw6ICIuIGRhdGUoJ2Qt TS1ZIEg6aTpzJywgJHRzX2N1cnIpKTsNCgkJCQkJCX0NCgkJCQkJCWlmICgkdHNfY3VyciA8 ICRlbmQgJiYgJHRzX2N1cnIgPj0gJHRzX2ZpcnN0ICYmICR0c19jdXJyICE9ICRzdGFydCkg ew0KCQkJCQkJCS8vIEEgcmVjdXJyaW5nIGV2ZW50LiBDaGVjayBpdCBpc24ndCBhIGhvbGlk YXkgb3IgdG8gYmUgaWdub3JlZA0KCQkJCQkJCXBvcHVsYXRlQXJ0aWNsZURhdGEoJHJvdyk7 DQoJCQkJCQkJJG9wID0gJyc7DQoJCQkJCQkJJGlkeCA9IChpbnQpc3RyZnRpbWUoJyVkJywg JHRzX2N1cnIpOw0KCQkJCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdyZWN1cic7DQoJCQkJCQkJ JHRoaXNkYXRlID0gZGF0ZSgiZC1NLVkiLCAkdHNfY3Vycik7DQoJCQkJCQkJJG9taXRfbWUg PSBpbl9hcnJheSgkdGhpc2RhdGUsICRvbWl0KTsNCgkJCQkJCQkkc2hvd19tZSA9ICFpbl9h cnJheSgkdGhpc2RhdGUsICRpZ25vcmUpOw0KCQkJCQkJCSRob2xfaGl0ID0gaW5fYXJyYXko JHRoaXNkYXRlLCAkaG9saWRheXMpOw0KCQkJCQkJCSRzaG93X2hvbCA9ICgkaG9sX2hpdCAm JiAhaW5fYXJyYXkoJ3JlY3VyJywkaG9saWRheWZsYWdzKSApID8gZmFsc2UgOiB0cnVlOw0K CQkJCQkJCWlmICggJG9taXRfbWUgKSB7DQoJCQkJCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdv bWl0JzsNCgkJCQkJCQl9DQoJCQkJCQkJaWYgKCAoISRzaG93X21lIHx8ICEkc2hvd19ob2wp ICYmICEkb21pdF9tZSApIHsNCgkJCQkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ2NhbmNlbCc7 DQoJCQkJCQkJfQ0KCQkJCQkJCWZvcmVhY2ggKCRzbWRfY2FsX2ZsYWcgYXMgJGl0ZW0pIHsN CgkJCQkJCQkJJGNmbGFnW10gPSAkY2xhc3NwcmVmaXguJGl0ZW07DQoJCQkJCQkJfQ0KDQoJ CQkJCQkJLy8gQ3JlYXRlIHRoZSBldmVudHMgdGhhdCBhcHBlYXIgaW4gdGhlIGNlbGwgYnV0 IG9ubHkgaWYgdGhleSd2ZSBub3QgYXBwZWFyZWQgYmVmb3JlLCBvciBhcmUgdG8gYmUgaWdu b3JlZC9vbWl0dGVkDQoJCQkJCQkJaWYgKCEkb21pdF9tZSkgew0KCQkJCQkJCQlpZiAoKCRz aG93X21lICYmICRzaG93X2hvbCkgfHwgJHNob3dza2lwcGVkKSB7DQoJCQkJCQkJCQkkc21k X2RhdGVbJ2QnXSA9ICRpZHg7DQoJCQkJCQkJCQkkc21kX2RhdGVbJ3cnXSA9IHN0cmZ0aW1l KCclVicsICR0c19jdXJyKTsNCgkJCQkJCQkJCSRzbWRfZGF0ZVsnaXknXSA9IHN0cmZ0aW1l KCclRycsICR0c19jdXJyKTsNCgkJCQkJCQkJCSRvcCA9ICgkcmVjdXJmb3JtKSA/IHBhcnNl X2Zvcm0oJHJlY3VyZm9ybSkgOiAoKCR0aGluZykgPyBwYXJzZSgkdGhpbmcpIDogKCgkc2l6 ZT09InNtYWxsIikgPyAnJyA6IGhyZWYoJHJvd1snVGl0bGUnXSwgcGVybWxpbmt1cmwoJHJv dyksICcgdGl0bGU9IicuJHJvd1snVGl0bGUnXS4nIicpKSApOw0KCQkJCQkJCQl9DQoJCQkJ CQkJfQ0KCQkJCQkJCSR1c2VkID0gYXJyYXkoKTsNCgkJCQkJCQlpZiAoaXNzZXQoJGV2ZW50 c1skaWR4XSkgJiYgJGV2ZW50c1skaWR4XSAhPSBOVUxMKSB7DQoJCQkJCQkJCWZvcmVhY2gg KCRldmVudHNbJGlkeF0gYXMgJGV2KSB7DQoJCQkJCQkJCQkkdXNlZFtdID0gJGV2Wydldidd Ow0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJCWlmIChpc3NldCgkZXZlbnRzWyRpZHhd KSAmJiAkZXZlbnRzWyRpZHhdID09IE5VTEwgfHwgIWluX2FycmF5KCRvcCwgJHVzZWQpKSB7 DQoJCQkJCQkJCSRldmVudHNbJGlkeF1bXSA9IGFycmF5KCdldicgPT4gJG9wLCAnZmxhZycg PT4gJHNtZF9jYWxfZmxhZywgJ2NsYXNzZXMnID0+ICgoJGNmbGFnKSA/IGpvaW4oJyAnLGFy cmF5X21lcmdlKCRjZmxhZywgJHNtZF9jYWxfdWNscykpIDogJycpLiRldmNsYXNzZXMsICdw b3N0ZWQnID0+ICRzdGFydF9kYXRlKTsNCgkJCQkJCQl9DQoJCQkJCQkJJHNtZF9jYWxfZmxh ZyA9ICRjZmxhZyA9ICRzbWRfY2FsX3VjbHMgPSBhcnJheSgpOw0KCQkJCQkJfQ0KCQkJCQkJ JHRzX2xvb3ArKzsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSBlbHNlIGlmICgkc2hvd3Nw YW5uZWQgJiYgJG11bHRpKSB7DQoJCQkvLyBOb24tcmVjdXJyaW5nIGV2ZW50cyBtYXkgc3Bh biBtb3JlIHRoYW4gb25lIGRhdGUgYnV0IHRoZXkgbXVzdCBzdGlsbCByZXNwZWN0IGlnbm9y ZWQgZGF0ZXMgYW5kIGhvbGlkYXlzDQoJCQlwb3B1bGF0ZUFydGljbGVEYXRhKCRyb3cpOw0K CQkJJGxhc3RkYXkgPSAoaW50KXN0cmZ0aW1lKCclZCcsICRlbmQpOw0KCQkJJHJlYWxfbGFz dGRheSA9IChpbnQpc3RyZnRpbWUoJyVkJywgJHJlYWxfZW5kKTsNCgkJCXdoaWxlICgrKyRp ZHggPD0gJGxhc3RkYXkpIHsNCgkJCQkkb3AgPSAnJzsNCgkJCQkkbXVsdGlmbGFnID0gKCRp ZHg9PSRyZWFsX2xhc3RkYXkpID8gJ211bHRpbGFzdCcgOiAoKCRpZHg9PTEpID8gJ211bHRp cHJldicgOiAnbXVsdGknKTsNCgkJCQkkc21kX2NhbF9mbGFnW10gPSAkbXVsdGlmbGFnOw0K CQkJCSR0aGlzdGltZSA9IGdtbWt0aW1lKDAsIDAsIDAsICRtb250aCwgJGlkeCwgJHllYXIp Ow0KCQkJCSR0aGlzZGF0ZSA9IGRhdGUoImQtTS1ZIiwgJHRoaXN0aW1lKTsNCgkJCQkkb21p dF9tZSA9IGluX2FycmF5KCR0aGlzZGF0ZSwgJG9taXQpOw0KCQkJCSRzaG93X21lID0gIWlu X2FycmF5KCR0aGlzZGF0ZSwgJGlnbm9yZSk7DQoJCQkJJGhvbF9oaXQgPSBpbl9hcnJheSgk dGhpc2RhdGUsICRob2xpZGF5cyk7DQoJCQkJJHNob3dfaG9sID0gKCRob2xfaGl0ICYmICFp bl9hcnJheSgnbXVsdGknLCRob2xpZGF5ZmxhZ3MpICkgPyBmYWxzZSA6IHRydWU7DQoJCQkJ aWYgKCAkb21pdF9tZSApIHsNCgkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ29taXQnOw0KCQkJ CX0NCgkJCQlpZiAoICghJHNob3dfbWUgfHwgISRzaG93X2hvbCkgJiYgISRvbWl0X21lICkg ew0KCQkJCQkkc21kX2NhbF9mbGFnW10gPSAnY2FuY2VsJzsNCgkJCQl9DQoJCQkJZm9yZWFj aCAoJHNtZF9jYWxfZmxhZyBhcyAkaXRlbSkgew0KCQkJCQkkY2ZsYWdbXSA9ICRjbGFzc3By ZWZpeC4kaXRlbTsNCgkJCQl9DQoJCQkJLy8gQ3JlYXRlIHRoZSBzcGFubmVkIGV2ZW50IHRo YXQgYXBwZWFycyBpbiB0aGUgY2VsbA0KCQkJCWlmICghJG9taXRfbWUpIHsNCgkJCQkJaWYg KCAoJHNob3dfbWUgJiYgJHNob3dfaG9sKSB8fCAkc2hvd3NraXBwZWQpIHsNCgkJCQkJCSRz bWRfZGF0ZVsnZCddID0gJGlkeDsNCgkJCQkJCSRzbWRfZGF0ZVsndyddID0gc3RyZnRpbWUo JyVWJywgJHRoaXN0aW1lKTsNCgkJCQkJCSRzbWRfZGF0ZVsnaXknXSA9IHN0cmZ0aW1lKCcl RycsICR0aGlzdGltZSk7DQoJCQkJCQkkb3AgPSAoJHNwYW5mb3JtKSA/IHBhcnNlX2Zvcm0o JHNwYW5mb3JtKSA6ICgoJHRoaW5nKSA/IHBhcnNlKCR0aGluZykgOiAoKCRzaXplPT0ic21h bGwiKSA/ICcnIDogaHJlZignJnJhcnI7JywgcGVybWxpbmt1cmwoJHJvdyksICcgdGl0bGU9 IicuJHJvd1snVGl0bGUnXS4nIicpKSApOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCSRldmVudHNb JGlkeF1bXSA9IGFycmF5KCdldicgPT4gJG9wLCAnZmxhZycgPT4gJHNtZF9jYWxfZmxhZywg J2NsYXNzZXMnID0+ICgoJGNmbGFnKSA/IGpvaW4oJyAnLGFycmF5X21lcmdlKCRjZmxhZywg JHNtZF9jYWxfdWNscykpIDogJycpLiRldmNsYXNzZXMsICdwb3N0ZWQnID0+ICRzdGFydF9k YXRlKTsNCgkJCQkkc21kX2NhbF9mbGFnID0gJGNmbGFnID0gJHNtZF9jYWxfdWNscyA9IGFy cmF5KCk7DQoJCQl9DQoJCX0NCgkJLy8gQWRkIGFueSBleHRyYSBkYXRlcyBmb3IgdGhpcyBl dmVudCB0aGF0IGFyZSB3aXRoaW4gdGhlIGN1cnJlbnQgbW9udGgNCgkJaWYgKCRleHRyYWZp ZWxkICYmICRyb3dbJGV4dHJhZmllbGRdICE9ICcnKSB7DQoJCQkkeHRyYSA9IGRvX2xpc3Qo JHJvd1skZXh0cmFmaWVsZF0pOw0KCQkJJGV2X2hyID0gZGF0ZSgnSCcsICRzdGFydCk7DQoJ CQkkZXZfbW4gPSBkYXRlKCdpJywgJHN0YXJ0KTsNCgkJCSRldl9zYyA9IGRhdGUoJ3MnLCAk c3RhcnQpOw0KCQkJJHN0YW1wb2ZmID0gKGludCkoMzYwMCokZXZfaHIpICsgKGludCkoNjAq JGV2X21uKSArIChpbnQpJGV2X3NjOw0KCQkJZm9yZWFjaCAoJHh0cmEgYXMgJHZhbCkgew0K CQkJCWlmIChzdHJwb3MoJHZhbCwgIisiKSA9PT0gZmFsc2UpIHsNCgkJCQkJJHNwaWR0aCA9 IDE7DQoJCQkJCSRzcGV4ID0gMDsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkY2hrID0gJHNob3dz cGFubmVkICYmICEkcmVjdXI7DQoJCQkJCSRzcGlkdGggPSAkY2hrID8gY2VpbCgkZGlmZiAv ICg2MCo2MCoyNCkpIDogMTsgLy8gZGF5cyBiZXR3ZWVuIGRhdGVzDQoJCQkJCSR2YWwgPSBy dHJpbSgkdmFsLCAnKycpOw0KCQkJCQkkc3BleCA9ICRjaGsgPyAxIDogMDsNCgkJCQl9DQoJ CQkJZm9yICgkamR4ID0gMTsgJGpkeCA8PSAkc3BpZHRoOyAkamR4KyspIHsNCgkJCQkJJHRt ID0gc3RydG90aW1lKCR2YWwgLiAoKCRqZHg9PTEpID8gJycgOiAnKycuKCRqZHgtMSkuJyBk YXlzJykpOw0KCQkJCQlpZiAoJGRpZmYgPiAwICYmICRqZHggPT0gMSkgew0KCQkJCQkJJGV4 cHN0YW1wID0gJHRtKyRzdGFtcG9mZiskcmVhbF9kaWZmOw0KCQkJCQl9DQoJCQkJCSRpZHgg PSAkc21kX2RhdGVbJ2QnXSA9IChpbnQpc3RyZnRpbWUoJyVkJywgJHRtKTsNCgkJCQkJJGR0 ID0gZGF0ZSgiWS1tLWQiLCAkdG0pOw0KCQkJCQkkbHN0ID0gKCRleHRyYXN0cmljdCkgPyAk ZW5kIDogJHRzX2xhc3Q7DQoJCQkJCWlmICgkdG0gPCAkbHN0ICYmICR0bSA+PSAkdHNfZmly c3QpIHsNCgkJCQkJCSRmYWtlcm93ID0gJHJvdzsNCgkJCQkJCSRmYWtlcm93WydQb3N0ZWQn XSA9IGRhdGUoIlktbS1kIEg6aTpzIiwgJHRtKyRzdGFtcG9mZik7DQoJCQkJCQkkZmFrZXJv d1sndVBvc3RlZCddID0gJHRtKyRzdGFtcG9mZjsNCgkJCQkJCWlmICgkZGlmZj4wKSB7DQoJ CQkJCQkJJGZha2Vyb3dbJ0V4cGlyZXMnXSA9IGRhdGUoIlktbS1kIEg6aTpzIiwgJGV4cHN0 YW1wKTsNCgkJCQkJCQkkZmFrZXJvd1sndUV4cGlyZXMnXSA9ICRleHBzdGFtcDsNCgkJCQkJ CX0NCg0KCQkJCQkJcG9wdWxhdGVBcnRpY2xlRGF0YSgkZmFrZXJvdyk7DQoJCQkJCQkkc21k X2NhbF9mbGFnW10gPSAnZXh0cmEnOw0KCQkJCQkJJGNmbGFnW10gPSAkY2xhc3NwcmVmaXgu J2V4dHJhJzsNCgkJCQkJCSRvbWl0X21lID0gZmFsc2U7DQoJCQkJCQkkc2hvd19tZSA9ICRz aG93X2hvbCA9IHRydWU7DQoJCQkJCQlpZiAoJHNwZXgpIHsNCgkJCQkJCQkkbXVsdGlmbGFn ID0gKCRqZHg9PTEpID8gJ211bHRpZmlyc3QnIDogKCgkamR4PT0kc3BpZHRoKSA/ICdtdWx0 aWxhc3QnIDogKCgkaWR4PT0xKSA/ICdtdWx0aXByZXYnIDogJ211bHRpJykpOw0KCQkJCQkJ CSR0aGlzZGF0ZSA9IGRhdGUoImQtTS1ZIiwgJHRtKTsNCgkJCQkJCQkkb21pdF9tZSA9IGlu X2FycmF5KCR0aGlzZGF0ZSwgJG9taXQpOw0KCQkJCQkJCSRzaG93X21lID0gIWluX2FycmF5 KCR0aGlzZGF0ZSwgJGlnbm9yZSk7DQoJCQkJCQkJJGhvbF9oaXQgPSBpbl9hcnJheSgkdGhp c2RhdGUsICRob2xpZGF5cyk7DQoJCQkJCQkJJHNob3dfaG9sID0gKCRob2xfaGl0ICYmICFp bl9hcnJheSgnbXVsdGknLCRob2xpZGF5ZmxhZ3MpICkgPyBmYWxzZSA6IHRydWU7DQoJCQkJ CQkJaWYgKCRvbWl0X21lKSB7DQoJCQkJCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdvbWl0JzsN CgkJCQkJCQl9DQoJCQkJCQkJaWYgKCAoISRzaG93X21lIHx8ICEkc2hvd19ob2wpICYmICEk b21pdF9tZSApIHsNCgkJCQkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ2NhbmNlbCc7DQoJCQkJ CQkJfQ0KCQkJCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICRtdWx0aWZsYWc7DQoJCQkJCQkJJGNm bGFnW10gPSAkY2xhc3NwcmVmaXguJG11bHRpZmxhZzsNCgkJCQkJCX0NCgkJCQkJCWlmICgh JG9taXRfbWUpIHsNCgkJCQkJCQlpZiAoICgkc2hvd19tZSAmJiAkc2hvd19ob2wpIHx8ICRz aG93c2tpcHBlZCkgew0KCQkJCQkJCQkkc21kX2RhdGVbJ3cnXSA9IHN0cmZ0aW1lKCclVics ICR0bSk7DQoJCQkJCQkJCSRzbWRfZGF0ZVsnaXknXSA9IHN0cmZ0aW1lKCclRycsICR0bSk7 DQoJCQkJCQkJCSRvcCA9ICgkc3BleCAmJiAkc3BhbmZvcm0pID8gcGFyc2VfZm9ybSgkc3Bh bmZvcm0pIDogKCgkdGhpbmcpID8gcGFyc2UoJHRoaW5nKSA6ICgoJGZvcm0pID8gcGFyc2Vf Zm9ybSgkZm9ybSkgOiAoKCRzaXplPT0ic21hbGwiKSA/ICcnIDogaHJlZigoKCRzcGV4ICYm ICRqZHg+MSkgPyAnJnJhcnI7JyA6ICRyb3dbJ1RpdGxlJ10pLCBwZXJtbGlua3VybCgkcm93 KSwgJyB0aXRsZT0iJy4kcm93WydUaXRsZSddLiciJykpICkpOw0KCQkJCQkJCQkkZXZlbnRz WyRpZHhdW10gPSBhcnJheSgnZXYnID0+ICRvcCwgJ2ZsYWcnID0+ICRzbWRfY2FsX2ZsYWcs ICdjbGFzc2VzJyA9PiAoKCRjZmxhZykgPyBqb2luKCcgJyxhcnJheV9tZXJnZSgkY2ZsYWcs ICRzbWRfY2FsX3VjbHMpKSA6ICcnKS4kZXZjbGFzc2VzLCAncG9zdGVkJyA9PiAkZHQpOw0K CQkJCQkJCQkkc21kX2NhbF9mbGFnID0gJGNmbGFnID0gJHNtZF9jYWxfdWNscyA9IGFycmF5 KCk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0K CWFydGljbGVfcG9wKCk7DQoNCglpZiAoJGRlYnVnID4gMSAmJiAkZXZlbnRzKSB7DQoJCWVj aG8gJysrIEFMTCBFVkVOVFMgKysnOw0KCQlkbXAoJGV2ZW50cyk7DQoJfQ0KDQoJLy8gR2Vu ZXJhdGUgdGhlIGNhbGVuZGFyDQoJaWYoICRzaXplID09ICJzbWFsbCIgKSB7DQoJCSRjYWxl bmRhciA9IG5ldyBTTURfU21hbGxfQ2FsZW5kYXIoJHllYXIsICRtb250aCwgJGV2ZW50cywg JHNlY3Rpb24sICRjYXRlZ29yeSk7DQoJfSBlbHNlIHsNCgkJJGNhbGVuZGFyID0gbmV3IFNN RF9DYWxlbmRhcigkeWVhciwgJG1vbnRoLCAkZXZlbnRzKTsNCgl9DQoJJGNhbGVuZGFyLT5z ZXRXZWVrKCR3ZWVrKTsNCgkkY2FsZW5kYXItPnNldEdNVCgkZ210KTsNCgkkY2FsZW5kYXIt PnNldExhbmcoJGxhbmcpOw0KCSRjYWxlbmRhci0+c2V0Q2xhc3NMZXZlbHMoJGNsZXZzKTsN CgkkY2FsZW5kYXItPnNldENsYXNzUHJlZml4KCRjbGFzc3ByZWZpeCk7DQoJJGNhbGVuZGFy LT5zZXRFdmVudFByZWZpeCgkZXZjbGFzc3ByZWZpeCk7DQoJJGNhbGVuZGFyLT5zZXRFdmVu dFdyYXB0YWcoJGV2ZW50d3JhcHRhZyk7DQoJJGNhbGVuZGFyLT5zZXRDZWxsRm9ybSgkY2Vs bGZvcm0pOw0KCSRjYWxlbmRhci0+c2V0TVlXcmFwdGFnKCRteXdyYXB0YWcpOw0KCSRjYWxl bmRhci0+c2V0VGFibGVJRCgkaWQpOw0KCSRjYWxlbmRhci0+c2V0VGFibGVDbGFzcygkY2xh c3MpOw0KCSRjYWxlbmRhci0+c2V0Um93Q2xhc3MoJHJvd2NsYXNzKTsNCgkkY2FsZW5kYXIt PnNldENlbGxDbGFzcygkY2VsbGNsYXNzKTsNCgkkY2FsZW5kYXItPnNldEVtcHR5Q2xhc3Mo JGVtcHR5Y2xhc3MpOw0KCSRjYWxlbmRhci0+c2V0SVNPV2Vla0NsYXNzKCRpc293ZWVrY2xh c3MpOw0KCSRjYWxlbmRhci0+c2V0TmF2SW5mbygkbmF2cGNsYXNzLCRuYXZuY2xhc3MsJG5h dnBhcnIsJG5hdm5hcnIsJG5hdmlkKTsNCgkkY2FsZW5kYXItPnNldE5hdktlZXAoJG1haW50 YWluKTsNCgkkY2FsZW5kYXItPnNldE1ZQ2xhc3MoJG15Y2xhc3MpOw0KCSRjYWxlbmRhci0+ c2V0TmFtZUZvcm1hdCgkZGF5Zm9ybWF0LCAiZCIpOw0KCSRjYWxlbmRhci0+c2V0TmFtZUZv cm1hdCgkbW9udGhmb3JtYXQsICJtIik7DQoJJGNhbGVuZGFyLT5zZXRTaG93SVNPV2Vlaygk aXNvd2Vla3MpOw0KCSRjYWxlbmRhci0+c2V0RVllYXIoJGVhcmxpZXN0KTsNCgkkY2FsZW5k YXItPnNldExZZWFyKCRsYXRlc3QpOw0KCSRjYWxlbmRhci0+c2V0RmlsdGVyT3B0cygkZm9w dHMpOw0KCSRjYWxlbmRhci0+c2V0SG9saWRheXMoJGhvbGlkYXlzKTsNCgkkY2FsZW5kYXIt PnNldFNlbGVjdG9ycyhkb19saXN0KCRzZWxlY3QpLCAkc2VsZWN0YnRuKTsNCgkkY2FsZW5k YXItPnNldEZpcnN0RGF5T2ZXZWVrKCRmaXJzdGRheSk7DQoJJGNhbGVuZGFyLT5zZXRMaW5r UG9zdGVkKCRsaW5rcG9zdGVkKTsNCg0KCXJldHVybiAkY2FsZW5kYXItPmRpc3BsYXkoJHN0 YXRpYywgJGZ1dHVyZSk7DQp9DQoNCmNsYXNzIFNNRF9DYWxlbmRhciBleHRlbmRzIFNNRF9S YXdfQ2FsZW5kYXIgew0KCS8vIE92ZXJyaWRlIENvbnN0cnVjdG9yDQoJLy8gUGVybWl0cyBt dWx0aXBsZSBldmVudHMgdG8gc2hvdyBwZXIgZGF5DQoJZnVuY3Rpb24gU01EX0NhbGVuZGFy KCR5ZWFyLCRtb250aCwkZXZlbnRzKSB7DQoJCSR0aGlzLT5ldmVudHMgPSAkZXZlbnRzOw0K CQkkdGhpcy0+U01EX1Jhd19DYWxlbmRhcigkeWVhciwkbW9udGgpOw0KCX0NCg0KCS8vIE92 ZXJyaWRlIGRzcERheUNlbGwgdG8gZGlzcGxheSBzdHVmZiByaWdodA0KCWZ1bmN0aW9uIGRz cERheUNlbGwoJHRoZWRheSkgew0KCQlnbG9iYWwgJHNtZF9jYWxfZmxhZywgJHNtZF9jYWxp bmZvLCAkc21kX2NhbF91Y2xzLCAkc21kX2RhdGU7DQoNCgkJJHNtZF9jYWxfZmxhZyA9ICRz bWRfY2FsX3VjbHMgPSBhcnJheSgpOw0KCQkkaGFzYXJ0aWNsZSA9IGlzc2V0KCR0aGlzLT5l dmVudHNbJHRoZWRheV0pOw0KCQkkdGhlZGF0ZSA9IGdtbWt0aW1lKDAsIDAsIDAsICR0aGlz LT5tb250aCwgJHRoZWRheSwgJHRoaXMtPnllYXIpOw0KCQkkaG9sX2hpdCA9IGluX2FycmF5 KGRhdGUoImQtTS1ZIiwgJHRoZWRhdGUpLCAkdGhpcy0+aG9saWRheXMpOw0KCQlpZiAoJGhh c2FydGljbGUpIHsNCgkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdldmVudCc7DQoJCX0NCgkJaWYg KCRob2xfaGl0KSB7DQoJCQkkc21kX2NhbF9mbGFnW10gPSAnaG9scyc7DQoJCX0NCgkJJGNm bGFnID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAoJHNtZF9jYWxfZmxhZyBhcyAkaXRlbSkgew0K CQkJJGNmbGFnW10gPSAkdGhpcy0+Y2xhc3NwcmVmaXguJGl0ZW07DQoJCX0NCgkJJHRkY2xh c3MgPSB0cmltKCR0aGlzLT5jZWxsY2xhc3MgLiAoKCRjZmxhZykgPyAnICcuam9pbignICcs ICRjZmxhZykgOiAnJykpOw0KCQkkcnVubmluZ2NsYXNzID0gKGluX2FycmF5KCJjZWxsIiwg JHRoaXMtPmNsYXNzbGV2ZWxzKSB8fCBpbl9hcnJheSgiY2VsbHBsdXMiLCAkdGhpcy0+Y2xh c3NsZXZlbHMpKSA/IGV4cGxvZGUoJyAnLCAkdGRjbGFzcykgOiBhcnJheSgpOw0KCQlpZigk dGhpcy0+eWVhciA9PSBkYXRlKCdZJyx0aW1lKCkrdHpfb2Zmc2V0KCkgKSBhbmQgJHRoaXMt Pm1vbnRoID09IGRhdGUoJ24nLHRpbWUoKSt0el9vZmZzZXQoKSApIGFuZCAkdGhlZGF5ID09 IGRhdGUoJ2onLHRpbWUoKSt0el9vZmZzZXQoKSkgKSB7DQoJCQkkc21kX2NhbF9mbGFnW10g PSAndG9kYXknOw0KCQkJJHJ1bm5pbmdjbGFzc1tdID0gJHRoaXMtPmNsYXNzcHJlZml4Lid0 b2RheSc7DQoJCX0NCg0KCQkkb3V0ID0gJGZsYWdzID0gYXJyYXkoKTsNCgkJJGZvdXQgPSBh cnJheSgnc3RhbmRhcmQnPT5hcnJheSgpLCdyZWN1cic9PmFycmF5KCksJ3JlY3VyZmlyc3Qn PT5hcnJheSgpLCdtdWx0aWZpcnN0Jz0+YXJyYXkoKSwnbXVsdGknPT5hcnJheSgpLCdtdWx0 aXByZXYnPT5hcnJheSgpLCdtdWx0aWxhc3QnPT5hcnJheSgpLCdjYW5jZWwnPT5hcnJheSgp LCdleHRyYSc9PmFycmF5KCkpOw0KCQlpZiAoZW1wdHkoJHRoaXMtPmNlbGxmb3JtKSkgew0K CQkJJG91dFtdID0gaGVkKCR0aGVkYXksNCk7DQoJCX0NCgkJaWYoIGlzc2V0KCR0aGlzLT5l dmVudHNbJHRoZWRheV0pICkgew0KCQkJJGRheXNfZXZlbnRzID0gJHRoaXMtPmV2ZW50c1sk dGhlZGF5XTsNCgkJCWZvcmVhY2goJGRheXNfZXZlbnRzIGFzICRldikgew0KCQkJCSRldmNs YXNzID0gdHJpbSgkZXZbJ2NsYXNzZXMnXSk7DQoJCQkJJGZsYWdzID0gYXJyYXlfbWVyZ2Uo JGZsYWdzLCAkZXZbJ2ZsYWcnXSk7DQoJCQkJaWYgKGluX2FycmF5KCJjZWxscGx1cyIsICR0 aGlzLT5jbGFzc2xldmVscykpIHsNCgkJCQkJZm9yZWFjaCAoZXhwbG9kZSgnICcsICRldmNs YXNzKSBhcyAkZXZjKSB7DQoJCQkJCQkkcnVubmluZ2NsYXNzW109ICRldmM7DQoJCQkJCX0N CgkJCQl9DQoJCQkJJGNscyA9ICgkZXZjbGFzcyAmJiBpbl9hcnJheSgiZXZlbnQiLCAkdGhp cy0+Y2xhc3NsZXZlbHMpKSA/ICcgY2xhc3M9IicudHJpbSgkZXZjbGFzcykuJyInIDogJyc7 DQoJCQkJJG9wID0gKCR0aGlzLT5ldndyYXB0YWcpID8gdGFnKCRldlsnZXYnXSwgJHRoaXMt PmV2d3JhcHRhZywgJGNscykgOiAkZXZbJ2V2J107DQoJCQkJZm9yZWFjaCAoJGV2WydmbGFn J10gYXMgJGZsZXYpIHsNCgkJCQkJJGZvdXRbJGZsZXZdW10gPSAkb3A7DQoJCQkJfQ0KCQkJ CSRvdXRbXSA9ICRvcDsNCgkJCX0NCgkJfQ0KDQoJCS8vIEFtYWxnYW1hdGUgdGhlIGV2ZW50 LWxldmVsIGNsYXNzZXMgYW5kIGNlbGwtbGV2ZWwgY2xhc3NlcyBpZiByZXF1aXJlZA0KCQkk cnVubmluZ2NsYXNzID0gYXJyYXlfdW5pcXVlKCRydW5uaW5nY2xhc3MpOw0KCQlpZiAoaW5f YXJyYXkoImNlbGxwbHVzIiwgJHRoaXMtPmNsYXNzbGV2ZWxzKSkgew0KCQkJJHNtZF9jYWxf ZmxhZyA9IGFycmF5X21lcmdlKCRzbWRfY2FsX2ZsYWcsICRmbGFncyk7DQoJCX0NCg0KCQlp ZiAoJHRoaXMtPmNlbGxmb3JtKSB7DQoJCQkkdGhpc3RpbWUgPSBnbW1rdGltZSgwLCAwLCAw LCAkdGhpcy0+bW9udGgsICR0aGVkYXksICR0aGlzLT55ZWFyKTsNCgkJCSRzbWRfY2FsaW5m b1snaWQnXSA9ICR0aGlzLT50YWJsZUlEOw0KCQkJJHNtZF9kYXRlWyd5J10gPSAkdGhpcy0+ eWVhcjsNCgkJCSRzbWRfZGF0ZVsnbSddID0gJHRoaXMtPm1vbnRoOw0KCQkJJHNtZF9kYXRl Wyd3J10gPSBzdHJmdGltZSgiJVYiLCAkdGhpc3RpbWUpOw0KCQkJJHNtZF9kYXRlWydpeSdd ID0gc3RyZnRpbWUoIiVHIiwgJHRoaXN0aW1lKTsNCgkJCSRzbWRfZGF0ZVsnZCddID0gJHRo ZWRheTsNCgkJCSRyZXBzID0gYXJyYXkoDQoJCQkJJ3tzdGFuZGFyZH0nID0+IGpvaW4oJycs JGZvdXRbJ3N0YW5kYXJkJ10pLA0KCQkJCSd7cmVjdXJ9JyA9PiBqb2luKCcnLCRmb3V0Wydy ZWN1ciddKSwNCgkJCQkne3JlY3VyZmlyc3R9JyA9PiBqb2luKCcnLCRmb3V0WydyZWN1cmZp cnN0J10pLA0KCQkJCSd7YWxscmVjdXJ9JyA9PiBqb2luKCcnLGFycmF5X21lcmdlKCRmb3V0 WydyZWN1ciddLCAkZm91dFsncmVjdXJmaXJzdCddKSksDQoJCQkJJ3ttdWx0aWZpcnN0fScg PT4gam9pbignJywkZm91dFsnbXVsdGlmaXJzdCddKSwNCgkJCQkne211bHRpcHJldn0nID0+ IGpvaW4oJycsJGZvdXRbJ211bHRpcHJldiddKSwNCgkJCQkne211bHRpfScgPT4gam9pbign JywkZm91dFsnbXVsdGlsYXN0J10pLA0KCQkJCSd7bXVsdGlsYXN0fScgPT4gam9pbignJywk Zm91dFsnbXVsdGlsYXN0J10pLA0KCQkJCSd7YWxsbXVsdGl9JyA9PiBqb2luKCcnLGFycmF5 X21lcmdlKCRmb3V0WydtdWx0aWZpcnN0J10sJGZvdXRbJ211bHRpJ10sJGZvdXRbJ211bHRp cHJldiddLCRmb3V0WydtdWx0aWxhc3QnXSkpLA0KCQkJCSd7Y2FuY2VsfScgPT4gam9pbign JywkZm91dFsnY2FuY2VsJ10pLA0KCQkJCSd7ZXh0cmF9JyA9PiBqb2luKCcnLCRmb3V0Wydl eHRyYSddKSwNCgkJCQkne2V2ZW50c30nID0+IGpvaW4oJycsJG91dCksDQoJCQkJJ3tkYXl9 JyA9PiAkdGhlZGF5LA0KCQkJCSd7d2Vla2RheX0nID0+ICgoaXNfYXJyYXkoJHRoaXMtPmRh eU5hbWVGbXQpKSA/ICR0aGlzLT5kYXlOYW1lc1tkYXRlKCd3JywkdGhpc3RpbWUpXSA6IHN0 cmZ0aW1lKCR0aGlzLT5kYXlOYW1lRm10LCAkdGhpc3RpbWUpKSwNCgkJCQkne3dlZWt9JyA9 PiAkc21kX2RhdGVbJ3cnXSwNCgkJCQkne21vbnRofScgPT4gJHRoaXMtPm1vbnRoLA0KCQkJ CSd7bW9udGhuYW1lfScgPT4gKChpc19hcnJheSgkdGhpcy0+bXRoTmFtZUZtdCkpID8gJHRo aXMtPm10aE5hbWVzW2RhdGUoJ24nLCR0aGlzdGltZSldIDogc3RyZnRpbWUoJHRoaXMtPm10 aE5hbWVGbXQsICR0aGlzdGltZSkpLA0KCQkJCSd7eWVhcn0nID0+ICR0aGlzLT55ZWFyLA0K CQkJCSd7c2hvcnR5ZWFyfScgPT4gc3RyZnRpbWUoIiV5IiwgJHRoaXN0aW1lKSwNCgkJCQkn e2lzb3llYXJ9JyA9PiAkc21kX2RhdGVbJ2l5J10sDQoJCQkJJ3tzaG9ydGlzb3llYXJ9JyA9 PiBzdHJmdGltZSgiJWciLCAkdGhpc3RpbWUpLA0KCQkJKTsNCgkJCSRjZWxsb3V0ID0gcGFy c2Uoc3RydHIoJHRoaXMtPmNlbGxmb3JtLCAkcmVwcykpOw0KCQkJJGNhcnJheSA9IGFycmF5 X21lcmdlKCRydW5uaW5nY2xhc3MsICRzbWRfY2FsX3VjbHMpOw0KCQkJJHNtZF9jYWxfdWNs cyA9IGFycmF5KCk7DQoNCgkJCXJldHVybiBkb1RhZygkY2VsbG91dCwndGQnLGpvaW4oJyAn LCRjYXJyYXkpKTsNCgkJfSBlbHNlIHsNCgkJCXJldHVybiBkb1RhZyhqb2luKCcnLCRvdXQp LCd0ZCcsam9pbignICcsJHJ1bm5pbmdjbGFzcykpOw0KCQl9DQoJfQ0KDQoJZnVuY3Rpb24g ZGlzcGxheSgkc3RhdGljPWZhbHNlLCAkZnV0dXJlPWZhbHNlKSB7DQoJCSRpZCA9ICgkdGhp cy0+dGFibGVJRCkgPyAnIGlkPSInLiR0aGlzLT50YWJsZUlELiciJyA6ICcnOw0KCQkkY1td ID0gJHRoaXMtPmRzcEhlYWRlcigkc3RhdGljLCAkZnV0dXJlKTsNCgkJJGNbXSA9ICR0aGlz LT5kc3BEYXlOYW1lcygpOw0KCQkkY1tdID0gJHRoaXMtPmRzcERheUNlbGxzKCk7DQoNCgkJ cmV0dXJuIGRvVGFnKGpvaW4oJycsJGMpLCd0YWJsZScsJHRoaXMtPnRhYmxlY2xhc3MsJGlk KTsNCgl9DQoNCglmdW5jdGlvbiBkc3BIZWFkZXIoJHN0YXRpYywgJGZ1dHVyZSkgew0KCQln bG9iYWwgJHByZXRleHQsICRzbWRfY2FsaW5mbzsNCg0KCQkkY3Vycm1vID0gJHRoaXMtPm1v bnRoOw0KCQkkY3VycnlyID0gJHRoaXMtPnllYXI7DQoJCSRuYXZwY2xhc3MgPSAkdGhpcy0+ Z2V0TmF2SW5mbygicGMiKTsNCgkJJG5hdm5jbGFzcyA9ICR0aGlzLT5nZXROYXZJbmZvKCJu YyIpOw0KCQkkbmF2cGFycm93ID0gJHRoaXMtPmdldE5hdkluZm8oInBhIik7DQoJCSRuYXZu YXJyb3cgPSAkdGhpcy0+Z2V0TmF2SW5mbygibmEiKTsNCgkJJG5hdmlkID0gJHRoaXMtPmdl dE5hdkluZm8oImlkIik7DQoJCSRuYXZwY2xhc3MgPSAoJG5hdnBjbGFzcykgPyAnIGNsYXNz PSInLiRuYXZwY2xhc3MuJyInIDogJyc7DQoJCSRuYXZuY2xhc3MgPSAoJG5hdm5jbGFzcykg PyAnIGNsYXNzPSInLiRuYXZuY2xhc3MuJyInIDogJyc7DQoJCSRmb3B0cyA9ICR0aGlzLT5m b3B0czsNCgkJJHNlYyA9IChpc3NldCgkc21kX2NhbGluZm9bJ3MnXSkgJiYgIWVtcHR5KCRz bWRfY2FsaW5mb1sncyddKSkgPyAkc21kX2NhbGluZm9bJ3MnXSA6ICcnOw0KCQlmb3JlYWNo ICgkdGhpcy0+bWFpbnRhaW4gYXMgJGNvbCkgew0KCQkJc3dpdGNoICgkY29sKSB7DQoJCQkJ Y2FzZSAic2VjdGlvbiI6DQoJCQkJCSRzZWMgPSAoJHByZXRleHRbJ3MnXSkgPyAkcHJldGV4 dFsncyddIDogJHNlYzsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiYXJ0aWNsZSI6DQoJCQkJ CWlmICgkcHJldGV4dFsnaWQnXSkgew0KCQkJCQkJJGZvcHRzID0gYXJyYXkoJ2lkJyA9PiAk cHJldGV4dFsnaWQnXSkgKyAkZm9wdHM7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2Fz ZSAiY2F0ZWdvcnkiOg0KCQkJCQlpZiAoJHByZXRleHRbJ2MnXSkgew0KCQkJCQkJJGZvcHRz ID0gYXJyYXkoJ2MnID0+ICRwcmV0ZXh0WydjJ10pICsgJGZvcHRzOw0KCQkJCQl9DQoJCQkJ CWJyZWFrOw0KCQkJCWNhc2UgImF1dGhvciI6DQoJCQkJCWlmIChncHMoJ2F1dGhvcicpKSB7 DQoJCQkJCQkkZm9wdHMgPSBhcnJheSgnYXV0aG9yJyA9PiBncHMoJ2F1dGhvcicpKSArICRm b3B0czsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICJwZyI6DQoJCQkJCWlmICgk cHJldGV4dFsncGcnXSkgew0KCQkJCQkJJGZvcHRzID0gYXJyYXkoJ3BnJyA9PiAkcHJldGV4 dFsncGcnXSkgKyAkZm9wdHM7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiY2Fs aWQiOg0KCQkJCQlpZiAoJHRoaXMtPnRhYmxlSUQpIHsNCgkJCQkJCSRmb3B0cyA9IGFycmF5 KCdjYWxpZCcgPT4gJHRoaXMtPnRhYmxlSUQpICsgJGZvcHRzOw0KCQkJCQl9DQoJCQkJCWJy ZWFrOw0KCQkJCWRlZmF1bHQ6DQoJCQkJCWlmIChncHMoJGNvbCkpIHsNCgkJCQkJCSRmb3B0 cyA9IGFycmF5KCRjb2wgPT4gZ3BzKCRjb2wpKSArICRmb3B0czsNCgkJCQkJfQ0KCQkJCQli cmVhazsNCgkJCX0NCgkJfQ0KCQkkZm9wdHMgPSBhcnJheV91bmlxdWUoJGZvcHRzKTsNCgkJ JGZpbHRlcnMgPSBhcnJheSgpOw0KCQkkZmlsdGVySGlkID0gYXJyYXkoKTsNCgkJaWYgKCEk c3RhdGljKSB7DQoJCQlmb3JlYWNoKCRmb3B0cyBhcyAka2V5ID0+ICR2YWwpIHsNCgkJCQkk ZmlsdGVyc1tdID0gJGtleS4nPScuJHZhbDsNCgkJCQkkZmlsdGVySGlkW10gPSBoSW5wdXQo JGtleSwgJHZhbCk7DQoJCQl9DQoJCX0NCgkJJGZpbHRlclVSTCA9IGpvaW4oYSwgJGZpbHRl cnMpOw0KDQoJCS8vIFdlZWsgc2VsZWN0IGxpc3QNCgkJaWYgKCR0aGlzLT51c2VTZWxlY3Rv cignd2VlaycpICYmICEkc3RhdGljKSB7DQoJCQkkY3VycndrID0gKCR0aGlzLT53ZWVrKSA/ ICR0aGlzLT53ZWVrIDogZGF0ZSgnVycsIHN0cnRvdGltZSggJGN1cnJ5ci4iLSIuJGN1cnJt by4iLTEgMTI6MDAiICkpOw0KCQkJZm9yICggJGlkeCA9IDE7ICRpZHggPD0gNTM7ICRpZHgr KyApIHsNCgkJCQkkdGFnYXR0cyA9ICcgdmFsdWU9IicuJGlkeC4nIic7DQoJCQkJaWYgKCAk aWR4ID09ICRjdXJyd2sgKSAkdGFnYXR0cyAuPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOw0K CQkJCSRvcHRpb250YWdzW10gPSBkb1RhZygkdGhpcy0+c2VscGZ4Wyd3ZWVrJ10uc3RyX3Bh ZCgkaWR4LCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuJHRoaXMtPnNlbHNmeFsnd2VlayddLCAn b3B0aW9uJywgJycsICR0YWdhdHRzKTsNCgkJCX0NCgkJCSRzZWxlY3RvcltdID0gZG9UYWco am9pbihuLCAkb3B0aW9udGFncyksICdzZWxlY3QnLCAoKCR0aGlzLT5teXdyYXB0YWcpID8g JycgOiAkdGhpcy0+bXljbGFzcyksICcgbmFtZT0idyInLigoJHRoaXMtPnNlbGJ0bikgPyAn JyA6ICcgb25jaGFuZ2U9InN1Ym1pdCgpIicpLCAnJykNCiAgIAkJCQkuICgoJHRoaXMtPnVz ZVNlbGVjdG9yKCd5ZWFyJykpID8gJycgOiBoSW5wdXQoJ3knLCAkY3VycnlyKSk7DQoJCQkk b3B0aW9udGFncyA9IGFycmF5KCk7IC8vIEJsYW5rIG91dA0KCQl9DQoNCgkJLy8gTW9udGgg c2VsZWN0IGxpc3QgLSBub3RlIG1rdGltZSBoYXMgdGhlIGRheSBmb3JjZWQgdG8gMS4gSWYg bm90IHlvdSBnZXQNCgkJLy8gYml6YXJyZSByZXBlYXRlZCBtb250aCBuYW1lcyBvbiB0aGUg MzFzdCBvZiBzb21lIG1vbnRocyA6LVwNCgkJaWYgKCEkdGhpcy0+dXNlU2VsZWN0b3IoJ3dl ZWsnKSkgew0KCQkJaWYgKCR0aGlzLT51c2VTZWxlY3RvcignbW9udGgnKSAmJiAhJHN0YXRp Yykgew0KCQkJCWZvciAoICRpZHggPSAxOyAkaWR4IDw9IDEyOyAkaWR4KysgKSB7DQoJCQkJ CSR0YWdhdHRzID0gJyB2YWx1ZT0iJy4kaWR4LiciJzsNCgkJCQkJaWYgKCAkaWR4ID09ICRj dXJybW8gKSAkdGFnYXR0cyAuPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOw0KCQkJCQkkb3B0 aW9udGFnc1tdID0gZG9UYWcoJHRoaXMtPnNlbHBmeFsnbW9udGgnXS4oKGlzX2FycmF5KCR0 aGlzLT5tdGhOYW1lRm10KSkgPyAkdGhpcy0+bXRoTmFtZXNbZGF0ZSgnbicsZ21ta3RpbWUo MTIsMCwwLCRpZHgsMSkpXSA6IHN0cmZ0aW1lKCR0aGlzLT5tdGhOYW1lRm10LCBnbW1rdGlt ZSgxMiwwLDAsJGlkeCwxKSkpLiR0aGlzLT5zZWxzZnhbJ21vbnRoJ10sICdvcHRpb24nLCAn JywgJHRhZ2F0dHMpOw0KCQkJCX0NCgkJCQkkc2VsZWN0b3JbXSA9IGRvVGFnKGpvaW4obiwg JG9wdGlvbnRhZ3MpLCAnc2VsZWN0JywgKCgkdGhpcy0+bXl3cmFwdGFnKSA/ICcnIDogJHRo aXMtPm15Y2xhc3MpLCAnIG5hbWU9Im0iJy4oKCR0aGlzLT5zZWxidG4pID8gJycgOiAnIG9u Y2hhbmdlPSJzdWJtaXQoKSInKSwgJycpDQoJICAgCQkJCS4gKCgkdGhpcy0+dXNlU2VsZWN0 b3IoJ3llYXInKSkgPyAnJyA6IGhJbnB1dCgneScsICRjdXJyeXIpKTsNCgkJCQkkb3B0aW9u dGFncyA9IGFycmF5KCk7IC8vIEJsYW5rIG91dA0KCQkJfSBlbHNlIHsNCgkJCQkkc2VsZWN0 b3JbXSA9IGRvVGFnKCR0aGlzLT5nZXRNb250aE5hbWUoKSwgJ3NwYW4nLCAoKCR0aGlzLT5t eXdyYXB0YWcpID8gJycgOiAkdGhpcy0+bXljbGFzcykpOw0KCQkJfQ0KCQl9DQoNCgkJLy8g WWVhciBzZWxlY3QgbGlzdA0KCQkkeTAgPSAkdGhpcy0+ZXlyOw0KCQkkeTEgPSAkdGhpcy0+ bHlyOw0KCQlpZiAoJHRoaXMtPnVzZVNlbGVjdG9yKCd5ZWFyJykgJiYgKCR5MCAhPSAkeTEp ICYmICEkc3RhdGljKSB7DQoJCQlmb3IgKCAkaWR4ID0gJHkwOyAkaWR4IDw9ICR5MTsgJGlk eCsrICkgew0KCQkJCSR0YWdhdHRzID0gJyB2YWx1ZT0iJy4kaWR4LiciJzsNCgkJCQlpZiAo ICRpZHggPT0gJGN1cnJ5ciApICR0YWdhdHRzIC49ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7 DQoJCQkJJG9wdGlvbnRhZ3NbXSA9IGRvVGFnKCR0aGlzLT5zZWxwZnhbJ3llYXInXS4kaWR4 LiR0aGlzLT5zZWxzZnhbJ3llYXInXSwgJ29wdGlvbicsICcnLCAkdGFnYXR0cyk7DQoJCQl9 DQoJCQkkc2VsZWN0b3JbXSA9IGRvVGFnKGpvaW4obiwgJG9wdGlvbnRhZ3MpLCAnc2VsZWN0 JywgKCgkdGhpcy0+bXl3cmFwdGFnKSA/ICcnIDogJHRoaXMtPm15Y2xhc3MpLCAnIG5hbWU9 InkiJy4oKCR0aGlzLT5zZWxidG4pID8gJycgOiAnIG9uY2hhbmdlPSJzdWJtaXQoKSInKSwg JycpDQoJCQkJCS4gKCgkdGhpcy0+dXNlU2VsZWN0b3IoJ21vbnRoJykpID8gJycgOiBoSW5w dXQoJ20nLCAkY3Vycm1vKSk7DQoJCX0gZWxzZSB7DQoJCQkkc2VsZWN0b3JbXSA9IGRvVGFn KCRjdXJyeXIsICdzcGFuJywgKCgkdGhpcy0+bXl3cmFwdGFnKSA/ICcnIDogJHRoaXMtPm15 Y2xhc3MpKTsNCgkJfQ0KDQoJCSRleHRyYXMgPSAnJzsNCgkJaWYgKCEkc3RhdGljICYmICgg JHRoaXMtPnVzZVNlbGVjdG9yKCdtb250aCcpIHx8ICR0aGlzLT51c2VTZWxlY3RvcigneWVh cicpICkpIHsNCgkJCWlmICgkdGhpcy0+c2VsYnRuKSB7DQoJCQkJJGV4dHJhcyAuPSBkb1Rh ZygnJywgJ2lucHV0JywgJ3NtZF9jYWxfaW5wdXQnLCAnIHR5cGU9InN1Ym1pdCIgdmFsdWU9 IicuJHRoaXMtPnNlbGJ0bi4nIicpOw0KCQkJfQ0KCQkJJGV4dHJhcyAuPSBqb2luKCcnLCAk ZmlsdGVySGlkKTsNCgkJfQ0KDQoJCSR1cmxwID0gcGFyc2VfdXJsKCRwcmV0ZXh0WydyZXF1 ZXN0X3VyaSddKTsNCgkJJHNlbGVjdG9yID0gJzxmb3JtIGFjdGlvbj0iJy4kdXJscFsncGF0 aCddLiciIG1ldGhvZD0iZ2V0IicuKCgkbmF2aWQpID8gJyBpZD0iJy4kbmF2aWQuJyInIDog JycpLic+Jy5kb1RhZyhqb2luKHNwLCAkc2VsZWN0b3IpLiRleHRyYXMsICR0aGlzLT5teXdy YXB0YWcsICR0aGlzLT5teWNsYXNzKS4nPC9mb3JtPic7DQoNCgkJJG5hdl9iYWNrX2xpbmsg PSAkdGhpcy0+bmF2aWdhdGlvbigkY3VycnlyLCAkY3Vycm1vLCAnLScsICRmaWx0ZXJVUkws ICRzZWMpOw0KCQkkbmF2X2Z3ZF9saW5rICA9ICR0aGlzLT5uYXZpZ2F0aW9uKCRjdXJyeXIs ICRjdXJybW8sICcrJywgJGZpbHRlclVSTCwgJHNlYyk7DQoNCgkJJG5hdl9iYWNrID0gKCEk c3RhdGljICYmICRuYXZfYmFja19saW5rKSA/ICc8YSBocmVmPSInLiRuYXZfYmFja19saW5r LiciJy4kbmF2cGNsYXNzLic+Jy4kbmF2cGFycm93Lic8L2E+JyA6ICcmbmJzcDsnOw0KCQkk bmF2X2Z3ZCAgPSAoISRzdGF0aWMgJiYgJGZ1dHVyZSAmJiAkbmF2X2Z3ZF9saW5rKSA/ICc8 YSBocmVmPSInLiRuYXZfZndkX2xpbmsuJyInLiRuYXZuY2xhc3MuJz4nLiRuYXZuYXJyb3cu JzwvYT4nIDogJyZuYnNwOyc7DQoNCgkJJGNbXSA9IGRvVGFnKCRuYXZfYmFjaywndGgnKTsN CgkJJGNbXSA9ICc8dGggY29sc3Bhbj0iJy4oKCR0aGlzLT5zaG93SVNPV2VlaykgPyA2IDog NSkuJyI+Jy4kc2VsZWN0b3IuJzwvdGg+JzsNCgkJJGNbXSA9IGRvVGFnKCRuYXZfZndkLCd0 aCcpOw0KDQoJCXJldHVybiBkb1RhZyhqb2luKCcnLCRjKSwndHInLCAnc21kX2NhbF9uYXZy b3cnKTsNCgl9DQoNCglmdW5jdGlvbiBuYXZpZ2F0aW9uKCR5ZWFyLCRtb250aCwkZGlyZWN0 aW9uLCRmbHQsJHNlYz0nJykgew0KCQlnbG9iYWwgJHBlcm1saW5rX21vZGU7DQoNCgkJaWYo JGRpcmVjdGlvbiA9PSAnLScpIHsNCgkJCWlmKCRtb250aCAtIDEgPCAxKSB7DQoJCQkJJG1v bnRoID0gMTI7DQoJCQkJJHllYXIgLT0gMTsNCgkJCX0gZWxzZSB7DQoJCQkJJG1vbnRoIC09 IDE7DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQlpZigkbW9udGggKyAxID4gMTIpIHsNCgkJCQkk bW9udGggPSAxOw0KCQkJCSR5ZWFyICs9IDE7DQoJCQl9IGVsc2Ugew0KCQkJCSRtb250aCAr PSAxOw0KCQkJfQ0KCQl9DQoNCgkJLy8gQWJvcnQgaWYgd2UncmUgYWJvdXQgdG8gZ28gb3V0 IG9mIHJhbmdlDQoJCWlmICgkeWVhciA8ICR0aGlzLT5leXIgfHwgJHllYXIgPiAkdGhpcy0+ bHlyKSB7DQoJCQlyZXR1cm4gJyc7DQoJCX0NCgkJJGZsdCA9ICgkZmx0KSA/IGEuJGZsdCA6 ICcnOw0KCQlpZigkcGVybWxpbmtfbW9kZSAhPSAnbWVzc3knKSB7DQoJCQkkdXJsID0gJyc7 DQoJCQlpZiAoJHNlYyAmJiBzdHJwb3MoJHBlcm1saW5rX21vZGUsICdzZWN0aW9uJyAhPT0g ZmFsc2UpKSB7DQoJCQkJJHVybCA9IGh1LiRzZWMuJy8nLigoJHBlcm1saW5rX21vZGU9PSdz ZWN0aW9uX2lkX3RpdGxlJykgPyAkc21kX2NhbGluZm9bJ2FydGlkJ10gOiAnJykuJHNtZF9j YWxpbmZvWydhcnRpdGxlJ107DQoJCQl9DQoJCQlyZXR1cm4gJHVybC4iP209JG1vbnRoIi5h LiJ5PSR5ZWFyIi4kZmx0Ow0KCQl9IGVsc2UgeyAvLyBmb3IgbWVzc3kgVVJMcyB3ZSBuZWVk IHRvIGJ1aWxkIHRoZSBlbnRpcmUgcmVxdWVzdCBzdHJpbmcgZmlyc3QsIHRoZW4gdGFjayBv biB0aGUgcmVzdA0KCQkJJG91dCA9IG1ha2VPdXQoJ2lkJywncycsJ2MnLCdxJywncGcnLCdw JywnbW9udGgnKTsNCgkJCSRvdXRbJ3MnXSA9ICgkc2VjKSA/ICRzZWMgOiAkb3V0WydzJ107 DQoJCQkkciA9ICc/JzsNCgkJCWZvcmVhY2goJG91dCBhcyAka2V5ID0+ICR2YWwgKSB7DQoJ CQkJJHIgLj0gKCR2YWwpID8gIiRrZXk9JHZhbCIuYSA6ICcnOw0KCQkJfQ0KCQkJcmV0dXJu ICRyLiJtPSRtb250aCIuYS4ieT0keWVhciIuJGZsdDsNCgkJfQ0KCX0NCn0NCg0KY2xhc3Mg U01EX1NtYWxsX0NhbGVuZGFyIGV4dGVuZHMgU01EX0NhbGVuZGFyIHsNCgl2YXIgJHNlY3Rp b24gPSAnJzsNCgl2YXIgJGNhdGVnb3J5ID0gJyc7DQoJZnVuY3Rpb24gU01EX1NtYWxsX0Nh bGVuZGFyKCR5ZWFyLCRtb250aCwkZXZlbnRzLCRzZWN0aW9uLCRjYXRlZ29yeSkgew0KCQkk dGhpcy0+c2VjdGlvbiA9ICRzZWN0aW9uOw0KCQkkdGhpcy0+Y2F0ZWdvcnkgPSAkY2F0ZWdv cnk7DQoJCSR0aGlzLT5TTURfQ2FsZW5kYXIoJHllYXIsJG1vbnRoLCRldmVudHMpOw0KCX0N Cg0KCWZ1bmN0aW9uIGRzcERheUNlbGwoJHRoZWRheSkgew0KCQlnbG9iYWwgJHBlcm1saW5r X21vZGU7DQoNCgkJJGhhc2FydGljbGUgPSBpc3NldCgkdGhpcy0+ZXZlbnRzWyR0aGVkYXld KTsNCgkJJGNsYXNzW10gPSAkdGhpcy0+Y2VsbGNsYXNzLicgJyAuICgoJGhhc2FydGljbGUp ID8gJHRoaXMtPmNsYXNzcHJlZml4LidldmVudCcgOiAnJyk7DQoJCWlmICgoaW5fYXJyYXko IGRhdGUoJ2QtTS1ZJywgZ21ta3RpbWUoIDAsIDAsIDAsICR0aGlzLT5tb250aCwgJHRoZWRh eSwgJHRoaXMtPnllYXIpICksICR0aGlzLT5ob2xpZGF5cykpICkgew0KCQkJJGNsYXNzW10g PSAkdGhpcy0+Y2xhc3NwcmVmaXguJ2hvbHMnOw0KCQl9DQoJCWlmKCR0aGlzLT55ZWFyID09 IGRhdGUoJ1knLHRpbWUoKSt0el9vZmZzZXQoKSApIGFuZCAkdGhpcy0+bW9udGggPT0gZGF0 ZSgnbicsdGltZSgpK3R6X29mZnNldCgpICkgYW5kICR0aGVkYXkgPT0gZGF0ZSgnaicsdGlt ZSgpK3R6X29mZnNldCgpKSApIHsNCgkJCSRjbGFzc1tdID0gJHRoaXMtPmNsYXNzcHJlZml4 Lid0b2RheSc7DQoJCX0NCg0KCQlpZiggaXNzZXQoJHRoaXMtPmV2ZW50c1skdGhlZGF5XSkg KSB7DQoJCQkkZGF5c19ldmVudHMgPSAkdGhpcy0+ZXZlbnRzWyR0aGVkYXldOw0KCQkJZm9y ZWFjaCgkZGF5c19ldmVudHMgYXMgJGV2KSB7DQoJCQkJJGV2Y2xhc3MgPSB0cmltKCRldlsn Y2xhc3NlcyddKTsNCgkJCQlmb3JlYWNoIChleHBsb2RlKCcgJywgJGV2Y2xhc3MpIGFzICRl dmMpIHsNCgkJCQkJJGNsYXNzW109ICRldmM7DQoJCQkJfQ0KDQoJCQkJJG91dFtdID0gKCR0 aGlzLT5ldndyYXB0YWcpID8gdGFnKCRldlsnZXYnXSwgJHRoaXMtPmV2d3JhcHRhZywgKCgk ZXZjbGFzcykgPyAnIGNsYXNzPSInLnRyaW0oJGV2Y2xhc3MpLiciJyA6ICcnKSkgOiAkZXZb J2V2J107DQoJCQl9DQoJCQkkdXNlX3Bvc3RlZCA9IGZhbHNlOw0KCQkJZm9yZWFjaCAoJHRo aXMtPmxpbmtwb3N0ZWQgYXMgJGRsaW5rcykgew0KCQkJCWlmIChpbl9hcnJheSgkZGxpbmtz LCAkY2xhc3MpKSB7DQoJCQkJCSR1c2VfcG9zdGVkID0gdHJ1ZTsNCgkJCQkJYnJlYWs7DQoJ CQkJfQ0KCQkJfQ0KCQkJaWYoICRwZXJtbGlua19tb2RlICE9ICd5ZWFyX21vbnRoX2RheV90 aXRsZScgKSB7DQoJCQkJJGxpbmtkYXRlID0gKCR1c2VfcG9zdGVkKSA/ICRldlsncG9zdGVk J10gOiAkdGhpcy0+eWVhci4nLScuJHRoaXMtPmRvdWJsZWRpZ2l0KCR0aGlzLT5tb250aCku Jy0nLiR0aGlzLT5kb3VibGVkaWdpdCgkdGhlZGF5KTsNCgkJCQkkaHJlZiA9ICcgaHJlZj0i Jy5odS4nP2RhdGU9Jy4kbGlua2RhdGU7DQoJCQkJaWYoJHRoaXMtPnNlY3Rpb24pIHsgJGhy ZWYgPSAkaHJlZi5hLidzPScuJHRoaXMtPnNlY3Rpb247IH0NCgkJCQlpZigkdGhpcy0+Y2F0 ZWdvcnkpIHsgJGhyZWYgPSAkaHJlZi5hLidjPScuJHRoaXMtPmNhdGVnb3J5OyB9DQoJCQkJ JGhyZWYgLj0gJyInOw0KCQkJfSBlbHNlIHsNCgkJCQkkc2VjdGlvbiA9ICgkdGhpcy0+c2Vj dGlvbikgPyAkdGhpcy0+c2VjdGlvbi4nLycgOiAnJzsNCgkJCQkkbGlua2RhdGUgPSAoJHVz ZV9wb3N0ZWQpID8gcHJlZ19yZXBsYWNlKCItIiwgIi8iLCAkZXZbJ3Bvc3RlZCddKSA6ICR0 aGlzLT55ZWFyLicvJy4kdGhpcy0+ZG91YmxlZGlnaXQoJHRoaXMtPm1vbnRoKS4nLycuJHRo aXMtPmRvdWJsZWRpZ2l0KCR0aGVkYXkpOw0KCQkJCSRocmVmID0gJyBocmVmPSInLmh1LiRz ZWN0aW9uLiRsaW5rZGF0ZS4nIic7DQoJCQl9DQoNCgkJCSRjW10gPSBkb1RhZygkdGhlZGF5 LmpvaW4oJycsJG91dCksJ2EnLCcnLCRocmVmKTsNCgkJfSBlbHNlIHsNCgkJCSRjW10gPSAk dGhlZGF5Ow0KCQl9DQoNCgkJcmV0dXJuIGRvVGFnKGpvaW4oJycsJGMpLCd0ZCcsam9pbign ICcsJGNsYXNzKSk7DQoJfQ0KDQoJZnVuY3Rpb24gZG91YmxlZGlnaXQoJG4pIHsNCgkJaWYo JG4gPCAxMCkgeyAkbiA9ICcwJy4oaW50KSRuOyB9DQoJCXJldHVybiAkbjsNCgl9DQoNCn0N Cg0KLyoqDQoqIEJhc2ljIENhbGVuZGFyIGRhdGEgYW5kIGRpc3BsYXkNCiogaHR0cDovL3d3 dy5vc2Nhcm0ub3JnL3N0YXRpYy9wZy9jYWxlbmRhckNsYXNzLw0KKiBAYXV0aG9yIE9zY2Fy IE1lcmlkYQ0KKiBAY3JlYXRlZCBKYW4gMTggMjAwNA0KKiBAcGFja2FnZSAgZ29Db3JlTGli DQoqLw0KY2xhc3MgU01EX1Jhd19DYWxlbmRhciB7DQp2YXIgJGdtdCA9IDE7DQp2YXIgJGxh bmc7DQp2YXIgJHllYXI7DQp2YXIgJGV5cjsNCnZhciAkbHlyOw0KdmFyICRtb250aDsNCnZh ciAkd2VlazsNCnZhciAkZGF5TmFtZUZtdDsNCnZhciAkbXRoTmFtZUZtdDsNCnZhciAkZGF5 TmFtZXM7DQp2YXIgJG10aE5hbWVzOw0KdmFyICRzdGFydERheTsNCnZhciAkc2VsZWN0b3Jz Ow0KdmFyICRzZWxidG47DQp2YXIgJHNlbHBmeDsNCnZhciAkc2Vsc2Z4Ow0KdmFyICRzaG93 SVNPV2VlazsNCnZhciAkSVNPV2Vla0hlYWQ7DQp2YXIgJElTT1dlZWtDZWxsOw0KdmFyICRl bmREYXk7DQp2YXIgJGZpcnN0RGF5T2ZXZWVrID0gMDsNCnZhciAkc3RhcnRPZmZzZXQgPSAw Ow0KdmFyICRjbGFzc2xldmVsczsNCnZhciAkY2xhc3NwcmVmaXg7DQp2YXIgJGV2Y2xhc3Nw cmVmaXg7DQp2YXIgJGV2d3JhcHRhZzsNCnZhciAkbXl3cmFwdGFnOw0KdmFyICRyb3djbGFz czsNCnZhciAkY2VsbGNsYXNzOw0KdmFyICRlbXB0eWNsYXNzOw0KdmFyICRpc29jbGFzczsN CnZhciAkbmF2cGNsYXNzOw0KdmFyICRuYXZuY2xhc3M7DQp2YXIgJG5hdnBhcnJvdzsNCnZh ciAkbmF2bmFycm93Ow0KdmFyICRuYXZpZDsNCnZhciAkbXljbGFzczsNCnZhciAkZm9wdHM7 DQp2YXIgJGhvbGlkYXlzOw0KdmFyICRsaW5rcG9zdGVkOw0KdmFyICRjZWxsZm9ybTsNCnZh ciAkdGFibGVJRDsNCnZhciAkbWFpbnRhaW47DQovKioNCiogQ29uc3RydWN0b3INCioNCiog QHBhcmFtIGludGVnZXIsIHllYXINCiogQHBhcmFtIGludGVnZXIsIG1vbnRoDQoqIEByZXR1 cm4gb2JqZWN0DQoqIEBwdWJsaWMNCiovDQpmdW5jdGlvbiBTTURfUmF3X0NhbGVuZGFyICgg JHlyLCAkbW8gKSB7DQoJJHRoaXMtPnNldFllYXIoJHlyKTsNCgkkdGhpcy0+c2V0TW9udGgo JG1vKTsNCgkkdGhpcy0+c2V0Q2xhc3NQcmVmaXgoJ3NtZF9jYWxfJyk7DQoNCgkkdGhpcy0+ c3RhcnRUaW1lID0gc3RydG90aW1lKCAiJHlyLSRtby0wMSAwMDowMCIgKTsNCgkkdGhpcy0+ c3RhcnREYXkJPSBkYXRlKCAnRCcsICR0aGlzLT5zdGFydFRpbWUgKTsNCgkkdGhpcy0+ZW5k RGF5ID0gZGF0ZSggJ3QnLCAkdGhpcy0+c3RhcnRUaW1lICk7DQoJJHRoaXMtPmVuZFRpbWUg ICA9IHN0cnRvdGltZSggIiR5ci0kbW8tIi4kdGhpcy0+ZW5kRGF5LiIgMjM6NTkiICk7DQoN CgkkdGhpcy0+c2V0TmFtZUZvcm1hdCgnJWEnLCAnZCcpOw0KCSR0aGlzLT5zZXROYW1lRm9y bWF0KCclQicsICdtJyk7DQoJJHRoaXMtPnNldEZpcnN0RGF5T2ZXZWVrKDApOw0KCSR0aGlz LT5zZXRTaG93SVNPV2VlaygnJyk7DQoJJHRoaXMtPnNldFRhYmxlSUQoJycpOw0KCSR0aGlz LT5zZXRUYWJsZUNsYXNzKCcnKTsNCn0NCi8vID09PT0gZW5kIENhbGVuZGFyID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLy8gR2V0dGVycw0K ZnVuY3Rpb24gdXNlU2VsZWN0b3IoJHZhbCkgeyByZXR1cm4gaW5fYXJyYXkoJHZhbCwgJHRo aXMtPnNlbGVjdG9ycyk7IH0NCmZ1bmN0aW9uIGdldERheU5hbWUoJGRheSkgeyByZXR1cm4g KCR0aGlzLT5kYXlOYW1lc1skZGF5JTddKTsgfQ0KZnVuY3Rpb24gZ2V0TW9udGhOYW1lKCkg ew0KCWlmIChpc19hcnJheSgkdGhpcy0+bXRoTmFtZUZtdCkpIHsNCgkJcmV0dXJuICR0aGlz LT5tdGhOYW1lc1tkYXRlKCduJywkdGhpcy0+c3RhcnRUaW1lKV07DQoJfSBlbHNlIHsNCgkJ cmV0dXJuIHN0cmZ0aW1lKCR0aGlzLT5tdGhOYW1lRm10LCAkdGhpcy0+c3RhcnRUaW1lKTsN Cgl9DQp9DQpmdW5jdGlvbiBnZXROYXZJbmZvKCR0eXBlKSB7DQoJJHIgPSAnJzsNCglzd2l0 Y2ggKCR0eXBlKSB7DQoJCWNhc2UgImlkIjogJHIgPSAkdGhpcy0+bmF2aWQ7IGJyZWFrOw0K CQljYXNlICJwYyI6ICRyID0gJHRoaXMtPm5hdnBjbGFzczsgYnJlYWs7DQoJCWNhc2UgIm5j IjogJHIgPSAkdGhpcy0+bmF2bmNsYXNzOyBicmVhazsNCgkJY2FzZSAicGEiOiAkciA9ICR0 aGlzLT5uYXZwYXJyb3c7IGJyZWFrOw0KCQljYXNlICJuYSI6ICRyID0gJHRoaXMtPm5hdm5h cnJvdzsgYnJlYWs7DQoJfQ0KCXJldHVybiAkcjsNCn0NCi8vIFNldHRlcnMNCmZ1bmN0aW9u IHNldEdNVCgkYil7ICR0aGlzLT5nbXQgPSAkYjsgfQ0KZnVuY3Rpb24gc2V0TGFuZygkY29k ZSl7ICR0aGlzLT5sYW5nID0gJGNvZGU7IH0NCmZ1bmN0aW9uIHNldENlbGxGb3JtKCRmcm0p eyAkdGhpcy0+Y2VsbGZvcm0gPSAkZnJtOyB9DQpmdW5jdGlvbiBzZXRUYWJsZUlEKCRpZCl7 ICR0aGlzLT50YWJsZUlEID0gJGlkOyB9DQpmdW5jdGlvbiBzZXRZZWFyKCR5cil7ICR0aGlz LT55ZWFyID0gJHlyOyB9DQpmdW5jdGlvbiBzZXRFWWVhcigkeXIpeyAkdGhpcy0+ZXlyID0g JHlyOyB9DQpmdW5jdGlvbiBzZXRMWWVhcigkeXIpeyAkdGhpcy0+bHlyID0gJHlyOyB9DQpm dW5jdGlvbiBzZXRNb250aCgkbXRoKXsgJHRoaXMtPm1vbnRoID0gKGludCkkbXRoOyB9DQpm dW5jdGlvbiBzZXRXZWVrKCR3ayl7DQoJaWYgKCR3aykgew0KCQkkd2sgPSBzdHJfcGFkKCR3 aywgMiwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkkdGhpcy0+d2VlayA9ICR3azsNCgkJJHRo aXMtPm1vbnRoID0gc2FmZV9zdHJmdGltZSgiJW0iLCBzdHJ0b3RpbWUoJHRoaXMtPnllYXIu IlciLiR3aykpOw0KCX0NCn0NCmZ1bmN0aW9uIHNldE5hdktlZXAoJGFyKXsgJHRoaXMtPm1h aW50YWluID0gJGFyOyB9DQpmdW5jdGlvbiBzZXRTaG93SVNPV2VlaygkdmFsKSB7DQoJJHRo aXMtPnNob3dJU09XZWVrID0gKCR2YWwpID8gdHJ1ZSA6IGZhbHNlOw0KCWlmICgkdmFsKSB7 DQoJCSR2YWwgPSBkb19saXN0KCR2YWwpOw0KCQkkdGhpcy0+SVNPV2Vla0hlYWQgPSAkdmFs WzBdOw0KCQkkdGhpcy0+SVNPV2Vla0NlbGwgPSAoaXNzZXQoJHZhbFsxXSkpID8gJHZhbFsx XSA6ICd7d2Vla30nOw0KCX0NCn0NCmZ1bmN0aW9uIHNldENsYXNzTGV2ZWxzKCRjbHMpeyAk dGhpcy0+Y2xhc3NsZXZlbHMgPSAkY2xzOyB9DQpmdW5jdGlvbiBzZXRDbGFzc1ByZWZpeCgk Y2xzKXsgJHRoaXMtPmNsYXNzcHJlZml4ID0gJGNsczsgfQ0KZnVuY3Rpb24gc2V0RXZlbnRQ cmVmaXgoJGNscyl7ICR0aGlzLT5ldmNsYXNzcHJlZml4ID0gJGNsczsgfQ0KZnVuY3Rpb24g c2V0RXZlbnRXcmFwdGFnKCR3cmFwKXsgJHRoaXMtPmV2d3JhcHRhZyA9ICR3cmFwOyB9DQpm dW5jdGlvbiBzZXRNWVdyYXB0YWcoJHdyYXApeyAkdGhpcy0+bXl3cmFwdGFnID0gJHdyYXA7 IH0NCmZ1bmN0aW9uIHNldFRhYmxlQ2xhc3MoJGNscykgeyAkdGhpcy0+dGFibGVjbGFzcyA9 ICgkY2xzKSA/ICR0aGlzLT5jbGFzc3ByZWZpeC4kY2xzIDogJyc7IH0NCmZ1bmN0aW9uIHNl dFJvd0NsYXNzKCRjbHMpeyAkdGhpcy0+cm93Y2xhc3MgPSAoJGNscykgPyAkdGhpcy0+Y2xh c3NwcmVmaXguJGNscyA6ICcnOyB9DQpmdW5jdGlvbiBzZXRDZWxsQ2xhc3MoJGNscyl7ICR0 aGlzLT5jZWxsY2xhc3MgPSAoJGNscykgPyAkdGhpcy0+Y2xhc3NwcmVmaXguJGNscyA6ICcn OyB9DQpmdW5jdGlvbiBzZXRFbXB0eUNsYXNzKCRjbHMpeyAkdGhpcy0+ZW1wdHljbGFzcyA9 ICgkY2xzKSA/ICR0aGlzLT5jbGFzc3ByZWZpeC4kY2xzIDogJyc7IH0NCmZ1bmN0aW9uIHNl dElTT1dlZWtDbGFzcygkY2xzKXsgJHRoaXMtPmlzb2NsYXNzID0gKCRjbHMpID8gJHRoaXMt PmNsYXNzcHJlZml4LiRjbHMgOiAnJzsgfQ0KZnVuY3Rpb24gc2V0TmF2SW5mbygkY2xzcCwg JGNsc24sICRhcnJwLCAkYXJybiwgJG5pZCl7DQoJJHRoaXMtPm5hdnBjbGFzcyA9ICgkY2xz cCkgPyAkdGhpcy0+Y2xhc3NwcmVmaXguJGNsc3AgOiAnJzsNCgkkdGhpcy0+bmF2bmNsYXNz ID0gKCRjbHNuKSA/ICR0aGlzLT5jbGFzc3ByZWZpeC4kY2xzbiA6ICcnOw0KCSR0aGlzLT5u YXZwYXJyb3cgPSAoJGFycnApID8gJGFycnAgOiAnJzsNCgkkdGhpcy0+bmF2bmFycm93ID0g KCRhcnJuKSA/ICRhcnJuIDogJyc7DQoJJHRoaXMtPm5hdmlkID0gKCRuaWQpID8gJHRoaXMt PmNsYXNzcHJlZml4LiRuaWQgOiAnJzsNCn0NCmZ1bmN0aW9uIHNldE1ZQ2xhc3MoJGNscyl7 ICR0aGlzLT5teWNsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNsYXNzcHJlZml4LiRjbHMgOiAn JzsgfQ0KZnVuY3Rpb24gc2V0RmlsdGVyT3B0cygkZikgeyAkdGhpcy0+Zm9wdHMgPSAkZjsg fQ0KZnVuY3Rpb24gc2V0TGlua1Bvc3RlZCgkZGwpIHsNCglmb3JlYWNoICgkZGwgYXMgJGR2 YWwpIHsNCgkJJHRoaXMtPmxpbmtwb3N0ZWRbXSA9ICR0aGlzLT5jbGFzc3ByZWZpeC4kZHZh bDsNCgl9DQp9DQpmdW5jdGlvbiBzZXRIb2xpZGF5cygkaG9scykgeyAkdGhpcy0+aG9saWRh eXMgPSAkaG9sczsgfQ0KZnVuY3Rpb24gc2V0U2VsZWN0b3JzKCRzZWwsICRidG4pIHsNCglm b3JlYWNoICgkc2VsIGFzICRpZHggPT4gJGl0ZW0pIHsNCgkJJHNlbHBhcnRzID0gZXhwbG9k ZSgiOiIsICRpdGVtKTsNCgkJJHNlbFskaWR4XSA9ICRzZWxwYXJ0c1swXTsNCgkJJHRoaXMt PnNlbHBmeFskc2VscGFydHNbMF1dID0gKGlzc2V0KCRzZWxwYXJ0c1sxXSkpID8gJHNlbHBh cnRzWzFdIDogJyc7DQoJCSR0aGlzLT5zZWxzZnhbJHNlbHBhcnRzWzBdXSA9IChpc3NldCgk c2VscGFydHNbMl0pKSA/ICRzZWxwYXJ0c1syXSA6ICcnOw0KCX0NCgkkdGhpcy0+c2VsZWN0 b3JzID0gJHNlbDsNCgkkdGhpcy0+c2VsYnRuID0gJGJ0bjsNCn0NCmZ1bmN0aW9uIHNldEZp cnN0RGF5T2ZXZWVrKCRkKSB7DQoJJHRoaXMtPmZpcnN0RGF5T2ZXZWVrID0gKChpbnQpJGQg PD0gNiBhbmQgKGludCkkZCA+PSAwKSA/IChpbnQpJGQgOiAwOw0KDQoJJHRoaXMtPnN0YXJ0 T2Zmc2V0ID0gZGF0ZSggJ3cnLCAkdGhpcy0+c3RhcnRUaW1lICktJHRoaXMtPmZpcnN0RGF5 T2ZXZWVrOw0KCWlmICggJHRoaXMtPnN0YXJ0T2Zmc2V0IDwgMCApIHsNCgkJJHRoaXMtPnN0 YXJ0T2Zmc2V0ID0gNyAtIGFicygkdGhpcy0+c3RhcnRPZmZzZXQpOw0KCX0NCn0NCi8qKg0K KiBmcm06IGFueSB2YWxpZCBQSFAgc3RyZnRpbWUoKSBzdHJpbmcgb3IgQUJCUi9GVUxMDQoq IHR5cDogZCB0byBzZXQgZGF5LCBtIHRvIHNldCBtb250aCBmb3JtYXQNCiovDQpmdW5jdGlv biBzZXROYW1lRm9ybWF0KCRmcm0sICR0eXA9ImQiKSB7DQoJc3dpdGNoICgkZnJtKSB7DQoJ CWNhc2UgImZ1bGwiOg0KCQljYXNlICJGVUxMIjoNCgkJCSRmbXQgPSAoJHR5cCA9PSAnZCcp ID8gIiVBIiA6ICIlQiI7DQoJCQlicmVhazsNCgkJY2FzZSAiYWJiciI6DQoJCWNhc2UgIkFC QlIiOg0KCQkJJGZtdCA9ICgkdHlwID09ICdkJykgPyAiJWEiIDogIiViIjsNCgkJCWJyZWFr Ow0KCQlkZWZhdWx0Og0KCQkJaWYgKHN0cnBvcygkZnJtLCAnJScpID09PSAwKSB7DQoJCQkJ JGZtdCA9ICRmcm07DQoJCQl9IGVsc2Ugew0KCQkJCSRmcm0gPSB0cmltKCRmcm0sICd7fScp Ow0KCQkJCSRmcm0gPSBkb19saXN0KCRmcm0pOw0KCQkJCSRmbXQgPSAkZnJtOw0KCQkJfQ0K CQkJYnJlYWs7DQoJfQ0KDQoJaWYgKCR0eXAgPT0gImQiKSB7DQoJCSR0aGlzLT5kYXlOYW1l Rm10ID0gJGZtdDsNCgkJJHRoaXMtPmRheU5hbWVzID0gYXJyYXkoKTsNCg0KCQkvLyBUaGlz IGlzIGRvbmUgdG8gbWFrZSBzdXJlIFN1bmRheSBpcyBhbHdheXMgdGhlIGZpcnN0IGRheSBv ZiBvdXIgYXJyYXkNCgkJLy8gVW5peCB0aW1lIGdldHMgYSBsaXR0bGUgZnVua3kgYXQgdGhl IGJlZ2lubmluZyBkZXBlbmRpbmcgdXBvbiB0aGUgdGltZXpvbmUuDQoJCSRzZXJ2ZXJvZmZz ZXQgPSBnbW1rdGltZSgwLDAsMCkgLSBta3RpbWUoMCwwLDApOw0KCQkkc3RhcnQgPSAoJHNl cnZlcm9mZnNldCA8IDApID8gNCA6IDM7DQoJCSRlbmQgPSAkc3RhcnQgKyA3Ow0KCQlmb3Io JGk9JHN0YXJ0OyAkaTwkZW5kOyAkaSsrKSB7DQoJCQlpZiAoaXNfYXJyYXkoJGZtdCkpIHsN CgkJCQkkdGhpcy0+ZGF5TmFtZXNbXSA9ICRmbXRbJGktJHN0YXJ0XTsNCgkJCX0gZWxzZSB7 DQoJCQkJJHRoaXMtPmRheU5hbWVzW10gPSB1Y2ZpcnN0KHNhZmVfc3RyZnRpbWUoJGZtdCwg ODY0MDAqJGkgLSB0el9vZmZzZXQoKSwgJHRoaXMtPmdtdCwgJHRoaXMtPmxhbmcgKSk7DQoJ CQl9DQoJCX0NCgl9IGVsc2Ugew0KCQkkdGhpcy0+bXRoTmFtZUZtdCA9ICRmbXQ7DQoJCSR0 aGlzLT5tdGhOYW1lcyA9IGFycmF5KCk7DQoJCWZvciAoJGk9MDsgJGk8MTI7ICRpKyspIHsN CgkJCWlmIChpc19hcnJheSgkZm10KSkgew0KCQkJCSR0aGlzLT5tdGhOYW1lc1skaSsxXSA9 ICRmbXRbJGldOw0KCQkJfSBlbHNlIHsNCgkJCQkkdGhpcy0+bXRoTmFtZXNbJGkrMV0gPSB1 Y2ZpcnN0KHNhZmVfc3RyZnRpbWUoJGZtdCwgODY0MDAqJGkgLSB0el9vZmZzZXQoKSwgJHRo aXMtPmdtdCwgJHRoaXMtPmxhbmcgKSk7DQoJCQl9DQoJCX0NCgl9DQp9DQovKioNCiogUmV0 dXJucyBtYXJrdXAgZm9yIGRpc3BsYXlpbmcgdGhlIGNhbGVuZGFyLg0KKiBAcmV0dXJuDQoq IEBwdWJsaWMNCiovDQpmdW5jdGlvbiBkaXNwbGF5ICggKSB7DQoJJGlkID0gKCR0aGlzLT50 YWJsZUlEKSA/ICcgaWQ9IicuJHRoaXMtPnRhYmxlSUQuJyInIDogJyc7DQoJJGNbXSA9ICc8 dGFibGUnLiRpZC4nPic7DQoJJGNbXSA9ICR0aGlzLT5kc3BEYXlOYW1lcygpOw0KCSRjW10g PSAkdGhpcy0+ZHNwRGF5Q2VsbHMoKTsNCgkkY1tdID0gJzwvdGFibGU+JzsNCg0KCXJldHVy biBqb2luKCcnLCRjKTsNCn0NCi8vID09PT0gZW5kIGRpc3BsYXkgPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQovKioNCiogRGlzcGxheXMgdGhl IHJvdyBvZiBkYXkgbmFtZXMuDQoqIEByZXR1cm4gc3RyaW5nDQoqIEBwcml2YXRlDQoqLw0K ZnVuY3Rpb24gZHNwRGF5TmFtZXMgKCApIHsNCgkkY1tdID0gJzx0ciBjbGFzcz0ic21kX2Nh bF9kYXluYW1lcyI+JzsNCg0KCSRpID0gJHRoaXMtPmZpcnN0RGF5T2ZXZWVrOw0KCSRqID0g MDsgLy8gY291bnQgbnVtYmVyIG9mIGRheXMgZGlzcGxheWVkDQoJJGVuZCA9IGZhbHNlOw0K DQoJaWYgKCR0aGlzLT5zaG93SVNPV2Vlaykgew0KCQkkY1tdID0gIjx0aD4iLiR0aGlzLT5J U09XZWVrSGVhZC4iPC90aD4iOw0KCX0NCglmb3IoJGogPSAwOyAkajw9NjsgJGorKywgJGkr Kykgew0KCQlpZigkaSA9PSA3KSB7ICRpID0gMDsgfQ0KCQkkY1tdID0gJzx0aD4nLiR0aGlz LT5nZXREYXlOYW1lKCRpKS4iPC90aD4iOw0KCX0NCg0KCSRjW10gPSAnPC90cj4nOw0KCXJl dHVybiBqb2luKCcnLCRjKTsNCn0NCi8vID09PT0gZW5kIGRzcERheU5hbWVzID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLyoqDQoqIERpc3Bs YXlzIGFsbCBkYXkgY2VsbHMgZm9yIHRoZSBtb250aA0KKg0KKiBAcmV0dXJuIHN0cmluZw0K KiBAcHJpdmF0ZQ0KKi8NCmZ1bmN0aW9uIGRzcERheUNlbGxzICggKSB7DQoJJGkgPSAwOyAv LyBjZWxsIGNvdW50ZXINCgkkZW1wdHlDbGFzcyA9ICR0aGlzLT5lbXB0eWNsYXNzOw0KCSRp c29DbGFzcyA9ICR0aGlzLT5pc29jbGFzczsNCgkkcm93Q2xhc3MgPSAkdGhpcy0+cm93Y2xh c3M7DQoJJHJvd0NsYXNzID0gKCRyb3dDbGFzcykgPyAnIGNsYXNzPSInLiRyb3dDbGFzcy4n IicgOiAnJzsNCg0KCSRjW10gPSAnPHRyJy4kcm93Q2xhc3MuJz4nOw0KDQoJaWYgKCR0aGlz LT5zaG93SVNPV2Vlaykgew0KCQkkcmVwcyA9IGFycmF5KA0KCQkJJ3t3ZWVrfScgPT4gZGF0 ZSgnVycsICR0aGlzLT5zdGFydFRpbWUpLA0KCQkJJ3ttb250aH0nID0+IGRhdGUoJ24nLCAk dGhpcy0+c3RhcnRUaW1lKSwNCgkJCSd7eWVhcn0nID0+IGRhdGUoJ1knLCAkdGhpcy0+c3Rh cnRUaW1lKSwNCgkJCSd7aXNveWVhcn0nID0+IGRhdGUoJ28nLCAkdGhpcy0+c3RhcnRUaW1l KSwNCgkJKTsNCgkJJHdrY2VsbCA9IHN0cnRyKCR0aGlzLT5JU09XZWVrQ2VsbCwgJHJlcHMp Ow0KCQkkY1tdID0gJzx0ZCBjbGFzcz0iJy4kaXNvQ2xhc3MuJyI+Jy4kd2tjZWxsLic8L3Rk Pic7DQoJfQ0KCS8vIGZpcnN0IGRpc3BsYXkgZW1wdHkgY2VsbHMgYmFzZWQgb24gd2hhdCB3 ZWVrZGF5IHRoZSBtb250aCBzdGFydHMgaW4NCglmb3IoICRqPTA7ICRqPCR0aGlzLT5zdGFy dE9mZnNldDsgJGorKyApCXsNCgkJJGkrKzsNCgkJJGNbXSA9ICc8dGQgY2xhc3M9IicuJGVt cHR5Q2xhc3MuJyI+Jm5ic3A7PC90ZD4nOw0KCX0gLy8gZW5kIG9mZnNldCBjZWxscw0KDQoJ Ly8gd3JpdGUgb3V0IHRoZSByZXN0IG9mIHRoZSBkYXlzLCBhdCBlYWNoIHN1bmRheSwgc3Rh cnQgYSBuZXcgcm93Lg0KCWZvciggJGQ9MTsgJGQ8PSR0aGlzLT5lbmREYXk7ICRkKysgKSB7 DQoJCSRpKys7DQoJCSRjW10gPSAkdGhpcy0+ZHNwRGF5Q2VsbCggJGQgKTsNCgkJaWYgKCAk aSU3ID09IDAgKSB7ICRjW10gPSAnPC90cj4nOyB9DQoJCWlmICggJGQ8JHRoaXMtPmVuZERh eSAmJiAkaSU3ID09IDAgKSB7DQoJCQkkY1tdID0gJzx0cicuJHJvd0NsYXNzLic+JzsNCgkJ CWlmICgkdGhpcy0+c2hvd0lTT1dlZWspIHsNCgkJCQkkdGhlVGltZSA9IHN0cnRvdGltZSgk dGhpcy0+eWVhci4iLSIuJHRoaXMtPm1vbnRoLiItIi4oaW50KSgkZCArIDEpIC4iIDAwOjAw Iik7DQoJCQkJJHJlcHMgPSBhcnJheSgNCgkJCQkJJ3t3ZWVrfScgPT4gZGF0ZSgnVycsICR0 aGVUaW1lKSwNCgkJCQkJJ3ttb250aH0nID0+IGRhdGUoJ24nLCAkdGhlVGltZSksDQoJCQkJ CSd7eWVhcn0nID0+IGRhdGUoJ1knLCAkdGhlVGltZSksDQoJCQkJCSd7aXNveWVhcn0nID0+ IGRhdGUoJ28nLCAkdGhlVGltZSksDQoJCQkJKTsNCgkJCQkkd2tjZWxsID0gc3RydHIoJHRo aXMtPklTT1dlZWtDZWxsLCAkcmVwcyk7DQoJCQkJJGNbXSA9ICc8dGQgY2xhc3M9IicuJGlz b0NsYXNzLiciPicuJHdrY2VsbC4nPC90ZD4nOw0KCQkJfQ0KCQl9DQoJfQ0KCS8vIGZpbGwg aW4gdGhlIGZpbmFsIHJvdw0KCSRsZWZ0ID0gNyAtICggJGklNyApOw0KCWlmICggJGxlZnQg PCA3KQl7DQoJCWZvciAoICRqPTA7ICRqPCRsZWZ0OyAkaisrICkJew0KCQkgICRjW10gPSAn PHRkIGNsYXNzPSInLiRlbXB0eUNsYXNzLiciPiZuYnNwOzwvdGQ+JzsNCgkJfQ0KCQkkY1td ID0gIlxuXHQ8L3RyPiI7DQoJfQ0KCXJldHVybiBqb2luKCcnLCRjKTsNCn0NCi8vID09PT0g ZW5kIGRzcERheUNlbGxzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KLyoqDQoqIG91dHB1dHMgdGhlIGNvbnRlbnRzIGZvciBhIGdpdmVuIGRh eQ0KKg0KKiBAcGFyYW0gaW50ZWdlciwgZGF5DQoqIEBhYnN0cmFjdA0KKi8NCmZ1bmN0aW9u IGRzcERheUNlbGwgKCAkZGF5ICkgew0KCXJldHVybiAnPHRkPicuJGRheS4nPC90ZD4nOw0K fQ0KLy8gPT09PSBlbmQgZGF5Q2VsbCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCn0gLy8gZW5kIGNsYXNzDQoNCi8vIFBlcmZvcm0gb25lIG9m IDIgdHlwZXMgb2YgdGVzdDogYSBmbGFnLWJhc2VkIHRlc3QsIG9yIGFuIGluZm8tYmFzZWQg dGVzdA0KZnVuY3Rpb24gc21kX2lmX2NhbCgkYXR0cywgJHRoaW5nKSB7DQoJZ2xvYmFsICRz bWRfY2FsX2ZsYWcsICRzbWRfY2FsaW5mbywgJHNtZF9kYXRlOw0KDQoJZXh0cmFjdChsQXR0 cyhhcnJheSgNCgkJJ2ZsYWcnID0+ICcnLA0KCQknY2FsaWQnID0+ICcnLA0KCQknaXNveWVh cicgPT4gJycsDQoJCSd5ZWFyJyA9PiAnJywNCgkJJ21vbnRoJyA9PiAnJywNCgkJJ3dlZWsn ID0+ICcnLA0KCQknZGF5JyA9PiAnJywNCgkJJ2xvZ2ljJyA9PiAnb3InLA0KCQknZGVidWcn ID0+ICcwJywNCgkpLCAkYXR0cykpOw0KDQoJJGZsYWcgPSBkb19saXN0KCRmbGFnKTsNCgkk Y3RyID0gJG51bSA9IDA7DQoNCglpZiAoJGRlYnVnKSB7DQoJCWRtcCgkYXR0cyk7DQoJfQ0K DQoJaWYgKCRmbGFnICYmICRmbGFnWzBdICE9ICcnKSB7DQoJCSRudW0gKz0gY291bnQoJGZs YWcpOw0KCQlmb3JlYWNoICgkZmxhZyBhcyAkd2hhdG5vdCkgew0KCQkJaWYgKGVtcHR5KCR3 aGF0bm90KSkgY29udGludWU7DQoJCQkkY3RyICs9IChpbl9hcnJheSgkd2hhdG5vdCwgJHNt ZF9jYWxfZmxhZykgfHwgKCR3aGF0bm90ID09ICdTTURfQU5ZJyAmJiAhZW1wdHkoJHNtZF9j YWxfZmxhZykpKSA/IDEgOiAwOw0KCQl9DQoJfQ0KCWlmICgkY2FsaWQpIHsNCgkJJG51bSsr Ow0KCQkkY3RyICs9ICgkc21kX2NhbGluZm9bJ2lkJ10gPT09ICRjYWxpZCkgPyAxIDogMDsN Cgl9DQoJZm9yZWFjaCAoYXJyYXkoIml5IiA9PiAiaXNveWVhciIsICJ5IiA9PiAieWVhciIs ICJtIiA9PiAibW9udGgiLCAidyIgPT4gIndlZWsiLCAiZCIgPT4gImRheSIpIGFzICRpZHgg PT4gJHRlc3QpIHsNCgkJJHRlc3RlciA9ICQkdGVzdDsNCgkJJGNvbXBhcmUgPSAkc21kX2Rh dGVbJGlkeF07DQoNCgkJaWYgKCR0ZXN0ZXIpIHsNCgkJCSRudW0rKzsNCgkJCXByZWdfbWF0 Y2goJy8oWyE9PD5dKyk/KFtcZF0rKS8nLCAkdGVzdGVyLCAkbWF0Y2hlcyk7DQoJCQlpZiAo JGRlYnVnKSB7DQoJCQkJZG1wKCJURVNUIElGOiAiLiAkY29tcGFyZS4gKCgkbWF0Y2hlc1sx XSkgPyAkbWF0Y2hlc1sxXSA6ICc9JykgLiAkbWF0Y2hlc1syXSApOw0KCQkJfQ0KCQkJc3dp dGNoICgkbWF0Y2hlc1sxXSkgew0KCQkJCWNhc2UgIiEiOg0KCQkJCQkkY3RyICs9ICgkY29t cGFyZSE9JG1hdGNoZXNbMl0pID8gMSA6IDA7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgIj4i Og0KCQkJCQkkY3RyICs9ICgkY29tcGFyZT4kbWF0Y2hlc1syXSkgPyAxIDogMDsNCgkJCQkJ YnJlYWs7DQoJCQkJY2FzZSAiPj0iOg0KCQkJCQkkY3RyICs9ICgkY29tcGFyZT49JG1hdGNo ZXNbMl0pID8gMSA6IDA7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgIjwiOg0KCQkJCQkkY3Ry ICs9ICgkY29tcGFyZTwkbWF0Y2hlc1syXSkgPyAxIDogMDsNCgkJCQkJYnJlYWs7DQoJCQkJ Y2FzZSAiPD0iOg0KCQkJCQkkY3RyICs9ICgkY29tcGFyZTw9JG1hdGNoZXNbMl0pID8gMSA6 IDA7DQoJCQkJCWJyZWFrOw0KCQkJCWRlZmF1bHQ6DQoJCQkJCSRjdHIgKz0gKCRjb21wYXJl PT0kbWF0Y2hlc1syXSkgPyAxIDogMDsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgl9DQoJ JHJlc3VsdCA9ICgoJGN0ciA9PT0gJG51bSAmJiAkbG9naWMgPT0gImFuZCIpIHx8ICRjdHIg PiAwICYmICRsb2dpYyA9PSAib3IiKSA/IHRydWUgOiBmYWxzZTsNCglyZXR1cm4gcGFyc2Uo RXZhbEVsc2UoJHRoaW5nLCAkcmVzdWx0KSk7DQp9DQoNCmZ1bmN0aW9uIHNtZF9jYWxfaW5m bygkYXR0cykgew0KCWdsb2JhbCAkcHJldGV4dCwgJHRoaXNhcnRpY2xlLCAkc21kX2NhbF9m bGFnLCAkc21kX2NhbGluZm8sICRzbWRfZGF0ZTsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXko DQoJCSd0eXBlJyA9PiAnZmxhZycsDQoJCSdqb2luJyA9PiAnICcsDQoJCSdqb2luX3ByZWZp eCcgPT4gJ1NNRF9BVVRPJywNCgkJJ2h0bWwnID0+IDAsDQoJCSdlc2NhcGUnID0+ICdodG1s JywNCgkpLCAkYXR0cykpOw0KDQoJLy8gVHlwZTogMD1kYXRlLCAxPXNtZF9jYWxpbmZvLCAy PXByZXRleHQsIDM9dGhpc2FydGljbGUsIDQob3Igb3RoZXIpPXVzZXIgdmFsdWUNCgkkbWFw ID0gYXJyYXkoDQoJCSd5ZWFyJyA9PiBhcnJheSgwLCAneScsKSwNCgkJJ2lzb3llYXInID0+ IGFycmF5KDAsICdpeScsICd5JyksDQoJCSdtb250aCcgPT4gYXJyYXkoMCwgJ20nKSwNCgkJ J3dlZWsnID0+IGFycmF5KDAsICd3JyksDQoJCSdkYXknID0+IGFycmF5KDAsICdkJyksDQoJ CSdzZWN0aW9uJyA9PiBhcnJheSgzLCAnJywgJ3MnKSwNCgkJJ2NhdGVnb3J5MScgPT4gYXJy YXkoMywgJycsICdjJyksDQoJCSdjYXRlZ29yeTInID0+IGFycmF5KDMsICcnLCAnYycpLA0K CQkndGhpc2lkJyA9PiBhcnJheSgzLCAndGhpc2lkJywgJ2lkJyksDQoJCSdhcnRpY2xlJyA9 PiBhcnJheSgxLCAnYXJ0aWQnLCAnaWQnKSwNCgkJJ2NhbGlkJyA9PiBhcnJheSgxLCAnaWQn LCAnY2FsaWQnKSwNCgkJJ2NhdGVnb3J5JyA9PiBhcnJheSgyLCAnYycpLA0KCQkncmVhbG5h bWUnID0+IGFycmF5KDIsICdhdXRob3InKSwNCgkpOw0KCSRqb2luID0gKCRodG1sKSA/IGEg OiAkam9pbjsgLy8gaHRtbCBtb2RlIGZvcmNlcyBhbXBlcnNhbmQgam9pbg0KCSR0eXBlID0g ZG9fbGlzdCgkdHlwZSk7DQoJJHJldCA9IGFycmF5KCk7DQoJZm9yZWFjaCAoJHR5cGUgYXMg JGl0ZW0pIHsNCgkJJHB0cyA9IGRvX2xpc3QoJGl0ZW0sICc6Jyk7DQoJCSRpdGVtID0gJHB0 c1swXTsNCg0KCQlpZiAoZW1wdHkoJGl0ZW0pKSBjb250aW51ZTsNCgkJLy8gRGVmYXVsdCBo dG1sIGlkDQoJCSRoaWQgPSAoaXNzZXQoJG1hcFskaXRlbV0pKSA/ICgoaXNzZXQoJG1hcFsk aXRlbV1bMl0pKSA/ICRtYXBbJGl0ZW1dWzJdIDogJG1hcFskaXRlbV1bMV0pIDogJGl0ZW07 DQoJCS8vIFVzZXItc3BlY2lmaWVkIGh0bWxpZCBvdmVycmlkZXMgaXQNCgkJJGhpZCA9IChj b3VudCgkcHRzKSA+IDEgJiYgIWVtcHR5KCRwdHNbMV0pKSA/ICRwdHNbMV0gOiAkaGlkOw0K CQlpZiAoJGl0ZW0gPT0gImZsYWciKSB7DQoJCQkkcmV0W10gPSAoKCRqb2luX3ByZWZpeD09 IlNNRF9BVVRPIikgPyAkam9pbiA6ICcnKS5qb2luKCRqb2luLCAkc21kX2NhbF9mbGFnKTsN CgkJfSBlbHNlIGlmICgkaXRlbSA9PSAiYXV0aG9yIiB8fCAkaXRlbSA9PSAicmVhbG5hbWUi KSB7DQoJCQkkY3VycmF1dGhvciA9ICgkdGhpc2FydGljbGUgPT0gTlVMTCkgPyAnJyA6IGF1 dGhvcihhcnJheSgpKTsNCgkJCWlmICgkY3VycmF1dGhvcikgew0KCQkJCSRyZXRbXSA9ICgo JGh0bWwpID8gJGhpZC4nPScgOiAnJykgLiAkY3VycmF1dGhvcjsNCgkJCX0NCgkJfSBlbHNl IGlmICgkaXRlbSA9PSAicyIpIHsNCgkJCSRzZWMgPSAoIWVtcHR5KCRwcmV0ZXh0WydzJ10p KSA/ICRwcmV0ZXh0WydzJ10gOiAoKGlzc2V0KCRzbWRfY2FsaW5mb1sncyddKSAmJiAhZW1w dHkoJHNtZF9jYWxpbmZvWydzJ10pKSA/ICRzbWRfY2FsaW5mb1sncyddIDogJycpOw0KCQkJ aWYgKCRzZWMpIHsNCgkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICRoaWQuJz0nIDogJycpIC4g JHNlYzsNCgkJCX0NCgkJfSBlbHNlIGlmIChpc3NldCgkbWFwWyRpdGVtXSkpIHsNCgkJCSR0 eXAgPSAkbWFwWyRpdGVtXVswXTsNCgkJCSRpZHggPSBlbXB0eSgkbWFwWyRpdGVtXVsxXSkg PyAkaXRlbSA6ICRtYXBbJGl0ZW1dWzFdOw0KCQkJc3dpdGNoICgkdHlwKSB7DQoJCQkJY2Fz ZSAwOg0KCQkJCQlpZiAoJHNtZF9kYXRlWyRpZHhdKSB7DQoJCQkJCQkkcmV0W10gPSAoKCRo dG1sKSA/ICRoaWQuJz0nIDogJycpIC4gJHNtZF9kYXRlWyRpZHhdOw0KCQkJCQl9DQoJCQkJ CWJyZWFrOw0KCQkJCWNhc2UgMToNCgkJCQkJaWYgKCFlbXB0eSgkc21kX2NhbGluZm9bJGlk eF0pKSB7DQoJCQkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICRoaWQuJz0nIDogJycpIC4gJHNt ZF9jYWxpbmZvWyRpZHhdOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgMjoNCgkJ CQkJaWYgKCFlbXB0eSgkcHJldGV4dFskaWR4XSkpIHsNCgkJCQkJCSRyZXRbXSA9ICgoJGh0 bWwpID8gJGhpZC4nPScgOiAnJykgLiAkcHJldGV4dFskaWR4XTsNCgkJCQkJfQ0KCQkJCQli cmVhazsNCgkJCQljYXNlIDM6DQoJCQkJCWlmICgkdGhpc2FydGljbGUgIT0gTlVMTCAmJiBp c3NldCgkdGhpc2FydGljbGVbJGlkeF0pICYmICFlbXB0eSgkdGhpc2FydGljbGVbJGlkeF0p KSB7DQoJCQkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICRoaWQuJz0nIDogJycpIC4gJHRoaXNh cnRpY2xlWyRpZHhdOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9IGVsc2UgaWYg KGFycmF5X2tleV9leGlzdHMoJGl0ZW0sICRwcmV0ZXh0KSkgew0KCQkJaWYgKCRwcmV0ZXh0 WyRpdGVtXSkgew0KCQkJCSRyZXRbXSA9ICgoJGh0bWwpID8gJGhpZC4nPScgOiAnJykgLiAk cHJldGV4dFskaXRlbV07DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQlpZiAoJHRoaXNhcnRpY2xl ICE9IE5VTEwgJiYgaXNzZXQoJHRoaXNhcnRpY2xlWyRpdGVtXSkgJiYgIWVtcHR5KCR0aGlz YXJ0aWNsZVskaXRlbV0pKSB7DQoJCQkJJHJldFtdID0gKCgkaHRtbCkgPyAkaGlkLic9JyA6 ICcnKSAuICR0aGlzYXJ0aWNsZVskaXRlbV07DQoJCQl9DQoJCX0NCgl9DQoJJHJldCA9IGFy cmF5X3VuaXF1ZSgkcmV0KTsNCgkkb3V0ID0gKCgkam9pbl9wcmVmaXg9PSJTTURfQVVUTyIp ID8gKCgkaHRtbCkgPyAnPycgOiAnJykgOiAkam9pbl9wcmVmaXgpLmpvaW4oJGpvaW4sICRy ZXQpOw0KCXJldHVybiAoJGVzY2FwZT09J2h0bWwnKSA/IGh0bWxzcGVjaWFsY2hhcnMoJG91 dCkgOiAkb3V0Ow0KfQ0KDQpmdW5jdGlvbiBzbWRfY2FsX25vdygkYXR0cykgew0KCWdsb2Jh bCAkZGF0ZWZvcm1hdDsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSdmb3JtYXQnID0+ ICRkYXRlZm9ybWF0LA0KCQknbm93JyA9PiAnJywNCgkJJ29mZnNldCcgPT4gJycsDQoJCSdn bXQnID0+ICcnLA0KCQknbGFuZycgPT4gJycsDQoJKSwgJGF0dHMpKTsNCg0KCSR0aGVEYXkg PSAoZ3BzKCdkJykgJiYgaXNfbnVtZXJpYyhncHMoJ2QnKSkpID8gKGludClncHMoJ2QnKSA6 IHNhZmVfc3RyZnRpbWUoJyVkJyk7DQoJJHRoZU1vbnRoID0gKGdwcygnbScpICYmIGlzX251 bWVyaWMoZ3BzKCdtJykpKSA/IChpbnQpZ3BzKCdtJykgOiBzYWZlX3N0cmZ0aW1lKCclbScp Ow0KCSR0aGVZZWFyID0gKGdwcygneScpICYmIGlzX251bWVyaWMoZ3BzKCd5JykpKSA/IChp bnQpZ3BzKCd5JykgOiBzYWZlX3N0cmZ0aW1lKCclWScpOw0KCWlmICgkbm93KSB7DQoJCSRu b3cgPSBzdHJfcmVwbGFjZSgiP21vbnRoIiwgZGF0ZSgnRicsIGdtbWt0aW1lKDEyLDAsMCwk dGhlTW9udGgsJHRoZURheSwkdGhlWWVhcikpLCAkbm93KTsNCgkJJG5vdyA9IHN0cl9yZXBs YWNlKCI/eWVhciIsICR0aGVZZWFyLCAkbm93KTsNCgkJJG5vdyA9IHN0cl9yZXBsYWNlKCI/ ZGF5IiwgJHRoZURheSwgJG5vdyk7DQoJCSRub3cgPSBzdHJ0b3RpbWUoJG5vdyk7DQoJfSBl bHNlIHsNCgkJJG5vdyA9IHRpbWUoKTsNCgl9DQoNCglpZiAoJG9mZnNldCkgew0KCQkkbm93 ID0gc3RydG90aW1lKCRvZmZzZXQsICRub3cpOw0KCX0NCg0KCXJldHVybiBzYWZlX3N0cmZ0 aW1lKCRmb3JtYXQsICRub3csICRnbXQsICRsYW5nKTsNCn0NCg0KLy8gU2V0IHVzZXItZGVm aW5lZCBjbGFzc2VzIGZvciBhIGNlbGwNCmZ1bmN0aW9uIHNtZF9jYWxfY2xhc3MoJGF0dHMp IHsNCglnbG9iYWwgJHNtZF9jYWxfdWNsczsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJ CSduYW1lJyA9PiAnJywNCgkpLCAkYXR0cykpOw0KDQoJJG5hbWUgPSBkb19saXN0KCRuYW1l KTsNCgkkc21kX2NhbF91Y2xzID0gYXJyYXlfbWVyZ2UoJHNtZF9jYWxfdWNscywgJG5hbWUp Ow0KfQ0KDQovLyA8dHhwOmFydGljbGVfY3VzdG9tIC8+IHJlcGxhY2VtZW50KGlzaCkgdGFn IHRoYXQgdW5kZXJzdGFuZHMgaG93IHRvIGhhbmRsZSByZWN1cnJpbmcgZXZlbnRzDQpmdW5j dGlvbiBzbWRfYXJ0aWNsZV9ldmVudCgkYXR0cywgJHRoaW5nPScnKSB7DQoJZ2xvYmFsICRw cmVmcywgJHByZXRleHQsICR0aGlzcGFnZTsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJ CSd0aW1lJyA9PiAnYW55JywNCgkJJ3R5cGUnID0+ICdzdGFuZGFyZCxyZWN1cixtdWx0aScs DQoJCSdleHBpcmVkJyA9PiAnJywNCgkJJ2lkJyA9PiAnJywNCgkJJ2NhdGVnb3J5JyA9PiAn JywNCgkJJ3NlY3Rpb24nID0+ICcnLA0KCQknYXV0aG9yJyA9PiAnJywNCgkJJ3JlYWxuYW1l JyA9PiAnJywNCgkJJ3N0YXR1cycgPT4gJ2xpdmUnLA0KCQknc29ydCcgPT4gJycsDQoJCSdm b3JtJyA9PiAnJywNCgkJJ3N0ZXBmaWVsZCcgPT4gJycsDQoJCSdza2lwZmllbGQnID0+ICcn LA0KCQknb21pdGZpZWxkJyA9PiAnJywNCgkJJ2V4dHJhZmllbGQnID0+ICcnLA0KCQknbW9u dGgnID0+ICcnLA0KCQknZnJvbScgPT4gJycsDQoJCSd0bycgPT4gJycsDQoJCSdvZmZzZXQn ID0+IDAsDQoJCSdsaW1pdCcgPT4gJzEwJywNCgkJJ2V2ZW50bGltaXQnID0+ICcxMCcsDQoJ CSdwYWdpbmcnID0+ICcxJywNCgkJJ3BhZ2VieScgPT4gJycsDQoJCSdwZ29ubHknID0+ICcn LA0KCQknd3JhcHRhZycgPT4gJycsDQoJCSdicmVhaycgPT4gJycsDQoJCSdjbGFzcycgPT4g JycsDQoJCSdkZWJ1ZycgPT4gMCwNCgkpLCAkYXR0cykpOw0KDQoJLy8gUGhhc2UgMSBmaWx0 ZXJzDQoJJGZpbHRTUUwgPSAkc3ViU1FMID0gYXJyYXkoKTsNCglpZigkY2F0ZWdvcnkpIHsN CgkJJHRtcCA9IGRvUXVvdGUoam9pbigiJywnIiwgZG9TbGFzaChkb19saXN0KCRjYXRlZ29y eSkpKSk7DQoJCSRmaWx0U1FMW10gPSAnKCBDYXRlZ29yeTEgSU4gKCcuJHRtcC4nKSBPUiBD YXRlZ29yeTIgSU4gKCcuJHRtcC4nKSApJzsNCgl9DQoJaWYoJHNlY3Rpb24pIHsNCgkJJGZp bHRTUUxbXSA9ICdTZWN0aW9uIElOICgnLmRvUXVvdGUoam9pbigiJywnIiwgZG9TbGFzaChk b19saXN0KCRzZWN0aW9uKSkpKS4nKSc7DQoJfQ0KCWlmKCRyZWFsbmFtZSkgew0KCQkkYXV0 aG9ycyA9IHNhZmVfY29sdW1uKCduYW1lJywgJ3R4cF91c2VycycsICdSZWFsTmFtZSBJTiAo Jy4gZG9RdW90ZShqb2luKCInLCciLCBkb0FycmF5KGRvX2xpc3QoJHJlYWxuYW1lKSwgJ3Vy bGRlY29kZScpKSkgLicpJyApOw0KCQkkYXV0aG9yID0gam9pbignLCcsICRhdXRob3JzKTsN Cgl9DQoJaWYoJGF1dGhvcikgew0KCQkkZmlsdFNRTFtdID0gJ0F1dGhvcklEIElOICgnLmRv UXVvdGUoam9pbigiJywnIiwgZG9TbGFzaChkb19saXN0KCRhdXRob3IpKSkpLicpJzsNCgl9 DQoJaWYoJGlkKSB7DQoJCSRmaWx0U1FMW10gPSAnSUQgSU4gKCcuam9pbignLCcsIGFycmF5 X21hcCgnaW50dmFsJywgZG9fbGlzdCgkaWQpKSkuJyknOw0KCX0NCgkkdHlwZSA9IGRvX2xp c3QoJHR5cGUpOw0KCSRwYWdlYnkgPSAoZW1wdHkoJHBhZ2VieSkgPyAkbGltaXQgOiAkcGFn ZWJ5KTsNCg0KCWZvcmVhY2ggKCR0eXBlIGFzICRldnR5cCkgew0KCQlzd2l0Y2goJGV2dHlw KSB7DQoJCQljYXNlICdzdGFuZGFyZCc6DQoJCQkJaWYgKCRzdGVwZmllbGQpIHsNCgkJCQkJ JHN1YlNRTFtdID0gIigiLiRzdGVwZmllbGQuIiA9ICcnIEFORCBFeHBpcmVzID0gIi5OVUxM REFURVRJTUUuIikiOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgJ3JlY3VyJzoNCgkJ CQlpZiAoJHN0ZXBmaWVsZCkgew0KCQkJCQkkc3ViU1FMW10gPSAiKCIuJHN0ZXBmaWVsZC4i ICE9ICcnKSI7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAnbXVsdGknOg0KCQkJCWlm ICgkc3RlcGZpZWxkKSB7DQoJCQkJCSRzdWJTUUxbXSA9ICIoIi4kc3RlcGZpZWxkLiIgPSAn JyBBTkQgRXhwaXJlcyAhPSAiLk5VTExEQVRFVElNRS4iKSI7DQoJCQkJfQ0KCQkJCWJyZWFr Ow0KCQl9DQoJfQ0KCWlmICgkc3ViU1FMKSB7DQoJCSRmaWx0U1FMW10gPSAnKCcuam9pbign IE9SICcsICRzdWJTUUwpLicpJzsNCgl9DQoNCgkkc3RhdHVzID0gKCRzdGF0dXMpID8gJHN0 YXR1cyA6ICdsaXZlJzsgLy8gaW4gY2FzZSBzdGF0dXMgaGFzIGJlZW4gZW1wdGllZA0KCSRz dGF0dXMgPSBkb19saXN0KCRzdGF0dXMpOw0KCSRzdGF0aSA9IGFycmF5KCk7DQoJZm9yZWFj aCAoJHN0YXR1cyBhcyAkc3RhdCkgew0KCQlpZiAoZW1wdHkoJHN0YXQpKSB7DQoJCQljb250 aW51ZTsNCgkJfSBlbHNlIGlmIChpc19udW1lcmljKCRzdGF0KSkgew0KCQkJJHN0YXRpW10g PSAkc3RhdDsNCgkJfSBlbHNlIHsNCgkJCSRzdGF0aVtdID0gZ2V0U3RhdHVzTnVtKCRzdGF0 KTsNCgkJfQ0KCX0NCgkkZmlsdFNRTFtdID0gJ1N0YXR1cyBJTiAoJy5kb1F1b3RlKGpvaW4o IicsJyIsICRzdGF0aSkpLicpJzsNCg0KCSRleHBpcmVkID0gKCRleHBpcmVkKSA/ICRleHBp cmVkIDogJHByZWZzWydwdWJsaXNoX2V4cGlyZWRfYXJ0aWNsZXMnXTsNCglpZiAoISRleHBp cmVkKSB7DQoJCSRmaWx0U1FMW10gPSAnKG5vdygpIDw9IEV4cGlyZXMgT1IgRXhwaXJlcyA9 ICcuTlVMTERBVEVUSU1FLicpJzsNCgl9DQoNCgkvLyBTb3J0aW5nIHJ1bGVzOiBkYXRhIGlz IHNvcnRlZCBvbmNlIGFzIGl0IGlzIGV4dHJhY3RlZCB2aWEgU1FMIGFuZCB0aGVuIGFnYWlu IGFmdGVyIHRoZSBmYWtlIGRhdGVzIGhhdmUgYmVlbiBpbnNlcnRlZA0KCSRzb3J0ID0gKGVt cHR5KCRzb3J0KSkgPyAnUG9zdGVkIGFzYycgOiAkc29ydDsNCgkkc29ydCA9IGRvX2xpc3Qo JHNvcnQpOw0KCSRzb3J0UHJlZml4ID0gIlNPUlRfIjsNCgkkc29ydE9yZGVyID0gYXJyYXko KTsNCglmb3IgKCRpZHggPSAwOyAkaWR4IDwgY291bnQoJHNvcnQpOyAkaWR4KyspIHsNCgkJ JHNvcnRpZXMgPSBleHBsb2RlKCcgJywgJHNvcnRbJGlkeF0pOw0KCQlpZiAoY291bnQoJHNv cnRpZXMpIDw9IDEpIHsNCgkJCSRzb3J0aWVzWzFdID0gImFzYyI7DQoJCX0NCgkJJHNvcnRp ZXNbMV0gPSAkc29ydFByZWZpeC4oKCRzb3J0aWVzWzFdID09ICJkZXNjIikgPyAnREVTQycg OiAnQVNDJyk7DQoJCSRzb3J0T3JkZXJbXSA9IGFycmF5KCJieSIgPT4gJHNvcnRpZXNbMF0s ICJkaXIiID0+ICRzb3J0aWVzWzFdKTsNCgl9DQoNCgkkZmlsdFNRTCA9IGpvaW4oJyBBTkQg JywgJGZpbHRTUUwpOw0KCSRmaWx0U1FMIC49ICcgT1JERVIgQlkgJy5qb2luKCcsJyxkb1Ns YXNoKCRzb3J0KSk7DQoNCgkkZ3JhYkNvbHMgPSAnKiwgdW5peF90aW1lc3RhbXAoUG9zdGVk KSBhcyB1UG9zdGVkLCB1bml4X3RpbWVzdGFtcChMYXN0TW9kKSBhcyB1TGFzdE1vZCwgdW5p eF90aW1lc3RhbXAoRXhwaXJlcykgYXMgdUV4cGlyZXMnOw0KCSRldmxpc3QgPSBzYWZlX3Jv d3MoJGdyYWJDb2xzLCAndGV4dHBhdHRlcm4nLCAkZmlsdFNRTCwgJGRlYnVnKTsNCg0KCWlm ICgkZGVidWc+Mikgew0KCQllY2hvICIrKyBSRUNPUkQgU0VUICsrIjsNCgkJZG1wKCRldmxp c3QpOw0KCX0NCgkkYWxsX2V2cyA9ICRldl90YWxseSA9IGFycmF5KCk7DQoJJG5vdyA9IHRp bWUoKTsNCg0KCS8vIFBoYXNlIDI6IGV4cGFuZCBhbnkgcmVjdXJyaW5nIGRhdGVzIGFuZCBj b2xsYXRlIGFsbCBldmVudHMgdGhhdCBmYWxsIHdpdGhpbiB0aGUgYWxsb3RlZCByYW5nZXMN Cglmb3JlYWNoICgkZXZsaXN0IGFzICRyb3cpIHsNCgkJJGV2X3Bvc3RlZCA9ICRyb3dbJ3VQ b3N0ZWQnXTsNCgkJJGV2X2V4cGlyZXMgPSAkcm93Wyd1RXhwaXJlcyddOw0KCQkkZGlmZiA9 ICgkZXZfZXhwaXJlcyA9PSAwKSA/IDAgOiAkZXZfZXhwaXJlcyAtICRldl9wb3N0ZWQ7DQoJ CSRldl9tb250aCA9IGRhdGUoJ20nLCAkZXZfcG9zdGVkKTsNCgkJJGV2X3llYXIgPSBkYXRl KCdZJywgJGV2X3Bvc3RlZCk7DQoJCSRldl9ociA9IGRhdGUoJ0gnLCAkZXZfcG9zdGVkKTsN CgkJJGV2X21uID0gZGF0ZSgnaScsICRldl9wb3N0ZWQpOw0KCQkkZXZfc2MgPSBkYXRlKCdz JywgJGV2X3Bvc3RlZCk7DQoJCSRpZ25vcmUgPSBhcnJheSgpOw0KDQoJCS8vIEdlbmVyYXRl IGEgc2tpcCBhcnJheSBmb3IgdGhpcyBldmVudA0KCQlpZiAoJHNraXBmaWVsZCAmJiAkcm93 WyRza2lwZmllbGRdICE9ICcnKSB7DQoJCQkkaWdub3JlID0gZG9fbGlzdCgkcm93WyRza2lw ZmllbGRdKTsNCgkJCWZvcmVhY2ggKCRpZ25vcmUgYXMgJGtleSA9PiAkdmFsKSB7DQoJCQkJ JGlnbm9yZVska2V5XSA9IGRhdGUoImQtTS1ZIiwgc3RydG90aW1lKCR2YWwpKTsgLy8gRm9y Y2UgZWFjaCBkYXRlIHRvIGEga25vd24gZm9ybWF0DQoJCQl9DQoJCX0NCgkJLy8gQXBwZW5k IGFueSBvbWl0dGVkIGV2ZW50cw0KCQlpZiAoJG9taXRmaWVsZCAmJiAkcm93WyRvbWl0Zmll bGRdICE9ICcnKSB7DQoJCQkkb21pdCA9IGRvX2xpc3QoJHJvd1skb21pdGZpZWxkXSk7DQoJ CQlmb3JlYWNoICgkb21pdCBhcyAka2V5ID0+ICR2YWwpIHsNCgkJCQkkaWdub3JlWyRrZXld ID0gZGF0ZSgiZC1NLVkiLCBzdHJ0b3RpbWUoJHZhbCkpOw0KCQkJfQ0KCQl9DQoJCWlmICgk ZGVidWcgPiAxICYmICRpZ25vcmUpIHsNCgkJCWVjaG8gJysrIElHTk9SRUQgREFURVMgKysn Ow0KCQkJZG1wKCRpZ25vcmUpOw0KCQl9DQoNCgkJLy8gRG9lcyB0aGUgZXZlbnQgZGVzZXJ2 ZSB0byBiZSBpbiB0aGUgcmVzdWx0cz8NCgkJaWYgKHNtZF9pbmNsdWRlX2V2ZW50KCRldl9w b3N0ZWQsICRub3csICRpZ25vcmUsICR0aW1lLCAkZnJvbSwgJHRvLCAkbW9udGgpKSB7DQoJ CQkkYWxsX2V2c1tdID0gJHJvdzsNCgkJCSRldl90YWxseVskcm93WydQb3N0ZWQnXV0gPSAo aXNzZXQoJGV2X3RhbGx5WyRyb3dbJ1Bvc3RlZCddXSkpID8gJGV2X3RhbGx5WyRyb3dbJ1Bv c3RlZCddXSsxIDogMTsNCgkJfQ0KDQoJCS8vIEFkZCBhbnkgZXh0cmEgZGF0ZXMgZm9yIHRo aXMgZXZlbnQNCgkJaWYgKCRleHRyYWZpZWxkICYmICRyb3dbJGV4dHJhZmllbGRdICE9ICcn KSB7DQoJCQkkeHRyYSA9IGRvX2xpc3QoJHJvd1skZXh0cmFmaWVsZF0pOw0KCQkJJHN0YW1w b2ZmID0gKGludCkoMzYwMCokZXZfaHIpICsgKGludCkoNjAqJGV2X21uKSArIChpbnQpJGV2 X3NjOw0KCQkJZm9yZWFjaCAoJHh0cmEgYXMgJHZhbCkgew0KCQkJCSR2YWwgPSBydHJpbSgk dmFsLCAnKycpOw0KCQkJCSR0bSA9IHN0cnRvdGltZSgkdmFsKTsNCg0KCQkJCS8vIE5vICRp Z25vcmUgZm9yIGFkZGl0aW9uYWwgZXZlbnRzLCBhcyB0aGV5IGFsd2F5cyBzaG93IHVwDQoJ CQkJaWYgKHNtZF9pbmNsdWRlX2V2ZW50KCR0bSskc3RhbXBvZmYsICRub3csIGFycmF5KCks ICR0aW1lLCAkZnJvbSwgJHRvLCAkbW9udGgpKSB7DQoJCQkJCSRmYWtlcm93ID0gJHJvdzsN CgkJCQkJJGZha2Vyb3dbJ1Bvc3RlZCddID0gZGF0ZSgiWS1tLWQgSDppOnMiLCAkdG0rJHN0 YW1wb2ZmKTsNCgkJCQkJJGZha2Vyb3dbJ3VQb3N0ZWQnXSA9ICR0bSskc3RhbXBvZmY7DQoJ CQkJCWlmICgkZGlmZiA+IDApIHsNCgkJCQkJCSRmYWtlcm93WydFeHBpcmVzJ10gPSBkYXRl KCJZLW0tZCBIOmk6cyIsICR0bSskc3RhbXBvZmYrJGRpZmYpOw0KCQkJCQkJJGZha2Vyb3db J3VFeHBpcmVzJ10gPSAkdG0rJHN0YW1wb2ZmKyRkaWZmOw0KCQkJCQl9DQoJCQkJCSRhbGxf ZXZzW10gPSAkZmFrZXJvdzsNCgkJCQkJJGV2X3RhbGx5WyRmYWtlcm93WydQb3N0ZWQnXV0g PSAoaXNzZXQoJGV2X3RhbGx5WyRmYWtlcm93WydQb3N0ZWQnXV0pKSA/ICRldl90YWxseVsk ZmFrZXJvd1snUG9zdGVkJ11dKzEgOiAxOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCWlmICgk c3RlcGZpZWxkICYmICRyb3dbJHN0ZXBmaWVsZF0gIT0gJycpIHsNCgkJCSRmcmVxID0gZG9f bGlzdCgkcm93WyRzdGVwZmllbGRdKTsNCgkJCSRtb250aGx5ID0gZmFsc2U7DQoJCQkkY3Vy cnN0YW1wID0gJGV2X3Bvc3RlZDsNCgkJCSRjdXJybW9udGggPSAkZXZfbW9udGg7DQoJCQkk Y3VycnllYXIgPSAkZXZfeWVhcjsNCgkJCWZvcmVhY2ggKCRmcmVxIGFzICRpbnRlcnZhbCkg ew0KCQkJCSRmYWtlcm93ID0gJHJvdzsNCgkJCQkkc3RhbXBvZmYgPSAwOw0KCQkJCWZvcigk aWR4ID0gMDsgJGlkeCA8IDk5OTk5OyAkaWR4KyspIHsNCgkJCQkJJGxhc3RhbXAgPSAkY3Vy cnN0YW1wOw0KCQkJCQlpZiAoKGlzc2V0KCRldl90YWxseVskcm93WydQb3N0ZWQnXV0pICYm ICgkZXZfdGFsbHlbJHJvd1snUG9zdGVkJ11dID49ICRldmVudGxpbWl0KSkgfHwgKCR0byAm JiAkY3VycnN0YW1wID4gc3RydG90aW1lKCR0bykpKSB7DQoJCQkJCQlicmVhazsNCgkJCQkJ fQ0KCQkJCQkkaXZhbCA9IHN0cl9yZXBsYWNlKCI/bW9udGgiLCBkYXRlKCdGJywgZ21ta3Rp bWUoMCwwLDAsJGN1cnJtb250aCwxKSksICRpbnRlcnZhbCk7DQoJCQkJCSRpdmFsID0gc3Ry X3JlcGxhY2UoIj95ZWFyIiwgJGN1cnJ5ZWFyLCAkaXZhbCk7DQoNCgkJCQkJaWYgKHN0cnBv cygkaXZhbCwgImxhc3QiKSA9PT0gMCkgew0KCQkJCQkJJGl2YWwgPSBkYXRlKCJsLCBGIGpT IFkiLCBzdHJ0b3RpbWUoJGl2YWwsIG1rdGltZSgxMiwgMCwgMCwgZGF0ZSgibiIsbWt0aW1l KDAsMCwwLCRjdXJybW9udGgsMSwkY3VycnllYXIpKSsxLCAxLCAkY3VycnllYXIpKSk7DQoJ CQkJCQkkbW9udGhseSA9IHRydWU7DQoJCQkJCX0gZWxzZSBpZiAoc3RycG9zKCRpdmFsLCAi Zmlyc3QiKSA9PT0gMCkgew0KCQkJCQkJJGl2YWwgPSBkYXRlKCJsLCBGIGpTIFkiLCBzdHJ0 b3RpbWUoJGl2YWwsIG1rdGltZSgxMiwgMCwgMCwgKCgkY3Vycm1vbnRoPjEpID8gJGN1cnJt b250aC0xIDogMTIpLCBkYXRlKCJ0Iixta3RpbWUoMCwwLDAsJGN1cnJtb250aC0xLDEsKCgk Y3Vycm1vbnRoPT0xKSA/ICRjdXJyeWVhci0xOiAkY3VycnllYXIpKSksICgoJGN1cnJtb250 aD09MSkgPyAkY3VycnllYXItMTogJGN1cnJ5ZWFyKSkpKTsNCgkJCQkJCSRtb250aGx5ID0g dHJ1ZTsNCgkJCQkJfQ0KCQkJCQlpZiAoc3RycG9zKCRpbnRlcnZhbCwgIj9tb250aCIpIHx8 IHN0cnBvcygkaW50ZXJ2YWwsICI/eWVhciIpKSB7DQoJCQkJCQkkbW9udGhseSA9IHRydWU7 DQoJICAgICAgICAgICAgfQ0KDQoJCQkJCWlmICgkbW9udGhseSkgew0KCQkJCQkJJGN1cnJz dGFtcCA9IHN0cnRvdGltZSgkaXZhbCk7DQoJCQkJCQkkc3RhbXBvZmYgPSAoJHN0YW1wb2Zm PT0wKSA/IChpbnQpKDM2MDAqJGV2X2hyKSArIChpbnQpKDYwKiRldl9tbikgKyAoaW50KSRl dl9zYyA6ICRzdGFtcG9mZjsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRjdXJyc3RhbXAgPSBz dHJ0b3RpbWUoJGl2YWwsICRjdXJyc3RhbXApOw0KCQkJCQl9DQoNCgkJCQkJLy8gVGhpcyBr bHVkZ2UgdGFrZXMgYWNjb3VudCBvZiB0aW1lc3RhbXBzIGxpa2UgImxhc3QgVGh1cnNkYXki IChvZiB0aGUgbW9udGgpLiBUaGUgbGFzdCAnd2hhdGV2ZXIgZGF5JyBvZg0KCQkJCQkvLyBh IG1vbnRoIGNhbiBvbmx5IGJlIGEgbWF4aW11bSBvZiAzMSBkYXlzIGJlZm9yZSB0aGUgbGFz dCB0aW1lc3RhbXAgd2Ugc2F3LCBzbyBjaGVjayBmb3IgdGhhdCAoKy8tIDEwIG1pbnMpDQoJ CQkJCSRkaWZmc3RhbXAgPSAkY3VycnN0YW1wIC0gJGxhc3RhbXA7DQoJCQkJCWlmICgkZGlm ZnN0YW1wIDwgMCkgew0KCQkJCQkJaWYgKCRkaWZmc3RhbXAgPiAtKDYwKjYwKjI0KjMxKSs2 MDApIHsNCgkJCQkJCQkkY3VycnN0YW1wID0gZmFsc2U7IC8vIFNvbWUgJ2xhc3Qgd2Vla2Rh eScgb2YgdGhlIHByZXZpb3VzIG1vbnRoDQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCWJyZWFr OyAvLyBQSFBfSU5UX01BWCBleGNlZWRlZA0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWlmICgk Y3VycnN0YW1wICE9PSBmYWxzZSkgew0KCQkJCQkJaWYgKCRkZWJ1ZyA+IDEpIHsNCgkJCQkJ CQlkbXAoIklOVEVSVkFMOiAiLiAkY3VycnN0YW1wIC4gJyAvLyAnIC5kYXRlKCdkLU0tWSBI Omk6cycsICRjdXJyc3RhbXApKTsNCgkJCQkJCX0NCg0KCQkJCQkJaWYgKCgkY3VycnN0YW1w IDwgJGV2X2V4cGlyZXMgfHwgJGV2X2V4cGlyZXMgPT0gJzAnKSAmJiAoJGN1cnJzdGFtcCAh PSAkZXZfcG9zdGVkKSkgew0KCQkJCQkJCSRzaG93X21lID0gc21kX2luY2x1ZGVfZXZlbnQo JGN1cnJzdGFtcCwgJG5vdywgJGlnbm9yZSwgJHRpbWUsICRmcm9tLCAkdG8sICRtb250aCk7 DQoJCQkJCQkJaWYgKCRzaG93X21lKSB7DQoJCQkJCQkJCSRmYWtlcm93WydQb3N0ZWQnXSA9 IGRhdGUoIlktbS1kIEg6aTpzIiwgJGN1cnJzdGFtcCskc3RhbXBvZmYpOw0KCQkJCQkJCQkk ZmFrZXJvd1sndVBvc3RlZCddID0gJGN1cnJzdGFtcCskc3RhbXBvZmY7DQoJCQkJCQkJCSRh bGxfZXZzW10gPSAkZmFrZXJvdzsNCgkJCQkJCQkJJGV2X3RhbGx5WyRyb3dbJ1Bvc3RlZCdd XSA9IChpc3NldCgkZXZfdGFsbHlbJHJvd1snUG9zdGVkJ11dKSkgPyAkZXZfdGFsbHlbJHJv d1snUG9zdGVkJ11dKzEgOiAxOw0KCQkJCQkJCX0NCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJ YnJlYWs7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJLy8gSW5jcmVtZW50IHRoZSBtb250aC95 ZWFyIHJlYWR5IGZvciB0aGUgbmV4dCBpbnRlcnZhbA0KCQkJCQlpZiAoJG1vbnRobHkpIHsN CgkJCQkJCSRjdXJyeWVhciA9ICgkY3Vycm1vbnRoPT0xMikgPyAkY3VycnllYXIrMSA6ICRj dXJyeWVhcjsNCgkJCQkJCSRjdXJybW9udGggPSAoJGN1cnJtb250aD09MTIpID8gMSA6ICRj dXJybW9udGgrMTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAoJGRlYnVnPjEpIHsNCgkJCQkJ aWYgKGlzc2V0KCRldl90YWxseVskcm93WydQb3N0ZWQnXV0pKSB7DQoJCQkJCQlkbXAoIlRB TExZOiAiLiAkZXZfdGFsbHlbJHJvd1snUG9zdGVkJ11dKTsNCgkJCQkJfQ0KCQkJCX0NCgkJ CX0NCgkJfQ0KCX0NCg0KCWlmICgkZGVidWc+Mikgew0KCQllY2hvICIrKyBQUkUtU09SVEVE ICsrIjsNCgkJZG1wKCRhbGxfZXZzKTsNCgl9DQoNCgkvLyBNYWtlIHVwIGFuIGFycmF5X211 bHRpc29ydCBhcmcgbGlzdCBhbmQgZXhlY3V0ZSBpdA0KCWZvcmVhY2goJGFsbF9ldnMgYXMg JGtleSA9PiAkcm93KSB7DQoJCWZvcmVhY2ggKCRyb3cgYXMgJGlkZW50aWZpZXIgPT4gJGl0 ZW0pIHsNCgkJCSR2YXJuYW1lID0gImNvbF8iLiRpZGVudGlmaWVyOw0KCQkJJHskdmFybmFt ZX1bJGtleV0gPSAkaXRlbTsNCgkJfQ0KCX0NCglpZihjb3VudCgkYWxsX2V2cykgPiAwKSB7 DQoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkc29ydE9yZGVyKTsgJGlkeCsrKSB7 DQoJCQkkc29ydGFyZ3NbXSA9ICckY29sXycuJHNvcnRPcmRlclskaWR4XVsnYnknXTsNCgkJ CSRzb3J0YXJnc1tdID0gJHNvcnRPcmRlclskaWR4XVsnZGlyJ107DQoJCX0NCgkJJHNvcnRp dCA9ICdhcnJheV9tdWx0aXNvcnQoJy5pbXBsb2RlKCIsICIsJHNvcnRhcmdzKS4nLCAkYWxs X2V2cyk7JzsNCgkJZXZhbCgkc29ydGl0KTsNCgl9DQoNCglpZiAoJGRlYnVnPjIpIHsNCgkJ ZWNobyAiKysgUE9TVC1TT1JURUQgKysiOw0KCQlkbXAoJGFsbF9ldnMpOw0KCX0NCg0KCS8v IEhhbmRsZSBwYWdpbmcNCglpZiAoJHBhZ2luZykgew0KCQkkZ3JhbmRfdG90YWwgPSBjb3Vu dCgkYWxsX2V2cyk7DQoJCSR0b3RhbCA9ICRncmFuZF90b3RhbCAtICRvZmZzZXQ7DQoJCSRu dW1QYWdlcyA9IGNlaWwoJHRvdGFsLyRwYWdlYnkpOw0KCQkkcGcgPSAoISRwcmV0ZXh0Wydw ZyddKSA/IDEgOiAkcHJldGV4dFsncGcnXTsNCgkJJHBnb2Zmc2V0ID0gJG9mZnNldCArICgo JHBnIC0gMSkgKiAkcGFnZWJ5KTsNCgkJLy8gc2VuZCBwYWdpbmcgaW5mbyB0byB0eHA6bmV3 ZXIgYW5kIHR4cDpvbGRlcg0KCQkkcGFnZW91dFsncGcnXSA9ICRwZzsNCgkJJHBhZ2VvdXRb J251bVBhZ2VzJ10gPSAkbnVtUGFnZXM7DQoJCSRwYWdlb3V0WydzJ10gPSAkcHJldGV4dFsn cyddOw0KCQkkcGFnZW91dFsnYyddID0gJHByZXRleHRbJ2MnXTsNCgkJJHBhZ2VvdXRbJ2dy YW5kX3RvdGFsJ10gPSAkZ3JhbmRfdG90YWw7DQoJCSRwYWdlb3V0Wyd0b3RhbCddID0gJHRv dGFsOw0KDQoJCWlmIChlbXB0eSgkdGhpc3BhZ2UpKQ0KCQkJJHRoaXNwYWdlID0gJHBhZ2Vv dXQ7DQoJCWlmICgkcGdvbmx5KQ0KCQkJcmV0dXJuOw0KCX0gZWxzZSB7DQoJCSRwZ29mZnNl dCA9ICRvZmZzZXQ7DQoJfQ0KDQoJLy8gUGhhc2UgMzogaXRlcmF0ZSBvdmVyIHRoZSBuZXcg YXJyYXkgb2JleWluZyBhbnkgb2Zmc2V0L2xpbWl0LiBBbnl0aGluZyBpbiB0aGUgcmFuZ2Ug Z2V0cyBwb3B1bGF0ZWQgYW5kIHBhcnNlZA0KCSRvdXQgPSBhcnJheSgpOw0KCSRjdHIgPSAw Ow0KCWFydGljbGVfcHVzaCgpOw0KCWZvcmVhY2ggKCRhbGxfZXZzIGFzICRpZHggPT4gJHJv dykgew0KCQlpZiAoJGlkeCA+PSAkcGdvZmZzZXQgJiYgJGN0ciA8ICRsaW1pdCkgew0KCQkJ cG9wdWxhdGVBcnRpY2xlRGF0YSgkcm93KTsNCgkJCSRvdXRbXSA9ICgkdGhpbmcpID8gcGFy c2UoJHRoaW5nKSA6ICgoJGZvcm0pID8gcGFyc2VfZm9ybSgkZm9ybSkgOiBocmVmKCRyb3db J1Bvc3RlZCddLCBwZXJtbGlua3VybCgkcm93KSwgJyB0aXRsZT0iJy4kcm93WydUaXRsZSdd LiciJykgKTsNCgkJCSRjdHIrKzsNCgkJfQ0KCX0NCglhcnRpY2xlX3BvcCgpOw0KCXJldHVy biBkb1dyYXAoJG91dCwgJHdyYXB0YWcsICRicmVhaywgJGNsYXNzKTsNCn0NCg0KLy8gQ2hl Y2sgdGhlIHBhc3NlZCB0aW1lc3RhbXAgYWdhaW5zdCBldmVyeSB0aW1lIHJlc3RyaWN0aW9u IGFuZCByZXR1cm4gdHJ1ZSBpZiBpdCBwYXNzZXMgdGhlbSBhbGwNCmZ1bmN0aW9uIHNtZF9p bmNsdWRlX2V2ZW50KCR0cywgJG5vdywgJGlnbiwgJHRpbWUsICRmcm9tLCAkdG8sICRtb250 aCkgew0KCSRzaG93ID0gYXJyYXkoKTsNCgkkc2hvd1tdID0gIWluX2FycmF5KGRhdGUoImQt TS1ZIiwgJHRzKSwgJGlnbik7DQoJc3dpdGNoKCR0aW1lKSB7DQoJCWNhc2UgImFueSI6IGJy ZWFrOw0KCQljYXNlICJmdXR1cmUiOiAkc2hvd1tdID0gKCR0cyA+ICRub3cpID8gdHJ1ZSA6 IGZhbHNlOyBicmVhazsNCgkJZGVmYXVsdCA6ICRzaG93W10gPSAoJHRzIDwgJG5vdykgPyB0 cnVlIDogZmFsc2U7IGJyZWFrOyAvLyBUaGUgcGFzdA0KCX0NCglpZiAoJGZyb20pIHsgJHNo b3dbXSA9ICgkdHMgPj0gc3RydG90aW1lKCRmcm9tKSkgPyB0cnVlIDogZmFsc2U7IH0NCglp ZiAoJHRvKSB7ICRzaG93W10gPSAoJHRzIDw9IHN0cnRvdGltZSgkdG8pKSA/IHRydWUgOiBm YWxzZTsgfQ0KCWlmICgkbW9udGgpIHsgJHNob3dbXSA9IChkYXRlKCJZLW0iLCAkdHMpID09 ICRtb250aCkgPyB0cnVlIDogZmFsc2U7IH0NCg0KCXJldHVybiAoIWluX2FycmF5KDAsICRz aG93KSkgPyB0cnVlIDogZmFsc2U7DQp9IjtzOjQ6InR5cGUiO3M6MToiMCI7czo1OiJvcmRl ciI7czoxOiI1IjtzOjQ6ImhlbHAiO3M6NjQ3OTc6Igk8cD48ZGl2IGlkPSJzbWRfaGVscCI+ PC9wPgoKCTxoMSBpZD0idG9wIj5zbWRfY2FsZW5kYXI8L2gxPgoKCTxwPlJlbmRlciBhIGNh bGVuZGFyIHdpdGggb25lIG9yIG1vcmUgYXJ0aWNsZXMgYXMgZXZlbnRzIG9uIGVhY2ggZGF5 LiBVc2VmdWwgZm9yIGdpZyBndWlkZXMsICYjODIyMDt3aGF0JiM4MjE3O3Mgb24mIzgyMjE7 IG9yIHNjaGVkdWxpbmcgYXBwcy48L3A+CgoJPGgyIGlkPSJmZWF0dXJlcyI+RmVhdHVyZXM8 L2gyPgoKCTx1bD4KCQk8bGk+RnVsbC1zaXplIC8gbWluaSA8YSBocmVmPSIjc21kY2FsIj5j YWxlbmRhcjwvYT4gYnkgbW9udGgsIHdpdGggb3B0aW9uYWwgPHNwYW4gY2xhc3M9ImNhcHMi PklTTzwvc3Bhbj4gd2VlazwvbGk+CgkJPGxpPk5hdjogbmV4dC9wcmV2IG1vbnRoIG9yIG1v bnRoL3llYXIgZHJvcGRvd24uIFllYXIgcmFuZ2UgY2FuIGJlIGZyb20gZmlyc3QvbGFzdCBh cnRpY2xlIG9yICsvLSBOIHllYXJzIGluIGVpdGhlciBkaXJlY3Rpb248L2xpPgoJCTxsaT5P bmUgYXJ0aWNsZSA9IG9uZSBldmVudCwgbmF0aXZlIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+OiBQb3N0ZWQgZGF0ZSA9IHRoZSBkYXRlIGl0IGFwcGVhcnMgaW4gdGhlIGNh bGVuZGFyPC9saT4KCQk8bGk+RmlsdGVyIGV2ZW50cyBieSBjYXRlZ29yeSAvIHNlY3Rpb24g LyBhdXRob3IgLyBzdGF0dXMgLyB0aW1lIG9yIGV4cGlyeTwvbGk+CgkJPGxpPkN1c3RvbSBm aWVsZCB0byBzcGVjaWZ5IGV2ZW50IGZyZXF1ZW5jeSAoMSB3ZWVrIC8gMTAgZGF5cyAvIDMg bW9udGhzIC8gZXRjKTwvbGk+CgkJPGxpPkN1c3RvbSBmaWVsZHMgZm9yIGluL2V4Y2x1c2lv bnMgKGEgbGlzdCBvZiBkYXRlcyBvbiB3aGljaCB0aGF0IGV2ZW50IGlzIHJlc2NoZWR1bGVk L2NhbmNlbGxlZC9vbWl0dGVkKTwvbGk+CgkJPGxpPlNwYW5uZWQgZXZlbnRzIChtdWx0aS1k YXlzKSBiYXNlZCBvbiB0aGUgYXJ0aWNsZeKAmXMgZXhwaXJ5PC9saT4KCQk8bGk+RnV0dXJl LCBleHBpcmVkIG9yIHN0aWNreSBldmVudHMgbWF5IGJlIGRpc3BsYXllZDwvbGk+CgkJPGxp PkhvbGlkYXlzIG9uIGEgcGVyLWNhbGVuZGFyIGJhc2lzPC9saT4KCQk8bGk+RWFjaCBldmVu dCBjYW4gYmUgcGFzc2VkIHRvIGEgZm9ybS9jb250YWluZXIgc28geW91IGNhbiBidWlsZCBp dCB5b3VyIHdheS4gU3Bhbm5lZCBhbmQvb3IgcmVjdXJyaW5nIGV2ZW50cyBjYW4gYmUgc2Vu dCB0byBhIHNlcGFyYXRlIGZvcm0gaWYgeW91IHdpc2guIEFsdGVybmF0aXZlbHksIHNlbmQg dGhlIGVudGlyZSBjZWxsIHRvIGEgZm9ybTwvbGk+CgkJPGxpPjxhIGhyZWY9IiNpZmNhbCI+ Q29uZGl0aW9uYWw8L2E+IHRlc3RzIGZvciBmbGFncyBhbmQgZGF0ZXMgc28geW91IGNhbiBi dWlsZCB5b3VyIG93biBsb2dpYzwvbGk+CgkJPGxpPlRhYmxlLSwgcm93LSwgY2VsbC0sIGFu ZCBldmVudC1sZXZlbCBjbGFzc2VzIGZvciBpbmRpY2F0aW5nIGRpZmZlcmVudCBzY2VuYXJp b3M7IGN1c3RvbSBjbGFzc2VzIGNhbiBiZSBkZWZpbmVkPC9saT4KCQk8bGk+VGFncyB0byA8 YSBocmVmPSIjYXJ0ZXYiPmRpc3BsYXkgcmVjdXJyaW5nIGV2ZW50czwvYT4gOyBldmVudC9j YWxlbmRhciA8YSBocmVmPSIjY2FsaW5mbyI+Y2hhcmFjdGVyaXN0aWNzPC9hPiA7IG9yIHRo ZSA8YSBocmVmPSIjY2Fsbm93Ij5jdXJyZW50IGRhdGUvdGltZTwvYT48L2xpPgoJPC91bD4K Cgk8aDIgaWQ9ImF1dGhvciI+QXV0aG9yIC8gY3JlZGl0czwvaDI+CgoJPHA+PGEgaHJlZj0i aHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbW1lbnRGb3JtIj5TdGVmIERhd3NvbjwvYT4uIEpv aW50bHkgZnVuZGVkIGJ5IGdlbmVyb3VzIGRvbmF0b3JzOiBtcmRhbGUsIHdvb2YsIGpha29i LCByZW5vYmlyZCBhbmQgam9lYmFpY2guIEJhc2VkIG9yaWdpbmFsbHkgb24gbWRwX2NhbGVu ZGFyLiBBbGwgcHJvcHMgdG8gdGhlIG9yaWdpbmFsIGF1dGhvciBvZiB0aGUgcGx1Z2luLCBh bmQgb2YgY291cnNlIHRoZSBjbGFzcyB1cG9uIHdoaWNoIHRoZSBjYWxlbmRhciBpcyBiYXNl ZC4gQW5kIG5vdCBmb3JnZXR0aW5nIG91ciBhd2Vzb21lIFRleHRwYXR0ZXJuIGRldnMgd2hv IGNvbnRpbnVlIHRvIHB1c2ggdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+Q01TPC9zcGFuPiB0 byB0aGUgc3RhcnMuPC9wPgoKCTxoMiBpZD0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5p bnN0YWxsYXRpb248L2gyPgoKCTxwIGNsYXNzPSJyZXF1aXJlZCI+UmVxdWlyZXMgVGV4dHBh dHRlcm4gNC4wLjcrPC9wPgoKCTxwPkRvd25sb2FkIHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIg PGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zLzEwNTIvc21kX2NhbGVu ZGFyIj50ZXh0cGF0dGVybi5vcmc8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZk YXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50byB0 aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gQWRtaW4gLSZndDsgUGx1Z2lucyBw YW5lLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi4gVmlzaXQgdGhlIDxhIGhyZWY9 Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yOTM3NSI+ Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUgc3Vj Y2VzcyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPHA+VG8gdW5pbnN0YWxs LCBkZWxldGUgZnJvbSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyBwYWdlLjwvcD4KCgk8aDIg aWQ9Im5hbWluZyI+TmFtaW5nIGNvbnZlbnRpb248L2gyPgoKCTxwPlRoZSBjb3JlIG9mIHRo ZSBwbHVnaW4gaXMgdGhlIHNtZF9jYWxlbmRhciB0YWcsIHdoaWNoIHJlbmRlcnMgYSBzdGFu ZGFyZCBjYWxlbmRhciB3aXRoIGVhY2ggY2VsbCBjb250YWluaW5nIG9uZSBvciBtb3JlIGV2 ZW50cy4gQmVmb3JlIGRpdmluZyBpbnRvIHRoZSB0YWdzIHRoZXJlJiM4MjE3O3MgYSBsaXR0 bGUgYml0IG9mIG5vbWVuY2xhdHVyZSB0byBncmFzcDo8L3A+CgoJPHVsPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+Y2FsaWQ8L3NwYW4+IDogeW91IG1heSBwdXQgbW9yZSB0aGFuIG9u ZSBjYWxlbmRhciBvbiBhIHBhZ2U6IGVhY2ggY2FuIGJlIHVuaXF1ZWx5IHJlZmVyZW5jZWQg d2l0aCBhIGNhbGVuZGFyIElEPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNlbGw8 L3NwYW4+IDogYSBzcGVjaWZpYyBkYXkgb24gdGhlIGNhbGVuZGFyIGluIGEgcGFydGljdWxh ciBtb250aC95ZWFyPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmV2ZW50PC9zcGFu PiA6IGFuIGFydGljbGUuIEl0JiM4MjE3O3MgYmVzdCB0byB1c2UgYSBkZWRpY2F0ZWQgc2Vj dGlvbiBmb3IgZXZlbnRzIHRvIGtlZXAgdGhpbmdzIG5lYXRlciwgYnV0IHlvdSBjYW4gZGlz cGxheSBldmVudHMgZnJvbSBtb3JlIHRoYW4gb25lIHNlY3Rpb24gaWYgeW91IHdpc2guIEFu eSBhcnRpY2xlIHdyaXR0ZW4gaW4gdGhlIGdpdmVuIHNlY3Rpb24ocykgd2lsbCBhcHBlYXIg b24gdGhlIGNhbGVuZGFyIGFzIGxvbmcgYXMgaXRzIGV4cGlyeSBoYXNuJiM4MjE3O3QgYmVl biBtZXQuIE1vcmUgdGhhbiBvbmUgZXZlbnQgbWF5IGFwcGVhciBpbiBlYWNoIGNlbGw8L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2VsbCBmbGFnPC9zcGFuPiA6IGEgc2VyaWVz IG9mIGZsYWdzIGFyZSB1c2VkIHRvIGxhYmVsIGVhY2ggY2VsbCBhY2NvcmRpbmcgdG8gd2hh dCBpdCBjb250YWlucy4gQ2VsbHMgY2FuIGVpdGhlciBiZSA8Y29kZT5lbXB0eTwvY29kZT4g KGkuZS4gbm8gZGF0ZTogdGhlIGZpbGxlciBjZWxscyBhdCB0aGUgc3RhcnQvZW5kIG9mIHRo ZSBtb250aCksIHRoZXkgY2FuIGJlIGEgcmVndWxhciBkYXkgKG5vIGZsYWcpLCB0aGV5IGNh biBjb250YWluIGFuIDxjb2RlPmV2ZW50PC9jb2RlPiwgb3IgbWF5IGJlIGEgaG9saWRheSAo PGEgaHJlZj0iI2hvbGlkYXlzIj5ob2xzPC9hPik8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+ZXZlbnQgZmxhZzwvc3Bhbj4gOiBlYWNoIGNlbGwgY2FuIGNvbnRhaW4gb25lIG9y IG1vcmUgZXZlbnRzLiBFdmVudHMgY2FuIGVpdGhlciBiZSA8YSBocmVmPSIjZXZlbnRzIj5z dGFuZGFyZDwvYT4sIHRoZXkgY2FuIDxhIGhyZWY9IiNyZWN1ciI+cmVjdXI8L2E+LCB0aGV5 IGNhbiBzcGFuIG1vcmUgdGhhbiBvbmUgZGF5ICg8YSBocmVmPSIjbXVsdGkiPm11bHRpPC9h PiksIGRhdGVzIGNhbiBiZSB1bnNjaGVkdWxlZCBvciBvbWl0dGVkICg8YSBocmVmPSIjY2Fu Y2VsIj5jYW5jZWwgLyBvbWl0PC9hPikgZnJvbSB0aGUgY2FsZW5kYXIsIG9yIDxhIGhyZWY9 IiNleHRyYSI+ZXh0cmE8L2E+IGRhdGVzIGNhbiBiZSBhZGRlZDwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5jbGFzcyBsZXZlbDwvc3Bhbj4gOiAoZXhwbG9yZWQgaW4gdGhlIDxh IGhyZWY9IiNhdHRzdHlsZXMiPmNsYXNzbGV2ZWxzPC9hPiBhdHRyaWJ1dGUpLiBFYWNoIGZs YWdnZWQgY2VsbCBjYW4gYmUgZ2l2ZW4gYSA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFu PiBjbGFzcyBiYXNlZCBvbiBpdHMgZmxhZyBuYW1lKHMpLiBUaGUgY2xhc3MgbmFtZXMgYXJl IHNpbXBseSBlYWNoIGZsYWcgbmFtZSBwcmVmaXhlZCB3aXRoIHRoZSB2YWx1ZSBnaXZlbiBp biB0aGUgPGNvZGU+Y2xhc3NwcmVmaXhlczwvY29kZT4gYXR0cmlidXRlLiBTdWNoIGNsYXNz ZXM6Cgk8dWw+CgkJPGxpPmFwcGVhciBpbiBhIGNlbGwsIHNvIHlvdSBjYW4gc3R5bGUgdGhl IHdob2xlIGNlbGw8L2xpPgoJCTxsaT5hcHBlYXIgb24gZWFjaCBldmVudCwgc28geW91IGNh biBzdHlsZSBwYXJ0aWN1bGFyIHR5cGVzIG9mIGV2ZW50PC9saT4KCQk8bGk+bWF5IGJlICYj ODIxNjtjb3BpZWQmIzgyMTc7IGZyb20gdGhlIGV2ZW50IHRvIHRoZSBjZWxsIGl0c2VsZiwg c28geW91IGNhbiBzdHlsZSB0aGUgd2hvbGUgY2VsbCBiYXNlZCBvbiB0aGUgZXZlbnRzIGl0 IGNvbnRhaW5zPC9saT4KCTwvdWw+PC9saT4KCTwvdWw+CgoJPHA+RmxhZ3MgcHJvdmlkZSBp bmZvcm1hdGlvbiA8ZW0+YWJvdXQ8L2VtPiB0aGUgY2VsbCAvIGV2ZW50ICAmIzgyMTI7IGFu ZCBjYW4gYmUgdGVzdGVkIHdpdGggdGhlIGNvbmRpdGlvbmFsIHRhZyAmIzgyMTI7IHdoaWxl IHRoZSBjb3JyZXNwb25kaW5nIGNsYXNzIG5hbWVzIGFyZSBqdXN0IHRoZXJlIGZvciB5b3Vy IDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IHVzZS48L3A+CgoJPHA+V2hlbiBhc3Np Z25lZCBhcyBjbGFzc2VzLCBmbGFncyA8c3Ryb25nPmFsd2F5czwvc3Ryb25nPiB0YWtlIHRo ZSAmIzgyMTY7Y2xhc3MmIzgyMTc7IHByZWZpeCAoaS5lLiB0aGUgMXN0IGl0ZW0gZ2l2ZW4g aW4gc21kX2NhbGVuZGFyJiM4MjE3O3MgPGNvZGU+Y2xhc3NwcmVmaXhlczwvY29kZT4gYXR0 cmlidXRlKSAmIzgyMTI7IHdoZXRoZXIgdGhleSBhcHBlYXIgYXQgdGhlIDxlbT5ldmVudDwv ZW0+IG9yIDxlbT5jZWxsPC9lbT4gbGV2ZWxzLiBUaGUgb25seSBjbGFzc2VzIHRoYXQgdGFr ZSB0aGUgb3B0aW9uYWwgMm5kICYjODIxNjtldmVudCYjODIxNzsgcHJlZml4IGFyZSB0aGUg ZmllbGRzIHlvdSBzcGVjaWZ5IGluIHRoZSA8Y29kZT5ldmVudGNsYXNzZXM8L2NvZGU+IGF0 dHJpYnV0ZS48L3A+CgoJPHA+SXQmIzgyMTc7cyBhbHNvIHdvcnRoIGJlYXJpbmcgaW4gbWlu ZCB0aGUgPGEgaHJlZj0iI2RhdGVzIj5kYXRlIGNhdmVhdHM8L2E+IHRoYXQgbWF5IHdlbGwg Yml0ZSB5b3UuPC9wPgoKCTxoMiBpZD0iZXZlbnRzIj5TdGFuZGFyZCBjZWxscyBhbmQgZXZl bnRzPC9oMj4KCgk8cD5UaGUgZm9sbG93aW5nIGN1bXVsYXRpdmUgbmFtaW5nIHJ1bGVzIGFw cGx5OjwvcD4KCgk8dWw+CgkJPGxpPk5vcm1hbCAoZGF5KSBjZWxscyBkb24mIzgyMTc7dCBo YXZlIGEgY2xhc3MgYXNzaWduZWQgdG8gdGhlbSB1bmxlc3MgeW91IHNwZWNpZnkgb25lIHdp dGggPGNvZGU+Y2VsbGNsYXNzPC9jb2RlPjwvbGk+CgkJPGxpPkFueSBjZWxsIHRoYXQgY29u dGFpbnMgYW4gZXZlbnQgKG9mIGFueSB0eXBlKSBpcyBmbGFnZ2VkIGFzIGFuIDxjb2RlPmV2 ZW50PC9jb2RlPjwvbGk+CgkJPGxpPkFueSBjZWxsIHRoYXQgZmFsbHMgb24gYSBob2xpZGF5 IGlzIGdpdmVuIHRoZSBmbGFnIDxjb2RlPmhvbHM8L2NvZGU+PC9saT4KCQk8bGk+VGhlIGN1 cnJlbnQgZGF5IGlzIGdpdmVuIHRoZSBmbGFnIDxjb2RlPnRvZGF5PC9jb2RlPjwvbGk+Cgk8 L3VsPgoKCTxwPkEgc2luZ2xlIGV2ZW50IChha2EgYXJ0aWNsZSkgd2l0aCBhIFBvc3RlZCBk YXRlIHdpbGwgYmUgZmxhZ2dlZCA8Y29kZT5zdGFuZGFyZDwvY29kZT4sIHVubGVzcyBpdCBy ZWN1cnMgb3Igc3BhbnMgbW9yZSB0aGFuIG9uZSBkYXkuPC9wPgoKCTxoMiBpZD0icmVjdXIi PlJlY3VycmluZyBldmVudHM8L2gyPgoKCTxwPklmIHlvdSBoYXZlIG5vbWluYXRlZCBhIGZp ZWxkIGFzIHlvdXIgPGNvZGU+c3RlcGZpZWxkPC9jb2RlPiB5b3UgbWF5IGVudGVyIGEgY29t bWEtc2VwYXJhdGVkIGxpc3Qgb2YgZnJlcXVlbmNpZXMgYXQgd2hpY2ggdGhlIGV2ZW50IGlz IHRvIHJlcGVhdC4gVGhlIGZvcm1hdCBvZiB0aGUgcmVwZXRpdGlvbiBpcyA8c3Ryb25nPm51 bWJlciBpbnRlcnZhbDwvc3Ryb25nPiwgZS5nLiA8Y29kZT40IHdlZWtzPC9jb2RlPiBvciA8 Y29kZT4xMCBkYXlzPC9jb2RlPiBvciA8Y29kZT42IG1vbnRoczwvY29kZT4uIFRoZSBwbHVn aW4gd2lsbCBkbyBpdHMgYmVzdCB0byBmaWd1cmUgb3V0IHdoYXQgeW91IG1lYW4uIFNlZSA8 YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGFyL21hbnVhbC9odG1sX25v ZGUvRGF0ZS1pbnB1dC1mb3JtYXRzLmh0bWwiPmRhdGUgaW5wdXQgZm9ybWF0czwvYT4gZm9y IG1vcmUuPC9wPgoKCTxwPkEgZmV3IHBvaW50czo8L3A+CgoJPHVsPgoJCTxsaT48Y29kZT5z ZWNvbmQgdHVlc2RheTwvY29kZT4gd2lsbCBzaG93IGFuIGV2ZW50IDxlbT5ldmVyeTwvZW0+ IDJuZCBUdWVzZGF5IGZyb20gdGhlIHN0YXJ0IGRhdGUgKGkuZS4gZm9ydG5pZ2h0bHkpPC9s aT4KCQk8bGk+PGNvZGU+c2Vjb25kIHR1ZXNkYXkgP21vbnRoID95ZWFyPC9jb2RlPiB3aWxs IHN1YnN0aXR1dGUgdGhlIGN1cnJlbnQgbW9udGggYW5kIHllYXIgaW4gZmlyc3QsIGFuZCA8 ZW0+dGhlbjwvZW0+IGNhbGN1bGF0ZSB0aGUgZGF0ZSwgcmVzdWx0aW5nIGluIHRoZSBldmVu dCBvbmx5IHJlY3VycmluZyBvbiB0aGUgMm5kIFR1ZXNkYXkgb2YgZWFjaCBtb250aC4gWW91 IDxzdHJvbmc+bXVzdDwvc3Ryb25nPiB1c2UgYm90aCA8Y29kZT4/bW9udGg8L2NvZGU+IGFu ZCA8Y29kZT4/eWVhcjwvY29kZT4gaWYgeW91IGNob29zZSB0aGlzIHR5cGUgb2YgZGF0ZSBv ciB5b3VyIGV2ZW50IHdvbiYjODIxNzt0IGFwcGVhcjwvbGk+CgkJPGxpPjxjb2RlPjIwID9t b250aDwvY29kZT4gd2lsbCBzaG93IHRoZSBldmVudCBvbiB0aGUgMjB0aCBvZiBldmVyeSBt b250aDwvbGk+CgkJPGxpPnRoaW5ncyBsaWtlIDxjb2RlPmZpcnN0IHRodXJzZGF5PC9jb2Rl PiBvciA8Y29kZT5sYXN0IGZyaWRheTwvY29kZT4gZG9uJiM4MjE3O3QgbmVlZCB0aGUgPGNv ZGU+P21vbnRoPC9jb2RlPiBvciA8Y29kZT4/eWVhcjwvY29kZT4gYmVjYXVzZSB0aGV5IGNh biA8ZW0+b25seTwvZW0+IG9jY3VyIG1vbnRobHksIGFuZCB3aWxsIG9ubHkgc2hvdyB0aGUg ZXZlbnQgb24gdGhlIGdpdmVuIGZpcnN0L2xhc3QgZGF5IG9mIHRoZSBtb250aDwvbGk+Cgk8 L3VsPgoKCTxwPklmIHlvdSBjYW4gZmluZCBhIHVzZSBmb3IgaXQsIHlvdSBtYXkgc3BlY2lm eSBtdWx0aXBsZSBmcmVxdWVuY2llcywgZm9yIGV4YW1wbGUgPGNvZGU+MyBkYXlzLCAxIHdl ZWs8L2NvZGU+LiBUaGF0IG1lYW5zIHlvdSB3b3VsZCBzZWUgdGhlIGV2ZW50IG9uIHRoZSAx c3QgZGF5LCB0aGVuIHRoZSAzcmQsIDZ0aCwgN3RoLCA5dGgsIDEydGgsIDE0dGgsIDE1dGgs IDE4dGgsIDIxc3QsIDI0dGgmIzgyMzA7IGRheXMgdGhlcmVhZnRlci4gTm90ZSB0aGF0IHRo ZSBldmVudCBvbmx5IG9jY3VycyBvbmNlIG9uIHRoZSAyMXN0IGRheSBldmVuIHRob3VnaCB0 aGUgdHdvIGZyZXF1ZW5jaWVzIGNsYXNoLjwvcD4KCgk8cD5SZWN1ciBydWxlczo8L3A+CgoJ PHVsPgoJCTxsaT5UaGUgcmVwZXRpdGlvbiB3aWxsIGNvbnRpbnVlIGZvcmV2ZXI8c3VwIGNs YXNzPSJmb290bm90ZSI+PGEgaHJlZj0iI2ZuMTU1MDU3NDM3MzQ5OTA0YjU0OGQ5YmMiPjE8 L2E+PC9zdXA+IHVubGVzcyB5b3Ugc3BlY2lmeSBhbiBleHBpcnkgdGltZSB1bmRlciB0aGUg YXJ0aWNsZSYjODIxNztzIDxlbT5Nb3JlPC9lbT4gYXJlYTwvbGk+CgkJPGxpPlRoZSB2ZXJ5 IGZpcnN0IGV2ZW50IG9mIGEgcmVjdXJyaW5nIHNldCB3aWxsIGJlIGZsYWdnZWQgd2l0aCA8 Y29kZT5yZWN1cmZpcnN0PC9jb2RlPjwvbGk+CgkJPGxpPkVhY2ggZm9sbG93aW5nIGNlbGwg dGhhdCBjb250YWlucyBhIHJlY3VycmluZyBldmVudCB3aWxsIGJlIGZsYWdnZWQgd2l0aCA8 Y29kZT5yZWN1cjwvY29kZT48L2xpPgoJCTxsaT5Cb3RoIGZsYWdzIGFyZSBhcHBsaWVkIHRv IHRoZSBldmVudCBhcyBjbGFzc2VzIHVzaW5nIHRoZSBjbGFzcyBwcmVmaXg8L2xpPgoJCTxs aT5SZXBlYXRlZCBldmVudHMgbWF5IGJlIDxhIGhyZWY9IiNjYW5jZWwiPmNhbmNlbGxlZCBv ciBvbWl0dGVkPC9hPiBvbiBhIHBlci1kYXRlIGJhc2lzPC9saT4KCTwvdWw+CgoJPHAgY2xh c3M9InNtYWxsIiBpZD0iZm4xNTUwNTc0MzczNDk5MDRiNTQ4ZDliYyI+PHN1cD4xPC9zdXA+ ICYjODIxNjtmb3JldmVyJiM4MjE3OyBpcyBsaW1pdGVkIHRvIDk5OTk5IHJlY3VycmVuY2Vz IHBlciBldmVudCwgb3IgMjc0IHllYXJzJiM4MjE3OyB3b3J0aCBvZiBkYWlseSBldmVudHMu IEVpdGhlciA8c3BhbiBjbGFzcz0iY2FwcyI+VU5JWDwvc3Bhbj4gd2lsbCBydW4gb3V0IG9m IGRhdGVzIG9yIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IHdpbGwgcnVuIG91dCBv ZiBtZW1vcnkgbG9uZyBiZWZvcmUgeW91IHJlYWNoIHRoaXMgbGltaXQgOi0pPC9wPgoKCTxo MiBpZD0ibXVsdGkiPk11bHRpLWRheSAoc3Bhbm5lZCkgZXZlbnRzPC9oMj4KCgk8cD5Bbnkg ZXZlbnQgdGhhdCBoYXM6PC9wPgoKCTx1bD4KCQk8bGk+YSBzdGFydCBkYXRlPC9saT4KCQk8 bGk+YW4gZXhwaXJ5IGRhdGUgdGhhdCBpcyBhIGRheSBvciBtb3JlIGxhdGVyIHRoYW4gdGhl IHN0YXJ0IGRhdGUsIGFuZDwvbGk+CgkJPGxpPjxlbT5kb2VzIG5vdDwvZW0+IGhhdmUgYW55 IHJlcGV0aXRpb24gaW4gaXRzIDxjb2RlPnN0ZXBmaWVsZDwvY29kZT48L2xpPgoJPC91bD4K Cgk8cD5pcyBmbGFnZ2VkIGFzIGEgPGNvZGU+bXVsdGk8L2NvZGU+LiBCeSBkZWZhdWx0IHRo ZSBmaXJzdCBldmVudCBpcyBkaXNwbGF5ZWQgaW4gZnVsbCBhbmQgZWFjaCAmIzgyMTY7Y29u dGludWF0aW9uJiM4MjE3OyBldmVudCBpcyBzaG93biBvbmx5IGFzIGEgcmlnaHQgYXJyb3cg aW4gc3Vic2VxdWVudCBjZWxscy4gRXZlbnRzIG1heSBzcGFuIG1vbnRocyBvciB5ZWFycyBh bmQgdGhlIHBsdWdpbiBmaWd1cmVzIGV2ZXJ5dGhpbmcgb3V0IHVzaW5nIGZsYWcgcnVsZXM6 PC9wPgoKCTx1bD4KCQk8bGk+VGhlIGZpcnN0IGNlbGwgb2YgYSBzcGFubmVkIHNldCBpcyA8 Y29kZT5tdWx0aWZpcnN0PC9jb2RlPjwvbGk+CgkJPGxpPlRoZSBsYXN0IGNlbGwgaXMgPGNv ZGU+bXVsdGlsYXN0PC9jb2RlPjwvbGk+CgkJPGxpPkV2ZXJ5IG90aGVyIGNlbGwgaXMgYSA8 Y29kZT5tdWx0aTwvY29kZT4gPGVtPmV4Y2VwdDwvZW0+IGlmIHRoZSBldmVudCByb2xscyBv dmVyIGludG8gdGhlIG5leHQgbW9udGguIEluIHRoYXQgY2FzZSwgdGhlIGVudHJ5IG9uIHRo ZSAxc3Qgb2YgdGhlIG1vbnRoIGlzIGEgPGNvZGU+bXVsdGlwcmV2PC9jb2RlPiB0byBpbmRp Y2F0ZSBpdCBiZWxvbmdzIHRvIGEgcHJldmlvdXMgZXZlbnQ8L2xpPgoJCTxsaT5JZiB0aGUg MXN0IGRheSBvZiB0aGUgbW9udGggaXMgdGhlIGxhc3QgZGF5IG9mIHRoZSBldmVudCwgdGhl IDxjb2RlPm11bHRpcHJldjwvY29kZT4gaXMgZHJvcHBlZCBpbiBmYXZvdXIgb2YgPGNvZGU+ bXVsdGlsYXN0PC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxwPlN3aXRjaCBvZmYgc3Bhbm5pbmcg Y29tcGxldGVseSB3aXRoIDxjb2RlPnNob3dzcGFubmVkPSZxdW90OzAmcXVvdDs8L2NvZGU+ LiBFdmVudHMgdGhhdCBoYXZlIGFuIGV4cGlyeSBhcmUgdGhlbiBqdXN0IHN0YW5kYXJkIGV2 ZW50cy48L3A+CgoJPHA+JiM4MjE2O0NvbnRpbnVhdGlvbiYjODIxNzsgY2VsbHMgbWF5IGJl IHByb2Nlc3NlZCB3aXRoIGEgc2VwYXJhdGUgZm9ybSAoPGNvZGU+c3BhbmZvcm08L2NvZGU+ KS4gSWYgeW91IGNob29zZSBub3QgdG8gdXNlIGEgPGNvZGU+c3BhbmZvcm08L2NvZGU+LCB0 aGUgc3RhbmRhcmQgPGNvZGU+Zm9ybTwvY29kZT4gb3IgY29udGFpbmVyIHdpbGwgYmUgdXNl ZCBhbmQgeW91IHdpbGwgaGF2ZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBkaWZmZXJl bnQgbXVsdGkgZmxhZ3MgeW91cnNlbGYgdXNpbmcgdGhlIDxhIGhyZWY9IiNpZmNhbCI+Y29u ZGl0aW9uYWwgdGFnPC9hPi48L3A+CgoJPHA+WW91IGNhbiBhbHNvIDxhIGhyZWY9IiNjYW5j ZWwiPmNhbmNlbCBvciBvbWl0PC9hPiBkYXlzIG9mIGEgc3Bhbm5lZCBldmVudCBpbiB0aGUg c2FtZSBtYW5uZXIgYXMgeW91IGRvIHdpdGggPGEgaHJlZj0iI3JlY3VyIj5yZWN1cnJpbmcg ZXZlbnRzPC9hPiwgZXhjZXB0IHlvdSBjYW5ub3QgY2FuY2VsIHRoZSBmaXJzdCBkYXk7IHlv dSBzaG91bGQgbW92ZSB0aGUgZXZlbnQgc3RhcnQgZGF0ZSBhbmQgYXBvbG9naXNlITwvcD4K Cgk8aDIgaWQ9ImNhbmNlbCI+Q2FuY2VsbGluZyBhbmQgb21pdHRpbmcgZXZlbnRzPC9oMj4K Cgk8cD5QbGFucyBjaGFuZ2UgYW5kIHlvdSBtYXkgZmluZCB0aGF0IGEgZ2lnIGhhcyB0byBi ZSBjYW5jZWxsZWQuIFBlcmhhcHMgeW91IGFkdmVydGlzZSBhIHdlZWtseSBib290IGZhaXIg YnV0IHRoZSBmaWVsZCBpcyB3YXRlcmxvZ2dlZCBvbmUgd2Vlay4gTm8gcHJvYmxlbTogbm9t aW5hdGUgYSA8Y29kZT5za2lwZmllbGQ8L2NvZGU+IGluIHlvdXIgPGNvZGU+c21kX2NhbGVu ZGFyPC9jb2RlPiB0YWcgYW5kIGVudGVyIHRoZSBkYXRlIG9mIHRoZSBjYW5jZWxsZWQgZXZl bnQuPC9wPgoKCTxwPk9yIHlvdSBtaWdodCBydW4gYSB0aGVhdHJlIHdlYiBzaXRlIHRoYXQg aGFzIGEgdGhyZWUtd2VlayBwcm9kdWN0aW9uIHBlcmZvcm1hbmNlIG9uIHdlZWtuaWdodHMg b25seS4gSW5zdGVhZCBvZiBzZXR0aW5nIHVwIHRocmVlIHNlcGFyYXRlIGV2ZW50cyAmIzgy MTI7IG9uZSBmb3IgZWFjaCB3ZWVrICYjODIxMjsgbm9taW5hdGUgYW4gPGNvZGU+b21pdGZp ZWxkPC9jb2RlPiBhbmQgbGlzdCB0aGUgZGF0ZXMgb24gd2hpY2ggdGhlIHBlcmZvcm1hbmNl IGRvZXMgbm90IGFpci4gT21pdHRlZCBkYXRlcyB3aWxsIG5vdCwgdW5kZXIgYW55IGNpcmN1 bXN0YW5jZXMsIGFwcGVhciBvbiB0aGUgY2FsZW5kYXIgYW5kIHRoZXkgb3ZlcnJpZGUgY2Fu Y2VsbGVkIGRhdGVzL2hvbGlkYXlzLiBJZiA8Y29kZT5jZWxscGx1czwvY29kZT4gbW9kZSBp cyB1c2VkLCB5b3Ugd2lsbCBob3dldmVyIHNlZSBhIGNlbGwgZmxhZyBsYWJlbGxlZCA8Y29k ZT5vbWl0PC9jb2RlPiAocGx1cyBjbGFzcyBwcmVmaXgpIGluIGNhc2UgeW91IGRvIHdpc2gg dG8gc3R5bGUgc3VjaCBjZWxscy48L3A+CgoJPHA+VG8gc3BlY2lmeSB0aGUgZGF0ZXMgaW4g ZWl0aGVyIGZpZWxkLCB1c2UgYW55IGFjY2VwdGFibGUgZGF0ZSBmb3JtYXQsIGJ1dCBkZXJp dmF0aXZlcyBvZiBkZC1tb250aG5hbWUteXl5eSBvciBtb250aG5hbWUtZGQteXl5eSBhcmUg dGhlIG1vc3QgdW5hbWJpZ3VvdXMgdG8gYXZvaWQgcHJvYmxlbXMgKGUuZy4gaXMgPGNvZGU+ MS81PC9jb2RlPiBKYW4gNXRoIG9yIE1heSAxc3QpLiBZb3UgY2FuIHNwZWNpZnkgYXMgbWFu eSBjYW5jZWxsYXRpb25zIG9yIG9taXNzaW9ucyBhcyB5b3UgbGlrZTsgY29tbWEtc2VwYXJh dGUgZWFjaCBvbmUuPC9wPgoKCTxwPkJ5IGRlZmF1bHQsIGNhbmNlbGxlZCBldmVudHMgd2ls bCBub3QgYXBwZWFyIG9uIHRoZSBjYWxlbmRhci4gSWYgeW91IHVzZSA8Y29kZT5zaG93c2tp cHBlZD0mcXVvdDsxJnF1b3Q7PC9jb2RlPiB0aGUgZXZlbnQgd2lsbCBhcHBlYXIgaW4gdGhl IGNlbGwgYXMgbm9ybWFsIGFuZCB0aGUgPGNvZGU+Y2FuY2VsPC9jb2RlPiBmbGFnIHdpbGwg YXBwbHkgdG8gdGhlIGV2ZW50IChhbmQgY2VsbCBpZiB5b3UgY2hvb3NlKSBzbyB5b3UgbWF5 IGRldGVjdC9zdHlsZSBpdC48L3A+CgoJPGgyIGlkPSJleHRyYSI+RXh0cmEgZGF0ZXM8L2gy PgoKCTxwPldoZW4gZXZlbnRzIGFyZSA8YSBocmVmPSIjY2FuY2VsIj5jYW5jZWxsZWQ8L2E+ IHlvdSBtYXkgZWxlY3QgdG8gcmVzY2hlZHVsZSB0aGUgZXZlbnQgb24gYSBkaWZmZXJlbnQg ZGF0ZSBpbnN0ZWFkIG9mIGhhdmluZyB0byBjcmVhdGUgYSBuZXcgZXZlbnQgd2l0aCBpZGVu dGljYWwgZGV0YWlscy4gVXNlIHRoZSA8Y29kZT5leHRyYWZpZWxkPC9jb2RlPiB0byBzaW1w bHkgYWRkIGl0IHRvIHRoZSBjYWxlbmRhciBvbiBpdHMgbmV3IGRheS4gWW91IG1pZ2h0IGFs c28gdXNlIHRoaXMgZmVhdHVyZSBpZiB5b3UgaGF2ZSBhIDxhIGhyZWY9IiNyZWN1ciI+cmVj dXJyaW5nPC9hPiBldmVudCBvbiB0aGUgMXN0IG9mIGV2ZXJ5IG1vbnRoIGJ1dCBmb3Igc29t ZSByZWFzb24geW91IGhhdmUgdG8gbW92ZSBvbmUgb2YgdGhlIGV2ZW50cyBhIGRheSBvciB0 d28uIFNpbXBseSBjYW5jZWwgdGhlIG9mZmVuZGluZyBkYXRlIGFuZCBhZGQgdGhlIG5ldyBk YXRlIHVzaW5nIDxjb2RlPmV4dHJhZmllbGQ8L2NvZGU+LjwvcD4KCgk8cD5UaGUgbGlzdCBv ZiBkYXRlcyBjYW4gYmUgaW4gYW55IHN0YW5kYXJkIGRhdGUgZm9ybWF0LiBUaGV5IHdpbGwg YmUgYWRkZWQgdG8gdGhlIGNhbGVuZGFyIGFuZCBmbGFnZ2VkIGFzIDxjb2RlPmV4dHJhPC9j b2RlPi4gQWxzbyBzZWUgdGhlIDxjb2RlPmV4dHJhc3RyaWN0PC9jb2RlPiBhdHRyaWJ1dGUu PC9wPgoKCTxwPklmIHlvdXIgb3JpZ2luYWwgZXZlbnQgc3BhbnMgbW9yZSB0aGFuIG9uZSBk YXksIHlvdSBtYXkgZWxlY3QgdG8gc2NoZWR1bGUgdGhlIGVudGlyZSBibG9jayBhZ2Fpbi4g QWRkIGEgJiM4MjE2OysmIzgyMTc7IGFmdGVyIGFueSBkYXRlIHlvdSB3aXNoIHRvIHJlcGVh dCBpbiBpdHMgZW50aXJldHksIGUuZy4gPGNvZGU+MjAwOS1NYXItMTIrLCAyMDA5LUp1bi0x OCssIDIwMDktRmViLTE5PC9jb2RlPiB3b3VsZCBjb3B5IHRoZSBlbnRpcmUgZXZlbnQgYmxv Y2sgdG8gTWFyY2ggYW5kIEp1bmUsIGJ1dCBvbmx5IHRoZSAxc3QgZGF0ZSB0byBGZWIgMTl0 aC4gRXZlbnRzL2NlbGxzIGFyZSBmbGFnZ2VkIGFzIGJvdGggPGNvZGU+ZXh0cmE8L2NvZGU+ IGFuZCA8Y29kZT5tdWx0aTwvY29kZT4gd2hlcmUgYXBwbGljYWJsZS48L3A+CgoJPHA+Tm90 ZSB0aGF0IGlmIHlvdSBzY2hlZHVsZSBhbiBleHRyYSBldmVudCBvbiBhIGRheSB0aGF0IGFs cmVhZHkgY29udGFpbnMgdGhlIHNhbWUgZXZlbnQgKHBlcmhhcHMgb24gYSBzcGFubmVkIG9y IHJlY3VycmluZyBkYXRlKSB5b3UgbWF5IHNlZSB0d28gaWRlbnRpY2FsIGV2ZW50cyBvbiB0 aGUgc2FtZSBkYXkuIEJvdHRvbSBsaW5lOiBkb24mIzgyMTc7dCBkbyBpdCE8L3A+CgoJPGgy IGlkPSJob2xpZGF5cyI+SG9saWRheXM8L2gyPgoKCTxwPlB1YmxpYyBob2xpZGF5cyBuZWVk IG5vdCBiZSBhIG51aXNhbmNlIHRvIHlvdXIgZXZlbnRzLiBHaXZlIHRoZSBwbHVnaW4gYSBo b2xpZGF5IGxpc3QgYW5kIGl0JiM4MjE3O2xsIG1ha2Ugc3VyZSBhbnkgcmVjdXJyaW5nIG9y IG11bHRpIGV2ZW50cyBhcmUgbm90IHNjaGVkdWxlZCBvbiB0aG9zZSBkYXlzLiA8YSBocmVm PSIjZXZlbnRzIj5TdGFuZGFyZDwvYT4gb25lLW9mZiBldmVudHMgYXJlIHBlcm1pdHRlZCBi eSBkZWZhdWx0IGJlY2F1c2UgeW91IG1pZ2h0IHdhbnQgdG8gb3JnYW5pc2UgYSBzcGVjaWFs IGV2ZW50IG9uIHRoYXQgZGF5LCB0aG91Z2ggeW91IGNhbiBmb3JiaWQgdGhvc2UgdG9vIGlm IHlvdSB3aXNoLjwvcD4KCgk8cD5UaGUgbGlzdCBvZiBkYXRlcyB5b3Ugc3BlY2lmeSBjYW4g YmUgZW50ZXJlZCBkaXJlY3RseSBpbiBhIHN0cmluZyBpbiB0aGUgPGNvZGU+aG9saWRheXM8 L2NvZGU+IGF0dHJpYnV0ZSBvciBpbiBhIDxjb2RlPiZsdDt0eHA6dmFyaWFibGUgLyZndDs8 L2NvZGU+OjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZs dDt0eHA6dmFyaWFibGUgbmFtZT0mcXVvdDtuYXRfaG9scyZxdW90OwogICAgIHZhbHVlPSZx dW90O0RlYyAyNSwgMjYgRGVjLCAzMS9EZWMsIEphbi0xLAogICAgICAgIE1heSA0IDIwMDks IDIwMDktMDgtMzEmcXVvdDsgLyZndDsKJmx0O3R4cDpzbWRfY2FsZW5kYXIgaG9saWRheXM9 JnF1b3Q7dHhwdmFyOm5hdF9ob2xzJnF1b3Q7IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5B bGwgZG9uZSEgVGhhdCBsaXN0IHNob3dzIHNvbWUgb2YgdGhlIHZhcmlldHkgYW5kIGJyZWFk dGggb2YgZm9ybWF0cyB0aGUgcGx1Z2luIGFsbG93cy4gVGhlcmUgYXJlIG1vcmUuIE5vdGUg dGhhdCB0aGUgZXZlbnRzIHdpdGhvdXQgYSB5ZWFyIG9jY3VyIG9uIHRoZSBzYW1lIGRhdGUg ZXZlcnkgeWVhciwgd2hlcmVhcyB0aGUgb25lcyB3aXRoIGEgeWVhciB3aWxsIG9ubHkgb2Nj dXIgb24gdGhhdCBzcGVjaWZpYyBkYXRlLjwvcD4KCgk8cD5PbmNlIHlvdXIgZGF0ZXMgYXJl IGRlZmluZWQgeW91IGNhbiBjb250cm9sIHdoaWNoIGV2ZW50cyBhcmUgYWxsb3dlZCB0byBm YWxsIG9uIHRob3NlIGRhdGVzIHZpYSA8Y29kZT5ob2xpZGF5ZmxhZ3M8L2NvZGU+LiBDb21i aW5pbmcgdGhhdCBhdHRyaWJ1dGUsIDxjb2RlPnNob3dzcGFubmVkPC9jb2RlPiwgPGNvZGU+ c2hvd3NraXBwZWQ8L2NvZGU+IGFuZCB0aGUgZm9ybXMgJiM4MjEyOyBhbG9uZyB3aXRoIHRo ZSBjb25kaXRpb25hbCB0YWcgJiM4MjEyOyBjYW4gZ2l2ZSBhIHdpZGUgdmFyaWV0eSBvZiB3 YXlzIHRvIGRpc3BsYXkgZXZlbnRzIGFuZCBjZWxscy48L3A+CgoJPHA+SG9saWRheSBjZWxs cyBhcmUgZ2l2ZW4gdGhlIGZsYWcgPGNvZGU+aG9sczwvY29kZT4sIGFuZCBhbnkgZXZlbnQg dGhhdCBpcyBub3Qgc3BlY2lmaWNhbGx5IHBlcm1pdHRlZCBieSB0aGUgPGNvZGU+aG9saWRh eWZsYWdzPC9jb2RlPiBpcyBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIGEgPGNvZGU+Y2FuY2Vs PC9jb2RlPiBmbGFnIGlmIGl0IGZhbGxzIG9uIG9uZSBvZiB0aGUgZGF5cy4gT21pdHRlZCBk YXRlcyB3aWxsLCBob3dldmVyLCBjYXVzZSB0aGUgPGNvZGU+Y2FuY2VsPC9jb2RlPiBmbGFn IHRvIGJlIHJlbW92ZWQuPC9wPgoKCTxoMiBpZD0ic21kY2FsIj48Y29kZT4mbHQ7dHhwOnNt ZF9jYWxlbmRhciAvJmd0OzwvY29kZT48L2gyPgoKCTxwPlB1dCB0aGlzIHRhZyB3aGVyZXZl ciB5b3Ugd2FudCB5b3VyIGNhbGVuZGFyIHRvIGFwcGVhci4gVXNlIHRoZSBmb2xsb3dpbmcg YXR0cmlidXRlcyB0byBjb250cm9sIGl0cyBvdXRwdXQgZGlzcGxheSBhbmQgdXNlIHRoZSA8 YSBocmVmPSIjYXR0c3R5bGVzIj5zdHlsZSBhdHRyaWJ1dGVzPC9hPiB0byBkZXRlcm1pbmUg aG93IHRvIGFwcGx5IHN0eWxlcyB0byB0aGUgdmFyaW91cyBldmVudHMgYW5kIGNlbGxzLjwv cD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0iYXR0cmlidXRlcyI+TWFpbiBhdHRyaWJ1dGVz PC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zaXplPC9zcGFuPiA6IGNh bGVuZGFyIHNpemUsIDxjb2RlPmxhcmdlPC9jb2RlPiBvciA8Y29kZT5zbWFsbDwvY29kZT4u IFRoZSBzbWFsbCBpcyBtb3JlIGdlYXJlZCB0b3dhcmRzIGEgbWluaWNhbCwgYWx0aG91Z2gg ZnVuY3Rpb25hbGx5IHRoZXJlIDxhIGhyZWY9IiNzaXplZGlmZiI+aXNuJiM4MjE3O3QgbXVj aCBiZXR3ZWVuIHRoZW08L2E+LiBEZWZhdWx0OiA8Y29kZT5sYXJnZTwvY29kZT48L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+dGltZTwvc3Bhbj4gOiBzaG93IDxjb2RlPnBhc3Q8 L2NvZGU+LCA8Y29kZT5mdXR1cmU8L2NvZGU+LCBvciA8Y29kZT5hbnk8L2NvZGU+IGV2ZW50 LiBEZWZhdWx0OiA8Y29kZT5hbnk8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPmV4cGlyZWQ8L3NwYW4+IDogaGlkZSAoPGNvZGU+MDwvY29kZT4pIG9yIHNob3cgKDxj b2RlPjE8L2NvZGU+KSBleHBpcmVkIGV2ZW50cy4gTGVhdmUgYmxhbmsgdG8gdXNlIHRoZSA8 c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZHZhbmNlZCBQcmVmZXJlbmNlICYjODIx NjtQdWJsaXNoIGV4cGlyZWQgYXJ0aWNsZXMmIzgyMTc7PC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPmZpcnN0ZGF5PC9zcGFuPiA6IHRoZSAxc3QgZGF5IG9mIHRoZSB3ZWVrIHRv IHNob3cgaW4gdGhlIGNhbGVuZGFyLiAwPVN1bmRheSwgMT1Nb25kYXkgJiM4MjMwOyA2PVNh dHVyZGF5LiBEZWZhdWx0OiAwPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmRheWZv cm1hdDwvc3Bhbj4gOiB0aGUgd2F5IGluIHdoaWNoIHRoZSBkYXkgbmFtZXMgYXJlIHJlbmRl cmVkLiA8Y29kZT5BQkJSPC9jb2RlPiAodGhlIGRlZmF1bHQpIHNob3dzIHRoZSBkYXlzIGFz IE1vbiwgVHVlLCBXZWQsIGV0YyBvciA8Y29kZT5GVUxMPC9jb2RlPiByZW5kZXJzIHRoZWly IGZ1bGwgbmFtZXMuIEFsdGVybmF0aXZlbHksIHN1cHBseSBhbnkgdmFsaWQgPGEgaHJlZj0i aHR0cDovL3VrMi5waHAubmV0L3N0cmZ0aW1lIj5zdHJmdGltZSgpPC9hPiBjb2RlcyB0byB1 c2UgdGhhdCBpbnN0ZWFkLiBMb2NhbGUtc3BlY2lmaWMgbmFtZXMgYXJlIHJldHVybmVkLjxk aXYgY2xhc3M9ImJyZWFrIj5Zb3UgY2FuIGhhcmQtY29kZSB5b3VyIG93biBkYXkgbmFtZXM7 IHdyaXRlIGVhY2ggaXRlbSBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IHN1cnJvdW5kZWQg YnkgPGNvZGU+e308L2NvZGU+IGJyYWNrZXRzLiBJZiB5b3Ugd2FudGVkIHR3by1sZXR0ZXIg R2VybWFuIHdlZWsgZGF5cyB5b3UgY291bGQgdXNlOiA8Y29kZT5kYXlmb3JtYXQ9JnF1b3Q7 e1NvLE1vLERpLE1pLERvLEZyLFNhfSZxdW90OzwvY29kZT4uIFRoZSBmaXJzdCBkYXkgaW4g dGhlIGxpc3QgPHN0cm9uZz5tdXN0PC9zdHJvbmc+IHJlcHJlc2VudCBTdW5kYXkgb3IgdGhp bmdzIHdpbGwgYnJlYWs8L2Rpdj48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bW9u dGhmb3JtYXQ8L3NwYW4+IDogdGhlIHdheSBpbiB3aGljaCB0aGUgbW9udGggbmFtZXMgYXJl IHJlbmRlcmVkLiA8Y29kZT5GVUxMPC9jb2RlPiAodGhlIGRlZmF1bHQpIHNob3dzIHRoZSBm dWxsIG1vbnRoIG5hbWVzIG9yIDxjb2RlPkFCQlI8L2NvZGU+IHJlbmRlcnMgdGhlaXIgYWJi cmV2aWF0ZWQgbmFtZXMuIEFsdGVybmF0aXZlbHksIHN1cHBseSBhbnkgdmFsaWQgPGEgaHJl Zj0iaHR0cDovL3VrMi5waHAubmV0L3N0cmZ0aW1lIj5zdHJmdGltZSgpPC9hPiBjb2RlcyB0 byB1c2UgdGhhdCBpbnN0ZWFkLiBMb2NhbGUtc3BlY2lmaWMgbmFtZXMgYXJlIHJldHVybmVk LjxkaXYgY2xhc3M9ImJyZWFrIj5Zb3UgY2FuIGhhcmQtY29kZSB5b3VyIG93biBtb250aCBu YW1lczsgd3JpdGUgZWFjaCBpdGVtIGFzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgc3Vycm91 bmRlZCBieSA8Y29kZT57fTwvY29kZT4gYnJhY2tldHMuIElmIHlvdSB3YW50ZWQgc2luZ2xl LWxldHRlciBtb250aCBuYW1lcyB5b3UgY291bGQgdXNlOiA8Y29kZT5tb250aGZvcm1hdD0m cXVvdDt7SixGLE0sQSxNLEosSixBLFMsTyxOLER9JnF1b3Q7PC9jb2RlPi4gVGhlIGZpcnN0 IG1vbnRoIGluIHRoZSBsaXN0IDxzdHJvbmc+bXVzdDwvc3Ryb25nPiByZXByZXNlbnQgSmFu dWFyeSBvciB0aGluZ3Mgd2lsbCBicmVhazwvZGl2PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5zZWxlY3Q8L3NwYW4+IDogdXNlIGEgc2VsZWN0IGRyb3Bkb3duIGZvciByYXBp ZCBhY2Nlc3MgdG8gd2Vla3MsIG1vbnRocyBvciB5ZWFycyBpbnN0ZWFkIG9mIHNlZWluZyBq dXN0IHRoZSBuYW1lcy4gRGVmYXVsdDogdW5zZXQsIGJ1dCB5b3UgbWF5IG1ha2UgYSAoY29t bWEtc2VwYXJhdGVkKSBsaXN0IGZyb20gZWl0aGVyIDxjb2RlPndlZWs8L2NvZGU+IC8gPGNv ZGU+bW9udGg8L2NvZGU+IG9yIDxjb2RlPnllYXI8L2NvZGU+ICh3ZWVrIGFuZCBtb250aCBh cmUgbXV0dWFsbHkgZXhjbHVzaXZlKS48ZGl2IGNsYXNzPSJicmVhayI+WW91IG1heSBhbHNv IHNwZWNpZnkgdXAgdG8gdHdvIGV4dHJhIGFyZ3VtZW50cywgc2VwYXJhdGVkIGJ5IDxjb2Rl Pjo8L2NvZGU+IGNoYXJzLiBUaGVzZSBhZGQgdGV4dCBpbiBmcm9udCBvZiBhbmQgYmVoaW5k IHRoZSB3ZWVrL21vbnRoL3llYXIsIHJlc3BlY3RpdmVseS4gRm9yIGV4YW1wbGU6IDxjb2Rl PnNlbGVjdD0mcXVvdDt3ZWVrOldFRUsjLCB5ZWFyOiZsdDs6Jmd0OyZxdW90OzwvY29kZT4g d291bGQgcmVuZGVyIGEgc2VsZWN0IGxpc3Qgd2l0aCBlbnRyaWVzIHRoYXQgbWlnaHQgbG9v ayBsaWtlIHRoaXM6IDxjb2RlPldFRUsjMTUgJmx0OzIwMDkmZ3Q7PC9jb2RlPjwvZGl2Pjwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zZWxlY3RidG48L3NwYW4+IDogYnkgZGVm YXVsdCwgdGhlIHNlbGVjdCBkcm9wZG93bnMgd2lsbCBhdXRvLXN1Ym1pdCB3aGVuIHRoZXkg YXJlIGNoYW5nZWQuIElmIHlvdSBwcmVmZXIgYSBkZWRpY2F0ZWQgc3VibWl0IGJ1dHRvbiwg Z2l2ZSB0aGUgdGV4dCB5b3Ugd2lzaCB0byBhcHBlYXIgb24gdGhlIGJ1dHRvbiBoZXJlLiBU aGUgYnV0dG9uIGhhcyBhIGZpeGVkIGNsYXNzIG9mIDxjb2RlPnNtZF9jYWxfaW5wdXQ8L2Nv ZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmlzb3dlZWtzPC9zcGFuPiA6IHNo b3cgPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlayBudW1iZXJzIGFzIGEgY29s dW1uIGF0IHRoZSBzdGFydCBvZiB0aGUgY2FsZW5kYXIuIEFueSB0ZXh0IGluIHRoaXMgYXR0 cmlidXRlIGVuYWJsZXMgdGhlIGZlYXR1cmUsIGFuZCBiZWNvbWVzIHRoZSBoZWFkaW5nIG9m IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVrIGNvbHVtbi4gWW91IG1h eSBjaGFuZ2UgdGhlIGRlZmF1bHQgd2VlayBudW1iZXIgaW4gZWFjaCBjZWxsIGJ5IGFkZGlu ZyBhIGNvbW1hIGFuZCBzb21lIHRleHQ7IHdoYXRldmVyIHlvdSBlbnRlciB3aWxsIGJlIHB1 dCBpbiBlYWNoIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHdlZWsgY2VsbC4gVXNl IHRoZSByZXBsYWNlbWVudCBjb2RlcyA8Y29kZT57d2Vla308L2NvZGU+LCA8Y29kZT57bW9u dGh9PC9jb2RlPiwgPGNvZGU+e3llYXJ9PC9jb2RlPiBvciA8Y29kZT57aXNveWVhcn08L2Nv ZGU+IGluIHlvdXIgbWFya3VwIHRvIGluc2VydCB0aGUgcmVsZXZhbnQgaW5mby4gPGRpdiBj bGFzcz0iYnJlYWsiPkV4YW1wbGU6IDxjb2RlPmlzb3dlZWtzPSZxdW90O3drLCAje3dlZWt9 JnF1b3Q7PC9jb2RlPiB3aWxsIHJlbmRlciAmIzgyMTY7d2smIzgyMTc7IGF0IHRoZSB0b3Ag b2YgdGhlIGNvbHVtbiBhbmQgc29tZXRoaW5nIGxpa2UgPGNvZGU+IzI0PC9jb2RlPiwgPGNv ZGU+IzI1PC9jb2RlPiwgPGNvZGU+IzI2PC9jb2RlPiYjODIzMDsgYmVuZWF0aCBpdC4gSWYg dGhlIGZpcnN0IGl0ZW0gaXMgb21pdHRlZCwgdGhlcmUgd2lsbCBiZSBubyBjb2x1bW4gaGVh ZGluZy48L2Rpdj48ZGl2IGNsYXNzPSJicmVhayI+Tm90ZSB0aGF0IGlmIHRoaXMgZmVhdHVy ZSBpcyBlbmFibGVkLCA8Y29kZT5maXJzdGRheTwvY29kZT4gd2lsbCBiZSBmb3JjZWQgdG8g c3RhcnQgb24gYSBNb25kYXkgYXMgZ292ZXJuZWQgYnkgdGhlIDxzcGFuIGNsYXNzPSJjYXBz Ij5JU088L3NwYW4+IHNwZWNpZmljYXRpb24uIERlZmF1bHQ6IHVuc2V0PC9kaXY+PC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnN0YXR1czwvc3Bhbj4gOiBldmVudHMgaW4gdGhp cyBsaXN0IG9mIHN0YXR1cyBhcmUgcHVibGlzaGVkLiBEZWZhdWx0OiA8Y29kZT5saXZlPC9j b2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jYXRlZ29yeTwvc3Bhbj4gOiBm aWx0ZXIgZXZlbnRzIGJ5IHRoaXMgbGlzdCBvZiBjYXRlZ29yaWVzLiBEZWZhdWx0OiB1bnNl dDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zZWN0aW9uPC9zcGFuPiA6IGZpbHRl ciBldmVudHMgYnkgdGhpcyBsaXN0IG9mIHNlY3Rpb25zLiBEZWZhdWx0OiB1bnNldDwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5hdXRob3I8L3NwYW4+IDogZmlsdGVyIGV2ZW50 cyBieSB0aGlzIGxpc3Qgb2YgYXV0aG9yIGxvZ2luIG5hbWVzLiBEZWZhdWx0OiB1bnNldDwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5yZWFsbmFtZTwvc3Bhbj4gOiBmaWx0ZXIg ZXZlbnRzIGJ5IHRoaXMgbGlzdCBvZiBhdXRob3IgUmVhbCBOYW1lcyAobm90ZTogYWRkcyBv bmUgZXh0cmEgcXVlcnkpLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5zaG93YWxsPC9zcGFuPiA6IGlmIHlvdXIgY2FsZW5kYXIgYXBwZWFycyBvbiB0 aGUgZnJvbnQgcGFnZSBhbmQgeW91IGhhdmUgPGVtPm5vdDwvZW0+IHVzZWQgdGhlIDxjb2Rl PnNlY3Rpb248L2NvZGU+IGF0dHJpYnV0ZSB0aGUgY2FsZW5kYXIgb25seSBzaG93cyBldmVu dHMgZnJvbSBzZWN0aW9ucyB0aGF0IGhhdmUgdGhlaXIgPGNvZGU+T24gZnJvbnQgcGFnZTwv Y29kZT4gcmFkaW8gYnV0dG9uIHNldC4gVXNlIDxjb2RlPnNob3dhbGw9JnF1b3Q7MSZxdW90 OzwvY29kZT4gdG8gc2hvdyBhbGwgZXZlbnRzIGZyb20gYWxsIHNlY3Rpb25zIG9uIGZyb250 IHBhZ2UgY2FsZW5kYXJzPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmlkPC9zcGFu PiA6IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gSUQgdG8gYXBwbHkgdG8g dGhlIHRhYmxlIHRoYXQgaG9sZHMgdGhlIGNhbGVuZGFyLiBUaGlzIGlzIHRoZSB2YWx1ZSBv ZiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdmFyaWFibGUgPGNvZGU+Y2Fs aWQ8L2NvZGU+IGFuZCBpdHMgZGVmYXVsdCBpcyB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5uYXZpZDwvc3Bhbj4gOiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8 L3NwYW4+IElEIHRvIGFwcGx5IHRvIHRoZSBwcmV2L25leHQvbW9udGgveWVhciBuYXZpZ2F0 aW9uIGZvcm0uIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i Pm5hdmFycm93PC9zcGFuPiA6IGNvbW1hLXNlcGFyYXRlZCBwYWlyIG9mIGl0ZW1zIHlvdSB3 YW50IHRvIGFwcGVhciBhcyBwcmV2L25leHQgYXJyb3dzIGluIHRoZSBjYWxlbmRhci4gRGVm YXVsdDogPGNvZGU+JmFtcDsjNjA7LCAmYW1wOyM2Mjs8L2NvZGU+PC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPm1vbnRoPC9zcGFuPiA6IHN0YXJ0IHRoZSBjYWxlbmRhciBvbiB0 aGlzIG1vbnRoIGZyb20gMSAoSmFudWFyeSkgdG8gMTIgKERlY2VtYmVyKS4gTm9ybWFsIGNh bGVuZGFyIG5hdmlnYXRpb24gb3ZlcnJpZGVzIHRoaXMgdmFsdWUuIElmIDxjb2RlPnN0YXRp YzwvY29kZT4gaXMgdXNlZCwgdGhpcyBtb250aCBiZWNvbWVzIHRoZSBvbmx5IG9uZSB5b3Ug bWF5IHZpZXcuIElmIHVuc2V0LCBhbmQgbm8gPGNvZGU+bT08L2NvZGU+IHZhbHVlIGFwcGVh cnMgb24gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGxpbmUsIHRoZSBjdXJy ZW50IG1vbnRoIGlzIHVzZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+d2Vlazwv c3Bhbj4gOiBzdGFydCB0aGUgY2FsZW5kYXIgZHVyaW5nIHRoZSBtb250aCBjb250YWluaW5n IHRoaXMgPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlayAoZnJvbSAxIHRvIDUz KS4gSWdub3JlZCBpZiA8Y29kZT5zdGF0aWM8L2NvZGU+IG9yIG9uZSBvZiB0aGUgY2FsZW5k YXIgbmF2aWdhdGlvbiBjb250cm9scyBpcyB1c2VkLiBJZiBhIDxjb2RlPnc9PC9jb2RlPiB2 YWx1ZSBhcHBlYXJzIG9uIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBsaW5l LCB0aGUgZ2l2ZW4gd2VlayBvdmVycmlkZXMgYW55IG1vbnRoIHZhbHVlPC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPnllYXI8L3NwYW4+IDogc3RhcnQgdGhlIGNhbGVuZGFyIGF0 IHRoaXMgNC1kaWdpdCB5ZWFyLiBOb3JtYWwgY2FsZW5kYXIgbmF2aWdhdGlvbiBvdmVycmlk ZXMgdGhpcyB2YWx1ZS4gSWYgPGNvZGU+c3RhdGljPC9jb2RlPiBpcyB1c2VkLCB0aGlzIHll YXIgYmVjb21lcyB0aGUgb25seSBvbmUgeW91IG1heSB2aWV3LiBJZiB1bnNldCwgYW5kIG5v IDxjb2RlPnk9PC9jb2RlPiB2YWx1ZSBhcHBlYXJzIG9uIHRoZSA8c3BhbiBjbGFzcz0iY2Fw cyI+VVJMPC9zcGFuPiBsaW5lLCB0aGUgY3VycmVudCB5ZWFyIGlzIHVzZWQ8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+eWVhcndpZHRoPC9zcGFuPiA6IGEgY29tbWEtc2VwYXJh dGVkIGxpc3QgdGhhdCBzcGVjaWZpZXMgaG93IG1hbnkgeWVhcnMgeW91ciBjYWxlbmRhciBz cGFucy4gVGhlIGRlZmF1bHQgKDApIHVzZXMgdGhlIGVhcmxpZXN0IChwb3N0ZWQpIGV2ZW50 IGluIHRoZSBzZWN0aW9uIGFzIHRoZSBlYXJsaWVzdCB5ZWFyLCBhbmQgdGhlIGxhdGVzdCAo bW9kaWZpZWQgb3IgcG9zdGVkLCB3aGljaGV2ZXIgaXMgZ3JlYXRlcikgZXZlbnQgYXMgdGhl IGxhdGVzdCB5ZWFyLiBZb3Ugd2lsbCBub3QgYmUgcGVybWl0dGVkIHRvIG5hdmlnYXRlIHRo ZSBjYWxlbmRhciBvdXRzaWRlIHRoaXMgcmFuZ2UuPGRpdiBjbGFzcz0iYnJlYWsiPlRvIHdp ZGVuIHRoZSByYW5nZSwgc3BlY2lmeSBzb21lIHZhbHVlcywgZm9yIGV4YW1wbGUgPGNvZGU+ eWVhcndpZHRoPSZxdW90OzIsNCZxdW90OzwvY29kZT4gd2lsbCBzdWJ0cmFjdCAyIHdob2xl IHllYXJzIGZyb20gdGhlIGVhcmxpZXN0IGV2ZW50IGFuZCBhZGQgNCB3aG9sZSB5ZWFycyB0 byB0aGUgbGF0ZXN0IGV2ZW50LiBJZiB5b3Ugc3BlY2lmeSBhIHNpbmdsZSBudW1iZXIsIHRo YXQgdmFsdWUgd2lsbCBiZSB1c2VkIHRvIGV4cGFuZCB0aGUgcmFuZ2UgZXF1YWxseSBpbiBi b3RoIGRpcmVjdGlvbnMuPC9kaXY+PGRpdiBjbGFzcz0iYnJlYWsiPiBJZiB5b3UgYWRkICYj ODIxNjtjJiM4MjE3OyB0byBlaXRoZXIgdmFsdWUgdGhlIGN1cnJlbnQgeWVhciBpcyB1c2Vk IGluc3RlYWQgb2YgdGhlIGVhcmxpZXN0IG9yIGxhdGVzdCBldmVudCwgZS5nLiA8Y29kZT55 ZWFyd2lkdGg9JnF1b3Q7Miw0YyZxdW90OzwvY29kZT4gd2lsbCBzdWJ0cmFjdCAyIHllYXJz IGZyb20gdGhlIGVhcmxpZXN0IGV2ZW50IGFuZCBhZGQgNCB3aG9sZSB5ZWFycyB0byB0b2Rh eSYjODIxNztzIGRhdGU8L2Rpdj48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+cmVt YXA8L3NwYW4+IDogd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgY2FsZW5kYXJzIG9uIGEg cGFnZSBpdCBpcyBvZnRlbiBiZW5lZmljaWFsIHRvIHVzZSBkaWZmZXJlbnQgbmFtZXMgZm9y IDxjb2RlPnc9PC9jb2RlPiwgPGNvZGU+bT08L2NvZGU+IG9yIDxjb2RlPnk9PC9jb2RlPiBp biB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gc28geW91IGNhbiBuYXZpZ2F0 ZSBjYWxlbmRhcnMgaW5kaXZpZHVhbGx5LiBSZW5hbWUgdGhlIHcsIG0sICZhbXA7IHkgdmFy aWFibGVzLCBmb3IgZXhhbXBsZTogPGNvZGU+cmVtYXA9JnF1b3Q7dzp3aywgeTp5ciZxdW90 OzwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zm9ybTwvc3Bhbj4gOiB1 c2UgdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBmb3JtIHRvIHByb2Nlc3Mg ZWFjaCBldmVudC4gSWYgdGhlIGNhbGVuZGFyIHRhZyBpcyB1c2VkIGFzIGEgY29udGFpbmVy IGl0IHdpbGwgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRoZSBmb3JtLiBJZiBuZWl0aGVy IGFyZSB1c2VkLCBhIGRlZmF1bHQgaXMgdXNlZCAoTGFyZ2U6IGh5cGVybGlua2VkIGFydGlj bGUgdGl0bGUsIFNtYWxsOiBlbXB0eSBldmVudCk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+c3BhbmZvcm08L3NwYW4+IDogcmVuZGVyIHNwYW5uZWQgZXZlbnRzIGRpZmZlcmVu dGx5IHRvIHN0YW5kYXJkIGV2ZW50czsgdGhleSB1c3VhbGx5IHVzZSB0aGUgc2FtZSA8Y29k ZT5mb3JtPC9jb2RlPi9jb250YWluZXIuIElmIG5laXRoZXIgYXJlIHNwZWNpZmllZCwgYSBy aWdodC1hcnJvdyB3aWxsIGJlIHVzZWQgdG8gaW5kaWNhdGUgY29udGludWF0aW9uIG9mIHRo ZSBwcmV2aW91cyBkYXkmIzgyMTc7cyBldmVudC4gTm90ZSB0aGUgZmlyc3QgZGF5IG9mIGEg c3Bhbm5lZCBzZXQgaXMgPGVtPm5vdDwvZW0+IHBhc3NlZCB0byB0aGUgPGNvZGU+c3BhbmZv cm08L2NvZGU+OyBvbmx5IGNvbnRpbnVhdGlvbiBjZWxscyBhcmUgcGFzc2VkIHRvIGl0PC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnJlY3VyZm9ybTwvc3Bhbj4gOiByZW5kZXIg cmVjdXJyaW5nIGV2ZW50cyBkaWZmZXJlbnRseSB0byBzdGFuZGFyZCBldmVudHMuIFRoZSBm aXJzdCBldmVudCBvZiBhIHJlY3VycmluZyBzZXQgaXMgPGVtPm5vdDwvZW0+IHBhc3NlZCB0 byA8Y29kZT5yZWN1cmZvcm08L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PmNlbGxmb3JtPC9zcGFuPiAoPHNwYW4gY2xhc3M9InJlcXVpcmVkIj5vbmx5IG9uIGxhcmdl IGNhbGVuZGFyczwvc3Bhbj4pIDogdXNlIHRoaXMgaWYgeW91IHdpc2ggdG8gYnVpbGQgZWFj aCBjZWxsIGVudGlyZWx5IGZyb20gc2NyYXRjaC4gVGhlcmUgYXJlIHNvbWUgPGEgaHJlZj0i I2NlbGxmb3JtIj5yZXBsYWNlbWVudCB2YXJpYWJsZXM8L2E+IHlvdSBjYW4gdXNlIHRvIGlu c2VydCBkeW5hbWljIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBpbiB5b3VyIGNlbGxzPC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnN0ZXBmaWVsZDwvc3Bhbj4gOiB0aGUgSUQgb2Yg YSBmaWVsZCB3aXRoaW4gd2hpY2ggYW4gZXZlbnQgbWF5IGJlIHRvbGQgdG8gcmVwZWF0LiBO b3RlIGl0IGlzIHRoZSBmaWVsZCYjODIxNztzIElEIDxlbT5ub3QgaXRzIG5hbWU8L2VtPiwg c28gZm9yIGN1c3RvbSBmaWVsZHMgeW91IG11c3QgdXNlIDxjb2RlPmN1c3RvbV8xPC9jb2Rl PiBvciA8Y29kZT5jdXN0b21fMjwvY29kZT4gZXRjLiBXaXRob3V0IHRoaXMgYXR0cmlidXRl LCBubyA8YSBocmVmPSIjcmVjdXIiPnJlY3VycmluZyBldmVudHM8L2E+IG1heSBiZSBkZWZp bmVkPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm9taXRmaWVsZDwvc3Bhbj4gOiB0 aGUgSUQgKG5vdCBuYW1lKSBvZiBhIGZpZWxkIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIGRh dGVzIG9uIHdoaWNoIHRoaXMgZXZlbnQgaXMgdG8gYmUgPGEgaHJlZj0iI2NhbmNlbCI+b21p dHRlZDwvYT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2tpcGZpZWxkPC9zcGFu PiA6IHRoZSBJRCAobm90IG5hbWUpIG9mIGEgZmllbGQgdGhhdCBjb250YWlucyBhIGxpc3Qg b2YgZGF0ZXMgb24gd2hpY2ggdGhpcyBldmVudCBpcyA8YSBocmVmPSIjY2FuY2VsIj5jYW5j ZWxsZWQ8L2E+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmV4dHJhZmllbGQ8L3Nw YW4+IDogdGhlIElEIChub3QgbmFtZSkgb2YgYSBmaWVsZCBmcm9tIHdoaWNoIGEgbGlzdCBv ZiA8YSBocmVmPSIjZXh0cmEiPmFkZGl0aW9uYWwgZXZlbnQgZGF0ZXM8L2E+IG1heSBiZSBn aXZlbjsgdGhlIHNhbWUgZXZlbnQgZGV0YWlscyB3aWxsIGJlIGNvcGllZCB0byB0aGUgbmV3 IGRheShzKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5leHRyYXN0cmljdDwvc3Bh bj4gOiBhbnkgZGF0ZXMgaW4gPGNvZGU+ZXh0cmFmaWVsZDwvY29kZT4gYXV0b21hdGljYWxs eSBhcHBlYXIgb24gdGhlIGNhbGVuZGFyLCBidXQgeW91IG1heSBjaG9vc2UgdG8gcmVzdHJp Y3QgbmV3IGRhdGVzIGZyb20gYXBwZWFyaW5nIGFmdGVyIHRoZSBldmVudCYjODIxNztzIGV4 cGlyeSBkYXRlIGJ5IHNldHRpbmcgPGNvZGU+ZXh0cmFzdHJpY3Q9JnF1b3Q7MSZxdW90Ozwv Y29kZT4uIERlZmF1bHQ6IDA8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2hvd3Nr aXBwZWQ8L3NwYW4+IDogc2hvdyAoMSkgb3IgaGlkZSAoMCkgY2FuY2VsbGVkIGV2ZW50cyBv biB0aGUgY2FsZW5kYXIuIERlZmF1bHQ6IDA8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+c2hvd3NwYW5uZWQ8L3NwYW4+IDogc2hvdyAoMSkgb3IgaGlkZSAoMCkgc3Bhbm5lZCBl dmVudHMgb24gdGhlIGNhbGVuZGFyLiBEZWZhdWx0OiAxPC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPmhvbGlkYXlzPC9zcGFuPiA6IGxpc3Qgb2YgZGF0ZXMgdGhhdCBhcmUgZGVj cmVlZCBhcyA8YSBocmVmPSIjaG9saWRheXMiPmhvbGlkYXlzPC9hPi4gTWF5IGJlIGRlZmVy cmVkIHRvIGEgPGNvZGU+Jmx0O3R4cDp2YXJpYWJsZSAvJmd0OzwvY29kZT4sIGluIHdoaWNo IGNhc2UgZGVmaW5lIHlvdXIgbGlzdCBpbiBhIG5hbWVkIHZhcmlhYmxlIGFuZCB1c2UgPGNv ZGU+aG9saWRheXM9JnF1b3Q7dHhwdmFyOm15X3Zhcl9uYW1lJnF1b3Q7PC9jb2RlPiB0byBy ZWFkIHRoZW0gaW50byB0aGUgcGx1Z2luPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PmhvbGlkYXlmbGFnczwvc3Bhbj4gOiBwZXJtaXQgY2VydGFpbiA8YSBocmVmPSIjbmFtaW5n Ij5ldmVudCBmbGFnczwvYT4gdG8gYmUgc2NoZWR1bGVkIG9uIGhvbGlkYXlzLiBEZWZhdWx0 OiA8Y29kZT5zdGFuZGFyZDwvY29kZT4gKGkuZS4gc3RhbmRhcmQgb25lLW9mZiBldmVudHMp IGJ1dCBvdGhlcnMgbWF5IGJlIGxpc3RlZCBhcyB3ZWxsLiBDaG9vc2UgZnJvbSA8Y29kZT5z dGFuZGFyZDwvY29kZT4sIDxjb2RlPnJlY3VyPC9jb2RlPiBvciA8Y29kZT5tdWx0aTwvY29k ZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGlua3Bvc3RlZDwvc3Bhbj4gKDxz cGFuIGNsYXNzPSJyZXF1aXJlZCI+b25seSBvbiBzbWFsbCBjYWxlbmRhcnM8L3NwYW4+KSA6 IGVhY2ggY2VsbCB0aGF0IGNvbnRhaW5zIGFuIDxhIGhyZWY9IiNuYW1pbmciPmV2ZW50IGZs YWc8L2E+IG9mIHRoZSBnaXZlbiB0eXBlKHMpIHdpbGwgaGF2ZSBpdHMgZGF5IG51bWJlciBs aW5rZWQgdG8gdGhlIGV2ZW50JiM4MjE3O3MgdHJ1ZSBzdGFydCBkYXRlIGluc3RlYWQgb2Yg dGhlIGNlbGwmIzgyMTc7cyBkYXRlLiBUaHVzLCBpZiB5b3UgaGF2ZSBhIHdlZWtseSBldmVu dCB0aGF0IHN0YXJ0cyBvbiB0aGUgMjB0aCBEZWNlbWJlciAyMDA4LCBzZXR0aW5nIDxjb2Rl Pmxpbmtwb3N0ZWQ9JnF1b3Q7cmVjdXImcXVvdDs8L2NvZGU+IHdpbGwgY2F1c2UgdGhlIGxp bmsgdG8gYmUgPGNvZGU+ZGF0ZT0yMDA4LTEyLTIwPC9jb2RlPiBldmVyeSB3ZWVrLiBUaGlz IGFsbG93cyB5b3UgdG8gYWx3YXlzIGxpbmsgdG8gYSB2YWxpZCBhcnRpY2xlL2V2ZW50LiBX aXRob3V0IGxpbmtwb3N0ZWQsIHRoZSBkYXRlcyB3b3VsZCBiZSAyMDA4LTEyLTIwLCAyMDA4 LTEyLTI3LCAyMDA5LTAxLTAzLCBhbmQgc28gb24uIERlZmF1bHQ6IDxjb2RlPnJlY3VyLCBt dWx0aSwgbXVsdGlwcmV2LCBtdWx0aWxhc3Q8L2NvZGU+IChpLmUuIGFueSByZWN1cnJpbmcg b3Igc3Bhbm5lZCBldmVudCkuIE5vdGUgdGhhdCBpZiBtb3JlIHRoYW4gb25lIGV2ZW50IG9j Y3VycyBpbiB0aGUgY2VsbCwgdGhlIGxpbmsgd2lsbCBvbmx5IGJlIHRvIHRoZSBmaXJzdCBl dmVudCB0aGUgcGx1Z2luIGZpbmRzPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm1h aW50YWluPC9zcGFuPiA6IGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhl IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHdoZW4gbmF2aWdhdGluZyB0aGUgY2Fs ZW5kYXIgdXNpbmcgdGhlIG5leHQvcHJldiBvciBtb250aC95ZWFyIHNlbGVjdCBsaXN0cy4g SXRlbXMgdGhhdCB5b3Ugd2FudCB0byBwcmVzZXJ2ZSBzaG91bGQgYmUgY29tbWEtc2VwYXJh dGVkLiBDaG9vc2UgZnJvbSA8Y29kZT5jYWxpZDwvY29kZT4sIDxjb2RlPnNlY3Rpb248L2Nv ZGU+LCA8Y29kZT5jYXRlZ29yeTwvY29kZT4sIDxjb2RlPmF1dGhvcjwvY29kZT4sIDxjb2Rl PmFydGljbGU8L2NvZGU+LCA8Y29kZT5wZzwvY29kZT4gb3IgeW91ciBvd24gPHNwYW4gY2xh c3M9ImNhcHMiPlVSTDwvc3Bhbj4gdmFyaWFibGUuIERlZmF1bHQ6IDxjb2RlPmNhbGlkPC9j b2RlPi48ZGl2IGNsYXNzPSJicmVhayI+VXNlIDxjb2RlPm1haW50YWluPSZxdW90O3NlY3Rp b24sIGFydGljbGUsIGNhbGlkJnF1b3Q7PC9jb2RlPiBpZiB5b3UgaGF2ZSBhbiBpbmRpdmlk dWFsIGFydGljbGUgcGFnZSB3aXRoIGEgY2FsZW5kYXIgaW4gYSBzaWRlYmFyLCBzbyB0aGUg Y3VycmVudGx5IHZpZXdlZCBhcnRpY2xlIHdpbGwgcmVtYWluIGluIHZpZXcgd2hlbiBjaGFu Z2luZyBkYXRlLiBJZiB5b3Ugd2lzaCB0byBtYWludGFpbiBzdGF0ZSB5b3Vyc2VsZiBvciBk byBzb21ldGhpbmcgZXhvdGljLCBlbXB0eSB0aGlzIGF0dHJpYnV0ZSBmaXJzdCB0byBhdm9p ZCB3ZWlyZG5lc3M8L2Rpdj48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bmFtZXZh bDwvc3Bhbj4gOiBhZGQgeW91ciBvd24gbmFtZS92YWx1ZSBwYWlycyB0byB0aGUgY2FsZW5k YXImIzgyMTc7cyA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPi4gZS5nLiA8Y29kZT5u YW1ldmFsPSZxdW90O3RyYWNrZXI9bXljYWwsIGtlZXA9MSZxdW90OzwvY29kZT4gd291bGQg YWRkIDxjb2RlPj90cmFja2VyPW15Y2FsJmFtcDtrZWVwPTE8L2NvZGU+IHRvIHRoZSA8c3Bh biBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPi4gVXNlZnVsIGlmIHlvdSB3YW50IHRvIDxjb2Rl Pm1haW50YWluPC9jb2RlPiBzb21lIHZhbHVlcyB3aGljaCB5b3UgY2FuJiM4MjE3O3QgYWRk IHRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBvbiBwYWdlIGxvYWQ8L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c3RhdGljPC9zcGFuPiA6IGZvcmNlIHRoZSBj YWxlbmRhciB0byBiZSBmaXhlZCB0byBvbmUgbW9udGgveWVhciAoaS5lLiBubyBuYXZpZ2F0 aW9uKS4gTW9udGggYW5kIHllYXIgZGVjaWRlZCBieSBhdHRyaWJ1dGVzIDxjb2RlPm1vbnRo PC9jb2RlPiBhbmQgPGNvZGU+eWVhcjwvY29kZT4gb3IgJiM4MjEyOyBpZiBvbWl0dGVkICYj ODIxMjsgdGhlIGN1cnJlbnQgZGF0ZSB3aWxsIGJlIHVzZWQ8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+Z210PC9zcGFuPiA6IGN1cnJlbnRseSB1bnVzZWQsIHBlbmRpbmcgcmV2 aWV3PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxhbmc8L3NwYW4+IDogY3VycmVu dGx5IHVudXNlZCwgcGVuZGluZyByZXZpZXc8L2xpPgoJPC91bD4KCgk8aDMgY2xhc3M9ImF0 dHMgIiBpZD0iYXR0c3R5bGVzIj5TdHlsZSBhdHRyaWJ1dGVzPC9oMz4KCgk8cD5PbmNlIHlv dSBoYXZlIHR3ZWFrZWQgeW91ciBiYXNpYyBjYWxlbmRhciBhcyBkZXNjcmliZWQgYWJvdmUg eW91IGNhbiBzdHlsZSBpdCB1c2luZyB0aGVzZSBhdHRyaWJ1dGVzOjwvcD4KCgk8dWw+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jbGFzc2xldmVsczwvc3Bhbj4gOiBjbGFzc2VzIGNh biBiZSBhcHBsaWVkIHRvIGV2ZW50cywgY2VsbHMsIG9yIGJvdGguIFlvdSBtYXkgYWxzbyBw cm9tb3RlIChpLmUuIGNvcHkpIGFsbCBldmVudC1sZXZlbCBjbGFzc2VzIHRoYXQgb2NjdXIg aW4gYSBkYXkgdG8gdGhlIGNlbGwgbGV2ZWwgc28geW91IGNhbiBjb2xvdXIgdGhlIGNlbGwg YmFzZWQgb24gdGhlIGV2ZW50cyB0aGF0IGl0IGNvbnRhaW5zLiBVc2UgYW55IG9mIDxjb2Rl PmV2ZW50PC9jb2RlPiwgPGNvZGU+Y2VsbDwvY29kZT4sIG9yIDxjb2RlPmNlbGxwbHVzPC9j b2RlPiAoZm9yIGNvcHlpbmcgdW5pcXVlIGV2ZW50IGNsYXNzZXMgdG8gdGhlIGNlbGwpLiBO b3RlIHlvdSBzaG91bGQgbm90IHVzZSA8Y29kZT5jZWxsPC9jb2RlPiBhbmQgPGNvZGU+Y2Vs bHBsdXM8L2NvZGU+IHRvZ2V0aGVyIGJlY2F1c2UgdGhlIGxhdHRlciBvdmVycmlkZXMgdGhl IGZvcm1lci4gRGVmYXVsdDogPGNvZGU+Y2VsbCwgZXZlbnQ8L2NvZGU+PC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzcHJlZml4ZXM8L3NwYW4+IDogYSBjb21tYS1zZXBh cmF0ZWQgbGlzdCBvZiB1cCB0byB0d28gcHJlZml4ZXMgdG8gYXBwbHkgdG8geW91ciBjbGFz cyBuYW1lcy4gVGhlIGZpcnN0IHByZWZpeCBpcyBhcHBsaWVkIHRvIGNlbGwtbGV2ZWwgY2xh c3NlcyAoYW5kIGZsYWdzKSBhbmQgdGhlIHNlY29uZCBwcmVmaXggaXMgYXBwbGllZCB0byBl dmVudCBjbGFzc2VzIChzZWUgPGNvZGU+ZXZlbnRjbGFzc2VzPC9jb2RlPikuIElmIHlvdSBv bmx5IHNwZWNpZnkgb25lIHByZWZpeCwgaXQgd2lsbCBiZSB1c2VkIGZvciBib3RoLiBJZiB5 b3UgdXNlIDxjb2RlPmNsYXNzcHJlZml4ZXM9JnF1b3Q7JnF1b3Q7PC9jb2RlPiB0aGVuIG5v IHByZWZpeGVzIHdpbGwgYmUgdXNlZCBhdCBhbGwuIERlZmF1bHQ6IDxjb2RlPnNtZF9jYWxf LCBzbWRfY2FsX2V2XzwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2xh c3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGNhbGVuZGFyIHRhYmxlIGl0c2Vs Zi4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+cm93Y2xh c3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgb2YgZWFjaCB0YWJsZSByb3cuIERlZmF1bHQ6 IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNlbGxjbGFzczwvc3Bhbj4g OiB0aGUgY2xhc3MgbmFtZSBvZiBlYWNoIHRhYmxlIGNlbGwuIERlZmF1bHQ6IHVuc2V0PC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmVtcHR5Y2xhc3M8L3NwYW4+IDogdGhlIGNs YXNzIG5hbWUgb2YgYW55IGNlbGxzIHRoYXQgZG9uJiM4MjE3O3QgY29udGFpbiBhIGRheSBu dW1iZXIgKGkuZS4gdGhlIGJsYW5rIGNlbGxzIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIGEg bW9udGgpLiBEZWZhdWx0OiA8Y29kZT5lbXB0eTwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+aXNvd2Vla2NsYXNzPC9zcGFuPiA6IHRoZSBjbGFzcyBuYW1lIG9mIGVh Y2ggY2VsbCBjb250YWluaW5nIGFuIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHdl ZWsuIERlZmF1bHQ6IDxjb2RlPndlZWs8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPm5hdmNsYXNzPC9zcGFuPiA6IHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBwcmV2L25l eHQgbW9udGggbmF2IGFycm93cy4gSWYgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBpcyB1c2Vk LCB0aGUgZmlyc3QgaXRlbSB3aWxsIGJlIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBvZiB0aGUg cHJldmlvdXMgbW9udGgsIHRoZSAybmQgaXRlbSBvZiB0aGUgbmV4dCBtb250aC4gSWYgYSBz aW5nbGUgdmFsdWUgaXMgdXNlZCwgYm90aCBjbGFzcyBuYW1lcyB3aWxsIGJlIHRoZSBzYW1l LiBEZWZhdWx0OiA8Y29kZT5uYXZwcmV2LCBuYXZuZXh0PC9jb2RlPjwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5teWNsYXNzPC9zcGFuPiA6IHRoZSBjbGFzcyBuYW1lIG9mIGJv dGggdGhlIG1vbnRoIGFuZCB5ZWFyIGluIHRoZSBjYWxlbmRhciBoZWFkZXIgKGVpdGhlciB0 aGUgPGNvZGU+Jmx0O3NwYW4mZ3Q7PC9jb2RlPiBvciA8Y29kZT4mbHQ7c2VsZWN0Jmd0Ozwv Y29kZT4gdGFncykuIElmIDxjb2RlPm15d3JhcHRhZzwvY29kZT4gaXMgdXNlZCwgdGhlIGNs YXNzIGlzIGFwcGxpZWQgdG8gdGhlIHdyYXB0YWcgaW5zdGVhZC4gRGVmYXVsdDogdW5zZXQ8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZXZlbnRjbGFzc2VzPC9zcGFuPiA6IGEg Y29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaXRlbXMgdG8gYWRkIGFzIGNsYXNzZXMgdG8gZWFj aCBldmVudCAoZWFjaCBwcmVmaXhlZCB3aXRoIHRoZSBldmVudCBwcmVmaXgpLiBJdCBkZWZh dWx0cyB0byA8Y29kZT5jYXRlZ29yeTwvY29kZT4gc28gaXQgYWRkcyB0aGUgQ2F0ZWdvcnkx IGFuZCAyIG5hbWVzIGFzIGNsYXNzIGlkZW50aWZpZXJzIHRvIGVhY2ggZXZlbnQuPGRpdiBj bGFzcz0iYnJlYWsiPklmIHlvdSB3aXNoIHRvIGV4dGVuZCBvciBhbHRlciB0aGlzLCBnaXZl IGEgbGlzdCBvZiBmaWVsZHMgdGhhdCB5b3Ugd2FudCB0byBhcHBseSB0byB0aGUgZXZlbnQg KGUuZy4gPGNvZGU+ZXZlbnRjbGFzc2VzPSZxdW90O0lELCBBdXRob3JJRCwgY3VzdG9tXzUm cXVvdDs8L2NvZGU+IHdvdWxkIGFkZCB0aHJlZSBjbGFzc2VzIHRvIGVhY2ggZXZlbnQgY29y cmVzcG9uZGluZyB0byB0aGUgZXZlbnQmIzgyMTc7cyBJRCwgaXRzIGF1dGhvciAobG9naW4p IG5hbWUgYW5kIHRoZSBjb250ZW50cyBvZiBjdXN0b21fNSkuIElmIHlvdSB1c2UgPGNvZGU+ Y2VsbHBsdXM8L2NvZGU+LCB0aGVzZSBjbGFzc2VzIHdpbGwgYmUgY29waWVkIHRvIHRoZSBj ZWxsIGxldmVsLjwvZGl2PjxkaXYgY2xhc3M9ImJyZWFrIj5Tb21lIHNwZWNpYWwgbmFtZXMg ZXhpc3Q6IDxjb2RlPmNhdGVnb3J5PC9jb2RlPiByZXR1cm5zIGJvdGggQ2F0ZWdvcnkxIGFu ZCBDYXRlZ29yeTIgKGlmIHNldCk7IDxjb2RlPmdjYXQ8L2NvZGU+IHdpbGwgcmV0dXJuIHRo ZSBjdXJyZW50ICYjODIxNjtnbG9iYWwmIzgyMTc7IGNhdGVnb3J5IChpZiBmaWx0ZXJpbmcg YnkgY2F0ZWdvcnkpOyA8Y29kZT5hdXRob3I8L2NvZGU+IHJldHVybnMgdGhlIGF1dGhvciBJ RCAoaWYgZmlsdGVyaW5nIGJ5IGF1dGhvcik7IDxjb2RlPnNlY3Rpb248L2NvZGU+IGdpdmVz IHRoZSBjdXJyZW50IHNlY3Rpb248L2Rpdj48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+ZXZlbnR3cmFwdGFnPC9zcGFuPiA6IHRoZSAoWClIVE1MIHRhZywgd2l0aG91dCBpdHMg YnJhY2tldHMsIHRvIHdyYXAgZWFjaCBldmVudCB3aXRoLiBEZWZhdWx0OiA8Y29kZT5zcGFu PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5teXdyYXB0YWc8L3NwYW4+ IDogdGhlIChYKUhUTUwgdGFnLCB3aXRob3V0IGl0cyBicmFja2V0cywgdG8gd3JhcCBhcm91 bmQgPGVtPmJvdGg8L2VtPiBtb250aCArIHllYXIgZHJvcGRvd24gc2VsZWN0IGxpc3RzIGFu ZCBzdWJtaXQgYnV0dG9uIChpdCB3cmFwcyB0aGUgbG90LCBjb21iaW5lZCkuIERlZmF1bHQ6 IHVuc2V0PC9saT4KCTwvdWw+CgoJPGgyIGlkPSJjZWxsZm9ybSI+VXNpbmcgYSA8Y29kZT5j ZWxsZm9ybTwvY29kZT4gd2l0aCByZXBsYWNlbWVudCB2YXJpYWJsZXM8L2gyPgoKCTxwPklm IHlvdSBkb24mIzgyMTc7dCBsaWtlIHRoZSBsYXlvdXQgb2YgdGhlIGRlZmF1bHQgY2VsbCwg eW91IGNhbiBkbyBpdCB5b3Vyc2VsZiB3aXRoIHRoZSA8Y29kZT5jZWxsZm9ybTwvY29kZT4g YXR0cmlidXRlLiBUaGUgY2VsbHMgYXJlIGdlbmVyYXRlZCA8ZW0+bGFzdDwvZW0+LCBzbyBi eSB0aGUgdGltZSB0aGUgcGx1Z2luIHJlYWNoZXMgdGhpcyBhdHRyaWJ1dGUsIGFsbCBldmVu dHMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIGJ5IGFueSBvZiB5b3VyIGZvcm1zL2Nv bnRhaW5lcnMuPC9wPgoKCTxwPlRvIGJ1aWxkIHlvdXIgb3duIGNlbGxzIHlvdSBvZnRlbiBu ZWVkIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIGV2ZW50cyB0aGF0IGZhbGwgb24gYSBwYXJ0 aWN1bGFyIGRheTsgb3IgdGhlIHdlZWssIG1vbnRoIG9yIGRheSBudW1iZXJzLCBldGMuIFNv ICYjODIxMjsgaW4gYWRkaXRpb24gdG8geW91ciB1c3VhbCBtYXJrdXAgYW5kIDxzcGFuIGNs YXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRhZ3MgJiM4MjEyOyB5b3UgbWF5IGFsc28gaW5zZXJ0 IGFueSBvZiB0aGUgZm9sbG93aW5nICYjODIxNjtyZXBsYWNlbWVudHMmIzgyMTc7IHRvIGhh dmUgdGhlIHJlbGV2YW50IHZhbHVlIGluc2VydGVkIGF0IHRoYXQgcGxhY2UgaW4gdGhlIGNl bGw6PC9wPgoKCTx1bD4KCQk8bGk+PGNvZGU+e2RheX08L2NvZGU+IDogY3VycmVudCBkYXkg KGFzIGEgbnVtYmVyIGZyb20gMSB0byAzMSk8L2xpPgoJCTxsaT48Y29kZT57d2Vla2RheX08 L2NvZGU+IDogY3VycmVudCB3ZWVrZGF5IGFzIGEgd29yZCBpbiB0aGUgbG9jYWwgbGFuZ3Vh Z2UsIG9yIGZyb20geW91ciA8Y29kZT5kYXlmb3JtYXQ8L2NvZGU+IGxpc3Q8L2xpPgoJCTxs aT48Y29kZT57d2Vla308L2NvZGU+IDogY3VycmVudCA8c3BhbiBjbGFzcz0iY2FwcyI+SVNP PC9zcGFuPiB3ZWVrIG51bWJlcjwvbGk+CgkJPGxpPjxjb2RlPnttb250aH08L2NvZGU+IDog Y3VycmVudCBtb250aCAoYXMgYSBudW1iZXIgZnJvbSAxIHRvIDEyKTwvbGk+CgkJPGxpPjxj b2RlPnttb250aG5hbWV9PC9jb2RlPiA6IG1vbnRoIG5hbWUgaW4gdGhlIGxvY2FsIGxhbmd1 YWdlLCBvciBmcm9tIHlvdXIgPGNvZGU+bW9udGhmb3JtYXQ8L2NvZGU+IGxpc3Q8L2xpPgoJ CTxsaT48Y29kZT57eWVhcn08L2NvZGU+IDogY3VycmVudCB5ZWFyICg0IGRpZ2l0cyk8L2xp PgoJCTxsaT48Y29kZT57c2hvcnR5ZWFyfTwvY29kZT4gOiBjdXJyZW50IHllYXIgKDIgZGln aXRzKTwvbGk+CgkJPGxpPjxjb2RlPntpc295ZWFyfTwvY29kZT4gOiBjdXJyZW50IDxzcGFu IGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHllYXIgKDQgZGlnaXRzKTwvbGk+CgkJPGxpPjxj b2RlPntzaG9ydGlzb3llYXJ9PC9jb2RlPiA6IGN1cnJlbnQgPHNwYW4gY2xhc3M9ImNhcHMi PklTTzwvc3Bhbj4geWVhciAoMiBkaWdpdHMpPC9saT4KCQk8bGk+PGNvZGU+e2V2ZW50c308 L2NvZGU+IDogYWxsIGV2ZW50cyBmb3IgdGhlIGRheTwvbGk+CgkJPGxpPjxjb2RlPntzdGFu ZGFyZH08L2NvZGU+IDogb25seSBzdGFuZGFyZCBldmVudHM8L2xpPgoJCTxsaT48Y29kZT57 cmVjdXJmaXJzdH08L2NvZGU+IC8gPGNvZGU+e3JlY3VyfTwvY29kZT4gOiB0aGUgY2hvc2Vu IHR5cGUgb2YgcmVjdXJyaW5nIGV2ZW50PC9saT4KCQk8bGk+PGNvZGU+e2FsbHJlY3VyfTwv Y29kZT4gOiBhbGwgcmVjdXJyaW5nIGV2ZW50cyBmb3IgdGhlIGRheTwvbGk+CgkJPGxpPjxj b2RlPnttdWx0aWZpcnN0fTwvY29kZT4gLyA8Y29kZT57bXVsdGl9PC9jb2RlPiAvIDxjb2Rl PnttdWx0aXByZXZ9PC9jb2RlPiAvIDxjb2RlPnttdWx0aWxhc3R9PC9jb2RlPiA6IHRoZSBj aG9zZW4gdHlwZSBvZiBtdWx0aSBldmVudDwvbGk+CgkJPGxpPjxjb2RlPnthbGxtdWx0aX08 L2NvZGU+IDogYWxsIG11bHRpIGV2ZW50cyBmb3IgdGhlIGRheTwvbGk+CgkJPGxpPjxjb2Rl PntjYW5jZWx9PC9jb2RlPiA6IG9ubHkgY2FuY2VsbGVkIGV2ZW50czwvbGk+CgkJPGxpPjxj b2RlPntleHRyYX08L2NvZGU+IDogb25seSBleHRyYSBldmVudHM8L2xpPgoJPC91bD4KCgk8 aDIgaWQ9InNpemVkaWZmIj5EaWZmZXJlbmNlcyBiZXR3ZWVuIGxhcmdlIGFuZCBzbWFsbCBj YWxlbmRhcnM8L2gyPgoKCTxwPk5vdCBhIGxvdCEgQnV0IHRoZXJlIGFyZSBzb21lIHN1YnRs ZXRpZXM6PC9wPgoKCTx1bD4KCQk8bGk+PGNvZGU+Y2VsbGZvcm08L2NvZGU+IGNhbm5vdCBi ZSB1c2VkIG9uIGEgc21hbGwgY2FsZW5kYXI8L2xpPgoJCTxsaT5CeSBkZWZhdWx0LCBubyBl dmVudHMgYXJlIHBsYWNlZCBpbiB0aGUgc21hbGwgY2FsZW5kYXIuIFlvdSBjYW4gYWRkIHRo ZW0geW91cnNlbGYgaWYgeW91IHdpc2ggYmVjYXVzZSB5b3UgY2FuIHVzZSB0aGUgc2FtZSBm b3JtL2NvbnRhaW5lciBtZWNoYW5pc20gYXMgdGhlIGxhcmdlIGNhbGVuZGFyPC9saT4KCQk8 bGk+VGhlIG9ubHkgdGhpbmcgcmVuZGVyZWQgaW4gYSBzbWFsbCBjYWxlbmRhciBjZWxsIGlz IHRoZSBoeXBlcmxpbmtlZCBkYXRlIGFuZCBhbnkgPGEgaHJlZj0iI25hbWluZyI+ZmxhZ3M8 L2E+IHNvIHlvdSBjYW4gc3R5bGUgdGhlIGJveGVzPC9saT4KCQk8bGk+PGNvZGU+Y2xhc3Ns ZXZlbHM8L2NvZGU+IGFyZSBpZ25vcmVkOiBldmVyeXRoaW5nIGlzIGF1dG9tYXRpY2FsbHkg YXNzaWduZWQgYXQgdGhlIGNlbGwgbGV2ZWwgKGkuZS4gPGNvZGU+Y2VsbHBsdXM8L2NvZGU+ IGlzIHNldCk8L2xpPgoJCTxsaT48Y29kZT5ldmVudGNsYXNzZXM8L2NvZGU+IGFyZSBzdGls bCBob25vdXJlZCBpZiB5b3Ugd2lzaCB0byB1c2UgYSA8Y29kZT5mb3JtPC9jb2RlPiB0byBw cm9jZXNzIHRoZW0geW91cnNlbGY8L2xpPgoJCTxsaT5UaGUgc21hbGwgY2FsZW5kYXIgb3V0 cHV0cyB5ZWFyLW1vbnRoLWRheS10aXRsZSBvciBtZXNzeSBwZXJtbGlua3Mgb25seTwvbGk+ Cgk8L3VsPgoKCTxwPkFzaWRlIGZyb20gdGhhdCB0aGV5JiM4MjE3O3JlIHByZXR0eSBtdWNo IGlkZW50aWNhbC48L3A+CgoJPGgyIGlkPSJpZmNhbCI+VGFnOiA8Y29kZT4mbHQ7dHhwOnNt ZF9pZl9jYWwmZ3Q7PC9jb2RlPjwvaDI+CgoJPHA+VGhpcyBjb25kaXRpb25hbCB0YWcgYWxs b3dzIHlvdSAmIzgyMTI7IGluc2lkZSB5b3VyIGNvbnRhaW5lci9mb3JtcyAgJiM4MjEyOyB0 byB0ZXN0IGNlcnRhaW4gY29uZGl0aW9ucyBvZiB0aGUgY3VycmVudCBldmVudC9jZWxsLiBG b3IgZW5oYW5jZWQgY29uZGl0aW9uYWwgY2hlY2tpbmcgKHBlcmhhcHMgaW4gY29uanVuY3Rp b24gd2l0aCA8YSBocmVmPSIjY2Fsbm93Ij5zbWRfY2FsX25vdzwvYT4pLCBjb25zaWRlciB0 aGUgc21kX2lmIHBsdWdpbi48L3A+CgoJPGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0dHNpZmNh bCI+QXR0cmlidXRlczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zmxh Zzwvc3Bhbj4gOiB0aGUgY2VsbCBvciBldmVudCBmbGFnKHMpIHlvdSB3YW50IHRvIHRlc3Qs IGVhY2ggc2VwYXJhdGVkIGJ5IGEgY29tbWEuIENob29zZSBmcm9tOiA8Y29kZT5ldmVudDwv Y29kZT4sIDxjb2RlPnN0YW5kYXJkPC9jb2RlPiwgPGNvZGU+cmVjdXJmaXJzdDwvY29kZT4s IDxjb2RlPnJlY3VyPC9jb2RlPiwgPGNvZGU+bXVsdGlmaXJzdDwvY29kZT4sIDxjb2RlPm11 bHRpbGFzdDwvY29kZT4sIDxjb2RlPm11bHRpPC9jb2RlPiwgPGNvZGU+bXVsdGlwcmV2PC9j b2RlPiwgPGNvZGU+Y2FuY2VsPC9jb2RlPiwgPGNvZGU+b21pdDwvY29kZT4sIDxjb2RlPmV4 dHJhPC9jb2RlPiwgPGNvZGU+aG9sczwvY29kZT4sIDxjb2RlPnRvZGF5PC9jb2RlPiwgb3Ig dGhlIHNwZWNpYWwgZmxhZyA8Y29kZT5TTURfQU5ZPC9jb2RlPiB3aGljaCB3aWxsIHRyaWdn ZXIgaWYgdGhlIGNlbGwgb3IgZXZlbnQgY29udGFpbnMgYW55IG9mIHRoZSBhYm92ZS4gRGVm YXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2FsaWQ8L3NwYW4+ IDogdGhlIGNhbGVuZGFyIElEIHlvdSB3aXNoIHRvIGNoZWNrIGZvciBhIG1hdGNoLiBEZWZh dWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj55ZWFyPC9zcGFuPiA6 IHRoZSB5ZWFyIHRoZSBjdXJyZW50IGNlbGwgZmFsbHMgaW4uIERlZmF1bHQ6IHVuc2V0PC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmlzb3llYXI8L3NwYW4+IDogdGhlIDxzcGFu IGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHllYXIgdGhlIGN1cnJlbnQgY2VsbCBmYWxscyBp bi4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bW9udGg8 L3NwYW4+IDogdGhlIG1vbnRoIG51bWJlciAoMS0xMikgdGhhdCB0aGUgY3VycmVudCBjZWxs IGZhbGxzIGluLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij53ZWVrPC9zcGFuPiA6IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVr IG51bWJlciB0aGF0IHRoZSBjdXJyZW50IGNlbGwgZmFsbHMgaW4uIERlZmF1bHQ6IHVuc2V0 PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmRheTwvc3Bhbj4gOiB0aGUgZGF5IG51 bWJlciB0aGUgY3VycmVudCBjZWxsIGZhbGxzIGluLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5sb2dpYzwvc3Bhbj4gOiB3aGV0aGVyIHlvdSB3YW50 IHRvIGNoZWNrIGlmIDxlbT5hbGw8L2VtPiB0ZXN0cyB5b3Ugbm9taW5hdGVkIGFyZSB0cnVl IGluIHRoZSBjdXJyZW50IGNlbGwgKDxjb2RlPmxvZ2ljPSZxdW90O2FuZCZxdW90OzwvY29k ZT4pIG9yIDxlbT5hdCBsZWFzdCBvbmU8L2VtPiBvZiB0aGUgdGVzdHMgaXMgdHJ1ZSAoPGNv ZGU+bG9naWM9JnF1b3Q7b3ImcXVvdDs8L2NvZGU+KS4gRGVmYXVsdDogPGNvZGU+b3I8L2Nv ZGU+PC9saT4KCTwvdWw+CgoJPHA+JiM4MjE2O0FuZCYjODIxNzsgbG9naWMgaXMgZ29vZCBm b3IgY2hlY2tpbmcgaWYgdGhlIGNlbGwgaXMgb2YgYSBjZXJ0YWluIHR5cGUgPHNwYW4gY2xh c3M9ImNhcHMiPkFORDwvc3Bhbj4gaXMgbGF0ZXIgdGhhbiB0aGUgMTV0aCBvZiB0aGUgbW9u dGgsIGZvciBleGFtcGxlLjwvcD4KCgk8cD5SdWRpbWVudGFyeSBjb21wYXJhdG9ycyBjYW4g YmUgYXBwbGllZCB0byB0aGUgPGNvZGU+KGlzbyl5ZWFyPC9jb2RlPiwgPGNvZGU+bW9udGg8 L2NvZGU+LCA8Y29kZT53ZWVrPC9jb2RlPiBhbmQgPGNvZGU+ZGF5PC9jb2RlPiBhdHRyaWJ1 dGVzLiBOb3JtYWxseSB0aGUgdmFsdWUgeW91IHN1cHBseSB3aWxsIGJlIHRlc3RlZCBmb3Ig YW4gZXhhY3QgbWF0Y2ggYnV0IGlmIHlvdSBwcmVmaXggaXQgd2l0aCBvbmUgb2YgdGhlIGZv bGxvd2luZyBjaGFyYWN0ZXIgc2VxdWVuY2VzIHRoZW4gdGhlIGJlaGF2aW91ciBjaGFuZ2Vz OjwvcD4KCgk8dWw+CgkJPGxpPjxjb2RlPiZndDs8L2NvZGU+IHRlc3RzIGlmIGF0dHJpYnV0 ZSBpcyA8ZW0+Z3JlYXRlciB0aGFuPC9lbT4gdGhlIGdpdmVuIHZhbHVlIChlLmcuIDxjb2Rl PnllYXI9JnF1b3Q7Jmd0OzIwMDgmcXVvdDs8L2NvZGU+KTwvbGk+CgkJPGxpPjxjb2RlPiZn dDs9PC9jb2RlPiB0ZXN0cyBpZiBhdHRyaWJ1dGUgaXMgPGVtPmdyZWF0ZXIgdGhhbiBvciBl cXVhbCB0bzwvZW0+IHRoZSBnaXZlbiB2YWx1ZSAoZS5nLiA8Y29kZT5tb250aD0mcXVvdDsm Z3Q7PTcmcXVvdDs8L2NvZGU+KTwvbGk+CgkJPGxpPjxjb2RlPiZsdDs8L2NvZGU+IHRlc3Rz IGlmIGF0dHJpYnV0ZSBpcyA8ZW0+bGVzcyB0aGFuPC9lbT4gdGhlIGdpdmVuIHZhbHVlIChl LmcuIDxjb2RlPmRheT0mcXVvdDsmbHQ7MTUmcXVvdDs8L2NvZGU+KTwvbGk+CgkJPGxpPjxj b2RlPiZsdDs9PC9jb2RlPiB0ZXN0cyBpZiBhdHRyaWJ1dGUgaXMgPGVtPmxlc3MgdGhhbiBv ciBlcXVhbCB0bzwvZW0+IHRoZSBnaXZlbiB2YWx1ZSAoZS5nLiA8Y29kZT5tb250aD0mcXVv dDsmbHQ7PTUmcXVvdDs8L2NvZGU+KTwvbGk+CgkJPGxpPjxjb2RlPiE8L2NvZGU+IHRlc3Rz IGlmIGF0dHJpYnV0ZSBpcyA8ZW0+bm90PC9lbT4gdGhlIGdpdmVuIHZhbHVlIChlLmcuIDxj b2RlPmRheT0mcXVvdDshMTUmcXVvdDs8L2NvZGU+KTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0i Y2FsaW5mbyI+VGFnOiA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxfaW5mbyAvJmd0OzwvY29kZT48 L2gyPgoKCTxwPkluc2lkZSB5b3VyIGNvbnRhaW5lci9mb3JtcywgdXNlIHRoaXMgdGFnIHRv IG91dHB1dCBjZXJ0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGV2ZW50Ljwv cD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0iYXR0c2NhbGluZm8iPkF0dHJpYnV0ZXM8L2gz PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnR5cGU8L3NwYW4+IDogdGhlIHR5 cGUocykgb2YgaW5mb3JtYXRpb24geW91IHdhbnQgdG8gcmV0dXJuLCBlYWNoIHNlcGFyYXRl ZCBieSBhIGNvbW1hLiBDaG9vc2UgZnJvbTogPGNvZGU+ZmxhZzwvY29kZT4sIDxjb2RlPmNh bGlkPC9jb2RlPiwgPGNvZGU+KGlzbyl5ZWFyPC9jb2RlPiAvIDxjb2RlPm1vbnRoPC9jb2Rl PiAvIDxjb2RlPndlZWs8L2NvZGU+IC8gPGNvZGU+ZGF5PC9jb2RlPiwgPGNvZGU+czwvY29k ZT4gKGN1cnJlbnQgc2VjdGlvbikgLyA8Y29kZT5jYXRlZ29yeTwvY29kZT4gLyA8Y29kZT5h dXRob3I8L2NvZGU+IChvciA8Y29kZT5yZWFsbmFtZTwvY29kZT4pLCA8Y29kZT5hcnRpY2xl PC9jb2RlPiAoaWQgb2YgdGhlIGN1cnJlbnRseSB2aWV3ZWQgYXJ0aWNsZSksIG9yIGFueSBv dGhlciBhcnRpY2xlIHZhcmlhYmxlIHN1Y2ggYXMgPGNvZGU+c2VjdGlvbjwvY29kZT4gKHRo ZSBjdXJyZW50IGFydGljbGUmIzgyMTc7cyBzZWN0aW9uKSwgPGNvZGU+YXV0aG9yaWQ8L2Nv ZGU+LCA8Y29kZT5hcnRpY2xlX2ltYWdlPC9jb2RlPiwgZXRjPGRpdiBjbGFzcz0iYnJlYWsi PklmIHVzaW5nIHRoZSA8Y29kZT5odG1sPC9jb2RlPiBhdHRyaWJ1dGUsIHlvdSBtYXkgb3B0 aW9uYWxseSBzcGVjaWZ5IHRoZSBuYW1lIHlvdSB3YW50IHRoZSB2YXJpYWJsZSB0byBhcHBl YXIgYXMgaW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHN0cmluZy4gVGhl IHZhcmlhYmxlcyBhbGwgdGFrZSBvbiBzZW5zaWJsZSBkZWZhdWx0cyAoZS5nLiAmIzgyMTY7 c2VjdGlvbiYjODIxNzsgYmVjb21lcyA8Y29kZT4/cz0mbHQ7c2VjdGlvbiBuYW1lJmd0Ozwv Y29kZT4sICYjODIxNjtjYXRlZ29yeTEmIzgyMTc7IGJlY29tZXMgPGNvZGU+P2M9Jmx0O2Nh dGVnb3J5MSBuYW1lJmd0OzwvY29kZT4sIGV0YykgYnV0IGlmLCBzYXksIHlvdSB3YW50ZWQg Y2F0ZWdvcnkxIHRvIGJlIGtub3duIGFzIDxjb2RlPnRoZV9jYXQ8L2NvZGU+IHlvdSBjb3Vs ZCB3cml0ZSA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxfaW5mbyB0eXBlPSZxdW90O2NhdGdlb3J5 OnRoZV9jYXQmcXVvdDsgaHRtbD0mcXVvdDsxJnF1b3Q7IC8mZ3Q7PC9jb2RlPi4gWW91IHdv dWxkIHRoZW4gc2VlIDxjb2RlPj90aGVfY2F0PSZsdDtjYXRlZ29yeTEgbmFtZSZndDs8L2Nv ZGU+PC9kaXY+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmpvaW48L3NwYW4+IDog dGhlIGNoYXJhY3RlcnMgeW91IHdhbnQgdG8gdXNlIHRvIHNlcGFyYXRlIGVhY2ggaXRlbSB5 b3UgYXNrZWQgZm9yLiBOb3RlIGl0IGlzIHRoZSBjaGFyYWN0ZXJzIDxlbT5iZXR3ZWVuPC9l bT4gZWFjaCBpdGVtIHNvIHRoZSB2ZXJ5IGZpcnN0IGVudHJ5IHdpbGwgPHN0cm9uZz5ub3Q8 L3N0cm9uZz4gaGF2ZSB0aGUgPGNvZGU+am9pbjwvY29kZT4gaW4gZnJvbnQgb2YgaXQgKHNl ZSA8Y29kZT5qb2luX3ByZWZpeDwvY29kZT4pLiBEZWZhdWx0OiBhIHNwYWNlPC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmpvaW5fcHJlZml4PC9zcGFuPiA6IHRoZSBzdHJpbmcg eW91IHdhbnQgdG8gcHV0IGluIGZyb250IG9mIHRoZSBmaXJzdCBpdGVtIGluIHRoZSByZXR1 cm5lZCBsaXN0LiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgdGhpcyBhdHRyaWJ1dGUgaXQgZGVm YXVsdHMgdG8gPGNvZGU+U01EX0FVVE88L2NvZGU+IHdoaWNoIHRyaWVzIHRvIGJlIGNsZXZl cjoKCTx1bD4KCQk8bGk+aWYgdXNpbmcgPGNvZGU+dHlwZT0mcXVvdDtmbGFnJnF1b3Q7PC9j b2RlPiB0aGUgam9pbl9wcmVmaXggaXMgc2V0IHRvIHRoZSBzYW1lIGFzIDxjb2RlPmpvaW48 L2NvZGU+LiBUaHVzIHdpdGggPGNvZGU+am9pbj0mcXVvdDsgY2FsXyZxdW90OzwvY29kZT4g eW91IG1pZ2h0IGdldCA8Y29kZT4gY2FsX211bHRpIGNhbF90b2RheSBjYWxfaG9sczwvY29k ZT48L2xpPgoJCTxsaT5pZiB1c2luZyA8Y29kZT5odG1sPSZxdW90OzEmcXVvdDs8L2NvZGU+ IHRoZSBqb2luX3ByZWZpeCBpcyBzZXQgdG8gYSBxdWVzdGlvbiBtYXJrLCB0aHVzOiA8Y29k ZT50eXBlPSZxdW90O21vbnRoLHllYXIsY2F0ZWdvcnkmcXVvdDsgaHRtbD0mcXVvdDsxJnF1 b3Q7PC9jb2RlPiBtaWdodCByZW5kZXIgPGNvZGU+P209MTImYW1wO3k9MjAwOCZhbXA7Yz1n aWdzPC9jb2RlPiwgd2hpY2ggY2FuIGJlIHB1dCBzdHJhaWdodCBvbiB0aGUgZW5kIG9mIGFu IGFuY2hvcjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5odG1s PC9zcGFuPiA6IElmIHNldCB0byA8Y29kZT4xPC9jb2RlPiwgcmV0dXJucyBub3Qgb25seSB0 aGUgdmFsdWVzIHlvdSBzcGVjaWZpZWQgYnV0IHRoZWlyIDxzcGFuIGNsYXNzPSJjYXBzIj5V Ukw8L3NwYW4+IHZhcmlhYmxlIG5hbWVzIGFzIHdlbGwsIGdpdmluZyB5b3UgdGhlIGVudGly ZSBzdHJpbmcgYXMgYSB2YWxpZCBzZXQgb2YgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bh bj4gcGFyYW1ldGVycyB3aGljaCBjYW4gYmUgYWRkZWQgdG8gYW4gYW5jaG9yLiBJdCBvdmVy cmlkZXMgdGhlIDxjb2RlPmpvaW48L2NvZGU+IGF0dHJpYnV0ZSBhbmQgc2V0cyBpdCB0byBh biBhbXBlcnNhbmQuIERlZmF1bHQ6IDAuPGRpdiBjbGFzcz0iYnJlYWsiPlRoaXMgYXR0cmli dXRlIGlzIHVzZWZ1bCBpZiB5b3UgYXJlIGJ1aWxkaW5nIHlvdXIgb3duIGNvbnRlbnQgaW5z aWRlIGVhY2ggY2VsbCB2aWEgYSA8Y29kZT5mb3JtPC9jb2RlPiBhbmQgd2lzaCB0byBtYWlu dGFpbiB0aGUgY3VycmVudCBzZWFyY2ggZW52aXJvbm1lbnQuIElmIHlvdSBhbGxvdyBwZW9w bGUgdG8gZmlsdGVyIGV2ZW50cyBieSBjYXRlZ29yeSBvciBhdXRob3IgeW91IGNhbiB1c2Ug dGhpcyB0byByZXR1cm4gdGhlICYjODIxNjtjdXJyZW50JiM4MjE3OyBzdGF0ZSBvZiBjZXJ0 YWluIHZhcmlhYmxlcyBzbyB5b3UgY2FuIHBhc3MgdGhlbSB0byB0aGUgbmV4dCBwYWdlIGFu ZCBtYWludGFpbiBzdGF0ZTwvZGl2PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5l c2NhcGU8L3NwYW4+IDogZXNjYXBlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBl bnRpdGllcyBzdWNoIGFzIDxjb2RlPiZsdDs8L2NvZGU+LCA8Y29kZT4mZ3Q7PC9jb2RlPiBh bmQgPGNvZGU+JmFtcDs8L2NvZGU+IGZvciBwYWdlIHZhbGlkYXRpb24gcHVycG9zZXMuIFNl dCB0byA8Y29kZT5lc2NhcGU9JnF1b3Q7JnF1b3Q7PC9jb2RlPiB0byB0dXJuIGl0IG9mZi4g RGVmYXVsdDogPGNvZGU+aHRtbDwvY29kZT48L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImNhbGNs YXNzIj5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2NhbF9jbGFzcyAvJmd0OzwvY29kZT48L2gy PgoKCTxwPkluc2lkZSB5b3VyIGNvbnRhaW5lci9mb3JtcywgdXNlIHRoaXMgdGFnIHRvIGFk ZCBhIGxpc3Qgb2YgY2xhc3NlcyB0byB0aGUgY3VycmVudCBjZWxsL2V2ZW50LiBWZXJ5IHVz ZWZ1bCBpZiBidWlsZGluZyBjZWxscyB5b3Vyc2VsZiBiZWNhdXNlIGluc2lkZSBhIDxhIGhy ZWY9IiNpZmNhbCI+Y29uZGl0aW9uYWw8L2E+IHRhZyB5b3UgY291bGQgYWRkIHBhcnRpY3Vs YXIgY2xhc3MgbmFtZXMgYmFzZWQgb24gc29tZSB2YWx1ZSBpbiBhIGNlbGwuPC9wPgoKCTxo MyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRzY2FsY2xhc3MiPkF0dHJpYnV0ZXM8L2gzPgoKCTx1 bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm5hbWU8L3NwYW4+IDogYSBjb21tYS1zZXBh cmF0ZWQgbGlzdCBvZiBjbGFzc25hbWVzIHRvIGFkZCB0byB0aGUgY3VycmVudCBjZWxsL2V2 ZW50LiBUaGVzZSBhcmUgPHN0cm9uZz5ub3Q8L3N0cm9uZz4gc3ViamVjdCB0byBhbnkgPGNv ZGU+Y2xhc3NwcmVmaXhlczwvY29kZT4gc28gd2lsbCBhbHdheXMgYXBwZWFyIGV4YWN0bHkg YXMgeW91IHdyaXRlIHRoZW08L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImNhbG5vdyI+VGFnOiA8 Y29kZT4mbHQ7dHhwOnNtZF9jYWxfbm93IC8mZ3Q7PC9jb2RlPjwvaDI+CgoJPHA+UmV0dXJu IHRoZSBjdXJyZW50IGRhdGUvdGltZSwgZm9ybWF0dGVkIGhvd2V2ZXIgeW91IHBsZWFzZS4g VXNlZnVsIGZvciBleHRyYWN0aW5nIHBhcnRzIG9mIHRoZSBjdXJyZW50IHN5c3RlbSB0aW1l c3RhbXAgdG8gY29tcGFyZSB0aGluZ3MgdmlhIG90aGVyIGNvbmRpdGlvbmFsIHBsdWdpbnMg b3IgdGhlIDxjb2RlPiZsdDt0eHA6c21kX2lmX2NhbCZndDs8L2NvZGU+IHRhZy48L3A+CgoJ PGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0dHNjYWxub3ciPkF0dHJpYnV0ZXM8L2gzPgoKCTx1 bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZvcm1hdDwvc3Bhbj4gOiB0aGUgd2F5IHlv dSB3YW50IHRoZSBkYXRlL3RpbWUgcmVwcmVzZW50ZWQuIFVzZSBhbnkgdmFsaWQgPGEgaHJl Zj0iaHR0cDovL3VrMi5waHAubmV0L3N0cmZ0aW1lIj5zdHJmdGltZSgpPC9hPiBzdHJpbmcu IERlZmF1bHRzIHRvIHRoZSBkYXRlIGZvcm1hdCB5b3Ugc2V0IGluIEJhc2ljIFByZWZzPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm5vdzwvc3Bhbj4gOiBpZiB5b3UgZG9uJiM4 MjE3O3Qgd2FudCB0aGUgdGltZSB0byBiZSwgdW1tLCAmIzgyMTY7bm93JiM4MjE3OyB5b3Ug Y2FuIHN0YXRlIHdoYXQgdGltZSAmIzgyMTY7bm93JiM4MjE3OyBpcyEgVXNlIGFueSBzdGFu ZGFyZCBkYXRlL3RpbWUgZm9ybWF0LiAgRGVmYXVsdDogdGhlIHRpbWUgYXQgd2hpY2ggeW91 IGNhbGwgdGhlIHRhZy48ZGl2IGNsYXNzPSJicmVhayI+WW91IG1heSBhbHNvIHVzZSB0aGUg Y29kZXMgPGNvZGU+P2RheTwvY29kZT4sIDxjb2RlPj9tb250aDwvY29kZT4gb3IgPGNvZGU+ P3llYXI8L2NvZGU+IGluIHlvdXIgdGltZSBzdHJpbmcgd2hpY2ggd2lsbCBkbyBvbmUgb2Yg dHdvIHRoaW5nczoKCTx1bD4KCQk8bGk+cmVwbGFjZSB0aGUgY29kZXMgd2l0aCB0aGUgPHNw YW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gcGFyYW1ldGVycyA8Y29kZT5kPTwvY29kZT4s IDxjb2RlPm09PC9jb2RlPiBvciA8Y29kZT55PTwvY29kZT4sIGlmIHRoZXkgYXJlIGJlaW5n IHVzZWQ8L2xpPgoJCTxsaT51c2UgdGhlIGN1cnJlbnQgZGF5LCBtb250aCBvciB5ZWFyIChp LmUuIHRoZSBwYXJ0cyBvZiB0b2RheSYjODIxNztzIGRhdGUpPGJyIC8+CjwvZGl2PjwvbGk+ Cgk8L3VsPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5vZmZzZXQ8L3NwYW4+IDog YW4gb2Zmc2V0IGludG8gdGhlIGZ1dHVyZSB0aGF0IHlvdSB3aXNoIHRvIGFwcGx5IHRvIDxj b2RlPm5vdzwvY29kZT4uIGUuZy4gPGNvZGU+MiBtb250aHM8L2NvZGU+LiBTZWUgPGEgaHJl Zj0iI2VnNiI+RXhhbXBsZSA2PC9hPiBmb3IgYSBwcmFjdGljYWwgYXBwbGljYXRpb24gb2Yg dGhpcyBhdHRyaWJ1dGU8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Z210PC9zcGFu PiA6IHJldHVybiBlaXRoZXIgbG9jYWwgdGltZSAoPGNvZGU+MDwvY29kZT4pIGFjY29yZGlu ZyB0byB0aGUgdGltZSB6b25lIHNldCBpbiBCYXNpYyBQcmVmcywgb3IgPHNwYW4gY2xhc3M9 ImNhcHMiPkdNVDwvc3Bhbj4gdGltZSAoPGNvZGU+MTwvY29kZT4pLiBEZWZhdWx0OiAwPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxhbmc8L3NwYW4+IDogYW4gPHNwYW4gY2xh c3M9ImNhcHMiPklTTzwvc3Bhbj4gbGFuZ3VhZ2UgY29kZSB0aGF0IGZvcm1hdHMgdGltZSBz dHJpbmdzIHN1aXRhYmxlIGZvciB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlIChvciBsb2NhbGUp IGFzIGRlZmluZWQgYnkgPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9J U09fNjM5Ij48c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiA2Mzk8L2E+LiBEZWZhdWx0 OiB1bnNldCAoaS5lLiB1c2UgdGhlIHZhbHVlIGFzIHN0YXRlZCBpbiA8c3BhbiBjbGFzcz0i Y2FwcyI+VFhQPC9zcGFuPiBwcmVmcyk8L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImFydGV2Ij5U YWc6IDxjb2RlPiZsdDt0eHA6c21kX2FydGljbGVfZXZlbnQgLyZndDs8L2NvZGU+PC9oMj4K Cgk8cD5XaGVuIHlvdSBjcmVhdGUgZXZlbnRzLCB0aGV5IHJlYWxseSBvbmx5IGV4aXN0IG9u Y2UgYXMgYSBzaW5nbGUgYXJ0aWNsZTsgdGhlIHJlcGV0aXRpb24gaXMgYSB0cmljay4gVGh1 cyB0aGUgYnVpbHQtaW4gYXJ0aWNsZSB0YWdzIG9ubHkgc2hvdyB0aGUgc2luZ2xlLCByZWFs IGFydGljbGVzLjwvcD4KCgk8cD5UaGlzIHRhZyAmIzgyMTI7IHNpbWlsYXIgaW4gZnVuY3Rp b24gdG8gPGNvZGU+Jmx0O3R4cDphcnRpY2xlX2N1c3RvbSAvJmd0OzwvY29kZT4gJiM4MjEy OyBhbGxvd3MgeW91IHRvIHNlZSByZWN1cnJpbmcgYXJ0aWNsZXMgYXMgaWYgdGhleSB3ZXJl ICYjODIxNjtyZWFsJiM4MjE3OyBhcnRpY2xlcyBpbiB0aGUgZGF0YWJhc2UuIEluc2lkZSB0 aGUgdGFnJiM4MjE3O3MgPGNvZGU+Zm9ybTwvY29kZT4gb3IgY29udGFpbmVyIHlvdSBjYW4g dXNlIGFsbCBleGlzdGluZyBhcnRpY2xlIHRhZ3MgdG8gZGlzcGxheSBhbnkgaW5mb3JtYXRp b24geW91IGxpa2UgYWJvdXQgZWFjaCAmIzgyMTY7dmlydHVhbCYjODIxNzsgYXJ0aWNsZS48 L3A+CgoJPGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0dHNhcnRldiI+QXR0cmlidXRlczwvaDM+ CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c3RlcGZpZWxkPC9zcGFuPiA6IHNh bWUgYXMgaW4gc21kX2NhbGVuZGFyOiB0aGUgSUQgb2YgdGhlIGZpZWxkIHRoYXQgY29udGFp bnMgZXZlbnQgcmVwZXRpdGlvbnMuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPnNraXBmaWVsZDwvc3Bhbj4gOiBzYW1lIGFzIGluIHNtZF9jYWxlbmRh cjogdGhlIElEIG9mIHRoZSBmaWVsZCB0aGF0IGNvbnRhaW5zIHRoZSBsaXN0IG9mIGV2ZW50 IGNhbmNlbGxhdGlvbiBkYXRlcy4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+b21pdGZpZWxkPC9zcGFuPiA6IHNhbWUgYXMgaW4gc21kX2NhbGVuZGFy OiB0aGUgSUQgb2YgdGhlIGZpZWxkIHRoYXQgY29udGFpbnMgdGhlIGxpc3Qgb2YgZXZlbnQg b21pc3Npb24gZGF0ZXMuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPmV4dHJhZmllbGQ8L3NwYW4+IDogc2FtZSBhcyBpbiBzbWRfY2FsZW5kYXI6IHRo ZSBJRCBvZiB0aGUgZmllbGQgdGhhdCBjb250YWlucyB0aGUgbGlzdCBvZiBhZGRpdGlvbmFs IGRhdGVzLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50 eXBlPC9zcGFuPiA6IHRoZSB0eXBlcyBvZiBldmVudCB0byBkaXNwbGF5LiBEZWZhdWx0OiA8 Y29kZT5zdGFuZGFyZCwgcmVjdXIsIG11bHRpPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5zZWN0aW9uPC9zcGFuPiA6IHJlc3RyaWN0IHRoZSBldmVudHMgdG8gYSBs aXN0IG9mIHNlY3Rpb25zLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5jYXRlZ29yeTwvc3Bhbj4gOiByZXN0cmljdCB0aGUgZXZlbnRzIHRvIGEgbGlz dCBvZiBjYXRlZ29yaWVzLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5hdXRob3I8L3NwYW4+IDogcmVzdHJpY3QgdGhlIGV2ZW50cyB0byBhIGxpc3Qg b2YgYXV0aG9yIGxvZ2luIG5hbWVzLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5yZWFsbmFtZTwvc3Bhbj4gOiByZXN0cmljdCB0aGUgZXZlbnRzIHRv IGEgbGlzdCBvZiBhdXRob3IgUmVhbCBOYW1lcyAobm90ZTogYWRkcyBvbmUgZXh0cmEgcXVl cnkpLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5pZDwv c3Bhbj4gOiByZXN0cmljdCB0aGUgZXZlbnRzIHRvIGEgbGlzdCBvZiBhcnRpY2xlIElEcy4g RGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c3RhdHVzPC9z cGFuPiA6IHJlc3RyaWN0IHRoZSBldmVudHMgdG8gdGhpcyBsaXN0IG9mIGFydGljbGUgc3Rh dHVzLiBEZWZhdWx0OiA8Y29kZT5saXZlPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5leHBpcmVkPC9zcGFuPiA6IGRlZmluaXRpdmVseSBoaWRlICgwKSBvciBzaG93 ICgxKSBleHBpcmVkIGV2ZW50cy4gTGVhdmUgYmxhbmsgdG8gdXNlIHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+VFhQPC9zcGFuPiBBZHZhbmNlZCBQcmVmZXJlbmNlICYjODIxNjtQdWJsaXNo IGV4cGlyZWQgYXJ0aWNsZXMmIzgyMTc7PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PnRpbWU8L3NwYW4+IDogb25seSBzaG93IGV2ZW50cyBpbiB0aGlzIHRpbWUgZnJhbWUuIENo b29zZSBmcm9tIDxjb2RlPmFueTwvY29kZT4sIDxjb2RlPmZ1dHVyZTwvY29kZT4gb3IgPGNv ZGU+cGFzdDwvY29kZT4uIERlZmF1bHQ6IDxjb2RlPmFueTwvY29kZT48L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+bW9udGg8L3NwYW4+IDogb25seSBzaG93IGV2ZW50cyB0aGF0 IG9jY3VyIGluIHRoZSBnaXZlbiA8c3BhbiBjbGFzcz0iY2FwcyI+WVlZWTwvc3Bhbj4tbW0u IERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZyb208L3Nw YW4+IDogb25seSBzaG93IGV2ZW50cyBmcm9tIHRoaXMgc3RhcnQgZGF0ZS4gQ2FuIGJlIGFu eSB2YWxpZCBkYXRlIGZvcm1hdC4gRGVmYXVsdDogdW5zZXQgKGkuZS4gYWxsIGRhdGVzKTwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50bzwvc3Bhbj4gOiBvbmx5IHNob3cgZXZl bnRzIHVwIHRvIHRoaXMgZW5kIGRhdGUuIENhbiBiZSBhbnkgdmFsaWQgZGF0ZSBmb3JtYXQu IERlZmF1bHQ6IHVuc2V0IChpLmUuIGFsbCBkYXRlcyk8L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+c29ydDwvc3Bhbj4gOiBvcmRlciB0aGUgZXZlbnRzIGJ5IHRoaXMgY29sdW1u LiBUaGUgbW9zdCB1c2VmdWwgdmFsdWUgaXMgdGhlIGRlZmF1bHQ6IDxjb2RlPlBvc3RlZCBh c2M8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZvcm08L3NwYW4+IDog cGFzcyBlYWNoIG1hdGNoaW5nIGV2ZW50IHRvIHRoZSBnaXZlbiA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiBmb3JtLiBEZWZhdWx0OiB1bnNldC4gTm90ZSB0aGF0IHVzaW5nIHRo ZSBjb250YWluZXIgb3ZlcnJpZGVzIHRoaXMgYXR0cmlidXRlLCBhbmQgaWYgeW91IHNwZWNp ZnkgbmVpdGhlciBhIGZvcm0gbm9yIGNvbnRhaW5lciwgeW91IHdpbGwgc2VlIGEgbGlzdCBv ZiBhcnRpY2xlIHBvc3RlZCBkYXRlczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5w YWdpbmc8L3NwYW4+IDogdW5saWtlIGFydGljbGVfY3VzdG9tLCBldmVudHMgZnJvbSB0aGUg c21kX2FydGljbGVfZXZlbnQgdGFnIG1heSBiZSBwYWdlZCB1c2luZyA8Y29kZT4mbHQ7dHhw Om9sZGVyIC8mZ3Q7PC9jb2RlPiBhbmQgPGNvZGU+Jmx0O3R4cDpuZXdlciAvJmd0OzwvY29k ZT4uIElmIHlvdSB3aXNoIHRvIHNob3cgYW4gZXZlbnQgbGlzdCBvbiB0aGUgc2FtZSBwYWdl IGFzIGEgc3RhbmRhcmQgYXJ0aWNsZSBsaXN0LCB0aGUgb2xkZXIvbmV3ZXIgdGFncyB3aWxs IG5hdmlnYXRlIGJvdGggbGlzdHMgc2ltdWx0YW5lb3VzbHkgc28geW91IG1heSBuZWVkIHRv IHR1cm4gcGFnaW5nIG9uICgxKSBvciBvZmYgKDApLiBEZWZhdWx0OiAxPC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPm9mZnNldDwvc3Bhbj4gOiBiZWdpbiBkaXNwbGF5aW5nIGV2 ZW50cyBmcm9tIHRoaXMgcG9zaXRpb24sIGluc3RlYWQgb2YgZnJvbSB0aGUgc3RhcnQgb2Yg dGhlIGxpc3Qgb2YgZXZlbnRzLiBEZWZhdWx0OiAwPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPmxpbWl0PC9zcGFuPiA6IG9ubHkgc2hvdyB0aGlzIG1hbnkgZXZlbnRzIG1heGlt dW0gPHN0cm9uZz5wZXIgcGFnZTwvc3Ryb25nPiwgaS5lLiB0aGUgbnVtYmVyIG9mIGV2ZW50 cyB0byBkaXNwbGF5LCB3aGV0aGVyIHRoZXkgY29tZSBmcm9tIG9uZSAmIzgyMTY7cmVhbCYj ODIxNzsgYXJ0aWNsZSBvciBtYW55LiBEZWZhdWx0OiAxMDwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5ldmVudGxpbWl0PC9zcGFuPiA6IG9ubHkgc2hvdyB0aGlzIG1hbnkgZXZl bnRzIG1heGltdW0sIDxzdHJvbmc+cGVyIGV2ZW50PC9zdHJvbmc+LiBTbyBpZiB5b3UgaGF2 ZSBhIHdlZWtseSByZXBlYXRlZCBldmVudCB0aGF0IGxhc3RzIGZvciBmb3VyIG1vbnRocyBh bmQgeW91IHNldCA8Y29kZT5ldmVudGxpbWl0PSZxdW90OzYmcXVvdDs8L2NvZGU+IHlvdSB3 aWxsIG9ubHkgc2VlIGEgbWF4aW11bSBvZiA2IGV2ZW50cyBmcm9tIGV2ZXJ5IGFydGljbGUg Y29udGFpbmluZyByZXBldGl0aW9uLiBUaGUgcmFuZ2UgKHN0YXJ0IGFuZCBlbmQgZGF0ZSkg aXMgZGV0ZXJtaW5lZCBieSBvdGhlciBwbHVnaW4gYXR0cmlidXRlcy4gRGVmYXVsdDogMTA8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+cGFnZWJ5PC9zcGFuPiA6IGVzb3Rlcmlj IHBhZ2luZyBmZWF0dXJlLCBpZGVudGljYWwgdG8gPGNvZGU+Jmx0O3R4cDphcnRpY2xlIC8m Z3Q7PC9jb2RlPi4gRGVmYXVsdDogc2FtZSBhcyA8Y29kZT5saW1pdDwvY29kZT48L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+cGdvbmx5PC9zcGFuPiA6IHNldCB0byA8Y29kZT4x PC9jb2RlPiB0byBwZXJmb3JtIHRoZSBwYWdpbmcgYWN0aW9uIHdpdGhvdXQgZGlzcGxheWlu ZyBhbnl0aGluZy4gUHJvYmFibHkgdXNlbGVzcy4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+d3JhcHRhZzwvc3Bhbj4gOiB0aGUgKFgpSFRNTCB0YWcg d2l0aG91dCBicmFja2V0cyB0byB3cmFwIHRoZSBsaXN0IGluLiBEZWZhdWx0OiB1bnNldDwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5icmVhazwvc3Bhbj4gOiB0aGUgKFgpSFRN TCB0YWcgdG8gc2VwYXJhdGUgZWFjaCBpdGVtIHdpdGguIERlZmF1bHQ6IHVuc2V0PC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzPC9zcGFuPiA6IHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzcyB0byBhcHBseSB0byB0aGUgd3JhcHRhZy4gRGVm YXVsdDogdW5zZXQ8L2xpPgoJPC91bD4KCgk8cD5JdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB0 aGlzIHRhZyBleGVjdXRlcyBpbiAzLXBoYXNlczo8L3A+CgoJPG9sPgoJCTxsaT5QcmUtZmls dGVyOiBhbGwgZXZlbnRzIHRoYXQgbWF0Y2ggPGNvZGU+dHlwZTwvY29kZT4sIDxjb2RlPmNh dGVnb3J5PC9jb2RlPiwgPGNvZGU+c2VjdGlvbjwvY29kZT4sIDxjb2RlPmF1dGhvcjwvY29k ZT4sIDxjb2RlPnN0YXR1czwvY29kZT4sIDxjb2RlPmlkPC9jb2RlPiwgYW5kIDxjb2RlPmV4 cGlyZWQ8L2NvZGU+IGFyZSBleHRyYWN0ZWQ8L2xpPgoJCTxsaT5UaW1lLWZpbHRlcjogYW55 ICYjODIyMDt0aW1lLWJhc2VkJiM4MjIxOyBhdHRyaWJ1dGVzIGFyZSB0aGVuIGFwcGxpZWQg dG8gdGhlIGFib3ZlIGxpc3QuIEF0IHRoaXMgcG9pbnQsIGFueSA8Y29kZT5leHRyYWZpZWxk PC9jb2RlPiwgPGNvZGU+c3RlcGZpZWxkPC9jb2RlPiwgPGNvZGU+b21pdGZpZWxkPC9jb2Rl Piwgb3IgPGNvZGU+c2tpcGZpZWxkPC9jb2RlPiBhcmUgY2FsY3VsYXRlZCB0byBmaW5kIHJl cGVhdGVkIGRhdGVzICh1cCB0byBhcyBtYW55IGFzIDxjb2RlPmV2ZW50bGltaXQ8L2NvZGU+ IGFsbG93cyBvciB0aGUgY2FsY3VsYXRpb24gZXhjZWVkcyB0aGUgZXZlbnQmIzgyMTc7cyBl eHBpcnkgdGltZSkuIFRoZSBhdHRyaWJ1dGVzIDxjb2RlPnRpbWU8L2NvZGU+LCA8Y29kZT5t b250aDwvY29kZT4sIDxjb2RlPmZyb208L2NvZGU+LCBhbmQgPGNvZGU+dG88L2NvZGU+IGFy ZSB1c2VkIHRvIHJlZmluZSB0aGUgZmlsdHJhdGlvbiBoZXJlPC9saT4KCQk8bGk+T3V0cHV0 OiB3aGF0ZXZlciB0aGUgcHJldmlvdXMgcGhhc2VzIGhhdmUgbGVmdCBiZWhpbmQgaXMgc3Vi amVjdCB0byBhbnkgPGNvZGU+cGFnaW5nPC9jb2RlPiwgPGNvZGU+b2Zmc2V0PC9jb2RlPiBh bmQgPGNvZGU+bGltaXQ8L2NvZGU+IHlvdSBtYXkgaGF2ZSBzcGVjaWZpZWQsIHRoZW4gd3Jh cHBlZCBhbmQgZGlzcGxheWVkPC9saT4KCTwvb2w+CgoJPGgyIGlkPSJkYXRlcyI+RGF0ZXMs IGdvdGNoYXMgYW5kIGlkaW9zeW5jcmFjaWVzPC9oMj4KCgk8cD5JZiB0aGVyZSB3YXMgb25l IGdsb2JhbCB0aW1lIHpvbmUgdGhlIHdvcmxkIHdvdWxkIGJlIHNpbXBsZXIuIFNhZGx5LCB3 ZSBhbGwgbGl2ZSBpbiBkaWZmZXJlbnQgcGxhY2VzIGFuZCB0aGUgSW50ZXJuZXQgQmVhdCBo YXNuJiM4MjE3O3QgcmVhbGx5IHRha2VuIG9mZi4gRXZlbiBtb3JlIHNhZGx5LCBjZXJ0YWlu IHVwcGVyIGVjaGVsb25zIG9mIHBvd2VyIGRlY3JlZSB0aGF0IHR3aWNlIGEgeWVhciBzb21l IGNvdW50cmllcyBtdXN0IGFsdGVyIHRoZWlyIGNsb2NrcyB0byBTYXZlIERheWxpZ2h0ICh3 aGF0ZXZlciB0aGF0IG1lYW5zKS48L3A+CgoJPHA+PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4gZG9lcyBpdHMgYmVzdCB0byBzaGllbGQgeW91IGZyb20gdGhpcyBtYXloZW0gYnkg YWxsb3dpbmcgeW91IHRvIHNwZWNpZnkgeW91ciBsb2NhbGUsIHRpbWUgb2Zmc2V0IGZyb20g PHNwYW4gY2xhc3M9ImNhcHMiPkdNVDwvc3Bhbj4sIGFuZCB3aGVuIDxzcGFuIGNsYXNzPSJj YXBzIj5EU1Q8L3NwYW4+IGFwcGxpZXMgaW4geW91ciB0aW1lIHpvbmUgKG5vdCBmb3JnZXR0 aW5nIHRoZSB0aW1lIHpvbmUgb2YgeW91ciBzZXJ2ZXIgaWYgaXQgaGFwcGVucyB0byBiZSBu b3doZXJlIG5lYXIgeW91KS4gQW5kIHRoZXJlaW4gbGllcyB0aGUgcnViLjwvcD4KCgk8cD5G b3IgYSBjYWxlbmRhciBzeXN0ZW0sIHRoaXMgaXMgYW5ub3lpbmcgYmVjYXVzZSB3aGVuIHlv dSBzYXkgdGhhdCBhbiBldmVudCBpcyBnb2luZyB0byBvY2N1ciBhdCA4cG0gaW4gc2l4IG1v bnRocyYjODIxNzsgdGltZSwgcGVza3kgRGF5bGlnaHQgU2F2aW5ncyBtYXkgdGhlbiBiZSBp biBlZmZlY3QgYW5kIHlvdXIgZXZlbnQgd2lsbCBhcHBlYXIgYW4gaG91ciAmIzgyMTY7b2Zm JiM4MjE3OyAoaXQgbWF5IGxvb2sgd3JvbmcgaW4gdGhlIGFkbWluIGludGVyZmFjZSBhcyB3 ZWxsIGFzIGluIHlvdXIgY2FsZW5kYXIsIGRlcGVuZGluZyBvbiB0aGUgc2V0dGluZ3MpLjwv cD4KCgk8cD5BbHNvLCBpZiB5b3VyIHNlcnZlciBvciB5b3VyIG9mZmljZSBpcyByZWxvY2F0 ZWQgYW5kIHlvdSBoYXZlIHRvIGFkanVzdCB0aW1lIHpvbmUsIGFsbCB5b3VyIGJlYXV0aWZ1 bGx5IGNyYWZ0ZWQgZGF0ZXMgd2lsbCBiZSBzaGlmdGVkLiBXZWxsLCB0aGV5JiM4MjE3O3Jl IG5vdCBhY3R1YWxseSBjaGFuZ2VkIGluIHRoZSBkYXRhYmFzZSB1bmxlc3MgeW91IGVkaXQg YW4gYXJ0aWNsZSBhbmQgcmUtc2F2ZSBpdCwgYnV0IHRoZXkgPGVtPmFwcGVhcjwvZW0+IHRv IGhhdmUgc2hpZnRlZCBiZWNhdXNlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGlz IHRyeWluZyB0byBzaGllbGQgeW91IGZyb20gdGltZSBidXJlYXVjcmFjeSBpbiBhIHdvcmxk IGdvbmUgbWFkLjwvcD4KCgk8cD5VbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIGxpdHRsZSB3ZSBj YW4gZG8gYWJvdXQgdGhpcyBhdCB0aGUgbW9tZW50IHVudGlsIHRoZSB3YXkgZGF0ZXMgYXJl IGhhbmRsZWQgaW4gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gaXMgY2hhbmdlZC4g QnV0IHRoZXJlIGFyZSBzb21lIHNldHRpbmdzIHRoYXQgeW91IGNhbiBwbGF5IHdpdGggdG8g dHJ5IGFuZCBtYWtlIHNlbnNlIG9mIGl0IGFsbC4gTmFtZWx5IHRoZSA8Y29kZT5nbXQ8L2Nv ZGU+IGF0dHJpYnV0ZSBpbiBhbnkgb2YgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4m IzgyMTc7cyBkYXRlLWJhc2VkIHRhZ3Mgc3VjaCBhcyA8Y29kZT4mbHQ7dHhwOnBvc3RlZCAv Jmd0OzwvY29kZT4gYW5kIDxjb2RlPiZsdDt0eHA6ZXhwaXJlcyAvJmd0OzwvY29kZT4uIFNv bWV0aW1lcyBmaWRkbGluZyB3aXRoIHRoYXQgYW5kIHRoZSB0aW1lIHpvbmUvRFNUIGZsYWdz IHdpbGwgaGVscC4gT3RoZXIgdGltZXMgeW91JiM4MjE3O2xsIGdldCBpbiBhIHJpZ2h0IG9s ZCBtZXNzLjwvcD4KCgk8cD5JZiBhbGwgdGhhdCBmYWlscywgdGhlIGNvbmRpdGlvbmFsIHRh ZyBtYXkgYmUgYWJsZSB0byBoZWxwIHlvdSBjb21wYXJlIGNlcnRhaW4gZGF0ZXMgYW5kIGFw cGx5IGRpZmZlcmVudCBhdHRyaWJ1dGVzIGRlcGVuZGluZyBvbiB0aGUgZGF5IG9mIHRoZSB5 ZWFyLiBGYWlsaW5nIHRoYXQsIGp1c3QgdXNlIDxzcGFuIGNsYXNzPSJjYXBzIj5HTVQ8L3Nw YW4+IGFuZCByZWZ1c2UgdG8gb2JzZXJ2ZSA8c3BhbiBjbGFzcz0iY2FwcyI+RFNUPC9zcGFu PiA6LSk8L3A+CgoJPGgyIGNsYXNzPSJleGFtcGxlcyI+RXhhbXBsZXM8L2gyPgoKCTxoMyBp ZD0iZWcxIj5FeGFtcGxlIDE8L2gzPgoKCTxwPlRoZSBiZWF1dHkgb2YgdGhlIHBsdWdpbiBp cyB0aGF0IHlvdSBoYXZlIHRoZSBlbnRpcmUgYXJzZW5hbCBvZiA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiB0YWdzIGF2YWlsYWJsZSB0byB5b3UgaWYgeW91IGNob29zZSB0byB1 c2UgYSA8Y29kZT5mb3JtPC9jb2RlPi4gVGh1cyB5b3UgY2FuIHNldCB0aGUgYXJ0aWNsZSYj ODIxNztzIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgdG8gdGhlIHNhbWUgZGF5IGFuZCBzZXQgdGhl IHN0YXJ0IGFuZCBlbmQgdGltZXMgdG8gaW5kaWNhdGUgdGhlIHN0YXJ0IGFuZCBlbmQgb2Yg dGhlIGV2ZW50LiBZb3UgY2FuIHRoZW4gdXNlIHN0YW5kYXJkIDxjb2RlPiZsdDt0eHA6cG9z dGVkIC8mZ3Q7PC9jb2RlPiBvciA8Y29kZT4mbHQ7dHhwOmV4cGlyZXMgLyZndDs8L2NvZGU+ IHRhZ3Mgd2l0aCB2YXJpb3VzIDxjb2RlPmZvcm1hdDwvY29kZT4gc3RyaW5ncyB0byByZW5k ZXIgdGhlIGV2ZW50JiM4MjE3O3MgY3JpdGVyaWEuPC9wPgoKCTxwPlNpbWlsYXJseSB5b3Ug Y2FuIHVzZSA8Y29kZT4mbHQ7dHhwOmV4Y2VycHQgLyZndDs8L2NvZGU+IGFuZCA8Y29kZT4m bHQ7dHhwOnRpdGxlIC8mZ3Q7PC9jb2RlPiBvciBvZiBjb3Vyc2UgYW55IGN1c3RvbSBmaWVs ZHMgdG8gc2hvdyBhcyBtdWNoIG9yIGFzIGxpdHRsZSBkZXRhaWwgYXMgeW91IGxpa2UgaW4g dGhlIGNhbGVuZGFyIGNlbGwuPC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNz PSJibG9jayI+Jmx0O3R4cDpzbWRfY2FsZW5kYXIgc2VjdGlvbj0mcXVvdDtldmVudHMmcXVv dDsmZ3Q7CiZsdDtkaXYmZ3Q7CiAgIEV2ZW50OiAmbHQ7dHhwOnBlcm1saW5rJmd0OyZsdDt0 eHA6dGl0bGUgLyZndDsmbHQ7L3R4cDpwZXJtbGluayZndDsKICAgJmx0O2JyIC8mZ3Q7Jmx0 O3R4cDpleGNlcnB0IC8mZ3Q7CiZsdDsvZGl2Jmd0OwombHQ7ZGl2IGNsYXNzPSZxdW90O2V2 dGltZSZxdW90OyZndDsKICAgU3RhcnQ6ICZsdDt0eHA6cG9zdGVkIGZvcm1hdD0mcXVvdDsl SDolTSZxdW90OyAvJmd0OwombHQ7L2RpdiZndDsKJmx0O2RpdiBjbGFzcz0mcXVvdDtldnRp bWUmcXVvdDsmZ3Q7CiAgIEVuZDogJmx0O3R4cDpleHBpcmVzIGZvcm1hdD0mcXVvdDslSDol TSZxdW90OyAvJmd0OwombHQ7L2RpdiZndDsKJmx0Oy90eHA6c21kX2NhbGVuZGFyJmd0Owo8 L2NvZGU+PC9wcmU+CgoJPGgzIGlkPSJlZzIiPkV4YW1wbGUgMjwvaDM+CgoJPHA+VXNpbmcg dGhlIGNvbmRpdGlvbmFsIHRhZyB5b3UgY2FuIHRha2UgYWN0aW9uIGlmIGNlcnRhaW4gZXZl bnRzIGNvbnRhaW4gcGFydGljdWxhciBmbGFncy4gVGhpcyBleGFtcGxlIGFsc28gc2hvdyBh IGNvbXBsZXRlbHkgdXNlbGVzcyBtYW5uZXIgb2YgZW1wbG95aW5nIDxjb2RlPiZsdDt0eHA6 c21kX2NhbF9ub3cgLyZndDs8L2NvZGU+LjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29k ZSBjbGFzcz0iYmxvY2siPlRpbWUgaXM6ICZsdDt0eHA6c21kX2NhbF9ub3cgZm9ybWF0PSZx dW90OyVUJnF1b3Q7IC8mZ3Q7CiZsdDt0eHA6c21kX2NhbGVuZGFyIGZvcm09JnF1b3Q7ZXZm b3JtJnF1b3Q7CiAgICAgc3RlcGZpZWxkPSZxdW90O2N1c3RvbV8zJnF1b3Q7IHNraXBmaWVs ZD0mcXVvdDtjdXN0b21fNiZxdW90OwogICAgIHNwYW5mb3JtPSZxdW90O211bHRpcyZxdW90 OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+SW4gZm9ybSA8Y29kZT5ldmZvcm08L2NvZGU+ OjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6 c21kX2lmX2NhbCBmbGFnPSZxdW90O3JlY3VyJnF1b3Q7Jmd0OwogICZsdDt0eHA6cGVybWxp bmsmZ3Q7KFJFQ1VSKSZsdDsvdHhwOnBlcm1saW5rJmd0OwombHQ7dHhwOmVsc2UgLyZndDsK ICAgJmx0O3R4cDpwZXJtbGluayZndDsmbHQ7dHhwOnRpdGxlIC8mZ3Q7Jmx0Oy90eHA6cGVy bWxpbmsmZ3Q7CiAgICZsdDt0eHA6c21kX2lmX2NhbCBmbGFnPSZxdW90O211bHRpZmlyc3Qm cXVvdDsmZ3Q7CiAgICAgICZsdDtzcGFuIGNsYXNzPSZxdW90O3JpZ2h0JnF1b3Q7Jmd0OyZh bXA7bGFxdW87LS0mbHQ7L3NwYW4mZ3Q7CiAgICZsdDsvdHhwOnNtZF9pZl9jYWwmZ3Q7CiAg ICZsdDt0eHA6c21kX2lmX2NhbCBmbGFnPSZxdW90O3JlY3VyZmlyc3QmcXVvdDsmZ3Q7CiAg ICAgICZsdDtzcGFuJmd0O09uZSBvZiBtYW55Li4uJmx0Oy9zcGFuJmd0OwogICAmbHQ7L3R4 cDpzbWRfaWZfY2FsJmd0OwombHQ7L3R4cDpzbWRfaWZfY2FsJmd0Owo8L2NvZGU+PC9wcmU+ CgoJPHA+QW5kIGluIGZvcm0gPGNvZGU+bXVsdGlzPC9jb2RlPjo8L3A+Cgo8cHJlIGNsYXNz PSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9pZl9jYWwgZmxhZz0m cXVvdDttdWx0aSwgbXVsdGlwcmV2JnF1b3Q7Jmd0OwogICAmbHQ7dHhwOnBlcm1saW5rJmd0 Oy0tJmFtcDtyYXF1bzstLSZsdDsvdHhwOnBlcm1saW5rJmd0OwombHQ7L3R4cDpzbWRfaWZf Y2FsJmd0OwombHQ7dHhwOnNtZF9pZl9jYWwgZmxhZz0mcXVvdDttdWx0aWxhc3QmcXVvdDsm Z3Q7CiAgICZsdDt0eHA6cGVybWxpbmsmZ3Q7CiAgICAgICZsdDtzcGFuIGNsYXNzPSZxdW90 O2xlZnQmcXVvdDsmZ3Q7LS0mYW1wO3JhcXVvOyZsdDsvc3BhbiZndDsgRU5EICZsdDt0eHA6 dGl0bGUgLyZndDsKICAgJmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiZsdDsvdHhwOnNtZF9pZl9j YWwmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5Ob3RpY2UgdGhhdCA8Y29kZT5tdWx0aWZpcnN0 PC9jb2RlPiBpcyB0ZXN0ZWQgaW5zaWRlIHRoZSBzYW1lIGZvcm0gYXMgc3RhbmRhcmQgZXZl bnRzLiBUaGlzIGlzIGJlY2F1c2Ugb25seSA8ZW0+Y29udGludWF0aW9uIHNwYW5uZWQgY2Vs bHM8L2VtPiBhcmUgcGFzc2VkIHRvIHRoZSA8Y29kZT5zcGFuZm9ybTwvY29kZT47IHRoZSBm aXJzdCBldmVudCBvZiBhIHNwYW5uZWQgZ3JvdXAgaXMganVzdCBsaWtlIGFueSBzdGFuZGFy ZCBldmVudC4gU2ltaWxhcmx5LCBpZiB5b3UgaGFkIGJlZW4gdXNpbmcgPGNvZGU+cmVjdXJm b3JtPC9jb2RlPiB0aGUgZmlyc3QgZXZlbnQgb2YgdGhlIHJlY3VycmluZyBzZXQgd291bGQg YmUgcHJvY2Vzc2VkIGluIHRoZSB1c3VhbCBmb3JtL2NvbnRhaW5lciBhbmQgZXZlcnkgc3Vi c2VxdWVudCBldmVudCB3b3VsZCBiZSBwYXNzZWQgdG8gdGhlIGRlZGljYXRlZCBmb3JtLjwv cD4KCgk8aDMgaWQ9ImVnMyI+RXhhbXBsZSAzPC9oMz4KCgk8cD5Zb3UgY291bGQgdXNlIHRo ZSBjYWxlbmRhciB0YWdzIHRvIG91dHB1dCB2YXJpb3VzIHBpZWNlcyBvZiBmbGFnIGluZm9y bWF0aW9uIHRvIGJ1aWxkIHlvdXIgb3duIGNsYXNzIG5hbWVzLiBUaGlzIGV4YW1wbGUgYWxz byBkZW1vbnN0cmF0ZXMgdGhlIDxjb2RlPmh0bWw8L2NvZGU+IGF0dHJpYnV0ZSBvZiA8Y29k ZT4mbHQ7dHhwOnNtZF9jYWxfaW5mbyAvJmd0OzwvY29kZT4gdG8gYnVpbGQgdXAgYSBxdWVy eSBzdHJpbmcgdGhhdCBpcyBwYXNzZWQgYWxvbmcgd2l0aCBhbiBldmVudCYjODIxNztzIDxj b2RlPmNhdGVnb3J5MTwvY29kZT4gd2hlbiBhIHZpc2l0b3IgY2xpY2tzIHRoZSBhbmNob3Iu PC9wPgoKCTxwPlRoaXMgYWxsb3dzIHlvdXIgc2l0ZSB2aXNpdG9ycyB0byBmaWx0ZXIgZXZl bnRzIGJ5IGNhdGVnb3J5IHdoaWxlIHJldGFpbmluZyB0aGUgYWJpbGl0eSB0byBzaG93IHRo ZSBjYWxlbmRhciBmb3IgdGhlIGN1cnJlbnQgbW9udGgveWVhciBhbmQgc2VjdGlvbiB0aGV5 IGFyZSB2aWV3aW5nIGluc3RlYWQgb2YgZHJvcHBpbmcgYmFjayB0byB0aGUgY3VycmVudCBt b250aC95ZWFyIGxpa2Ugb3RoZXIgY2FsZW5kYXIgc3lzdGVtcyBvZnRlbiBkby48L3A+Cgo8 cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9jYWxl bmRhciBpc293ZWVrcz0mcXVvdDtXRUVLIyZxdW90OwogICAgIHllYXJ3aWR0aD0mcXVvdDsw LDImcXVvdDsgc2VsZWN0PSZxdW90O3llYXIsIG1vbnRoJnF1b3Q7CiAgICAgc3RlcGZpZWxk PSZxdW90O2N1c3RvbV8xJnF1b3Q7IHNraXBmaWVsZD0mcXVvdDtjdXN0b21fMiZxdW90Owog ICAgIHNob3dza2lwcGVkPSZxdW90OzEmcXVvdDsgZXhwaXJlZD0mcXVvdDsxJnF1b3Q7Jmd0 OwogICAmbHQ7c3BhbiBjbGFzcz0mcXVvdDsmbHQ7dHhwOnNtZF9jYWxfaW5mbyBqb2luPSZx dW90OyBjYWxfJnF1b3Q7IC8mZ3Q7JnF1b3Q7Jmd0OwogICAgICAmbHQ7dHhwOnBlcm1saW5r Jmd0OyZsdDt0eHA6dGl0bGUgLyZndDsmbHQ7L3R4cDpwZXJtbGluayZndDsKICAgICAgJmx0 O2EgaHJlZj0mcXVvdDs/Yz0mbHQ7dHhwOmNhdGVnb3J5MQogICAgICAgICAvJmd0OyZhbXA7 Jmx0O3R4cDpzbWRfY2FsX2luZm8gdHlwZT0mcXVvdDtzLCB5ZWFyLAogICAgICAgICBtb250 aCwgY2FsaWQmcXVvdDsgaHRtbD0mcXVvdDsxJnF1b3Q7IGpvaW5fcHJlZml4PSZxdW90OyZx dW90OwogICAgICAgICAvJmd0OyZxdW90OyZndDsmbHQ7dHhwOmNhdGVnb3J5MSB0aXRsZT0m cXVvdDsxJnF1b3Q7IC8mZ3Q7Jmx0Oy9hJmd0OwogICAmbHQ7L3NwYW4mZ3Q7CiZsdDsvdHhw OnNtZF9jYWxlbmRhciZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPldoYXQgaXMgYWxzbyB1c2Vm dWwgYWJvdXQgdGhlIDxjb2RlPiZsdDt0eHA6c21kX2NhbF9pbmZvIC8mZ3Q7PC9jb2RlPiB0 YWcgaXMgdGhhdCBpZiBhIHBhcnRpY3VsYXIgdmFsdWUgaXMgbm90IHNldCBpdCB3aWxsIDxl bT5ub3Q8L2VtPiBiZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0LjwvcD4KCgk8aDMgaWQ9ImVn NCI+RXhhbXBsZSA0PC9oMz4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxv Y2siPiZsdDtoMiZndDtVcGNvbWluZyBFdmVudHMmbHQ7L2gyJmd0OwombHQ7dHhwOnNtZF9h cnRpY2xlX2V2ZW50IHN0ZXBmaWVsZD0mcXVvdDtjdXN0b21fMSZxdW90OwogICAgIHdyYXB0 YWc9JnF1b3Q7ZGwmcXVvdDsgdGltZT0mcXVvdDtmdXR1cmUmcXVvdDsgZXZlbnRsaW1pdD0m cXVvdDs1JnF1b3Q7Jmd0OwogICAmbHQ7dHhwOmlmX2RpZmZlcmVudCZndDsKICAgICAmbHQ7 ZHQmZ3Q7Jmx0O3R4cDpwb3N0ZWQgZm9ybWF0PSZxdW90OyVCICVZJnF1b3Q7IC8mZ3Q7Jmx0 Oy9kdCZndDsKICAgJmx0Oy90eHA6aWZfZGlmZmVyZW50Jmd0OwogICAmbHQ7ZGQmZ3Q7CiAg ICAgICZsdDt0eHA6cGVybWxpbmsmZ3Q7Jmx0O3R4cDp0aXRsZS8mZ3Q7Jmx0Oy90eHA6cGVy bWxpbmsmZ3Q7CiAgICAgICZsdDt0eHA6cG9zdGVkIC8mZ3Q7CiAgICZsdDsvZGQmZ3Q7CiZs dDsvdHhwOnNtZF9hcnRpY2xlX2V2ZW50Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+VGhhdCBs aXN0cyB0aGUgbmV4dCA1IHVwY29taW5nICYjODIxMjsgcmVjdXJyaW5nICYjODIxMjsgZXZl bnRzLCBwbHVzIGFueSBzdGFuZGFyZCBhbmQgc3Bhbm5lZCBldmVudHMsIGZvcm1hdHRpbmcg dGhlbSBhcyBhIGRlZmluaXRpb24gbGlzdC4gSWYgeW91IGFkZCBwYWdpbmF0aW9uIHRhZ3Mg eW91IGNhbiBmbGlwIHRocm91Z2ggYWxsIHRoZSBldmVudHM7IHRoZXkgd2lsbCBiZSBkaXNw bGF5ZWQgMTAgYXQgYSB0aW1lIG9uIGVhY2ggcGFnZSAoaWYgeW91IHdhbnQgdG8ga2VlcCB0 cmFjayBvZiB3aGljaCBwYWdlIHlvdSBhcmUgb24gYXMgeW91IGZsaXAgdGhyb3VnaCBhIGNh bGVuZGFyIHRoYXQgaXMgaW4gYSBzaWRlYmFyLCBhZGQgPGNvZGU+cGc8L2NvZGU+IHRvIHRo ZSA8Y29kZT5tYWludGFpbjwvY29kZT4gYXR0cmlidXRlIGluIHlvdXIgY2FsZW5kYXIpLjwv cD4KCgk8cD5Ob3RlIHRoZSBoeXBlcmxpbmtlZCB0aXRsZSBzaG93biBoZXJlIHdpbGwgZGlz cGxheSB0aGUgJiM4MjE2O3JlYWwmIzgyMTc7IGFydGljbGUgd2hlbiBjbGlja2VkLiBJZiB5 b3Ugd2FudGVkIHRvIGFsbG93IHBlb3BsZSB0byBib29rIGFuIGV2ZW50IG9uIHlvdXIgaW5k aXZpZHVhbCBhcnRpY2xlLCB0cnkgdGhpczo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNv ZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOmlmX2luZGl2aWR1YWxfYXJ0aWNsZSZndDsKICZs dDt0eHA6YXJ0aWNsZSBsaW1pdD0mcXVvdDsxJnF1b3Q7Jmd0OwogICZsdDtoMyZndDsmbHQ7 dHhwOnRpdGxlIC8mZ3Q7Jmx0Oy9oMyZndDsKICAmbHQ7dHhwOmJvZHkgLyZndDsKICAmbHQ7 cCZndDtQbGVhc2UgY2hvb3NlIGEgZGF0ZSB0byBib29rOiZsdDsvcCZndDsKICAmbHQ7c2Vs ZWN0Jmd0OwogICZsdDt0eHA6c21kX2FydGljbGVfZXZlbnQgc3RlcGZpZWxkPSZxdW90O2N1 c3RvbV8xJnF1b3Q7CiAgICB0eXBlPSZxdW90O3JlY3VyJnF1b3Q7IGlkPSYjMzk7Jmx0O3R4 cDphcnRpY2xlX2lkIC8mZ3Q7JiMzOTsmZ3Q7CiAgICAmbHQ7b3B0aW9uCiAgICAgdmFsdWU9 JiMzOTsmbHQ7dHhwOnBvc3RlZCBmb3JtYXQ9JnF1b3Q7JUctJW0tJWQmcXVvdDsvJmd0OyYj Mzk7Jmd0OwogICAgICAmbHQ7dHhwOnBvc3RlZCBmb3JtYXQ9JnF1b3Q7JW0gJWQsICRHJnF1 b3Q7IC8mZ3Q7CiAgICAmbHQ7L29wdGlvbiZndDsKICAmbHQ7L3R4cDpzbWRfYXJ0aWNsZV9l dmVudCZndDsKICAmbHQ7L3NlbGVjdCZndDsKICZsdDsvdHhwOmFydGljbGUmZ3Q7CiZsdDsv dHhwOmlmX2luZGl2aWR1YWxfYXJ0aWNsZSZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPldpdGgg c29tZSBjdW5uaW5nIHlvdSBjb3VsZCBldmVuIGFkZCB0aGUgJiM4MjE2O3ZpcnR1YWwmIzgy MTc7IGRhdGUgdGhhdCB0aGV5IGNob3NlIGluIHlvdXIgb3JpZ2luYWwgYXJ0aWNsZV9ldmVu dCBsaXN0IGFuZCBwYXNzIGl0IGFzIGEgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4g dmFyaWFibGUgdG8geW91ciBpbmRpdmlkdWFsIGFydGljbGUgd2hlcmUgeW91IGNvdWxkIHJl YWQgdGhlIHZhbHVlIGFuZCBwcmUtc2VsZWN0IHRoZSBkYXRlIGZvciB0aGUgdmlzdG9yLjwv cD4KCgk8aDMgaWQ9ImVnNSI+RXhhbXBsZSA1PC9oMz4KCgk8cD5Ib3cgYWJvdXQgYmVpbmcg YWJsZSB0byBvdXRwdXQgeW91ciBldmVudHMgaW4gaUNhbCBmb3JtYXQgc28gb3RoZXIgcGVv cGxlIGNhbiBzeW5jIHRoZWlyIGNhbGVuZGFycyB0byB5b3Vycz8gUHV0IHRoaXMgaW4gYSBu ZXcgUGFnZSB0ZW1wbGF0ZSBpbiBpdHMgb3duIFNlY3Rpb246PC9wPgoKPHByZSBjbGFzcz0i YmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+QkVHSU46VkNBTEVOREFSClZFUlNJT046Mi4w ClgtV1ItQ0FMTkFNRTpHaWdzIENhbGVuZGFyClBST0RJRDotLy9BcHBsZSBDb21wdXRlciwg SW5jLy9pQ2FsIDEuNS8vRU4KWC1XUi1USU1FWk9ORTpFdXJvcGUvTG9uZG9uCiZsdDt0eHA6 c21kX2FydGljbGVfZXZlbnQgZm9ybT0mcXVvdDtpY3NpdGVtJnF1b3Q7IHRpbWU9JnF1b3Q7 YW55JnF1b3Q7CnNlY3Rpb249JnF1b3Q7Z2lncyZxdW90OyBsaW1pdD0mcXVvdDsxMDAwJnF1 b3Q7Jmd0OwogQkVHSU46VkVWRU5UCiBEVFNUQVJUOiZsdDt0eHA6cG9zdGVkIGZvcm1hdD0m cXVvdDslWSVtJWRUJUglaSVzJnF1b3Q7IC8mZ3Q7CiBEVEVORDombHQ7dHhwOmV4cGlyZXMg Zm9ybWF0PSZxdW90OyVZJW0lZFQlSCVpJXMmcXVvdDsgLyZndDsKIFNVTU1BUlk6Jmx0O3R4 cDp0aXRsZSAvJmd0OwogRU5EOlZFVkVOVAombHQ7L3R4cDpzbWRfYXJ0aWNsZV9ldmVudCZn dDsKRU5EOlZDQUxFTkRBUgo8L2NvZGU+PC9wcmU+CgoJPHA+VGhhdCB3aWxsIG91dHB1dCBh biBpQ2FsLWZvcm1hdHRlZCBnaWcgbGlzdCAocmVwZWF0ZWQgb3Igb3RoZXJ3aXNlKS4gSWYg eW91IGdvdCBmcmVha3kgd2l0aCBpdCBhbmQgYWRkZWQgc29tZSBjb25kaXRpb25hbCBsb2dp YyBpbnNpZGUgdGhlIHRlbXBsYXRlIHlvdSBjb3VsZCBldmVuIHJlYWQgaW4gPHNwYW4gY2xh c3M9ImNhcHMiPlVSTDwvc3Bhbj4gdmFyaWFibGVzIGFuZCBwbHVnIHRoZW0gaW4uIFRodXMg eW91IGNvdWxkIGxpbmsgdG8gaXQgZGlyZWN0bHkgb2ZmIHRoZSBjYWxlbmRhciBpdHNlbGYs IHBhc3MgaW4gdGhlIHNlY3Rpb24sIGNhdGVnb3J5IG9yIGV2ZW50IGluZm8gYW5kIGhhdmUg YSBjdXN0b21pc2VkIGlDYWwgc3RyZWFtIHB1bXBlZCBvdXQgb2YgVGV4dHBhdHRlcm4uPC9w PgoKCTxwPlRoYW5rcyB0byB3b29mIGZvciBicmluZ2luZyB0aGUgb3JpZ2luYWwgPGEgaHJl Zj0iaHR0cDovL2RlLW9ubGluZS5jby51ay8yMDA2LzA1LzA1L3RleHRwYXR0ZXJuLWFuZC1p Y2FsIj5EYXZpZCBFbWVyeTwvYT4gYXJ0aWNsZSB0byBteSBhdHRlbnRpb24uPC9wPgoKCTxo MyBpZD0iZWc2Ij5FeGFtcGxlIDY8L2gzPgoKCTxwPlVzaW5nIHRoZSA8Y29kZT5ub3c8L2Nv ZGU+IGFuZCA8Y29kZT5vZmZzZXQ8L2NvZGU+IGF0dHJpYnV0ZXMgb2YgPGNvZGU+Jmx0O3R4 cDpzbWRfY2FsX25vdyAvJmd0OzwvY29kZT4geW91IGNhbiBlZmZlY3RpdmVseSBzZXQgJiM4 MjE2O25vdyYjODIxNzsgdG8gYmUgYW55IHRpbWUgeW91IGxpa2UgYW5kIG1ha2UgY2FsY3Vs YXRpb25zIGJhc2VkIG9uIGEgcGFydGljdWxhciBkYXRlLjwvcD4KCgk8cD5QbHVnZ2luZyB0 aGUgPGNvZGU+P21vbnRoPC9jb2RlPiBhbmQgPGNvZGU+P3llYXI8L2NvZGU+IGNvZGVzIGlu IGFsbG93cyB5b3UgdG8gbWFrZSA8Y29kZT4mbHQ7dHhwOnNtZF9hcnRpY2xlX2V2ZW50IC8m Z3Q7PC9jb2RlPiB0cmFjayB0aGUgY2FsZW5kYXIuIFNvIHlvdSBjYW4gYXV0b21hdGljYWxs eSBzaG93IG9ubHkgdGhlIGV2ZW50cyB0aGF0IG9jY3VyIGluIHRoZSBtb250aCB0aGUgdmlz aXRvciBpcyBicm93c2luZyB2aWEgdGhlIGNhbGVuZGFyOjwvcD4KCjxwcmUgY2xhc3M9ImJs b2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2NhbGVuZGFyIHN0ZXBmaWVs ZD0mcXVvdDtjdXN0b21fMSZxdW90OyAvJmd0OwombHQ7aDImZ3Q7RXZlbnRzIHRoaXMgbW9u dGgmbHQ7L2gyJmd0OwombHQ7dHhwOnNtZF9hcnRpY2xlX2V2ZW50IHN0ZXBmaWVsZD0mcXVv dDtjdXN0b21fMSZxdW90OwogICAgIGZyb209JiMzOTsmbHQ7dHhwOnNtZF9jYWxfbm93IG5v dz0mcXVvdDswMS0/bW9udGgtP3llYXImcXVvdDsgLyZndDsmIzM5OwogICAgIHRvPSYjMzk7 Jmx0O3R4cDpzbWRfY2FsX25vdyBub3c9JnF1b3Q7P21vbnRoLT95ZWFyJnF1b3Q7CiAgICAg ICAgb2Zmc2V0PSZxdW90OzEgbW9udGgmcXVvdDsgLyZndDsmIzM5OyB0aW1lPSZxdW90O2Fu eSZxdW90OyB3cmFwdGFnPSZxdW90O3VsJnF1b3Q7Jmd0OwombHQ7bGkmZ3Q7Jmx0O3R4cDpw ZXJtbGluayZndDsmbHQ7YiZndDsmbHQ7dHhwOnRpdGxlLyZndDsmbHQ7L2ImZ3Q7Jmx0Oy90 eHA6cGVybWxpbmsmZ3Q7CiZsdDtici8mZ3Q7Jmx0O3R4cDpwb3N0ZWQgLyZndDsmbHQ7L2xp Jmd0OwombHQ7L3R4cDpzbWRfYXJ0aWNsZV9ldmVudCZndDsKPC9jb2RlPjwvcHJlPgoKCTxw PjwvZGl2PjwvcD4KPCEtLSAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0gLS0+CjxzdHlsZSB0 eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21kX2hl bHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBO ZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQoj c21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBk b3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsg bWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGE6bGlu aywgI3NtZF9oZWxwIGE6dmlzaXRlZCB7IGNvbG9yOiAjMDBjOyB0ZXh0LWRlY29yYXRpb246 IG5vbmU7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbTox cHg7fQojc21kX2hlbHAgYTpob3ZlciwgI3NtZF9oZWxwIGE6YWN0aXZlIHsgY29sb3I6IGJs dWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGJs dWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNzbWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBm b250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjog Y2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFj azsgcGFkZGluZzoxMHB4IDAgMDsgY29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwg c2Fucy1zZXJpZjsgfQojc21kX2hlbHAgaDMgeyBjb2xvcjogIzA3OTsgZm9udDogYm9sZCAx MnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEw cHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IHRleHQtZGVjb3JhdGlvbjp1bmRl cmxpbmU7fQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2Vy aWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNm b3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsg Y29sb3I6IzMzZDsgfQojc21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRl cjoxcHggZG90dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHt3aWR0aDo5MCU7IHRleHQt YWxpZ246Y2VudGVyOyBwYWRkaW5nLWJvdHRvbToxZW07fQojc21kX2hlbHAgdGQsICNzbWRf aGVscCB0aCB7Ym9yZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDt9CiNzbWRf aGVscCB1bCB7IGxpc3Qtc3R5bGUtdHlwZTpzcXVhcmU7IH0KI3NtZF9oZWxwIC5yZXF1aXJl ZCB7Y29sb3I6cmVkO30KI3NtZF9oZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVweCAzMHB4 OyB9CiNzbWRfaGVscCAuYnJlYWsgeyBtYXJnaW4tdG9wOjVweDsgfQo8L3N0eWxlPgo8IS0t IC0tLSBFTkQgUExVR0lOIENTUyAtLS0gLS0+CiI7czozOiJtZDUiO3M6MzI6ImZhMjM5M2Nj MDYyMmZjYWJkZWY3OTBmZWJhZWNiMTI0Ijt9