# Name: smd_calendar v0.2 # 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 b24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjM6IjAuMiI7czoxMToiZGVzY3JpcHRpb24iO3M6 NjI6IkNhbGVuZGFyIC8gZXZlbnQgLyBzY2hlZHVsZSBzeXN0ZW0gd2l0aCBldmVudHMgYXMg VFhQIGFydGljbGVzIjtzOjQ6ImNvZGUiO3M6MzQ1ODk6Ii8vIEJhc2VkIGhlYXZpbHkgb24g bWRwX2NhbGVuZGFyIC0gdGhhbmtzIQ0KaWYoICRkYXRlID0gZ3BzKCdkYXRlJykgKSB7DQoJ JF9HRVRbJ21vbnRoJ10gPSAkZGF0ZTsNCn0NCg0KZnVuY3Rpb24gc21kX2NhbGVuZGFyKCRh dHRzLCAkdGhpbmc9JycpIHsNCglnbG9iYWwgJHByZXRleHQsICR2YXJpYWJsZSwgJHByZWZz LCAkc21kX2NhbF9mbGFnLCAkc21kX2NhbF9pZCwgJHNtZF95ZWFyLCAkc21kX21vbnRoLCAk c21kX2RheTsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSd0aW1lJyA9PiAnYW55Jywg Ly8gcGFzdCwgZnV0dXJlLCBhbnkNCgkJJ3NpemUnID0+ICdsYXJnZScsIC8vIHNtYWxsIG9y IGxhcmdlIChjYWxlbmRhcikNCgkJJ2V4cGlyZWQnID0+ICcnLCAvLyAwPW5vLCAxPXllcyBw dWJsaXNoIGV4cGlyZWQgZXZlbnRzLCBlbXB0eT11c2UgcHJlZnMNCgkJJ2NhdGVnb3J5JyA9 PiAkcHJldGV4dFsnYyddLA0KCQknc2VjdGlvbicgPT4gJHByZXRleHRbJ3MnXSwNCgkJJ2F1 dGhvcicgPT4gJHByZXRleHRbJ2F1dGhvciddLA0KCQknc3RhdHVzJyA9PiAnbGl2ZScsDQoJ CSdzdGF0aWMnID0+ICcnLA0KCQknZm9ybScgPT4gJycsDQoJCSdzcGFuZm9ybScgPT4gJ1NN RF9TQU1FJywNCgkJJ3N0ZXBmaWVsZCcgPT4gJycsDQoJCSdza2lwZmllbGQnID0+ICcnLA0K CQknc2hvd3NraXBwZWQnID0+ICcwJywNCgkJJ3Nob3dzcGFubmVkJyA9PiAnMScsDQoJCSdo b2xpZGF5cycgPT4gJycsDQoJCSdob2xpZGF5ZmxhZ3MnID0+ICdldmVudCcsIC8vIHBlcm1p dCB0aGVzZSBldmVudHMgdG8gImxhbmQiIG9uIGEgaG9saWRheSAoZXZlbnQsIHJlY3VyLCBt dWx0aSkNCgkJJ2NsYXNzbGV2ZWxzJyA9PiAnY2VsbCwgZXZlbnQnLCAvLyBjZWxsLCBldmVu dCwgY2VsbHBsdXMgKGNvbWJpbmVzIGV2ZW50IGFuZCBjZWxsIGludG8gY2VsbCBsZXZlbCBj bGFzc2VzKQ0KCQknY2xhc3NwcmVmaXhlcycgPT4gJ3NtZF9jYWxfLCBzbWRfY2FsX2V2Xycs IC8vIDFzdD1jZWxsLWxldmVsIHBmeCwgMm5kPWV2ZW50LWxldmVsIHBmeCAob3B0aW9uYWwp DQoJCSdjbGFzcycgPT4gJycsIC8vIFRhYmxlIGNsYXNzDQoJCSdyb3djbGFzcycgPT4gJycs DQoJCSdjZWxsY2xhc3MnID0+ICcnLA0KCQknZW1wdHljbGFzcycgPT4gJ2VtcHR5JywNCgkJ J2lzb3dlZWtjbGFzcycgPT4gJ3dlZWsnLA0KCQknbmF2Y2xhc3MnID0+ICduYXYnLA0KCQkn ZXZlbnRjbGFzc2VzJyA9PiAnY2F0ZWdvcnknLA0KCQknZXZlbnR3cmFwdGFnJyA9PiAnc3Bh bicsDQoJCSdzZWxlY3QnID0+ICcnLCAvLyBtb250aCBhbmQvb3IgeWVhciAodG8gZGlzcGxh eSBkcm9wZG93bnMpDQoJCSdzZWxlY3RidG4nID0+ICcnLCAvLyBlbXB0eSA9IGF1dG9zZWxl Y3QgKG9uY2hhbmdlKSwgb3IgdGV4dCB0byBnbyBvbiB0aGUgc3VibWl0IGJ1dHRvbg0KCQkn bXljbGFzcycgPT4gJycsIC8vIG1vbnRoLXllYXIgaGVhZGVyIGNsYXNzDQoJCSdteXdyYXB0 YWcnID0+ICcnLCAvLyBtb250aC15ZWFyIGhlYWRlciB3cmFwdGFnDQoJCSdpZCcgPT4gJycs IC8vIFRhYmxlIElEICg9Y2FsaWQpDQoJCSdkYXknID0+ICcnLCAvL1RPIFJFTU9WRT8/DQoJ CSdtb250aCcgPT4gJycsDQoJCSd5ZWFyJyA9PiAnJywNCgkJJ3llYXJ3aWR0aCcgPT4gJzAs MCcsIC8vIG51bWJlciBvZiB5ZWFycyBlaXRoZXIgc2lkZSBvZiB0aGUgZmlyc3QvbGFzdCBh cnRpY2xlIHRvIHBlcm1pdA0KCQknaXNvd2Vla3MnID0+ICcwJywgLy8gMT1zaG93IElTTyB3 ZWVrcywgMD1kb24ndA0KCQknZGF5Zm9ybWF0JyA9PiAnQUJCUicsIC8vIEFCQlIgPSAlYSwg RlVMTCA9ICVBLCBvciBjdXN0b20gc3RyZnRpbWUgc3RyaW5nDQoJCSdtb250aGZvcm1hdCcg PT4gJ0ZVTEwnLCAvLyBBQkJSID0gJWIsIEZVTEwgPSAlQiwgb3IgY3VzdG9tIHN0cmZ0aW1l IHN0cmluZw0KCQknZmlyc3RkYXknID0+IDAsIC8vIDFzdCBkYXkgb2Ygd2VlayAwPVN1bmRh eSwgNj1TYXR1cmRheSAoZm9yY2VkIHRvIE1vbmRheSBpZiBpc293ZWVrcz0xKQ0KCQknZ210 JyA9PiAwLA0KCQknbGFuZycgPT4gJycsDQoJCSdkZWJ1ZycgPT4gMCwNCgkpLCAkYXR0cykp Ow0KDQoJJGZ1dHVyZSA9ICggJHRpbWUgIT0gInBhc3QiICkgPyB0cnVlIDogZmFsc2U7IC8v IERldGVybWluZSBoZWFkaW5nIHN0eWxlDQoJJHN0YXR1cyA9ICgkc3RhdHVzKSA/ICRzdGF0 dXMgOiAnbGl2ZSc7DQoJJGZpcnN0ZGF5ID0gKCRpc293ZWVrcykgPyAxIDogJGZpcnN0ZGF5 Ow0KCSRzcGFuZm9ybSA9ICgkc3BhbmZvcm0gPT0gIlNNRF9TQU1FIikgPyAkZm9ybSA6ICRz cGFuZm9ybTsNCg0KCS8vIFNldCB1cCB0aGUgY2xhc3MgcHJlZml4ZXMNCgkkY2xldnMgPSBk b19saXN0KCRjbGFzc2xldmVscyk7DQoJJGNscyA9IGRvX2xpc3QoJGNsYXNzcHJlZml4ZXMp Ow0KCSRjbGFzc3ByZWZpeCA9ICRldmNsYXNzcHJlZml4ID0gJGNsc1swXTsNCglpZiAoY291 bnQoJGNscykgPiAxKXsNCgkJJGV2Y2xhc3NwcmVmaXggPSAkY2xzWzFdOw0KCX0NCg0KCS8v IEZpbHRlcnMNCgkkZm9wdHMgPSBhcnJheSgpOw0KCSRjYXRTUUwgPSAkc2VjU1FMID0gJGF1 dGhTUUwgPSAnJzsNCglpZigkY2F0ZWdvcnkpIHsNCgkJJGZvcHRzW10gPSBhcnJheSgnYycg PT4gJGNhdGVnb3J5KTsNCgkJJGNhdFNRTCA9IGRvUXVvdGUoam9pbigiJywnIiwgZG9fbGlz dCgkY2F0ZWdvcnkpKSk7DQoJCSRjYXRTUUwgPSAiIEFORCAoIENhdGVnb3J5MSBJTiAoIi4k Y2F0U1FMLiIpIE9SIENhdGVnb3J5MiBJTiAoIi4kY2F0U1FMLiIpICkgIjsNCgl9DQoJaWYo JHNlY3Rpb24pIHsNCgkJJGZvcHRzW10gPSBhcnJheSgncycgPT4gJHNlY3Rpb24pOw0KCQkk c2VjU1FMID0gZG9RdW90ZShqb2luKCInLCciLCBkb19saXN0KCRzZWN0aW9uKSkpOw0KCQkk c2VjU1FMID0gIiBBTkQgU2VjdGlvbiBJTiAoIi4kc2VjU1FMLiIpICI7DQoJfQ0KCWlmKCRh dXRob3IpIHsNCgkJJGZvcHRzW10gPSBhcnJheSgnYXV0aG9yJyA9PiBodG1sZW50aXRpZXMo Z3BzKCdhdXRob3InKSkpOw0KCQkkYXV0aFNRTCA9IGRvUXVvdGUoam9pbigiJywnIiwgZG9f bGlzdCgkYXV0aG9yKSkpOw0KCQkkYXV0aFNRTCA9ICIgQU5EIEF1dGhvcklEIElOICgiLiRh dXRoU1FMLiIpICI7DQoJfQ0KCSRzdGF0dXMgPSBkb19saXN0KCRzdGF0dXMpOw0KCSRzdGF0 aSA9IGFycmF5KCk7DQoJZm9yZWFjaCAoJHN0YXR1cyBhcyAkc3RhdCkgew0KCQlpZiAoZW1w dHkoJHN0YXQpKSB7DQoJCQljb250aW51ZTsNCgkJfSBlbHNlIGlmIChpc19udW1lcmljKCRz dGF0KSkgew0KCQkJJHN0YXRpW10gPSAkc3RhdDsNCgkJfSBlbHNlIHsNCgkJCSRzdGF0aVtd ID0gZ2V0U3RhdHVzTnVtKCRzdGF0KTsNCgkJfQ0KCX0NCgkkc3RhdGkgPSAiIFN0YXR1cyBJ TiAoIi5kb1F1b3RlKGpvaW4oIicsJyIsICRzdGF0aSkpLiIpIjsNCg0KCSRleHBpcmVkID0g KCRleHBpcmVkKSA/ICRleHBpcmVkIDogJHByZWZzWydwdWJsaXNoX2V4cGlyZWRfYXJ0aWNs ZXMnXTsNCgkkZXhwaXJlZCA9ICgoJGV4cGlyZWQpID8gJycgOiAnIEFORCAobm93KCkgPD0g RXhwaXJlcyBPUiBFeHBpcmVzID0gJy5OVUxMREFURVRJTUUuJyknKTsNCgkkZXZlbnRjbGFz c2VzID0gZG9fbGlzdCgkZXZlbnRjbGFzc2VzKTsNCgkkaG9saWRheWZsYWdzID0gZG9fbGlz dCgkaG9saWRheWZsYWdzKTsNCg0KCS8vIFdvcmsgb3V0IHRoZSBmaXJzdCBhbmQgbGFzdCBw b3N0cyB0byBkZXRlcm1pbmUgdGhlIHllYXIgcmFuZ2UNCgkkZWFybGllc3QgPSBzYWZlX3Jv dygndW5peF90aW1lc3RhbXAoUG9zdGVkKSBBUyB1UG9zdGVkJywgJ3RleHRwYXR0ZXJuJywg JHN0YXRpLigoJGNhdGVnb3J5KSA/ICRjYXRTUUwgOiAnJykuKCgkc2VjdGlvbikgPyAkc2Vj U1FMIDogJycpLigoJGF1dGhvcikgPyAkYXV0aFNRTCA6ICcnKS4nIE9SREVSIEJZIFBvc3Rl ZCBBU0MgTElNSVQgMCwgMScsICRkZWJ1Zyk7DQoJJGxhdGVzdCA9IHNhZmVfcm93KCd1bml4 X3RpbWVzdGFtcChMYXN0TW9kKSBBUyB1TGFzdE1vZCcsICd0ZXh0cGF0dGVybicsICRzdGF0 aS4oKCRjYXRlZ29yeSkgPyAkY2F0U1FMIDogJycpLigoJHNlY3Rpb24pID8gJHNlY1NRTCA6 ICcnKS4oKCRhdXRob3IpID8gJGF1dGhTUUwgOiAnJykuJyBBTkQgUG9zdGVkIDwgbm93KCkg T1JERVIgQlkgTGFzdE1vZCBERVNDIExJTUlUIDAsIDEnLCAkZGVidWcpOw0KCSR5ZWFyd2lk dGggPSBkb19saXN0KCR5ZWFyd2lkdGgpOw0KCWlmIChjb3VudCgkeWVhcndpZHRoKSA9PSAx KSAkeWVhcndpZHRoWzFdID0gJHllYXJ3aWR0aFswXTsNCgkkZWFybGllc3QgPSBkYXRlKCJZ Iiwgc3RydG90aW1lKCItIi4keWVhcndpZHRoWzBdLiIgeWVhciIsICggKGVtcHR5KCRlYXJs aWVzdCkpID8gdGltZSgpIDogJGVhcmxpZXN0Wyd1UG9zdGVkJ10pICkgKTsNCgkkbGF0ZXN0 ID0gZGF0ZSgiWSIsIHN0cnRvdGltZSgiKyIuJHllYXJ3aWR0aFsxXS4iIHllYXIiLCAoIChl bXB0eSgkbGF0ZXN0KSkgPyB0aW1lKCkgOiAkbGF0ZXN0Wyd1TGFzdE1vZCddKSApICk7DQoN CgkvLyBDaGVjayB0aGUgVVJMIGZvciBjdXJyZW50IGRhdGUgYW5kIGNhbGVuZGFyIHRhcmdl dCBpbmZvDQoJJGluY29taW5nX2NhbGlkID0gZ3BzKCdjYWxpZCcpOw0KCSRpbmNvbWluZ195 ZWFyID0gKGdwcygneScpIGFuZCBpc19udW1lcmljKGdwcygneScpKSkgPyAoaW50KWdwcygn eScpIDogJyc7DQoJJGluY29taW5nX21vbnRoID0gKGdwcygnbScpIGFuZCBpc19udW1lcmlj KGdwcygnbScpKSkgPyAoaW50KWdwcygnbScpIDogJyc7DQoJJGluY29taW5nX2RheSA9IChn cHMoJ2QnKSBhbmQgaXNfbnVtZXJpYyhncHMoJ2QnKSkpID8gKGludClncHMoJ2QnKSA6ICcn Ow0KDQoJaWYoJHN0YXRpYykgeyAvLyBpZiB3ZSdyZSBzdGF0aWMgdy9vIGFueSBzdXBwbGll ZCB2YXJzLCB1c2UgdGhlIGN1cnJlbnQgZGF0ZQ0KCQlpZighJHllYXIpIHsgJHllYXIgPSBz YWZlX3N0cmZ0aW1lKCclWScpOyB9DQoJCWlmKCEkbW9udGgpIHsgJG1vbnRoID0gc2FmZV9z dHJmdGltZSgnJW0nKTsgfQ0KCQlpZighJGRheSkgeyAkZGF5ID0gc2FmZV9zdHJmdGltZSgn JWQnKTsgfQ0KCX0gZWxzZSB7IC8vIG90aGVyd2lzZSB1c2UgY3VycmVudCBkYXRlIG9ubHkg aWYgdGhlcmUncyBub3RoaW5nIGVsc2UNCgkJaWYoICRpZCA9PSAkaW5jb21pbmdfY2FsaWQg KSB7IC8vIHVzZSBpbmNvbWluZw0KCQkJaWYoISR5ZWFyKSB7ICR5ZWFyID0gKCRpbmNvbWlu Z195ZWFyKSA/ICRpbmNvbWluZ195ZWFyIDogc2FmZV9zdHJmdGltZSgnJVknKTsgfQ0KCQkJ aWYoISRtb250aCkgeyAkbW9udGggPSAoJGluY29taW5nX21vbnRoKSA/ICRpbmNvbWluZ19t b250aCA6IHNhZmVfc3RyZnRpbWUoJyVtJyk7IH0NCgkJCWlmKCEkZGF5KSB7ICRkYXkgPSAo JGluY29taW5nX2RheSkgPyAkaW5jb21pbmdfZGF5IDogc2FmZV9zdHJmdGltZSgnJWQnKTsg fQ0KCQl9IGVsc2UgeyAvLyB1c2UgY3VycmVudA0KCQkJaWYoISR5ZWFyKSB7ICR5ZWFyID0g c2FmZV9zdHJmdGltZSgnJVknKTsgfQ0KCQkJaWYoISRtb250aCkgeyAkbW9udGggPSBzYWZl X3N0cmZ0aW1lKCclbScpOyB9DQoJCQlpZighJGRheSkgeyAkZGF5ID0gc2FmZV9zdHJmdGlt ZSgnJWQnKTsgfQ0KCQl9DQoJfQ0KCSRzbWRfY2FsX2lkID0gKCRpbmNvbWluZ19jYWxpZCkg PyAkaW5jb21pbmdfY2FsaWQgOiAkaWQ7DQoJJHNtZF95ZWFyID0gJHllYXI7ICRzbWRfbW9u dGggPSAkbW9udGg7IC8vICRzbWRfZGF5IHNldCBwZXIgZXZlbnQgbGF0ZXINCg0KCS8vIFRo ZSB0aW1lcyBpbiB0aGUgREIgYXJlIHN0b3JlZCB1c2luZyB0aGUgc2VydmVyJ3MgbG9jYWwg dGltZSwgc28gd2UgZG9uJ3QNCgkvLyB3YW50IHRvIGFkanVzdCBhbnl0aGluZyAoc2luY2Ug bWt0aW1lIHVzZXMgdGhlIHNlcnZlcidzIGxvY2FsIHRpbWUpLg0KCS8vVE9ETzogV29ycnkg YWJvdXQgZ210IC8gZHN0DQoJJHRzX2ZpcnN0ID0gbWt0aW1lKDAsIDAsIDAsICRtb250aCwg MSwgJHllYXIpOw0KCSR0c19sYXN0ID0gbWt0aW1lKDIzLCA1OSwgNTksICRtb250aCwgZGF0 ZSgndCcsJHRzX2ZpcnN0KSwgJHllYXIpOw0KDQoJJGV4dHJhc3FsID0gJGNhdFNRTCAuICRz ZWNTUUwgLiAkYXV0aFNRTDsNCglzd2l0Y2goJHRpbWUpIHsNCgkJY2FzZSAiYW55IiA6IC8q IERvbid0IGNhcmUgYWJvdXQgZGF0ZSAqLyBicmVhazsNCgkJY2FzZSAiZnV0dXJlIiA6ICRl eHRyYXNxbCAuPSAiIEFORCBQb3N0ZWQgPiBDVVJEQVRFKCkiOyBicmVhazsNCgkJZGVmYXVs dCA6ICRleHRyYXNxbCAuPSAiIEFORCBQb3N0ZWQgPCBDVVJEQVRFKCkiOyBicmVhazsgLy8g VGhlIHBhc3QNCgl9DQoNCgkvLyBIb2xpZGF5cyBhcmUgZ2xvYmFsICdleGNsdXNpb25zJywg ZWl0aGVyIGRlZmluZWQgZGlyZWN0bHkgb3IgaW4gYSA8dHhwOnZhcmlhYmxlIC8+DQoJJGhv bGlkYXlzID0gZG9fbGlzdCgkaG9saWRheXMpOw0KCSR0eHBob2xzID0gZG9fbGlzdCgkaG9s aWRheXNbMF0sICI6Iik7DQoJaWYgKCR0eHBob2xzWzBdID09ICJ0eHB2YXIiKSB7DQoJCSRo b2xpZGF5cyA9IGRvX2xpc3QoJHZhcmlhYmxlWyR0eHBob2xzWzFdXSk7DQoJfQ0KCS8vIEZv cmNlIGVhY2ggaG9saWRheSB0byBhIGtub3duIGZvcm1hdC4gSG9saWRheXMgd2l0aG91dCB5 ZWFycyB1c2UgY3VycmVudCB5ZWFyDQoJZm9yZWFjaCAoJGhvbGlkYXlzIGFzICRrZXkgPT4g JHZhbCkgew0KCQlpZiAoZW1wdHkoJHZhbCkpIGNvbnRpbnVlOw0KCQkkbnVtcGFydHMgPSBw cmVnX21hdGNoKCcvXihbXGRcd10rKS4/KFtcZFx3XSspLj8oW1xkXHddKyk/JC8nLCAkdmFs LCAkcGFydHMpOw0KDQoJCWlmICgkbnVtcGFydHMpIHsNCgkJCWlmIChjb3VudCgkcGFydHMp ID09IDMpIHsNCgkJCQkkcGFydHNbM10gPSAkeWVhcjsNCiAgICAgICAgIH0NCgkJCSR2YWwg PSBzdHJfcGFkKCRwYXJ0c1sxXSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLictJy5zdHJfcGFk KCRwYXJ0c1syXSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLictJy4kcGFydHNbM107DQoJCX0N CgkJJGhvbGlkYXlzWyRrZXldID0gZGF0ZSgiZC1tLVkiLCBzdHJ0b3RpbWUoJHZhbCkpOw0K CX0NCg0KCWlmICgkZGVidWcgPiAwICYmICFlbXB0eSgkaG9saWRheXMpICYmICRob2xpZGF5 c1swXSAhPSAnJykgew0KCQllY2hvICIrKyBIT0xJREFZUyArKyAiOw0KCQlkbXAoJGhvbGlk YXlzKTsNCgl9DQoNCgkvLyBHZXQgYWxsIG1hdGNoaW5nIGFydGljbGVzIGluIChhbmQgYmVm b3JlKSB0aGlzIG1vbnRoDQoJJGV2ZW50cyA9IGFycmF5KCk7DQoJJHNxbDIgPSAkc3RhdGkg LiAiIEhBVklORyB1UG9zdGVkIDw9ICIuJHRzX2xhc3QgLiAkZXhwaXJlZCAuICRleHRyYXNx bCAuIiBPUkRFUiBCWSBQb3N0ZWQgQVNDIjsNCgkkZ3JhYkNvbHMgPSAnKiwgdW5peF90aW1l c3RhbXAoUG9zdGVkKSBhcyB1UG9zdGVkLCB1bml4X3RpbWVzdGFtcChMYXN0TW9kKSBhcyB1 TGFzdE1vZCwgdW5peF90aW1lc3RhbXAoRXhwaXJlcykgYXMgdUV4cGlyZXMnOw0KCSRldmxp c3QgPSBzYWZlX3Jvd3MoJGdyYWJDb2xzLCAndGV4dHBhdHRlcm4nLCAkc3FsMiwgJGRlYnVn KTsNCg0KCS8vIElmIGFueSBldmVudHMgcmVjdXIgYW5kIGZhbGwgd2l0aGluIHRoZSBjdXJy ZW50IG1vbnRoLCBhZGQgdGhvc2UgYXMgd2VsbA0KCS8vIElmIGFueSBkYXRlcyBhcmUgdG8g YmUgZXhjbHVkZWQsIHRoZSBlbnRyeSBpcyBza2lwcGVkIFVOTEVTUyBzaG93c2tpcHBlZCBp bmRpY2F0ZXMgb3RoZXJ3aXNlDQoJZm9yZWFjaCAoJGV2bGlzdCBhcyAkcm93KSB7DQoJCSRp ZHggPSAwOyAvLyBJbiBjYXNlIHRoZSAxc3QgZGF5IG9mIHRoZSBtb250aCBpcyBhIGNvbnRp bnVhdGlvbiBvZiBhbiBldmVudCBmcm9tIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIG1vbnRo DQoJCSRzdGFydCA9ICRyb3dbJ3VQb3N0ZWQnXTsNCgkJJHJlYWxfZW5kID0gJHJvd1sndUV4 cGlyZXMnXTsNCgkJJGVuZCA9ICgkcmVhbF9lbmQgIT0gMCAmJiAkcmVhbF9lbmQgPCAkdHNf bGFzdCkgPyAkcmVhbF9lbmQgOiAkdHNfbGFzdDsNCgkJJHNtZF9jYWxfZmxhZyA9IGFycmF5 KCk7DQoNCgkJaWYgKCRkZWJ1ZyA+IDEpIHsNCgkJCWVjaG8gJysrIEVWRU5UIFNUQVJUIC8v IEVORCAvLyBSRUFMIEVORCArKyc7DQoJCQlkbXAoJHJvd1snVGl0bGUnXSk7DQoJCQlkbXAo ZGF0ZSgnZC1tLVkgSDppOnMnLCAkc3RhcnQpIC4nIC8vICcuIGRhdGUoJ2QtbS1ZIEg6aTpz JywgJGVuZCkgLicgLy8gJy4gZGF0ZSgnZC1tLVkgSDppOnMnLCAkcmVhbF9lbmQpKTsNCgkJ CWlmICgkZGVidWcgPiAyKSB7DQoJCQkJZG1wKCRyb3cpOw0KCQkJfQ0KCQl9DQoNCgkJJG11 bHRpID0gKCRyb3dbJ3VFeHBpcmVzJ10gPiAkcm93Wyd1UG9zdGVkJ10gJiYgJHJvd1sndUV4 cGlyZXMnXSA+ICR0c19maXJzdCkgPyB0cnVlIDogZmFsc2U7DQoJCSRyZWN1ciA9IChlbXB0 eSgkcm93WyRzdGVwZmllbGRdKSkgPyBmYWxzZSA6IHRydWU7DQoJCSRob2xfaGl0ID0gaW5f YXJyYXkoZGF0ZSgiZC1tLVkiLCAkc3RhcnQpLCAkaG9saWRheXMpOw0KCQkkZXZjbGFzc2Vz ID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAoJGV2ZW50Y2xhc3NlcyBhcyAkZXZjbHMpIHsNCgkJ CXN3aXRjaCAoJGV2Y2xzKSB7DQoJCQkJY2FzZSAiIjoNCgkJCQkJYnJlYWs7DQoJCQkJY2Fz ZSAiZ2NhdCI6DQoJCQkJCWlmIChpc3NldCgkcHJldGV4dFsnYyddKSAmJiAhZW1wdHkoJHBy ZXRleHRbJ2MnXSkpIHsNCgkJCQkJCSRldmNsYXNzZXNbXSA9ICRldmNsYXNzcHJlZml4LiRw cmV0ZXh0WydjJ107DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiY2F0ZWdvcnki Og0KCQkJCQlpZiAoaXNzZXQoJHJvd1snQ2F0ZWdvcnkxJ10pICYmICFlbXB0eSgkcm93WydD YXRlZ29yeTEnXSkpIHsNCgkJCQkJCSRldmNsYXNzZXNbXSA9ICRldmNsYXNzcHJlZml4LiRy b3dbJ0NhdGVnb3J5MSddOw0KCQkJCQl9DQoJCQkJCWlmIChpc3NldCgkcm93WydDYXRlZ29y eTInXSkgJiYgIWVtcHR5KCRyb3dbJ0NhdGVnb3J5MiddKSkgew0KCQkJCQkJJGV2Y2xhc3Nl c1tdID0gJGV2Y2xhc3NwcmVmaXguJHJvd1snQ2F0ZWdvcnkyJ107DQoJCQkJCX0NCgkJCQkJ YnJlYWs7DQoJCQkJY2FzZSAic2VjdGlvbiI6DQoJCQkJCWlmIChpc3NldCgkcHJldGV4dFsn cyddKSAmJiAhZW1wdHkoJHByZXRleHRbJ3MnXSkpIHsNCgkJCQkJCSRldmNsYXNzZXNbXSA9 ICRldmNsYXNzcHJlZml4LiRwcmV0ZXh0WydzJ107DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJ CQkJY2FzZSAiYXV0aG9yIjoNCgkJCQkJaWYgKGlzc2V0KCRwcmV0ZXh0WydhdXRob3InXSkg JiYgIWVtcHR5KCRwcmV0ZXh0WydhdXRob3InXSkpIHsNCgkJCQkJCSRldmNsYXNzZXNbXSA9 ICRldmNsYXNzcHJlZml4LiRwcmV0ZXh0WydhdXRob3InXTsNCgkJCQkJfQ0KCQkJCQlicmVh azsNCgkJCQlkZWZhdWx0Og0KCQkJCQlpZiAoaXNzZXQoJHJvd1skZXZjbHNdKSAmJiAhZW1w dHkoJHJvd1skZXZjbHNdKSkgew0KCQkJCQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y2xhc3NwcmVm aXguJHJvd1skZXZjbHNdOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCSRl dmNsYXNzZXMgPSAoJGV2Y2xhc3NlcykgPyAnICcuIGpvaW4oJyAnLCAkZXZjbGFzc2VzKSA6 ICcnOw0KCQkkaWdub3JlID0gYXJyYXkoKTsNCg0KCQlpZiAoJGRlYnVnID4gMSAmJiAkZXZj bGFzc2VzKSB7DQoJCQllY2hvICcrKyBFVkVOVCBDTEFTU0VTICsrJzsNCgkJCWRtcCgkZXZj bGFzc2VzKTsNCgkJfQ0KDQoJCS8vIEV2ZW50cyB0aGF0IHN0YXJ0IHRoaXMgbW9udGgNCgkJ aWYgKCRzdGFydCA8ICRlbmQgJiYgJHN0YXJ0ID4gJHRzX2ZpcnN0KSB7DQoJCQlwb3B1bGF0 ZUFydGljbGVEYXRhKCRyb3cpOw0KCQkJLy8gc3RhcnQgb2YgYSBtdWx0aSB0aGF0IG1heSBv ciBtYXkgbm90IGJlIGNhbmNlbGxlZCBkdWUgdG8gaG9saWRheXMNCgkJCSRmbGFnID0gKCRz aG93c3Bhbm5lZCAmJiAkbXVsdGkgJiYgISRyZWN1cikgPyAnbXVsdGlmaXJzdCcgLiAoKCAk aG9sX2hpdCAmJiAhaW5fYXJyYXkoJ211bHRpJywkaG9saWRheWZsYWdzKSApID8gJyBjYW5j ZWwgaG9scycgOiAnJyApIDogJyc7DQoJCQkvLyBhIHN0YW5kYXJkIGV2ZW50IHRoYXQgbWF5 IG9yIG1heSBub3QgYmUgY2FuY2VsbGVkIGR1ZSB0byBob2xpZGF5cw0KCQkJJGZsYWcgPSAo JGZsYWcpID8gJGZsYWcgOiAoKCAkaG9sX2hpdCAmJiAhaW5fYXJyYXkoJ2V2ZW50JywkaG9s aWRheWZsYWdzKSApID8gJ2V2ZW50IGNhbmNlbCBob2xzJyA6ICdldmVudCcgKTsNCgkJCSRz bWRfY2FsX2ZsYWcgPSAkZmxhZyA9IGV4cGxvZGUoJyAnLCAkZmxhZyk7DQoJCQlmb3JlYWNo ICgkZmxhZyBhcyAkaWR4ID0+ICRpdGVtKSB7DQoJCQkJJGZsYWdbJGlkeF0gPSAkY2xhc3Nw cmVmaXguJGl0ZW07DQoJCQl9DQoJCQkkZmxhZyA9IGpvaW4gKCcgJywgJGZsYWcpOw0KDQoJ CQkkaWR4ID0gKGludClzYWZlX3N0cmZ0aW1lKCclZCcsICRzdGFydCwgJGdtdCwgJGxhbmcp Ow0KCQkJJHNtZF9kYXkgPSAkaWR4Ow0KCQkJJG9wID0gKCR0aGluZykgPyBwYXJzZSgkdGhp bmcpIDogKCgkZm9ybSkgPyBwYXJzZV9mb3JtKCRmb3JtKSA6ICgoJHNpemU9PSJzbWFsbCIp ID8gJycgOiBocmVmKCRyb3dbJ1RpdGxlJ10sIHBlcm1saW5rdXJsKCRyb3cpLCAnIHRpdGxl PSInLiRyb3dbJ1RpdGxlJ10uJyInKSkgKTsNCgkJCSRldmVudHNbJGlkeF1bXSA9IGFycmF5 KCdldicgPT4gJG9wLCAndHlwZScgPT4gKCgkZmxhZykgPyAkZmxhZyA6ICcnKS4kZXZjbGFz c2VzKTsNCgkJCSRzbWRfY2FsX2ZsYWcgPSBhcnJheSgpOw0KCQl9DQoNCgkJLy8gR2VuZXJh dGUgYSBza2lwIGFycmF5IGZvciB0aGlzIGV2ZW50DQoJCWlmICgkc2tpcGZpZWxkICYmICRy b3dbJHNraXBmaWVsZF0gIT0gJycpIHsNCgkJCSRpZ25vcmUgPSBkb19saXN0KCRyb3dbJHNr aXBmaWVsZF0pOw0KCQkJZm9yZWFjaCAoJGlnbm9yZSBhcyAka2V5ID0+ICR2YWwpIHsNCgkJ CQkkaWdub3JlWyRrZXldID0gZGF0ZSgiZC1tLVkiLCBzdHJ0b3RpbWUoJHZhbCkpOyAvLyBG b3JjZSBlYWNoIGRhdGUgdG8gYSBrbm93biBmb3JtYXQNCgkJCX0NCgkJfQ0KCQkvLyBDYWxj dWxhdGUgdGhlIGRhdGUgb2Zmc2V0cyBhbmQgY2hlY2sgcmVjdXJyaW5nIGV2ZW50cyB0aGF0 IGZhbGwgd2l0aGluIHRoZSBtb250aCBvZiBpbnRlcmVzdA0KCQlpZiAoJHN0ZXBmaWVsZCAm JiAkcm93WyRzdGVwZmllbGRdICE9ICcnKSB7DQoJCQkkZnJlcSA9IGRvX2xpc3QoJHJvd1sk c3RlcGZpZWxkXSk7DQoJCQlmb3JlYWNoICgkZnJlcSBhcyAkaW50ZXJ2YWwpIHsNCgkJCQkk dHNfY3VyciA9ICRzdGFydDsNCgkJCQl3aGlsZSAoJHRzX2N1cnIgPCAkZW5kKSB7DQoJCQkJ CWlmICgoJHRzX2N1cnIgPSBzdHJ0b3RpbWUoJGludGVydmFsLCAkdHNfY3VycikpID09PSBm YWxzZSkgew0KCQkJCQkJYnJlYWs7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQlpZiAoJHRzX2N1 cnIgPCAkZW5kICYmICR0c19jdXJyID4gJHRzX2ZpcnN0KSB7DQoJCQkJCQkJLy8gQSByZWN1 cnJpbmcgZXZlbnQuIENoZWNrIGl0IGlzbid0IGEgaG9saWRheSBvciB0byBiZSBpZ25vcmVk DQoJCQkJCQkJcG9wdWxhdGVBcnRpY2xlRGF0YSgkcm93KTsNCgkJCQkJCQkkb3AgPSAnJzsN CgkJCQkJCQkkaWR4ID0gKGludClzYWZlX3N0cmZ0aW1lKCclZCcsICR0c19jdXJyLCAkZ210 LCAkbGFuZyk7DQoJCQkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ3JlY3VyJzsNCgkJCQkJCQkk c2hvd19tZSA9ICFpbl9hcnJheShkYXRlKCJkLW0tWSIsICR0c19jdXJyKSwgJGlnbm9yZSk7 DQoJCQkJCQkJJGhvbF9oaXQgPSBpbl9hcnJheShkYXRlKCJkLW0tWSIsICR0c19jdXJyKSwg JGhvbGlkYXlzKTsNCgkJCQkJCQkkc2hvd19ob2wgPSAoJGhvbF9oaXQgJiYgIWluX2FycmF5 KCdyZWN1cicsJGhvbGlkYXlmbGFncykgKSA/IGZhbHNlIDogdHJ1ZTsNCgkJCQkJCQlpZiAo ICEkc2hvd19tZSB8fCAhJHNob3dfaG9sICkgew0KCQkJCQkJCQkkc21kX2NhbF9mbGFnW10g PSAnY2FuY2VsJzsNCgkJCQkJCQl9DQoJCQkJCQkJaWYgKCRob2xfaGl0KSB7DQoJCQkJCQkJ CSRzbWRfY2FsX2ZsYWdbXSA9ICdob2xzJzsNCgkJCQkJCQl9DQoJCQkJCQkJLy8gQ3JlYXRl IHRoZSBldmVudHMgdGhhdCBhcHBlYXIgaW4gdGhlIGNlbGwgYnV0IG9ubHkgaWYgdGhleSd2 ZSBub3QgYXBwZWFyZWQgYmVmb3JlLCBvciBhcmUgdG8gYmUgaWdub3JlZA0KCQkJCQkJCWlm ICgoJHNob3dfbWUgJiYgJHNob3dfaG9sKSB8fCAkc2hvd3NraXBwZWQpIHsNCgkJCQkJCQkJ JHNtZF9kYXkgPSAkaWR4Ow0KCQkJCQkJCQkkb3AgPSAoJHRoaW5nKSA/IHBhcnNlKCR0aGlu ZykgOiAoKCRmb3JtKSA/IHBhcnNlX2Zvcm0oJGZvcm0pIDogKCgkc2l6ZT09InNtYWxsIikg PyAnJyA6IGhyZWYoJHJvd1snVGl0bGUnXSwgcGVybWxpbmt1cmwoJHJvdyksICcgdGl0bGU9 IicuJHJvd1snVGl0bGUnXS4nIicpKSApOw0KCQkJCQkJCX0NCgkJCQkJCQkkdXNlZCA9IGFy cmF5KCk7DQoJCQkJCQkJaWYgKGlzc2V0KCRldmVudHNbJGlkeF0pICYmICRldmVudHNbJGlk eF0gIT0gTlVMTCkgew0KCQkJCQkJCQlmb3JlYWNoICgkZXZlbnRzWyRpZHhdIGFzICRldikg ew0KCQkJCQkJCQkJJHVzZWRbXSA9ICRldlsnZXYnXTsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0N CgkJCQkJCQlpZiAoaXNzZXQoJGV2ZW50c1skaWR4XSkgJiYgJGV2ZW50c1skaWR4XSA9PSBO VUxMIHx8ICFpbl9hcnJheSgkb3AsICR1c2VkKSkgew0KCQkJCQkJCQkkZXZlbnRzWyRpZHhd W10gPSBhcnJheSgnZXYnID0+ICRvcCwgJ3R5cGUnID0+ICRjbGFzc3ByZWZpeC4ncmVjdXIn LiAoKCRzaG93X21lICYmICRzaG93X2hvbCkgPyAnJyA6ICcgJy4kY2xhc3NwcmVmaXguJ2Nh bmNlbCcpLiRldmNsYXNzZXMpOw0KCQkJCQkJCX0NCgkJCQkJCQkkc21kX2NhbF9mbGFnID0g YXJyYXkoKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSBlbHNlIGlmICgk c2hvd3NwYW5uZWQgJiYgJG11bHRpKSB7DQoJCQkvLyBOb24tcmVjdXJyaW5nIGV2ZW50cyBt YXkgc3BhbiBtb3JlIHRoYW4gb25lIGRhdGUgYnV0IHRoZXkgbXVzdCBzdGlsbCByZXNwZWN0 IGlnbm9yZWQgZGF0ZXMgYW5kIGhvbGlkYXlzDQoJCQlwb3B1bGF0ZUFydGljbGVEYXRhKCRy b3cpOw0KCQkJJGxhc3RkYXkgPSAoaW50KXNhZmVfc3RyZnRpbWUoJyVkJywgJGVuZCwgJGdt dCwgJGxhbmcpOw0KCQkJJHJlYWxfbGFzdGRheSA9IChpbnQpc2FmZV9zdHJmdGltZSgnJWQn LCAkcmVhbF9lbmQsICRnbXQsICRsYW5nKTsNCgkJCXdoaWxlICgrKyRpZHggPD0gJGxhc3Rk YXkpIHsNCgkJCQkkb3AgPSAnJzsNCgkJCQkkbXVsdGlmbGFnID0gKCRpZHg9PSRyZWFsX2xh c3RkYXkpID8gJ211bHRpbGFzdCcgOiAoKCRpZHg9PTEpID8gJ211bHRpcHJldicgOiAnbXVs dGknKTsNCgkJCQkkc21kX2NhbF9mbGFnW10gPSAkbXVsdGlmbGFnOw0KCQkJCSR0aGlzZGF0 ZSA9IG1rdGltZSgwLCAwLCAwLCAkbW9udGgsICRpZHgsICR5ZWFyKTsNCgkJCQkkc2hvd19t ZSA9ICFpbl9hcnJheShkYXRlKCJkLW0tWSIsICR0aGlzZGF0ZSksICRpZ25vcmUpOw0KCQkJ CSRob2xfaGl0ID0gaW5fYXJyYXkoZGF0ZSgiZC1tLVkiLCAkdGhpc2RhdGUpLCAkaG9saWRh eXMpOw0KCQkJCSRzaG93X2hvbCA9ICgkaG9sX2hpdCAmJiAhaW5fYXJyYXkoJ211bHRpJywk aG9saWRheWZsYWdzKSApID8gZmFsc2UgOiB0cnVlOw0KCQkJCWlmICggISRzaG93X21lIHx8 ICEkc2hvd19ob2wgKSB7DQoJCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdjYW5jZWwnOw0KCQkJ CX0NCgkJCQlpZiAoJGhvbF9oaXQpIHsNCgkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ2hvbHMn Ow0KCQkJCX0NCgkJCQlpZiAoICgkc2hvd19tZSAmJiAkc2hvd19ob2wpIHx8ICRzaG93c2tp cHBlZCkgew0KCQkJCQkkc21kX2RheSA9ICRpZHg7DQoJCQkJCSRvcCA9ICgkc3BhbmZvcm0p ID8gcGFyc2VfZm9ybSgkc3BhbmZvcm0pIDogKCgkdGhpbmcpID8gcGFyc2UoJHRoaW5nKSA6 ICgoJHNpemU9PSJzbWFsbCIpID8gJycgOiBocmVmKCcmcmFycjsnLCBwZXJtbGlua3VybCgk cm93KSwgJyB0aXRsZT0iJy4kcm93WydUaXRsZSddLiciJykpICk7DQoJCQkJfQ0KCQkJCSRl dmVudHNbJGlkeF1bXSA9IGFycmF5KCdldicgPT4gJG9wLCAndHlwZScgPT4gJGNsYXNzcHJl Zml4LiRtdWx0aWZsYWcuICgoJHNob3dfbWUgJiYgJHNob3dfaG9sKSA/ICcnIDogJyAnLiRj bGFzc3ByZWZpeC4nY2FuY2VsJykuJGV2Y2xhc3Nlcyk7DQoJCQkJJHNtZF9jYWxfZmxhZyA9 IGFycmF5KCk7DQoJCQl9DQoJCX0NCgl9DQoNCgkvLyBHZW5lcmF0ZSB0aGUgY2FsZW5kYXIN CglpZiggJHNpemUgPT0gInNtYWxsIiApIHsNCgkJJGNhbGVuZGFyID0gbmV3IFNNRF9TbWFs bF9DYWxlbmRhcigkeWVhciwgJG1vbnRoLCAkZGF5LCAkZXZlbnRzLCAkc2VjdGlvbiwgJGNh dGVnb3J5KTsNCgl9IGVsc2Ugew0KCQkkY2FsZW5kYXIgPSBuZXcgU01EX0NhbGVuZGFyKCR5 ZWFyLCAkbW9udGgsICRkYXksICRldmVudHMpOw0KCX0NCgkkY2FsZW5kYXItPnNldEdNVCgk Z210KTsNCgkkY2FsZW5kYXItPnNldExhbmcoJGxhbmcpOw0KCSRjYWxlbmRhci0+c2V0Q2xh c3NMZXZlbHMoJGNsZXZzKTsNCgkkY2FsZW5kYXItPnNldENsYXNzUHJlZml4KCRjbGFzc3By ZWZpeCk7DQoJJGNhbGVuZGFyLT5zZXRFdmVudFByZWZpeCgkZXZjbGFzc3ByZWZpeCk7DQoJ JGNhbGVuZGFyLT5zZXRFdmVudFdyYXB0YWcoJGV2ZW50d3JhcHRhZyk7DQoJJGNhbGVuZGFy LT5zZXRNWVdyYXB0YWcoJG15d3JhcHRhZyk7DQoJJGNhbGVuZGFyLT5zZXRUYWJsZUlEKCRp ZCk7DQoJJGNhbGVuZGFyLT5zZXRUYWJsZUNsYXNzKCRjbGFzcyk7DQoJJGNhbGVuZGFyLT5z ZXRSb3dDbGFzcygkcm93Y2xhc3MpOw0KCSRjYWxlbmRhci0+c2V0Q2VsbENsYXNzKCRjZWxs Y2xhc3MpOw0KCSRjYWxlbmRhci0+c2V0RW1wdHlDbGFzcygkZW1wdHljbGFzcyk7DQoJJGNh bGVuZGFyLT5zZXRJU09XZWVrQ2xhc3MoJGlzb3dlZWtjbGFzcyk7DQoJJGNhbGVuZGFyLT5z ZXROYXZDbGFzcygkbmF2Y2xhc3MpOw0KCSRjYWxlbmRhci0+c2V0TVlDbGFzcygkbXljbGFz cyk7DQoJJGNhbGVuZGFyLT5zZXROYW1lRm9ybWF0KCRkYXlmb3JtYXQsICJkIik7DQoJJGNh bGVuZGFyLT5zZXROYW1lRm9ybWF0KCRtb250aGZvcm1hdCwgIm0iKTsNCgkkY2FsZW5kYXIt PnNldFNob3dJU09XZWVrKCRpc293ZWVrcyk7DQoJJGNhbGVuZGFyLT5zZXRFWWVhcigkZWFy bGllc3QpOw0KCSRjYWxlbmRhci0+c2V0TFllYXIoJGxhdGVzdCk7DQoJJGNhbGVuZGFyLT5z ZXRGaWx0ZXJPcHRzKCRmb3B0cyk7DQoJJGNhbGVuZGFyLT5zZXRIb2xpZGF5cygkaG9saWRh eXMpOw0KCSRjYWxlbmRhci0+c2V0U2VsZWN0b3JzKGRvX2xpc3QoJHNlbGVjdCksICRzZWxl Y3RidG4pOw0KCSRjYWxlbmRhci0+c2V0Rmlyc3REYXlPZldlZWsoJGZpcnN0ZGF5KTsNCg0K CXJldHVybiAkY2FsZW5kYXItPmRpc3BsYXkoJHN0YXRpYywgJGZ1dHVyZSk7DQp9DQoNCmNs YXNzIFNNRF9DYWxlbmRhciBleHRlbmRzIFNNRF9SYXdfQ2FsZW5kYXIgew0KCS8vIE92ZXJy aWRlIENvbnN0cnVjdG9yDQoJLy8gUGVybWl0cyBldmVudHMgdG8gc2hvdyBwZXIgZGF5L3dl ZWsNCglmdW5jdGlvbiBTTURfQ2FsZW5kYXIoJHllYXIsJG1vbnRoLCRkYXksJGV2ZW50cykg ew0KCQkkdGhpcy0+ZXZlbnRzID0gJGV2ZW50czsNCgkJJHRoaXMtPlNNRF9SYXdfQ2FsZW5k YXIoJHllYXIsJG1vbnRoLCRkYXkpOw0KCX0NCg0KCS8vIE92ZXJyaWRlIGRzcERheUNlbGwg dG8gZGlzcGxheSBzdHVmZiByaWdodA0KCWZ1bmN0aW9uIGRzcERheUNlbGwoJHRoZWRheSkg ew0KCQkkY2VsbGNsYXNzID0gJHRoaXMtPmdldENlbGxDbGFzcygpOw0KCQkkaGFzYXJ0aWNs ZSA9IGlzc2V0KCR0aGlzLT5ldmVudHNbJHRoZWRheV0pOw0KCQkkdGRjbGFzcyA9ICRjZWxs Y2xhc3MgLiAoKCRoYXNhcnRpY2xlKSA/ICcgJy4kdGhpcy0+Y2xhc3NwcmVmaXguJ2V2ZW50 JyA6ICcnKQ0KCQkJCS4gKChpbl9hcnJheSggZGF0ZSgnZC1tLVknLCBta3RpbWUoIDAsIDAs IDAsICR0aGlzLT5nZXRNb250aCgpLCAkdGhlZGF5LCAkdGhpcy0+Z2V0WWVhcigpKSApLCAk dGhpcy0+aG9saWRheXMpKSA/ICcgJy4kdGhpcy0+Y2xhc3NwcmVmaXguJ2hvbHMnIDogJycp Ow0KCQkkcnVubmluZ2NsYXNzID0gKGluX2FycmF5KCJjZWxsIiwgJHRoaXMtPmNsYXNzbGV2 ZWxzKSB8fCBpbl9hcnJheSgiY2VsbHBsdXMiLCAkdGhpcy0+Y2xhc3NsZXZlbHMpKSA/IGV4 cGxvZGUoJyAnLCAkdGRjbGFzcykgOiBhcnJheSgpOw0KCQlpZigkdGhpcy0+eWVhciA9PSBk YXRlKCdZJyx0aW1lKCkrdHpfb2Zmc2V0KCkgKSBhbmQgJHRoaXMtPm1vbnRoID09IGRhdGUo J24nLHRpbWUoKSt0el9vZmZzZXQoKSApIGFuZCAkdGhlZGF5ID09IGRhdGUoJ2onLHRpbWUo KSt0el9vZmZzZXQoKSkgKSB7DQoJCQkkcnVubmluZ2NsYXNzW10gPSAkdGhpcy0+Y2xhc3Nw cmVmaXguJ3RvZGF5JzsNCgkJfQ0KDQoJCSRvdXRbXSA9IGhlZCgkdGhlZGF5LDQpOw0KCQlp ZiggaXNzZXQoJHRoaXMtPmV2ZW50c1skdGhlZGF5XSkgKSB7DQoJCQkkZGF5c19ldmVudHMg PSAkdGhpcy0+ZXZlbnRzWyR0aGVkYXldOw0KCQkJZm9yZWFjaCgkZGF5c19ldmVudHMgYXMg JGV2KSB7DQoJCQkJJGV2Y2xhc3MgPSB0cmltKCRldlsndHlwZSddKTsNCgkJCQlpZiAoaW5f YXJyYXkoImNlbGxwbHVzIiwgJHRoaXMtPmNsYXNzbGV2ZWxzKSkgew0KCQkJCQlmb3JlYWNo IChleHBsb2RlKCcgJywgJGV2Y2xhc3MpIGFzICRldmMpIHsNCgkJCQkJCSRydW5uaW5nY2xh c3NbXT0gJGV2YzsNCgkJCQkJfQ0KCQkJCX0NCg0KDQoJCQkJJG91dFtdID0gKCR0aGlzLT5l dndyYXB0YWcpID8gdGFnKCRldlsnZXYnXSwgJHRoaXMtPmV2d3JhcHRhZywgKCgkZXZjbGFz cyAmJiBpbl9hcnJheSgiZXZlbnQiLCAkdGhpcy0+Y2xhc3NsZXZlbHMpKSA/ICcgY2xhc3M9 IicuJGV2Y2xhc3MuJyInIDogJycpKSA6ICRldlsnZXYnXTsNCgkJCX0NCgkJfQ0KCQkkcnVu bmluZ2NsYXNzID0gYXJyYXlfdW5pcXVlKCRydW5uaW5nY2xhc3MpOw0KDQoJCS8vIEFtYWxn YW1hdGUgdGhlIGV2ZW50LWxldmVsIGNsYXNzZXMgYW5kIGNlbGwtbGV2ZWwgY2xhc3Nlcywg aWYgcmVxdWlyZWQNCgkJcmV0dXJuIGRvVGFnKGpvaW4oJycsJG91dCksJ3RkJyxqb2luKCcg JywkcnVubmluZ2NsYXNzKSk7DQoJfQ0KDQoJZnVuY3Rpb24gZGlzcGxheSgkc3RhdGljPWZh bHNlLCAkZnV0dXJlPWZhbHNlKSB7DQoJCSRpZCA9ICgkdGhpcy0+dGFibGVJRCkgPyAnIGlk PSInLiR0aGlzLT50YWJsZUlELiciJyA6ICcnOw0KCQkkY1tdID0gJHRoaXMtPmRzcEhlYWRl cigkc3RhdGljLCAkZnV0dXJlKTsNCgkJJGNbXSA9ICR0aGlzLT5kc3BEYXlOYW1lcygpOw0K CQkkY1tdID0gJHRoaXMtPmRzcERheUNlbGxzKCk7DQoNCgkJcmV0dXJuIGRvVGFnKGpvaW4o JycsJGMpLCd0YWJsZScsJHRoaXMtPnRhYmxlY2xhc3MsJGlkKTsNCgl9DQoNCglmdW5jdGlv biBkc3BIZWFkZXIoJHN0YXRpYywgJGZ1dHVyZSkgew0KCQkkY3VycnlyID0gJHRoaXMtPmdl dFllYXIoKTsNCgkJJGN1cnJtbyA9ICR0aGlzLT5nZXRNb250aCgpOw0KCQkkbmF2Y2xhc3Mg PSAkdGhpcy0+Z2V0TmF2Q2xhc3MoKTsNCgkJJG5hdmNsYXNzID0gKCRuYXZjbGFzcykgPyAn IGNsYXNzPSInLiRuYXZjbGFzcy4nIicgOiAnJzsNCgkJJGZpbHRlcnMgPSBhcnJheSgpOw0K CQkkZmlsdGVySGlkID0gYXJyYXkoKTsNCgkJaWYgKCEkc3RhdGljKSB7DQoJCQlmb3JlYWNo KCR0aGlzLT5mb3B0cyBhcyAkZmlsdGVyKSB7DQoJCQkJZm9yZWFjaCgkZmlsdGVyIGFzICRr ZXkgPT4gJHZhbCkgew0KCQkJCQkkZmlsdGVyc1tdID0gJGtleS4nPScuJHZhbDsNCgkJCQkJ JGZpbHRlckhpZFtdID0gaElucHV0KCRrZXksICR2YWwpOw0KCQkJCX0NCgkJCX0NCgkJfQ0K CQkkZmlsdGVyVVJMID0gam9pbihhLCAkZmlsdGVycyk7DQoNCgkJLy8gTW9udGggc2VsZWN0 IGxpc3QNCgkJaWYgKCR0aGlzLT51c2VTZWxlY3RvcignbW9udGgnKSAmJiAhJHN0YXRpYykg ew0KCQkJZm9yICggJGlkeCA9IDE7ICRpZHggPD0gMTI7ICRpZHgrKyApIHsNCgkJCQkkdGFn YXR0cyA9ICcgdmFsdWU9IicuJGlkeC4nIic7DQoJCQkJaWYgKCAkaWR4ID09ICRjdXJybW8g KSAkdGFnYXR0cyAuPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOw0KCQkJCSRvcHRpb250YWdz W10gPSBkb1RhZyhzYWZlX3N0cmZ0aW1lKCR0aGlzLT5tdGhOYW1lRm10LCBta3RpbWUoMCww LDAsJGlkeCksICR0aGlzLT5nbXQsICR0aGlzLT5sYW5nKSwgJ29wdGlvbicsICcnLCAkdGFn YXR0cyk7DQoJCQl9DQoJCQkkc2VsZWN0b3JbXSA9IGRvVGFnKGpvaW4obiwgJG9wdGlvbnRh Z3MpLCAnc2VsZWN0JywgKCgkdGhpcy0+bXl3cmFwdGFnKSA/ICcnIDogJHRoaXMtPm15Y2xh c3MpLCAnIG5hbWU9Im0iJy4oKCR0aGlzLT5zZWxidG4pID8gJycgOiAnIG9uY2hhbmdlPSJz dWJtaXQoKSInKSwgJycpDQogICAJCQkJLiAoKCR0aGlzLT51c2VTZWxlY3RvcigneWVhcicp KSA/ICcnIDogaElucHV0KCd5JywgJGN1cnJ5cikpOw0KCQkJJG9wdGlvbnRhZ3MgPSBhcnJh eSgpOyAvLyBCbGFuayBvdXQNCgkJfSBlbHNlIHsNCgkJCSRzZWxlY3RvcltdID0gZG9UYWco JHRoaXMtPmdldE1vbnRoTmFtZSgpLCAnc3BhbicsICgoJHRoaXMtPm15d3JhcHRhZykgPyAn JyA6ICR0aGlzLT5teWNsYXNzKSk7DQoJCX0NCg0KCQkvLyBZZWFyIHNlbGVjdCBsaXN0DQoJ CSR5MCA9ICR0aGlzLT5nZXRFWWVhcigpOw0KCQkkeTEgPSAkdGhpcy0+Z2V0TFllYXIoKTsN Cg0KCQlpZiAoJHRoaXMtPnVzZVNlbGVjdG9yKCd5ZWFyJykgJiYgKCR5MCAhPSAkeTEpICYm ICEkc3RhdGljKSB7DQoJCQlmb3IgKCAkaWR4ID0gJHkwOyAkaWR4IDw9ICR5MTsgJGlkeCsr ICkgew0KCQkJCSR0YWdhdHRzID0gJyB2YWx1ZT0iJy4kaWR4LiciJzsNCgkJCQlpZiAoICRp ZHggPT0gJGN1cnJ5ciApICR0YWdhdHRzIC49ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7DQoJ CQkJJG9wdGlvbnRhZ3NbXSA9IGRvVGFnKCRpZHgsICdvcHRpb24nLCAnJywgJHRhZ2F0dHMp Ow0KCQkJfQ0KCQkJJHNlbGVjdG9yW10gPSBkb1RhZyhqb2luKG4sICRvcHRpb250YWdzKSwg J3NlbGVjdCcsICgoJHRoaXMtPm15d3JhcHRhZykgPyAnJyA6ICR0aGlzLT5teWNsYXNzKSwg JyBuYW1lPSJ5IicuKCgkdGhpcy0+c2VsYnRuKSA/ICcnIDogJyBvbmNoYW5nZT0ic3VibWl0 KCkiJyksICcnKQ0KCQkJCQkuICgoJHRoaXMtPnVzZVNlbGVjdG9yKCdtb250aCcpKSA/ICcn IDogaElucHV0KCdtJywgJGN1cnJtbykpOw0KCQl9IGVsc2Ugew0KCQkJJHNlbGVjdG9yW10g PSBkb1RhZygkdGhpcy0+Z2V0WWVhcigpLCAnc3BhbicsICgoJHRoaXMtPm15d3JhcHRhZykg PyAnJyA6ICR0aGlzLT5teWNsYXNzKSk7DQoJCX0NCgkJJGV4dHJhcyA9ICcnOw0KCQlpZiAo ISRzdGF0aWMgJiYgKCAkdGhpcy0+dXNlU2VsZWN0b3IoJ21vbnRoJykgfHwgJHRoaXMtPnVz ZVNlbGVjdG9yKCd5ZWFyJykgKSkgew0KCQkJaWYgKCR0aGlzLT5zZWxidG4pIHsNCgkJCQkk ZXh0cmFzIC49IGRvVGFnKCcnLCAnaW5wdXQnLCAnc21kX2NhbF9pbnB1dCcsICcgdHlwZT0i c3VibWl0IiB2YWx1ZT0iJy4kdGhpcy0+c2VsYnRuLiciJyk7DQoJCQl9DQoJCQlpZiAoJHRo aXMtPnRhYmxlSUQpIHsNCgkJCQkkZXh0cmFzIC49IGhJbnB1dCgnY2FsaWQnLCR0aGlzLT50 YWJsZUlEKTsNCgkJCX0NCgkJCSRleHRyYXMgLj0gam9pbignJywgJGZpbHRlckhpZCk7DQoJ CX0NCg0KCQkkc2VsZWN0b3IgPSAnPGZvcm0gYWN0aW9uPSInLiRfU0VSVkVSWydQSFBfU0VM RiddLiciIG1ldGhvZD0iZ2V0IiBpZD0ic21kX2NhbGRhdGUiPicuZG9UYWcoam9pbihzcCwg JHNlbGVjdG9yKS4kZXh0cmFzLCAkdGhpcy0+bXl3cmFwdGFnLCAkdGhpcy0+bXljbGFzcyku JzwvZm9ybT4nOw0KDQoJCSRuYXZfYmFja19saW5rID0gJHRoaXMtPm5hdmlnYXRpb24oJHRo aXMtPnllYXIsICR0aGlzLT5tb250aCwgJy0nLCAkZmlsdGVyVVJMKTsNCgkJJG5hdl9md2Rf bGluayAgPSAkdGhpcy0+bmF2aWdhdGlvbigkdGhpcy0+eWVhciwgJHRoaXMtPm1vbnRoLCAn KycsICRmaWx0ZXJVUkwpOw0KDQoJCSRuYXZfYmFjayA9ICghJHN0YXRpYyAmJiAkbmF2X2Jh Y2tfbGluaykgPyAnPGEgaHJlZj0iJy4kbmF2X2JhY2tfbGluay4nIicuJG5hdmNsYXNzLic+ JiM2MDs8L2E+JyA6ICcmbmJzcDsnOw0KLy8JCSRuYXZfZndkICA9ICgoISRzdGF0aWMgJiYg JGZ1dHVyZSAmJiAkbmF2X2Z3ZF9saW5rKSBvciAoJHRoaXMtPm1vbnRoICE9IGRhdGUoJ24n LHRpbWUoKSkpKSA/ICc8YSBocmVmPSInLiRuYXZfZndkX2xpbmsuJyInLiRuYXZjbGFzcy4n PiYjNjI7PC9hPicgOiAnJm5ic3A7JzsgLy8gKnNocnVnKiBicmVha3MgaWYgc3RhdGljIHNl dCBhbmQgbW9udGggPCB0aGlzIG1vbnRoIHVzZWQNCgkJJG5hdl9md2QgID0gKCEkc3RhdGlj ICYmICRmdXR1cmUgJiYgJG5hdl9md2RfbGluaykgPyAnPGEgaHJlZj0iJy4kbmF2X2Z3ZF9s aW5rLiciJy4kbmF2Y2xhc3MuJz4mIzYyOzwvYT4nIDogJyZuYnNwOyc7DQoNCgkJJGNbXSA9 IGRvVGFnKCRuYXZfYmFjaywndGgnKTsNCgkJJGNbXSA9ICc8dGggY29sc3Bhbj0iJy4oKCR0 aGlzLT5zaG93SVNPV2VlaykgPyA2IDogNSkuJyI+Jy4kc2VsZWN0b3IuJzwvdGg+JzsNCgkJ JGNbXSA9IGRvVGFnKCRuYXZfZndkLCd0aCcpOw0KDQoJCXJldHVybiBkb1RhZyhqb2luKCcn LCRjKSwndHInKTsNCgl9DQoNCglmdW5jdGlvbiBuYXZpZ2F0aW9uKCR5ZWFyLCRtb250aCwk ZGlyZWN0aW9uLCRmbHQpIHsNCgkJZ2xvYmFsICRwZXJtbGlua19tb2RlOw0KDQoJCWlmKCRk aXJlY3Rpb24gPT0gJy0nKSB7DQoJCQlpZigkbW9udGggLSAxIDwgMSkgew0KCQkJCSRtb250 aCA9IDEyOw0KCQkJCSR5ZWFyIC09IDE7DQoJCQl9IGVsc2Ugew0KCQkJCSRtb250aCAtPSAx Ow0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJaWYoJG1vbnRoICsgMSA+IDEyKSB7DQoJCQkJJG1v bnRoID0gMTsNCgkJCQkkeWVhciArPSAxOw0KCQkJfSBlbHNlIHsNCgkJCQkkbW9udGggKz0g MTsNCgkJCX0NCgkJfQ0KDQoJCS8vIEFib3J0IGlmIHdlJ3JlIGFib3V0IHRvIGdvIG91dCBv ZiByYW5nZQ0KCQlpZiAoJHllYXIgPCAkdGhpcy0+Z2V0RVllYXIoKSB8fCAkeWVhciA+ICR0 aGlzLT5nZXRMWWVhcigpKSB7DQoJCQlyZXR1cm4gJyc7DQoJCX0NCg0KCQkkaWQgPSAoJHRo aXMtPnRhYmxlSUQpID8gYS4nY2FsaWQ9Jy4kdGhpcy0+dGFibGVJRCA6ICcnOyAvLyBBbGxv dyBzcGVjaWZpYyBjYWxlbmRhciBuYXZpZ2F0aW9uLCBpbiBjYXNlIHRoZXJlJ3MgbW9yZSB0 aGFuIG9uZSBwZXIgcGFnZQ0KCQlpZigkcGVybWxpbmtfbW9kZSAhPSAnbWVzc3knKSB7DQoJ CQlyZXR1cm4gIj9tPSRtb250aCIuYS4ieT0keWVhciIuJGlkLmEuJGZsdDsNCgkJfSBlbHNl IHsgLy8gZm9yIG1lc3N5IFVSTCdzIHdlIG5lZWQgdG8gYnVpbGQgdGhlIGVudGlyZSByZXF1 ZXN0IHN0cmluZyBmaXJzdCwgdGhlbiB0YWNrIG9uIHRoZSByZXN0DQoJCQkkb3V0ID0gbWFr ZU91dCgnaWQnLCdzJywnYycsJ3EnLCdwZycsJ3AnLCdtb250aCcpOw0KCQkJJHIgPSAnPyc7 DQoJCQlmb3JlYWNoKCRvdXQgYXMgJGtleSA9PiAkdmFsICkgew0KCQkJCSRyIC49ICgkdmFs KSA/ICIka2V5PSR2YWwiLmEgOiAnJzsNCgkJCX0NCgkJCXJldHVybiAkci4ibT0kbW9udGgi LmEuInk9JHllYXIiLiRpZC5hLiRmbHQ7DQoJCX0NCgl9DQp9DQoNCmNsYXNzIFNNRF9TbWFs bF9DYWxlbmRhciBleHRlbmRzIFNNRF9DYWxlbmRhciB7DQoJdmFyICRzZWN0aW9uID0gJyc7 DQoJdmFyICRjYXRlZ29yeSA9ICcnOw0KCWZ1bmN0aW9uIFNNRF9TbWFsbF9DYWxlbmRhcigk eWVhciwkbW9udGgsJGRheSwkZXZlbnRzLCRzZWN0aW9uLCRjYXRlZ29yeSkgew0KCQkkdGhp cy0+c2VjdGlvbiA9ICRzZWN0aW9uOw0KCQkkdGhpcy0+Y2F0ZWdvcnkgPSAkY2F0ZWdvcnk7 DQoJCSR0aGlzLT5TTURfQ2FsZW5kYXIoJHllYXIsJG1vbnRoLCRkYXksJGV2ZW50cyk7DQoJ fQ0KDQoJZnVuY3Rpb24gZHNwRGF5Q2VsbCgkdGhlZGF5KSB7DQoJCWdsb2JhbCAkcGVybWxp bmtfbW9kZTsNCg0KCQkkY2VsbGNsYXNzID0gJHRoaXMtPmdldENlbGxDbGFzcygpLicgJzsN CgkJJGhhc2FydGljbGUgPSBpc3NldCgkdGhpcy0+ZXZlbnRzWyR0aGVkYXldKTsNCgkJJGNs YXNzW10gPSAkY2VsbGNsYXNzIC4gKCgkaGFzYXJ0aWNsZSkgPyAkdGhpcy0+Y2xhc3NwcmVm aXguJ2V2ZW50JyA6ICcnKTsNCgkJaWYgKChpbl9hcnJheSggZGF0ZSgnZC1tLVknLCBta3Rp bWUoIDAsIDAsIDAsICR0aGlzLT5nZXRNb250aCgpLCAkdGhlZGF5LCAkdGhpcy0+Z2V0WWVh cigpKSApLCAkdGhpcy0+aG9saWRheXMpKSApIHsNCgkJCSRjbGFzc1tdID0gJHRoaXMtPmNs YXNzcHJlZml4Lidob2xzJzsNCgkJfQ0KCQlpZigkdGhpcy0+bW9udGggPT0gZGF0ZSgnbics dGltZSgpK3R6X29mZnNldCgpICkgYW5kICR0aGVkYXkgPT0gZGF0ZSgnaicsdGltZSgpK3R6 X29mZnNldCgpKSApIHsNCgkJCSRjbGFzc1tdID0gJHRoaXMtPmNsYXNzcHJlZml4Lid0b2Rh eSc7DQoJCX0NCg0KCQlpZiggaXNzZXQoJHRoaXMtPmV2ZW50c1skdGhlZGF5XSkgKSB7DQoJ CQkkZGF5c19ldmVudHMgPSAkdGhpcy0+ZXZlbnRzWyR0aGVkYXldOw0KCQkJZm9yZWFjaCgk ZGF5c19ldmVudHMgYXMgJGV2KSB7DQoJCQkJJGV2Y2xhc3MgPSB0cmltKCRldlsndHlwZSdd KTsNCgkJCQlmb3JlYWNoIChleHBsb2RlKCcgJywgJGV2Y2xhc3MpIGFzICRldmMpIHsNCgkJ CQkJJGNsYXNzW109ICRldmM7DQoJCQkJfQ0KDQoJCQkJJG91dFtdID0gKCR0aGlzLT5ldndy YXB0YWcpID8gdGFnKCRldlsnZXYnXSwgJHRoaXMtPmV2d3JhcHRhZywgKCgkZXZjbGFzcykg PyAnIGNsYXNzPSInLiRldmNsYXNzLiciJyA6ICcnKSkgOiAkZXZbJ2V2J107DQoJCQl9DQoN CgkJCWlmKCAkcGVybWxpbmtfbW9kZSAhPSAneWVhcl9tb250aF9kYXlfdGl0bGUnICkgew0K CQkJCSRocmVmID0gJyBocmVmPSInLmh1Lic/ZGF0ZT0nLiR0aGlzLT55ZWFyLictJy4kdGhp cy0+ZG91YmxlZGlnaXQoJHRoaXMtPm1vbnRoKS4nLScuJHRoaXMtPmRvdWJsZWRpZ2l0KCR0 aGVkYXkpOw0KCQkJCWlmKCR0aGlzLT5zZWN0aW9uKSB7ICRocmVmID0gJGhyZWYuYS4ncz0n LiR0aGlzLT5zZWN0aW9uOyB9DQoJCQkJaWYoJHRoaXMtPmNhdGVnb3J5KSB7ICRocmVmID0g JGhyZWYuYS4nYz0nLiR0aGlzLT5jYXRlZ29yeTsgfQ0KCQkJCSRocmVmIC49ICciJzsNCgkJ CX0gZWxzZSB7DQoJCQkJJHNlY3Rpb24gPSAoJHRoaXMtPnNlY3Rpb24pID8gJHRoaXMtPnNl Y3Rpb24uJy8nIDogJyc7DQoJCQkJJGhyZWYgPSAnIGhyZWY9IicuaHUuJHNlY3Rpb24uJHRo aXMtPnllYXIuJy8nLiR0aGlzLT5kb3VibGVkaWdpdCgkdGhpcy0+bW9udGgpLicvJy4kdGhp cy0+ZG91YmxlZGlnaXQoJHRoZWRheSkuJyInOw0KCQkJfQ0KDQovLwkJCSR0aXRsZSA9ICcg dGl0bGU9Iicuc2FmZV9zdHJmdGltZSgnJXgnLGdtbWt0aW1lKDAsMCwwLCR0aGlzLT5tb250 aCwkdGhlZGF5KzEsJHRoaXMtPnllYXIpKS4nIic7IC8vIG5vIGlkZWEgd2h5ICR0aGVkYXkr MSwgYnV0IG90aGVyd2lzZSBpdCB3b24ndCB3b3JrDQoNCgkJCSRjW10gPSBkb1RhZygkdGhl ZGF5LmpvaW4oJycsJG91dCksJ2EnLCcnLCRocmVmKTsNCgkJfSBlbHNlIHsNCgkJCSRjW10g PSAkdGhlZGF5Ow0KCQl9DQoNCgkJcmV0dXJuIGRvVGFnKGpvaW4oJycsJGMpLCd0ZCcsam9p bignICcsJGNsYXNzKSk7DQoJfQ0KDQoJZnVuY3Rpb24gZG91YmxlZGlnaXQoJG4pIHsNCgkJ aWYoJG4gPCAxMCkgeyAkbiA9ICcwJy4oaW50KSRuOyB9DQoJCXJldHVybiAkbjsNCgl9DQoN Cn0NCg0KLyoqDQoqIEJhc2ljIENhbGVuZGFyIGRhdGEgYW5kIGRpc3BsYXkNCiogaHR0cDov L3d3dy5vc2Nhcm0ub3JnL3N0YXRpYy9wZy9jYWxlbmRhckNsYXNzLw0KKiBAYXV0aG9yIE9z Y2FyIE1lcmlkYQ0KKiBAY3JlYXRlZCBKYW4gMTggMjAwNA0KKiBAcGFja2FnZSAgZ29Db3Jl TGliDQoqLw0KY2xhc3MgU01EX1Jhd19DYWxlbmRhciB7DQp2YXIgJGdtdCA9IDE7DQp2YXIg JGxhbmc7DQp2YXIgJHllYXI7DQp2YXIgJGV5cjsNCnZhciAkbHlyOw0KdmFyICRtb250aDsN CnZhciAkZGF5Ow0KdmFyICRkYXlOYW1lRm10Ow0KdmFyICRtdGhOYW1lRm10Ow0KdmFyICRz dGFydERheTsNCnZhciAkc2VsZWN0b3JzOw0KdmFyICRzZWxidG47DQp2YXIgJHNob3dJU09X ZWVrOw0KdmFyICRlbmREYXk7DQp2YXIgJGZpcnN0RGF5T2ZXZWVrID0gMDsNCnZhciAkc3Rh cnRPZmZzZXQgPSAwOw0KdmFyICRjbGFzc2xldmVsczsNCnZhciAkY2xhc3NwcmVmaXg7DQp2 YXIgJGV2Y2xhc3NwcmVmaXg7DQp2YXIgJGV2d3JhcHRhZzsNCnZhciAkbXl3cmFwdGFnOw0K dmFyICRyb3djbGFzczsNCnZhciAkY2VsbGNsYXNzOw0KdmFyICRlbXB0eWNsYXNzOw0KdmFy ICRpc29jbGFzczsNCnZhciAkbmF2Y2xhc3M7DQp2YXIgJG15Y2xhc3M7DQp2YXIgJGZvcHRz Ow0KdmFyICRob2xpZGF5czsNCi8qKg0KKiBDb25zdHJ1Y3Rvcg0KKg0KKiBAcGFyYW0gaW50 ZWdlciwgeWVhcg0KKiBAcGFyYW0gaW50ZWdlciwgbW9udGgNCiogQHBhcmFtIGludGVnZXIs IGRheQ0KKiBAcmV0dXJuIG9iamVjdA0KKiBAcHVibGljDQoqLw0KZnVuY3Rpb24gU01EX1Jh d19DYWxlbmRhciAoICR5ciwgJG1vLCAkZHk9JzEnKSB7DQoJJHRoaXMtPnNldFllYXIoJHly KTsNCgkkdGhpcy0+c2V0TW9udGgoJG1vKTsNCgkkdGhpcy0+c2V0RGF5KCRkeSk7DQoJJHRo aXMtPnNldENsYXNzUHJlZml4KCdzbWRfY2FsXycpOw0KDQoJJHRoaXMtPnN0YXJ0VGltZSA9 IHN0cnRvdGltZSggIiR5ci0kbW8tMDEgMDA6MDAiICk7DQoJJHRoaXMtPnN0YXJ0RGF5CT0g ZGF0ZSggJ0QnLCAkdGhpcy0+c3RhcnRUaW1lICk7DQoJJHRoaXMtPndlZWtEYXkJPSBkYXRl KCAndycsICR0aGlzLT5zdGFydFRpbWUgKTsNCgkkdGhpcy0+ZW5kVGltZSAgID0gc3RydG90 aW1lKCAiJHlyLSRtby0iLiR0aGlzLT5lbmREYXkuIiAyMzo1OSIgKTsNCgkkdGhpcy0+ZW5k RGF5ID0gZGF0ZSggJ3QnLCAkdGhpcy0+c3RhcnRUaW1lICk7DQoNCgkkdGhpcy0+c2V0TmFt ZUZvcm1hdCgnJWEnLCAnZCcpOw0KCSR0aGlzLT5zZXROYW1lRm9ybWF0KCclQicsICdtJyk7 DQoJJHRoaXMtPnNldEZpcnN0RGF5T2ZXZWVrKDApOw0KCSR0aGlzLT5zZXRTaG93SVNPV2Vl aygwKTsNCgkkdGhpcy0+c2V0VGFibGVJRCgnJyk7DQoJJHRoaXMtPnNldFRhYmxlQ2xhc3Mo JycpOw0KfQ0KLy8gPT09PSBlbmQgQ2FsZW5kYXIgPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpmdW5jdGlvbiBnZXRTdGFydFRpbWUoKSB7IHJl dHVybiAkdGhpcy0+c3RhcnRUaW1lOyB9DQpmdW5jdGlvbiBnZXRXZWVrRGF5KCkgeyByZXR1 cm4gJHRoaXMtPndlZWtEYXk7IH0NCmZ1bmN0aW9uIGdldEVuZFRpbWUoKSB7IHJldHVybiAk dGhpcy0+ZW5kVGltZTsgfQ0KZnVuY3Rpb24gZ2V0WWVhcigpIHsgcmV0dXJuICR0aGlzLT55 ZWFyOyB9DQpmdW5jdGlvbiBnZXRFWWVhcigpIHsgcmV0dXJuICR0aGlzLT5leXI7IH0NCmZ1 bmN0aW9uIGdldExZZWFyKCkgeyByZXR1cm4gJHRoaXMtPmx5cjsgfQ0KZnVuY3Rpb24gZ2V0 TW9udGgoKSB7IHJldHVybiAkdGhpcy0+bW9udGg7IH0NCmZ1bmN0aW9uIGdldERheSgpIHsg cmV0dXJuICR0aGlzLT5kYXk7IH0NCmZ1bmN0aW9uIGdldFJvd0NsYXNzKCkgeyByZXR1cm4g JHRoaXMtPnJvd2NsYXNzOyB9DQpmdW5jdGlvbiBnZXRDZWxsQ2xhc3MoKSB7IHJldHVybiAk dGhpcy0+Y2VsbGNsYXNzOyB9DQpmdW5jdGlvbiBnZXRFbXB0eUNsYXNzKCkgeyByZXR1cm4g JHRoaXMtPmVtcHR5Y2xhc3M7IH0NCmZ1bmN0aW9uIGdldElTT1dlZWtDbGFzcygpIHsgcmV0 dXJuICR0aGlzLT5pc29jbGFzczsgfQ0KZnVuY3Rpb24gZ2V0TmF2Q2xhc3MoKSB7IHJldHVy biAkdGhpcy0+bmF2Y2xhc3M7IH0NCmZ1bmN0aW9uIGdldE1vbnRoTmFtZSgpIHsgcmV0dXJu IHNhZmVfc3RyZnRpbWUoICR0aGlzLT5tdGhOYW1lRm10LCAkdGhpcy0+c3RhcnRUaW1lLCAk dGhpcy0+Z210LCAkdGhpcy0+bGFuZyApOyB9DQpmdW5jdGlvbiBzZXRHTVQoJGIpeyAkdGhp cy0+Z210ID0gJGI7IH0NCmZ1bmN0aW9uIHNldExhbmcoJGNvZGUpeyAkdGhpcy0+bGFuZyA9 ICRjb2RlOyB9DQpmdW5jdGlvbiBzZXRUYWJsZUlEKCRpZCkgeyAkdGhpcy0+dGFibGVJRCA9 ICRpZDsgfQ0KZnVuY3Rpb24gc2V0WWVhcigkeWVhcil7ICR0aGlzLT55ZWFyID0gJHllYXI7 IH0NCmZ1bmN0aW9uIHNldEVZZWFyKCR5ZWFyKXsgJHRoaXMtPmV5ciA9ICR5ZWFyOyB9DQpm dW5jdGlvbiBzZXRMWWVhcigkeWVhcil7ICR0aGlzLT5seXIgPSAkeWVhcjsgfQ0KZnVuY3Rp b24gc2V0TW9udGgoJG1vbnRoKSB7ICR0aGlzLT5tb250aCA9IChpbnQpJG1vbnRoOyB9DQpm dW5jdGlvbiBzZXREYXkoJGRheSl7ICR0aGlzLT5kYXkgPSAkZGF5OyB9DQpmdW5jdGlvbiBz ZXRTaG93SVNPV2VlaygkdmFsKSB7ICR0aGlzLT5zaG93SVNPV2VlayA9ICR2YWw7IH0NCmZ1 bmN0aW9uIHNldENsYXNzTGV2ZWxzKCRjbHMpeyAkdGhpcy0+Y2xhc3NsZXZlbHMgPSAkY2xz OyB9DQpmdW5jdGlvbiBzZXRDbGFzc1ByZWZpeCgkY2xzKXsgJHRoaXMtPmNsYXNzcHJlZml4 ID0gJGNsczsgfQ0KZnVuY3Rpb24gc2V0RXZlbnRQcmVmaXgoJGNscyl7ICR0aGlzLT5ldmNs YXNzcHJlZml4ID0gJGNsczsgfQ0KZnVuY3Rpb24gc2V0RXZlbnRXcmFwdGFnKCR3cmFwKXsg JHRoaXMtPmV2d3JhcHRhZyA9ICR3cmFwOyB9DQpmdW5jdGlvbiBzZXRNWVdyYXB0YWcoJHdy YXApeyAkdGhpcy0+bXl3cmFwdGFnID0gJHdyYXA7IH0NCmZ1bmN0aW9uIHNldFRhYmxlQ2xh c3MoJGNscykgeyAkdGhpcy0+dGFibGVjbGFzcyA9ICgkY2xzKSA/ICR0aGlzLT5jbGFzc3By ZWZpeC4kY2xzIDogJyc7IH0NCmZ1bmN0aW9uIHNldFJvd0NsYXNzKCRjbHMpeyAkdGhpcy0+ cm93Y2xhc3MgPSAoJGNscykgPyAkdGhpcy0+Y2xhc3NwcmVmaXguJGNscyA6ICcnOyB9DQpm dW5jdGlvbiBzZXRDZWxsQ2xhc3MoJGNscyl7ICR0aGlzLT5jZWxsY2xhc3MgPSAoJGNscykg PyAkdGhpcy0+Y2xhc3NwcmVmaXguJGNscyA6ICcnOyB9DQpmdW5jdGlvbiBzZXRFbXB0eUNs YXNzKCRjbHMpeyAkdGhpcy0+ZW1wdHljbGFzcyA9ICgkY2xzKSA/ICR0aGlzLT5jbGFzc3By ZWZpeC4kY2xzIDogJyc7IH0NCmZ1bmN0aW9uIHNldElTT1dlZWtDbGFzcygkY2xzKXsgJHRo aXMtPmlzb2NsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNsYXNzcHJlZml4LiRjbHMgOiAnJzsg fQ0KZnVuY3Rpb24gc2V0TmF2Q2xhc3MoJGNscyl7ICR0aGlzLT5uYXZjbGFzcyA9ICgkY2xz KSA/ICR0aGlzLT5jbGFzc3ByZWZpeC4kY2xzIDogJyc7IH0NCmZ1bmN0aW9uIHNldE1ZQ2xh c3MoJGNscyl7ICR0aGlzLT5teWNsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNsYXNzcHJlZml4 LiRjbHMgOiAnJzsgfQ0KZnVuY3Rpb24gc2V0RmlsdGVyT3B0cygkZikgeyAkdGhpcy0+Zm9w dHMgPSAkZjsgfQ0KZnVuY3Rpb24gc2V0SG9saWRheXMoJGhvbHMpIHsgJHRoaXMtPmhvbGlk YXlzID0gJGhvbHM7IH0NCmZ1bmN0aW9uIHNldFNlbGVjdG9ycygkc2VsLCAkYnRuKSB7ICR0 aGlzLT5zZWxlY3RvcnMgPSAkc2VsOyAkdGhpcy0+c2VsYnRuID0gJGJ0bjsgfQ0KZnVuY3Rp b24gdXNlU2VsZWN0b3IoJHZhbCkgeyByZXR1cm4gaW5fYXJyYXkoJHZhbCwgJHRoaXMtPnNl bGVjdG9ycyk7IH0NCmZ1bmN0aW9uIHNldEZpcnN0RGF5T2ZXZWVrKCRkKSB7DQoJJHRoaXMt PmZpcnN0RGF5T2ZXZWVrID0gKChpbnQpJGQgPD0gNiBhbmQgKGludCkkZCA+PSAwKSA/IChp bnQpJGQgOiAwOw0KDQoJJHRoaXMtPnN0YXJ0T2Zmc2V0ID0gZGF0ZSggJ3cnLCAkdGhpcy0+ c3RhcnRUaW1lICktJHRoaXMtPmZpcnN0RGF5T2ZXZWVrOw0KCWlmICggJHRoaXMtPnN0YXJ0 T2Zmc2V0IDwgMCApIHsNCgkJJHRoaXMtPnN0YXJ0T2Zmc2V0ID0gNyAtIGFicygkdGhpcy0+ c3RhcnRPZmZzZXQpOw0KCX0NCn0NCi8qKg0KKiBmcm06IGFueSB2YWxpZCBQSFAgc3RyZnRp bWUoKSBzdHJpbmcgb3IgQUJCUi9GVUxMDQoqIHR5cDogZCB0byBzZXQgZGF5LCBtIHRvIHNl dCBtb250aCBmb3JtYXQNCiovDQpmdW5jdGlvbiBzZXROYW1lRm9ybWF0KCRmcm0sICR0eXA9 ImQiKSB7DQoJc3dpdGNoICgkZnJtKSB7DQoJCWNhc2UgIkZVTEwiOg0KCQkJJGZtdCA9ICgk dHlwID09ICJkIikgPyAiJUEiIDogIiVCIjsNCgkJCWJyZWFrOw0KCQljYXNlICJBQkJSIjoN CgkJCSRmbXQgPSAoJHR5cCA9PSAiZCIpID8gIiVhIiA6ICIlYiI7DQoJCQlicmVhazsNCgkJ ZGVmYXVsdDoNCgkJCSRmbXQgPSAkZnJtOw0KCQkJYnJlYWs7DQoJfQ0KDQoJaWYgKCR0eXAg PT0gImQiKSB7DQoJCSR0aGlzLT5kYXlOYW1lRm10ID0gJGZtdDsNCgl9IGVsc2Ugew0KCQkk dGhpcy0+bXRoTmFtZUZtdCA9ICRmbXQ7DQoJfQ0KfQ0KLyoqDQoqIFJldHVybnMgbWFya3Vw IGZvciBkaXNwbGF5aW5nIHRoZSBjYWxlbmRhci4NCiogQHJldHVybg0KKiBAcHVibGljDQoq Lw0KZnVuY3Rpb24gZGlzcGxheSAoICkgew0KCSRpZCA9ICgkdGhpcy0+dGFibGVJRCkgPyAn IGlkPSInLiR0aGlzLT50YWJsZUlELiciJyA6ICcnOw0KCSRjW10gPSAnPHRhYmxlJy4kaWQu Jz4nOw0KCSRjW10gPSAkdGhpcy0+ZHNwRGF5TmFtZXMoKTsNCgkkY1tdID0gJHRoaXMtPmRz cERheUNlbGxzKCk7DQoJJGNbXSA9ICc8L3RhYmxlPic7DQoNCglyZXR1cm4gam9pbignJywk Yyk7DQp9DQovLyA9PT09IGVuZCBkaXNwbGF5ID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLyoqDQoqIERpc3BsYXlzIHRoZSByb3cgb2YgZGF5 IG5hbWVzLg0KKiBAcmV0dXJuIHN0cmluZw0KKiBAcHJpdmF0ZQ0KKi8NCmZ1bmN0aW9uIGRz cERheU5hbWVzICggKSB7DQoJLy8gVGhpcyBpcyBkb25lIHRvIG1ha2Ugc3VyZSBTdW5kYXkg aXMgYWx3YXlzIHRoZSBmaXJzdCBkYXkgb2Ygb3VyIGFycmF5DQoJLy8gVW5peCB0aW1lIGdl dHMgYSBsaXR0bGUgZnVua3kgYXQgdGhlIGJlZ2lubmluZyBkZXBlbmRpbmcgdXBvbiB5b3Vy IHRpbWV6b25lLg0KCSRzZXJ2ZXJvZmZzZXQgPSBnbW1rdGltZSgwLDAsMCkgLSBta3RpbWUo MCwwLDApOw0KCSRzdGFydCA9ICgkc2VydmVyb2Zmc2V0IDwgMCkgPyA0IDogMzsNCgkkZW5k ID0gJHN0YXJ0ICsgNzsNCglmb3IoJGk9JHN0YXJ0OyAkaTwkZW5kOyAkaSsrKSB7DQoJCSRu YW1lc1tdID0gdWNmaXJzdChzYWZlX3N0cmZ0aW1lKCR0aGlzLT5kYXlOYW1lRm10LCA4NjQw MCokaSAtIHR6X29mZnNldCgpLCAkdGhpcy0+Z210LCAkdGhpcy0+bGFuZyApKTsNCgl9DQoN CgkkY1tdID0gJzx0cj4nOw0KDQoJJGkgPSAkdGhpcy0+Zmlyc3REYXlPZldlZWs7DQoJJGog PSAwOyAvLyBjb3VudCBudW1iZXIgb2YgZGF5cyBkaXNwbGF5ZWQNCgkkZW5kID0gZmFsc2U7 DQoNCglpZiAoJHRoaXMtPnNob3dJU09XZWVrKSB7DQoJCSRjW10gPSAiPHRoPldlZWsgIzwv dGg+IjsgLy8gVE9ETzogTUxQDQoJfQ0KCWZvcigkaiA9IDA7ICRqPD02OyAkaisrLCAkaSsr KSB7DQoJCWlmKCRpID09IDcpIHsgJGkgPSAwOyB9DQoJCSRjW10gPSAnPHRoPicuJG5hbWVz WyRpXS4iPC90aD4iOw0KCX0NCg0KCSRjW10gPSAnPC90cj4nOw0KCXJldHVybiBqb2luKCcn LCRjKTsNCn0NCi8vID09PT0gZW5kIGRzcERheU5hbWVzID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLyoqDQoqIERpc3BsYXlzIGFsbCBkYXkg Y2VsbHMgZm9yIHRoZSBtb250aA0KKg0KKiBAcmV0dXJuIHN0cmluZw0KKiBAcHJpdmF0ZQ0K Ki8NCmZ1bmN0aW9uIGRzcERheUNlbGxzICggKSB7DQoJJGkgPSAwOyAvLyBjZWxsIGNvdW50 ZXINCgkkZW1wdHlDbGFzcyA9ICR0aGlzLT5nZXRFbXB0eUNsYXNzKCk7DQoJJGlzb0NsYXNz ID0gJHRoaXMtPmdldElTT1dlZWtDbGFzcygpOw0KCSRyb3dDbGFzcyA9ICR0aGlzLT5nZXRS b3dDbGFzcygpOw0KCSRyb3dDbGFzcyA9ICgkcm93Q2xhc3MpID8gJyBjbGFzcz0iJy4kcm93 Q2xhc3MuJyInIDogJyc7DQoNCgkkY1tdID0gJzx0cicuJHJvd0NsYXNzLic+JzsNCg0KCWlm ICgkdGhpcy0+c2hvd0lTT1dlZWspIHsNCgkJJGNbXSA9ICc8dGQgY2xhc3M9IicuJGlzb0Ns YXNzLiciPicuZGF0ZSggJ1cnLCAkdGhpcy0+c3RhcnRUaW1lICkuJzwvdGQ+JzsNCgl9DQoJ Ly8gZmlyc3QgZGlzcGxheSBlbXB0eSBjZWxscyBiYXNlZCBvbiB3aGF0IHdlZWtkYXkgdGhl IG1vbnRoIHN0YXJ0cyBpbg0KCWZvciggJGo9MDsgJGo8JHRoaXMtPnN0YXJ0T2Zmc2V0OyAk aisrICkJew0KCQkkaSsrOw0KCQkkY1tdID0gJzx0ZCBjbGFzcz0iJy4kZW1wdHlDbGFzcy4n Ij4mbmJzcDs8L3RkPic7DQoJfSAvLyBlbmQgb2Zmc2V0IGNlbGxzDQoNCgkvLyB3cml0ZSBv dXQgdGhlIHJlc3Qgb2YgdGhlIGRheXMsIGF0IGVhY2ggc3VuZGF5LCBzdGFydCBhIG5ldyBy b3cuDQoJZm9yKCAkZD0xOyAkZDw9JHRoaXMtPmVuZERheTsgJGQrKyApIHsNCgkJJGkrKzsN CgkJJGNbXSA9ICR0aGlzLT5kc3BEYXlDZWxsKCAkZCApOw0KCQlpZiAoICRpJTcgPT0gMCAp IHsgJGNbXSA9ICc8L3RyPic7IH0NCgkJaWYgKCAkZDwkdGhpcy0+ZW5kRGF5ICYmICRpJTcg PT0gMCApIHsNCgkJCSRjW10gPSAnPHRyJy4kcm93Q2xhc3MuJz4nOw0KCQkJaWYgKCR0aGlz LT5zaG93SVNPV2Vlaykgew0KCQkJCSRjW10gPSAnPHRkIGNsYXNzPSInLiRpc29DbGFzcy4n Ij4nLmRhdGUoICdXJywgc3RydG90aW1lKCAkdGhpcy0+Z2V0WWVhcigpLiItIi4kdGhpcy0+ Z2V0TW9udGgoKS4iLSIuKGludCkoJGQgKyAxKSAuIiAwMDowMCIgKSkuJzwvdGQ+JzsNCgkJ CX0NCgkJfQ0KCX0NCgkvLyBmaWxsIGluIHRoZSBmaW5hbCByb3cNCgkkbGVmdCA9IDcgLSAo ICRpJTcgKTsNCglpZiAoICRsZWZ0IDwgNykJew0KCQlmb3IgKCAkaj0wOyAkajwkbGVmdDsg JGorKyApCXsNCgkJICAkY1tdID0gJzx0ZCBjbGFzcz0iJy4kZW1wdHlDbGFzcy4nIj4mbmJz cDs8L3RkPic7DQoJCX0NCgkJJGNbXSA9ICJcblx0PC90cj4iOw0KCX0NCglyZXR1cm4gam9p bignJywkYyk7DQp9DQovLyA9PT09IGVuZCBkc3BEYXlDZWxscyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi8qKg0KKiBvdXRwdXRzIHRoZSBj b250ZW50cyBmb3IgYSBnaXZlbiBkYXkNCioNCiogQHBhcmFtIGludGVnZXIsIGRheQ0KKiBA YWJzdHJhY3QNCiovDQpmdW5jdGlvbiBkc3BEYXlDZWxsICggJGRheSApIHsNCglyZXR1cm4g Jzx0ZD4nLiRkYXkuJzwvdGQ+JzsNCn0NCi8vID09PT0gZW5kIGRheUNlbGwgPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQp9IC8vIGVuZCBjbGFz cw0KDQovLyBQZXJmb3JtIG9uZSBvZiAyIHR5cGVzIG9mIHRlc3Q6IGFuIGV2ZW50LWJhc2Vk IHRlc3QsIG9yIGFuIGluZm8tYmFzZWQgdGVzdA0KZnVuY3Rpb24gc21kX2lmX2NhbCgkYXR0 cywgJHRoaW5nKSB7DQoJZ2xvYmFsICRzbWRfY2FsX2ZsYWcsICRzbWRfY2FsX2lkLCAkc21k X3llYXIsICRzbWRfbW9udGgsICRzbWRfZGF5Ow0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgN CgkJJ2ZsYWcnID0+ICcnLCAvLyBldmVudCwgcmVjdXIsIG11bHRpKHByZXYsZmlyc3QsbGFz dCksIGNhbmNlbCwgaG9scw0KCQknY2FsaWQnID0+ICcnLA0KCQkneWVhcicgPT4gJycsDQoJ CSdtb250aCcgPT4gJycsDQoJCSdkYXknID0+ICcnLA0KCQknbG9naWMnID0+ICdhbmQnLA0K CQknZGVidWcnID0+ICcwJywNCgkpLCAkYXR0cykpOw0KDQoJJGZsYWcgPSBkb19saXN0KCRm bGFnKTsNCgkkY3RyID0gJG51bSA9IDA7DQoNCglpZiAoJHNtZF9jYWxfZmxhZyAmJiAkZmxh ZyAmJiAkZmxhZ1swXSAhPSAnJykgew0KCQkkbnVtICs9IGNvdW50KCRmbGFnKTsNCgkJZm9y ZWFjaCAoJGZsYWcgYXMgJHdoYXRub3QpIHsNCgkJCWlmIChlbXB0eSgkd2hhdG5vdCkpIGNv bnRpbnVlOw0KCQkJJGN0ciArPSAoaW5fYXJyYXkoJHdoYXRub3QsICRzbWRfY2FsX2ZsYWcp KSA/IDEgOiAwOw0KCQl9DQoJfQ0KCWlmICgkY2FsaWQpIHsNCgkJJG51bSsrOw0KCQkkY3Ry ICs9ICgkc21kX2NhbF9pZCA9PT0gJGNhbGlkKSA/IDEgOiAwOw0KCX0NCglmb3JlYWNoIChh cnJheSgieWVhciIsICJtb250aCIsICJkYXkiKSBhcyAkdGVzdCkgew0KCQkkdGVzdGVyID0g JCR0ZXN0Ow0KCQkkZ2JsID0gJ3NtZF8nLiR0ZXN0Ow0KCQkkY29tcGFyZSA9ICQkZ2JsOw0K DQoJCWlmICgkdGVzdGVyKSB7DQoJCQkkbnVtKys7DQoJCQlwcmVnX21hdGNoKCcvKFshPTw+ XSspPyhbXGRdKykvJywgJHRlc3RlciwgJG1hdGNoZXMpOw0KCQkJaWYgKCRkZWJ1Zykgew0K CQkJCWRtcCgiVEVTVCBJRjogIi4gJGNvbXBhcmUuICgoJG1hdGNoZXNbMV0pID8gJG1hdGNo ZXNbMV0gOiAnPScpIC4gJG1hdGNoZXNbMl0gKTsNCgkJCX0NCgkJCXN3aXRjaCAoJG1hdGNo ZXNbMV0pIHsNCgkJCQljYXNlICIhIjoNCgkJCQkJJGN0ciArPSAoJGNvbXBhcmUhPSRtYXRj aGVzWzJdKSA/IDEgOiAwOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICI+IjoNCgkJCQkJJGN0 ciArPSAoJGNvbXBhcmU+JG1hdGNoZXNbMl0pID8gMSA6IDA7DQoJCQkJCWJyZWFrOw0KCQkJ CWNhc2UgIj49IjoNCgkJCQkJJGN0ciArPSAoJGNvbXBhcmU+PSRtYXRjaGVzWzJdKSA/IDEg OiAwOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICI8IjoNCgkJCQkJJGN0ciArPSAoJGNvbXBh cmU8JG1hdGNoZXNbMl0pID8gMSA6IDA7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgIjw9IjoN CgkJCQkJJGN0ciArPSAoJGNvbXBhcmU8PSRtYXRjaGVzWzJdKSA/IDEgOiAwOw0KCQkJCQli cmVhazsNCgkJCQlkZWZhdWx0Og0KCQkJCQkkY3RyICs9ICgkY29tcGFyZT09JG1hdGNoZXNb Ml0pID8gMSA6IDA7DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJfQ0KCSRyZXN1bHQgPSAo KCRjdHIgPT09ICRudW0gJiYgJGxvZ2ljID09ICJhbmQiKSB8fCAkY3RyID4gMCAmJiAkbG9n aWMgPT0gIm9yIikgPyB0cnVlIDogZmFsc2U7DQoJcmV0dXJuIHBhcnNlKEV2YWxFbHNlKCR0 aGluZywgJHJlc3VsdCkpOw0KfQ0KDQpmdW5jdGlvbiBzbWRfY2FsX2luZm8oJGF0dHMpIHsN CglnbG9iYWwgJHByZXRleHQsICRzbWRfY2FsX2ZsYWcsICRzbWRfY2FsX2lkOw0KDQoJZXh0 cmFjdChsQXR0cyhhcnJheSgNCgkJJ3R5cGUnID0+ICdmbGFnJywgLy8gZmxhZywgbW9udGgs IHllYXIsIGRhdGUsIGNhbGlkDQoJCSdqb2luJyA9PiAnICcsDQoJCSdodG1sJyA9PiAwLA0K CQknZXNjYXBlJyA9PiAnaHRtbCcsDQoJKSwgJGF0dHMpKTsNCg0KCSRqb2luID0gKCRodG1s KSA/IGEgOiAkam9pbjsgLy8gaHRtbCBtb2RlIGZvcmNlcyBhbXBlcnNhbmQgam9pbg0KCSR0 eXBlID0gZG9fbGlzdCgkdHlwZSk7DQoJJHJldCA9IGFycmF5KCk7DQoJZm9yZWFjaCAoJHR5 cGUgYXMgJGl0ZW0pIHsNCgkJc3dpdGNoICgkaXRlbSkgew0KCQkJY2FzZSAiZmxhZyI6DQoJ CQkJJHJldFtdID0gam9pbigkam9pbiwgJHNtZF9jYWxfZmxhZyk7DQoJCQkJYnJlYWs7DQoJ CQljYXNlICJtb250aCI6DQoJCQkJaWYgKGdwcygnbScpKSB7DQoJCQkJCSRyZXRbXSA9ICgo JGh0bWwpID8gJ209JyA6ICcnKSAuIGdwcygnbScpOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJ CWNhc2UgInllYXIiOg0KCQkJCWlmIChncHMoJ3knKSkgew0KCQkJCQkkcmV0W10gPSAoKCRo dG1sKSA/ICd5PScgOiAnJykgLiBncHMoJ3knKTsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQlj YXNlICJzZWN0aW9uIjoNCgkJCQlpZiAoJHByZXRleHRbJ3MnXSkgew0KCQkJCQkkcmV0W10g PSAoKCRodG1sKSA/ICdzPScgOiAnJykgLiAkcHJldGV4dFsncyddOw0KCQkJCX0NCgkJCQli cmVhazsNCgkJCWNhc2UgImNhdGVnb3J5IjoNCgkJCQlpZiAoJHByZXRleHRbJ2MnXSkgew0K CQkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICdjPScgOiAnJykgLiAkcHJldGV4dFsnYyddOw0K CQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgImF1dGhvciI6DQoJCQkJJGN1cnJhdXRob3Ig PSBhdXRob3IoYXJyYXkoKSk7DQoJCQkJaWYgKCRjdXJyYXV0aG9yKSB7DQoJCQkJCSRyZXRb XSA9ICgoJGh0bWwpID8gJ2F1dGhvcj0nIDogJycpIC4gJGN1cnJhdXRob3I7DQoJCQkJfQ0K CQkJCWJyZWFrOw0KCQkJY2FzZSAiY2FsaWQiOg0KCQkJCWlmICgkc21kX2NhbF9pZCkgew0K CQkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICdjYWxpZD0nIDogJycpIC4gJHNtZF9jYWxfaWQ7 DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQl9DQoJfQ0KCSRvdXQgPSBqb2luKCRqb2luLCAkcmV0 KTsNCglyZXR1cm4gKCRlc2NhcGU9PSdodG1sJykgPyBodG1sc3BlY2lhbGNoYXJzKCRvdXQp IDogJG91dDsNCn0NCg0KZnVuY3Rpb24gc21kX2NhbF9ub3coJGF0dHMpIHsNCglnbG9iYWwg JGRhdGVmb3JtYXQ7DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQknZm9ybWF0JyA9PiAk ZGF0ZWZvcm1hdCwNCgkJJ2dtdCcgPT4gJycsDQoJCSdsYW5nJyA9PiAnJywNCgkpLCAkYXR0 cykpOw0KDQoJcmV0dXJuIHNhZmVfc3RyZnRpbWUoJGZvcm1hdCwgdGltZSgpLCAkZ210LCAk bGFuZyk7DQp9IjtzOjQ6InR5cGUiO3M6MToiMCI7czo1OiJvcmRlciI7czoxOiI1IjtzOjQ6 ImhlbHAiO3M6MzkwMDY6Igk8cD48ZGl2IGlkPSJzbWRfaGVscCI+PC9wPgoKCTxoMSBpZD0i dG9wIj5zbWRfY2FsZW5kYXI8L2gxPgoKCTxwPlJlbmRlciBhIGNhbGVuZGFyIHdpdGggb25l IG9yIG1vcmUgYXJ0aWNsZXMgYXMgZXZlbnRzIG9uIGVhY2ggZGF5LiBVc2VmdWwgZm9yIGdp ZyBndWlkZXMsICYjODIyMDt3aGF0JiM4MjE3O3Mgb24mIzgyMjE7IG9yIHNjaGVkdWxpbmcu PC9wPgoKCTxoMiBpZD0iZmVhdHVyZXMiPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxpPkZ1 bGwtc2l6ZSBvciBtaW5pIGNhbGVuZGFyIGJ5IG1vbnRoIHdpdGggb3B0aW9uYWwgPHNwYW4g Y2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlayBkaXNwbGF5PC9saT4KCQk8bGk+TmF2aWdh dGlvbjogbmV4dC9wcmV2IG1vbnRoIG9yIG9wdGlvbmFsIGRyb3Bkb3duIG9mIG1vbnRoIC8g eWVhci4gUGVybWl0dGVkIHllYXIgcmFuZ2UgY2FuIGJlIGRldGVybWluZWQgYnkgZmlyc3Qv bGFzdCBhcnRpY2xlIG9yIGV4dGVuZGVkIGJ5ICsvLSBOIHllYXJzIGluIGVpdGhlciBkaXJl Y3Rpb248L2xpPgoJCTxsaT5PbmUgYXJ0aWNsZSA9IG9uZSBldmVudCwgbmF0aXZlIHRvIDxz cGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHdpdGggdGhlIFBvc3RlZCBkYXRlIGJlaW5n IHRoZSBkYXRlIGl0IGFwcGVhcnMgaW4gdGhlIGNhbGVuZGFyPC9saT4KCQk8bGk+RmlsdGVy IGV2ZW50cyBieSBjYXRlZ29yeSAvIHNlY3Rpb24gLyBhdXRob3IgLyBzdGF0dXMgLyB0aW1l IG9yIGV4cGlyeTwvbGk+CgkJPGxpPk5vbWluYXRlIGEgY3VzdG9tIGZpZWxkIHRvIHNwZWNp ZnkgZXZlbnQgZnJlcXVlbmN5ICgxIHdlZWsgb3IgMTAgZGF5cyBvciAzIG1vbnRocywgZXRj KS4gTXVsdGlwbGUgZnJlcXVlbmNpZXMgY2FuIGJlIGdpdmVuPC9saT4KCQk8bGk+Tm9taW5h dGUgYSBjdXN0b20gZmllbGQgZm9yIGV4Y2x1c2lvbnMgKGEgbGlzdCBvZiBkYXRlcyBvbiB3 aGljaCB0aGF0IGV2ZW50IGlzIGNhbmNlbGxlZCkuIE9wdGlvbiB0byBlaXRoZXIgc2hvdyBj YW5jZWxsZWQgZXZlbnRzIG9uIHRoYXQgZGF5IHNvIHlvdSBjYW4gc3R5bGUgdGhlbSBkaWZm ZXJlbnRseSwgb3IgcmVtb3ZlIHRoZW0gY29tcGxldGVseTwvbGk+CgkJPGxpPlNob3cgc3Bh bm5lZCBldmVudHMgKG9uZXMgdGhhdCBsYXN0IG1vcmUgdGhhbiBhIGRheSkgYmFzZWQgb24g dGhlIGFydGljbGXigJlzIGV4cGlyeS4gQW55IGV2ZW50IHRoYXQgZG9lcyA8c3BhbiBjbGFz cz0iY2FwcyI+Tk9UPC9zcGFuPiByZWN1ciBhbmQgaGFzIGEgZnV0dXJlIGV4cGlyeSBjYW4g YmUgdHJlYXRlZCB0aGlzIHdheTwvbGk+CgkJPGxpPkZ1dHVyZSwgZXhwaXJlZCBvciBzdGlj a3kgZXZlbnRzIG1heSBiZSBkaXNwbGF5ZWQgaWYgeW91IHdpc2g8L2xpPgoJCTxsaT5TcGVj aWZ5IGhvbGlkYXlzIG9uIGEgcGVyIGNhbGVuZGFyIGJhc2lzIChlaXRoZXIgcmVjdXJyaW5n IGV2ZW50cyAmIzgyMTI7IHdpdGhvdXQgeWVhciAmIzgyMTI7IG9yIHNwZWNpZmljIGhvbGlk YXlzKS4gRGVmaW5lIHRoZSBsaXN0IGVpdGhlciBkaXJlY3RseSBpbiB0aGUgcGx1Z2luIGF0 dHJpYnV0ZSBvciBpbiBhIDxjb2RlPiZsdDt0eHA6dmFyaWFibGUgLyZndDs8L2NvZGU+IG9m IHlvdXIgY2hvaWNlIGFuZCBkZWNpZGUgd2hpY2ggdHlwZXMgb2YgZXZlbnQgYXJlIHRvIGJl IGNhbmNlbGxlZCBkdWUgdG8gaG9saWRheXM8L2xpPgoJCTxsaT5FYWNoIGV2ZW50IGNhbiBi ZSBwYXNzZWQgdG8gYSBmb3JtL2NvbnRhaW5lciBzbyB5b3UgY2FuIGJ1aWxkIGl0IHlvdXIg d2F5LCBvciB1c2UgdGhlIGJ1aWx0LWluIGh5cGVybGlua2VkIHRpdGxlLiBTcGFubmVkIGV2 ZW50cyBjYW4gYmUgc2VudCB0byBhIHNlcGFyYXRlIGZvcm0gaWYgeW91IHdpc2g8L2xpPgoJ CTxsaT5Db25kaXRpb25hbCB0ZXN0cyBmb3IgZXZlbnQgZmxhZ3MgKHJlY3VycmluZywgc3Bh bm5lZCwgY2FuY2VsbGVkLCBob2xpZGF5cykgYW5kIGRhdGVzIHNvIHlvdSBjYW4gYnVpbGQg eW91ciBvd24gbG9naWMgaW4geW91ciBmb3JtL2NvbnRhaW5lcjwvbGk+CgkJPGxpPkNsYXNz IHNvdXA6IHRhYmxlLSwgcm93LSwgY2VsbC0sIGFuZCBldmVudC1sZXZlbCBjbGFzc2VzIGZv ciBpbmRpY2F0aW5nIGRpZmZlcmVudCBzY2VuYXJpb3MgKHNwYW5uZWQgZXZlbnQsIHJlY3Vy cmluZyBldmVudCwgY2FuY2VsbGVkIGV2ZW50LCBldGMpOyBjdXN0b20gY2xhc3NlcyBjYW4g YmUgc3BlY2lmaWVkIGJhc2VkIG9uIGFuIGV2ZW50PC9saT4KCQk8bGk+VGFnIHRvIG91dHB1 dCB2YXJpb3VzIGV2ZW50IG9yIGNhbGVuZGFyIGNoYXJhY3RlcmlzdGljcyAoZS5nLiB0aGUg bW9udGgsIHllYXIsIGNhbGVuZGFyIGlkLCBzZWN0aW9uIGFuZCBzbyBvbik8L2xpPgoJCTxs aT5UYWcgdG8gb3V0cHV0IHRoZSBjdXJyZW50IGRhdGUvdGltZSAoZm9ybWF0dGVkIGhvdyB5 b3UgbGlrZSk8L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImF1dGhvciI+QXV0aG9yIC8gY3JlZGl0 czwvaDI+CgoJPHA+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbW1lbnRGb3Jt Ij5TdGVmIERhd3NvbjwvYT4uIEpvaW50bHkgZnVuZGVkIGJ5IGdlbmVyb3VzIGRvbmF0b3Jz OiBtcmRhbGUsIHdvb2YsIGpha29iIGFuZCByZW5vYmlyZC4gQmFzZWQgaGVhdmlseSBvbiBt ZHBfY2FsZW5kYXIuIEFsbCBwcm9wcyB0byB0aGUgb3JpZ2luYWwgYXV0aG9yIG9mIHRoZSBw bHVnaW4sIGFuZCBvZiBjb3Vyc2UgdGhlIGNsYXNzIHVwb24gd2hpY2ggdGhlIGNhbGVuZGFy IGlzIGJhc2VkLiBBbmQgbm90IGZvcmdldHRpbmcgb3VyIGF3ZXNvbWUgVGV4dHBhdHRlcm4g ZGV2cyB3aG8gY29udGludWUgdG8gcHVzaCB0aGlzIGxpdHRsZSA8c3BhbiBjbGFzcz0iY2Fw cyI+Q01TPC9zcGFuPiB0byB0aGUgc3RhcnMuPC9wPgoKCTxoMiBpZD0iaW5zdGFsbCI+SW5z dGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gyPgoKCTxwIGNsYXNzPSJyZXF1aXJlZCI+ UmVxdWlyZXMgVGV4dHBhdHRlcm4gNC4wLjc8L3A+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdp biBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMv MTA1Mi9zbWRfY2FsZW5kYXIiPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVm PSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0 aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAt Jmd0OyBQbHVnaW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBWaXNp dCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMu cGhwP2lkPTI5MjAwIj5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGluZm8gb3IgdG8gcmVw b3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBvZiB0aGUgcGx1Z2luLjwvcD4KCgk8 cD5UbyB1bmluc3RhbGwsIHNpbXBseSBkZWxldGUgZnJvbSB0aGUgQWRtaW4gLSZndDsgUGx1 Z2lucyBwYWdlLjwvcD4KCgk8aDIgaWQ9Im5hbWluZyI+TmFtaW5nIGNvbnZlbnRpb248L2gy PgoKCTxwPkJlZm9yZSBiZWdpbm5pbmcgdGhlcmUmIzgyMTc7cyBhIGxpdHRsZSBiaXQgb2Yg bm9tZW5jbGF0dXJlIHRvIGdldCBvdXQgb2YgdGhlIHdheTo8L3A+CgoJPHVsPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+Y2VsbDwvc3Bhbj4gOiBhIHNwZWNpZmljIGRheSBvbiB0aGUg Y2FsZW5kYXIgaW4gYSBwYXJ0aWN1bGFyIG1vbnRoL3llYXI8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+ZXZlbnQ8L3NwYW4+IDogYW4gYXJ0aWNsZS4gSXQmIzgyMTc7cyBiZXN0 IHRvIG5vbWluYXRlIGEgZGVkaWNhdGVkIHNlY3Rpb24gZm9yIGV2ZW50cyBzbyBpdCBrZWVw cyB0aGluZ3MgbmVhdGVyIG9uIHlvdXIgY2FsZW5kYXIgYnV0IHlvdSBjYW4gdXNlIGV2ZW50 cyBmcm9tIG1vcmUgdGhhbiBvbmUgc2VjdGlvbiBpZiB5b3Ugd2lzaC4gQW55IGFydGljbGUg d3JpdHRlbiBpbiB0aGUgZ2l2ZW4gc2VjdGlvbihzKSB3aWxsIGFwcGVhciBvbiB0aGUgY2Fs ZW5kYXIgYXMgbG9uZyBhcyBpdHMgZXhwaXJ5IGhhc24mIzgyMTc7dCBiZWVuIG1ldC4gTW9y ZSB0aGFuIG9uZSBldmVudCBtYXkgYXBwZWFyIGluIGVhY2ggY2VsbDwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5ldmVudCBmbGFnPC9zcGFuPiA6IGVhY2ggZXZlbnQgY2FuIGVp dGhlciBiZSBhIHN0YW5kYXJkIDxjb2RlPmV2ZW50PC9jb2RlPiwgaXQgY2FuIDxjb2RlPnJl Y3VyPC9jb2RlPiwgaXQgY2FuIHNwYW4gbW9yZSB0aGFuIG9uZSBkYXkgKDxjb2RlPm11bHRp PC9jb2RlPikgaXQgY2FuIGJlIHJlbW92ZWQgKDxjb2RlPmNhbmNlbDwvY29kZT4pIG9yIGl0 IG1heSBvY2N1ciBvbiBhIGhvbGlkYXkgKDxjb2RlPmhvbHM8L2NvZGU+KTwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5jYWxpZDwvc3Bhbj4gOiB5b3UgbWF5IHB1dCBtb3JlIHRo YW4gb25lIGNhbGVuZGFyIG9uIGEgcGFnZS4gSWYgc28sIGVhY2ggb25lIG11c3QgYmUgdW5p cXVlbHkgcmVmZXJlbmNlZCB3aXRoIHRoaXMgY2FsZW5kYXIgSUQ8L2xpPgoJPC91bD4KCgk8 cD5JdCYjODIxNztzIGFsc28gd29ydGggYmVhcmluZyBpbiBtaW5kIHRoZSA8YSBocmVmPSIj ZGF0ZXMiPmRhdGUgY2F2ZWF0czwvYT4gdGhhdCBtYXkgd2VsbCBiaXRlIHlvdSBoYXJkLjwv cD4KCgk8aDIgaWQ9InVzYWdlIj5Vc2FnZTogPGNvZGU+Jmx0O3R4cDpzbWRfY2FsZW5kYXIg LyZndDs8L2NvZGU+PC9oMj4KCgk8cD5QdXQgdGhlIDxjb2RlPiZsdDt0eHA6c21kX2NhbGVu ZGFyIC8mZ3Q7PC9jb2RlPiB0YWcgd2hlcmV2ZXIgeW91IHdhbnQgeW91ciBjYWxlbmRhciB0 byBhcHBlYXIuIFVzZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIHRvIGNvbnRy b2wgaXRzIG91dHB1dCBkaXNwbGF5IGFuZCB1c2UgdGhlIDxhIGhyZWY9IiNhdHRzdHlsZXMi PnN0eWxlIGF0dHJpYnV0ZXM8L2E+IHRvIGRldGVybWluZSBob3cgdG8gYXBwbHkgc3R5bGVz IHRvIHRoZSB2YXJpb3VzIGV2ZW50cyBhbmQgY2VsbHMuPC9wPgoKCTxoMyBjbGFzcz0iYXR0 cyAiIGlkPSJhdHRyaWJ1dGVzIj5NYWluIGF0dHJpYnV0ZXM8L2gzPgoKCTx1bD4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPnNpemU8L3NwYW4+IDogY2FsZW5kYXIgc2l6ZSwgPGNvZGU+ bGFyZ2U8L2NvZGU+IG9yIDxjb2RlPnNtYWxsPC9jb2RlPi4gVGhlIHNtYWxsIGlzIG1vcmUg Z2VhcmVkIHRvd2FyZHMgYSBtaW5pY2FsLCBhbHRob3VnaCBmdW5jdGlvbmFsbHkgdGhlcmUg PGEgaHJlZj0iI3NpemVkaWZmIj5pc24mIzgyMTc7dCBtdWNoIGJldHdlZW4gdGhlbTwvYT4u IERlZmF1bHQ6IDxjb2RlPmxhcmdlPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj50aW1lPC9zcGFuPiA6IHNob3cgPGNvZGU+cGFzdDwvY29kZT4sIDxjb2RlPmZ1dHVy ZTwvY29kZT4sIG9yIDxjb2RlPmFueTwvY29kZT4gZXZlbnQuIERlZmF1bHQ6IDxjb2RlPmFu eTwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZXhwaXJlZDwvc3Bhbj4g OiBkZWZpbml0aXZlbHkgaGlkZSAoPGNvZGU+MDwvY29kZT4pIG9yIHNob3cgKDxjb2RlPjE8 L2NvZGU+KSBleHBpcmVkIGV2ZW50cy4gTGVhdmUgYmxhbmsgdG8gdXNlIHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZHZhbmNlZCBQcmVmZXJlbmNlIDxjb2RlPlB1Ymxp c2ggZXhwaXJlZCBhcnRpY2xlczwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+Zmlyc3RkYXk8L3NwYW4+IDogdGhlIDFzdCBkYXkgb2YgdGhlIHdlZWsgdG8gc2hvdyBp biB0aGUgY2FsZW5kYXIuIDA9U3VuZGF5LCAxPU1vbmRheSBhbmQgc28gb24gZG93biB0byA2 PVNhdHVyZGF5LiBEZWZhdWx0OiA8Y29kZT4wPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5kYXlmb3JtYXQ8L3NwYW4+IDogdGhlIHdheSBpbiB3aGljaCB0aGUgZGF5 IG5hbWVzIGFyZSByZW5kZXJlZC4gQ2hvb3NlIGZyb20gZWl0aGVyIDxjb2RlPkFCQlI8L2Nv ZGU+ICh0aGUgZGVmYXVsdCkgdG8gc2hvdyB0aGUgZGF5cyBhcyBNb24sIFR1ZSwgV2VkLCBl dGMgb3IgPGNvZGU+RlVMTDwvY29kZT4gdG8gcmVuZGVyIHRoZWlyIGZ1bGwgbmFtZXMuIEFs dGVybmF0aXZlbHksIHN1cHBseSBhbnkgdmFsaWQgPGEgaHJlZj0iaHR0cDovL3VrMi5waHAu bmV0L3N0cmZ0aW1lIj5zdHJmdGltZSgpPC9hPiBjb2RlcyB0byB1c2UgdGhhdCBpbnN0ZWFk LiBMb2NhbGUtc3BlY2lmaWMgbmFtZXMgYXJlIHJldHVybmVkPC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPm1vbnRoZm9ybWF0PC9zcGFuPiA6IHRoZSB3YXkgaW4gd2hpY2ggdGhl IG1vbnRoIG5hbWVzIGFyZSByZW5kZXJlZC4gQ2hvb3NlIGZyb20gZWl0aGVyIDxjb2RlPkZV TEw8L2NvZGU+ICh0aGUgZGVmYXVsdCkgdG8gc2hvdyB0aGUgZnVsbCBtb250aCBuYW1lcyBv ciA8Y29kZT5BQkJSPC9jb2RlPiB0byByZW5kZXIgdGhlaXIgYWJicmV2aWF0ZWQgbmFtZXMu IEFsdGVybmF0aXZlbHksIHN1cHBseSBhbnkgdmFsaWQgPGEgaHJlZj0iaHR0cDovL3VrMi5w aHAubmV0L3N0cmZ0aW1lIj5zdHJmdGltZSgpPC9hPiBjb2RlcyB0byB1c2UgdGhhdCBpbnN0 ZWFkLiBMb2NhbGUtc3BlY2lmaWMgbmFtZXMgYXJlIHJldHVybmVkPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPnNlbGVjdDwvc3Bhbj4gOiB1c2UgYSBzZWxlY3QgZHJvcGRvd24g Zm9yIHJhcGlkIGFjY2VzcyB0byBtb250aHMgb3IgeWVhcnMgaW5zdGVhZCBvZiByZW5kZXJp bmcganVzdCB0aGUgbmFtZXMuIERlZmF1bHQ6IHVuc2V0LCBidXQgeW91IG1heSBtYWtlIGEg KGNvbW1hLXNlcGFyYXRlZCkgbGlzdCBmcm9tIGVpdGhlciA8Y29kZT5tb250aDwvY29kZT4g b3IgPGNvZGU+eWVhcjwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2Vs ZWN0YnRuPC9zcGFuPiA6IGJ5IGRlZmF1bHQsIHRoZSBzZWxlY3QgZHJvcGRvd25zIHdpbGwg YXV0by1zdWJtaXQgd2hlbiB0aGV5IGFyZSBjaGFuZ2VkLiBJZiB5b3UgcHJlZmVyIGEgZGVk aWNhdGVkIHN1Ym1pdCBidXR0b24sIGdpdmUgdGhlIHRleHQgeW91IHdpc2ggdG8gYXBwZWFy IG9uIHRoZSBidXR0b24gaGVyZS4gVGhlIGJ1dHRvbiBoYXMgYSBmaXhlZCBjbGFzcyBvZiA8 Y29kZT5zbWRfY2FsX2lucHV0PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5pc293ZWVrczwvc3Bhbj4gOiBzaG93IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9z cGFuPiB3ZWVrIG51bWJlcnMgYXMgYSBjb2x1bW4gYXQgdGhlIHN0YXJ0IG9mIHRoZSBjYWxl bmRhci4gSWYgc2V0ICg8Y29kZT4xPC9jb2RlPiksIHRoZSA8Y29kZT5maXJzdGRheTwvY29k ZT4gd2lsbCBiZSBmb3JlZCB0byBzdGFydCBvbiBhIE1vbmRheSBhcyBnb3Zlcm5lZCBieSB0 aGUgPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gc3BlY2lmaWNhdGlvbi4gRGVmYXVs dDogPGNvZGU+MDwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c3RhdHVz PC9zcGFuPiA6IGV2ZW50cyBpbiB0aGlzIGxpc3Qgb2Ygc3RhdHVzIGFyZSBwdWJsaXNoZWQu IERlZmF1bHQ6IDxjb2RlPmxpdmU8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPmNhdGVnb3J5PC9zcGFuPiA6IGZpbHRlciBldmVudHMgYnkgdGhpcyBsaXN0IG9mIGNh dGVnb3JpZXMuIERlZmF1bHQgaXMgdGhlIGN1cnJlbnQgZ2xvYmFsIGNhdGVnb3J5IChpZiBz ZXQsIGVtcHR5IG90aGVyd2lzZSk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2Vj dGlvbjwvc3Bhbj4gOiBmaWx0ZXIgZXZlbnRzIGJ5IHRoaXMgbGlzdCBvZiBzZWN0aW9ucy4g RGVmYXVsdCBpcyB0aGUgY3VycmVudCBzZWN0aW9uPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPmF1dGhvcjwvc3Bhbj4gOiBmaWx0ZXIgZXZlbnRzIGJ5IHRoaXMgYXV0aG9yIFJl YWwgTmFtZS4gRGVmYXVsdCBpcyB0aGUgY3VycmVudCBhdXRob3IgKGlmIHNldCwgZW1wdHkg b3RoZXJ3aXNlKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5pZDwvc3Bhbj4gOiB0 aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IElEIHRvIGFwcGx5IHRvIHRoZSB0 YWJsZSB0aGF0IGhvbGRzIHRoZSBjYWxlbmRhci4gVGhpcyBpcyB0aGUgdmFsdWUgb2YgdGhl IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHZhcmlhYmxlIDxjb2RlPmNhbGlkPC9j b2RlPiBhbmQgaXRzIGRlZmF1bHQgaXMgdW5zZXQuIEVhY2ggY2FsZW5kYXIgb24gYSBwYWdl IDxhIGhyZWY9IiNuYW1pbmciPm11c3QgYmUgdW5pcXVlPC9hPjwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5tb250aDwvc3Bhbj4gOiBzdGFydCB0aGUgY2FsZW5kYXIgb24gdGhp cyBtb250aCBmcm9tIDEgKEphbnVhcnkpIHRvIDEyIChEZWNlbWJlcikuIElmIDxjb2RlPnN0 YXRpYzwvY29kZT4gaXMgdXNlZCwgdGhpcyBtb250aCBiZWNvbWVzIHRoZSBvbmx5IG9uZSB5 b3UgbWF5IHZpZXcuIElmIHVuc2V0LCBhbmQgbm8gPGNvZGU+bT08L2NvZGU+IHZhbHVlIGFw cGVhcnMgb24gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGxpbmUsIHRoZSBj dXJyZW50IG1vbnRoIGlzIHVzZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+eWVh cjwvc3Bhbj4gOiBzdGFydCB0aGUgY2FsZW5kYXIgYXQgdGhpcyA0LWRpZ2l0IHllYXIuIElm IDxjb2RlPnN0YXRpYzwvY29kZT4gaXMgdXNlZCwgdGhpcyB5ZWFyIGJlY29tZXMgdGhlIG9u bHkgb25lIHlvdSBtYXkgdmlldy4gSWYgdW5zZXQsIGFuZCBubyA8Y29kZT55PTwvY29kZT4g dmFsdWUgYXBwZWFycyBvbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gbGlu ZSwgdGhlIGN1cnJlbnQgeWVhciBpcyB1c2VkPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPnllYXJ3aWR0aDwvc3Bhbj4gOiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHRoYXQgc3Bl Y2lmaWVzIGhvdyBtYW55IHllYXJzIHlvdXIgY2FsZW5kYXIgc3BhbnMuIEJ5IGRlZmF1bHQg aXQgaXMgPGNvZGU+MCwwPC9jb2RlPiB3aGljaCB1c2VzIHRoZSBlYXJsaWVzdCAocG9zdGVk KSBldmVudCBpbiB0aGUgc2VjdGlvbiBhcyB0aGUgbG93ZXN0IHllYXIgYW5kIHRoZSBsYXRl c3QgKG1vZGlmaWVkKSBldmVudCBpbiB0aGUgc2VjdGlvbiBhcyB0aGUgbGF0ZXN0IHllYXIu IFlvdSB3aWxsIG5vdCBiZSBwZXJtaXR0ZWQgdG8gbmF2aWdhdGUgdGhlIGNhbGVuZGFyIG91 dHNpZGUgdGhpcyByYW5nZS4gVG8gd2lkZW4gdGhlIHJhbmdlLCBzcGVjaWZ5IHNvbWUgdmFs dWVzLCBmb3IgZXhhbXBsZSA8Y29kZT55ZWFyd2lkdGg9JnF1b3Q7Miw0JnF1b3Q7PC9jb2Rl PiB3aWxsIHN1YnRyYWN0IDIgd2hvbGUgeWVhcnMgZnJvbSB0aGUgZWFybGllc3QgZXZlbnQg YW5kIGFkZCA0IHdob2xlIHllYXJzIHRvIHRoZSBsYXRlc3QgZXZlbnQuIElmIHlvdSBzcGVj aWZ5IGEgc2luZ2xlIG51bWJlciwgdGhhdCB2YWx1ZSB3aWxsIGJlIHVzZWQgdG8gZXhwYW5k IHRoZSByYW5nZSBlcXVhbGx5IGluIGJvdGggZGlyZWN0aW9uczwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5mb3JtPC9zcGFuPiA6IHVzZSB0aGlzIDxzcGFuIGNsYXNzPSJjYXBz Ij5UWFA8L3NwYW4+IGZvcm0gdG8gcHJvY2VzcyBlYWNoIGNlbGwuIElmIHRoZSBjYWxlbmRh ciB0YWcgaXMgdXNlZCBhcyBhIGNvbnRhaW5lciBpdCB3aWxsIGJlIHVzZWQgaW4gcHJlZmVy ZW5jZSB0byB0aGUgZm9ybS4gSWYgbmVpdGhlciBhcmUgdXNlZCwgdGhlIGRlZmF1bHQgZm9y IGEgbGFyZ2UgY2FsZW5kYXIgaXMgYSBoeXBlcmxpbmtlZCBhcnRpY2xlIHRpdGxlLiBUaGUg c21hbGwgY2FsZW5kYXIgcmVuZGVycyBhbiBlbXB0eSBldmVudDwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5zcGFuZm9ybTwvc3Bhbj4gOiB5b3UgbWF5IGVsZWN0IHRvIHJlbmRl ciBzcGFubmVkIGV2ZW50cyBkaWZmZXJlbnRseSB0byBzdGFuZGFyZCBldmVudHMuIEJ5IGRl ZmF1bHQgaXQgdXNlcyB0aGUgc2FtZSA8Y29kZT5mb3JtPC9jb2RlPiBidXQgJiM4MjEyOyBp ZiBuZWl0aGVyIHRoYXQgbm9yIHRoZSBjb250YWluZXIgYXJlIHNwZWNpZmllZCAmIzgyMTI7 IGl0IHdpbGwgcmVuZGVyIGEgaHlwZXJsaW5rZWQgcmlnaHQtYXJyb3cgdG8gaW5kaWNhdGUg Y29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBkYXkmIzgyMTc7cyBldmVudDwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zdGVwZmllbGQ8L3NwYW4+IDogdGhlIElEIG9mIGEg ZmllbGQgd2l0aGluIHdoaWNoIGFuIGV2ZW50IG1heSBiZSB0b2xkIHRvIHJlcGVhdC4gTm90 ZSBpdCBpcyB0aGUgZmllbGQmIzgyMTc7cyBJRCBub3QgaXRzIG5hbWUsIHNvIGZvciBjdXN0 b20gZmllbGRzIHlvdSBtdXN0IHVzZSA8Y29kZT5jdXN0b21fMTwvY29kZT4gb3IgPGNvZGU+ Y3VzdG9tXzI8L2NvZGU+IGV0Yy4gV2l0aG91dCB0aGlzIGF0dHJpYnV0ZSAoaXRzIGRlZmF1 bHQpLCBubyByZWN1cnJpbmcgZXZlbnRzIG1heSBiZSBkZWZpbmVkLiBTZWUgPGEgaHJlZj0i I3JlY3VyIj5yZWN1cnJpbmcgZXZlbnRzPC9hPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5za2lwZmllbGQ8L3NwYW4+IDogdGhlIElEIG9mIGEgZmllbGQgZnJvbSB3aGljaCBh cnRpY2xlcyBtYXkgYmUgY2FuY2VsbGVkIGlmIHJlcXVpcmVkLiBBcyBhYm92ZSwgdGhpcyBp cyB0aGUgSUQgKG5vdCBuYW1lKSBvZiB0aGUgZmllbGQuIFNwZWNpZnkgYSBsaXN0IG9mIGRh dGVzIG9uIHdoaWNoIHRoaXMgZXZlbnQgd2lsbCBiZSBjYW5jZWxsZWQuIFNlZSA8YSBocmVm PSIjY2FuY2VsIj5jYW5jZWxsaW5nIGV2ZW50czwvYT48L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+c2hvd3NraXBwZWQ8L3NwYW4+IDogd2hlbiBhbiBldmVudCBpcyBjYW5jZWxs ZWQgeW91IGNhbiByZW1vdmUgaXQgZnJvbSB0aGUgY2FsZW5kYXIgKDxjb2RlPjA8L2NvZGU+ KSBvciBzaG93IGl0ICg8Y29kZT4xPC9jb2RlPikuIERlZmF1bHQ6IDxjb2RlPjA8L2NvZGU+ PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNob3dzcGFubmVkPC9zcGFuPiA6IGV2 ZW50cyB3aXRoIGV4cGlyeSB0aW1lcyBsYXRlciB0aGFuIHRoZWlyIHBvc3RlZCBkYXRlIG1h eSBiZSByZW5kZXJlZCBhY3Jvc3MgbXVsdGlwbGUgY2VsbHMuIElmIHlvdSBkbyBub3Qgd2Fu dCB0aGlzIGZlYXR1cmUgeW91IGNhbiB0dXJuIGl0IG9mZiAoPGNvZGU+MDwvY29kZT4pLiBE ZWZhdWx0OiA8Y29kZT4xPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5o b2xpZGF5czwvc3Bhbj4gOiBsaXN0IG9mIGRhdGVzIHRoYXQgYXJlIGRlY3JlZWQgYXMgaG9s aWRheXMuIEV2ZW50cyBjYW4gYmUgc2NoZWR1bGVkIG9uIGhvbGlkYXlzIGJ1dCBtYXkgbm90 IHJlY3VyIG9yIHNwYW4gYSBob2xpZGF5IHVubGVzcyB5b3UgZXhwbGljaXRseSBzYXkgc28g dmlhIHRoZSA8Y29kZT5ob2xpZGF5ZmxhZ3M8L2NvZGU+IGF0dHJpYnV0ZS4gWW91ciBsaXN0 IG9mIGRhdGVzIG1heSBiZSBkZWZlcnJlZCB0byBhIDxjb2RlPiZsdDt0eHA6dmFyaWFibGUg LyZndDs8L2NvZGU+IGluIHdoaWNoIGNhc2UgZGVmaW5lIHlvdXIgbGlzdCBpbiBhIG5hbWVk IHZhcmlhYmxlIGFuZCB1c2UgPGNvZGU+aG9saWRheXM9JnF1b3Q7dHhwdmFyOm15X3Zhcl9u YW1lJnF1b3Q7PC9jb2RlPiB0byByZWFkIHRoZW0gaW50byB0aGUgcGx1Z2luPC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmhvbGlkYXlmbGFnczwvc3Bhbj4gOiBwZXJtaXQgY2Vy dGFpbiA8YSBocmVmPSIjbmFtaW5nIj5ldmVudCBmbGFnczwvYT4gdG8gYmUgc2NoZWR1bGVk IG9uIGhvbGlkYXlzLiBEZWZhdWx0OiA8Y29kZT5ldmVudDwvY29kZT4gKGkuZS4gYSBzdGFu ZGFyZCBvbmUtb2ZmIGV2ZW50KSBidXQgb3RoZXJzIG1heSBiZSBsaXN0ZWQgYXMgd2VsbC4g Q2hvb3NlIGZyb20gPGNvZGU+ZXZlbnQ8L2NvZGU+LCA8Y29kZT5yZWN1cjwvY29kZT4gb3Ig PGNvZGU+bXVsdGk8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnN0YXRp Yzwvc3Bhbj4gOiBmb3JjZSB0aGUgY2FsZW5kYXIgdG8gYmUgZml4ZWQgdG8gb25lIG1vbnRo L3llYXIgKGkuZS4gbm8gbmF2aWdhdGlvbikuIE1vbnRoIGFuZCB5ZWFyIGRlY2lkZWQgYnkg YXR0cmlidXRlcyA8Y29kZT5tb250aDwvY29kZT4gYW5kIDxjb2RlPnllYXI8L2NvZGU+IG9y ICYjODIxMjsgaWYgb21pdHRlZCBhbmQgbm8gPGNvZGU+bT08L2NvZGU+IGFuZCA8Y29kZT55 PTwvY29kZT4gPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdmFyaWFibGVzIGFyZSBz ZXQgJiM4MjEyOyB0aGUgY3VycmVudCBkYXRlIHdpbGwgYmUgdXNlZDwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5nbXQ8L3NwYW4+IDogcmV0dXJuIGVpdGhlciBsb2NhbCB0aW1l ICg8Y29kZT4wPC9jb2RlPikgYWNjb3JkaW5nIHRvIHRoZSB0aW1lIHpvbmUgc2V0IGluIEJh c2ljIFByZWZzLCBvciA8c3BhbiBjbGFzcz0iY2FwcyI+R01UPC9zcGFuPiB0aW1lICg8Y29k ZT4xPC9jb2RlPikuIERlZmF1bHQ6IDxjb2RlPjA8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPmxhbmc8L3NwYW4+IDogYW4gPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwv c3Bhbj4gbGFuZ3VhZ2UgY29kZSB0aGF0IGZvcm1hdHMgdGltZSBzdHJpbmdzIHN1aXRhYmxl IGZvciB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlIChvciBsb2NhbGUpIGFzIGRlZmluZWQgYnkg PGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fNjM5Ij48c3BhbiBj bGFzcz0iY2FwcyI+SVNPPC9zcGFuPiA2Mzk8L2E+LiBEZWZhdWx0OiB1bnNldCAoaS5lLiB1 c2UgdGhlIHZhbHVlIGFzIHN0YXRlZCBpbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFu PiBwcmVmcyk8L2xpPgoJPC91bD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0iYXR0c3R5bGVz Ij5TdHlsZSBhdHRyaWJ1dGVzPC9oMz4KCgk8cD5PbmNlIHlvdSBoYXZlIHR3ZWFrZWQgeW91 ciBiYXNpYyBjYWxlbmRhciBhcyBkZXNjcmliZWQgYWJvdmUgeW91IGNhbiBtb3ZlIG9udG8g dGhlIHN0eWxlIGF0dHJpYnV0ZXMgc28geW91IG1heSBnZXQgYXQgZWFjaCBmYWNldCBvZiB0 aGUgY2FsZW5kYXIgYW5kIHZpc3VhbGx5IGFsdGVyIGl0OjwvcD4KCgk8dWw+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5jbGFzc2xldmVsczwvc3Bhbj4gOiBjbGFzc2VzIGNhbiBiZSBh cHBsaWVkIGF0IHRoZSBldmVudCBsZXZlbCAoc28geW91IGNhbiBjb2xvdXIgZWFjaCBldmVu dCBpbiBhIGNlbGwpLCBvciB0aGUgY2VsbCBsZXZlbCAoc28geW91IGNhbiBjb2xvdXIgdGhl IHdob2xlIGRheSksIG9yIGJvdGguIFlvdSBtYXkgYWxzbyBwcm9tb3RlIChpLmUuIGNvcHkp IGFsbCBldmVudC1sZXZlbCBjbGFzc2VzIHRoYXQgb2NjdXIgaW4gYSBkYXkgdG8gdGhlIGNl bGwgbGV2ZWwgc28geW91IGNhbiBjb2xvdXIgdGhlIGNlbGwgYmFzZWQgb24gdGhlIGV2ZW50 cyB0aGF0IGl0IGNvbnRhaW5zLiBDb21tYS1zZXBhcmF0ZSBhbnkgb2YgPGNvZGU+ZXZlbnQ8 L2NvZGU+IChmb3IgcmVuZGVyaW5nIGV2ZW50LWxldmVsIHN0eWxlcyksIDxjb2RlPmNlbGw8 L2NvZGU+IChmb3IgcmVuZGVyaW5nIHN0eWxlcyBhdCB0aGUgY2VsbCBsZXZlbCksIG9yIDxj b2RlPmNlbGxwbHVzPC9jb2RlPiAoZm9yIGNvcHlpbmcgdW5pcXVlIGV2ZW50IGNsYXNzZXMg dG8gdGhlIGNlbGwpLiBOb3RlIHlvdSB3aWxsIG5vdCBuZWVkIHRvIHVzZSA8Y29kZT5jZWxs PC9jb2RlPiBhbmQgPGNvZGU+Y2VsbHBsdXM8L2NvZGU+IHRvZ2V0aGVyIGJlY2F1c2UgdGhl IGxhdHRlciBvdmVycmlkZXMgdGhlIGZvcm1lciwgYnV0IHRoZXJlJiM4MjE3O3Mgbm8gaGFy bSBpZiB5b3UgZG8uIERlZmF1bHQ6IDxjb2RlPmNlbGwsIGV2ZW50PC9jb2RlPjwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jbGFzc3ByZWZpeGVzPC9zcGFuPiA6IGEgY29tbWEt c2VwYXJhdGVkIGxpc3Qgb2YgdXAgdG8gdHdvIHByZWZpeGVzIHRvIGFwcGx5IHRvIHlvdXIg Y2xhc3MgbmFtZXMuIFRoZSBmaXJzdCBwcmVmaXggaXMgYXBwbGllZCB0byBjZWxsLWxldmVs IGNsYXNzZXMgYW5kIHRoZSBzZWNvbmQgcHJlZml4IGlzIGFwcGxpZWQgdG8gZXZlbnQgbGV2 ZWwgY2xhc3NlcyBzbyB5b3UgbWF5IGRpc3Rpbmd1aXNoIHRoZW0gaWYgeW91IHdpc2guIElm IHlvdSBvbmx5IHNwZWNpZnkgb25lIHByZWZpeCBpdCB3aWxsIGJlIHVzZWQgZm9yIGJvdGgg dHlwZXMgb2YgY2xhc3MuIElmIHlvdSB1c2UgPGNvZGU+Y2xhc3NwcmVmaXhlcz0mcXVvdDsm cXVvdDs8L2NvZGU+IHRoZW4gbm8gcHJlZml4ZXMgd2lsbCBiZSB1c2VkIGF0IGFsbC4gRGVm YXVsdDogPGNvZGU+c21kX2NhbF8sIHNtZF9jYWxfZXZfPC9jb2RlPjwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5jbGFzczwvc3Bhbj4gOiB0aGUgY2xhc3MgbmFtZSAocGx1cyBj bGFzcyBwcmVmaXgpIHRvIGFwcGx5IHRvIHRoZSBjYWxlbmRhciB0YWJsZSBpdHNlbGYuIERl ZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnJvd2NsYXNzPC9z cGFuPiA6IHRoZSBjbGFzcyBuYW1lIChwbHVzIGNsYXNzIHByZWZpeCkgdG8gYXBwbHkgdG8g ZWFjaCB0YWJsZSByb3cuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPmNlbGxjbGFzczwvc3Bhbj4gOiB0aGUgY2xhc3MgbmFtZSAocGx1cyBjbGFzcyBw cmVmaXgpIHRvIGFwcGx5IHRvIGVhY2ggdGFibGUgY2VsbC4gRGVmYXVsdDogdW5zZXQ8L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZW1wdHljbGFzczwvc3Bhbj4gOiB0aGUgY2xh c3MgbmFtZSAocGx1cyBjbGFzcyBwcmVmaXgpIHRvIGFwcGx5IHRvIGFueSBjZWxscyB0aGF0 IGRvbiYjODIxNzt0IGNvbnRhaW4gYSBkYXkgbnVtYmVyIChpLmUuIHRoZSBibGFuayBjZWxs cyBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiBhIG1vbnRoKS4gRGVmYXVsdDogPGNvZGU+ZW1w dHk8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmlzb3dlZWtjbGFzczwv c3Bhbj4gOiB0aGUgY2xhc3MgbmFtZSAocGx1cyBjbGFzcyBwcmVmaXgpIHRvIGFwcGx5IHRv IGVhY2ggY2VsbCBjb250YWluaW5nIGFuIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+ IHdlZWsgKGlmIDxjb2RlPmlzb3dlZWtzPSZxdW90OzEmcXVvdDs8L2NvZGU+KS4gRGVmYXVs dDogPGNvZGU+d2VlazwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bmF2 Y2xhc3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgKHBsdXMgY2xhc3MgcHJlZml4KSB0byBh cHBseSB0byB0aGUgbmV4dC9wcmV2IG1vbnRoIG5hdmlnYXRpb24gYXJyb3dzLiBEZWZhdWx0 OiA8Y29kZT5uYXY8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm15Y2xh c3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgKHBsdXMgY2xhc3MgcHJlZml4KSB0byBhcHBs eSB0byBib3RoIHRoZSBtb250aCBhbmQgeWVhciBpbiB0aGUgY2FsZW5kYXIgaGVhZGVyIChl aXRoZXIgdGhlIDxjb2RlPiZsdDtzcGFuJmd0OzwvY29kZT4gb3IgPGNvZGU+Jmx0O3NlbGVj dCZndDs8L2NvZGU+IHRhZ3MpLiBJZiA8Y29kZT5teXdyYXB0YWc8L2NvZGU+IGlzIHVzZWQs IHRoZSBjbGFzcyBpcyBhcHBsaWVkIHRvIHRoZSB3cmFwdGFnIGluc3RlYWQuIERlZmF1bHQ6 IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmV2ZW50Y2xhc3Nlczwvc3Bh bj4gOiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGl0ZW1zIHRvIGFkZCBhcyBjbGFzc2Vz IHRvIGVhY2ggZXZlbnQgKGVhY2ggcHJlZml4ZWQgd2l0aCB0aGUgZXZlbnQgcHJlZml4KS4g SXQgZGVmYXVsdHMgdG8gPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+IHNvIGl0IGFkZHMgdGhlIENh dGVnb3J5MSBhbmQgMiBuYW1lcyBhcyBjbGFzcyBpZGVudGlmaWVycyB0byBlYWNoIGV2ZW50 LiBUaHVzLCBvdXQgb2YgdGhlIGJveCwgeW91IGNhbiBzdHlsZSBldmVudHMgYnkgY2F0ZWdv cnkuIDxkaXYgY2xhc3M9ImJyZWFrIj5JZiB5b3Ugd2lzaCB0byBleHRlbmQgb3IgYWx0ZXIg dGhpcywganVzdCBnaXZlIGEgbGlzdCBvZiBmaWVsZHMgdGhhdCB5b3Ugd2FudCB0byBhcHBs eSB0byB0aGUgZXZlbnQgKGUuZy4gPGNvZGU+ZXZlbnRjbGFzc2VzPSZxdW90O0lELCBBdXRo b3JJRCwgY3VzdG9tXzUmcXVvdDs8L2NvZGU+IHdvdWxkIGFkZCB0aHJlZSBjbGFzc2VzIHRv IGVhY2ggZXZlbnQgY29ycmVzcG9uZGluZyB0byB0aGUgZXZlbnQmIzgyMTc7cyBJRCwgaXRz IGF1dGhvciAobG9naW4pIG5hbWUgYW5kIHRoZSBjb250ZW50cyBvZiBjdXN0b21fNSkuIE9m IGNvdXJzZSwgaWYgeW91IHVzZSA8Y29kZT5jZWxscGx1czwvY29kZT4gbW9kZSB0aGVzZSBj bGFzc2VzIHdpbGwgYmUgY29waWVkIHRvIHRoZSBjZWxsIGxldmVsLiA8L2Rpdj48ZGl2IGNs YXNzPSJicmVhayI+U29tZSBzcGVjaWFsIG5hbWVzIGV4aXN0OiA8Y29kZT5jYXRlZ29yeTwv Y29kZT4gcmV0dXJucyBib3RoIENhdGVnb3J5MSBhbmQgQ2F0ZWdvcnkyIChpZiBzZXQpOyA8 Y29kZT5nY2F0PC9jb2RlPiB3aWxsIHJldHVybiB0aGUgY3VycmVudCAmIzgyMTY7Z2xvYmFs JiM4MjE3OyBjYXRlZ29yeSAoaWYgY3VycmVudGx5IGZpbHRlcmluZyBieSBjYXRlZ29yeSk7 IDxjb2RlPmF1dGhvcjwvY29kZT4gcmV0dXJucyB0aGUgYXV0aG9yIElEIChpZiBjdXJyZW50 bHkgZmlsdGVyaW5nIGJ5IGF1dGhvcik7IDxjb2RlPnNlY3Rpb248L2NvZGU+IGdpdmVzIHRo ZSBjdXJyZW50IHNlY3Rpb248L2Rpdj48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ ZXZlbnR3cmFwdGFnPC9zcGFuPiA6IHRoZSAoWClIVE1MIHRhZywgd2l0aG91dCBpdHMgYnJh Y2tldHMsIHRvIHdyYXAgZWFjaCBldmVudCB3aXRoLiBEZWZhdWx0OiA8Y29kZT5zcGFuPC9j b2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5teXdyYXB0YWc8L3NwYW4+IDog dGhlIChYKUhUTUwgdGFnLCB3aXRob3V0IGl0cyBicmFja2V0cywgdG8gd3JhcCBhcm91bmQg PGVtPmJvdGg8L2VtPiBtb250aCArIHllYXIgZHJvcGRvd24gc2VsZWN0IGxpc3RzIGFuZCBv cHRpb25hbCBzdWJtaXQgYnV0dG9uIChpdCB3cmFwcyB0aGUgbG90LCBjb21iaW5lZCkuIERl ZmF1bHQ6IHVuc2V0PC9saT4KCTwvdWw+CgoJPGgyIGlkPSJldmVudHMiPlN0YW5kYXJkIGV2 ZW50czwvaDI+CgoJPHA+Tm9ybWFsLCBlbXB0eSBjZWxscyBkb24mIzgyMTc7dCBoYXZlIGEg Y2xhc3MgYXNzaWduZWQgdG8gdGhlbSB1bmxlc3MgeW91IHNwZWNpZnkgb25lIHdpdGggPGNv ZGU+Y2VsbGNsYXNzPC9jb2RlPi4gQW55IGNlbGwgdGhhdCBjb250YWlucyBhbiBldmVudCAo b2YgYW55IHR5cGUpIGlzIGZpcnN0IGdpdmVuIHRoZSBmbGFnIDxjb2RlPmV2ZW50PC9jb2Rl PiAocGx1cyB0aGUgY2xhc3MtbGV2ZWwgcHJlZml4KS4gSWYgdGhhdCBjZWxsIGZhbGxzIG9u IGEgaG9saWRheSwgaXQgaXMgYWxzbyBnaXZlbiB0aGUgY2xhc3MgPGNvZGU+aG9sczwvY29k ZT4uIFRoZSB2YXJpb3VzIG90aGVyIGZsYWdzIChhcyBkZXRhaWxlZCBiZWxvdykgYXJlIHRo ZW4gYWRkZWQgdG8gdGhpcyBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIG5hdHVyZSBvZiB0 aGUgZXZlbnQuIEluIGFkZGl0aW9uLCB0aGUgY3VycmVudCBkYXkgaXMgZ2l2ZW4gdGhlIGNs YXNzIG5hbWUgPGNvZGU+dG9kYXk8L2NvZGU+IChwbHVzIGNsYXNzIHByZWZpeCkuPC9wPgoK CTxoMiBpZD0icmVjdXIiPlJlY3VycmluZyBldmVudHM8L2gyPgoKCTxwPklmIHlvdSBoYXZl IG5vbWluYXRlZCBhbiBhcnRpY2xlIGZpZWxkIGFzIHlvdXIgPGNvZGU+c3RlcGZpZWxkPC9j b2RlPiB5b3UgbWF5IGVudGVyIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZnJlcXVlbmNp ZXMgYXQgd2hpY2ggdGhpcyBldmVudCBpcyB0byBiZSByZXBlYXRlZC4gVGhlIGZvcm1hdCBv ZiB0aGUgcmVwZXRpdGlvbiBpcyAmIzgyMjA7bnVtYmVyIGludGVydmFsJiM4MjIxOywgZS5n LiA8Y29kZT40IHdlZWtzPC9jb2RlPiBvciA8Y29kZT4xMCBkYXlzPC9jb2RlPiBvciA8Y29k ZT42IG1vbnRoczwvY29kZT4uIFRoZSBwbHVnaW4gd2lsbCBkbyBpdHMgYmVzdCB0byBmaWd1 cmUgb3V0IHdoYXQgeW91IG1lYW4uPC9wPgoKCTxwPklmIHlvdSBjYW4gZmluZCBhIHVzZSBm b3IgaXQsIHlvdSBtYXkgc3BlY2lmeSBtdWx0aXBsZSBmcmVxdWVuY2llcywgZm9yIGV4YW1w bGUgPGNvZGU+MyBkYXlzLCAxIHdlZWs8L2NvZGU+LiBTbyB5b3Ugd291bGQgc2VlIHRoYXQg ZXZlbnQgb24gdGhlIGZpcnN0IGRheSwgdGhlbiB0aGUgM3JkLCA2dGgsIDd0aCwgOXRoLCAx MnRoLCAxNHRoLCAxNXRoLCAxOHRoLCAyMXN0LCAyNHRoJiM4MjMwOyBhbmQgc28gb24gZGF5 cyB0aGVyZWFmdGVyLiBOb3RlIHRoYXQgdGhlIGV2ZW50IG9ubHkgb2NjdXJzIG9uY2Ugb24g dGhlIDIxc3QgZGF5IGV2ZW4gdGhvdWdoIHRoZSB0d28gZnJlcXVlbmNpZXMgY2xhc2guPC9w PgoKCTxwPlRoZSByZXBldGl0aW9uIHdpbGwgY29udGludWUgZm9yZXZlciB1bmxlc3MgeW91 IHNwZWNpZnkgdGhhdCB0aGUgZXZlbnQgZXhwaXJlcyBieSBzZXR0aW5nIGFuIGV4cGlyeSB0 aW1lIHVuZGVyIHRoZSBhcnRpY2xlJiM4MjE3O3MgPGVtPk1vcmU8L2VtPiBhcmVhLiBFYWNo IGNlbGwgdGhhdCBjb250YWlucyBhIHJlY3VycmluZyBldmVudCB3aWxsIGJlIGZsYWdnZWQg d2l0aCA8Y29kZT5yZWN1cjwvY29kZT4gKHBsdXMgdGhlIGNlbGwtbGV2ZWwgY2xhc3MgcHJl Zml4KS48L3A+CgoJPGgyIGlkPSJjYW5jZWwiPkNhbmNlbGxpbmcgZXZlbnRzPC9oMj4KCgk8 cD5QbGFucyBjaGFuZ2UgYW5kIHlvdSBtYXkgZmluZCB0aGF0IGEgZ2lnIGhhcyB0byBiZSBj YW5jZWxsZWQgZm9yIHdoYXRldmVyIHJlYXNvbi4gUGVyaGFwcyB5b3UgYWR2ZXJ0aXNlIGEg d2Vla2x5IGJvb3QgZmFpciBidXQgdGhlIGZpZWxkIGlzIHdhdGVybG9nZ2VkIG9uZSB3ZWVr LiBObyBwcm9ibGVtLiBOb21pbmF0ZSBhIDxjb2RlPnNraXBmaWVsZDwvY29kZT4gaW4geW91 ciA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxlbmRhciAvJmd0OzwvY29kZT4gdGFnIGFuZCBlbnRl ciB0aGUgZGF0ZSBvZiB0aGUgY2FuY2VsbGVkIGV2ZW50LjwvcD4KCgk8cD5Vc2UgYW55IGFj Y2VwdGFibGUgZm9ybWF0LCBidXQgZGVyaXZhdGl2ZXMgb2YgZGQtbW9udGhuYW1lLXl5eXkg b3IgbW9udGhuYW1lLWRkLXl5eXkgYXJlIHRoZSBtb3N0IHVuYW1iaWd1b3VzIHRvIGF2b2lk IHRoZSBwcm9ibGVtcyBvZiBob3cgdGhlIHBsdWdpbiBtaWdodCBpbnRlcnByZXQgPGNvZGU+ MS81PC9jb2RlPiBhcyBKYW4gNXRoIG9yIE1heSAxc3QuIFlvdSBjYW4gc3BlY2lmeSBhcyBt YW55IGNhbmNlbGxhdGlvbnMgYXMgeW91IGxpa2U7IGNvbW1hLXNlcGFyYXRlIGVhY2ggb25l LjwvcD4KCgk8cD5CeSBkZWZhdWx0IHRoZSBldmVudHMgd2lsbCBub3QgYXBwZWFyIG9uIHRo ZSBjYWxlbmRhci4gVGhlcmUgd2lsbCBiZSBhIGNvbnNwaWN1b3VzIGhvbGUgaW4gdGhlIHJl cGV0aXRpb24sIHRob3VnaCB0aGUgY2VsbCBjbGFzcyB3aWxsIGJlIGZsYWdnZWQgYXMgPGNv ZGU+cmVjdXI8L2NvZGU+IGFuZCA8Y29kZT5jYW5jZWw8L2NvZGU+IHNvIHlvdSBtYXkgc3R5 bGUgdGhlIGJveC4gSWYgeW91IHN3aXRjaCA8Y29kZT5zaG93c2tpcHBlZD0mcXVvdDsxJnF1 b3Q7PC9jb2RlPiB0aGUgZXZlbnQgd2lsbCBhcHBlYXIgaW4gdGhlIGNlbGwgYXMgbm9ybWFs OyB0aGUgc2FtZSA8Y29kZT5jYW5jZWw8L2NvZGU+IGFuZCA8Y29kZT5yZWN1cjwvY29kZT4g Y2xhc3NlcyB3aWxsIGFwcGx5IHRvIHRoZSBjZWxsIGFuZCB0aGUgZXZlbnQgc28geW91IG1h eSBzdHlsZSBvbmUgb3IgYm90aC48L3A+CgoJPHA+SXQgaXMgd29ydGggbm90aW5nIHRoYXQg PGVtPmV2ZW50IGZsYWdzPC9lbT4gYWx3YXlzIHRha2UgdGhlICYjODIxNjtjbGFzcyYjODIx NzsgKDFzdCkgcHJlZml4ICYjODIxMjsgd2hldGhlciB0aGV5IGFwcGVhciBhdCB0aGUgY2xh c3Mgb3IgY2VsbCBsZXZlbHMuIFRoaXMgaXMgc28geW91IGNhbiBhcHBseSBhIHNpbWlsYXIg Y29sb3VyIHRvIHRoZSBmbGFncyBpZiB5b3Ugd2lzaCBvciB0YXJnZXQgdGhlbSB2aWEgdGhl aXIgd3JhcCB0YWcuIFRoZSBvbmx5IGNsYXNzZXMgdGhhdCB0YWtlIHRoZSAmIzgyMTY7ZXZl bnQmIzgyMTc7ICgybmQpIHByZWZpeCBhcmUgdGhlIGZpZWxkcyB5b3Ugc3BlY2lmeSBpbiA8 Y29kZT5ldmVudGNsYXNzZXM8L2NvZGU+LjwvcD4KCgk8aDIgaWQ9Im11bHRpIj5NdWx0aXBs ZSAoc3Bhbm5lZCkgZXZlbnRzPC9oMj4KCgk8cD5BbnkgZXZlbnQgdGhhdCBoYXMgYSBzdGFy dCBkYXRlIGFuZCBhbiBleHBpcnkgZGF0ZSB0aGF0IGlzIGEgZGF5IG9yIG1vcmUgbGF0ZXIs IGFuZCA8ZW0+ZG9lcyBub3Q8L2VtPiBoYXZlIGFueSByZXBldGl0aW9uIHNldCBpbiBpdCA8 Y29kZT5zdGVwZmllbGQ8L2NvZGU+LCBpcyBmbGFnZ2VkIGFzIGEgPGNvZGU+bXVsdGk8L2Nv ZGU+LiBCeSBkZWZhdWx0IHRoZSBmaXJzdCBldmVudCBpcyBkaXNwbGF5ZWQgaW4gZnVsbCBh bmQgZWFjaCAmIzgyMTY7Y29udGludWF0aW9uJiM4MjE3OyBldmVudCBpcyBzaG93biBvbmx5 IGFzIGEgcmlnaHQgYXJyb3cgaW4gc3Vic2VxdWVudCBjZWxscyAob24gaG92ZXIsIHRoZSBl dmVudCB0aXRsZSBpcyBkaXNwbGF5ZWQpLjwvcD4KCgk8cD5FdmVudHMgbWF5IHNwYW4gbW9u dGhzIG9yIHllYXJzIGFuZCB0aGUgcGx1Z2luIGZpZ3VyZXMgZXZlcnl0aGluZyBvdXQgdXNp bmcgdGhlIGZsYWdzOyB0aGUgZmlyc3QgY2VsbCBvZiBhIHNwYW5uZWQgc2V0IGlzIGEgPGNv ZGU+bXVsdGlmaXJzdDwvY29kZT4sIHRoZSBsYXN0IGNlbGwgaXMgYSA8Y29kZT5tdWx0aWxh c3Q8L2NvZGU+LCBldmVyeSBvdGhlciBjZWxsIGlzIGEgPGNvZGU+bXVsdGk8L2NvZGU+IDxl bT5leGNlcHQ8L2VtPiBpZiB0aGUgZXZlbnQgcm9sbHMgb3ZlciBpbnRvIHRoZSBuZXh0IG1v bnRoLiBJbiB0aGF0IGNhc2UsIHRoZSBlbnRyeSBvbiB0aGUgMXN0IG9mIHRoZSBtb250aCBp cyBhIDxjb2RlPm11bHRpcHJldjwvY29kZT4gdG8gaW5kaWNhdGUgaXQgYmVsb25ncyB0byBh IHByZXZpb3VzIGV2ZW50LiBJZiB0aGUgZmlyc3Qgb2YgdGhlIG1vbnRoIGlzIGl0c2VsZiB0 aGUgbGFzdCBkYXkgb2YgdGhlIGV2ZW50LCB0aGUgPGNvZGU+bXVsdGlwcmV2PC9jb2RlPiBp cyBkcm9wcGVkIGluIGZhdm91ciBvZiA8Y29kZT5tdWx0aWxhc3Q8L2NvZGU+LjwvcD4KCgk8 cD5Zb3UgbWF5IHN3aXRjaCBvZmYgdGhpcyBiZWhhdmlvdXIgY29tcGxldGVseSB3aXRoIHRo ZSA8Y29kZT5zaG93c3Bhbm5lZD0mcXVvdDswJnF1b3Q7PC9jb2RlPiBhdHRyaWJ1dGUuIEV2 ZW50cyB0aGF0IGhhdmUgYW4gZXhwaXJ5IGFyZSB0aGVuIGp1c3QgY29tbW9uIGV2ZW50cy48 L3A+CgoJPHA+WW91IG1heSBlbGVjdCB0byBwcm9jZXNzICYjODIxNjtjb250aW51YXRpb24m IzgyMTc7IGNlbGxzIHdpdGggYSBzZXBhcmF0ZSBmb3JtIChjYWxsZWQgYSA8Y29kZT5zcGFu Zm9ybTwvY29kZT4gYmVjYXVzZSAmIzgyMTY7Y29udGZvcm0mIzgyMTc7IGRpZG4mIzgyMTc7 dCBzb3VuZCB2ZXJ5IG5pY2UhKS4gSWYgbm90LCB0aGUgc3RhbmRhcmQgPGNvZGU+Zm9ybTwv Y29kZT4gb3IgY29udGFpbmVyIHdpbGwgYmUgdXNlZCBhbmQgeW91IHdpbGwgaGF2ZSB0byBk aXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgbXVsdGkgZmxhZ3MgeW91cnNlbGYg dXNpbmcgdGhlIDxhIGhyZWY9IiNpZmNhbCI+Y29uZGl0aW9uYWwgdGFnPC9hPi48L3A+CgoJ PHA+WW91IGNhbiBhbHNvIGNhbmNlbCBkYXlzIG9mIGEgc3Bhbm5lZCBldmVudCBpbiB0aGUg c2FtZSBtYW5uZXIgYXMgeW91IGRvIHdpdGggPGEgaHJlZj0iI3JlY3VyIj5yZWN1cnJpbmcg ZXZlbnRzPC9hPi4gVGhlIGNlbGwgaXMgZHV0aWZ1bGx5IGZsYWdnZWQgd2l0aCB0aGUgcmVs ZXZhbnQgJiM4MjE2O211bHRpJiM4MjE3OyBmbGFnICsgPGNvZGU+Y2FuY2VsPC9jb2RlPi4g Tm90ZSB5b3UgbWF5IDxlbT5ub3Q8L2VtPiBjYW5jZWwgdGhlIGZpcnN0IGRheSBvZiB0aGUg ZXZlbnQsIGJlY2F1c2UgeW91IG1pZ2h0IGFzIHdlbGwganVzdCBtb3ZlIHRoZSBldmVudCBv bmUgZGF5IGFuZCBhcG9sb2dpc2UhPC9wPgoKCTxoMiBpZD0iaG9saWRheXMiPkhvbGlkYXlz PC9oMj4KCgk8cD5QdWJsaWMgaG9saWRheXMgbmVlZCBub3QgYmUgYSBudWlzYW5jZSB0byB5 b3VyIHJlY3VycmluZyBldmVudHMuIEdpdmUgdGhlIHBsdWdpbiBhIGxpc3QgYW5kIGl0JiM4 MjE3O2xsIG1ha2Ugc3VyZSB0aGF0IGFueSByZWN1cnJpbmcgb3IgbXVsdGkgZXZlbnRzIGFy ZSBub3Qgc2NoZWR1bGVkIG9uIHRob3NlIGRheXMuIFN0YW5kYXJkIG9uZS1vZmYgZXZlbnRz IGFyZSBwZXJtaXR0ZWQgYnkgZGVmYXVsdCBiZWNhdXNlIHlvdSBtaWdodCB3YW50IHRvIG9y Z2FuaXNlIGEgc3BlY2lhbCBldmVudCBvbiB0aGF0IGRheS48L3A+CgoJPHA+VGhlIGxpc3Qg b2YgZGF0ZXMgeW91IHNwZWNpZnkgY2FuIGJlIGVudGVyZWQgZGlyZWN0bHkgaW4gYSBzdHJp bmcgaW4gdGhlIDxjb2RlPmhvbGlkYXlzPC9jb2RlPiBhdHRyaWJ1dGUgb3IgaW4gYSA8Y29k ZT4mbHQ7dHhwOnZhcmlhYmxlIC8mZ3Q7PC9jb2RlPi4gVGhlIGxhdHRlciBpcyBtb3JlIGZ1 biBzbyBsZXQmIzgyMTc7cyB0cnkgdGhhdDo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNv ZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnZhcmlhYmxlIG5hbWU9JnF1b3Q7bmF0X2hvbHMm cXVvdDsKICAgICB2YWx1ZT0mcXVvdDtEZWMgMjUsIERlYyAyNiwgMzEvRGVjLCBKYW4tMSwK ICAgICAgICBNYXkgNCAyMDA5LCAyMDA5LTA4LTMxJnF1b3Q7IC8mZ3Q7CiZsdDt0eHA6c21k X2NhbGVuZGFyIGhvbGlkYXlzPSZxdW90O3R4cHZhcjpuYXRfaG9scyZxdW90OyAvJmd0Owo8 L2NvZGU+PC9wcmU+CgoJPHA+VGhlcmUgeW91IGdvLCBhbGwgZG9uZS4gVGhlIGxpc3QgdGhl cmUgc2hvd3Mgc29tZSBvZiB0aGUgdmFyaWV0eSBhbmQgYnJlYWR0aCBvZiBmb3JtYXRzIHRo YXQgdGhlIHBsdWdpbiBhbGxvd3MuIFRoZXJlIGFyZSBtb3JlLiBOb3RlIHRoYXQgc29tZSBl dmVudHMgaGF2ZSBhIHllYXIgYW5kIG90aGVycyBkb24mIzgyMTc7dC4gVGhlIG9uZXMgd2l0 aG91dCBhIHllYXIgb2NjdXIgb24gdGhlIHNhbWUgZGF0ZSBldmVyeSB5ZWFyIHdoZXJlYXMg dGhlIG9uZXMgd2l0aCBhIHllYXIgd2lsbCBvbmx5IG9jY3VyIG9uIHRoYXQgc3BlY2lmaWMg ZGF0ZS48L3A+CgoJPHA+T25jZSB5b3VyIGRhdGVzIGFyZSBkZWZpbmVkIHlvdSBjYW4gY29u dHJvbCB3aGNoIGV2ZW50cyBhcmUgYWxsb3dlZCB0byBmYWxsIG9uIHRob3NlIGRhdGVzIHZp YSB0aGUgPGNvZGU+aG9saWRheWZsYWdzPC9jb2RlPi4gSnVkaWNpYWwgdXNlIG9mIHRoYXQg YXR0cmlidXRlIGFuZCB0aGUgPGNvZGU+c2hvd3NwYW5uZWQ8L2NvZGU+LCA8Y29kZT5zaG93 c2tpcHBlZDwvY29kZT4gYW5kIDxjb2RlPmZvcm08L2NvZGU+IG9yIDxjb2RlPnNwYW5mb3Jt PC9jb2RlPiB3aXRoIHRoZSA8YSBocmVmPSIjaWZjYWwiPmNvbmRpdGlvbmFsIHRhZzwvYT4g Y2FuIGdpdmUgeW91IGEgd2lkZSB2YXJpZXR5IG9mIHdheXMgdG8gc3R5bGUgZXZlbnRzLjwv cD4KCgk8cD5Ib2xpZGF5cyBhcmUgZ2l2ZW4gdGhlIGV2ZW50IGZsYWcgPGNvZGU+aG9sczwv Y29kZT4sIGFuZCBhbnkgZXZlbnQgdGhhdCBpcyBub3Qgc3BlY2lmaWNhbGx5IHBlcm1pdHRl ZCBieSB0aGUgPGNvZGU+aG9saWRheWZsYWdzPC9jb2RlPiBpcyBhdXRvbWF0aWNhbGx5IGFz c2lnbmVkIGEgPGNvZGU+Y2FuY2VsPC9jb2RlPiBmbGFnIGlmIGl0IGZhbGxzIG9uIG9uZSBv ZiB0aGUgZGF5cy48L3A+CgoJPGgyIGlkPSJzaXplZGlmZiI+RGlmZmVyZW5jZXMgYmV0d2Vl biBsYXJnZSBhbmQgc21hbGwgY2FsZW5kYXJzPC9oMj4KCgk8cD5Ob3QgYSBsb3QhIEJ1dCB0 aGVyZSBhcmUgc29tZSBzdWJ0bGV0aWVzOjwvcD4KCgk8dWw+CgkJPGxpPkJ5IGRlZmF1bHQs IG5vIGV2ZW50cyBhcmUgcGxhY2VkIGluIHRoZSBzbWFsbCBjYWxlbmRhci4gWW91IGNhbiBh ZGQgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2lzaCBiZWNhdXNlIHlvdSBjYW4gdXNlIHRoZSBz YW1lIGZvcm0vY29udGFpbmVyIG1lY2hhbmlzbSBhcyB0aGUgbGFyZ2UgY2FsZW5kYXI8L2xp PgoJCTxsaT5UaGUgb25seSB0aGluZyByZW5kZXJlZCBpbiBhIHNtYWxsIGNhbGVuZGFyIGNl bGwgaXMgdGhlIGNsYXNzIGluZm9ybWF0aW9uIHNvIHlvdSBjYW4gY29sb3VyIHRoZSBib3hl cyBieSBldmVudDwvbGk+CgkJPGxpPjxjb2RlPmNsYXNzbGV2ZWxzPC9jb2RlPiBhcmUgaWdu b3JlZDogZXZlcnl0aGluZyBpcyBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIGF0IHRoZSBjZWxs IGxldmVsICg8Y29kZT5ldmVudGNsYXNzZXM8L2NvZGU+IGFyZSBzdGlsbCBob25vdXJlZCBp ZiB5b3Ugd2lzaCB0byB1c2UgYSA8Y29kZT5mb3JtPC9jb2RlPiB0byBwcm9jZXNzIHRoZW0g eW91cnNlbGYpPC9saT4KCQk8bGk+VGhlIHNtYWxsIGNhbGVuZGFyIG91dHB1dHMgeWVhci1t b250aC1kYXktdGl0bGUgb3IgbWVzc3kgcGVybWxpbmtzIG9ubHk8L2xpPgoJPC91bD4KCgk8 cD5Bc2lkZSBmcm9tIHRoYXQgdGhleSYjODIxNztyZSBwcmV0dHkgbXVjaCBpZGVudGljYWwu PC9wPgoKCTxoMiBpZD0iZGF0ZXMiPkRhdGVzLCBnb3RjaGFzIGFuZCBpZGlvc3luY3JhY2ll czwvaDI+CgoJPHA+SWYgdGhlcmUgd2FzIG9uZSBnbG9iYWwgdGltZSB6b25lIHRoZSB3b3Js ZCB3b3VsZCBiZSBzaW1wbGVyLiBTYWRseSwgd2UgYWxsIGxpdmUgaW4gZGlmZmVyZW50IHBs YWNlcyBhbmQgdGhlIEludGVybmV0IEJlYXQgaGFzbiYjODIxNzt0IHJlYWxseSB0YWtlbiBv ZmYuIEV2ZW4gbW9yZSBzYWRseSwgY2VydGFpbiB1cHBlciBlY2hlbG9ucyBvZiBwb3dlciBk ZWNyZWUgdGhhdCB0d2ljZSBhIHllYXIgc29tZSBjb3VudHJpZXMgbXVzdCBhbHRlciB0aGVp ciBjbG9ja3MgdG8gU2F2ZSBEYXlsaWdodCAod2hhdGV2ZXIgdGhhdCBtZWFucykuPC9wPgoK CTxwPjxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGRvZXMgaXRzIGJlc3QgdG8gc2hp ZWxkIHlvdSBmcm9tIHRoaXMgbWF5aGVtIGJ5IGFsbG93aW5nIHlvdSB0byBzcGVjaWZ5IHlv dXIgbG9jYWxlLCB0aW1lIG9mZnNldCBmcm9tIDxzcGFuIGNsYXNzPSJjYXBzIj5HTVQ8L3Nw YW4+LCBhbmQgd2hlbiA8c3BhbiBjbGFzcz0iY2FwcyI+RFNUPC9zcGFuPiBhcHBsaWVzIGlu IHlvdXIgdGltZSB6b25lIChub3QgZm9yZ2V0dGluZyB0aGUgdGltZSB6b25lIG9mIHlvdXIg c2VydmVyIGlmIGl0IGhhcHBlbnMgdG8gYmUgbm93aGVyZSBuZWFyIHlvdSkuPC9wPgoKCTxw PkFuZCB0aGVyZWluIGxpZXMgdGhlIHJ1Yi48L3A+CgoJPHA+Rm9yIGEgY2FsZW5kYXIgc3lz dGVtLCB0aGlzIGlzIHN1Yi1vcHRpbWFsLiBJbiBmYWN0IGl0JiM4MjE3O3MgZG93bnJpZ2h0 IGFubm95aW5nIGJlY2F1c2Ugd2hlbiB5b3Ugc2F5IHRoYXQgYW4gZXZlbnQgaXMgZ29pbmcg dG8gb2NjdXIgYXQgOHBtIGluIHNpeCBtb250aHMmIzgyMTc7IHRpbWUsIHBlc2t5IERheWxp Z2h0IFNhdmluZ3MgbWF5IHRoZW4gYmUgaW4gZWZmZWN0IGFuZCB5b3VyIGV2ZW50IHdpbGwg YXBwZWFyIGFuIGhvdXIgJiM4MjE2O29mZiYjODIxNzsgKGl0IG1heSBsb29rIHdyb25nIGlu IHRoZSBhZG1pbiBpbnRlcmZhY2UgYXMgd2VsbCBhcyBpbiB5b3VyIGNhbGVuZGFyLCBkZXBl bmRpbmcgb24gdGhlIHNldHRpbmdzKS48L3A+CgoJPHA+QWxzbywgaWYgeW91ciBzZXJ2ZXIg b3IgeW91ciBvZmZpY2UgaXMgcmVsb2NhdGVkIGFuZCB5b3UgaGF2ZSB0byBhZGp1c3QgdGlt ZSB6b25lLCBhbGwgeW91ciBiZWF1dGlmdWxseSBjcmFmdGVkIGRhdGVzIHdpbGwgYmUgc2hp ZnRlZC4gV2VsbCwgdGhleSYjODIxNztyZSBub3QgYWN0dWFsbHkgY2hhbmdlZCBpbiB0aGUg ZGF0YWJhc2UgdW5sZXNzIHlvdSBlZGl0IGFuIGFydGljbGUgYW5kIHJlLXNhdmUgaXQsIGJ1 dCB0aGV5IDxlbT5hcHBlYXI8L2VtPiB0byBoYXZlIHNoaWZ0ZWQgYmVjYXVzZSA8c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBpcyB0cnlpbmcgdG8gc2hpZWxkIHlvdSBmcm9tIHRp bWUgYnVyZWF1Y3JhY3kgaW4gYSB3b3JsZCBnb25lIG1hZC48L3A+CgoJPHA+VW5mb3J0dW5h dGVseSB0aGVyZSBpcyBsaXR0bGUgd2UgY2FuIGRvIGFib3V0IHRoaXMgYXQgdGhlIG1vbWVu dCB1bnRpbCB0aGUgd2F5IGRhdGVzIGFyZSBoYW5kbGVkIGluIDxzcGFuIGNsYXNzPSJjYXBz Ij5UWFA8L3NwYW4+IGlzIGNoYW5nZWQuIEJ1dCB0aGVyZSBhcmUgc29tZSBzZXR0aW5ncyB0 aGF0IHlvdSBjYW4gcGxheSB3aXRoIHRvIHRyeSBhbmQgbWFrZSBzZW5zZSBvZiBpdCBhbGwu IE5hbWVseSB0aGUgPGNvZGU+Z210PC9jb2RlPiBhdHRyaWJ1dGUgdG8gdGhlIGNhbGVuZGFy IHBsdWdpbiBhbmQgYW55IG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+JiM4MjE3 O3MgZGF0ZS1iYXNlZCB0YWdzIHN1Y2ggYXMgPGNvZGU+Jmx0O3R4cDpwb3N0ZWQgLyZndDs8 L2NvZGU+IGFuZCA8Y29kZT4mbHQ7dHhwOmV4cGlyZXMgLyZndDs8L2NvZGU+LiBTb21ldGlt ZXMgZmlkZGxpbmcgd2l0aCB0aGF0IGFuZCB0aGUgdGltZSB6b25lL0RTVCBmbGFncyB3aWxs IGhlbHAuIE90aGVyIHRpbWVzIHlvdSYjODIxNztsbCBnZXQgaW4gYSByaWdodCBvbGQgbWVz cy48L3A+CgoJPHA+SWYgYWxsIHRoYXQgZmFpbHMsIHRoZSBjb25kaXRpb25hbCB0YWcgbWF5 IGJlIGFibGUgdG8gaGVscCB5b3UgY29tcGFyZSBjZXJ0YWluIGRhdGVzIGFuZCBhcHBseSBk aWZmZXJlbnQgYXR0cmlidXRlcyBkZXBlbmRpbmcgb24gdGhlIGRheSBvZiB0aGUgeWVhci4g RmFpbGluZyB0aGF0LCBqdXN0IHVzZSA8c3BhbiBjbGFzcz0iY2FwcyI+R01UPC9zcGFuPiBh bmQgcmVmdXNlIHRvIG9ic2VydmUgPHNwYW4gY2xhc3M9ImNhcHMiPkRTVDwvc3Bhbj4gOi0p PC9wPgoKCTxoMiBpZD0iaWZjYWwiPlRhZzogPGNvZGU+Jmx0O3R4cDpzbWRfaWZfY2FsJmd0 OzwvY29kZT48L2gyPgoKCTxwPlRoaXMgY29uZGl0aW9uYWwgdGFnIGFsbG93cyB5b3UgJiM4 MjEyOyBpbnNpZGUgeW91ciBjb250YWluZXIvZm9ybS9zcGFuZm9ybSAgJiM4MjEyOyB0byB0 ZXN0IGNlcnRhaW4gY29uZGl0aW9ucyBvZiB0aGUgY3VycmVudCBldmVudC9jZWxsLiBBdCB0 aGUgbW9tZW50IGl0IGlzIGp1c3QgZm9yIHRlc3RpbmcgdGhlIGV2ZW50IGZsYWdzLCB0aGUg Y2FsZW5kYXIgSUQgb3IgdmFyaW91cyBwYXJ0cyBvZiB0aGUgZGF0ZS4gRm9yIGVuaGFuY2Vk IGNvbmRpdGlvbmFsIGNoZWNraW5nIChwZXJoYXBzIGluIGNvbmp1bmN0aW9uIHdpdGggPGEg aHJlZj0iI2NhbG5vdyIgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPnR4cDpzbWRfY2FsX25v dyAvJmd0OzwvYT4pLCBjb25zaWRlciB0aGUgc21kX2lmIHBsdWdpbi48L3A+CgoJPGgzIGNs YXNzPSJhdHRzICIgaWQ9ImF0dHNpZmNhbCI+QXR0cmlidXRlczwvaDM+CgoJPHVsPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+ZmxhZzwvc3Bhbj4gOiB0aGUgZmxhZyhzKSB5b3Ugd2Fu dCB0byB0ZXN0LCBlYWNoIHNlcGFyYXRlZCBieSBhIGNvbW1hLiBDaG9vc2UgZnJvbTogPGNv ZGU+ZXZlbnQ8L2NvZGU+LCA8Y29kZT5yZWN1cjwvY29kZT4sIDxjb2RlPm11bHRpZmlyc3Q8 L2NvZGU+LCA8Y29kZT5tdWx0aWxhc3Q8L2NvZGU+LCA8Y29kZT5tdWx0aTwvY29kZT4sIDxj b2RlPm11bHRpcHJldjwvY29kZT4sIDxjb2RlPmNhbmNlbDwvY29kZT4sIG9yIDxjb2RlPmhv bHM8L2NvZGU+LiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5jYWxpZDwvc3Bhbj4gOiB0aGUgY2FsZW5kYXIgSUQgeW91IHdpc2ggdG8gY2hlY2sgZm9y IGEgbWF0Y2guIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PnllYXI8L3NwYW4+IDogdGhlIHllYXIgdGhlIGN1cnJlbnQgY2VsbCBmYWxscyBpbi4gRGVm YXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bW9udGg8L3NwYW4+ IDogdGhlIG1vbnRoIG51bWJlciAoMS0xMikgdGhhdCB0aGUgY3VycmVudCBjZWxsIGZhbGxz IGluLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5kYXk8 L3NwYW4+IDogdGhlIGRheSB0aGUgY3VycmVudCBjZWxsIGZhbGxzIGluLiBEZWZhdWx0OiB1 bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5sb2dpYzwvc3Bhbj4gOiB3aGV0 aGVyIHlvdSB3YW50IHRvIGNoZWNrIGlmIDxlbT5hbGw8L2VtPiB0ZXN0cyB5b3Ugbm9taW5h dGVkIGFyZSB0cnVlIGluIHRoZSBjdXJyZW50IGNlbGwgKDxjb2RlPmxvZ2ljPSZxdW90O2Fu ZCZxdW90OzwvY29kZT4pIG9yIDxlbT5hdCBsZWFzdCBvbmU8L2VtPiBvZiB0aGUgdGVzdHMg aXMgdHJ1ZSAoPGNvZGU+bG9naWM9JnF1b3Q7b3ImcXVvdDs8L2NvZGU+KS4gRGVmYXVsdDog PGNvZGU+YW5kPC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxwPllvdSBtYXkgY29tYmluZSB0aGUg dGVzdHMgc28sIGZvciBleGFtcGxlLCB5b3UgY2FuIGNoZWNrIGlmIHRoZSBjZWxsIGlzIG9m IGEgY2VydGFpbiB0eXBlIDxzcGFuIGNsYXNzPSJjYXBzIj5BTkQ8L3NwYW4+IGlzIGxhdGVy IHRoYW4gdGhlIDE1dGggb2YgdGhlIG1vbnRoLjwvcD4KCgk8cD5SdWRpbWVudGFyeSBjb21w YXJhdG9ycyBjYW4gYmUgYXBwbGllZCB0byB0aGUgPGNvZGU+eWVhcjwvY29kZT4sIDxjb2Rl Pm1vbnRoPC9jb2RlPiBhbmQgPGNvZGU+ZGF5PC9jb2RlPiBhdHRyaWJ1dGVzLiBOb3JtYWxs eSB0aGUgdmFsdWUgeW91IHN1cHBseSB3aWxsIGJlIHRlc3RlZCBmb3IgYW4gZXhhY3QgbWF0 Y2ggYnV0IGlmIHlvdSBwcmVmaXggaXQgd2l0aCBvbmUgb2YgdGhlIGZvbGxvd2luZyBjaGFy YWN0ZXIgc2VxdWVuY2VzIHRoZW4gdGhlIGJlaGF2aW91ciBjaGFuZ2VzOjwvcD4KCgk8dWw+ CgkJPGxpPjxjb2RlPiZndDs8L2NvZGU+IHRlc3RzIGlmIGF0dHJpYnV0ZSBpcyA8ZW0+Z3Jl YXRlciB0aGFuPC9lbT4gdGhlIGdpdmVuIHZhbHVlIChlLmcuIDxjb2RlPnllYXI9JnF1b3Q7 Jmd0OzIwMDgmcXVvdDs8L2NvZGU+KTwvbGk+CgkJPGxpPjxjb2RlPiZndDs9PC9jb2RlPiB0 ZXN0cyBpZiBhdHRyaWJ1dGUgaXMgPGVtPmdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bzwvZW0+ IHRoZSBnaXZlbiB2YWx1ZSAoZS5nLiA8Y29kZT5tb250aD0mcXVvdDsmZ3Q7PTcmcXVvdDs8 L2NvZGU+KTwvbGk+CgkJPGxpPjxjb2RlPiZsdDs8L2NvZGU+IHRlc3RzIGlmIGF0dHJpYnV0 ZSBpcyA8ZW0+bGVzcyB0aGFuPC9lbT4gdGhlIGdpdmVuIHZhbHVlIChlLmcuIDxjb2RlPmRh eT0mcXVvdDsmbHQ7MTUmcXVvdDs8L2NvZGU+KTwvbGk+CgkJPGxpPjxjb2RlPiZsdDs9PC9j b2RlPiB0ZXN0cyBpZiBhdHRyaWJ1dGUgaXMgPGVtPmxlc3MgdGhhbiBvciBlcXVhbCB0bzwv ZW0+IHRoZSBnaXZlbiB2YWx1ZSAoZS5nLiA8Y29kZT5tb250aD0mcXVvdDsmbHQ7PTUmcXVv dDs8L2NvZGU+KTwvbGk+CgkJPGxpPjxjb2RlPiE8L2NvZGU+IHRlc3RzIGlmIGF0dHJpYnV0 ZSBpcyA8ZW0+bm90PC9lbT4gdGhlIGdpdmVuIHZhbHVlIChlLmcuIDxjb2RlPmRheT0mcXVv dDshMTUmcXVvdDs8L2NvZGU+KTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iY2FsaW5mbyI+VGFn OiA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxfaW5mbyAvJmd0OzwvY29kZT48L2gyPgoKCTxwPklu c2lkZSB5b3VyIGNvbnRhaW5lci9mb3JtL3NwYW5mb3JtLCB1c2UgdGhpcyB0YWcgdG8gb3V0 cHV0IGNlcnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgZXZlbnQvY2VsbC48 L3A+CgoJPGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0dHNjYWxpbmZvIj5BdHRyaWJ1dGVzPC9o Mz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50eXBlPC9zcGFuPiA6IHRoZSB0 eXBlKHMpIG9mIGluZm9ybWF0aW9uIHlvdSB3YW50IHRvIHJldHVybiwgZWFjaCBzZXBhcmF0 ZWQgYnkgYSBjb21tYS4gQ2hvb3NlIGZyb206IDxjb2RlPmZsYWc8L2NvZGU+LCA8Y29kZT5t b250aDwvY29kZT4sIDxjb2RlPnllYXI8L2NvZGU+LCA8Y29kZT5zZWN0aW9uPC9jb2RlPiwg PGNvZGU+Y2F0ZWdvcnk8L2NvZGU+LCA8Y29kZT5hdXRob3I8L2NvZGU+LCA8Y29kZT5jYWxp ZDwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+am9pbjwvc3Bhbj4gOiB0 aGUgY2hhcmFjdGVycyB5b3Ugd2FudCB0byB1c2UgdG8gc2VwYXJhdGUgZWFjaCBpdGVtIHlv dSBhc2tlZCBmb3IuIERlZmF1bHQ6IGEgc3BhY2U8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+aHRtbDwvc3Bhbj4gOiBJZiBzZXQgdG8gPGNvZGU+MTwvY29kZT4sIHJldHVybnMg bm90IG9ubHkgdGhlIHZhbHVlcyB5b3Ugc3BlY2lmaWVkIGJ1dCB0aGVpciA8c3BhbiBjbGFz cz0iY2FwcyI+VVJMPC9zcGFuPiB2YXJpYWJsZSBuYW1lcyBhcyB3ZWxsLCBnaXZpbmcgeW91 IHRoZSBlbnRpcmUgc3RyaW5nIGFzIGEgdmFsaWQgc2V0IG9mIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+IHBhcmFtZXRlcnMgd2hpY2ggY2FuIGJlIGFkZGVkIHRvIGFuIGFuY2hv ci4gSXQgb3ZlcnJpZGVzIHRoZSA8Y29kZT5qb2luPC9jb2RlPiBhdHRyaWJ1dGUgYW5kIHNl dHMgaXQgdG8gYW4gYW1wZXJzYW5kLiBEZWZhdWx0OiA8Y29kZT4wPC9jb2RlPi48ZGl2IGNs YXNzPSJicmVhayI+VGhpcyBhdHRyaWJ1dGUgaXMgdXNlZnVsIGlmIHlvdSBhcmUgYnVpbGRp bmcgeW91ciBvd24gY29udGVudCBpbnNpZGUgZWFjaCBjZWxsIHZpYSBhIDxjb2RlPmZvcm08 L2NvZGU+IGFuZCB3aXNoIHRvIG1haW50YWluIHRoZSBjdXJyZW50IHNlYXJjaCBlbnZpcm9u bWVudC4gSWYgeW91IGFsbG93IHBlb3BsZSB0byBmaWx0ZXIgZXZlbnRzIGJ5IGNhdGVnb3J5 IG9yIGF1dGhvciB5b3UgY2FuIHVzZSB0aGlzIHRvIHJldHVybiB0aGUgJiM4MjE2O2N1cnJl bnQmIzgyMTc7IHN0YXRlIG9mIGNlcnRhaW4gdmFyaWFibGVzIHNvIHlvdSBjYW4gcGFzcyB0 aGVtIHRvIHRoZSBuZXh0IHBhZ2UgYW5kIG1haW50YWluIHN0YXRlLjwvZGl2PjwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5lc2NhcGU8L3NwYW4+IDogZXNjYXBlIDxzcGFuIGNs YXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBlbnRpdGllcyBzdWNoIGFzIDxjb2RlPiZsdDs8L2Nv ZGU+LCA8Y29kZT4mZ3Q7PC9jb2RlPiBhbmQgPGNvZGU+JmFtcDs8L2NvZGU+IGZvciBwYWdl IHZhbGlkYXRpb24gcHVycG9zZXMuIFNldCB0byA8Y29kZT5lc2NhcGU9JnF1b3Q7JnF1b3Q7 PC9jb2RlPiB0byB0dXJuIGl0IG9mZi4gRGVmYXVsdDogPGNvZGU+aHRtbDwvY29kZT48L2xp PgoJPC91bD4KCgk8aDIgaWQ9ImNhbG5vdyI+VGFnOiA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxf bm93IC8mZ3Q7PC9jb2RlPjwvaDI+CgoJPHA+UmV0dXJuIHRoZSBjdXJyZW50IGRhdGUvdGlt ZSwgZm9ybWF0dGVkIGhvd2V2ZXIgeW91IHBsZWFzZS4gVXNlZnVsIGZvciBleHRyYWN0aW5n IHBhcnRzIG9mIHRoZSBjdXJyZW50IHN5c3RlbSB0aW1lc3RhbXAgdG8gY29tcGFyZSB0aGlu Z3MgdmlhIG90aGVyIGNvbmRpdGlvbmFsIHBsdWdpbnMgb3IgJiM4MjEyOyBldmVudHVhbGx5 ICYjODIxMjsgdGhlIDxjb2RlPiZsdDt0eHA6c21kX2lmX2NhbCZndDs8L2NvZGU+IHRhZy48 L3A+CgoJPGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0dHNjYWxub3ciPkF0dHJpYnV0ZXM8L2gz PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZvcm1hdDwvc3Bhbj4gOiB0aGUg d2F5IHlvdSB3YW50IHRoZSBkYXRlL3RpbWUgcmVwcmVzZW50ZWQuIFVzZSBhbnkgdmFsaWQg PGEgaHJlZj0iaHR0cDovL3VrMi5waHAubmV0L3N0cmZ0aW1lIj5zdHJmdGltZSgpPC9hPiBz dHJpbmcuIERlZmF1bHRzIHRvIHRoZSBkYXRlIGZvcm1hdCB5b3Ugc2V0IGluIEJhc2ljIFBy ZWZzPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmdtdDwvc3Bhbj4gOiByZXR1cm4g ZWl0aGVyIGxvY2FsIHRpbWUgKDxjb2RlPjA8L2NvZGU+KSBhY2NvcmRpbmcgdG8gdGhlIHRp bWUgem9uZSBzZXQgaW4gQmFzaWMgUHJlZnMsIG9yIDxzcGFuIGNsYXNzPSJjYXBzIj5HTVQ8 L3NwYW4+IHRpbWUgKDxjb2RlPjE8L2NvZGU+KS4gRGVmYXVsdDogPGNvZGU+MDwvY29kZT48 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGFuZzwvc3Bhbj4gOiBhbiA8c3BhbiBj bGFzcz0iY2FwcyI+SVNPPC9zcGFuPiBsYW5ndWFnZSBjb2RlIHRoYXQgZm9ybWF0cyB0aW1l IHN0cmluZ3Mgc3VpdGFibGUgZm9yIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UgKG9yIGxvY2Fs ZSkgYXMgZGVmaW5lZCBieSA8YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp L0lTT182MzkiPjxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IDYzOTwvYT4uIERlZmF1 bHQ6IHVuc2V0IChpLmUuIHVzZSB0aGUgdmFsdWUgYXMgc3RhdGVkIGluIDxzcGFuIGNsYXNz PSJjYXBzIj5UWFA8L3NwYW4+IHByZWZzKTwvbGk+Cgk8L3VsPgoKCTxoMiBjbGFzcz0iZXhh bXBsZXMiPkV4YW1wbGVzPC9oMj4KCgk8aDMgaWQ9ImVnMSI+RXhhbXBsZSAxPC9oMz4KCgk8 cD5UaGUgYmVhdXR5IG9mIHRoZSBwbHVnaW4gaXMgdGhhdCB5b3UgaGF2ZSB0aGUgZW50aXJl IGFyc2VuYWwgb2YgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGFncyBhdmFpbGFi bGUgdG8geW91IGlmIHlvdSBjaG9vc2UgdG8gdXNlIGEgPGNvZGU+Zm9ybTwvY29kZT4uIFRo dXMgeW91IGNhbiBzZXQgdGhlIGFydGljbGUmIzgyMTc7cyBzdGFydCBhbmQgZW5kIGRhdGVz IHRvIHRoZSBzYW1lIGRheSBhbmQgc2V0IHRoZSBzdGFydCBhbmQgZW5kIHRpbWVzIHRvIGlu ZGljYXRlIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBldmVudC4gWW91IGNhbiB0aGVuIHVz ZSBzdGFuZGFyZCA8Y29kZT4mbHQ7dHhwOnBvc3RlZCAvJmd0OzwvY29kZT4gb3IgPGNvZGU+ Jmx0O3R4cDpleHBpcmVzIC8mZ3Q7PC9jb2RlPiB0YWdzIHdpdGggdmFyaW91cyA8Y29kZT5m b3JtYXQ8L2NvZGU+IHN0cmluZ3MgdG8gcmVuZGVyIHRoZSBldmVudCYjODIxNztzIGNyaXRl cmlhLjwvcD4KCgk8cD5TaW1pbGFybHkgeW91IGNhbiB1c2UgPGNvZGU+Jmx0O3R4cDpleGNl cnB0IC8mZ3Q7PC9jb2RlPiBhbmQgPGNvZGU+Jmx0O3R4cDp0aXRsZSAvJmd0OzwvY29kZT4g b3Igb2YgY291cnNlIGFueSBjdXN0b20gZmllbGRzIHRvIHNob3cgYXMgbXVjaCBvciBhcyBs aXR0bGUgZGV0YWlsIGFzIHlvdSBsaWtlLjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29k ZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2NhbGVuZGFyIHNlY3Rpb249JnF1b3Q7ZXZl bnRzJnF1b3Q7Jmd0OwombHQ7ZGl2Jmd0OwogICBFdmVudDogJmx0O3R4cDpwZXJtbGluayZn dDsmbHQ7dHhwOnRpdGxlIC8mZ3Q7Jmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiAgICZsdDticiAv Jmd0OyZsdDt0eHA6ZXhjZXJwdCAvJmd0OwombHQ7L2RpdiZndDsKJmx0O2RpdiBjbGFzcz0m cXVvdDtldnRpbWUmcXVvdDsmZ3Q7CiAgIFN0YXJ0OiAmbHQ7dHhwOnBvc3RlZCBmb3JtYXQ9 JnF1b3Q7JUg6JU0mcXVvdDsgLyZndDsKJmx0Oy9kaXYmZ3Q7CiZsdDtkaXYgY2xhc3M9JnF1 b3Q7ZXZ0aW1lJnF1b3Q7Jmd0OwogICBFbmQ6ICZsdDt0eHA6ZXhwaXJlcyBmb3JtYXQ9JnF1 b3Q7JUg6JU0mcXVvdDsgLyZndDsKJmx0Oy9kaXYmZ3Q7CiZsdDsvdHhwOnNtZF9jYWxlbmRh ciZndDsKPC9jb2RlPjwvcHJlPgoKCTxoMyBpZD0iZWcyIj5FeGFtcGxlIDI8L2gzPgoKCTxw PlVzaW5nIHRoZSBjb25kaXRpb25hbCB0YWcgeW91IGNhbiB0YWtlIGFjdGlvbiBpZiBjZXJ0 YWluIGV2ZW50cyBjb250YWluIGNlcnRhaW4gZmxhZ3MuIFRoaXMgZXhhbXBsZSBhbHNvIHNo b3cgYSBjb21wbGV0ZWx5IHVzZWxlc3MgbWFubmVyIG9mIGVtcGxveWluZyA8Y29kZT4mbHQ7 dHhwOnNtZF9jYWxfbm93IC8mZ3Q7PC9jb2RlPi48L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+ PGNvZGUgY2xhc3M9ImJsb2NrIj5UaW1lIGlzOiAmbHQ7dHhwOnNtZF9jYWxfbm93IGZvcm1h dD0mcXVvdDslVCZxdW90OyAvJmd0OwombHQ7dHhwOnNtZF9jYWxlbmRhciBmb3JtPSZxdW90 O2NlbGxmb3JtJnF1b3Q7CiAgICAgc3RlcGZpZWxkPSZxdW90O2N1c3RvbV8zJnF1b3Q7IHNr aXBmaWVsZD0mcXVvdDtjdXN0b21fNiZxdW90OwogICAgIHNwYW5mb3JtPSZxdW90O211bHRp cyZxdW90OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+SW4gZm9ybSA8Y29kZT5jZWxsZm9y bTwvY29kZT46PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+ Jmx0O3R4cDpzbWRfaWZfY2FsIGZsYWc9JnF1b3Q7cmVjdXImcXVvdDsmZ3Q7CiAgJmx0O3R4 cDpwZXJtbGluayZndDsoUkVDVVJTKSZsdDsvdHhwOnBlcm1saW5rJmd0OwombHQ7dHhwOmVs c2UgLyZndDsKICAgJmx0O3R4cDpwZXJtbGluayZndDsmbHQ7dHhwOnRpdGxlIC8mZ3Q7Jmx0 Oy90eHA6cGVybWxpbmsmZ3Q7CiAgICZsdDt0eHA6c21kX2lmX2NhbCBmbGFnPSZxdW90O211 bHRpZmlyc3QmcXVvdDsmZ3Q7CiAgICAgICZsdDtzcGFuIGNsYXNzPSZxdW90O3JpZ2h0JnF1 b3Q7Jmd0Oy0tJmFtcDtyYXF1bzsmbHQ7L3NwYW4mZ3Q7CiAgICZsdDsvdHhwOnNtZF9pZl9j YWwmZ3Q7CiZsdDsvdHhwOnNtZF9pZl9jYWwmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5BbmQg aW4gZm9ybSA8Y29kZT5tdWx0aXM8L2NvZGU+OjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48 Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2lmX2NhbCBmbGFnPSZxdW90O211bHRp LCBtdWx0aXByZXYmcXVvdDsKICAgICBsb2dpYz0mcXVvdDtvciZxdW90OyZndDsKICAgJmx0 O3R4cDpwZXJtbGluayZndDstLSZhbXA7cmFxdW87LS0mbHQ7L3R4cDpwZXJtbGluayZndDsK Jmx0Oy90eHA6c21kX2lmX2NhbCZndDsKJmx0O3R4cDpzbWRfaWZfY2FsIGZsYWc9JnF1b3Q7 bXVsdGlsYXN0JnF1b3Q7Jmd0OwogICAmbHQ7dHhwOnBlcm1saW5rJmd0OwogICAgICAmbHQ7 c3BhbiBjbGFzcz0mcXVvdDtsZWZ0JnF1b3Q7Jmd0OyZhbXA7cmFxdW87Jmx0Oy9zcGFuJmd0 OyBFTkQgJmx0O3R4cDp0aXRsZSAvJmd0OwogICAmbHQ7L3R4cDpwZXJtbGluayZndDsKJmx0 Oy90eHA6c21kX2lmX2NhbCZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPk5vdGljZSB0aGF0IDxj b2RlPm11bHRpZmlyc3Q8L2NvZGU+IGlzIHRlc3RlZCBpbnNpZGUgdGhlIHNhbWUgZm9ybSBh cyBzdGFuZGFyZCBldmVudHMuIFRoaXMgaXMgYmVjYXVzZSBvbmx5IDxlbT5jb250aW51YXRp b24gc3Bhbm5lZCBjZWxsczwvZW0+IGFyZSBwYXNzZWQgdG8gdGhlIDxjb2RlPnNwYW5mb3Jt PC9jb2RlPjsgdGhlIGZpcnN0IGV2ZW50IG9mIGEgc3Bhbm5lZCBncm91cCBpcyBqdXN0IGxp a2UgYW55IG90aGVyIGV2ZW50LjwvcD4KCgk8aDMgaWQ9ImVnMyI+RXhhbXBsZSAzPC9oMz4K Cgk8cD5Zb3UgY291bGQgdXNlIHRoZSBjYWxlbmRhciB0YWdzIHRvIG91dHB1dCB2YXJpb3Vz IGJpdHMgb2YgZXZlbnQgZmxhZyBpbmZvcm1hdGlvbiB0byBidWlsZCB5b3VyIG93biBjbGFz cyBuYW1lcy4gVGhpcyBleGFtcGxlIGFsc28gZGVtb25zdHJhdGVzIHRoZSA8Y29kZT5odG1s PC9jb2RlPiBhdHRyaWJ1dGUgb2YgdGhlIDxjb2RlPiZsdDt0eHA6c21kX2NhbF9pbmZvIC8m Z3Q7PC9jb2RlPiB0byBidWlsZCB1cCBhIHF1ZXJ5IHN0cmluZyB0aGF0IGlzIHBhc3NlZCBh bG9uZyB3aXRoIGFuIGV2ZW50JiM4MjE3O3MgPGNvZGU+Y2F0ZWdvcnkxPC9jb2RlPiB3aGVu IGEgdmlzaXRvciBjbGlja3MgdGhlIGFuY2hvci48L3A+CgoJPHA+VGhpcyBhbGxvd3MgeW91 ciBzaXRlIHZpc2l0b3JzIHRvIGZpbHRlciBldmVudHMgYnkgY2F0ZWdvcnkgd2hpbGUgcmV0 YWluaW5nIHRoZSBhYmlsaXR5IHRvIHNob3cgdGhlIGNhbGVuZGFyIGZvciB0aGUgY3VycmVu dCBtb250aC95ZWFyIGFuZCBzZWN0aW9uIHRoZXkgYXJlIHZpZXdpbmcgaW5zdGVhZCBvZiBk cm9wcGluZyBiYWNrIHRvIHRoZSBjdXJyZW50IG1vbnRoL3llYXIgbGlrZSBvdGhlciBjYWxl bmRhciBzeXN0ZW1zIG9mdGVuIGRvLjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBj bGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2NhbGVuZGFyIGlzb3dlZWtzPSZxdW90OzEmcXVv dDsKICAgICB5ZWFyd2lkdGg9JnF1b3Q7MCwyJnF1b3Q7IHNlbGVjdD0mcXVvdDt5ZWFyLCBt b250aCZxdW90OwogICAgIHN0ZXBmaWVsZD0mcXVvdDtjdXN0b21fMSZxdW90OyBza2lwZmll bGQ9JnF1b3Q7Y3VzdG9tXzImcXVvdDsKICAgICBzaG93c2tpcHBlZD0mcXVvdDsxJnF1b3Q7 IGV4cGlyZWQ9JnF1b3Q7MSZxdW90OyZndDsKICAgJmx0O3NwYW4gY2xhc3M9JnF1b3Q7Y2Fs XyZsdDt0eHA6c21kX2NhbF9pbmZvIGpvaW49JnF1b3Q7IGNhbF8mcXVvdDsgLyZndDsmcXVv dDsmZ3Q7CiAgICAgICZsdDt0eHA6cGVybWxpbmsmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZs dDsvdHhwOnBlcm1saW5rJmd0OwogICAgICAmbHQ7YSBocmVmPSZxdW90Oz9jPSZsdDt0eHA6 Y2F0ZWdvcnkxCiAgICAgICAgIC8mZ3Q7JmFtcDsmbHQ7dHhwOnNtZF9jYWxfaW5mbyB0eXBl PSZxdW90O3NlY3Rpb24sIHllYXIsCiAgICAgICAgIG1vbnRoLCBjYWxpZCZxdW90OyBodG1s PSZxdW90OzEmcXVvdDsKICAgICAgICAgLyZndDsmcXVvdDsmZ3Q7Jmx0O3R4cDpjYXRlZ29y eTEgdGl0bGU9JnF1b3Q7MSZxdW90OyAvJmd0OyZsdDsvYSZndDsKICAgJmx0Oy9zcGFuJmd0 OwombHQ7L3R4cDpzbWRfY2FsZW5kYXImZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5XaGF0IGlz IGFsc28gdXNlZnVsIGFib3V0IHRoZSA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxfaW5mbyAvJmd0 OzwvY29kZT4gdGFnIGlzIHRoYXQgaWYgYSBwYXJ0aWN1bGFyIHZhbHVlIGlzIG5vdCBzZXQg aXQgd2lsbCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC48L3A+CgoJPGgyIGNsYXNz PSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDI+CgoJPHVsPgoJCTxsaT4yMSBEZWMgMDggfCAw LjEgfCBJbml0aWFsIHJlbGVhc2UgKHNwb25zb3JzIG9ubHkpPC9saT4KCQk8bGk+MjIgRGVj IDA4IHwgMC4yIHwgRml4ZWQgYSBmZXcgVzNDIHZhbGlkYXRpb24gaXNzdWVzIGFuZCBhZGRl ZCBtb3JlIGRhdGEgdmFsaWRpdHkgY2hlY2tzIDsgYXR0ZW1wdGVkIHRvIGFkZHJlc3MgZGF0 ZS90aW1lem9uZSBwcm9ibGVtcyAoYW5kIG1vc3RseSBmYWlsZWQsIHNvIHdyb3RlIGFib3V0 IGl0IGluc3RlYWQpIDsgZW5oYW5jZWQgPGNvZGU+c21kX2lmX2NhbDwvY29kZT4gdGFnIHRv IGNoZWNrIGZvciBkYXRlcyBhbmQgPGNvZGU+Y2FsaWQ8L2NvZGU+IDsgYWRkZWQgPGNvZGU+ ZXNjYXBlPC9jb2RlPiBhdHRyaWJ1dGUgdG8gc21kX2NhbF9pbmZvIHRhZzwvbGk+Cgk8L3Vs PgoKCTxwPjwvZGl2PjwvcD4KPCEtLSAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0gLS0+Cjxz dHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQoj c21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291 cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNGRkZG Q0M7fQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVy OjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxheTpi bG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxw IGE6bGluaywgI3NtZF9oZWxwIGE6dmlzaXRlZCB7IGNvbG9yOiAjMDBjOyB0ZXh0LWRlY29y YXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJv dHRvbToxcHg7fQojc21kX2hlbHAgYTpob3ZlciwgI3NtZF9oZWxwIGE6YWN0aXZlIHsgY29s b3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMnB4IHNv bGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNzbWRfaGVscCBoMSB7IGNvbG9yOiAj MzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1h bGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xp ZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgY29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2Vv cmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hlbHAgaDMgeyBjb2xvcjogIzA3OTsgZm9udDog Ym9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJn aW46IDEwcHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IHRleHQtZGVjb3JhdGlv bjp1bmRlcmxpbmU7fQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNh bnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQt dHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6 Ym9sZDsgY29sb3I6IzMzZDsgfQojc21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7 IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHt3aWR0aDo5MCU7 IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJvdHRvbToxZW07fQojc21kX2hlbHAgdGQs ICNzbWRfaGVscCB0aCB7Ym9yZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDt9 CiNzbWRfaGVscCB1bCB7IGxpc3Qtc3R5bGUtdHlwZTpzcXVhcmU7IH0KI3NtZF9oZWxwIC5y ZXF1aXJlZCB7Y29sb3I6cmVkO30KI3NtZF9oZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVw eCAzMHB4OyB9CiNzbWRfaGVscCAuYnJlYWsgeyBtYXJnaW4tdG9wOjVweDsgfQo8L3N0eWxl Pgo8IS0tIC0tLSBFTkQgUExVR0lOIENTUyAtLS0gLS0+CiI7czozOiJtZDUiO3M6MzI6ImMy MWQ1MWYxZDU5OWNkYzQ5NjdmMjU3YmM5MDk1NWI3Ijt9