Как преобразовать файл Python из сжатого base64?

Вопрос или проблема

У меня есть файл python такого вида

import marshal
exec(marshal.loads(base64.b64decode('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ZT0iU2F0Q29ubmVjdENvbnRyb2xQYW5lbCIgcG9zaXRpb249IjE4MCw3MyIgc2l6ZT0iMTU2MCw5MzMiIHRpdGxlPSIlcyIgZmxhZ3M9IndmTm9Cb3JkZXIiPgo8ZVBpeG1hcCBwb3NpdGlvbj0iMCwwIiBzaXplPSIxNTYwLDkzMyIgcGl4bWFwPSIvdXNyL2xpYi9lbmlnbWEyL3B5dGhvbi9QbHVnaW5zL0V4dGVuc2lvbnMvVHVuaXNpYUFjdGl2ZUNvZGVQYW5lbC9za2luL2J1dHRvbnMvTElOVVhTQVRGSEQucG5nIiB6UG9zaXRpb249IjAiIHRyYW5zcGFyZW50PSIxIiAvPgo8ZUxhYmVsIHRleHQ9IlBMVUdJTlMgQ1JFQVRFRCBCWSBMSU5VWFNBVCBbIFBBTkVMUyArIEZSRUVfU0VSVkVSU18gQUNUSVZFIENPREUgXSIgcG9zaXRpb249Ijk2NCw2NjQiIHpQb3NpdGlvbj0iMSIgc2l6ZT0iNTUyLDc4IiBmb250PSJSZWd1bGFyOzI4ICIgaGFsaWduPSJjZW50ZXIiIHZhbGlnbj0iY2VudGVyIiB0cmFuc3BhcmVudD0iMSIgLz4KPHdpZGdldCBuYW1lPSJwaW5Db2RlbGlzdCIgcG9zaXRpb249IjU0LDIxNCIgc2l6ZT0iODc4LDIyNSIgZW5hYmxlV3JhcEFyb3VuZD0iMSIgaXRlbUhlaWdodD0iNzAiIHNlbGVjdGlvblBpeG1hcD0iL3Vzci9saWIvZW5pZ21hMi9weXRob24vUGx1Z2lucy9FeHRlbnNpb25zL1R1bmlzaWFBY3RpdmVDb2RlUGFuZWwvc2tpbi9idXR0b25zL21haW5zZWxmLnBuZyIgc2Nyb2xsYmFyTW9kZT0ic2hvd09uRGVtYW5kIiB0cmFuc3BhcmVudD0iMSIgelBvc2l0aW9uPSIxIiAvPgo8d2lkZ2V0IG5hbWU9ImluZm9UZXh0IiBwb3NpdGlvbj0iOTc1LDIxNCIgelBvc2l0aW9uPSIxIiBzaXplPSI1MjcsIDE2MyIgZm9udD0iUmVndWxhcjsyNSIgaGFsaWduPSJjZW50ZXIiIHZhbGlnbj0iY2VudGVyIiB0cmFuc3BhcmVudD0iMSIgLz4KPHdpZGdldCBuYW1lPSJLZXlfUmVkIiBwb3NpdGlvbj0iMzE5LDg2MiIgelBvc2l0aW9uPSI1IiBzaXplPSIxNDBkLC00MDAiIHZhbGlnbj0iY2VudGVyIiBoYWxpZ249ImNlbnRlciIgZm9udD0iUmVndWxhcjsyOCIgdHJhbnNwYXJlbnQ9IjEiIGZvcmVncm91bmRDb2xvcj0id2hpdGUiIHNoYWRvd0NvbG9yPSJibGFjayIgc2hhZG93T2Zmc2V0PSItMSwtMSIgLz4KPHdpZGdldCBuYW1lPSJLZXlfR3JlZW4iIHBvc2l0aW9uPSI1ODMsODYxIiB6UG9zaXRpb249IjUiIHNpemU9IjE0MCw0MCIgdmFsaWduPSJjZW50ZXIiIGhhbGlnbj0iY2VudGVyIiBmb250PSJSZWd1bGFyOzI4IiB0cmFuc3BhcmVudD0iMSIgZm9yZWdyb3VuZENvbG9yPSJ3aGl0ZSIgc2hhZG93Q29sb3I9ImJsYWNrIiBzaGFkb3dPZmZzZXQ9Ii0xLC0xIiAvPgo8d2lkZ2V0IG5hbWU9IktleV9ZZWxsb3ciIHBvc2l0aW9uPSI4MzcsODQ5IiB6UG9zaXRpb249IjciIHNpemU9IjE0MCwgNTciIHZhbGlnbj0iY2VudGVyIiBoYWxpZ249ImNlbnRlciIgZm9udD0iUmVndWxhcjsgMjQiIHRyYW5zcGFyZW50PSIwIiBiYWNrZ3JvdW5kQ29sb3I9IiMwMTA1MGIiIC8+CjxlTGFiZWwgdGV4dD0iUGx1Z2lucyA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjUsNDc1IiBzaXplPSIxODUsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X01lbnUiIHpQb3NpdGlvbj0iMSIgcG9zaXRpb249IjEzMjEsNDcxIiBzaXplPSIxODMsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iSGVscCA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjYsNTI5IiBzaXplPSIxMjYsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X1R2IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSIxMzI1LDUyNiIgc2l6ZT0iMTc1LDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgaGFsaWduPSJsZWZ0IiAvPjx3aWRnZXQgbmFtZT0iUGFzc19Vc2VyIiBwb3NpdGlvbj0iNTQsNDg2IiB6UG9zaXRpb249IjEiIHNpemU9Ijg3OCw3MCIgZm9udD0iUmVndWxhcjszNSIgaGFsaWduPSJjZW50ZXIiIHZhbGlnbj0iY2VudGVyIiBiYWNrZ3JvdW5kQ29sb3I9IiM2NjAwMDAiIHRyYW5zcGFyZW50PSIxIiAvPjxlTGFiZWwgdGV4dD0iUHV0IDE0IERpZ2l0cyBGb3IgVGhlIFBhc3N3b3JkIEFuZCBEbyBOb3QgRm9yZ2V0IFRoZSBVc2VyICIgcG9zaXRpb249IjU0LDU3NiIgelBvc2l0aW9uPSIxIiBzaXplPSIxMzY4LDc4IiBmb250PSJSZWd1bGFyOzM0ICIgZm9yZWdyb3VuZENvbG9yPSIjMDBmZmZmIiBoYWxpZ249ImNlbnRlciIgdmFsaWduPSJjZW50ZXIiIHRyYW5zcGFyZW50PSIxIiAvPjwvc2NyZWVuPnMoAAAAVFVOSVNJQS1TQVQgQUNUSVZFIENPREUgKExJTlVYU0FUKSBWMi4yRnNZCwAACjxzY3JlZW4gbmFtZT0iU2F0Q29ubmVjdENvbnRyb2xQYW5lbCIgcG9zaXRpb249IjkwLDM1IiBzaXplPSIxMTAwLDY1MCIgdGl0bGU9IiVzIiBmbGFncz0id2ZOb0JvcmRlciI+CjxlUGl4bWFwIHBvc2l0aW9uPSI2LDAiIHNpemU9IjEwOTQsNjUwIiBwaXhtYXA9Ii91c3IvbGliL2VuaWdtYTIvcHl0aG9uL1BsdWdpbnMvRXh0ZW5zaW9ucy9UdW5pc2lhQWN0aXZlQ29kZVBhbmVsL3NraW4vYnV0dG9ucy9MSU5VWFNBVGhkLnBuZyIgelBvc2l0aW9uPSIwIiB0cmFuc3BhcmVudD0iMSIgLz4KPGVMYWJlbCB0ZXh0PSJWUE4gPSIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iOTY2LDQyNCIgc2l6ZT0iMTMzLDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgLz4KPGVMYWJlbCB0ZXh0PSJLZXlfaW5mbyIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iMTMyMSw0MjYiIHNpemU9IjE4OSw0MCIgZm9udD0iUmVndWxhcjsgMzUiIHRyYW5zcGFyZW50PSIwIiBiYWNrZ3JvdW5kQ29sb3I9IiMwMTA1MGIiIC8+CjxlTGFiZWwgdGV4dD0iUGx1Z2lucyA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjUsNDc1IiBzaXplPSIxODUsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X01lbnUiIHpQb3NpdGlvbj0iMSIgcG9zaXRpb249IjEzMjEsNDcxIiBzaXplPSIxODMsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iSGVscCA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjYsNTI5IiBzaXplPSIxMjYsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X1R2IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSIxMzI1LDUyNiIgc2l6ZT0iMTc1LDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgaGFsaWduPSJsZWZ0IiAvPjx3aWRnZXQgbmFtZT0iUGFzc19Vc2VyIiBwb3NpdGlvbj0iNTQsNDg2IiB6UG9zaXRpb249IjEiIHNpemU9Ijg3OCw3MCIgZm9udD0iUmVndWxhcjszNSIgaGFsaWduPSJjZW50ZXIiIHZhbGlnbj0iY2VudGVyIiBiYWNrZ3JvdW5kQ29sb3I9IiM2NjAwMDAiIHRyYW5zcGFyZW50PSIxIiAvPjxlTGFiZWwgdGV4dD0iUHV0IDE0IERpZ2l0cyBGb3IgVGhlIFBhc3N3b3JkIEFuZCBEbyBOb3QgRm9yZ2V0IFRoZSBVc2VyICIgcG9zaXRpb249IjU0LDU3NiIgelBvc2l0aW9uPSIxIiBzaXplPSIxMzY4LDc4IiBmb250PSJSZWd1bGFyOzM0ICIgZm9yZWdyb3VuZENvbG9yPSIjMDBmZmZmIiBoYWxpZ249ImNlbnRlciIgdmFsaWduPSJjZW50ZXIiIHRyYW5zcGFyZW50PSIxIiAvPjwvc2NyZWVuPnMoAAAAVFVOSVNJQS1TQVQgQUNUSVZFIENPREUgKExJTlVYU0FUKSBWMi4yRnNZCwAACjxzY3JlZW4gbmFtZT0iU2F0Q29ubmVjdENvbnRyb2xQYW5lbCIgcG9zaXRpb249IjkwLDM1IiBzaXplPSIxMTAwLDY1MCIgdGl0bGU9IiVzIiBmbGFncz0id2ZOb0JvcmRlciI+CjxlUGl4bWFwIHBvc2l0aW9uPSI2LDAiIHNpemU9IjEwOTQsNjUwIiBwaXhtYXA9Ii91c3IvbGliL2VuaWdtYTIvcHl0aG9uL1BsdWdpbnMvRXh0ZW5zaW9ucy9UdW5pc2lhQWN0aXZlQ29kZVBhbmVsL3NraW4vYnV0dG9ucy9MSU5VWFNBVGhkLnBuZyIgelBvc2l0aW9uPSIwIiB0cmFuc3BhcmVudD0iMSIgLz4KPGVMYWJlbCB0ZXh0PSJWUE4gPSIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iOTY2LDQyNCIgc2l6ZT0iMTMzLDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgLz4KPGVMYWJlbCB0ZXh0PSJLZXlfaW5mbyIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iMTMyMSw0MjYiIHNpemU9IjE4OSw0MCIgZm9udD0iUmVndWxhcjsgMzUiIHRyYW5zcGFyZW50PSIwIiBiYWNrZ3JvdW5kQ29sb3I9IiMwMTA1MGIiIC8+CjxlTGFiZWwgdGV4dD0iUGx1Z2lucyA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjUsNDc1IiBzaXplPSIxODUsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X01lbnUiIHpQb3NpdGlvbj0iMSIgcG9zaXRpb249IjEzMjEsNDcxIiBzaXplPSIxODMsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iSGVscCA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjYsNTI5IiBzaXplPSIxMjYsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X1R2IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSIxMzI1LDUyNiIgc2l6ZT0iMTc1LDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgaGFsaWduPSJsZWZ0IiAvPjx3aWRnZXQgbmFtZT0iUGFzc19Vc2VyIiBwb3NpdGlvbj0iNTQsNDg2IiB6UG9zaXRpb249IjEiIHNpemU9Ijg3OCw3MCIgZm9udD0iUmVndWxhcjszNSIgaGFsaWduPSJjZW50ZXIiIHZhbGlnbj0iY2VudGVyIiBiYWNrZ3JvdW5kQ29sb3I9IiM2NjAwMDAiIHRyYW5zcGFyZW50PSIxIiAvPjxlTGFiZWwgdGV4dD0iUHV0IDE0IERpZ2l0cyBGb3IgVGhlIFBhc3N3b3JkIEFuZCBEbyBOb3QgRm9yZ2V0IFRoZSBVc2VyICIgcG9zaXRpb249IjU0LDU3NiIgelBvc2l0aW9uPSIxIiBzaXplPSIxMzY4LDc4IiBmb250PSJSZWd1bGFyOzM0ICIgZm9yZWdyb3VuZENvbG9yPSIjMDBmZmZmIiBoYWxpZ249ImNlbnRlciIgdmFsaWduPSJjZW50ZXIiIHRyYW5zcGFyZW50PSIxIiAvPjwvc2NyZWVuPnMoAAAAVFVOSVNJQS1TQVQgQUNUSVZFIENPREUgKExJTlVYU0FUKSBWMi4yRnNZCwAACjxzY3JlZW4gbmFtZT0iU2F0Q29ubmVjdENvbnRyb2xQYW5lbCIgcG9zaXRpb249IjkwLDM1IiBzaXplPSIxMTAwLDY1MCIgdGl0bGU9IiVzIiBmbGFncz0id2ZOb0JvcmRlciI+CjxlUGl4bWFwIHBvc2l0aW9uPSI2LDAiIHNpemU9IjEwOTQsNjUwIiBwaXhtYXA9Ii91c3IvbGliL2VuaWdtYTIvcHl0aG9uL1BsdWdpbnMvRXh0ZW5zaW9ucy9UdW5pc2lhQWN0aXZlQ29kZVBhbmVsL3NraW4vYnV0dG9ucy9MSU5VWFNBVGhkLnBuZyIgelBvc2l0aW9uPSIwIiB0cmFuc3BhcmVudD0iMSIgLz4KPGVMYWJlbCB0ZXh0PSJWUE4gPSIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iOTY2LDQyNCIgc2l6ZT0iMTMzLDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgLz4KPGVMYWJlbCB0ZXh0PSJLZXlfaW5mbyIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iMTMyMSw0MjYiIHNpemU9IjE4OSw0MCIgZm9udD0iUmVndWxhcjsgMzUiIHRyYW5zcGFyZW50PSIwIiBiYWNrZ3JvdW5kQ29sb3I9IiMwMTA1MGIiIC8+CjxlTGFiZWwgdGV4dD0iUGx1Z2lucyA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjUsNDc1IiBzaXplPSIxODUsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X01lbnUiIHpQb3NpdGlvbj0iMSIgcG9zaXRpb249IjEzMjEsNDcxIiBzaXplPSIxODMsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iSGVscCA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjYsNTI5IiBzaXplPSIxMjYsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X1R2IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSIxMzI1LDUyNiIgc2l6ZT0iMTc1LDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgaGFsaWduPSJsZWZ0IiAvPjx3aWRnZXQgbmFtZT0iUGFzc19Vc2VyIiBwb3NpdGlvbj0iNTQsNDg2IiB6UG9zaXRpb249IjEiIHNpemU9Ijg3OCw3MCIgZm9udD0iUmVndWxhcjszNSIgaGFsaWduPSJjZW50ZXIiIHZhbGlnbj0iY2VudGVyIiBiYWNrZ3JvdW5kQ29sb3I9IiM2NjAwMDAiIHRyYW5zcGFyZW50PSIxIiAvPjxlTGFiZWwgdGV4dD0iUHV0IDE0IERpZ2l0cyBGb3IgVGhlIFBhc3N3b3JkIEFuZCBEbyBOb3QgRm9yZ2V0IFRoZSBVc2VyICIgcG9zaXRpb249IjU0LDU3NiIgelBvc2l0aW9uPSIxIiBzaXplPSIxMzY4LDc4IiBmb250PSJSZWd1bGFyOzM0ICIgZm9yZWdyb3VuZENvbG9yPSIjMDBmZmZmIiBoYWxpZ249ImNlbnRlciIgdmFsaWduPSJjZW50ZXIiIHRyYW5zcGFyZW50PSIxIiAvPjwvc2NyZWVuPnMoAAAAVFVOSVNJQS1TQVQgQUNUSVZFIENPREUgKExJTlVYU0FUKSBWMi4yRnNZCwAACjxzY3JlZW4gbmFtZT0iU2F0Q29ubmVjdENvbnRyb2xQYW5lbCIgcG9zaXRpb249IjkwLDM1IiBzaXplPSIxMTAwLDY1MCIgdGl0bGU9IiVzIiBmbGFncz0id2ZOb0JvcmRlciI+CjxlUGl4bWFwIHBvc2l0aW9uPSI2LDAiIHNpemU9IjEwOTQsNjUwIiBwaXhtYXA9Ii91c3IvbGliL2VuaWdtYTIvcHl0aG9uL1BsdWdpbnMvRXh0ZW5zaW9ucy9UdW5pc2lhQWN0aXZlQ29kZVBhbmVsL3NraW4vYnV0dG9ucy9MSU5VWFNBVGhkLnBuZyIgelBvc2l0aW9uPSIwIiB0cmFuc3BhcmVudD0iMSIgLz4KPGVMYWJlbCB0ZXh0PSJWUE4gPSIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iOTY2LDQyNCIgc2l6ZT0iMTMzLDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgLz4KPGVMYWJlbCB0ZXh0PSJLZXlfaW5mbyIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iMTMyMSw0MjYiIHNpemU9IjE4OSw0MCIgZm9udD0iUmVndWxhcjsgMzUiIHRyYW5zcGFyZW50PSIwIiBiYWNrZ3JvdW5kQ29sb3I9IiMwMTA1MGIiIC8+CjxlTGFiZWwgdGV4dD0iUGx1Z2lucyA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjUsNDc1IiBzaXplPSIxODUsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X01lbnUiIHpQb3NpdGlvbj0iMSIgcG9zaXRpb249IjEzMjEsNDcxIiBzaXplPSIxODMsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iSGVscCA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjYsNTI5IiBzaXplPSIxMjYsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X1R2IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSIxMzI1LDUyNiIgc2l6ZT0iMTc1LDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgaGFsaWduPSJsZWZ0IiAvPjx3aWRnZXQgbmFtZT0iUGFzc19Vc2VyIiBwb3NpdGlvbj0iNTQsNDg2IiB6UG9zaXRpb249IjEiIHNpemU9Ijg3OCw3MCIgZm9udD0iUmVndWxhcjszNSIgaGFsaWduPSJjZW50ZXIiIHZhbGlnbj0iY2VudGVyIiBiYWNrZ3JvdW5kQ29sb3I9IiM2NjAwMDAiIHRyYW5zcGFyZW50PSIxIiAvPjxlTGFiZWwgdGV4dD0iUHV0IDE0IERpZ2l0cyBGb3IgVGhlIFBhc3N3b3JkIEFuZCBEbyBOb3QgRm9yZ2V0IFRoZSBVc2VyICIgcG9zaXRpb249IjU0LDU3NiIgelBvc2l0aW9uPSIxIiBzaXplPSIxMzY4LDc4IiBmb250PSJSZWd1bGFyOzM0ICIgZm9yZWdyb3VuZENvbG9yPSIjMDBmZmZmIiBoYWxpZ249ImNlbnRlciIgdmFsaWduPSJjZW50ZXIiIHRyYW5zcGFyZW50PSIxIiAvPjwvc2NyZWVuPnMoAAAAVFVOSVNJQS1TQVQgQUNUSVZFIENPREUgKExJTlVYU0FUKSBWMi4yRnNZCwAACjxzY3JlZW4gbmFtZT0iU2F0Q29ubmVjdENvbnRyb2xQYW5lbCIgcG9zaXRpb249IjkwLDM1IiBzaXplPSIxMTAwLDY1MCIgdGl0bGU9IiVzIiBmbGFncz0id2ZOb0JvcmRlciI+CjxlUGl4bWFwIHBvc2l0aW9uPSI2LDAiIHNpemU9IjEwOTQsNjUwIiBwaXhtYXA9Ii91c3IvbGliL2VuaWdtYTIvcHl0aG9uL1BsdWdpbnMvRXh0ZW5zaW9ucy9UdW5pc2lhQWN0aXZlQ29kZVBhbmVsL3NraW4vYnV0dG9ucy9MSU5VWFNBVGhkLnBuZyIgelBvc2l0aW9uPSIwIiB0cmFuc3BhcmVudD0iMSIgLz4KPGVMYWJlbCB0ZXh0PSJWUE4gPSIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iOTY2LDQyNCIgc2l6ZT0iMTMzLDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgLz4KPGVMYWJlbCB0ZXh0PSJLZXlfaW5mbyIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iMTMyMSw0MjYiIHNpemU9IjE4OSw0MCIgZm9udD0iUmVndWxhcjsgMzUiIHRyYW5zcGFyZW50PSIwIiBiYWNrZ3JvdW5kQ29sb3I9IiMwMTA1MGIiIC8+CjxlTGFiZWwgdGV4dD0iUGx1Z2lucyA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjUsNDc1IiBzaXplPSIxODUsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X01lbnUiIHpQb3NpdGlvbj0iMSIgcG9zaXRpb249IjEzMjEsNDcxIiBzaXplPSIxODMsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iSGVscCA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjYsNTI5IiBzaXplPSIxMjYsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X1R2IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSIxMzI1LDUyNiIgc2l6ZT0iMTc1LDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgaGFsaWduPSJsZWZ0IiAvPjx3aWRnZXQgbmFtZT0iUGFzc19Vc2VyIiBwb3NpdGlvbj0iNTQsNDg2IiB6UG9zaXRpb249IjEiIHNpemU9Ijg3OCw3MCIgZm9udD0iUmVndWxhcjszNSIgaGFsaWduPSJjZW50ZXIiIHZhbGlnbj0iY2VudGVyIiBiYWNrZ3JvdW5kQ29sb3I9IiM2NjAwMDAiIHRyYW5zcGFyZW50PSIxIiAvPjxlTGFiZWwgdGV4dD0iUHV0IDE0IERpZ2l0cyBGb3IgVGhlIFBhc3N3b3JkIEFuZCBEbyBOb3QgRm9yZ2V0IFRoZSBVc2VyICIgcG9zaXRpb249IjU0LDU3NiIgelBvc2l0aW9uPSIxIiBzaXplPSIxMzY4LDc4IiBmb250PSJSZWd1bGFyOzM0ICIgZm9yZWdyb3VuZENvbG9yPSIjMDBmZmZmIiBoYWxpZ249ImNlbnRlciIgdmFsaWduPSJjZW50ZXIiIHRyYW5zcGFyZW50PSIxIiAvPjwvc2NyZWVuPnMoAAAAVFVOSVNJQS1TQVQgQUNUSVZFIENPREUgKExJTlVYU0FUKSBWMi4yRnNZCwAACjxzY3JlZW4gbmFtZT0iU2F0Q29ubmVjdENvbnRyb2xQYW5lbCIgcG9zaXRpb249IjkwLDM1IiBzaXplPSIxMTAwLDY1MCIgdGl0bGU9IiVzIiBmbGFncz0id2ZOb0JvcmRlciI+CjxlUGl4bWFwIHBvc2l0aW9uPSI2LDAiIHNpemU9IjEwOTQsNjUwIiBwaXhtYXA9Ii91c3IvbGliL2VuaWdtYTIvcHl0aG9uL1BsdWdpbnMvRXh0ZW5zaW9ucy9UdW5pc2lhQWN0aXZlQ29kZVBhbmVsL3NraW4vYnV0dG9ucy9MSU5VWFNBVGhkLnBuZyIgelBvc2l0aW9uPSIwIiB0cmFuc3BhcmVudD0iMSIgLz4KPGVMYWJlbCB0ZXh0PSJWUE4gPSIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iOTY2LDQyNCIgc2l6ZT0iMTMzLDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgLz4KPGVMYWJlbCB0ZXh0PSJLZXlfaW5mbyIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iMTMyMSw0MjYiIHNpemU9IjE4OSw0MCIgZm9udD0iUmVndWxhcjsgMzUiIHRyYW5zcGFyZW50PSIwIiBiYWNrZ3JvdW5kQ29sb3I9IiMwMTA1MGIiIC8+CjxlTGFiZWwgdGV4dD0iUGx1Z2lucyA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjUsNDc1IiBzaXplPSIxODUsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X01lbnUiIHpQb3NpdGlvbj0iMSIgcG9zaXRpb249IjEzMjEsNDcxIiBzaXplPSIxODMsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iSGVscCA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjYsNTI5IiBzaXplPSIxMjYsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X1R2IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSIxMzI1LDUyNiIgc2l6ZT0iMTc1LDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgaGFsaWduPSJsZWZ0IiAvPjx3aWRnZXQgbmFtZT0iUGFzc19Vc2VyIiBwb3NpdGlvbj0iNTQsNDg2IiB6UG9zaXRpb249IjEiIHNpemU9Ijg3OCw3MCIgZm9udD0iUmVndWxhcjszNSIgaGFsaWduPSJjZW50ZXIiIHZhbGlnbj0iY2VudGVyIiBiYWNrZ3JvdW5kQ29sb3I9IiM2NjAwMDAiIHRyYW5zcGFyZW50PSIxIiAvPjxlTGFiZWwgdGV4dD0iUHV0IDE0IERpZ2l0cyBGb3IgVGhlIFBhc3N3b3JkIEFuZCBEbyBOb3QgRm9yZ2V0IFRoZSBVc2VyICIgcG9zaXRpb249IjU0LDU3NiIgelBvc2l0aW9uPSIxIiBzaXplPSIxMzY4LDc4IiBmb250PSJSZWd1bGFyOzM0ICIgZm9yZWdyb3VuZENvbG9yPSIjMDBmZmZmIiBoYWxpZ249ImNlbnRlciIgdmFsaWduPSJjZW50ZXIiIHRyYW5zcGFyZW50PSIxIiAvPjwvc2NyZWVuPnMoAAAAVFVOSVNJQS1TQVQgQUNUSVZFIENPREUgKExJTlVYU0FUKSBWMi4yRnNZCwAACjxzY3JlZW4gbmFtZT0iU2F0Q29ubmVjdENvbnRyb2xQYW5lbCIgcG9zaXRpb249IjkwLDM1IiBzaXplPSIxMTAwLDY1MCIgdGl0bGU9IiVzIiBmbGFncz0id2ZOb0JvcmRlciI+CjxlUGl4bWFwIHBvc2l0aW9uPSI2LDAiIHNpemU9IjEwOTQsNjUwIiBwaXhtYXA9Ii91c3IvbGliL2VuaWdtYTIvcHl0aG9uL1BsdWdpbnMvRXh0ZW5zaW9ucy9UdW5pc2lhQWN0aXZlQ29kZVBhbmVsL3NraW4vYnV0dG9ucy9MSU5VWFNBVGhkLnBuZyIgelBvc2l0aW9uPSIwIiB0cmFuc3BhcmVudD0iMSIgLz4KPGVMYWJlbCB0ZXh0PSJWUE4gPSIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iOTY2LDQyNCIgc2l6ZT0iMTMzLDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgLz4KPGVMYWJlbCB0ZXh0PSJLZXlfaW5mbyIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iMTMyMSw0MjYiIHNpemU9IjE4OSw0MCIgZm9udD0iUmVndWxhcjsgMzUiIHRyYW5zcGFyZW50PSIwIiBiYWNrZ3JvdW5kQ29sb3I9IiMwMTA1MGIiIC8+CjxlTGFiZWwgdGV4dD0iUGx1Z2lucyA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjUsNDc1IiBzaXplPSIxODUsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X01lbnUiIHpQb3NpdGlvbj0iMSIgcG9zaXRpb249IjEzMjEsNDcxIiBzaXplPSIxODMsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iSGVscCA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjYsNTI5IiBzaXplPSIxMjYsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X1R2IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSIxMzI1LDUyNiIgc2l6ZT0iMTc1LDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgaGFsaWduPSJsZWZ0IiAvPjx3aWRnZXQgbmFtZT0iUGFzc19Vc2VyIiBwb3NpdGlvbj0iNTQsNDg2IiB6UG9zaXRpb249IjEiIHNpemU9Ijg3OCw3MCIgZm9udD0iUmVndWxhcjszNSIgaGFsaWduPSJjZW50ZXIiIHZhbGlnbj0iY2VudGVyIiBiYWNrZ3JvdW5kQ29sb3I9IiM2NjAwMDAiIHRyYW5zcGFyZW50PSIxIiAvPjxlTGFiZWwgdGV4dD0iUHV0IDE0IERpZ2l0cyBGb3IgVGhlIFBhc3N3b3JkIEFuZCBEbyBOb3QgRm9yZ2V0IFRoZSBVc2VyICIgcG9zaXRpb249IjU0LDU3NiIgelBvc2l0aW9uPSIxIiBzaXplPSIxMzY4LDc4IiBmb250PSJSZWd1bGFyOzM0ICIgZm9yZWdyb3VuZENvbG9yPSIjMDBmZmZmIiBoYWxpZ249ImNlbnRlciIgdmFsaWduPSJjZW50ZXIiIHRyYW5zcGFyZW50PSIxIiAvPjwvc2NyZWVuPnMoAAAAVFVOSVNJQS1TQVQgQUNUSVZFIENPREUgKExJTlVYU0FUKSBWMi4yRnNZCwAACjxzY3JlZW4gbmFtZT0iU2F0Q29ubmVjdENvbnRyb2xQYW5lbCIgcG9zaXRpb249IjkwLDM1IiBzaXplPSIxMTAwLDY1MCIgdGl0bGU9IiVzIiBmbGFncz0id2ZOb0JvcmRlciI+CjxlUGl4bWFwIHBvc2l0aW9uPSI2LDAiIHNpemU9IjEwOTQsNjUwIiBwaXhtYXA9Ii91c3IvbGliL2VuaWdtYTIvcHl0aG9uL1BsdWdpbnMvRXh0ZW5zaW9ucy9UdW5pc2lhQWN0aXZlQ29kZVBhbmVsL3NraW4vYnV0dG9ucy9MSU5VWFNBVGhkLnBuZyIgelBvc2l0aW9uPSIwIiB0cmFuc3BhcmVudD0iMSIgLz4KPGVMYWJlbCB0ZXh0PSJWUE4gPSIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iOTY2LDQyNCIgc2l6ZT0iMTMzLDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgLz4KPGVMYWJlbCB0ZXh0PSJLZXlfaW5mbyIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iMTMyMSw0MjYiIHNpemU9IjE4OSw0MCIgZm9udD0iUmVndWxhcjsgMzUiIHRyYW5zcGFyZW50PSIwIiBiYWNrZ3JvdW5kQ29sb3I9IiMwMTA1MGIiIC8+CjxlTGFiZWwgdGV4dD0iUGx1Z2lucyA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjUsNDc1IiBzaXplPSIxODUsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X01lbnUiIHpQb3NpdGlvbj0iMSIgcG9zaXRpb249IjEzMjEsNDcxIiBzaXplPSIxODMsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iSGVscCA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjYsNTI5IiBzaXplPSIxMjYsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X1R2IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSIxMzI1LDUyNiIgc2l6ZT0iMTc1LDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgaGFsaWduPSJsZWZ0IiAvPjx3aWRnZXQgbmFtZT0iUGFzc19Vc2VyIiBwb3NpdGlvbj0iNTQsNDg2IiB6UG9zaXRpb249IjEiIHNpemU9Ijg3OCw3MCIgZm9udD0iUmVndWxhcjszNSIgaGFsaWduPSJjZW50ZXIiIHZhbGlnbj0iY2VudGVyIiBiYWNrZ3JvdW5kQ29sb3I9IiM2NjAwMDAiIHRyYW5zcGFyZW50PSIxIiAvPjxlTGFiZWwgdGV4dD0iUHV0IDE0IERpZ2l0cyBGb3IgVGhlIFBhc3N3b3JkIEFuZCBEbyBOb3QgRm9yZ2V0IFRoZSBVc2VyICIgcG9zaXRpb249IjU0LDU3NiIgelBvc2l0aW9uPSIxIiBzaXplPSIxMzY4LDc4IiBmb250PSJSZWd1bGFyOzM0ICIgZm9yZWdyb3VuZENvbG9yPSIjMDBmZmZmIiBoYWxpZ249ImNlbnRlciIgdmFsaWduPSJjZW50ZXIiIHRyYW5zcGFyZW50PSIxIiAvPjwvc2NyZWVuPnMoAAAAVFVOSVNJQS1TQVQgQUNUSVZFIENPREUgKExJTlVYU0FUKSBWMi4yRnNZCwAACjxzY3JlZW4gbmFtZT0iU2F0Q29ubmVjdENvbnRyb2xQYW5lbCIgcG9zaXRpb249IjkwLDM1IiBzaXplPSIxMTAwLDY1MCIgdGl0bGU9IiVzIiBmbGFncz0id2ZOb0JvcmRlciI+CjxlUGl4bWFwIHBvc2l0aW9uPSI2LDAiIHNpemU9IjEwOTQsNjUwIiBwaXhtYXA9Ii91c3IvbGliL2VuaWdtYTIvcHl0aG9uL1BsdWdpbnMvRXh0ZW5zaW9ucy9UdW5pc2lhQWN0aXZlQ29kZVBhbmVsL3NraW4vYnV0dG9ucy9MSU5VWFNBVGhkLnBuZyIgelBvc2l0aW9uPSIwIiB0cmFuc3BhcmVudD0iMSIgLz4KPGVMYWJlbCB0ZXh0PSJWUE4gPSIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iOTY2LDQyNCIgc2l6ZT0iMTMzLDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgLz4KPGVMYWJlbCB0ZXh0PSJLZXlfaW5mbyIgelBvc2l0aW9uPSIxIiBwb3NpdGlvbj0iMTMyMSw0MjYiIHNpemU9IjE4OSw0MCIgZm9udD0iUmVndWxhcjsgMzUiIHRyYW5zcGFyZW50PSIwIiBiYWNrZ3JvdW5kQ29sb3I9IiMwMTA1MGIiIC8+CjxlTGFiZWwgdGV4dD0iUGx1Z2lucyA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjUsNDc1IiBzaXplPSIxODUsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X01lbnUiIHpQb3NpdGlvbj0iMSIgcG9zaXRpb249IjEzMjEsNDcxIiBzaXplPSIxODMsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iSGVscCA9IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSI5NjYsNTI5IiBzaXplPSIxMjYsNDAiIGZvbnQ9IlJlZ3VsYXI7IDM1IiB0cmFuc3BhcmVudD0iMCIgYmFja2dyb3VuZENvbG9yPSIjMDEwNTBiIiBoYWxpZ249ImxlZnQiIC8+CjxlTGFiZWwgdGV4dD0iS2V5X1R2IiB6UG9zaXRpb249IjEiIHBvc2l0aW9uPSIxMzI1LDUyNiIgc2l6ZT0iMTc1LDQwIiBmb250PSJSZWd1bGFyOyAzNSIgdHJhbnNwYXJlbnQ9IjAiIGJhY2tncm91bmRDb2xvcj0iIzAxMDUwYiIgaGFsaWduPSJsZWZ0IiAvPjx3aWRnZXQgbmFtZT0iUGFzc19Vc2VyIiBwb3NpdGlvbj0iNTQsNDg2IiB6UG9zaXRpb249IjEiIHNpemU9Ijg3OCw3MCIgZm9udD0iUmVnd

Ответ или решение

Конвертация Python-файла из закодированной в Base64 формы в читаемый текстовый файл может показаться сложной задачей, особенно если файл был дополнительно сжат или запакован. Чтобы помочь вам успешно выполнить эту задачу, я предоставлю последовательное руководство с пояснениями о используемых методах и функциях.

Шаг 1: Понимание структуры данных

Перед тем как начать, важно отметить, что файл, который вы хотите декодировать, очевидно использует механизм кодирования Base64 и может быть дополнительно обработан с помощью marshal, который является встроенным в Python способом сериализации объектов. Код, который мы видим, сочетает в себе эти два подхода.

Шаг 2: Подготовьте ваше окружение

Убедитесь, что у вас установлен Python (рекомендуется версия 2.7, если вы работаете с декодированием marshal, однако версия 3.x также может работать с соответствующими изменениями). Также нужно установить библиотеку uncompyle6, если вы хотите декомпилировать скомпилированный байт-код:

pip install uncompyle6

Шаг 3: Напишите скрипт

Вам необходимо подправить предоставленный вами код. Вот версия, которая более структурирована и понятна, с добавленными комментариями:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import marshal
import base64
import sys
from uncompyle6.main import decompile

def main():
    # Путь к исходному файлу
    source_file_path = "/home/user/Desktop/plugin.py"

    # Чтение файла
    with open(source_file_path, 'r') as file:
        encoded_text = file.read()

    # Очистка закодированного текста
    clean_text = encoded_text.replace('import base64\nexec(base64.b64decode(', '').replace('))', '')

    # Декодирование Base64
    decoded_data = base64.b64decode(clean_text)

    # Удаление лишних импортов (если необходимо)
    decoded_data = decoded_data.replace('import marshal\n', '').replace('exec(marshal.loads(', '').replace(')))', '')

    # Декодирование из формата marshal
    byte_code = marshal.loads(decoded_data)

    # Декомпиляция байт-кода
    output_file_path = "/home/user/Desktop/MyFileOut.py"
    with open(output_file_path, 'w') as output_file:
        output_file.write(decompile(2.7, byte_code, sys.stdout).text)

if __name__ == '__main__':
    main()

Шаг 4: Запустите скрипт

После того как вы сохранили этот скрипт, выполните его из командной строки:

python your_script.py

Где your_script.py - имя файла, в котором сохранен код.

Важные моменты:

  • Путь к файлам: Убедитесь, что указанные пути к файлам (source_file_path и output_file_path) корректны.
  • Python 2 vs Python 3: Если вы работаете с Python 3, учтите, что для функций open, marshal, и base64 могут потребоваться небольшие изменения. Некоторые функции могут отличаться в зависимости от версии Python.
  • Ошибка при декомпиляции: Если декомпиляция не удается, значит возможно, что для вашей версии Python нет совместимого кода.

Заключение

Теперь вы можете декодировать и декомпилировать ваши Python-файлы, закодированные в Base64 с библиотеками marshal и base64. Не забывайте применять данный метод осторожно и только с файлами, чье содержание и назначение вы понимаете, чтобы избежать потенциальных проблем с безопасностью.

Оцените материал
Добавить комментарий

Капча загружается...