# Name: smd_tags_client v0.1 # Type: Client side plugin # Filter and display unlimited tags associated with articles, images, files and links # Author: Stef Dawson # URL: http://stefdawson.com/ # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTU6InNtZF90YWdzX2NsaWVudCI7czo2OiJhdXRob3IiO3M6 MTE6IlN0ZWYgRGF3c29uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRh d3Nvbi5jb20vIjtzOjc6InZlcnNpb24iO3M6MzoiMC4xIjtzOjExOiJkZXNjcmlwdGlvbiI7 czo4MzoiRmlsdGVyIGFuZCBkaXNwbGF5IHVubGltaXRlZCB0YWdzIGFzc29jaWF0ZWQgd2l0 aCBhcnRpY2xlcywgaW1hZ2VzLCBmaWxlcyBhbmQgbGlua3MiO3M6NDoiY29kZSI7czoyMDMz MjoiLy8gc21kX3RhZ3MgYnkgU3RlZiBEYXdzb24NCi8vIFRPRE86IFRhZyBwYWdpbmcgbmV4 dC9wcmV2DQpyZXF1aXJlX3BsdWdpbignc21kX3RhZ3NfYWRtaW4nKTsNCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQovLyBQVUJMSUMgVEFHUw0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQovLyBDaGVjayB0YWdzIG9mIGEgcGFydGljdWxhciB0eXBlLCBvciB0aG9z ZSB0aGF0IGhhdmUgYSBzcGVjaWZpYyBwcm9wZXJ0eSBpbiBjb250ZXh0Lg0KZnVuY3Rpb24g c21kX2lmX3RhZyAoJGF0dHMsICR0aGluZykgew0KCWdsb2JhbCAkc21kX3RhZ3MsICRzbWRf dGFnX3R5cGUsICRzbWRfdGhpc3RhZzsNCg0KCWlmICghc21kX3RhZ3NfdGFibGVfZXhpc3Qo KSkgew0KCQl0cmlnZ2VyX2Vycm9yKHNtZF90YWdzX2dUeHQoJ25vdF9hdmFpbGFibGUnKSk7 DQoJCXJldHVybjsNCgl9DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQkndHlwZScgPT4g JycsDQoJCSdpZCcgPT4gJycsDQoJCSduYW1lJyA9PiAnJywNCgkJJ3RpdGxlJyA9PiAnJywN CgkJJ3BhcmVudCcgPT4gJycsDQoJCSdjb3VudCcgPT4gJycsDQoJCSdjaGlsZHJlbicgPT4g JycsDQoJCSdsZXZlbCcgPT4gJycsDQoJCSdkZWJ1ZycgPT4gJzAnLA0KCSksJGF0dHMpKTsN Cg0KCS8vIFZhbGlkYXRlIGF0dHMNCgkkdmFsaWRUeXBlcyA9IGFycmF5KCdhcnRpY2xlJywn aW1hZ2UnLCdmaWxlJywnbGluaycpOw0KCSR0eXBlID0gKGluX2FycmF5KCR0eXBlLCAkdmFs aWRUeXBlcykpID8gJHR5cGUgOiAoKCRzbWRfdGFnX3R5cGUpID8gJHNtZF90YWdfdHlwZSA6 ICR2YWxpZFR5cGVzWzBdKTsNCgkkZXF0ZXN0ID0gYXJyYXkoKTsNCgkkbnV0ZXN0ID0gYXJy YXkoKTsNCgkkb3BSRSA9ICcvKFw+fFw+XD18XDx8XDxcPXxcISkoWzAtOWEtekEtWi0gXSsp Lyc7DQoNCgkkbnVtID0gcHJlZ19tYXRjaF9hbGwoJG9wUkUsICRpZCwgJHBhcnRzKTsNCgkk ZXF0ZXN0WydpZCddID0gKCRudW08PTApID8gJGlkIDogJyc7DQoJaWYgKCRudW0+MCkgJG51 dGVzdFsnaWQnXSA9IGFycmF5KCRwYXJ0c1sxXVswXSA9PiAkcGFydHNbMl1bMF0pOw0KCSRu dW0gPSBwcmVnX21hdGNoX2FsbCgkb3BSRSwgJG5hbWUsICRwYXJ0cyk7DQoJJGVxdGVzdFsn bmFtZSddID0gKCRudW08PTApID8gJG5hbWUgOiAnJzsNCglpZiAoJG51bT4wKSAkbnV0ZXN0 WyduYW1lJ10gPSBhcnJheSgkcGFydHNbMV1bMF0gPT4gJHBhcnRzWzJdWzBdKTsNCgkkbnVt ID0gcHJlZ19tYXRjaF9hbGwoJG9wUkUsICR0eXBlLCAkcGFydHMpOw0KCSRlcXRlc3RbJ3R5 cGUnXSA9ICgkbnVtPD0wKSA/ICR0eXBlIDogJyc7DQoJaWYgKCRudW0+MCkgJG51dGVzdFsn dHlwZSddID0gYXJyYXkoJHBhcnRzWzFdWzBdID0+ICRwYXJ0c1syXVswXSk7DQoJJG51bSA9 IHByZWdfbWF0Y2hfYWxsKCRvcFJFLCAkdGl0bGUsICRwYXJ0cyk7DQoJJGVxdGVzdFsndGl0 bGUnXSA9ICgkbnVtPD0wKSA/ICR0aXRsZSA6ICcnOw0KCWlmICgkbnVtPjApICRudXRlc3Rb J3RpdGxlJ10gPSBhcnJheSgkcGFydHNbMV1bMF0gPT4gJHBhcnRzWzJdWzBdKTsNCgkkbnVt ID0gcHJlZ19tYXRjaF9hbGwoJG9wUkUsICRwYXJlbnQsICRwYXJ0cyk7DQoJJGVxdGVzdFsn cGFyZW50J10gPSAoJG51bTw9MCkgPyAkcGFyZW50IDogJyc7DQoJaWYgKCRudW0+MCkgJG51 dGVzdFsncGFyZW50J10gPSBhcnJheSgkcGFydHNbMV1bMF0gPT4gJHBhcnRzWzJdWzBdKTsN CgkkbnVtID0gcHJlZ19tYXRjaF9hbGwoJG9wUkUsICRjb3VudCwgJHBhcnRzKTsNCgkkZXF0 ZXN0Wydjb3VudCddID0gKCRudW08PTApID8gJGNvdW50IDogJyc7DQoJaWYgKCRudW0+MCkg JG51dGVzdFsnY291bnQnXSA9IGFycmF5KCRwYXJ0c1sxXVswXSA9PiAkcGFydHNbMl1bMF0p Ow0KCSRudW0gPSBwcmVnX21hdGNoX2FsbCgkb3BSRSwgJGNoaWxkcmVuLCAkcGFydHMpOw0K CSRlcXRlc3RbJ2NoaWxkcmVuJ10gPSAoJG51bTw9MCkgPyAkY2hpbGRyZW4gOiAnJzsNCglp ZiAoJG51bT4wKSAkbnV0ZXN0WydjaGlsZHJlbiddID0gYXJyYXkoJHBhcnRzWzFdWzBdID0+ ICRwYXJ0c1syXVswXSk7DQoJJG51bSA9IHByZWdfbWF0Y2hfYWxsKCRvcFJFLCAkbGV2ZWws ICRwYXJ0cyk7DQoJJGVxdGVzdFsnbGV2ZWwnXSA9ICgkbnVtPD0wKSA/ICRsZXZlbCA6ICcn Ow0KCWlmICgkbnVtPjApICRudXRlc3RbJ2xldmVsJ10gPSBhcnJheSgkcGFydHNbMV1bMF0g PT4gJHBhcnRzWzJdWzBdKTsNCg0KCWlmICgkZGVidWcpIHsNCgkJZWNobyAiKysgSUZfVEFH IFRFU1RTICsrIjsNCgkJZG1wKCRlcXRlc3QpOw0KCQlkbXAoJG51dGVzdCk7DQoJfQ0KDQoJ Ly8gSW5pdA0KCSRvdXQgPSAkcmVzdWx0ID0gJG51bVRlc3RzID0gMDsNCglpZiAoZW1wdHko JHNtZF90YWdzKSAmJiBlbXB0eSgkc21kX3RoaXN0YWcpKSB7DQoJCS8vIG5vdCBpbiBzY29w ZQ0KCX0gZWxzZSB7DQoJCS8vIEVxdWFsaXR5IGNvbXBhcmlzb25zDQoJCWZvcmVhY2ggKCRl cXRlc3QgYXMgJHRuYW1lID0+ICR0dmFsKSB7DQoJCQlpZiAoJHR2YWwgIT0gIiIpIHsNCgkJ CQkkbnVtVGVzdHMrKzsNCgkJCQlpZiAoJHNtZF90aGlzdGFnKSB7DQoJCQkJCS8vIExvY2Fs IHNjb3BlDQoJCQkJCWlmICgkc21kX3RoaXN0YWdbJ3RhZ18nLiR0bmFtZV0gPT0gJHR2YWwp IHsNCgkJCQkJCSRvdXQrKzsNCgkJCQkJfQ0KCQkJCX0gZWxzZSB7DQoJCQkJCS8vIEdsb2Jh bCBzY29wZQ0KCQkJCQlpZiAoJHRuYW1lID09ICJ0eXBlIikgew0KCQkJCQkJaWYgKCRzbWRf dGFnX3R5cGUgPT0gJHR5cGUpIHsNCgkJCQkJCQkkb3V0Kys7DQoJCQkJCQl9DQoJCQkJCX0N CgkJCQkJaWYgKGlzc2V0KCRzbWRfdGFnc1skdHlwZV1bJ3RhZ18nLiR0bmFtZV0pICYmIGlu X2FycmF5KCR0dmFsLCAkc21kX3RhZ3NbJHR5cGVdWyd0YWdfJy4kdG5hbWVdKSkgew0KCQkJ CQkJJG91dCsrOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCS8vIE51bWVyaWMgY29t cGFyaXNvbnMNCgkJZm9yZWFjaCAoJG51dGVzdCBhcyAkdG5hbWUgPT4gJHR2YWwpIHsNCgkJ CSRudW1UZXN0cysrOw0KCQkJJG9wID0gY3VycmVudChhcnJheV9rZXlzKCR0dmFsKSk7DQoJ CQkkdmFsID0gY3VycmVudCgkdHZhbCk7DQoJCQlpZiAoJHNtZF90aGlzdGFnKSB7DQoJCQkJ JGNvbXBhcmlzb24gPSAkc21kX3RoaXN0YWdbJ3RhZ18nLiR0bmFtZV07DQoJCQl9IGVsc2Ug ew0KCQkJCSRjb21wYXJpc29uID0gJHNtZF90YWdzWyR0eXBlXVsndGFnXycuJHRuYW1lXTsN CgkJCX0NCgkJCXN3aXRjaCAoJG9wKSB7DQoJCQkJY2FzZSAnPic6DQoJCQkJCWlmIChpc3Nl dCgkY29tcGFyaXNvbikgJiYgJGNvbXBhcmlzb24gPiAkdmFsKSB7DQoJCQkJCQkkb3V0Kys7 DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAnPj0nOg0KCQkJCQlpZiAoaXNzZXQo JGNvbXBhcmlzb24pICYmICRjb21wYXJpc29uID49ICR2YWwpIHsNCgkJCQkJCSRvdXQrKzsN CgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICc8JzoNCgkJCQkJaWYgKGlzc2V0KCRj b21wYXJpc29uKSAmJiAkY29tcGFyaXNvbiA8ICR2YWwpIHsNCgkJCQkJCSRvdXQrKzsNCgkJ CQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICc8PSc6DQoJCQkJCWlmIChpc3NldCgkY29t cGFyaXNvbikgJiYgJGNvbXBhcmlzb24gPD0gJHZhbCkgew0KCQkJCQkJJG91dCsrOw0KCQkJ CQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJyEnOg0KCQkJCQlpZiAoaXNzZXQoJGNvbXBh cmlzb24pICYmICRjb21wYXJpc29uICE9ICR2YWwpIHsNCgkJCQkJCSRvdXQrKzsNCgkJCQkJ fQ0KCQkJCQlicmVhazsNCgkJCX0NCgkJCQkJCX0NCg0KCQkvLyBDb3VudCBob3cgbWFueSBz dWNjZXNzZXMgdGhlcmUgd2VyZQ0KCQlpZiAoJGRlYnVnKSB7DQoJCQllY2hvICIrKyBOVU0g VEVTVFMgJiBSRVNVTFQrKyI7DQoJCQlkbXAoJG51bVRlc3RzKTsNCgkJCWRtcCgkb3V0KTsN CgkJfQ0KCQlpZiAoJG51bVRlc3RzID09ICRvdXQpIHsNCgkJCSRyZXN1bHQgPSAxOw0KCQl9 DQoJfQ0KDQoJcmV0dXJuIHBhcnNlKEV2YWxFbHNlKCR0aGluZywgJHJlc3VsdCkpOw0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9pZl90YWdfbGlz dCAoJGF0dHMsICR0aGluZykgew0KCWdsb2JhbCAkc21kX3RhZ190eXBlOw0KCXJldHVybiBw YXJzZShFdmFsRWxzZSgkdGhpbmcsICghZW1wdHkoJHNtZF90YWdfdHlwZSkpKSk7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUmV0dXJuIG5hbWUvdGl0bGUgb2Yg Y3VycmVudCB0YWcNCmZ1bmN0aW9uIHNtZF90YWdfbmFtZSgkYXR0cywgJHRoaW5nPScnKSB7 DQoJZ2xvYmFsICRzbWRfdGhpc3RhZywgJHBlcm1saW5rX21vZGU7DQoNCglpZiAoIXNtZF90 YWdzX3RhYmxlX2V4aXN0KCkpIHsNCgkJdHJpZ2dlcl9lcnJvcihzbWRfdGFnc19nVHh0KCdu b3RfYXZhaWxhYmxlJykpOw0KCQlyZXR1cm47DQoJfQ0KDQoJZXh0cmFjdChsQXR0cyhhcnJh eSgNCgkJJ3RpdGxlJyA9PiAwLA0KCQknbGluaycgPT4gJycsDQoJCSdzZWN0aW9uJyA9PiAn JywNCgkJJ3BhcmVudCcgPT4gMCwgLy8gbm90IHVzZWZ1bCB0byBwcmludCBidXQgZ29vZCBm b3IgVVJMcyB0byBuYXYgYmFjayB1cCB0aGUgdHJlZQ0KCQkncGFyZW50bGFiZWwnID0+ICdV cCBhIGxldmVsJywNCgkJJ3dyYXB0YWcnID0+ICcnLA0KCQknY2xhc3MnID0+IF9fRlVOQ1RJ T05fXywNCgkpLCRhdHRzKSk7DQoNCgkkc21kcHJlZiA9IHNtZF90YWdzX3ByZWZfZ2V0KGFy cmF5KCdzbWRfdGFnX3Vfc2VjJywgJ3NtZF90YWdfdV9wbmFtJywgJ3NtZF90YWdfdV9wdHlw JyksIDEpOw0KCSRzZWN0aW9uID0gKCRzZWN0aW9uKSA/ICRzZWN0aW9uIDogJHNtZHByZWZb J3NtZF90YWdfdV9zZWMnXVsndmFsJ107DQoJJHVybG5hbSA9ICRzbWRwcmVmWydzbWRfdGFn X3VfcG5hbSddWyd2YWwnXTsNCgkkdXJsdHlwID0gJHNtZHByZWZbJ3NtZF90YWdfdV9wdHlw J11bJ3ZhbCddOw0KDQoJJGxhYmVsID0gKCRwYXJlbnQpID8gJHBhcmVudGxhYmVsIDogKCgk dGl0bGUpID8gJHNtZF90aGlzdGFnWyd0YWdfdGl0bGUnXSA6ICRzbWRfdGhpc3RhZ1sndGFn X25hbWUnXSk7DQoJJGRlc3QgPSBwYWdlbGlua3VybChhcnJheSgncycgPT4gJHNlY3Rpb24s ICR1cmxuYW0gPT4gKCgkcGFyZW50KSA/ICRzbWRfdGhpc3RhZ1sndGFnX3BhcmVudCddIDog JHNtZF90aGlzdGFnWyd0YWdfbmFtZSddKSwgJHVybHR5cCA9PiAkc21kX3RoaXN0YWdbJ3Rh Z190eXBlJ10pKTsNCg0KCWlmICgkdGhpbmcpIHsNCgkJJG91dCA9ICc8YScuDQoJCQkoJHBl cm1saW5rX21vZGUgIT0gJ21lc3N5JyA/ICcgcmVsPSJ0YWciJyA6ICcnKS4NCgkJCSggKCRj bGFzcyBhbmQgISR3cmFwdGFnKSA/ICcgY2xhc3M9IicuJGNsYXNzLiciJyA6ICcnICkuDQoJ CQknIGhyZWY9IicuJGRlc3QuJyInLg0KCQkJKCR0aXRsZSA/ICcgdGl0bGU9IicuJGxhYmVs LiciJyA6ICcnKS4NCgkJCSc+Jy5wYXJzZSgkdGhpbmcpLic8L2E+JzsNCgl9IGVsc2VpZiAo JGxpbmspIHsNCgkJJG91dCA9ICc8YScuDQoJCQkoJHBlcm1saW5rX21vZGUgIT0gJ21lc3N5 JyA/ICcgcmVsPSJ0YWciJyA6ICcnKS4NCgkJCScgaHJlZj0iJy4kZGVzdC4nIj4nLiRsYWJl bC4nPC9hPic7DQoJfSBlbHNlIHsNCgkJJG91dCA9ICRsYWJlbDsNCgl9DQoNCglyZXR1cm4g ZG9UYWcoJG91dCwgJHdyYXB0YWcsICRjbGFzcyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KLy8gUmV0dXJuICMgb2YgaXRlbXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMg dGFnDQovL1RPRE86IHRoaW5rIGFib3V0IHBlci1zZWN0aW9uIC8gcGVyLWNhdGVnb3J5IGNv dW50cw0KZnVuY3Rpb24gc21kX3RhZ19jb3VudCgkYXR0cywgJHRoaW5nPScnKSB7DQoJZ2xv YmFsICRzbWRfdGhpc3RhZzsNCg0KCWlmICghc21kX3RhZ3NfdGFibGVfZXhpc3QoKSkgew0K CQl0cmlnZ2VyX2Vycm9yKHNtZF90YWdzX2dUeHQoJ25vdF9hdmFpbGFibGUnKSk7DQoJCXJl dHVybjsNCgl9DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQknY2xhc3MnID0+IF9fRlVO Q1RJT05fXywNCgkJJ3dyYXB0YWcnID0+ICcnLA0KCQknd3JhcGNvdW50JyA9PiAnICg6KScs DQoJCSdzaG93ZW1wdHknID0+ICcxJywNCgkJJ3BhcmFtZGVsaW0nID0+ICc6JywNCgkpLCRh dHRzKSk7DQoNCgkkd3JhcGNvdW50ID0gZXhwbG9kZSgkcGFyYW1kZWxpbSwgJHdyYXBjb3Vu dCk7IC8vIGRvX2xpc3QgZG9lcyBhIHRyaW06IGRvbid0IHdhbnQgdGhhdA0KCWlmIChjb3Vu dCgkd3JhcGNvdW50KSA9PSAxKSB7DQoJCSR3cmFwY291bnRbMV0gPSAkd3JhcGNvdW50WzBd Ow0KCX0NCg0KCSRvdXQgPSAkc21kX3RoaXN0YWdbJ3RhZ19jb3VudCddOw0KCSRvdXQgPSAo JG91dCA9PSAwICYmICEkc2hvd2VtcHR5KSA/ICcnIDogJHdyYXBjb3VudFswXS4kb3V0LiR3 cmFwY291bnRbMV07DQoNCglyZXR1cm4gZG9UYWcoJG91dCwgJHdyYXB0YWcsICRjbGFzcyk7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUmV0dXJuIG90aGVyIGlu Zm8gYWJvdXQgdGhlIGN1cnJlbnQgdGFnDQpmdW5jdGlvbiBzbWRfdGFnX2luZm8oJGF0dHMs ICR0aGluZz0nJykgew0KCWdsb2JhbCAkc21kX3RoaXN0YWc7DQoNCglpZiAoIXNtZF90YWdz X3RhYmxlX2V4aXN0KCkpIHsNCgkJdHJpZ2dlcl9lcnJvcihzbWRfdGFnc19nVHh0KCdub3Rf YXZhaWxhYmxlJykpOw0KCQlyZXR1cm47DQoJfQ0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgN CgkJJ2l0ZW0nID0+ICduYW1lJywNCgkJJ3dyYXB0YWcnID0+ICcnLA0KCQknYnJlYWsnID0+ ICdicicsDQoJCSdjbGFzcycgPT4gX19GVU5DVElPTl9fLA0KCQknYnJlYWtjbGFzcycgPT4g JycsDQoJKSwkYXR0cykpOw0KDQoJJG91dCA9IGFycmF5KCk7DQoJJGF2YWlsYWJsZUl0ZW1z ID0gYXJyYXkoJ2lkJywnbmFtZScsJ3RpdGxlJywndHlwZScsJ3BhcmVudCcsJ2NoaWxkcmVu JywnbGV2ZWwnLCdjb3VudCcpOw0KCSRpdGVtcyA9IGRvX2xpc3QoJGl0ZW0pOw0KCWZvcmVh Y2ggKCRpdGVtcyBhcyAkd2hhdG5vdCkgew0KCQlpZiAoaW5fYXJyYXkoJHdoYXRub3QsICRh dmFpbGFibGVJdGVtcykpIHsNCgkJCSRvdXRbXSA9ICRzbWRfdGhpc3RhZ1sndGFnXycuJHdo YXRub3RdOw0KCQl9DQoJfQ0KCXJldHVybiBkb1dyYXAoJG91dCwgJHdyYXB0YWcsICRicmVh aywgJGNsYXNzLCAkYnJlYWtjbGFzcyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KLy8gUmVsYXRlZCBhcnRpY2xlcy9pbWFnZXMvZmlsZXMvbGlua3MgYnkgdGFnDQpm dW5jdGlvbiBzbWRfcmVsYXRlZF90YWdzKCRhdHRzLCAkdGhpbmc9JycpIHsNCglnbG9iYWwg JHRoaXNhcnRpY2xlLCAkdGhpc2ZpbGUsICR0aGlzbGluaywgJHRoaXNpbWFnZSwgJHByZXRl eHQsICRwcmVmcywgJHNtZF90YWdzLCAkc21kX3RoaXN0YWc7DQoNCglpZiAoIXNtZF90YWdz X3RhYmxlX2V4aXN0KCkpIHsNCgkJdHJpZ2dlcl9lcnJvcihzbWRfdGFnc19nVHh0KCdub3Rf YXZhaWxhYmxlJykpOw0KCQlyZXR1cm47DQoJfQ0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgN CgkJJ3R5cGUnID0+ICcnLA0KCQknc2VjdGlvbicgPT4gJHByZXRleHRbJ3MnXSwNCgkJJ2xp bWl0JwkgPT4gOTk5OTksDQoJCSdvZmZzZXQnCT0+IDAsDQoJCSdmb3JtJwk9PiAnJywNCgkJ J21hdGNoJyA9PiAndGFnX25hbWUnLA0KCQknbWF0Y2hfc2VsZicgPT4gMCwNCgkJJ25vX3dp ZG93JyA9PiBAJHByZWZzWyd0aXRsZV9ub193aWRvdyddLA0KCQknc29ydCcgPT4gJycsDQoJ CSdsYWJlbCcgPT4gJycsDQoJCSdsYWJlbHRhZycgPT4gJycsDQoJCSd3cmFwdGFnJyA9PiAn JywNCgkJJ2JyZWFrJyA9PiAnYnInLA0KCQknY2xhc3MnID0+IF9fRlVOQ1RJT05fXywNCgkJ J2RlbGltJyA9PiAnLCcsDQoJCSdwYXJhbWRlbGltJyA9PiAnOicsDQoJCSdkZWJ1ZycgPT4g JzAnLA0KCSksJGF0dHMpKTsNCg0KCS8vIFZhbGlkYXRlIGF0dHMNCgkkdmFsaWRUeXBlcyA9 IGFycmF5KCdhcnRpY2xlJywnaW1hZ2UnLCdmaWxlJywnbGluaycpOw0KCSRjdHh0ID0gc21k X3RhZ3NfY29udGV4dCgpOw0KDQoJJHNjb3BlID0gJGN0eHRbJ3Njb3BlJ107DQoJJGlkbGlz dCA9ICRjdHh0WydpZCddOw0KCSRjdHlwZSA9ICRjdHh0Wydjb250ZXh0J107DQoJJHR5cGUg PSAoaW5fYXJyYXkoJHR5cGUsICR2YWxpZFR5cGVzKSkgPyAkdHlwZSA6ICgoJGN0eHRbJ2Nv bnRleHQnXSkgPyAkY3R4dFsnY29udGV4dCddIDogJHZhbGlkVHlwZXNbMF0pOw0KCSRzZWN0 aW9uQ2xhdXNlID0gKCRzZWN0aW9uKSA/ICIgQU5EIHR4cC5TZWN0aW9uIElOICgnIi5qb2lu KCInLCciLCBkb1NsYXNoKGRvX2xpc3QoJHNlY3Rpb24pKSkuIicpIiA6ICcnOw0KCSRvdXQg PSBhcnJheSgpOw0KDQoJaWYgKCEkc29ydCkgew0KCQlzd2l0Y2ggKCR0eXBlKSB7DQoJCQlj YXNlICJhcnRpY2xlIjoNCgkJCQkkc29ydCA9ICJQb3N0ZWQgZGVzYyI7DQoJCQkJYnJlYWs7 DQoJCQljYXNlICJpbWFnZSI6DQoJCQljYXNlICJsaW5rIjoNCgkJCQkkc29ydCA9ICJkYXRl IGRlc2MiOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSAiZmlsZSI6DQoJCQkJJHNvcnQgPSAiY3Jl YXRlZCBkZXNjIjsNCgkJCQlicmVhazsNCgkJfQ0KCX0NCg0KCS8vIExvb2t1cCB0YWJsZSBm b3IgbWFraW5nIFNRTCBxdWVyaWVzDQoJJHNxbFN0dWJzID0gYXJyYXkoDQoJCSJhcnRpY2xl IiA9PiBhcnJheSgNCgkJCSJzZWxlY3QiID0+ICIqLHVuaXhfdGltZXN0YW1wKFBvc3RlZCkg YXMgdVBvc3RlZCIsDQoJCQkidGFibGUiID0+ICJ0ZXh0cGF0dGVybiIsDQoJCQkiZ3RhZ3Mi ID0+ICR0aGlzYXJ0aWNsZSwNCgkJCSJnaWQiID0+ICJ0aGlzaWQiLA0KCQkpLA0KCQkiaW1h Z2UiID0+IGFycmF5KA0KCQkJInNlbGVjdCIgPT4gIioiLA0KCQkJInRhYmxlIiA9PiAidHhw X2ltYWdlIiwNCgkJCSJndGFncyIgPT4gJHRoaXNpbWFnZSwNCgkJCSJnaWQiID0+ICJpZCIs DQoJCSksDQoJCSJmaWxlIiA9PiBhcnJheSgNCgkJCSJzZWxlY3QiID0+ICIqIiwNCgkJCSJ0 YWJsZSIgPT4gInR4cF9maWxlIiwNCgkJCSJndGFncyIgPT4gJHRoaXNmaWxlLA0KCQkJImdp ZCIgPT4gImlkIiwNCgkJKSwNCgkJImxpbmsiID0+IGFycmF5KA0KCQkJInNlbGVjdCIgPT4g IioiLA0KCQkJInRhYmxlIiA9PiAidHhwX2xpbmsiLA0KCQkJImd0YWdzIiA9PiAkdGhpc2xp bmssDQoJCQkiZ2lkIiA9PiAiaWQiLA0KCQkpLA0KCSk7DQoNCgkvLyBFeHRyYWN0IHN0dWZm IHRvIG1hdGNoICYgbWFrZSB1cCBxdWVyeSByZXBsYWNlbWVudCB2YXJpYWJsZXMNCgkkbWF0 Y2ggPSBkb19saXN0KCRtYXRjaCwgJHBhcmFtZGVsaW0pOw0KCSRtYXRjaFR5cGUgPSBhcnJh eV9zaGlmdCgkbWF0Y2gpOw0KCWlmIChjb3VudCgkbWF0Y2gpID09IDApIHsNCgkJLy8gQXNz dW1lIGN1cnJlbnQgdHlwZSB1bmxlc3MgYSB0YWcgaXMgYmVpbmcgbWF0Y2hlZCAoaW4gd2hp Y2ggY2FzZSwgdXNlICRjdHlwZSkNCgkJJG1hdGNoV2l0aCA9IGFycmF5KCRtYXRjaFR5cGUp Ow0KCQkkbWF0Y2hUeXBlID0gKHN0cnBvcygkbWF0Y2hXaXRoWzBdLCAndGFnXycpICE9PSBm YWxzZSkgPyAkY3R5cGUgOiAkdHlwZTsNCgl9IGVsc2Ugew0KCQkkbWF0Y2hXaXRoID0gJG1h dGNoOw0KCX0NCg0KCSRtYXRjaGVzID0gYXJyYXkoKTsNCglmb3JlYWNoICgkbWF0Y2hXaXRo IGFzICRtYXRjaEl0ZW0pIHsNCgkJaWYgKHN0cnBvcygkbWF0Y2hJdGVtLCAndGFnXycpICE9 PSBmYWxzZSkgew0KCQkJJGxvb2tpbiA9ICRzbWRfdGFnc1skbWF0Y2hUeXBlXTsNCgkJfSBl bHNlIHsNCgkJCSRsb29raW4gPSAkc3FsU3R1YnNbJG1hdGNoVHlwZV1bImd0YWdzIl07DQoJ CX0NCgkJaWYgKGlzc2V0KCRsb29raW5bJG1hdGNoSXRlbV0pKSB7DQoJCQkkdGhpc21hdGNo ID0gJGxvb2tpblskbWF0Y2hJdGVtXTsNCgkJCWlmIChpc19hcnJheSgkdGhpc21hdGNoKSkg ew0KCQkJCWZvcmVhY2ggKCR0aGlzbWF0Y2ggYXMgJHN1YklEID0+ICRzdWJJdGVtKSB7DQoJ CQkJCWlmIChpbl9hcnJheSgkc3ViSUQsICRpZGxpc3QpKSB7DQoJCQkJCQkkbWF0Y2hlc1td ID0gJHN1Ykl0ZW07DQoJCQkJCX0NCgkJCQl9DQoJCQl9IGVsc2Ugew0KCQkJCSRtYXRjaGVz W10gPSAkdGhpc21hdGNoOw0KCQkJfQ0KCQl9DQoJfQ0KCSRtYXRjaGVzID0gYXJyYXlfdW5p cXVlKCRtYXRjaGVzKTsNCglpZiAoJGRlYnVnKSB7DQoJCWVjaG8gIisrIE1BVENIRVMgKysg IjsNCgkJZG1wKCRtYXRjaGVzKTsNCgl9DQoNCgkvLyBDb252ZXJ0IGFib3ZlIG9wdHMgdG8g U1FMIHF1ZXJ5IGNsYXVzZXMNCgkkZXhjbHVkZUNsYXVzZSA9ICgkbWF0Y2hfc2VsZikgPyAn JyA6ICcgQU5EIHR4cC5pZCE9IicuJHNxbFN0dWJzWyR0eXBlXVsiZ3RhZ3MiXVskc3FsU3R1 YnNbJHR5cGVdWyJnaWQiXV0uJyInOw0KCSRtYXRjaENsYXVzZSA9ICIgQU5EICIgLigoJG1h dGNoZXMpID8gInNtdC5uYW1lIElOICgiIC5qb2luKCIsIiwgZG9BcnJheSgkbWF0Y2hlcywg J2RvUXVvdGUnKSkuICIpIiA6ICJzbXQubmFtZSA9ICcnIik7DQoJJG9yZGVyQnkgPSAiIE9S REVSIEJZICIgLiRzb3J0LiAiIExJTUlUICIgLiRvZmZzZXQuICIsIiAuJGxpbWl0Ow0KDQoJ c3dpdGNoICgkdHlwZSkgew0KCQljYXNlICJhcnRpY2xlIjoNCgkJCSRycyA9IGdldFJvd3Mo IlNFTEVDVCAiLiRzcWxTdHVic1skdHlwZV1bInNlbGVjdCJdLiIgRlJPTSAiLnNhZmVfcGZ4 KCRzcWxTdHVic1skdHlwZV1bInRhYmxlIl0pLiIgQVMgdHhwDQoJCQkJTEVGVCBKT0lOICIu U01EX1RBR1UuICIgQVMgdHUgT04gdHhwLmlkID0gdHUuaXRlbV9pZA0KCQkJCUxFRlQgSk9J TiAiLlNNRF9UQUcuICIgQVMgc210IE9OIHR1LnRhZ19pZCA9IHNtdC5pZA0KCQkJCVdIRVJF IHR1LnR5cGU9J2FydGljbGUnIiAuICRleGNsdWRlQ2xhdXNlIC4gJHNlY3Rpb25DbGF1c2Ug LiAkbWF0Y2hDbGF1c2UgLiAkb3JkZXJCeSwgJGRlYnVnKTsNCgkJCWlmICgkcnMpIHsNCgkJ CQlpZiAoJGRlYnVnID4gMSkgew0KCQkJCQllY2hvICIrKyBSRUNPUkQgU0VUICsrIjsNCgkJ CQkJZG1wKCRycyk7DQoJCQkJfQ0KCQkJCSR1bmlxcnMgPSBhcnJheSgpOw0KCQkJCWZvcmVh Y2ggKCRycyBhcyAkcm93KSB7DQoJCQkJCWlmICghaW5fYXJyYXkoJHJvd1snSUQnXSwgJHVu aXFycykpIHsNCgkJCQkJCXBvcHVsYXRlQXJ0aWNsZURhdGEoJHJvdyk7DQoJCQkJCQkkcm93 WydUaXRsZSddID0gKCRub193aWRvdykgPyBub1dpZG93KGVzY2FwZV90aXRsZSgkcm93WydU aXRsZSddKSkgOiBlc2NhcGVfdGl0bGUoJHJvd1snVGl0bGUnXSk7DQoJCQkJCQkkb3V0W10g PSAoJGZvcm0pID8gcGFyc2VfZm9ybSgkZm9ybSkgOiAoKCR0aGluZykgPyBwYXJzZSgkdGhp bmcpIDogaHJlZigkcm93WydUaXRsZSddLCBwZXJtbGlua3VybCgkcm93KSkpOw0KCQkJCQkJ JHVuaXFyc1tdID0gJHJvd1snSUQnXTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWJyZWFr Ow0KCQljYXNlICJpbWFnZSI6DQoJCQkkcnMgPSBnZXRSb3dzKCINCgkJCQlTRUxFQ1QgdHhw LmlkLCB0eHAubmFtZSwgdHhwLmNhdGVnb3J5LCB0eHAuZXh0LCB0eHAudywgdHhwLmgsIHR4 cC5hbHQsIHR4cC5jYXB0aW9uLCB0eHAuZGF0ZSwgdHhwLmF1dGhvciwgdHhwLnRodW1ibmFp bCwgdHUuaXRlbV9pZCwgdHUudGFnX2lkLCBzbXQuaWQgQVMgc210aWQsIHNtdC5uYW1lIEFT IHNtdG5hbWUsIHNtdC50eXBlLCBzbXQucGFyZW50LCBzbXQubGZ0LCBzbXQucmd0LCBzbXQu dGl0bGUNCgkJCQlGUk9NICIuc2FmZV9wZngoJ3R4cF9pbWFnZScpLiIgQVMgdHhwDQoJCQkJ TEVGVCBKT0lOICIuU01EX1RBR1UuICIgQVMgdHUgT04gdHhwLmlkID0gdHUuaXRlbV9pZA0K CQkJCUxFRlQgSk9JTiAiLlNNRF9UQUcuICIgQVMgc210IE9OIHR1LnRhZ19pZCA9IHNtdC5p ZA0KCQkJCVdIRVJFIHR1LnR5cGU9J2ltYWdlJyIgLiAkZXhjbHVkZUNsYXVzZSAuICRtYXRj aENsYXVzZSAuICRvcmRlckJ5LCAkZGVidWcpOw0KCQkJaWYgKCRycykgew0KCQkJCWlmICgk ZGVidWcgPiAxKSB7DQoJCQkJCWVjaG8gIisrIFJFQ09SRCBTRVQgKysiOw0KCQkJCQlkbXAo JHJzKTsNCgkJCQl9DQoJCQkJJHVuaXFycyA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJHJz IGFzICRyb3cpIHsNCgkJCQkJaWYgKCFpbl9hcnJheSgkcm93WydpZCddLCAkdW5pcXJzKSkg ew0KCQkJCQkJJHRoaXNpbWFnZSA9IGltYWdlX2Zvcm1hdF9pbmZvKCRyb3cpOw0KCQkJCQkJ JG91dFtdID0gKCRmb3JtKSA/IHBhcnNlX2Zvcm0oJGZvcm0pIDogKCgkdGhpbmcpID8gcGFy c2UoJHRoaW5nKSA6IGltYWdlKGFycmF5KCdpZCcgPT4gJHJvd1snaWQnXSkpKTsNCgkJCQkJ CSR0aGlzaW1hZ2UgPSAnJzsNCgkJCQkJCSR1bmlxcnNbXSA9ICRyb3dbJ2lkJ107DQoJCQkJ CX0NCgkJCQl9DQoJCQl9DQoJCQlicmVhazsNCgkJY2FzZSAiZmlsZSI6DQoJCQkkcnMgPSBn ZXRSb3dzKCINCgkJCQlTRUxFQ1QgdHhwLmlkLCB0eHAuZmlsZW5hbWUsIHR4cC5jYXRlZ29y eSwgdHhwLnBlcm1pc3Npb25zLCB0eHAuZGVzY3JpcHRpb24sIHR4cC5kb3dubG9hZHMsIHR4 cC5zdGF0dXMsIHR4cC5tb2RpZmllZCwgdHhwLmNyZWF0ZWQsIHR4cC5zaXplLCB0dS5pdGVt X2lkLCB0dS50YWdfaWQsIHNtdC5pZCBBUyBzbXRpZCwgc210Lm5hbWUgQVMgc210bmFtZSwg c210LnR5cGUsIHNtdC5wYXJlbnQsIHNtdC5sZnQsIHNtdC5yZ3QsIHNtdC50aXRsZQ0KCQkJ CUZST00gIi5zYWZlX3BmeCgndHhwX2ZpbGUnKS4iIEFTIHR4cA0KCQkJCUxFRlQgSk9JTiAi LlNNRF9UQUdVLiAiIEFTIHR1IE9OIHR4cC5pZCA9IHR1Lml0ZW1faWQNCgkJCQlMRUZUIEpP SU4gIi5TTURfVEFHLiAiIEFTIHNtdCBPTiB0dS50YWdfaWQgPSBzbXQuaWQNCgkJCQlXSEVS RSB0dS50eXBlPSdmaWxlJyIgLiAkZXhjbHVkZUNsYXVzZSAuICRtYXRjaENsYXVzZSAuICRv cmRlckJ5LCAkZGVidWcpOw0KCQkJaWYgKCRycykgew0KCQkJCWlmICgkZGVidWcgPiAxKSB7 DQoJCQkJCWVjaG8gIisrIFJFQ09SRCBTRVQgKysiOw0KCQkJCQlkbXAoJHJzKTsNCgkJCQl9 DQoJCQkJJHVuaXFycyA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsN CgkJCQkJaWYgKCFpbl9hcnJheSgkcm93WydpZCddLCAkdW5pcXJzKSkgew0KCQkJCQkJJHRo aXNmaWxlID0gZmlsZV9kb3dubG9hZF9mb3JtYXRfaW5mbygkcm93KTsNCgkJCQkJCSRvdXRb XSA9ICgkZm9ybSkgPyBwYXJzZV9mb3JtKCRmb3JtKSA6ICgoJHRoaW5nKSA/IHBhcnNlKCR0 aGluZykgOiBmaWxlX2Rvd25sb2FkX2xpbmsoYXJyYXkoJ2ZpbGVuYW1lJyA9PiAkcm93Wydm aWxlbmFtZSddKSwgJHJvd1snZmlsZW5hbWUnXSkpOw0KCQkJCQkJJHRoaXNmaWxlID0gJyc7 DQoJCQkJCQkkdW5pcXJzW10gPSAkcm93WydpZCddOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0K CQkJYnJlYWs7DQoJCWNhc2UgImxpbmsiOg0KCQkJJHJzID0gZ2V0Um93cygiDQoJCQkJU0VM RUNUIHR4cC5pZCwgdHhwLmRhdGUsIHR4cC5jYXRlZ29yeSwgdHhwLnVybCwgdHhwLmxpbmtu YW1lLCB0eHAubGlua3NvcnQsIHR4cC5kZXNjcmlwdGlvbiwgdHUuaXRlbV9pZCwgdHUudGFn X2lkLCBzbXQuaWQgQVMgc210aWQsIHNtdC5uYW1lIEFTIHNtdG5hbWUsIHNtdC50eXBlLCBz bXQucGFyZW50LCBzbXQubGZ0LCBzbXQucmd0LCBzbXQudGl0bGUNCgkJCQlGUk9NICIuc2Fm ZV9wZngoJ3R4cF9saW5rJykuIiBBUyB0eHANCgkJCQlMRUZUIEpPSU4gIi5TTURfVEFHVS4g IiBBUyB0dSBPTiB0eHAuaWQgPSB0dS5pdGVtX2lkDQoJCQkJTEVGVCBKT0lOICIuU01EX1RB Ry4gIiBBUyBzbXQgT04gdHUudGFnX2lkID0gc210LmlkDQoJCQkJV0hFUkUgdHUudHlwZT0n bGluayciIC4gJGV4Y2x1ZGVDbGF1c2UgLiAkbWF0Y2hDbGF1c2UgLiAkb3JkZXJCeSwgJGRl YnVnKTsNCgkJCWlmICgkcnMpIHsNCgkJCQlpZiAoJGRlYnVnID4gMSkgew0KCQkJCQllY2hv ICIrKyBSRUNPUkQgU0VUICsrIjsNCgkJCQkJZG1wKCRycyk7DQoJCQkJfQ0KCQkJCSR1bmlx cnMgPSBhcnJheSgpOw0KCQkJCWZvcmVhY2ggKCRycyBhcyAkcm93KSB7DQoJCQkJCWlmICgh aW5fYXJyYXkoJHJvd1snaWQnXSwgJHVuaXFycykpIHsNCgkJCQkJCSR0aGlzbGluayA9IGFy cmF5KA0KCQkJCQkJCSdpZCcgICAgICAgICAgPT4gJHJvd1snaWQnXSwNCgkJCQkJCQknbGlu a25hbWUnICAgID0+ICRyb3dbJ2xpbmtuYW1lJ10sDQoJCQkJCQkJJ3VybCcgICAgICAgICA9 PiAkcm93Wyd1cmwnXSwNCgkJCQkJCQknZGVzY3JpcHRpb24nID0+ICRyb3dbJ2Rlc2NyaXB0 aW9uJ10sDQoJCQkJCQkJJ2RhdGUnICAgICAgICA9PiAkcm93WydkYXRlJ10sDQoJCQkJCQkJ J2NhdGVnb3J5JyAgICA9PiAkcm93WydjYXRlZ29yeSddLA0KCQkJCQkJKTsNCgkJCQkJCSRv dXRbXSA9ICgkZm9ybSkgPyBwYXJzZV9mb3JtKCRmb3JtKSA6ICgoJHRoaW5nKSA/IHBhcnNl KCR0aGluZykgOiBocmVmKCRyb3dbJ2xpbmtuYW1lJ10sICRyb3dbJ3VybCddKSk7DQoJCQkJ CQkkdGhpc2xpbmsgPSAnJzsNCgkJCQkJCSR1bmlxcnNbXSA9ICRyb3dbJ2lkJ107DQoJCQkJ CX0NCgkJCQl9DQoJCQl9DQoJCQlicmVhazsNCgl9DQoNCglpZiAoJG91dCkgew0KCQlyZXR1 cm4gZG9MYWJlbCgkbGFiZWwsICRsYWJlbHRhZykuZG9XcmFwKCRvdXQsICR3cmFwdGFnLCAk YnJlYWssICRjbGFzcyk7DQoJfQ0KCXJldHVybiAnJzsNCn0NCg0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCi8vIExpc3QgdGFncyBmcm9tIGN1cnJlbnQgY29udGV4dCwgb3Ig Z2l2ZW4gdHlwZQ0KZnVuY3Rpb24gc21kX3RhZ19saXN0KCRhdHRzLCAkdGhpbmc9JycpIHsN CglnbG9iYWwgJHNtZF90YWdzLCAkc21kX3RoaXN0YWc7DQoNCglpZiAoIXNtZF90YWdzX3Rh YmxlX2V4aXN0KCkpIHsNCgkJdHJpZ2dlcl9lcnJvcihzbWRfdGFnc19nVHh0KCdub3RfYXZh aWxhYmxlJykpOw0KCQlyZXR1cm47DQoJfQ0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJ J3R5cGUnID0+ICcnLA0KCQknaWQnID0+ICcnLA0KCQknbmFtZScgPT4gJycsDQoJCSdleGNs dWRlJyA9PiAnJywNCgkJJ3BhcmVudCcgPT4gJycsIC8vIFN0YXJ0IGxpc3QgZnJvbSBoZXJl DQoJCSdzdWJsZXZlbCcgPT4gJycsIC8vIEdldCB0YWdzIGZyb20gdGhpcyBzdWItbGV2ZWwg b25seQ0KCQknb2Zmc2V0JyA9PiAwLA0KCQknbGltaXQnID0+IDk5OTk5LA0KCQknZm9ybScg PT4gJycsDQoJCSdpbmRlbnQnID0+ICcmbmJzcDsmbmJzcDsnLA0KCQknc2VjdGlvbl9saW5r JyA9PiAnJywNCgkJJ3NodWZmbGUnID0+IDAsDQoJCSdsYWJlbCcgPT4gJycsDQoJCSdsYWJl bHRhZycgPT4gJycsDQoJCSd3cmFwdGFnJyA9PiAndWwnLA0KCQknYnJlYWsnID0+ICdsaScs DQoJCSdjbGFzcycgPT4gX19GVU5DVElPTl9fLA0KCQknYWN0aXZlX2NsYXNzJyA9PiAnJywg Ly8gVE9ETw0KCQknYnJlYWtjbGFzcycgPT4gJycsDQoJCSdkZWJ1ZycgPT4gMCwNCgkpLCRh dHRzKSk7DQoNCgkvLyBWYWxpZGF0ZSBjbGllbnQgc2lkZSBhdHRzDQoJJHZhbGlkVHlwZXMg PSBhcnJheSgnYXJ0aWNsZScsJ2ltYWdlJywnZmlsZScsJ2xpbmsnKTsNCgkkaWRzID0gJyc7 DQoJJHdoZXJlID0gYXJyYXkoKTsNCgkkY3R4dCA9IHNtZF90YWdzX2NvbnRleHQoKTsNCgkk YXR0ZW1wdE1hdGNoID0gKGVtcHR5KCRuYW1lKSAmJiBlbXB0eSgkaWQpICYmIGVtcHR5KCRl eGNsdWRlKSAmJiAhZW1wdHkoJGN0eHRbJ2lkJ10pKSA/IGZhbHNlIDogdHJ1ZTsNCgkkdHlw ZSA9IChpbl9hcnJheSgkdHlwZSwgJHZhbGlkVHlwZXMpKSA/ICR0eXBlIDogKCgkY3R4dFsn Y29udGV4dCddKSA/ICRjdHh0Wydjb250ZXh0J10gOiAkdmFsaWRUeXBlc1swXSk7DQoJJGlk cyA9ICgkaWQpID8gZG9fbGlzdCgkaWQpIDogKCgkY3R4dFsnaWQnXSkgPyAkY3R4dFsnaWQn XSA6ICcnKTsNCg0KCWlmICgkbmFtZSkgew0KCQkkbmFtZSA9ICJuYW1lIElOICgiIC5qb2lu KCcsJywgcXVvdGVfbGlzdChkb19saXN0KCRuYW1lKSkpLiAiKSI7DQoJCSR3aGVyZVtdID0g JG5hbWU7DQoJCSRpZHMgPSAnJzsgLy8gbmFtZSB0cnVtcHMgaWQ7IFRPRE86IG1heWJlIG9m ZmVyIGEgd2F5IG9mIGNvbWJpbmluZyB0aGVtPw0KCX0NCglpZiAoJGlkcykgew0KCQkkaWRz ID0gImlkIElOICgiIC5qb2luKCcsJywgcXVvdGVfbGlzdCgkaWRzKSkuICIpIjsNCgkJJHdo ZXJlW10gPSAkaWRzOw0KCX0NCg0KCWlmICgkZXhjbHVkZSkgew0KCQkkZXhjbHVkZSA9ICJu YW1lIE5PVCBJTiAoIiAuam9pbignLCcsIHF1b3RlX2xpc3QoZG9fbGlzdCgkZXhjbHVkZSkp KS4gIikiOw0KCQkkd2hlcmVbXSA9ICRleGNsdWRlOw0KCX0NCg0KCSR3aGVyZSA9IGpvaW4o JyBBTkQgJywgJHdoZXJlKTsNCglpZiAoISR3aGVyZSAmJiAhZW1wdHkoJHNtZF90YWdzKSkg ew0KCQkvLyBVc2UgZ2xvYmFsIHRhZ3MNCgkJJHJzID0gJHNtZF90YWdzWyRjdHh0XTsNCgl9 IGVsc2Ugew0KCQkkd2hlcmUgPSAoJHdoZXJlKSA/ICR3aGVyZSA6ICcxPTEnOw0KCQlpZiAo JHdoZXJlID09ICIxPTEiICYmICRhdHRlbXB0TWF0Y2gpIHsNCgkgIAkJJHdoZXJlID0gJ25h bWUgPSAic21kXycgLm10X3JhbmQoKS4gJyInOw0KCQl9DQoJCWlmICgkZGVidWcpIHsNCgkJ CWRtcCgkd2hlcmUpOw0KCQl9DQoJCSRzdWJsZXZlbCA9ICgkcGFyZW50ICYmICEkc3VibGV2 ZWwpID8gMSA6ICRzdWJsZXZlbDsNCgkJJHJzID0gZ2V0VHJlZSgoKCRwYXJlbnQpID8gJHBh cmVudCA6ICdyb290JyksICR0eXBlLCAkd2hlcmUsIFNNRF9UQUcpOw0KCX0NCglpZiAoJGRl YnVnKSB7DQoJCWVjaG8gIisrIFRSRUUgKysiOw0KCQlkbXAoJHJzKTsNCgl9DQoNCglpZiAo JHJzKSB7DQoJCSRvdXQgPSBhcnJheSgpOw0KCQkkdG90YWxzID0gYXJyYXkoKTsNCg0KCQlp ZiAoJHN1YmxldmVsKSB7DQoJCQkkb3V0c3ViID0gYXJyYXkoKTsNCgkJCXdoaWxlIChsaXN0 KCRrZXksICRyb3cpID0gZWFjaCgkcnMpKSB7DQoJCQkJaWYgKCRyb3dbJ2xldmVsJ10gPT0g JHN1YmxldmVsKSB7DQoJCQkJCSRvdXRzdWJbXSA9ICRyb3c7DQoJCQkJfQ0KCQkJfQ0KCQkJ JHJzID0gJG91dHN1YjsNCgkJCWlmICgkZGVidWcpIHsNCgkJCQllY2hvICIrKyBTVUJMRVZF TCBSRUNPUkRTICsrIjsNCgkJCQlkbXAoJHJzKTsNCgkJCX0NCgkJfQ0KCQlpZiAoJHNodWZm bGUpIHsNCgkJCXNodWZmbGUoJHJzKTsNCgkJfQ0KCQkkcnMgPSBhcnJheV9zbGljZSgkcnMs ICRvZmZzZXQsICRsaW1pdCk7DQoJCWlmICgkZGVidWcpIHsNCgkJCWVjaG8gIisrIFBPU1Qt RklMVEVSIFJFQ09SRFMgKysiOw0KCQkJZG1wKCRycyk7DQoJCX0NCg0KCQlmb3JlYWNoICgk cnMgYXMgJHJvdykgew0KCQkJZXh0cmFjdCgkcm93KTsNCgkJCSRyb3dbJ3R5cGUnXSA9ICR0 eXBlOw0KCQkJJHJvd1snY291bnQnXSA9IHNhZmVfY291bnQoU01EX1RBR1UsICJ0eXBlPSck dHlwZScgQU5EIHRhZ19pZD0nJGlkJyIpOw0KCQkJc21kX3RhZ19wb3B1bGF0ZSgkcm93KTsN CgkJCSRvdXRbXSA9ICgkdGhpbmcpID8gcGFyc2UoJHRoaW5nKSA6ICgoJGZvcm0pID8gcGFy c2VfZm9ybSgkZm9ybSkgOg0KCQkJCQlzdHJfcmVwZWF0KCRpbmRlbnQsICRsZXZlbCAqIDEp DQoJCQkJCS5zbWRfdGFnX25hbWUoYXJyYXkoJ3RpdGxlJyA9PiAxLCAnc2VjdGlvbicgPT4g JHNlY3Rpb25fbGluaykpDQoJCQkJCS5zbWRfdGFnX2NvdW50KGFycmF5KCkpKTsNCgkJCSRz bWRfdGhpc3RhZyA9IGFycmF5KCk7DQoJCX0NCg0KCQlpZiAoJG91dCkgew0KCQkJcmV0dXJu IGRvTGFiZWwoJGxhYmVsLCAkbGFiZWx0YWcpLmRvV3JhcCgkb3V0LCAkd3JhcHRhZywgJGJy ZWFrLCAkY2xhc3MsICRicmVha2NsYXNzKTsNCgkJfQ0KCX0NCglyZXR1cm4gJyc7DQp9DQoN Ci8vIENsb3VkIGNhbGN1bGF0aW9ucyBmcm9tIFJhbiBBcm91c3NpJ3MgdHhwX3RhZ3MgcGx1 Z2luDQovL1RPRE86IFRoaXMgaXMgYSBtb3JlIHNwZWNpZmljIHZlcnNpb24gb2Ygc21kX3Rh Z19saXN0LiBVc2UgdGhhdCBlbmdpbmUgYW5kIHRoaXMgY2xvdWQgbG9naWMgKG1heWJlIGEg J2Nsb3VkJyBhdHRyaWIgdG8gc21kX3RhZ19saXN0KQ0KZnVuY3Rpb24gc21kX3RhZ19jbG91 ZCgkYXR0cykgew0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSdzZWN0aW9uJyA9PiAnJywN CgkJJ3RpbWUnID0+ICdwYXN0JywNCgkJJ2xpbWl0JwkgPT4gOTk5LA0KCQkncGFyZW50JyA9 PiAnJywNCgkJJ2xpbmt0b3NlY3Rpb24nID0+ICdhcnRpY2xlJywNCgkJJ3VzZW1lc3N5JyA9 PiAwLA0KCQknY2xvdWR3cmFwdGFnJyAgPT4gJ2RpdicsDQoJCSdicmVhaycJPT4gJywgJywN CgkJJ3dyYXB0YWcnICA9PiAncCcsDQoJCSdsYWJlbCcJPT4gJycsDQoJCSdsYWJlbHRhZycg PT4gJycsDQoJCSdjbGFzcycJICAgPT4gJycsDQoJCSdicmVha2NsYXNzJyAgPT4gJycsDQoJ CSdzb3J0ZGlyJyA9PiAnYXNjJw0KCSksJGF0dHMpKTsNCg0KCSRzZWN0aW9ucz1yc3NCdWls ZFNjdFNxbCgkc2VjdGlvbik7DQoJJHRpbWUgPSByc3NCdWlsZFRpbWVTcWwoJHRpbWUpOw0K DQoJJHBybnQgPSAoJHBhcmVudCkgPyAiIFdIRVJFIHBhcmVudCA9ICckcGFyZW50JyAiIDog IiI7DQoJJHJzYyA9IGdldFJvd3MoIlNFTEVDVCBkaXN0aW5jdCBjLmlkLCBjLm5hbWUsIGMu dGl0bGUgRlJPTSAiLlBGWC4idGV4dHBhdHRlcm5fY2F0ZWdvcnkgYXMgdGMgTEVGVCBKT0lO ICAiLlBGWC4idHhwX2NhdGVnb3J5IGFzIGMgT04gdGMuY2F0ZWdvcnlfaWQgPSBjLmlkICIu JHBybnQuIk9SREVSIEJZIGMubmFtZSAiIC4kc29ydGRpcik7DQoNCglpZiAoJHJzYykgew0K CQkkcnN0ID0gZ2V0Um93cygiU0VMRUNUICogRlJPTSAiLlBGWC4idGV4dHBhdHRlcm5fY2F0 ZWdvcnkiKTsNCgkJJGFsbCA9IGNvdW50KCRyc3QpOw0KDQoJCSRhbGxjYXRzPSIiOw0KCQlm b3JlYWNoKCRyc3QgYXMgJGEpIHsNCgkJCSRhbGxjYXRzLj0gICRhWydjYXRlZ29yeV9pZCdd LiIgIjsNCgkJfQ0KCQkkY2F0YXJyID0gZXhwbG9kZSgiICIsIHN1YnN0cigkYWxsY2F0cywg MCwgLTEpKTsNCgkJJGNhdGNvdW50cyA9IGFycmF5X2NvdW50X3ZhbHVlcygkY2F0YXJyKTsN CgkJaWYgKCRsaW1pdCAhPSA5OTkpIGFyc29ydCgkY2F0Y291bnRzKTsNCg0KCQkkbWF4ID0g bWF4KCRjYXRjb3VudHMpOw0KCQkkbWluID0gbWluKCRjYXRjb3VudHMpOw0KCQkkeCA9IDIw MDsgJHkgPSAxMDA7IC8vIDIwMCUsIDEwMCUNCgkJJHN0ZXB2YWx1ZSA9ICgkbWF4IC0gJG1p biAhPSAwKSA/ICgkbWF4IC0gJG1pbikgLyAoJHggLSAkeSkgOiAxOw0KDQoJCS8vIHJla2V5 IGFycmF5IGJ5IG51bWJlciBvZiBwb3N0cyBwZXIgY2F0ZWdvcnkNCgkJJHJlb3JkZXIgPSBh cnJheSgpOw0KCQlmb3JlYWNoICgkcnNjIGFzICRhPT4kYikgew0KCQkJJHJlb3JkZXJbJGJb J2lkJ11dID0gJGI7DQoJCX0NCg0KCQkkaSA9IDA7DQoJCSRyb3cgPSBhcnJheSgpOw0KCQlm b3JlYWNoICgkY2F0Y291bnRzIGFzICRhPT4kYikgew0KCQkJaWYgKCRpIDwgJGxpbWl0KSB7 DQoJCQkJJGFxPSAiU0VMRUNUICogRlJPTSAiLlBGWC4idGV4dHBhdHRlcm4gYXMgdCBMRUZU IEpPSU4gIi5QRlguInRleHRwYXR0ZXJuX2NhdGVnb3J5IGFzIGMgT04gdC5JRCA9IGMuYXJ0 aWNsZV9pZCBXSEVSRSAiLiRzZWN0aW9ucy4iIGMuY2F0ZWdvcnlfaWQgPSAnIi4kcmVvcmRl clskYV1bJ2lkJ10uIicgYW5kIHQuU3RhdHVzID0gNCAiLiR0aW1lOw0KCQkJCSRyc2EgPSBn ZXRSb3dzKCRhcSk7DQoJCQkJaWYgKCRyc2EpIHsNCgkJCQkJJG51bSA9IGNvdW50KCRyc2Ep Ow0KCQkJCQkkc2l6ZSA9ICgoJG51bSAvICRhbGwpICogMTAwKSArIDEwMDsNCgkJCQkJJHdl aWdodCA9ICR5ICsgcm91bmQoKCRudW0tJG1pbikgLyAkc3RlcHZhbHVlKTsNCgkJCQkJJHN0 eWxlID0gKCR3ZWlnaHQgPiAkeSkgPyAnIHN0eWxlPSJmb250LXNpemU6Jy4gJHdlaWdodCAu ICclOyInIDogJyc7DQoNCgkJCQkJJHBhdGggPSAoJHVzZW1lc3N5KSA/IGh1LiI/cz0iLiRs aW5rdG9zZWN0aW9uLiImYW1wO2M9Ii5zdHJ0b2xvd2VyKCRyZW9yZGVyWyRhXVsnbmFtZSdd KSA6IGh1LiRsaW5rdG9zZWN0aW9uLiIvIi5zdHJ0b2xvd2VyKCRyZW9yZGVyWyRhXVsnbmFt ZSddKTsNCgkJCQkJJHJvd1tdPXRhZyhodG1sc3BlY2lhbGNoYXJzKCRyZW9yZGVyWyRhXVsn dGl0bGUnXSksJ2EnLCcgaHJlZj0iJy4kcGF0aC4nIicuJHN0eWxlLicgdGl0bGU9IicuaHRt bHNwZWNpYWxjaGFycygkcmVvcmRlclskYV1bJ3RpdGxlJ10pLiciJykubjsNCgkJCQl9DQoJ CQkkaSsrOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBkb1RhZyhkb0xhYmVsKCRsYWJlbCwgJGxh YmVsdGFnKS5kb1dyYXAoJHJvdywgJHdyYXB0YWcsICRicmVhaywgJGNsYXNzLCAkYnJlYWtj bGFzcyksICRjbG91ZHdyYXB0YWcpLm47DQoJfQ0KfSI7czo0OiJ0eXBlIjtzOjE6IjAiO3M6 NDoiaGVscCI7czoxODkxNzoiCTxwPjxkaXYgaWQ9InNtZF9oZWxwIj48L3A+CgoJPGgxPnNt ZF90YWdzIChDbGllbnQgc2lkZSk8L2gxPgoKCTxwPlRhZyBhcnRpY2xlcywgaW1hZ2VzLCBm aWxlcyBhbmQgbGlua3Mgd2l0aCBzdHVmZiwgdGhlbiB1c2UgdGhlIHB1YmxpYy1zaWRlIHRh Z3MgdG8gZGlzcGxheSB0aGUgbGlzdHMsIGZpbHRlciBvciBmaW5kIHJlbGF0ZWQgY29udGVu dC48L3A+CgoJPHA+RmVhdHVyZXM6PC9wPgoKCTx1bD4KCQk8bGk+TGlzdCAvIGZpbHRlciB0 YWdzIGJ5IHR5cGUgYW5kIG5hbWU8L2xpPgoJCTxsaT5TaG93IHJlbGF0ZWQgY29udGVudDoK CTx1bD4KCQk8bGk+YnkgdGFnIDxlbT5iZXR3ZWVuIHR5cGVzPC9lbT4uIGUuZy4gaWYgeW91 IGhhdmUgc2V0IHVwIGNvbW1vbiB0YWdzIGZvciBib3RoIGFydGljbGVzIGFuZCBmaWxlcywg d2hlbiB2aWV3aW5nIGFuIGFydGljbGUgeW91IGNhbiBhc2sgdGhlIHBsdWdpbiB3aGF0IGZp bGVzIGFyZSByZWxhdGVkIChvciB2aWNlIHZlcnNhOiB3aGF0IGFydGljbGVzIGFyZSByZWxh dGVkIHRvIHRoZSBjdXJyZW50IGZpbGUhKTwvbGk+CgkJPGxpPmJldHdlZW4gb3RoZXIgY29u dGVudCwgZS5nLiBhc2sgaXQgdG8gbWF0Y2ggdGhlIHRhZ3MgZnJvbSB0aGUgY3VycmVudCBm aWxlIHdpdGggdGhlIGFydGljbGUgY2F0ZWdvcnkgb3IgYSBjdXN0b20gZmllbGQ8L2xpPgoJ PC91bD48L2xpPgoJCTxsaT5UYWcgY29uZGl0aW9uYWxzIGFuZCBjb3VudHM8L2xpPgoJPC91 bD4KCgk8cD5JbiB0aGUgcGlwZWxpbmU6PC9wPgoKCTx1bD4KCQk8bGk+VGFnIGNsb3VkPC9s aT4KCQk8bGk+VGFnIGFuZCBhcnRpY2xlIHBhZ2luZyBzdXBwb3J0OiBuZXh0L3ByZXYvb2xk ZXIvbmV3ZXI8L2xpPgoJPC91bD4KCgk8aDIgY2xhc3M9ImF1dGhvciI+QXV0aG9yPC9oMj4K Cgk8cD48YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vY29tbWVudEZvcm0iPlN0ZWYg RGF3c29uPC9hPjwvcD4KCgk8aDIgY2xhc3M9Imluc3RhbGwiPkluc3RhbGxhdGlvbiAvIFVu aW5zdGFsbGF0aW9uPC9oMj4KCgk8cCBjbGFzcz0icmVxdWlyZXMiPlJlcXVpcmVzIGF0IGxl YXN0IFRleHRwYXR0ZXJuIDQuMC43IChvciB0aGUgbGF0ZXN0IDxzcGFuIGNsYXNzPSJjYXBz Ij5TVk48L3NwYW4+IGNvcHkgeW91IGNhbiBnZXQgeW91ciBoYW5kcyBvbikuIEluIGFkZGl0 aW9uLCBmb3IgY2xpZW50LXNpZGUgaW1hZ2UgdGFnZ2luZyB0byB3b3JrLCByZXF1aXJlcyB0 aGUgaW1hZ2UgcGF0Y2ggdGhhdCB3aWxsIGZvcm0gcGFydCBvZiA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiA0LjAuOC4gQ2hlY2sgdGhlIGZvcnVtIGZvciB0aGUgbGluayB0byB0 aGUgY3VycmVudCBwYXRjaC48L3A+CgoJPHA+RG93bmxvYWQgYm90aCBhZG1pbiBhbmQgY2xp ZW50IHBhcnRzIG9mIHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDovL3Rl eHRwYXR0ZXJuLm9yZy9wbHVnaW5zLzEwMjYvc21kX3RhZ3MiPnRleHRwYXR0ZXJuLm9yZzwv YT4gb3IgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUg cGFnZTwvYT4uIFBhc3RlIGVhY2ggcGFydCBpbiB0dXJuIGludG8gdGhlIDxzcGFuIGNsYXNz PSJjYXBzIj5UWFA8L3NwYW4+IEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFsbCBh bmQgZW5hYmxlIGJvdGggcGFydHMgKEFkbWluIGZpcnN0KS48L3A+CgoJPHA+VmlzaXQgdGhl IEV4dGVuc2lvbnMgLSZndDsgc21kX3RhZ3MgdGFiIGFuZCBjbGljayB0aGUgSW5zdGFsbCB0 YWJsZXMgYnV0dG9uLiBUaGUgbmVjZXNzYXJ5IHRhYmxlcyBhbmQgcHJlZmVyZW5jZXMgd2ls bCBiZSBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZC4gRnJvbSB0aGlzIHBhZ2UgeW91IGNhbiBJ bnN0YWxsLCBEZWxldGUgYW5kIFNhdmUgdGhlIHBsdWdpbiBwcmVmZXJlbmNlcyBvciByZW1v dmUgdGhlIHRhYmxlcyB0byBlbXB0eSB5b3VyIHRhZ3MgZW50aXJlbHkgYW5kIHN0YXJ0IGFn YWluLjwvcD4KCgk8cD5UbyByZW1vdmUgc21kX3RhZ3MgdmlzaXQgdGhlIHNtZF90YWdzIFBy ZWZlcmVuY2VzIHBhZ2UgYWdhaW4sIGhpdCAmIzgyMTY7UmVtb3ZlIHRhYmxlcyYjODIxNzsg dG8gcmVtb3ZlIHRoZSBwcmVmZXJlbmNlcyBhbmQgdGFnIHRhYmxlcyBmcm9tIHRoZSBkYXRh YmFzZSwgdGhlbiBzaW1wbHkgZGVsZXRlIHRoZSBwbHVnaW5zIGFzIG5vcm1hbCBmcm9tIHRo ZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UuPC9wPgoKCTxwPlZpc2l0IHRoZSA8YSBocmVm PSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9WVlZWVki PmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBhbmQgdG8gcmVwb3J0IHRoZSBzdWNj ZXNzIChvciBvdGhlcndpc2UpIG9mIHRoaXMgcGx1Z2luLjwvcD4KCgk8aDIgY2xhc3M9InVz YWdlIj5Vc2FnZTwvaDI+CgoJPHA+QSBob3N0IG9mIHRhZ3MgYXJlIGF2YWlsYWJsZSB0byBw dWxsIG91dCwgZmlsdGVyIGFuZCBkaXNwbGF5IHRoZSByZWxldmVudCB0YWdzIGFuZCBhc3Nv Y2lhdGVkIGNvbnRlbnQuPC9wPgoKCTxoMiBjbGFzcz0idGFnIj5zbWRfdGFnX2xpc3Q8L2gy PgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+RGlzcGxheSBhIGxpc3Qgb2YgdGFncyBtYXRj aGluZyBjZXJ0YWluIGNyaXRlcmlhLCBmcm9tIHRoZSBjdXJyZW50IGNvbnRleHQgKGdsb2Jh bCwgYXJ0aWNsZSwgZmlsZSwgbGluaywgb3IgaW1hZ2UpLjwvcD4KCgk8aDMgY2xhc3M9ImF0 dHMgIiBpZD0iYXR0cmlidXRlcyI+QXR0cmlidXRlczwvaDM+CgoJPHVsPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+dHlwZTwvc3Bhbj4gOiBvbmUgb2YgPGNvZGU+YXJ0aWNsZTwvY29k ZT4sIDxjb2RlPmltYWdlPC9jb2RlPiwgPGNvZGU+ZmlsZTwvY29kZT4gb3IgPGNvZGU+bGlu azwvY29kZT4uIElmIG9taXR0ZWQgdGhlIGJlc3QgbWF0Y2ggaXMgdXNlZCBiYXNlZCBvbiB3 aGVyZSB0aGUgdGFnIGFwcGVhcnMuIEZvciBleGFtcGxlLCBpZiBpdCBpcyBpbiB0aGUgPGNv ZGU+cGxhaW5saW5rczwvY29kZT4gZm9ybSB0aGUgdHlwZSB3b3VsZCBkZWZhdWx0IHRvIDxj b2RlPmxpbmtzPC9jb2RlPi4gSWYgYSBiZXN0IG1hdGNoIGNhbm5vdCBiZSBmb3VuZCwgaXQg dXNlcyA8Y29kZT5hcnRpY2xlPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5pZDwvc3Bhbj4gOiBsaXN0IG9mIHRhZyBJRHMgdG8gc2hvdy4gSWYgb21pdHRlZCBhbmQg eW91IHdlcmUgdmlld2luZyBhbiBhcnRpY2xlIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgdGFn cyBmcm9tIHRoZSBjdXJyZW50IGFydGljbGU8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+bmFtZTwvc3Bhbj4gOiBmaXhlZCBsaXN0IG9mIHRhZyBuYW1lcyB0byBzaG93LiBJZiB1 c2VkLCB0aGV5IHRydW1wIHRoZSA8Y29kZT5pZDwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+ZXhjbHVkZTwvc3Bhbj4gOiBhIGxpc3Qgb2YgdGFnIG5hbWVzIHlvdSB3 aXNoIHRvIG9taXQgZnJvbSB0aGUgbGlzdDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5wYXJlbnQ8L3NwYW4+IDogc3RhcnQgdGhlIGxpc3QgZnJvbSB0aGlzIHBhcmVudCB0YWcu IERlZmF1bHQgaXMgZW1wdHkgKGkuZS4gdGhlICYjODIxNjtyb290JiM4MjE3OyBub2RlIG9m IHRoaXMgcGFydGljdWxhciB0eXBlKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5z dWJsZXZlbDwvc3Bhbj4gOiBvbmx5IHNob3cgdGFncyBmcm9tIHRoaXMgbnVtYmVyIGxldmVs IGRvd253YXJkczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5vZmZzZXQ8L3NwYW4+ IDogc2tpcCBvdmVyIHRoaXMgbnVtYmVyIG9mIHRhZ3MgYmVmb3JlIHN0YXJ0aW5nIHRvIGRp c3BsYXkgdGhlbTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5saW1pdDwvc3Bhbj4g OiB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGFncyB0byBzaG93LiBEZWZhdWx0IGlzIDk5OTk5 IChpLmUuIGVmZmV0Y2l2ZWx5IHVubGltaXRlZCk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+Zm9ybTwvc3Bhbj4gOiBwYXNzIGNvbnRyb2wgdG8gdGhpcyBmb3JtIHRvIGRpc3Bs YXkgdGhlIHRhZyBsaXN0LiBZb3UgbWF5IGFsc28gdXNlIHRoZSB0YWcgYXMgYSBjb250YWlu ZXIuIFdpdGhvdXQgZm9ybSBvciBjb250YWluZXIsIHRoZSB0YWcgbmFtZSBhbmQgaXRzIGNv dW50IHdpbGwgYmUgb3V0cHV0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmluZGVu dDwvc3Bhbj4gOiBjaGFyYWN0ZXIgc2VxdWVuY2UgdG8gdXNlIHRvIGluZGljYXRlIHRoYXQg YSB0YWcgaXMgYSBzdWItdGFnIG9mIGEgcGFyZW50LiBEZWZhdWx0cyB0byB0d28gbm9uLWJy ZWFraW5nIHNwYWNlczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zZWN0aW9uX2xp bms8L3NwYW4+IDogaWYgeW91IHdhbnQgdGhlIHRhZ3MgdG8gYmUgY2xpY2thYmxlIHNvIHRo ZXkgY2FuIGxlYWQgdG8gYW5vdGhlciBwYWdlIG9mIHRhZyBkZXRhaWxzLCB0aGlzIGNhbiBi ZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSAmIzgyMTY7bGFuZGluZyBwYWdlJiM4MjE3OyB0aGV5 IHdpbGwgYXBwZWFyIG9uLiBJdCBpcyB1c3VhbGx5IG5vdCBzZXQsIHdoaWNoIG1lYW5zIGl0 JiM4MjE3O2xsIHVzZSB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPkRlZmF1bHQgc2VjdGlvbiBm b3IgdGFnczwvY29kZT4gcHJlZmVyZW5jZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5zaHVmZmxlPC9zcGFuPiA6IHJhbmRvbWx5IHNvcnQgdGhlIHRhZ3M8L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+bGFiZWw8L3NwYW4+IDogbGFiZWwgdGhlIHRvcCBvZiB0aGUg bGlzdCB3aXRoIHRoaXMgaGVhZGluZzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5s YWJlbHRhZzwvc3Bhbj4gOiB3cmFwIHRoZSBsYWJlbCB3aXRoIHRoaXMgKFgpSFRNTCB0YWcg KGUuZy4gPGNvZGU+bGFiZWx0YWc9JnF1b3Q7ZGl2JnF1b3Q7PC9jb2RlPikuIERlZmF1bHQg aXMgZW1wdHk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+d3JhcHRhZzwvc3Bhbj4g OiB3cmFwIHRoZSB0YWcgbGlzdCB3aXRoIHRoaXMgKFgpSFRNTCB0YWcuIERlZmF1bHQgaXMg PGNvZGU+dWw8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmJyZWFrPC9z cGFuPiA6IHdyYXAgZWFjaCB0YWcgd2l0aCB0aGlzIChYKUhUTUwgdGFnLiBEZWZhdWx0IGlz IDxjb2RlPmxpPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jbGFzczwv c3Bhbj4gOiBhcHBseSB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNz IHRvIHRoZSB0YWcgbGlzdC4gRGVmYXVsdCBpcyA8Y29kZT5zbWRfdGFnX2xpc3Q8L2NvZGU+ PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmJyZWFrY2xhc3M8L3NwYW4+IDogYXBw bHkgdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzcyB0byBlYWNoIHRh Zy4gRGVmYXVsdCBpcyB1bnNldDwvbGk+Cgk8L3VsPgoKCTxoMiBjbGFzcz0idGFnIj5zbWRf dGFnX25hbWU8L2gyPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+RGlzcGxheSB0aGUgbmFt ZSBvZiB0aGUgY3VycmVudCB0YWcuIFVzdXNhbGx5IHVzZWQgaW5zaWRlIGFuIHNtZF90YWdf bGlzdCBjb250YWluZXIuIENhbiBiYSBhIGNvbnRhaW5lciB0byBhZGQgZXh0cmEgZm9ybWF0 dGluZyBhcm91bmQgdGhlIG5hbWUgaWYgeW91IHdpc2guPC9wPgoKCTxoMyBjbGFzcz0iYXR0 cyAiIGlkPSJhdHRyaWJ1dGVzIj5BdHRyaWJ1dGVzPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj50aXRsZTwvc3Bhbj4gOiB3aGV0aGVyIHRvIHNob3cgdGhlIHRhZyBu YW1lICg8Y29kZT4wPC9jb2RlPiwgdGhlIGRlZmF1bHQpIG9yIGl0cyB0aXRsZSAoPGNvZGU+ MTwvY29kZT4pPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxpbms8L3NwYW4+IDog bWFrZXMgdGhlIG5hbWUgY2xpY2thYmxlIHRvIHRha2UgdmlzaXRvcnMgdG8gYSB0YWcgcGFn ZSBhYm91dCB0aGF0IHBhcnRpY3VsYXIgdGFnPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPnNlY3Rpb248L3NwYW4+IDogdGhlIHNlY3Rpb24gbmFtZSB0byBsaW5rIHRvLiBEZWZh dWx0cyB0byB0aGUgPGNvZGU+RGVmYXVsdCBzZWN0aW9uIGZvciB0YWdzPC9jb2RlPiBwcmVm ZXJlbmNlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnBhcmVudDwvc3Bhbj4gOiBu b3QgdmVyeSB1c2VmdWwgdG8gcHJpbnQsIGJ1dCBjYW4gYmUgdXNlZnVsIHRvIG9mZmVyIHRy ZWUtYnJvd3Npbmcgb2YgdGFncy4gRGVmYXVsdCBpcyA8Y29kZT4wPC9jb2RlPiBidXQgc2V0 IHRvIDxjb2RlPjE8L2NvZGU+IHRvIHR1cm4gdGhpcyBmZWF0dXJlIG9uPC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPnBhcmVudGxhYmVsPC9zcGFuPiA6IHRoZSBsYWJlbCB0byB1 c2UgZm9yIGFueSBwYXJlbnQgbGlua3MuIERlZmF1bHQgaXMgJiM4MjE2O1VwIGEgbGV2ZWwm IzgyMTc7PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPndyYXB0YWc8L3NwYW4+IDog d3JhcCB0aGUgdGFnIHdpdGggdGhpcyAoWClIVE1MIHRhZy4gRGVmYXVsdCBpcyB1bnNldDwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jbGFzczwvc3Bhbj4gOiBhcHBseSB0aGlz IDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNzIHRvIHRoZSB0YWcuIERlZmF1 bHQgaXMgPGNvZGU+c21kX3RhZ19uYW1lPC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxoMiBjbGFz cz0idGFnIj5zbWRfdGFnX2NvdW50PC9oMj4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPkRp c3BsYXkgdGhlIG51bWJlciBvZiBhcnRpY2xlcywgZmlsZXMsIGltYWdlcyBvciBsaW5rcyB0 aGF0IHVzZSB0aGUgY3VycmVudCB0YWcuPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJh dHRyaWJ1dGVzIj5BdHRyaWJ1dGVzPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5zaG93ZW1wdHk8L3NwYW4+IDogZGV0ZXJtaW5lcyB3aXRoZXIgdG8gZGlzcGxheSBj b3VudHMgdGhhdCBoYXZlIHplcm8gaXRlbXMuIERlZmF1bHQgaXMgPGNvZGU+MTwvY29kZT46 IHNob3cgYWxsIHZhbHVlcywgd2hldGhlciB6ZXJvIG9yIG5vdDwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj53cmFwdGFnPC9zcGFuPiA6IHdyYXAgdGhlIGNvdW50IHdpdGggdGhp cyAoWClIVE1MIHRhZy4gRGVmYXVsdCBpcyB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5jbGFzczwvc3Bhbj4gOiBhcHBseSB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5D U1M8L3NwYW4+IGNsYXNzIHRvIHRoZSBjb3VudC4gRGVmYXVsdCBpcyA8Y29kZT5zbWRfdGFn X2NvdW50PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj53cmFwY291bnQ8 L3NwYW4+IDogY2hhcmFjdGVycyB0byB3cmFwIGFyb3VuZCB0aGUgY291bnQgaXRzZWxmLiBT cGVjaWZ5IHVwIHRvIHR3byBpdGVtcywgc2VwYXJhdGVkIGJ5IGEgY29sb24uIElmIHlvdSB1 c2UganVzdCBvbmUgaXRlbSBpdCB3aWxsIGFwcGVhciBvbiBib3RoIHNpZGVzIG9mIHRoZSBj b3VudC4gRGVmYXVsdCBpcyAmIzgyMTY7Jm5ic3A7KDopJiM4MjE3OyB3aXRoIGEgc3BhY2Ug YXQgdGhlIHN0YXJ0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnBhcmFtZGVsaW08 L3NwYW4+IDogaWYgeW91IGRvbiYjODIxNzt0IGxpa2UgdGhlIGRlZmF1bHQgY29sb24gPGNv ZGU+OjwvY29kZT4gYXMgYSBzZXBhcmF0b3IgZm9yIHRoZSA8Y29kZT53cmFwY291bnQ8L2Nv ZGU+IGF0dHJpYnV0ZSwgY2hhbmdlIGl0PC9saT4KCTwvdWw+CgoJPGgzPkV4YW1wbGU8L2gz PgoKCTxwPkhlcmUmIzgyMTc7cyBhbiBleGFtcGxlLCB1c2luZyB0aGUgbGFzdCB0aHJlZSB0 YWdzLiBJbiB5b3VyIGRlZmF1bHQgYXJ0aWNsZSBmb3JtLCBhZGQgdGhpcyB0byBzaG93IGEg bGlzdCBvZiBjbGlja2FibGUgdGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgYXJ0 aWNsZTo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj5GaWxl ZCBpbjogJmx0O3R4cDpzbWRfdGFnX2xpc3Qgd3JhcHRhZz0mcXVvdDsmcXVvdDsgYnJlYWs9 JnF1b3Q7IHwgJnF1b3Q7CiAgICAgc2h1ZmZsZT0mcXVvdDsxJnF1b3Q7IGluZGVudD0mcXVv dDsmcXVvdDsmZ3Q7CiAgJmx0O3R4cDpzbWRfdGFnX25hbWUgbGluaz0mcXVvdDsxJnF1b3Q7 IC8mZ3Q7CiAgJmx0O3R4cDpzbWRfdGFnX2NvdW50IHdyYXBjb3VudD0mcXVvdDsvJnF1b3Q7 IC8mZ3Q7CiZsdDsvdHhwOnNtZF90YWdfbGlzdCZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPlRo YXQgbWlnaHQgZGlzcGxheTo8L3A+Cgo8cHJlPjxjb2RlPkZpbGVkIGluOiBVSyAvOC8gfCBw b2xpdGljcyAvMS8gfCBtZWRpYSAvMTQvIHwgbW9uZXkgLzkvIHwgYmFua3MgLzMvCjwvY29k ZT48L3ByZT4KCgk8aDIgY2xhc3M9InRhZyI+c21kX3RhZ19pbmZvPC9oMj4KCgk8cCBjbGFz cz0idGFnLXN1bW1hcnkiPkZvciBhbGwgb3RoZXIgcGllY2VzIG9mIGluZm9ybWF0aW9uIGFi b3V0IGEgdGFnLCB1c2UgdGhpcy48L3A+CgoJPGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0dHJp YnV0ZXMiPkF0dHJpYnV0ZXM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i Pml0ZW08L3NwYW4+IDogbGlzdCBvZiBvbmUgb3IgbW9yZSB0aGluZ3MgdG8gZGlzcGxheS4g Q2FuIGJlIGFueSBvZiA8Y29kZT5pZDwvY29kZT4sIDxjb2RlPm5hbWU8L2NvZGU+LCA8Y29k ZT50aXRsZTwvY29kZT4sIDxjb2RlPnR5cGU8L2NvZGU+LCA8Y29kZT5wYXJlbnQ8L2NvZGU+ LCA8Y29kZT5jaGlsZHJlbjwvY29kZT4sIDxjb2RlPmxldmVsPC9jb2RlPiwgPGNvZGU+Y291 bnQ8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPndyYXB0YWc8L3NwYW4+ IDogd3JhcCB0aGUgdGFnIGl0ZW1zIHdpdGggdGhpcyAoWClIVE1MIHRhZy4gRGVmYXVsdCBp cyB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jbGFzczwvc3Bhbj4gOiBh cHBseSB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNzIHRvIHRoZSB0 YWcgaXRlbXMuIERlZmF1bHQgaXMgPGNvZGU+c21kX3RhZ19pbmZvPC9jb2RlPjwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5icmVhazwvc3Bhbj4gOiB3cmFwIGVhY2ggdGFnIGl0 ZW0gd2l0aCB0aGlzIChYKUhUTUwgdGFnLiBEZWZhdWx0IGlzIDxjb2RlPmJyPC9jb2RlPjwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5icmVha2NsYXNzPC9zcGFuPiA6IGFwcGx5 IHRoaXMgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgdG8gZWFjaCB0YWcg aXRlbS4gRGVmYXVsdCBpcyB1bnNldDwvbGk+Cgk8L3VsPgoKCTxoMz5FeGFtcGxlPC9oMz4K Cgk8cD5JbnNpZGUgYW4gc21kX3RhZ19saXN0LCBwdXQgdGhpcyB0byBkaXNwbGF5IHNvbWUg aW5mb3JtYXRpb24gYWJvdXQgZWFjaCB0YWc6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxj b2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfdGFnX2luZm8gaXRlbT0mcXVvdDtpZCZx dW90OyAvJmd0OzoKICZsdDtwJmd0O3BhcmVudCB8ICNjaGlsZHJlbiB8IGxldmVsJmx0O2Jy IC8mZ3Q7CiAmbHQ7dHhwOnNtZF90YWdfaW5mbyBpdGVtPSZxdW90O3BhcmVudCwgY2hpbGRy ZW4sIGxldmVsJnF1b3Q7CiAgICAgIGJyZWFrPSZxdW90OyB8ICZxdW90OyAvJmd0OyZsdDsv cCZndDsKPC9jb2RlPjwvcHJlPgoKCTxoMiBjbGFzcz0idGFnIj5zbWRfaWZfdGFnX2xpc3Q8 L2gyPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+Q29uZGl0aW9uYWwgdGFnIHRoYXQgcmV0 dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IHNjb3BlIGlzIGEgZ2xvYmFsIHRhZyBsaXN0LiBV c2VmdWwgZm9yIGRldGVjdGluZyBpZiBhIHRhZyBoYXMgYmVlbiBjbGlja2VkIGFuZCByZWRp cmVjdGVkIHRvIGEgbGFuZGluZyBwYWdlIHNvIHlvdSBjYW4gdGFrZSBzb21lIGFjdGlvbiBv biB0aGF0IHBhZ2UuPC9wPgoKCTxoMiBjbGFzcz0idGFnIj5zbWRfaWZfdGFnPC9oMj4KCgk8 cCBjbGFzcz0idGFnLXN1bW1hcnkiPlJ1ZGltZW50YXJ5IGNvbmRpdGlvbmFsIHRvIGNoZWNr IGEgdGFnIGZvciBjZXJ0YWluIHBhcmFtZXRlcnMgYW5kIGV4ZWN1dGUgdGhlIGNvbnRhaW5l ZCBjb250ZW50IGlmIGl0IG1hdGNoZXMuIEV2ZXJ5IGF0dHJpYnV0ZSB5b3Ugc3BlY2lmeSBt dXN0IG1hdGNoIGZvciB0aGUgY29uZGl0aW9uYWwgY29udGVudCB0byBiZSBleGVjdXRlZCwg b3RoZXJ3aXNlIGFueSA8Y29kZT4mbHQ7dHhwOmVsc2UgLyZndDs8L2NvZGU+IGJyYW5jaCB3 aWxsIGJlIGZvbGxvd2VkLjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0iYXR0cmlidXRl cyI+QXR0cmlidXRlczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+dHlw ZTwvc3Bhbj4gOiBleGVjdXRlcyB0aGUgY29udGFpbmVkIHN0YXRlbWVudHMgaWYgdGhlIHR5 cGUgbWF0Y2hlcyB0aGUgb25lIGdpdmVuLiBUYWtlcyBvbmUgb2YgPGNvZGU+YXJ0aWNsZTwv Y29kZT4sIDxjb2RlPmltYWdlPC9jb2RlPiwgPGNvZGU+bGluazwvY29kZT4gb3IgPGNvZGU+ ZmlsZTwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+aWQ8L3NwYW4+IDog Y2hlY2tzIGlmIHRoZSB0YWcgSUQgbWF0Y2hlcyB0aGUgb25lIGdpdmVuPC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPm5hbWU8L3NwYW4+IDogY2hlY2tzIGlmIHRoZSB0YWcgbmFt ZSBtYXRjaGVzIHRoZSBvbmUgZ2l2ZW48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ dGl0bGU8L3NwYW4+IDogY2hlY2tzIGlmIHRoZSB0YWcgdGl0bGUgbWF0Y2hlcyB0aGUgb25l IGdpdmVuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnBhcmVudDwvc3Bhbj4gOiBj aGVja3MgaWYgdGhlIHRhZyBwYXJlbnQgbWF0Y2hlcyB0aGUgb25lIGdpdmVuPC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNvdW50PC9zcGFuPiA6IGNoZWNrcyBpZiB0aGUgdGFn IGNvdW50IG1hdGNoZXMgdGhlIG51bWJlciBnaXZlbjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5jaGlsZHJlbjwvc3Bhbj4gOiBjaGVja3MgaWYgdGhlIG51bWJlciBvZiBjaGls ZHJlbiB0aGUgdGFnIGhhcyBtYXRjaGVzIHRoZSBudW1iZXIgZ2l2ZW48L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+bGV2ZWw8L3NwYW4+IDogY2hlY2tzIGlmIHRoZSB0YWcgaXMg YXQgYSBzcGVjaWZpYyBsZXZlbCBpbiB0aGUgaGllcmFyY2h5PC9saT4KCTwvdWw+CgoJPHA+ RWFjaCBpdGVtIG1heSB0YWtlIGFuIGV4YWN0IHZhbHVlL3N0cmluZyB0byBtYXRjaCBvciBh IG1vZGlmaWVkIHN5bnRheDogeW91IG1heSBwcmVjZWRlIHRoZSB2YWx1ZSB3aXRoIG9uZSBv ZiB0aGUgZm9sbG93aW5nIHN5bWJvbHMgdG8gcGVyZm9ybSBhIG1hdGhlbWF0aWNhbC9ib29s ZWFuIGNvbXBhcmlzb246PC9wPgoKCTx1bD4KCQk8bGk+PGNvZGU+Jmx0OzwvY29kZT4gOiBs ZXNzIHRoYW48L2xpPgoJCTxsaT48Y29kZT4mbHQ7PTwvY29kZT4gOiBsZXNzIHRoYW4gb3Ig ZXF1YWwgdG88L2xpPgoJCTxsaT48Y29kZT4mZ3Q7PC9jb2RlPiA6IGdyZWF0ZXIgdGhhbjwv bGk+CgkJPGxpPjxjb2RlPiZndDs9PC9jb2RlPiA6IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0 bzwvbGk+CgkJPGxpPjxjb2RlPiE8L2NvZGU+IDogbm90IGVxdWFsIHRvPC9saT4KCTwvdWw+ CgoJPHA+Rm9yIGV4YW1wbGU6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNz PSJibG9jayI+Jmx0O3R4cDpzbWRfaWZfdGFnIHBhcmVudD0mcXVvdDshcm9vdCZxdW90OyBj b3VudD0mcXVvdDsmZ3Q7OCZxdW90OyZndDsKLy8gQ3VycmVudCB0YWcgaXMgbm90IGEgdG9w LWxldmVsIHRhZyBhbmQgaGFzCi8vIG1vcmUgdGhhbiA4IGl0ZW1zIGFzc29jaWF0ZWQgd2l0 aCBpdAombHQ7L3R4cDpzbWRfaWZfdGFnJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+Rm9yIG1v cmUgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3IgbW9yZSBkZXRhaWxlZCBjb25kaXRpb25hbCBi cmFuY2hpbmcsIGNvbnNpZGVyIHRoZSBzbWRfaWYgcGx1Z2luLjwvcD4KCgk8aDIgY2xhc3M9 InRhZyI+c21kX3JlbGF0ZWRfdGFnczwvaDI+CgoJPHAgY2xhc3M9InRhZy1zdW1tYXJ5Ij5U aGUgYmlnIG9uZSEgVGhpcyB0YWcgYWxsb3dzIHlvdSB0byBmaW5kIGFuZCBkaXNwbGF5IGFu eSBjb250ZW50IHRoYXQgbWF0Y2hlcyBzb21lIGZhY2V0IG9mIHRoZSBjdXJyZW50IGNvbnRl bnQuIEl0IGRlZmF1bHRzIHRvIG1hdGNoaW5nIHRhZyBuYW1lcy4gRm9yIGV4YW1wbGUsIGlm IHRoZSB0YWcgYXBwZWFyZWQgb24gaXRzIG93biBvbiBhbiBhcnRpY2xlIHBhZ2UsIGl0IHdv dWxkIGZpbmQgYWxsICYjODIxNjtyZWxhdGVkJiM4MjE3OyBhcnRpY2xlcyB0aGF0IGNvbnRh aW5lZCB0aGUgc2FtZSB0YWdzIGFzIHRoZSBvbmVzIGluIHRoZSBjdXJyZW50IGFydGljbGUu PC9wPgoKCTxwPkJ1dCBpdCBpcyBub3QgcmVzdHJpY3RlZCB0byBzZWFyY2hpbmcgd2l0aGlu IGl0cyBvd24gdHlwZS4gWW91IGNvdWxkIGZpbmQgYWxsIHRoZSBtYXRjaGluZyBpbWFnZXMg b3IgbGlua3MgdGhhdCBzaGFyZWQgYSB0YWcgd2l0aCB0aGUgY3VycmVudCBhcnRpY2xlLiBP ciBpZiBzaG93aW5nIGEgbGlzdCBvZiBsaW5rcywgZGlzcGxheSBhbGwgYXJ0aWNsZXMgdGhh dCBzaGFyZSB0YWdzIHdpdGggdGhlIGN1cnJlbnQgbGluay48L3A+CgoJPHA+RmluYWxseSwg eW91IGNhbiBhbHNvIG1hdGNoIG90aGVyIHN0dWZmIHN1Y2ggYXMgaW1hZ2UsIGZpbGUsIGxp bmsgb3IgYXJ0aWNsZSBjYXRlZ29yaWVzLCBjdXN0b20gZmllbGRzLCBhbmQgc28gb24uPC9w PgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRyaWJ1dGVzIj5BdHRyaWJ1dGVzPC9oMz4K Cgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50eXBlPC9zcGFuPiA6IHRoZSB0eXBl IG9mIGluZm9ybWF0aW9uIHlvdSB3YW50IHRvIDxlbT5maW5kPC9lbT4uIERlZmF1bHRzIHRv IHRoZSBzYW1lIHR5cGUgYXMgdGhlIGN1cnJlbnQgY29udGV4dCAoaS5lLiBpZiBpbiBhbiBh cnRpY2xlLCB3aWxsIGxvb2sgZm9yIG90aGVyIGFydGljbGVzKS4gQ2FuIGJlIG9uZSBvZiA8 Y29kZT5hcnRpY2xlPC9jb2RlPiwgPGNvZGU+ZmlsZTwvY29kZT4sIDxjb2RlPmxpbms8L2Nv ZGU+LCBvciA8Y29kZT5pbWFnZTwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+bWF0Y2g8L3NwYW4+IDogdGhlIGluZm9ybWF0aW9uIHlvdSB3YW50IHRvIDxlbT5jb21w YXJlPC9lbT4uIFNlZSB0aGUgZXhhbXBsZXMgYmVsb3cgZm9yIGRldGFpbGVkIHVzYWdlLiBE ZWZhdWx0cyB0byA8Y29kZT50YWdfbmFtZTwvY29kZT4gYnV0IGNhbiBiZToKCTx1bD4KCQk8 bGk+dGFnX2lkPC9saT4KCQk8bGk+dGFnX3RpdGxlPC9saT4KCQk8bGk+dGFnX3BhcmVudDwv bGk+CgkJPGxpPnRhZ19jb3VudDwvbGk+CgkJPGxpPnRhZ19jaGlsZHJlbjwvbGk+CgkJPGxp PnRhZ19sZXZlbDwvbGk+CgkJPGxpPnNvbWUgZmllbGQgbmFtZSBzdWNoIGFzIDxjb2RlPmNh dGVnb3J5PC9jb2RlPiBvciA8Y29kZT5jdXN0b20xPC9jb2RlPjwvbGk+Cgk8L3VsPjwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5tYXRjaF9zZWxmPC9zcGFuPiA6IHdoZXRoZXIg dG8gaW5jbHVkZSBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBpdGVtLiBVc3VhbGx5IHlv dSB3b24mIzgyMTc7dCB3YW50IHRoaXMgc28gaXQgaXMgb2ZmICg8Y29kZT4wPC9jb2RlPikg YW5kIGluIGZhY3QsIHNldHRpbmcgaXQgdG8gMSBjYW4gc29tZXRpbWVzIGNhdXNlIGVycm9y czwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5mb3JtPC9zcGFuPiA6IHBhc3MgY29u dHJvbCB0byB0aGUgZ2l2ZW4gZm9ybSBmb3IgcmVuZGVyaW5nIHRoZSB0YWcgb3V0cHV0LiBD YW4gYWxzbyBiZSB1c2VkIGFzIGEgY29udGFpbmVyLiBJZiB5b3UgZG9uJiM4MjE3O3Qgc3Bl Y2lmeSBlaXRoZXIgYSA8Y29kZT5mb3JtPC9jb2RlPiBvciBhIGNvbnRhaW5lciwgaXQgb3V0 cHV0cyBzb21lIHNlbnNpYmxlIGRlZmF1bHQgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4 dCAoaS5lLiB0aGUgcGVybWxpbmtlZCBhcnRpY2xlIHRpdGxlIGluIHRoZSA8Y29kZT5hcnRp Y2xlPC9jb2RlPiBjb250ZXh0LCB0aGUgZmlsZSBkb3dubG9hZCBsaW5rIGluIHRoZSA8Y29k ZT5maWxlPC9jb2RlPiBjb250ZXh0LCBldGMpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPnNlY3Rpb248L3NwYW4+IDogb25seSBvZiB1c2UgZm9yIGFydGljbGVzLCB0aGlzIGxp bWl0cyB0aGUgc2VhcmNoIHRvIGFydGljbGVzIGluIGEgcGFydGljdWxhciBzZWN0aW9uLiBE ZWZhdWx0cyB0byB0aGUgY3VycmVudCBzZWN0aW9uIGJ1dCBjaGVjayB0aGUgY2F2ZWF0cyBi ZWxvdyBmb3IgYSBzaWRlLWVmZmVjdCBvZiB0aGlzIGF0dHJpYnV0ZTwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5vZmZzZXQ8L3NwYW4+IDogc2tpcCB0aGlzIG51bWJlciBvZiBt YXRjaGVkIGl0ZW1zIGJlZm9yZSBzdGFydGluZyB0byBkaXNwbGF5IHRoZW08L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+bGltaXQ8L3NwYW4+IDogdGhlIG1heGltdW0gbnVtYmVy IG9mIGl0ZW1zIHRvIGRpc3BsYXkuIERlZmF1bHRzIHRvIDk5OTk5IChpLmUuIHZpcnR1YWxs eSB1bmxpbWl0ZWQpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm5vX3dpZG93PC9z cGFuPiA6IFdoZW4gZGlzcGxheWluZyBhcnRpY2xlIHRpdGxlcywgcHJldmVudCBsb25lIHdv cmRzIG9uIHRoZSAybmQgbGluZS4gRGVmYXVsdHMgdG8gdGhlIEFkbWluIHByZWZlcmVuY2Ug b2YgdGhlIHNhbWUgbmFtZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zb3J0PC9z cGFuPiA6IFJlb3JkZXIgdGhlIGl0ZW1zIGJ5IHNvbWUgZmllbGQuIERlZmF1bHRzIHRvIDxj b2RlPlBvc3RlZCBkZXNjPC9jb2RlPiBmb3IgYXJ0aWNsZXMgYW5kIGRlc2NlbmRpbmcgZGF0 ZSBmb3IgZXZlcnl0aGluZyBlbHNlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxh YmVsPC9zcGFuPiA6IGRpc3BsYXkgdGhpcyBsYWJlbCBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0 IG9mIGl0ZW1zPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxhYmVsdGFnPC9zcGFu PiA6IHdyYXAgdGhpcyAoWClIVE1MIHRhZyBhcm91bmQgdGhlIGxhYmVsLiBEZWZhdWx0IGlz IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPndyYXB0YWc8L3NwYW4+IDog d3JhcCB0aGlzIChYKUhUTUwgdGFnIGFyb3VuZCB0aGUgaXRlbXMuIERlZmF1bHQgaXMgdW5z ZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+YnJlYWs8L3NwYW4+IDogd3JhcCBl YWNoIGl0ZW0gd2l0aCB0aGlzIChYKUhUTUwgdGFnLiBEZWZhdWx0IGlzIDxjb2RlPmJyPC9j b2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jbGFzczwvc3Bhbj4gOiBhcHBs eSB0aGUgZ2l2ZW4gPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgdG8gdGhl IGl0ZW0gbGlzdC4gRGVmYXVsdCBpcyA8Y29kZT5zbWRfcmVsYXRlZF90YWdzPC9jb2RlPjwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5kZWxpbTwvc3Bhbj4gOiBpZiB5b3UgcHJl ZmVyIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IGNvbW1hIDxjb2RlPiw8L2Nv ZGU+IHRvIHNwZWNpZnkgbGlzdHMgb2YgaXRlbXMgaW4gdGhlIHRhZyBhdHRyaWJ1dGVzLCBj aGFuZ2UgaXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+cGFyYW1kZWxpbTwvc3Bh bj4gOiBpZiB5b3UgcHJlZmVyIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IGNv bG9uIDxjb2RlPjo8L2NvZGU+IHRvIHNlcGFyYXRlIHBhcmFtZXRlcnMgaW5zaWRlIGF0dHJp YnV0ZXMsIGNoYW5nZSBpdDwvbGk+Cgk8L3VsPgoKCTxwPldoZW4gc3BlY2lmeWluZyBpdGVt cyB0byA8Y29kZT5tYXRjaDwvY29kZT4geW91IGFyZSBub3QgcmVzdHJpY3RlZCB0byBzZWFy Y2hpbmcgdGhlIGN1cnJlbnQgY29udGV4dC4gRm9yIGV4YW1wbGUsIHNheSB5b3UgaGFkIGEg bGlzdCBvZiBmaWxlIGRvd25sb2FkcyBhbmQgIG5leHQgdG8gZWFjaCBmaWxlIHlvdSB3YW50 ZWQgdG8gc2hvdyB0aGUgYXJ0aWNsZXMgdGhhdCBtYXRjaGVkIHRoZSBmaWxlJiM4MjE3O3Mg Y2F0ZWdvcnkuIFlvdSBtaWdodCBkbyB0aGlzIGluIHlvdXIgPGNvZGU+ZmlsZXM8L2NvZGU+ IGZvcm06PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0 O3R4cDpmaWxlX2Rvd25sb2FkX2xpbmsmZ3Q7CiAgJmx0O3R4cDpmaWxlX2Rvd25sb2FkX25h bWUgLyZndDsKJmx0Oy90eHA6ZmlsZV9kb3dubG9hZF9saW5rJmd0OwombHQ7dHhwOnNtZF9y ZWxhdGVkX3RhZ3MgdHlwZT0mcXVvdDthcnRpY2xlJnF1b3Q7CiAgICAgbGFiZWw9JnF1b3Q7 WW91IG1pZ2h0IGFsc28gbGlrZSZxdW90OyBsYWJlbHRhZz0mcXVvdDtwJnF1b3Q7CiAgICAg bWF0Y2g9JnF1b3Q7ZmlsZTpjYXRlZ29yeSZxdW90OyB3cmFwdGFnPSZxdW90O3VsJnF1b3Q7 CiAgICAgYnJlYWs9JnF1b3Q7bGkmcXVvdDsgLyZndDsKPC9jb2RlPjwvcHJlPgoKCTxoMz5D YXZlYXQ8L2gzPgoKCTxwPkJlIGNhcmVmdWwgd2l0aCB0aGUgPGNvZGU+c2VjdGlvbjwvY29k ZT4gYXR0cmlidXRlOiBvbiBhIGdsb2JhbCB0YWcgbGlzdCwgPGVtPmFsbDwvZW0+IGl0ZW1z IG9mIGEgZ2l2ZW4gdHlwZSBhcmUgY29uc2lkZXJlZCBpcnJlc3BlY3RpdmUgb2Ygc2VjdGlv bi4gVGh1cyBpZiB5b3UgZGlkOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFz cz0iYmxvY2siPiZsdDt0eHA6c21kX2lmX3RhZ19saXN0Jmd0OwogICZsdDtoMiZndDtUYWdz IGxpc3QmbHQ7L2gyJmd0OwogICZsdDt0eHA6c21kX3RhZ19saXN0Jmd0OwogICAgJmx0O3R4 cDpzbWRfdGFnX25hbWUgdGl0bGU9JnF1b3Q7MSZxdW90OyBsaW5rPSZxdW90OzEmcXVvdDsg LyZndDsKICAgICZsdDt0eHA6c21kX3RhZ19jb3VudCAvJmd0OwogICAgJmx0O3R4cDpzbWRf cmVsYXRlZF90YWdzIHNlY3Rpb249JnF1b3Q7YXJjaGl2ZSZxdW90OyB3cmFwdGFnPSZxdW90 O3VsJnF1b3Q7IGJyZWFrPSZxdW90O2xpJnF1b3Q7IC8mZ3Q7CiAgJmx0Oy90eHA6c21kX3Rh Z19saXN0Jmd0OwombHQ7L3R4cDpzbWRfaWZfdGFnX2xpc3QmZ3Q7CjwvY29kZT48L3ByZT4K Cgk8cD5Zb3UgbWlnaHQgc2VlIGEgdGFnIG5hbWUgd2l0aCBhIGNvdW50IG9mIDEyIGJ1dCBv bmx5IDcgYXJ0aWNsZXMgbGlzdGVkIHVuZGVyIGl0LCBpZiBmaXZlIG9mIHlvdXIgYXJ0aWNs ZXMgdGhhdCB1c2VkIHRoYXQgcGFydGljdWxhciB0YWcgd2VyZSBmcm9tIGFub3RoZXIgc2Vj dGlvbi4gVG8gYmUgc3VyZSwgb25seSB1c2UgdGhlIDxjb2RlPnNlY3Rpb248L2NvZGU+IGF0 dHJpYnV0ZSBvbiBpbmRpdmlkdWFsIGFydGljbGUgcGFnZXMuPC9wPgoKCTxwPjwvZGl2Pjwv cD4KPCEtLSAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0gLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0 L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuMyA7fQojc21kX2hlbHAgY29kZSB7 IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3Vy aWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQojc21kX2hlbHAg Y29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5 OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEw cHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGE6bGluaywgI3NtZF9o ZWxwIGE6dmlzaXRlZCB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJv cmRlci1ib3R0b206IDFweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQojc21k X2hlbHAgYTpob3ZlciwgI3NtZF9oZWxwIGE6YWN0aXZlIHsgY29sb3I6IGJsdWU7IHRleHQt ZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGJsdWU7IHBhZGRp bmctYm90dG9tOjFweDt9CiNzbWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4 IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9 CiNzbWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGlu ZzoxMHB4IDAgMDsgY29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJp ZjsgfQojc21kX2hlbHAgaDMgeyBjb2xvcjogIzY5MzsgZm9udDogYm9sZCAxMnB4IEFyaWFs LCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3Rl eHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7fQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDEx cHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBw eCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsg Zm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6IzA1ZjsgfQojc21kX2hlbHAgLm1hbmQgeyBiYWNr Z3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxl IHt3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVtO30K I3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGgge2JvcmRlcjoxcHggc29saWQgIzk5OTsgcGFk ZGluZzouNWVtIDA7fQojc21kX2hlbHAgLnJlcXVpcmVzIHsgY29sb3I6cmVkO30KPC9zdHls ZT4KPCEtLSAtLS0gRU5EIFBMVUdJTiBDU1MgLS0tIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiJi ZDkzOWNkOGFkNTcyMzNlMTNiZjM2ODhlOThlNmE5OSI7fQ==