# Name: smd_faux_role v0.20 # Type: Admin side plugin # Switch user privs on the fly so you can see what other accounts see # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEzOiJzbWRfZmF1eF9yb2xlIjtzOjY6ImF1dGhvciI7czox MToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjIwIjtzOjExOiJkZXNjcmlwdGlvbiI7 czo2NzoiU3dpdGNoIHVzZXIgcHJpdnMgb24gdGhlIGZseSBzbyB5b3UgY2FuIHNlZSB3aGF0 IG90aGVyIGFjY291bnRzIHNlZSI7czo0OiJjb2RlIjtzOjU2NDc6ImlmIChAdHhwaW50ZXJm YWNlID09ICdhZG1pbicpIHsNCglnbG9iYWwgJHR4cF91c2VyLCAkc21kX2ZhdXhfcHVibGlz aF91c2VyLCAkc21kX2ZhdXhfcG9zaXRpb24sICRzbWRfcHJpdnM7DQoNCgkvLyBQVVQgWU9V UiBTVVBFUi1VU0VSIExPR0lOIE5BTUUoUykgSU5TSURFIFRIRSAnJyAoQ0FTRSBTRU5TSVRJ VkUpLg0KCS8vIENPTU1BLVNFUEFSQVRFIFRIRSBMSVNUIE9GIE5BTUVTLg0KCSRzbWRfZmF1 eF9wdWJsaXNoX3VzZXIgPSAnJzsNCg0KCS8vIERST1BET1dOIExPQ0FUSU9OLiBTRVQgVEhJ UyBUTzoNCgkvLyAgKiAwIElGIFlPVSBXQU5UIEFOIEFETUlOLT5TV0lUQ0ggUk9MRSBUQUIg V0lUSCBUSEUgRFJPUERPV04gSU4gSVQuDQoJLy8gICogQU5ZIE9USEVSIFZBTFVFKFMpIFNQ RUNJRlkgV0hFUkUgWU9VIFdBTlQgVEhFIERST1BET1dOIFRPIEFQUEVBUiBJTiBBIEZJWEVE IExPQ0FUSU9OIE9OIFRIRSBTQ1JFRU4NCgkvLyAgICAtLT4gVEhFIFZBTFVFIElTIFRIRSBO VU1CRVIgT0YgUElYRUxTIEZST00gVEhFIExFRlQgJiBUT1AgRURHRVMsIGUuZy4gJzgwMCcg b3IgJzc1MCw3MicuDQoJJHNtZF9mYXV4X3Bvc2l0aW9uID0gJyc7DQoNCgkvLyBET04nVCBU T1VDSCBBTllUSElORyBCRUxPVyBUSElTIExJTkUhDQoJaWYgKGZ1bmN0aW9uX2V4aXN0cygn Z2V0X2dyb3VwcycpKSB7DQoJCSRzbWRfcHJpdnMgPSBnZXRfZ3JvdXBzKCk7DQoJfSBlbHNl IHsNCgkJJHNtZF9wcml2cyA9IGFycmF5KA0KCQkJMSA9PiBnVHh0KCdwdWJsaXNoZXInKSwN CgkJCTIgPT4gZ1R4dCgnbWFuYWdpbmdfZWRpdG9yJyksDQoJCQkzID0+IGdUeHQoJ2NvcHlf ZWRpdG9yJyksDQoJCQk0ID0+IGdUeHQoJ3N0YWZmX3dyaXRlcicpLA0KCQkJNSA9PiBnVHh0 KCdmcmVlbGFuY2VyJyksDQoJCQk2ID0+IGdUeHQoJ2Rlc2lnbmVyJyksDQoJCSk7DQoJfQ0K CXVuc2V0KCRzbWRfcHJpdnNbMF0pOw0KDQoJaWYgKGluX2xpc3QoJHR4cF91c2VyLCAkc21k X2ZhdXhfcHVibGlzaF91c2VyKSkgew0KCQlpZiAoJHNtZF9mYXV4X3Bvc2l0aW9uKSB7DQoJ CQkvLyBBZGQgdGhlIGRyb3Bkb3duIHRvIHRoZSB0b3AgYmFyDQoJCQlhZGRfcHJpdnMoJ3Nt ZF9mYXV4X3JvbGUnLCAnMSwyLDMsNCw1LDYnKTsgLy8gT25seSBuZWNlc3NhcnkgZm9yIGxv Z291dCBjYWxsYmFjayB0byBmaXJlDQoJCQlyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2ZhdXhf Z28nLCAnYWRtaW5fc2lkZScsICdoZWFkZXInKTsNCgkJfSBlbHNlIHsNCgkJCS8vIEFkZCB0 aGUgaW50ZXJmYWNlIHRvIHRoZSBBZG1pbiB0YWIgc2luY2UgdGhhdCdzIHZpc2libGUgdG8g YWxsIHVzZXJzDQoJCQlhZGRfcHJpdnMoJ3NtZF9mYXV4X3JvbGUnLCAnMSwyLDMsNCw1LDYn KTsNCgkJCXJlZ2lzdGVyX3RhYignYWRtaW4nLCAnc21kX2ZhdXhfcm9sZScsIHNtZF9mYXV4 X2dUeHQoJ3RhYl9uYW1lJykpOw0KCQkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9mYXV4X3Jv bGUnLCAnc21kX2ZhdXhfcm9sZScpOw0KCQl9DQoJCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRf ZmF1eF9wbHVnaW5fb2ZmJywgJ3BsdWdpbl9saWZlY3ljbGUuc21kX2ZhdXhfcm9sZScsICdk aXNhYmxlZCcpOw0KCQlyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2ZhdXhfcGx1Z2luX29mZics ICdwbHVnaW5fbGlmZWN5Y2xlLnNtZF9mYXV4X3JvbGUnLCAnZGVsZXRlZCcpOw0KCQlyZWdp c3Rlcl9jYWxsYmFjaygnc21kX2ZhdXhfcGx1Z2luX2xvZ291dCcsICdhZG1pbl9zaWRlJywg J2hlYWRfZW5kJyk7DQoJfQ0KfQ0KDQppZiAoZ3BzKCdhcHBfbW9kZScpID09ICdhc3luYycp IHsNCiAgIHNtZF9mYXV4X3BsdWdpbl9vZmYoJ3NtZF9mYXV4X3JvbGUnLCAnc21kX2ZhdXhf cGx1Z2luX29mZicpOw0KfQ0KDQovLyBQbHVnaW4ganVtcC1vZmYgcG9pbnQNCmZ1bmN0aW9u IHNtZF9mYXV4X3JvbGUoJGV2dCwgJHN0cCkgew0KCWlmKCEkc3RwIG9yICFpbl9hcnJheSgk c3RwLCBhcnJheSgNCgkJJ3NtZF9mYXV4X3ByZWZzJywNCgkJJ3NtZF9mYXV4X3BsdWdpbl9v ZmYnLA0KCQknc21kX2ZhdXhfc2F2ZScsDQoJKSkpIHsNCgkJc21kX2ZhdXhfcHJlZnMoKTsN Cgl9IGVsc2UgJHN0cCgpOw0KfQ0KDQovLyBBbGxvdyByb2xlIHRvIGJlIGFsdGVyZWQgdmlh IGRyb3Bkb3duIG9uIGl0cyBvd24gdGFiLi4uDQpmdW5jdGlvbiBzbWRfZmF1eF9wcmVmcygk bXNnPScnKSB7DQoJJG1zZyA9IChlbXB0eSgkbXNnKSkgPyBncHMoJ3NtZF9mYXV4X21zZycp IDogJG1zZzsNCg0KCXBhZ2V0b3Aoc21kX2ZhdXhfZ1R4dCgndGFiX25hbWUnKSwgJG1zZyk7 DQoJZWNobyBzbWRfZmF1eF9kcm9wZG93bigpOw0KfQ0KDQovLyAuLi5vciBwb3NpdGlvbiB0 aGUgZHJvcGRvd24gb24gdGhlIHRvcCByb3cNCmZ1bmN0aW9uIHNtZF9mYXV4X2dvKCRldnQs ICRzdHAsICRkYXRhKSB7DQoJZ2xvYmFsICRzbWRfZmF1eF9wb3NpdGlvbjsNCg0KCXNtZF9m YXV4X3NhdmUoKTsNCgkkcG9zID0gZG9fbGlzdCgkc21kX2ZhdXhfcG9zaXRpb24pOw0KCSRs ZWZ0ID0gKGlzc2V0KCRwb3NbMF0pICYmIGlzX251bWVyaWMoJHBvc1swXSkpID8gJHBvc1sw XSA6IDA7DQoJJHRvcCA9IChpc3NldCgkcG9zWzFdKSAmJiBpc19udW1lcmljKCRwb3NbMV0p KSA/ICRwb3NbMV0gOiAwOw0KCXJldHVybiAnPGRpdiBpZD0ic21kX2ZhdXhfZ28iIHN0eWxl PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OicuJGxlZnQuJ3B4O3RvcDonLiR0b3AuJ3B4OyI+ Jy5zbWRfZmF1eF9kcm9wZG93bigpLic8L2Rpdj4nLiRkYXRhOw0KfQ0KDQovLyBSZW5kZXIg dGhlIGRyb3Bkb3duDQpmdW5jdGlvbiBzbWRfZmF1eF9kcm9wZG93bigpIHsNCglnbG9iYWwg JHR4cF91c2VyLCAkc21kX2ZhdXhfcHVibGlzaF91c2VyLCAkc21kX2ZhdXhfcG9zaXRpb24s ICRzbWRfcHJpdnM7DQoNCgkkdXNlcmxpc3QgPSBkb19saXN0KCRzbWRfZmF1eF9wdWJsaXNo X3VzZXIpOw0KCSRvdXQgPSAnJzsNCg0KCWZvcmVhY2ggKCR1c2VybGlzdCBhcyAkdGhlVXNl cikgew0KCQlpZiAoJHR4cF91c2VyID09ICR0aGVVc2VyKSB7DQoJCQkkY3Vycl9wcml2cyA9 IHNhZmVfZmllbGQoInByaXZzIiwgInR4cF91c2VycyIsICJuYW1lID0gJyIuZG9TbGFzaCgk dGhlVXNlcikuIiciKTsNCgkJCSRvdXQgPSBmb3JtKA0KCQkJCSc8ZGl2IHN0eWxlPSJ0ZXh0 LWFsaWduOmNlbnRlciI+Jy5zbWRfZmF1eF9nVHh0KCdzZXRfdXNlcicsIGFycmF5KCd7bmFt ZX0nID0+ICR0aGVVc2VyKSkNCgkJCQkuIHNlbGVjdElucHV0KCdzbWRfZmF1eF9wcml2Jywg JHNtZF9wcml2cywgJGN1cnJfcHJpdnMsICcnLCAxKQ0KCQkJCS4oKCRzbWRfZmF1eF9wb3Np dGlvbikgPyBlSW5wdXQoZ3BzKCdldmVudCcpKS5zSW5wdXQoZ3BzKCdzdGVwJykpIDogZUlu cHV0KCdzbWRfZmF1eF9yb2xlJykuc0lucHV0KCdzbWRfZmF1eF9zYXZlJykpDQoJCQkJLmhJ bnB1dCgnc21kX2ZhdXhfdXNlcicsICR0aGVVc2VyKQ0KCQkJCS4gJzwvZGl2PicNCgkJCQkp Ow0KCQl9DQoJfQ0KCXJldHVybiAkb3V0Ow0KfQ0KDQovLyBVcGRhdGUgdGhlIHVzZXIgcHJp dnMgaW4gdGhlIGRhdGFiYXNlIHdoZW4gdGhlIHNlbGVjdCBsaXN0IGlzIGFsdGVyZWQNCmZ1 bmN0aW9uIHNtZF9mYXV4X3NhdmUoKSB7DQoJZ2xvYmFsICRzbWRfcHJpdnMsICRzbWRfZmF1 eF9wb3NpdGlvbjsNCg0KCSRwcml2ID0gZ3BzKCdzbWRfZmF1eF9wcml2Jyk7DQoJJHVuYW1l ID0gZG9TbGFzaChncHMoJ3NtZF9mYXV4X3VzZXInKSk7DQoJJG1zZyA9ICcnOw0KDQoJaWYg KCRwcml2ICYmICR1bmFtZSkgew0KCQlhc3NlcnRfaW50KCRwcml2KTsNCgkJJGNoZWNrID0g c2FmZV9maWVsZCgnbmFtZScsICd0eHBfdXNlcnMnLCAibmFtZT0nJHVuYW1lJyIpOw0KDQoJ CS8vIEFsdGVyIHRoZSBwcml2cyBvZiB0aGUgbm9taW5hdGVkIHN1cGVyLXVzZXINCgkJaWYg KCRjaGVjaykgew0KCQkJc2FmZV91cGRhdGUoJ3R4cF91c2VycycsICdwcml2cz0nLmRvU2xh c2goJHByaXYpLCAibmFtZSA9ICciLiR1bmFtZS4iJyIpOw0KCQkJJG1zZyA9IHNtZF9mYXV4 X2dUeHQoJ25ld19yb2xlJywgYXJyYXkoJ3tuYW1lfScgPT4gJHVuYW1lLCAne3JvbGV9JyA9 PiAkc21kX3ByaXZzWyRwcml2XSkpOw0KCQl9IGVsc2Ugew0KCQkJJG1zZyA9IHNtZF9mYXV4 X2dUeHQoJ2JhZF91c2VyJywgYXJyYXkoJ3tuYW1lfScgPT4gJHVuYW1lKSk7DQoJCX0NCg0K CQlpZiAoJHNtZF9mYXV4X3Bvc2l0aW9uKSB7DQoJCQloZWFkZXIoIkxvY2F0aW9uOiAiLiRf U0VSVkVSWydIVFRQX1JFRkVSRVInXSk7DQoJCX0gZWxzZSB7DQoJCQkkYXJnc1snZXZlbnQn XSA9ICdzbWRfZmF1eF9yb2xlJzsNCgkJCSRhcmdzWydzdGVwJ10gPSAnc21kX2ZhdXhfcHJl ZnMnOw0KCQkJJGFyZ3NbJ3NtZF9mYXV4X21zZyddID0gJG1zZzsNCgkJCWhlYWRlcigiTG9j YXRpb246ICIuJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10uc3RyX3JlcGxhY2UoJyZhbXA7Jywg JyYnLCBqb2luX3FzKCRhcmdzKSkpOw0KCQl9DQoJfQ0KfQ0KDQovLyBSZXN0b3JlIHB1Ymxp c2hlciBwcml2cyBpZiBwbHVnaW4gaXMgZGVsZXRlZC9kaXNhYmxlZC9sb2dvdXQgZGV0ZWN0 ZWQNCmZ1bmN0aW9uIHNtZF9mYXV4X3BsdWdpbl9vZmYoJGV2dCwgJHN0cCkgew0KCWdsb2Jh bCAkc21kX2ZhdXhfcHVibGlzaF91c2VyOw0KDQoJJHVzZXJsaXN0ID0gZG9fbGlzdCgkc21k X2ZhdXhfcHVibGlzaF91c2VyKTsNCg0KCWZvcmVhY2ggKCR1c2VybGlzdCBhcyAkdGhlVXNl cikgew0KCQlzYWZlX3VwZGF0ZSgndHhwX3VzZXJzJywgJ3ByaXZzPTEnLCAibmFtZSA9ICci LmRvU2xhc2goJHRoZVVzZXIpLiInIik7DQoJfQ0KfQ0KDQovLyBIaWphY2sgdGhlIGxvZ291 dCBsaW5rIGFuZCBwYXNzIGNvbnRyb2wgdG8gdGhlIHBsdWdpbiB2aWEgQUpBWCBpZiBpdCdz IGNsaWNrZWQuDQovLyBUaGlzIHRvbWZvb2xlcnkgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaXQn cyBub3QgcG9zc2libGUgdG8gcnVuIGEgcGx1Z2luIG9uIGxvZ291dA0KZnVuY3Rpb24gc21k X2ZhdXhfcGx1Z2luX2xvZ291dCgkZXZ0LCAkc3RwKSB7DQoJZWNobyA8PDxFT0pTDQo8c2Ny aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpqUXVlcnkoZnVuY3Rpb24oKSB7DQoJalF1 ZXJ5KCJhW2hyZWYqPSdsb2dvdXQnXSIpLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7DQovLwkJ ZXZlbnQucHJldmVudERlZmF1bHQoKTsNCgkJc2VuZEFzeW5jRXZlbnQoDQoJCXsNCgkJCWV2 ZW50OiAnc21kX2ZhdXhfcm9sZScsDQoJCQlzdGVwOiAnc21kX2ZhdXhfcGx1Z2luX29mZicN CgkJfSk7DQoJCXJldHVybiB0cnVlOw0KCX0pOw0KfSk7DQo8L3NjcmlwdD4NCkVPSlM7DQp9 DQoNCi8vIFBsdWdpbi1zcGVjaWZpYyByZXBsYWNlbWVudCBzdHJpbmdzIC0gbG9jYWxpc2Ug YXMgcmVxdWlyZWQNCmZ1bmN0aW9uIHNtZF9mYXV4X2dUeHQoJHdoYXQsICRhdHRzID0gYXJy YXkoKSkgew0KCSRsYW5nID0gYXJyYXkoDQoJCSdiYWRfdXNlcicgPT4gJ05vIHN1Y2ggdXNl cjoge25hbWV9JywNCgkJJ25ld19yb2xlJyA9PiAnTmV3IHJvbGUgZm9yIHtuYW1lfSBpcyB7 cm9sZX0nLA0KCQknc2V0X3VzZXInID0+ICdTZXQgdXNlciB7bmFtZX0gdG86ICcsDQoJCSd0 YWJfbmFtZScgPT4gJ1N3aXRjaCByb2xlJywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFuZ1sk d2hhdF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIzIjtzOjU6Im9yZGVyIjtzOjE6 IjUiO3M6NToiZmxhZ3MiO3M6MToiMiI7czo0OiJoZWxwIjtzOjU0NDU6IjxkaXYgaWQ9InNt ZF9oZWxwIj4KCgk8aDEgaWQ9InRvcCI+c21kX2ZhdXhfcm9sZTwvaDE+CgoJPHA+QWx0ZXIg dXNlciBwcml2cyBhdCBhbnkgdGltZSBzbyB5b3UgY2FuIGV4cGVyaWVuY2UgdGhlIGFkbWlu IHNpZGUgYXMgb3RoZXIgdXNlcnMgc2VlIGl0LjwvcD4KCgk8aDIgaWQ9ImF1dGhvciI+QXV0 aG9yPC9oMj4KCgk8cD48YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vY29udGFjdCI+ U3RlZiBEYXdzb248L2E+LiBGb3Igb3RoZXIgc29mdHdhcmUgYnkgbWUsIG9yIHRvIG1ha2Ug YSBkb25hdGlvbiwgc2VlIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ci PnNvZnR3YXJlIHBhZ2U8L2E+LjwvcD4KCgk8aDIgaWQ9Imluc3RhbGwiPkluc3RhbGxhdGlv biAvIFVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5SZXF1aXJl cyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA0LjMuMCs8L3A+CgoJPHA+RG93bmxv YWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4u b3JnL3BsdWdpbnMvMTE1OS9zbWRfZmF1eF9yb2xlIj50ZXh0cGF0dGVybi5vcmc8L2E+LCBv ciB0aGUgc29mdHdhcmUgcGFnZSBhYm92ZSwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNw YW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gQWRtaW4gLSZndDsgUGx1Z2lucyBwYW5lLCBp bnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi4gVmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6 Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0zMzQ2MiI+Zm9ydW0g dGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUgc3VjY2VzcyBv ciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPHA+VG8gcmVtb3ZlIHRoZSBwbHVn aW4sIHNpbXBseSBkZWxldGUgaXQgZnJvbSB0aGUgQWRtaW4tJmd0O1BsdWdpbnMgdGFiLiBX aGVuZXZlciB5b3UgZGVsZXRlIG9yIGRpc2FibGUgdGhlIHBsdWdpbiB0aGUgbm9taW5hdGVk IGFjY291bnRzIGFyZSBhbGwgYXV0b21hdGljYWxseSByZXN0b3JlZCB0byBQdWJsaXNoZXIu PC9wPgoKCTxoMiBpZD0idXNhZ2UiPlVzYWdlPC9oMj4KCgk8cD5Gb3Igc2VjdXJpdHkgcmVh c29ucyB5b3UgbXVzdCBlZGl0IHRoZSBwbHVnaW4gY29kZSBiZWZvcmUgdXNpbmcgaXQuIFlv dSBjYW4gY3VzdG9taXNlIHR3byBwYXJhbWV0ZXJzOjwvcD4KCgk8aDMgaWQ9InVzZXJzIj5V c2VyczwvaDM+CgoJPHA+QWx0ZXIgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHJlcHJlc2VudCB0 aGUgdXNlciAobG9naW4pIG5hbWUgb3IgbmFtZXMgb2YgeW91ciBtYWluIFB1Ymxpc2hlciBh Y2NvdW50KHMpOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2si Pgkkc21kX2ZhdXhfcHVibGlzaF91c2VyID0gJiMzOTsmIzM5OzsKPC9jb2RlPjwvcHJlPgoK CTxwPkZvciBleGFtcGxlLCBpZiB5b3VyIG1haW4gcHVibGlzaGVyIGxvZ2luIHdhcyA8Y29k ZT5GcmVkPC9jb2RlPiwgeW91IHdvdWxkIGNoYW5nZSB0aGF0IGxpbmUgdG8gcmVhZDo8L3A+ Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4JJHNtZF9mYXV4X3B1 Ymxpc2hfdXNlciA9ICYjMzk7RnJlZCYjMzk7Owo8L2NvZGU+PC9wcmU+CgoJPHA+SWYgeW91 IHdhbnRlZCB0byBhbGxvdyB0d28gdXNlcnMgJiM4MjEyOyBGcmVkIGFuZCBEYXBobmUgJiM4 MjEyOyB0byBhbHRlciB0aGVpciBwcml2cywgc3BlY2lmeSB0aGVtIGxpa2UgdGhpczo8L3A+ Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4JJHNtZF9mYXV4X3B1 Ymxpc2hfdXNlciA9ICYjMzk7RnJlZCwgRGFwaG5lJiMzOTs7CjwvY29kZT48L3ByZT4KCgk8 cD5PbmNlIHRoYXQgaXMgZG9uZSwgc2F2ZSB0aGUgcGx1Z2luLiBBIG5ldyB0YWIgd2lsbCBh cHBlYXIgdW5kZXIgPGVtPkFkbWluLSZndDtTd2l0Y2ggcm9sZTwvZW0+IHdoZW4geW91IGFy ZSBsb2dnZWQgaW4gYXMgb25lIG9mIHRoZSBub21pbmF0ZWQgYWNjb3VudHMuIFVzZSB0aGUg ZHJvcGRvd24gdG8gc2V0IHRoaXMgdXNlciYjODIxNztzIHByaXZzIGxldmVsLiBJdCBkb2Vz IHRoaXMgZGlyZWN0bHkgYW5kIHBlcm1hbmVudGx5IGluIHRoZSBkYXRhYmFzZS48L3A+CgoJ PHA+UGxlYXNlIG5vdGU6PC9wPgoKCTx1bD4KCQk8bGk+TG9naW4gbmFtZXMgYXJlIGNhc2Ut c2Vuc2l0aXZlPC9saT4KCQk8bGk+UHVibGlzaGVyIHByaXZzIHdpbGwgYmUgcmVzdG9yZWQg dG8gPHN0cm9uZz5hbGwgbm9taW5hdGVkIGFjY291bnRzPC9zdHJvbmc+IHdoZW4gdGhlIHBs dWdpbiBpcyBlaXRoZXIgZGlzYWJsZWQgb3IgZGVsZXRlZDwvbGk+Cgk8L3VsPgoKCTxoMyBp ZD0icG9zaXRpb24iPkRyb3Bkb3duIHBvc2l0aW9uPC9oMz4KCgk8cD5BbHRlciB0aGUgZm9s bG93aW5nIGxpbmUgdG8gZGV0ZXJtaW5lIHdoZXJlIHlvdSB3YW50IHRoZSBkcm9wZG93biB0 byBhcHBlYXIgZm9yIGFsbCBub21pbmF0ZWQgdXNlcnM6PC9wPgoKPHByZSBjbGFzcz0iYmxv Y2siPjxjb2RlIGNsYXNzPSJibG9jayI+CSRzbWRfZmF1eF9wb3NpdGlvbiA9ICYjMzk7MCYj Mzk7Owo8L2NvZGU+PC9wcmU+CgoJPHA+SWYgeW91IHNldCBpdCB0byAwLCB0aGUgZHJvcGRv d24gd2lsbCBhcHBlYXIgaW4gaXRzIG93biB0YWIgdW5kZXIgPGVtPkFkbWluLSZndDtTd2l0 Y2ggcm9sZTwvZW0+LiBJZiB5b3Ugc2V0IGl0IHRvIGFueXRoaW5nIGVsc2UsIHRoZSBwbHVn aW4gYXNzdW1lcyB5b3UgYXJlIGRlZmluaW5nIHRoZSB4IGFuZCB5IGNvLW9yZGluYXRlcyBv ZiB0aGUgc2NyZWVuIGxvY2F0aW9uIGF0IHdoaWNoIHlvdSB3aXNoIHRoZSBkcm9wZG93biB0 byBhcHBlYXIgaW4gdGhlIGludGVyZmFjZSAmIzgyMTI7IG9uIGFsbCB0YWJzLjwvcD4KCgk8 cD5Gb3IgZXhhbXBsZSwgdG8gc2V0IHRoZSBkcm9wZG93biB0byBhcHBlYXIgb24gdGhlIHRv cCBiYXIgKGluIHRoZSBjbGFzc2ljIHRoZW1lIGF0IGxlYXN0KSBhdCA3MDBweCBmcm9tIHRo ZSBsZWZ0IGVkZ2Ugb2YgdGhlIHNjcmVlbjo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNv ZGUgY2xhc3M9ImJsb2NrIj4JJHNtZF9mYXV4X3Bvc2l0aW9uID0gJiMzOTs3MDAmIzM5OzsK PC9jb2RlPjwvcHJlPgoKCTxwPlRvIHNldCBpdCB0byBhcHBlYXIgYXQgNzUwIHBpeGVscyBm cm9tIHRoZSBsZWZ0IGFuZCA3MiBwaXhlbHMgZnJvbSB0aGUgdG9wOjwvcD4KCjxwcmUgY2xh c3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPgkkc21kX2ZhdXhfcG9zaXRpb24gPSAm IzM5Ozc1MCwgNzImIzM5OzsKPC9jb2RlPjwvcHJlPgoKCTxwPkFsdGhvdWdoIHRoZSBkcm9w ZG93biBpcyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgKHNvIGl0IHdvbiYjODIxNzt0IGludGVy ZmVyZSB3aXRoIHlvdXIgYWRtaW4gc2lkZSBsYXlvdXQpIG5vIGd1YXJhbnRlZSBpcyBtYWRl IHRoYXQgaXQgd2lsbCBhcHBlYXIgY29ycmVjdGx5IGluIHRoZW1lcyBvdGhlciB0aGFuIGNs YXNzaWMgYW5kIHJlbW9yYSBiZWNhdXNlIGl0IGRlcGVuZHMgaG93IHRoZSBhdXRob3IgaGFz IGRlc2lnbmVkIHRoZSBoZWFkZXIuIEV4cGVyaW1lbnQgdG8gZmluZCB0aGUgYmVzdCBsb2Nh dGlvbi4gWW91IG1heSB1c2UgbmVnYXRpdmUgdmFsdWVzIGlmIHJlcXVpcmVkLjwvcD4KCgk8 aDIgaWQ9ImNoYW5nZWxvZyI+Q2hhbmdlbG9nPC9oMj4KCgk8dWw+CgkJPGxpPjExIEFwciAx MCB8IDAuMTAgfCBJbml0aWFsIHJlbGVhc2U8L2xpPgoJCTxsaT4xMSBBdWcgMTAgfCAwLjIw IHwgUmVxdWlyZXMgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gNC4zLjAgOyBwdWJs aXNoZXIgcHJpdnMgcmVzdG9yZWQgb24gbG9nb3V0ICh0aGFua3MgbmV0LWNhcnZlcik8L2xp PgoJPC91bD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NTICoqKiAtLT4KPHN0 eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNz bWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3Vy aWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZD Qzt9CiNzbWRfaGVscCBjb2RlLmJsb2NrIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6 MXB4IGRvdHRlZCAjOTk5OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBkaXNwbGF5OmJs b2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21kX2hlbHAg YTpsaW5rLCAjc21kX2hlbHAgYTp2aXNpdGVkIHsgY29sb3I6ICMwMGM7IHRleHQtZGVjb3Jh dGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90 dG9tOjFweDt9CiNzbWRfaGVscCBhOmhvdmVyLCAjc21kX2hlbHAgYTphY3RpdmUgeyBjb2xv cjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90dG9tOiAycHggc29s aWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30KI3NtZF9oZWxwIGgxIHsgY29sb3I6ICMz Njk7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFs aWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlk IGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdweCBHZW9y Z2lhLCBzYW5zLXNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGNvbG9yOiAjMDc5OyBmb250OiBi b2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdp bjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgdGV4dC1kZWNvcmF0aW9u OnVuZGVybGluZTt9CiNzbWRfaGVscCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwgc2Fu cy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMCA7dGV4dC10 cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQojc21kX2hlbHAgLmF0bm0geyBmb250LXdlaWdodDpi b2xkOyBjb2xvcjojMzNkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJhY2tncm91bmQ6I2VlZTsg Ym9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFibGUge3dpZHRoOjkwJTsg dGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmctYm90dG9tOjFlbTt9CiNzbWRfaGVscCB0ZCwg I3NtZF9oZWxwIHRoIHtib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6LjVlbSAwO30K I3NtZF9oZWxwIHVsIHsgbGlzdC1zdHlsZS10eXBlOnNxdWFyZTsgfQojc21kX2hlbHAgLmlt cG9ydGFudCB7Y29sb3I6cmVkO30KI3NtZF9oZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVw eCAzMHB4OyB9CiNzbWRfaGVscCAuYnJlYWsgeyBtYXJnaW4tdG9wOjVweDsgfQo8L3N0eWxl Pgo8IS0tICoqKiBFTkQgUExVR0lOIENTUyAqKiogLS0+CiI7czozOiJtZDUiO3M6MzI6IjFi N2QwMzhmMmM0NTZiYTJlYjc0MmJlYmFlZGVlMDQ5Ijt9