<?xml version="1.0" encoding="UTF-8"?>
<Worksheet><Version major="6" minor="1"/><View-Properties><Hide name="Section Range"/><Hide name="Group Range"/><Zoom percentage="100"/></View-Properties><Styles><Layout alignment="left" bullet="dash" linespacing="0.0" name="Dash Item" spaceabove="3.0" spacebelow="3.0"/><Layout alignment="centred" bullet="none" linespacing="0.0" name="Author" spaceabove="8.0" spacebelow="8.0"/><Layout alignment="left" bullet="none" firstindent="0.0" leftmargin="0.0" linebreak="space" linespacing="0.0" name="Heading 2" rightmargin="0.0" spaceabove="7.9992003" spacebelow="2.0016"/><Layout alignment="left" bullet="none" firstindent="0.0" leftmargin="0.0" linebreak="space" linespacing="0.0" name="Heading 1" rightmargin="0.0" spaceabove="7.9992003" spacebelow="4.0032"/><Layout alignment="left" firstindent="0.0" leftmargin="0.0" linebreak="space" linespacing="0.0" name="Normal" rightmargin="0.0" spaceabove="0.0" spacebelow="0.0"/><Layout alignment="centred" bullet="none" firstindent="0.0" leftmargin="0.0" linebreak="space" linespacing="0.0" name="Title" rightmargin="0.0" spaceabove="12.0024" spacebelow="12.0024"/><Layout alignment="left" bullet="dot" linespacing="0.0" name="Bullet Item" spaceabove="3.0" spacebelow="3.0"/><Font background="[0,0,0]" bold="true" executable="true" family="Monospaced" foreground="[255,0,0]" name="Maple Input" opaque="false" size="12"/><Font background="[0,0,0]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" name="Text" opaque="false" size="12" subscript="false" superscript="false" underline="false"/><Font background="[0,0,0]" bold="false" family="Times New Roman" foreground="[0,0,0]" italic="false" name="Dash Item" opaque="false" size="12" underline="false"/><Font background="[0,0,0]" bold="false" family="Times New Roman" foreground="[0,0,0]" italic="false" name="Bullet Item" opaque="false" size="12" underline="false"/><Font background="[0,0,0]" executable="false" family="Times New Roman" foreground="[0,0,0]" name="2D Math" opaque="false" size="12"/><Font background="[0,0,0]" bold="true" family="Arial" foreground="[0,0,0]" italic="false" name="Heading 2" opaque="false" size="16" subscript="false" superscript="false" underline="false"/><Font background="[0,0,0]" bold="true" family="Arial" foreground="[0,0,0]" italic="false" name="Heading 1" opaque="false" size="18" subscript="false" superscript="false" underline="false"/><Font background="[0,0,0]" family="Times New Roman" name="Author" opaque="false" size="12"/><Font background="[0,0,0]" bold="true" family="Arial" foreground="[0,0,0]" italic="false" name="Title" opaque="false" size="36" subscript="false" superscript="false" underline="false"/><Font background="[0,0,0]" bold="false" family="Times New Roman" foreground="[0,0,0]" italic="false" name="Normal" opaque="false" size="12" underline="false"/></Styles><Group><Input><Text-field layout="Title" style="Title"><Image height="78" width="800">TUZOV3RLVWI8b2I8Uj1NRExDZE5WWlpKOnROPkg6eFhWRXJwczo7Qk5TRE9FVGxNWGxnd2dpVzttRFtVVVVXVXNLaXRVZl1XZnZfaXZtaXhvWUtFVmNzSXl1eXZheXZVSXZfaW9peG9PV2tneHdpeXdPdmVDSHdnSXhpSXhteXFBWXNdSXdnWXRVaXVJWHBDSUZpU0lhQkFBc2E7R2JZeXZjaXhxeXhlWXdleXVZeXVXZE1XVHVVWXV5eXl5QTs6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjpaamlmRHFFdGtdYE5cXEBOZFxcUWdxeEhgandoU1dEUVZ5UHhQTEFJWFVgd3l5eVNVdW5gcltETlpdV21ValB1SlpdWV9sU0xxcVdpb1N4d3d0TEVRbEBVTkdpT0NAWHlRalhMWWJJdk48eHdhTG5BdD11T1pkUW5BdEU8U0lkUW5RSkxZUklkcTpgeEpZcnlxSkJoeU5Gdkw/Xl5Zb09BW3lZZWxvZmlHYnQ/d1t3W1BoZEs/Z1NPXkRHcExZZUpwXXQ/ZmpIb1xcSV86eW87SF1cXGBcXDpHb0RGXWBocUVodD13W0ZfYWxTPXdVVG9UdE9IUHdDYm9yWVt3Oj1FcFlkUllyWU1DaEtkRT9CRG1pZEtHPVFzQ19ZUm1IblFCTFlyP1FlRV9YX2tyaWdlOltpQlljZl9ERGFHZVNzXFxlVFBPYl93WXJ3c1hpcmRJdmlHYk53R107VFllVEttZ3l3dkpHQnN5Q3ldVmxtRmV5RVF3Y1g9amp5eDpgc1FNUF5cXFlQaG9fVGs+eE1zbXRzSVBNaEttWUx3TVh3SVdYcU14cVBJVWtFUVQ/bW9EaHRIRW9fbFlAbVFIUXBaRHlMVXJZSHBuPHlSdXRuSFV2PGxweEtZUFd3SVhSX3BgSWBwWGZXT3l5PmVNeV9KV3U9cWFSPnBwVnhPXmZ1bnI/R2BIdl5RaWFddnV1b2NKcHdVUWRUZ2RgX21leF1UdmZcXHhmcmhkYlh2cEllX0hzW0lpSD5uVW9udkBiS3BpWkh0WGBpYmhmS09gSkZkUFBrSXF2eV5xPD9tQHZ1dkFba2BmRGhia1lkTnF4al9jPl9mT2Z2X3dkeF5fRT91WVh5UUBvbEZxWUlmO19lXUl5UFZxbm9zZlB5SkFePWFzdXFbamBaUj9rRV55akh0SFFnT0h4U25cXHdZb0loYFRZXFxGZ2BSeGBJcVtWd3E6QF1UeXliUXh2QF1rPmtpdmRhWVxcdWlcXGRXaXJuW1BxclRncFBZYnhedHZGZmtXWmJpaGxZYT5eYktAd1R3c1Fodk95YkA/XWdxaHdvbW5nXz5vZz0+d3BHYXJBY11oaWJBeVhAZUxvZ1FuaGx5a0Q/czxfY1xcPmJAUXV2QV5reG1ecHBBWHZqVlpzRl5BRm9eX25WVmZsaXhyaWZoYXFpP2JISVxcSmZfXU9dc15gbHlzc0FzcF9iPUlaXWFrZFBtSm5pQXZeUG5hTkF3OkdpPlZxbWZ2Ukl1eUZfW05tcFFqYz9wSXFeUFdqaUZkVVlyYz5nbFBxaFBbQj9qTE5xS0F3eXhuVmhxXFxhallRXlpGVlF4az9lO19mQFViSVNzPz9UPGFCdz1mS11VeVl5W29SQU15Uj1Id2l3RVVIZm1SUFN0eV1Uc1N0YkFIeFN1WU1zXnlHS1V1PUlCPVF4ZW1VQT1ycndJO2FJWD1CSj9iXnNzW19UWEVZVENlRWt1R2dDTmdlRUtZOnl4RUtCTFdibXVCSGt2ak9ndmFjSV9XPV9kR2t0UmVnWXdyXVdGUT95VEtCQlV3SVtIVFlyQnlHanlGXFxXYndndnddU3hhd2FhV3M7eUF3VENBU155eGQ/WGQ9c0JneVJhRFc9RGpzVDo9aFxcS2dtTUdbYXZcXEtkXXNUSkVjdltkVjtmdmNoO3dTOl9Ea1l1XVF3T0NkTztzZz15b2V5dFNHYGtJbXNGeW9nXj94RU9CTENGVmlESWdJQEd5XW90XmlyUDtISz9oWk9zamdTXFxvSD9FVVN1REdNVUF1RkpJSGlfRktTV1V3UlRbaG89U3VjY147SXNfVlRVRT1JQ29TSXN3Q1dxUlpRRzxfaVVhY3JDZWhPY2FJUld1c3BxUmZZVEBjY2ZNdWhzeUNXclltSVBLSWJRaGRDZWhxeFxcc3Q/XURHXUVxTUlGWWZXXXJnVUNicXZJR1Nnb2ZMV2dgYUhKS2RsdUVxRWV1PWl4a3dRU3RyU1d0V2djZ3dKU0lHa3Veb3hnS1Z5UVdaRXReZ0JlS0daS3hjZWQ9SWRUT2hKRWZSW3hyTUJrS2debUdKXUhjW3RyT1Q6X1I/ZUZkX0ZWQ1haQ0Q/UUNxU1hdWWV0R0Y8RXVRZVVmY0NMTWhqR3ZWS3NfU1RrVXdeXUNFVUVsW2Y8P2hORXdkb0g/TVdmXUZiZXNQS1Vda2dIXWJTRVM7UVZWP2hIcWRUPWNlP2JwX2g9R0d1cUdEW3lAU1U9SUZLRXhFZVVXQWhOTVhed2RSWUZJTWV2S2VIWVdTc0NsW0hHYXVbQUVaaVJfaVRKVURTXVlja1hzb1Y+XUdCcWJAO1ZNPURsdVZIZ1Z1UWVEcXhMVUVdXVdTQVJfb0I/b3hMZ3I9PXZxa1I/TWNQQUVHXVdCS1ZQW0hWT0k+SXJFdUJrVWNxU2NrQ3dwc0ZvX1JjP2VCW2hoQ1hZU3JGQ2hWQVN0W1VVV1dzXWNlWUJoeUQ+YVVUTVdaO3ZEb1I8TWlnUUR1X1R0Q1V1UWVUcVhMT0k+UVZfQ2lJXXdfQ3J1RUhvc1J3b0ZmP0VjUWlKP2JoPHJUdVhbWG0+UU4/WXROZHBQUU1TeFVNPExxPXFASU5CQUtFVEpCaHhTdExzRXE6XFxWbVlNY0VKdkxNYFxcam9BV0tsdkxgb1RFeGJxUmBgdVJxSzs9UFg8TEF1c0NoTz9AbU5FamVhUF1JU1docEB5V2xcXFdjPXk8UWxQWEpRdVN3bFc9eHRZeXZKSE9UdEs7VFc+bE9JRE9EVEpaeU5vVVBSTHhIbHdQZWxLeFQ7dG9SRXZcXEFsY11rYnBwZmB5b2x5dlB2T01reERLPl11XFxFVkNdTkFhbkFZYz1GXktfdWRnZFtRXlZpXkRyPlt0Uj1IXFxhR18/R1RbcnRTcnVbWEJ1R0RzVUthZz9RVUVHRUtDaWdjR01lWW9HQjxVUkJJYltlYnZZRkFLYkd5R0s9Q01RQ1FdQ15bVWtVVEZjWFZFaD1dZzxbVkRvQkFJZ095WENnc1FzZGBDRmM9dWpRSEtdWWM7eE9PaUBZeGxPRlhFYnhPR2VDczxraGFJUlZJZ09tcz1lVE9JeVB5cmZ5QnRxdFZ1eVJFeTpvclBjZVxcSWdxa2JWTVVaQVg+c0hzVXVPa1lxQWdDPXN5b1lBc3ZgS0NoQVheV1JdX3h2Y0Zfa1JnQWNeSWNQW1NJX0RbVWY9TWVyb2ZjUUdvWUJmY2NhW1RpRVR2YWU7PUhHY3RhcXZ1V0hkO0liQWlKRVlkeXRHP2hCb3JkVVRYV0M7ZWJjaXNMW1V4WURDW2drUXJITWdIcWVibXJpa3ZqP0hyU2lQeXJja3hrQ3dRQURDb0llRXZiVWJHQWJvUWhYRWhbO2RcXEtISG1iX09GdFd1X3liX1VjUk90bndiUVVIakV1TD1VcF9SYj1VWUFnVU1FPmdDQWdDaXlTRW9zRVFVR3FkV01XcT1jP0VyS01XSUdGd09DZUd3Xz9jQFlCTT1zYFFlcz9VYEd2RElHdV1EaF9VXFxhRUNRQ2tpZ2BLWV5JZDxVckZTR2RpZENRZD93dmpzZ2pvY2Bhdj9BQlVjQ3FrRGJnVVFtWWRXVHlVSElFSV4/dk89eHJJWUBfSVhLeHlleTpXeV1ZUnJ1eERpR2lTdj91aUhHYlZRbDpES1tIbXJwUEhQcV5QbEVcXGtBTWt2bUxMeWxGQW9rbGpjZXY9bHFpPFlXdFJMZXdxSVFQXW51VGpTcXZvXXhndHI6YFREZW9zYHFzWG9VdHNePFFWQUtkPWxIRXdSUU9WWXFFeVRvYFk6YVlOUEtoXFxWPkFzTlF4O1R4cmRXXllKXnRqYVxcdkhkbmxVa1Jla29ZSnZYT1Zlc09xbFVNTkBtUG5VUG9YbVRAanRtVWRwS29IeGhtdUQ9UUhld2tcXG5CbE9odXFXWG93eXM8XFxWUGRrWkFKZ0VSb2BSQGV2W2V2cFRxYGFTeDxOVUF2eVVyYV1udnRSaUh1QlRRSVRzXFxxVlxceUxsXXJhWHRcXEBQQ0hTQHRyO1xcWG1EUztYbUZwVlJ5WHVIaklNS0JgbVppdlc9TkhUU0FcXHNycHRnTW1JQU5xZXVZQHFKTU9GaHJ4RUxpXXZvbXJQQGtnXVRFTVNORVhyZWxteXJveGtVXFxZeU1sbT1LYEF2dmFYV21LUXFtQTxRVElVXklRaG13XklZSFFxXlxcc1dsbEVdc2tscz1RWXdBUnRwVVBIVldpbj5US3llcWBETGtZUEQ9Vll4T1VpdTxRVG89dT1QVWNZWEx5a0VNbUJIWXd1T1Nkc211dV9kUm1dV2xwTElcXHhLbHF5QEteQU86SUpcXGFvO1lzZEh4UkhwT0B5REBMP0lwTHhyZFVwX0h2Y3B2Z111RVFWS1h3dmRucGBWTnFWVkB0W2xMX2lvO3FPSVVOd0xTZmlKOm10PnlWVHFOZ01Wb2FvUF1STmlWRFFPYEBWRGlzZEh5d3RZO0BWZnRMcVlsc3RyRTx2aG1yQmltVU1yPkVrSkF1R3h2WWlZSm1XeHhZcWRqR3hLbF1UQFFQVllPWWBMSmBtYGFqTlxcTUJNVlFteXNMTkRZc3E8b3BZeVNEbWBBdlBAcUJIbFBpT1xcQXg8cW9cXEBZZVhyU0hQUkBWZVlWR0FTcnhRWllQR3R0c1BrXWVMRWhXbzxQR0FQP1F4WkxYWDx1Y01TXFxsSnlkU1NNd0dAa1FMdmpBTVdUeVV0b3hVTGtVUFhUdTxQUVxcaHNhUGtkUEtOaHVIZGtBdHVDUVBaUU1LRFN2UVZQWXlwTFJUeHlNVFBWTVVVaHFzbW1EcG5jWWxYPU5xbHFreFJwZFBPZWtSeE1wQGtTbFVdSFc7eHQ/PVNfTG09QXRuYExxVVFFRVZCQVdCVW5uPXRCTFh4cHRGYE5TQVRkVU5HSFRFPFdOSU5QeFdOSVJHZXdKVE53SHU9TVlWQHVFQEs8TU1fZVNHRWtfRFBAYVZAbWxAPUxcXEV1Q1B2Y3l3U3BrYUB1W3RRaERwPGVTQEF2bUBVXFxNdj1BUVpEVztNTXdVa1E9bT1hVE1BWV1Mb3V1UzpNTlxceVBzXFxRWG1QVkl3dnFKb1BNVElwckFzXlFSdmxzU110TmRLQ0VsP3hUd21uW3Byal1XTXhLT0ROSUlMXkBzbjxZZkVrWEhRTmRRTXRXTGFQTVFMcVVUP015WnRXVGFSQ1Vsa0BYO0BtV2RLP21uVkRsRkB4dnRMVlFRc0ltXlRXczxvWD1LYUV1RWhZRUx0YF1RckB5VEhYUnR4Qlh1dkRyWmR0Xk1uVkhYSWFSeHFMS0xTR0FTTUh3XUBqZHlyTlRNPT1zZV1yYF1vRzxLXFw9VlBgWUtEalh1VHVJakVAd0NRU3hkTV5Ad1BQUz1Nc2I9az5MT1tcXG87dHNtXVVDSUxkRVZqPFM7UFRFaU5VTVZNbW9QdUpHTFRIVE5HcFhLUEtnRHBKbFVUSEtzdW88UGNKbl9jeHBARndhZ1pOWV9XcGVNYHFBV2ddaFxcZklzQWBiWl5hdGl0dXdgPkFpYXloW1ByRVFpZ3BiTU93eXZhSnZ4OkhnYllnO1htPE9yTW9nZFB3XFw+Xj8/a05GYVZYcUdQXmR5WndGcldHeEtuW2tmZ0w+YEdZblBZa2R3YktxYllYcHBoaE9Hcz55W1tGc3VWXUF2Okd1VktHWD9ydG1iVT1VQXlCWFFWSU93RHFFS0lFc29lOmFkXWtYSmF2UkdkZFtCd01jdUVZXFxlRURleF1bZHhPZV1BdVJJZEJLdlNbRD5DWGdBVkhdQndVVUdzQllpeEJ5ZlZ3dnJrU2FdQm1HV2djZnFfaWw7aGdpZzxBUnVhckh1aE5RZHFrSGtLV3FBZHBFY0dvR0NNSV5pd2FXY1d5RlNtU2xxc0lfV21nR2NxZVZpc21xYm9XaFlXR2RXU0ZHQ253dmtPSD9rRlBDc2pvaGFhRG95Z0I7Y2VzUlI9SFBBY0FbaXZhck5nckdReWY7Y2VbY1NhYj5vRjxlWEpdYkE/cmdJVUpLZXRtc2NxQ3FFVUxtVTxNZmVRd3J5dEtzWHRzdmd3ZlI9c3NlZV1lVnI9aVhnVHVzUkVLSXJhd1ZhZXNvRFtdeXFBZ1Q9VkU7WHdnVFg7Q3NpY21zaFpJeWhddGY7RD5hZ1lrU1o7Y0VlZU9VYnBnQktdQ15jY2g9WFtXY3c/VEtdRF9rd1pjcl5hSU1haXZdZ0M/dVJbaUFlR249Z1dJUkRZeGFBZ0x5aVVbY29zZlRNc2BXSEVDZVdpaFpTaVtTU0g/dkRdQ0NTeUpTZUxhd3A9ZEJfeE9PeEtxZ0BjeV4/YmJfd0pTQ2BVWVRbYk5FR2RdSFppSU9BYlZPckplRWNLSWo/Rm5hV2dBZWxTQ0FfV0tddFxcQVVBcVNNTURoU1ZSZ2VwP0JGTXVda1JEa3ZPS3dgXWl5XVNzQXhuVXQ+U2ZpO0lXdXV1R2V2PXJoV2RAcWdnWUZIdWNyPWZmb3ZMUUJfW2U+PWllQXdqQWRcXGloRFV0T1NIRmVXXndpQWVXbk1DY3NYc21oXW94Qz9nXz9mWWdybnNTdmd1dU1iW0lmP0NmYG1SUEV2WXVzbDtYUT1TcW1EUkFzdWN0UEd2c2d4SGdCS3VpXFw7RnZdR0xBRF5bQ29NRT4/U09XVWlnVEtVWVRZRFRjSVZDR3Q7YEZPXVVma1dWXkd3a2FXYHVma0tQWnQ/XFxEd15vT19cXF5pd0Bibl9tdk5eXT92S3FjYHZgdFZzPEB5Zk5fZWBcXER2c0ZnYGlZY0xIdHdfYkt3WmteaEtWbmhWZm1nXFxzSXdRUGZBR2BQbmh1aWtqd3c9YXRYUGJkd2VOQGpOV3VHYGFnaWJeVmlZZmVhUGlyP2c7X1s9T3I6eFxcdnFpPWlxWmlaVHZrQGFmWHZwZHFsU1dcXGlweWRhcllHXFxKRm09WV94Z2U/X1pCcWNESF9Od3JOWHhrUG49V1tsWW49YV89SFpbaW4/UG5BYXlUP3l4dmlpeGJoWHI7aWdkSGlvb1FdZURXZmJpRkBTeD1jdHZ3dVtRV0lpSV5zRV1XclBbRWJNdWdXUm5zQmRbeVJbZD9ZVT1NeWJjaGFkcVI9bG9NdndEU1dZUFd4UlxcPUxPZFdqPExJbXVMXXc8WE5BRVJPaHdLSEx4bUtmdFN4WVVmPEtFTXh4dExObFlLeHI+dVF0cFRWWVV0XFxtdWRUYVxcdF1lblpEUXBgWWtxU0lAb11xT3BgbG9dUEN4eHhBa3J4eF9Ec1RJbVFIU2F5VGhhUkVcXEpMdHB0cVJBdVF5WE9OZFV5VU47YXhbTVdzeHhOPXQ/PUpfeVU/UEs/UXg6SG5fWU5rPFNMSXlcXFVVRFlPaGh2Ok11Zm1Na0lPclVKcVhzbERyVUB3WXFRRWhMS0FrW1hua3F2X114Y1VLbD1UYUVuVUVOUG12SGlwVnBTSFl0Y1BRS3hUSVV3YFhYZUFxW2lYeWhxWGRXXXF1U2xrdVVOVFF3W2h5V2FsUkVTUWhLdWRNUHVSTkhRVlRwWjxWQUhuc0hsWXh2Xm1tVkhKdERZb1R3XWF0XFxYWF5ZeTxMakpga1ZAb110Uz1YSnFNUV1FcHFgc1ZJSl5wV3RQS2NMbWtkTklodVo9V1l5dmhUTnJwVFBpTXdUUWFxcVpFUm5YamU9bklgVXg9cFB1dHRdWF5Ad0dVS0x4als9cUpRblldVk1MVUZNcnFgd0lEc1hoUGNAUVxcQXlydFR1SE49SWtmZFVlcU9bbExxUXBIdHY9cUo+cU5ObVJVVUxeXXdSVExEQHFdYHNXaHhrVEs8aE5eZHJ4UW1rQVJGUXJWQXBKWFlybExXaFZLcXNgcHhSTFR3dVFqZHFmPHdSPWxPbXVfXU5cXGFYQ2lzZ21KdERYc2RVdFVMPFBrYFhwXjxVUlB1RVxcVHlAVUdES1hNS2xRTTpwdDxgbkh5dmc8a0V5bl5sVkZJUT5xUG51d0JleXJ1VG1IWW1YSl91ckRwS3FJUnBQTEx4UlZdSnRMU2t1anhtb2tFbHhNdXhBWE5ZV2NoUD1oUlh4VWpwdnFxbkdFbnY9WWpRclpUUF5lcFRxamFcXFBGRFludWNTUGRpZmxWZ1tqd1tId1xcal5fb3d1VlBkZmdfQ1ZnZFhuSGhoa1F3TVZzaGdaVHhvbFliaGBvakhxd19gZVhaXFw+d1hPbmVgbT9nb0xfd09uYEJ3YGFfdmZ5eVhHdUpHdWdmc29gbWdpdnRIbVheY1NwbVFhZlxcXl1ueWg9b1p4X3dQWG5PaXRyaWI6WHdZT2hwV3ldcWRsV3Z1YGNYPl1KZ3NtPnRkcXNzbl9GP2FuZnlOaFpLZ2dcXE5nRHlwO0FoOl9saEFzW3Z0REZcXE13aFxcZ3dCQWxbeWJNWF4/V2VdWWRFblp3aHk6UXc+YXV0QF9sT2w6PmhmZ2FveHVGUWJLbmJZSHBIUW9id15DX25XQHFEbnBjUXFFR2F3VlxcYEBybnBjbGhjaz5eWEdkTkBxZEF1W0ZmVUledV9cXDpgcWZ2cT9fc29HXFxVZ3VBQVxcQW5da1BsRk5kQkBzS1ZwZE50SF5nQWZvaXBkYUdkRUdsUHdiSlB0W09zUW5eVU5gbUZaWnZsbm9iPnlnTF53V1ltXFxWaGVWZU1HalBockpIZW5JYnBAeFxcd2VdWG9jYGBocGVgeHA6dnVYd2VNWWdbUHFUcG5pSGBvb1tKZ110P3NpQGBwdm9mSXRzblxcXklkYG92VmFnQXFsYUl4VkBdalZdZHZhUUZhbF9oYm93QU94RGBfYVlqSmhsb3FrV1lsSl5mQWZiaT5sTVBgUU5mW2dyWD5yQF9uSF9qX2FeVE52b3hpSlZyc15ldVBjb0BcXFFPW09fcEU+Z1lQbUBfbW9QXlVRX0JwZkVOY0hgak1uWmlZdG14YFZPZ3h2XFxmT3Fob2RAeW9XQW9ITmteV2JDWWRzT2hyeWdKbmRLdnFWWGJSQF1pPmpBSHlXXl1oP11meGdDSWNObl1Jb15sTndIRmY+QGdZQWtRVmNEQGlCP1xcVUdyVFZeaGZqRGlmZ155dEF5SXZcXFFgbXlWeGB2X0RRWlxcSHh0YF5RcV9zUW1AaGRDbnRUQGM9eGZnQGBVWW9cXFl4eGZwZ1lqSElgZGdnWW9fcWB0aEleV2BhPUdyQmhlVVZvUHdraHh5ZEdaU15ucD95Rl5tR2hodmhdVElePHFod3FeSEZcXHNRcFZHdG9vW0dhYklWXFxmQGZCeXdDP2pPd29HRlxcY0Z5cW5tbU5oZXduOndrZnhvYU9pcGhvOndfXnddR1hpQF54aVFlcUZpT25fZ0Feb1ZwVVluPE54RWdsP0lpZ2lgWlFobEd1V292QV94bmFcXFhOczp5Yl9QcHJYXkdpdjtGaHF4ZzxJdGVeZERGYWpIZlN2b1FZaT9XeFpQZGNJX05HbT1pWl5JdmA+ZFk/cD1xaG1QcD0+XU9gYklRd05nZWxRZD9WYllAaV9PYFxcSWJESWVaZnJtcGJsdmxaZlp5XnN2bnNuSWhtTmhbYXBqVmJtVmZVZlpbQXQ9YGZCZ3ZLZmdXeGtiP2Nmb2pkR3ZyaGlMZnZgWV9DX2RpcGdYd29DWHRzSGxcXG5dTlBabU9geVdcXGVeaFRfeERGbGhgW1BJXlpucFdwbURnWj1fY0dmY2NWdlpubkpZa1ZvZmdeaGxXdz5wYVxcYGxNcGZIUGpDUGo+R2ZuT2BUPmljdl1bZmpAdmt0UHJvbnltUFRnZGJQcD55TmRUbnBkb3JRbVRheTpEb0N4cmBpUD5RTGNoTkBEWERUcnlYeUldakc8dUVoTEBUdUE9bGV5T2ZcXFhyUHRacE9pbVlpcVFnUXJxWHZybFdxdXF0TFB2UXlwXXI/UVlOdXJgdU5XZVJgeHFeSGpGaXBnVVlYRHNBWXhOVHJtQE9KcVBJWW46ZW9GTVhZRXRjTFBScUxHSHdLbG5hVU1wSG9jTXdOPXlaVmZFXl5fSXFcXEZuQ19jVEhobldzVz9vTkBuYlBdXWhydkdicz9vcW5tQl9hW3h2bj5mY0BfRU9pPlhoTmZwdVZhQHhoTkljXm9ybUlxZmZvRl9tZkhjZ3lkZ05dX192OkhbcEBfUl5eS2BdZWFvTWlqUldcXFpPeWBoaEFwZVVwbUJoYEBAbVFgbltmaE1xYlRfb09maEVwaHRBbGA/bG5pZGJAdmh3YnFeeFZHY21vYG5odUphdmtOWkleYDxnZ2hIb0Q/YGhfbUlReUlIcUZWZ1txX1Rfbl1YYl5IXFxTZl5dbnRgd2ZXb19WbnZMSGZTbmJzWXl1aWBBUWdjcV1EPnNLQGZxZltDaGlTX1p2ZmZbSHRCUmxnRmA/c09TU3JxdmRBSUg/eHRtVV11V11HR0RhUmlTRj9NVHBLdm9raGJZRj5RaGhLVU4/RHk9VmZ3dj1FVkdXaXZvZUtfdUxhZ0RdclZDdE0/ZD89cz1HUlFvWWZJWTs9VXFvZXJNRHNnSUxvUz5FWDxtQ2tfR0ZBWVxcaUV2SURnZ0VBcWVocWdkV2hTYVNPVWRBVUJxZXlNTWNvO2dmXXdPX3Nsc0dFYUlsVXRvZWdnP0VhSVRrU3VgUXJ3b3Z4S3lea2VMXXJdR3ZqW1dKc2hPX2lnQURCd2ddYHZTbUxMSXNSSG9DZExsSE1GUHhmcGtMUHJgXWptUE9GUXh2SWtkTG4+eFZReXNEdHNFTXB0eHZLYU5gYHRobFJsYHFJYFhpaW1TZUo6XFxTaUxVPG1SXUhyYl14QW11ZFRrV2VQUWl1UTxsb3Vydl10TXRXVWFqaXlvOnBuVz1QRT1vTERRXnlMPmBvR2BqWHRMcGx4c2BtamB0W0hPRFBua0RPdGV0dEhxVkhLVT1UZ2xOYWRSXnhVS1lSO1huOzxZR2BQdFFZWFRPbFB0U0RRTkVsaU13XmRzdklwZnRQVWlrSGFsPkxWcXhrWHhSU2hVQ2BUaXB2YUFOO3Bzc1BPRVFwdGxMXm1ySz1NS3lUQ2B1Yz1tRWRwUmB1PUFxZXhqckBSa1VQcVhVR0FMbl1sPkh2Y1hLREB5Y0l2O1FXS3RTVW1VX1VSQmBrUmBNQkRsWFRuYkxucT1ZWFVuVlB0dXR5T2BReGBKZm1VYm1RR3hLbFFtVFFsTFVNaT1SWlhtRmVOYGxYVTx1UWF0eERZWHFRTGFWVVhyZHlVS015QWhrTVFxVERqdXFTVHhwSlRLQnF2XlF5bmxLXWRYbEBzWHBvZ3hSXnFPWGR2R3htWVlXSU1uZlxcT1l1dWVMTT9pUm5lUnd5d2NRUnJQbkZMUEc9VlJQT15pS108UnFwTVlscXVBeFdwWXdxS211ZnlmaXE/XmNAX0RObm5Zd0BvXWs+W15pdUJmaFFJeXJOdUBpbmxwW19XZnVeX1lwXUVBYWxfeV52ZV9gYlBeYWdnYT1BZVJ3YUhBalFvZURPeVZeZV1vcVVHYHk/Y2h3XT1OeHhPXFx3VndabmRrP2JWPnBQVmpQWWpEbmdAeGM9cXBRX2NPSFxcUT5cXF9mYEdmbV5vZG5RYD5YWmRXZVxcR21GRnZzUHVhcHA9YGxGVnRoaVtCeWE9TnFxRnhZWWNtcVxccGZzYUd4O0FcXERRbGRQd0JQcU1mXFxVb25zVnVoSGhYXmZjTm9Rb2NlT2toSXN0aV47cXRaR3RPbnhYP152cWRZUHBqb11oUGw8cWNAVmtUaGVHT3dFb2tuQFtOYWl5Xm1CUWpcXElyY09tT25rPG9rXXF0PXFyPVZvSVZfZF9qWHZ1cWlvd1h3W25jeEhfTFlddGdwdW5kUE5lR3Bpaz52W2l2UkZ0X0d1S25xRkl3XFxuW0RwaHRgdmdJa1phdl9RXU5xdmJBa21IcUFxZ1VPcV9IXlpYakU+Y0BPYklYanRub2ZHbz9xcV5nZWs+dXRAaXVgdHA/bFxcSXBPaHdDYXNcXGFvbmZpSXZtP1BkcVFnTU5oVlFqRmdlREFkU0ZmXFxWZURBZ2hxbFJHXFxVRnFNWWVwcF54dmxQUHZeR15lQGRGP15MQG1LSXVyUV5eeXhLRmlLbm1YR2o6SXZSeW12PmxnT2xyP3E8aHRKSV1sd1tecXVMQF9cXEdmdWdwPD94R3dbbF93P2llZ19pam5cXEReXFxlSW5Cd1s8Z1puSFxcb1FfRkFiVm5hRmFhUmBfPkdgckhuYV5za1BbQEZqaGloPmBiQnBiZ3Z2ckFhQnhwPUFxb3FiQHdfal5xO3FhXFxWdUZxW0B4W1ZAWz9BZ0peW2t4ZXJQZW5ocWZXYWZXeUBxZm1xdmN3WmtuZ1thd3FAb25hXkVHXUtncmJZXV9gXU54XmZHWnJPeGVBYFJGaDpAd0ZOamZoWl1OY2dpcT1ZZGRXXFxiXm1AQGVyRmNncVtMUW1SQXBlQVtxQXhBPnJUR3JCSG1KcHhveGF5cXFpYWdWT2BjSW5bPlteWHJASWhLPmI6WXdtXmtvTnhxZ1tYYGc8UXlDX2dNYFt4X2Z5PnRcXEBmYnhiO0FgaF5oZFFpS1h1ZkZuRkhdTGhxY2hqXmZ5T2VDW2Zjb3dZc3ZScUk7a1dbO3RlR1ZeP1RJVXdXW2V0R0RPbWhsVWZbdWJmY3lpXUlNb2dpd0heVWg6b3dBd2ZXYVJwbXRDQ3U9SUZkQWVeT2hzS3J1ZWVaRVNaVUJeY2luTUlmd0VfbWZza3hKc0VuP2ZPYWNAP0dKPXVYa0RJaUI6cVlPV0JVS1I/PXU/cWdOYXRoP3ZkR0ZQP3VgVXl3XWZDY2NVT3R2VUdZY2k/Q3U9Z1hwXXhJY0l5T3JBbXl4WXhJY1VOS0ZwUURZWVI7Q3dCPXNQcWlGP2VGP0M+VVRZZWY+PVJKTVRcXEVCQ0dVRGloaEtVUl12Z0FlblV2WmlDZWliV2tDY1VCb3Fkb29jd3lDQ19yQGlmO1NzcWtzd19EVm9CdXlZO3lyZHFmdVNjaEFZQVVncVN5U2tnWnVXbWtEPVFjdll3WVtia3NySnNFYUtXaVd1TT11X2djOkVnX1lmTVl0bnFIb2dSaXNFaT14cHNYcV1ncklocldGaUVDeVNVOm1SZV94Z0VCc1tDXFx5Um8/YzpzaWZDZ25bWEhlRFVnV0tvaWljRVBZSXFxSHhrV3dBZ1ljaHFnRGpnSTthRnBLRFdRdl9PQlpZdD5Xd2RBVVl1Ukw7Y295cU51VmhdVXFwdGRpaztwWGR5a3hUUUdsVFF0dlhgWVY9cTpAVm1AcmZUcklUbFR5all0eG9Aam5VU1NIU3NdcV91eXFdc0NlV05NdUhtSz5cXGpXPWx3ZE5aZG9CYFdzcG9QRExvSW1CVUphYVhYbVhQYUxTZW9uPVV1YW1RcW1wRVVXSHNMVHl2RVhUZU9paVl5aXF5PXFxXVhIQVJIYE1fSVFjPFlBZW5IeVFUSW55TWxSWUtLeGtmRVh5QW1ZeVFUPXB0aHlbZHV4QW1DQW1BeVl3VW9zZHlBYFBrUWtVdE95eHJgSVJedG1NTHZlUEw7RFlaZW5yeXZ1PFlHdU5yYHhrUHFQeE1ybW1DPVNAXFx2YXlKa014bnV0Y2F2PkBqVkR2YGxxZG1MO2l3ZlRrQmVMcWxVV1FQZlVYUVh5WnVMZ21zT3lRPUhWQHVOeGVRdXVtckBRT015a0RNY0xtcz1PSEBzUUlVPUhRbV1yeHVqbHV5R3FweFl1TnFVRF1ZeGFyO2F2Q2BtSFxcVTt0UDtsV2t1UXNJSm14TUdNTHZNTmFZUFNgbXJZT2hxWUpAU3JlUXhdVGJIT3JIbGNJbT9FeXBJam5obGtFd2dZbkZ0WG9oSlNVc2xMcnc8a3FgWGNYdUhtUzpJUFBNV15cXG5lTE5yRVlURUxraHlXRFc6cHZAUFJOQVNBcW9xYFlMeFV5dFhaTXZyYFRqbG1rVXE9aFFQUVJ2ZHRTRVhUWVV1VUxxQFl4QVQ/eVNMbVVWZE5vUU5WXFxvS1F3b1VYPW15SkB2XnlyZklzSmRPUj1YPj1XWEBVUkhqeUlWSXVYSUxMU2Bua1xcTHNkTEp4VlhwbWpQcnB5SjpZcWdNU1V1ckZYcWVhV0R4cFdgWTo9UnBQTExhbz9UUU1ETmxgUGRZcDxtWD55WFhFTEVgd1FtVD5dUWV0eVpFVUV4a3I9Uj95cmFJWFRJWWp1dWZpbnJpS1xcQHlTcUtFeFheXXhdYHJYPVI6TFZocFBCbFBlWVlcXGRMYlVOVEBQWGVTXmF3Wml3QXVralhXPDxtZWRqd1BgcXdlWE5ya29oX1lvPWhia1ddd2B3RUBlTldibHdraFhcXGheck5vYk1Rcnl3aUtZa1l5YHlXdF1pZmh5bHReaHlBeFxceFxceUhrVFlrQnhza195akFoPWh2W19eeWZ1YV9kXFw/a3R4YXI+am93Yll5WmxRYVBWbWpeaXdQcT9gW0FIXl5RYHBBeWB3ZFpgY01weXZpXjtGcm14cXl3dFBwd1dOYHFxYVtRZGxYeEpfaHdnWkxfckh4a2lHYVpXcVxceHFNSHdgeHZOQWhJX3Bqd3NMQHBNV3J4Xm9ocWlaP29oeXdeeHg8T3RRV1tjcWxyRmNab2FcXE5dU1diS3dxP2h5a3dqPXldYF9mZU5zZl9aW0BpXnh2eFhgaXZed15mWFdkUXZgdD9icVl2ZlZecXBoa2dubV9oT0lsZm5cXGZ5bm1weFA/eWZ2cHVpZXBuaHlmcnV5aT8+cVlvXnJ4dXhBdTtoeGVpYV93eVlmW0l2XWBIaXE/bkhXeER5XklQWnlobT9RYVZvaldhcFBnbW5JX3hgbl95aW1AYGp5cj9PeXlXXFxgeHFBQHVYTmFIV1xcP3BkQXlrdXZlSUBjO0FxbUl5Q3dcXGVBZj9Pb1dhcFBHeElIcHh5alJmanlha05gZ1VGeGFPY1N2eVlBbD9xZWZudTtmdklgeHRvd0hIcnBXaF5pY1lPaXRxeTxwZHlPbVM+eWluYFxceWE9aG50dm9bZ3RtcHlZVmpreWlPP2J0RmZ1YXhlX2V0eWhsWFp5eVo/eHBBeHlcXD5rWUZ2O1BbdG9gYkl2bEBuX2lmTUlhXVBgSXl5YFBjd154anlxRW5rc19iOm9qZElpPGZ4cFZ5cVF0S1lyeXlhYkhzS3ZcXEU/bFlndmpvdXU+ZHdeZXRIeWpYYHM/eVRxWlVZdVJeXlhgWj95a3hvaXQ/cW4/c0xgXztobGo/XV54ZHNoZ3N5cW1Bb053W3deeXlOW0J2XzxBZ09mdGloYFNJYT1oX2ZwYnhAdUlBZEl2bEhWXmY/YmRZZkBod1NfXzp2aF5Jd19Jb3lQb1ZZYkl2XFw9Vl9KPnA7Rm1oWWVKPnhhbl1iWW94b2l0Q1ZbYkJLZXFxcm9lR0JDST1NSGxReWNJd1tRdjs/Y0FheEo9UnhheV9FZlhLWXJ5eTpveHZjZHI9VFZZQ0N1Q3c/WDpJWDtDSXJJaUFvRWhTRXRpV2txRXQ9dz90S3dcXHg8dmpYbml1XnlBdl1BWWNOaWVkUGdqRDo7al5QTmFMTlFFTmpENUI=</Image></Text-field></Input></Group><Text-field layout="Title" style="Title">User-Friendly ElGamal Public-Key Encryption Scheme</Text-field><Group><Input><Text-field layout="Author" style="Author"><Font encoding="ISO8859-1" foreground="[0,0,0]" underline="false">\251</Font><Font encoding="UTF-8"> Czeslaw Ko\305\223cielny 2003</Font><Font encoding="ISO8859-1" foreground="[0,0,0]" underline="false">
University of Zielona G\363ra, Poland</Font>
Institute of Control and Computation Engineering
Academy of Management of Legnica, Poland
Faculty of Computer Science
c.koscielny@issi.uz.zgora.pl</Text-field></Input></Group><Section collapsed="true"><Title><Text-field layout="Heading 1" style="Heading 1">Introduction</Text-field></Title><Group><Input><Text-field layout="Normal" style="Text">This worksheet demonstrates the use of Maple to create an ElGamal encryption scheme</Text-field><Text-field layout="Normal" style="Text">The following Maple techniques are highlighted:</Text-field><Text-field firstindent="0.0" layout="Bullet Item" leftmargin="0.0" linebreak="space" rightmargin="0.0" style="Bullet Item"><Font executable="false" subscript="false" superscript="false">Developing a cryptosystem</Font></Text-field><Text-field firstindent="0.0" layout="Bullet Item" leftmargin="0.0" linebreak="space" rightmargin="0.0" style="Bullet Item"><Font executable="false" subscript="false" superscript="false">Encrypting a message</Font></Text-field><Text-field firstindent="0.0" layout="Bullet Item" leftmargin="0.0" linebreak="space" rightmargin="0.0" style="Bullet Item"><Font executable="false" subscript="false" superscript="false">Decrypting a message</Font></Text-field><Text-field firstindent="0.0" layout="Bullet Item" leftmargin="0.0" linebreak="space" rightmargin="0.0" style="Bullet Item"><Font executable="false" subscript="false" superscript="false">Demonstrating the power of the scheme</Font></Text-field></Input></Group></Section><Section collapsed="true"><Title><Text-field layout="Heading 1" style="Heading 1">Introduction to ElGamal Encryption</Text-field></Title><Group><Input><Text-field><Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false">    The progress on the discrete logarithm problem induces the users of  </Font><Font background="[0,0,0]" family="Times New Roman">basic ElGamal<Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false"> </Font><Font background="[0,0,0]" family="Times New Roman"> public key <Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false">cryptosystem, working in a multiplicative group of </Font></Font></Font><Equation input-equation="GF(p)" style="2D Math">NiMtJSNHRkc2IyUicEc=</Equation><Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false">, <Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false"> to permanent increasing a prime modulus <Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" italic="true" underline="false">p </Font><Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false">in order to ensure the desired security.  For long-term security,  at least  2000-bit  moduli should be used at present.  Common system-wide parameters  even larger key sizes needs, since computing the database of discrete logarithms for one particular  <Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" italic="true" underline="false">p</Font><Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false"> will discredit the secrecy of all private keys computed using <Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" italic="true" underline="false">p.</Font><Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false"> Yet the task of  finding necessary for encryption generator of a multiplicative group of </Font></Font></Font></Font></Font><Equation input-equation="GF(p)" style="2D Math">NiMtJSNHRkc2IyUicEc=</Equation><Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false"> is unfeasible for an ordinary user  if   <Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" italic="true" underline="false">p &gt;</Font><Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false"> </Font></Font><Equation input-equation="2^2000" style="2D Math">NiMqJCIiIyIlKz8=</Equation><Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false">  (<Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" italic="true" underline="false">p &gt;</Font><Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false"> 0</Font></Font><Equation input-equation="0.115*10^603" style="2D Math">NiMqJi0lJkZsb2F0RzYkIiQ6IiEiJCIiIiokIiM1IiQuJ0Yp</Equation><Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false">), so, basic </Font><Font background="[0,0,0]" family="Times New Roman">ElGamal  cryptosystem<Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false"> cannot be named user-friendly. It is possible to relieve this inconvenience, forming  </Font><Font background="[0,0,0]" family="Times New Roman">such an ElGamal public key cryptosystem, which works in a multiplicative group of  </Font></Font><Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation><Font background="[0,0,0]" family="Times New Roman">,  providing that to construct </Font><Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation><Font background="[0,0,0]" family="Times New Roman">,  primitive polynomial  </Font><Equation input-equation="p(x)" style="2D Math">NiMtJSJwRzYjJSJ4Rw==</Equation><Font background="[0,0,0]" family="Times New Roman">  of degree <Font background="[0,0,0]" family="Times New Roman" italic="true">m</Font><Font background="[0,0,0]" family="Times New Roman"> over </Font></Font><Equation input-equation="GF(p)" style="2D Math">NiMtJSNHRkc2IyUicEc=</Equation><Font background="[0,0,0]" family="Times New Roman"> will be used. Since the root of primitive polynomial  </Font><Equation input-equation="p(x)" style="2D Math">NiMtJSJwRzYjJSJ4Rw==</Equation><Font background="[0,0,0]" family="Times New Roman"> is known, one can easily determine any generator of a multiplicative group of  </Font><Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation><Font background="[0,0,0]" family="Times New Roman"> and without any problem compute public and private key. With this end in view, the routines for multiplying and exponentiating in the multiplicative group of  </Font><Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation><Font background="[0,0,0]" family="Times New Roman"> and for key generation, encryption and decryption, have been implemented, as well. Next these procedures have been  used for testing ElGamal<Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false">  cryptosystem</Font><Font background="[0,0,0]" family="Times New Roman">  and  it   then  appeared that the cipher works even in such algebraic system, which awkwardly simulates the multiplicative group of  </Font></Font><Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation><Font background="[0,0,0]" family="Times New Roman">. Thus, the latter algebraic system has been  shortly described,  named spurious multiplicative group of  </Font><Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation><Font background="[0,0,0]" family="Times New Roman">, and denoted as </Font><Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation><Font background="[0,0,0]" family="Times New Roman">.  </Font></Text-field><Text-field><Font background="[0,0,0]" family="Times New Roman">     ElGamal encryption scheme, presented here,  fully deserves the name uses-friendly,  since it has an extended  keyspace  and  its key-generation and encryption/decryption algorithms are exceedingly simple. Therefore, from this point of view, ElGamal cryptosystem seems to be much safer and more efficient than RSA encryption scheme. But this question should be carefully still examined.</Font></Text-field></Input></Group></Section><Section collapsed="true"><Title><Text-field layout="Heading 1" style="Heading 1">ElGamal Public-Key Encryption Scheme Working in the Multiplicative Group of  GF(<Equation input-equation="p^m" style="2D Math">NiMpJSJwRyUibUc=</Equation>)</Text-field></Title><Group><Input><Text-field layout="Normal" style="Normal">     It is known  that basic ElGamal encryption scheme can be generalized to work in any finite cyclic group G. As is rightly stated in [1], the operations on elements of the multiplicative group of <Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation>, namely, multiplication and exponentiation,  are easy to implement and  the discrete logarithm problem in this group should  be computationally infeasible. Therefore,  ElGamal  encryption  scheme, based on the multiplicative group of  <Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation>,  is considered in this contribution. A concise description of a little modified algorithms, characterizing this scheme, is given below.</Text-field><Text-field/><Text-field layout="Bullet Item" style="Bullet Item">Key generation:  Each entity creates its public key and a corresponding private key. So each entity A ought to do the following:</Text-field><Text-field layout="Dash Item" style="Dash Item">Choose a primitive polynomial  <Equation input-equation="p(x)" style="2D Math">NiMtJSJwRzYjJSJ4Rw==</Equation> of degree m over GF(p) in order to construct a group, isomorphic to the multiplicative group  of <Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation>. The group, having an order n = <Equation input-equation="p^m-1" style="2D Math">NiMsJiklInBHJSJtRyIiIkYnISIi</Equation>, consists of the set  G = {1, ...,  <Equation input-equation="p^m-1" style="2D Math">NiMsJiklInBHJSJtRyIiIkYnISIi</Equation>},   and  of  an operation of  multiplication of elements from this set, which  is  performed  by  means of  function P(x, y) ,  <Equation input-equation="x, y in G" style="2D Math">NiQlInhHLSUjaW5HNiQlInlHJSJHRw==</Equation> .  The function Pow(x, k), carrying out the  operation of rising any element from G to a k-th power,  <Equation input-equation="k in [-n+1, n-1]" style="2D Math">NiMtJSNpbkc2JCUia0c3JCwmJSJuRyEiIiIiIkYrLCZGKUYrRitGKg==</Equation>,  is also defined. The generator of this group is p, since the polynomial  <Equation input-equation="p(x)" style="2D Math">NiMtJSJwRzYjJSJ4Rw==</Equation>  is primitive. </Text-field><Text-field layout="Dash Item" style="Dash Item">Select a random integer  <Equation input-equation=" r in [1, n-2]" style="2D Math">NiMtJSNpbkc2JCUickc3JCIiIiwmJSJuR0YoIiIjISIi</Equation>,  such that <Equation input-equation="(r, n-1) =1" style="2D Math">NiMvNiQlInJHLCYlIm5HIiIiRighIiJGKA==</Equation> ,  and compute the other generator  <Equation input-equation="alpha" style="2D Math">NiMlJmFscGhhRw==</Equation> = Pow(p, r).</Text-field><Text-field layout="Dash Item" style="Dash Item">Choose a random integer  <Equation input-equation=" a in G" style="2D Math">NiMtJSNpbkc2JCUiYUclIkdH</Equation> , and compute  <Equation input-equation="beta" style="2D Math">NiMlJWJldGFH</Equation> = Pow(<Equation input-equation="alpha" style="2D Math">NiMlJmFscGhhRw==</Equation> , a).</Text-field><Text-field layout="Dash Item" style="Dash Item">A<Font encoding="UTF-8">\342\200\231s public key is </Font><Equation input-equation="alpha" style="2D Math">NiMlJmFscGhhRw==</Equation>  and <Equation input-equation="beta" style="2D Math">NiMlJWJldGFH</Equation>, together with  <Equation input-equation="p(x)" style="2D Math">NiMtJSJwRzYjJSJ4Rw==</Equation>  and functions P and Pow, if these three last parameters are not common to all entities.  </Text-field><Text-field layout="Dash Item" style="Dash Item"> A<Font encoding="UTF-8">\342\200\231s private key is </Font>a.</Text-field><Text-field layout="Bullet Item" style="Bullet Item">Encryption:  Entity B encrypts a message m for A, which A decrypts. Thus B should make the following steps:</Text-field><Text-field layout="Dash Item" style="Dash Item">Obtain A<Font encoding="UTF-8">\342\200\231s authentic public key  </Font><Equation input-equation="alpha" style="2D Math">NiMlJmFscGhhRw==</Equation> ,  <Equation input-equation=" beta " style="2D Math">NiMlJWJldGFH</Equation> , and  <Equation input-equation="p(x)" style="2D Math">NiMtJSJwRzYjJSJ4Rw==</Equation>  together with functions P and Pow, if these parameters are not common.</Text-field><Text-field layout="Dash Item" style="Dash Item"> Represent the message m as a number from the set G.</Text-field><Text-field layout="Dash Item" style="Dash Item">Choose a random integer <Equation input-equation="k in  [1, n - 1]" style="2D Math">NiMtJSNpbkc2JCUia0c3JCIiIiwmJSJuR0YoRighIiI=</Equation>.</Text-field><Text-field layout="Dash Item" style="Dash Item">Compute  <Equation input-equation="c[1]" style="2D Math">NiMmJSJjRzYjIiIi</Equation>  =  Pow(<Equation input-equation="alpha" style="2D Math">NiMlJmFscGhhRw==</Equation>, k) and <Equation input-equation="c[2]" style="2D Math">NiMmJSJjRzYjIiIj</Equation> = P(m, Pow(<Equation input-equation="beta" style="2D Math">NiMlJWJldGFH</Equation>, k)).</Text-field><Text-field layout="Dash Item" style="Dash Item">Send the ciphertext c = <Equation input-equation="c[1]" style="2D Math">NiMmJSJjRzYjIiIi</Equation>, <Equation input-equation="c[2]" style="2D Math">NiMmJSJjRzYjIiIj</Equation>  to A.</Text-field><Text-field layout="Bullet Item" style="Bullet Item">Decryption:  To find plaintext m from  the ciphertext c =  <Equation input-equation="c[1]" style="2D Math">NiMmJSJjRzYjIiIi</Equation>, <Equation input-equation="c[2]" style="2D Math">NiMmJSJjRzYjIiIj</Equation> ,  A should perform the following operations:</Text-field><Text-field layout="Dash Item" style="Dash Item"> Use the private key a to compute g = Pow(<Equation input-equation="c[1]" style="2D Math">NiMmJSJjRzYjIiIi</Equation>, a)  and then compute  <Equation input-equation="g^(-1)" style="2D Math">NiMpJSJnRywkIiIiISIi</Equation>  =  Pow(<Equation input-equation="g, -1" style="2D Math">NiQlImdHLCQiIiIhIiI=</Equation>).</Text-field><Text-field layout="Dash Item" style="Dash Item">Retrieve the plaintext by computing   m   =  P( <Equation input-equation="g^(-1)" style="2D Math">NiMpJSJnRywkIiIiISIi</Equation> , <Equation input-equation="c[2]" style="2D Math">NiMmJSJjRzYjIiIj</Equation>) .</Text-field><Text-field layout="Bullet Item" style="Bullet Item">Remarks on implementation:   It is supposed that we will use primitive polynomials, but to determine an arbitrary primitive polynomial of higher degree is not so simple, even for Maple. There exist a few useful tables, for example [2], where about 600 primitive polynomials of degree from 311 to 3604 are listed. It is a pity that is difficult to find similar tables for p odd. Nevertheless, one may easily determine, using Maple, random irreducible polynomials of degree m over <Equation input-equation="GF(p)" style="2D Math">NiMtJSNHRkc2IyUicEc=</Equation>,  with p odd, satisfying   <Equation input-equation="p^m in [2^1000, 2^5000]" style="2D Math">NiMtJSNpbkc2JCklInBHJSJtRzckKiQiIiMiJSs1KiRGKyIlK10=</Equation> , and work  with ElGamal encryption scheme based on the subgroup of the multiplicative group of  <Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation>. Furthermore, Maple provides very efficient arithmetic  in the domain of univariate polynomials over the integers modulo p,  allowing without difficulty, to  implement functions P and Pow for multiplying and exponentiating elements belonging to the multiplicative group of <Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation>.   </Text-field></Input></Group></Section><Section collapsed="true"><Title><Text-field layout="Heading 1" style="Heading 1">Implementation of ElGamal Public-Key Cryptosystem Working in the Multiplicative Group of  GF(<Equation input-equation="p^m" style="2D Math">NiMpJSJwRyUibUc=</Equation>)</Text-field></Title><Group><Input><Text-field layout="Normal" style="Normal">     To use ElGamal encryption scheme based on a multiplicative group of <Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation>,  the following procedures have been implemented in Maple interpreter and written  into the file ufelgp.m:                   </Text-field><Text-field layout="Bullet Item" style="Bullet Item"> ElGinit := proc(pn::prime, ip::polynom)  ...  end proc: returns two global variables of small size, namely, a prime p, equal to the actual parameter pn, and a <Equation input-equation="zppoly;" style="2D Math">NiMlJ3pwcG9seUc=</Equation>-type irreducible polynomial ext (converted actual parameter ip), needed  for proper operation of the procedures, listed below,                         </Text-field><Text-field layout="Bullet Item" style="Bullet Item">P := proc(a, b::nonnegint)  ...  end proc: returns  the product of two arbitrary elements a  and  b  of the multiplicative group of GF(<Equation input-equation="p^m" style="2D Math">NiMpJSJwRyUibUc=</Equation>),                      </Text-field><Text-field layout="Bullet Item" style="Bullet Item">Pow := proc(a::nonnegint, k::integer)  ...  end proc: returns  k-th power of an element a belonging to the multiplicative group of GF(<Equation input-equation="p^m" style="2D Math">NiMpJSJwRyUibUc=</Equation>),                          </Text-field><Text-field layout="Bullet Item" style="Bullet Item">ElGmggfkey := proc(p, m::posint)  ...  end proc: by means of this procedure the user can compute its private and public key,                          </Text-field><Text-field layout="Bullet Item" style="Bullet Item">ElGmggfE := proc(m::posint)  ...  end proc: enciphering procedure, converting any integer m, representing a plaintext, to a, cryptogram,  consisting of two integers the  <Equation input-equation="c[1], c[2] " style="2D Math">NiQmJSJjRzYjIiIiJkYkNiMiIiM=</Equation>,                        </Text-field><Text-field layout="Bullet Item" style="Bullet Item">ElGmggfD := proc(c1, c2::posint)  ...  end proc: deciphering procedure, which regains the original plaintext m contained in the cryptogram <Equation input-equation="c[1], c[2] " style="2D Math">NiQmJSJjRzYjIiIiJkYkNiMiIiM=</Equation>,                         </Text-field><Text-field layout="Bullet Item" style="Bullet Item">ElGs2blE := proc(m::string)  ...  end proc: more application-oriented procedure than ElGmggfE; it converts an arbitrary message m, in form of a string of ASCII characters,  to two  lists of bytes   <Equation input-equation="c[1], c[2] " style="2D Math">NiQmJSJjRzYjIiIiJkYkNiMiIiM=</Equation>,                     </Text-field><Text-field layout="Bullet Item" style="Bullet Item">ElGbl2sD := proc(c1, c2::list)  ...  end proc:  deciphers cryptogram, generated by the procedure ElGs2blE, and returns the string of plaintext. Two last procedures may immediately be used by  Maple community in transmitting rather short e-mail messages (up to several kBytes) with fine privacy. It is obvious that above procedures can easily be adapted to enciphering/deciphering files of arbitrary sizes.   </Text-field><Text-field layout="Bullet Item" style="Bullet Item">otinsmg := proc(p::prime, pm::polynom)  ...  end proc:if one wants to construct ElGamal cryptosystem  working in  <Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation>, one ought to call the procedure ElGinit with actual parameters  p and pm,  where pm denotes an arbitrary polynomial  of degree m  over <Equation input-equation="GF(p)" style="2D Math">NiMtJSNHRkc2IyUicEc=</Equation>, and to realize key generation, encryption and decryption using all procedures previously listed. To familiarize the reader with the spurious multiplicative group of GF(<Equation input-equation="p^m" style="2D Math">NiMpJSJwRyUibUc=</Equation>),  procedure otinsmg, which returns  a square matrix, representing the interior of table of operation in an  <Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation>, and a set of its invertible elements as well, has been implemented.               </Text-field><Text-field layout="Bullet Item" style="Bullet Item">edtest := proc(dg, ks::posint, pp::prime, px::polynom)      ...  end proc: an auxiliary procedure, making experimenting with ElGamal cipher easier.             
                    </Text-field></Input></Group></Section><Section collapsed="true"><Title><Text-field layout="Heading 1" style="Heading 1">Definition and Examples of  SMG(<Equation input-equation="p^m" style="2D Math">NiMpJSJwRyUibUc=</Equation>) </Text-field></Title><Group><Input><Text-field layout="Normal" style="Normal">     For all prime p, for any positive integer m and for any polynomial  <Equation input-equation="f(x)" style="2D Math">NiMtJSJmRzYjJSJ4Rw==</Equation> of degree <Equation input-equation="m" style="2D Math">NiMlIm1H</Equation> over GF(p) there exists an algebraic system  &lt;Gx,  .&gt;, consisting of the set Gx of all <Equation input-equation="p^m-1" style="2D Math">NiMsJiklInBHJSJtRyIiIkYnISIi</Equation> non-zero polynomials of degree <Equation input-equation="dg&lt;=m-1" style="2D Math">NiMxJSNkZ0csJiUibUciIiJGJyEiIg==</Equation> over  GF(p)  and of an operation of multiplication of these polynomials modulo polynomial <Equation input-equation="f(x)" style="2D Math">NiMtJSJmRzYjJSJ4Rw==</Equation>.  Such  an algebraic system  is  a  generalization  of   the multiplicative  group  of <Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation>,  therefore,  will be called the spurious multiplicative group of <Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation>  and denoted as <Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation>. The <Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation>, applied in the presented application, is obtained using the mapping <Equation input-equation="sigma" style="2D Math">NiMlJnNpZ21hRw==</Equation>, defined by the function  <Equation input-equation="sigma(v(x)) = v(p)" style="2D Math">NiMvLSUmc2lnbWFHNiMtJSJ2RzYjJSJ4Ry1GKDYjJSJwRw==</Equation> , converting a polynomial <Equation input-equation="v(x)" style="2D Math">NiMtJSJ2RzYjJSJ4Rw==</Equation>, belonging to the set Gx, to a number from the set G (see second section of this worksheet).  It is then clear that multiplication in  <Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation> can be performed by the same routines as in the multiplicative group of <Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation>, but the interior of multiplication table of <Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation> is not a Latin square. In principle, <Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation> is a commutative groupoid, in which the operation may  not be closed, nor fully associative, since divisors of  0  exist if  <Equation input-equation="f(x)" style="2D Math">NiMtJSJmRzYjJSJ4Rw==</Equation>  is not irreducible.   The existence of such groupoids, which seem to be important for cryptography,   have been noticed by the author recently (maybe other cryptographers experimented with similar algebraic systems), thus, all their properties are not yet known to him. </Text-field><Text-field layout="Normal" style="Normal">     However, using ElGamal cipher based on  <Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation>, we must remember, that there exist non-zero elements belonging to this groupoid, which have not their multiplicative inverses. The set of all invertible elements  form an abelian group under  multiplication (function P), generally not cyclic. It is then easy to observe that  any message can be encrypted by means of ElGamal cipher based on  <Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation>, but the sender, after  the cryptogram <Equation input-equation="c=c[1], c[2]" style="2D Math">NiQvJSJjRyZGJDYjIiIiJkYkNiMiIiM=</Equation> has been generated,  should verify if <Equation input-equation="c[1]" style="2D Math">NiMmJSJjRzYjIiIi</Equation>  is invertible, that is, if  Pow(<Equation input-equation="c[1],-1" style="2D Math">NiQmJSJjRzYjIiIiLCRGJiEiIg==</Equation>) exists and can be computed. It is condition sine qua non of successful deciphering. In any case, <Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation> will work in this application and the reader may generate and observe its table of operation and see the set of invertible elements using the procedure otinsmg.    </Text-field><Text-field layout="Normal" style="Normal">     These are several examples of small  <Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation>'s:</Text-field></Input></Group><Section collapsed="true"><Title><Text-field layout="Heading 2" style="Heading 2">Examples of   SMG(2^3)</Text-field></Title><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">restart; read "ufelgp.m";</Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">otinsmg(2, x^3 + 1), otinsmg(2, x^3), otinsmg(2, x^3 + x + 1); 
otinsmg(2, x^3 + x^2 + x + 1);</Font></Text-field></Input></Group></Section><Section collapsed="true"><Title><Text-field layout="Heading 2" style="Heading 2">Examples of   SMG(3^2)</Text-field></Title></Section><Section collapsed="true"><Title><Text-field layout="Heading 2" style="Heading 2">Examples of  SMG(5^2) </Text-field></Title><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">otinsmg(5, x^2 + 2*x + 1); otinsmg(5, x^2);</Font></Text-field></Input></Group></Section><Section collapsed="true"><Title><Text-field layout="Heading 2" style="Heading 2">Examples of  SMG(2^4)  </Text-field></Title><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">otinsmg(2, x^4 + x^2 + x + 1); otinsmg(2, x^4 + x^3 + x^2 + x + 1); </Font></Text-field></Input></Group></Section><Group><Input><Text-field layout="Normal" style="Normal">If either  a set of invertible  elements or a table of operation  in a tested <Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation>  is needed, it suffices to execute, for example</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">otinsmg(2,x^8 + x^2 + x + 1)[2]; otinsmg(3,2*x^3 + x^2)[1];</Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" style="Normal">     Further experiments with  <Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation>  are left to the reader.</Text-field></Input></Group></Section><Section collapsed="true"><Title><Text-field layout="Heading 1" style="Heading 1">Examples of Encryption and Decryption</Text-field></Title><Group><Input><Text-field layout="Normal" style="Normal">Now we are ready to test ElGamal cryptosystem, based on a multiplicative group of  <Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation>, on its subgroups, or on a <Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation>.  </Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">restart; read "ufelgp.m": </Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" style="Normal">     Taking from [2] the primitive polynomial of degree 3036 over GF(2) one can construct and test ElGamal cryptosystem working in the multiplicative group of GF(<Equation input-equation="2^3036" style="2D Math">NiMqJCIiIyIlT0k=</Equation>),   by executing the following statements:</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">dg := 3036: ks := dg: pp := 2: px := x^3036 + x^1087 + 1:
edtest(dg, ks, pp, px);</Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" style="Normal">It is also possible to determine, using Maple, random irreducible polynomial px of degree dg over GF(pp) with pp odd, of much smaller degree than in the first example, such that  <Equation input-equation="pp^dg" style="2D Math">NiMpJSNwcEclI2RnRw==</Equation>  will be  equal to about <Equation input-equation="2^3008" style="2D Math">NiMqJCIiIyIlM0k=</Equation> . In this case the order of a root of  px  is not known and  ElGamal cryptosystem will probably work in a subgroup of the multiplicative group of  GF(<Equation input-equation="pp^dg" style="2D Math">NiMpJSNwcEclI2RnRw==</Equation>).  The test, of course,  will be satisfactory.</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">dg := 188: pp := 46327: ks := dg*length(convert(pp, binary)): 
px := Randprime(dg, x) mod pp: edtest(dg, ks, pp, px);</Font>
</Text-field></Input></Group><Group><Input><Text-field layout="Normal" style="Normal">The system works faster than in previous example, therefore, by increasing pp  and keeping roughly the same  key size we will fobtain the shorter times of enciphering/deciphering:</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">dg := 29: pp := 162259276829213363391578010288127: 
  ks := dg*length(convert(pp, binary)):
  px := Randprime(dg, x) mod pp: edtest(dg, ks, pp, px);</Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" style="Normal">Finally, an arbitrary  polynomial <Equation input-equation="px = x^5 + x^4 + 12*x^3 + 2*x^2 + 12*x + 11" style="2D Math">NiMvJSNweEcsLiokJSJ4RyIiJiIiIiokRiciIiVGKSomIiM3RikqJEYnIiIkRilGKSomIiIjRikqJEYnRjFGKUYpKiZGLUYpRidGKUYpIiM2Rik=</Equation> of degree 5 over <Equation input-equation="GF(pp)" style="2D Math">NiMtJSNHRkc2IyUjcHBH</Equation> with  <Equation input-equation="pp^5" style="2D Math">NiMqJCUjcHBHIiIm</Equation>  approximately equal to <Equation input-equation="2^3035" style="2D Math">NiMqJCIiIyIlTkk=</Equation>  has been chosen. The execution of the following statements  shows that px is not irreducible </Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">pp := 531137992816767098689588206552468627329593117727031923199444138200403559860852242739162502265229285668889329486246501015346579337652707239409519978766587351943831270835393219031728127:
px := x^5 + x^4 + 12*x^3 + 2*x^2 + 12*x + 11:</Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">Factor(x^5 + x^4 + 12*x^3 + 2*x^2 + 12*x + 11) mod pp;</Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" style="Normal">Under the current circumstances ElGamal cryptosystem working in SMG(<Equation input-equation="pp^5" style="2D Math">NiMqJCUjcHBHIiIm</Equation>) will be tested:</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">dg := 5: 
ks := dg*length(convert(pp, binary)): 
edtest(dg, ks, pp, px);</Font>
</Text-field></Input></Group><Group><Input><Text-field><Font background="[0,0,0]" bold="false" family="Times New Roman" italic="false" size="12" underline="false">If you find this worksheet interesting, drop me a line, please.</Font></Text-field><Text-field layout="Normal" style="Normal">This message contains 63 bytes and to encipher it using ElGamal cipher we need a key of size ks in bits, satisfying <Equation input-equation="ks&gt;=504" style="2D Math">NiMxIiQvJiUja3NH</Equation>. Thus, we can take from table [2], e.g. the primitive pentagonal of degree 515 over <Equation input-equation="GF(2)" style="2D Math">NiMtJSNHRkc2IyIiIw==</Equation>,  and execute the following statements:</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">restart; read "ufelgp.m": pp := 2: dg := 515:
   mess := "If you find this worksheet interesting, drop me a line, please.":
   px:=x^515 +x^418 + x^328 + x^123 + 1: ElGinit(pp, px):
   k := ElGmggfkey(pp, dg): n := k[1];
   alpha := k[2]; beta := k[3]; a := k[4];
   c := ElGs2blE(mess); 
   cryptogram:=convert(subs(0=1,c[1]),bytes),convert(subs(0=1,c[2]),bytes);       
   md:=ElGbl2sD(c[1], c[2]);</Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" style="Normal">If tables of primitive polynomials are inaccessible, we may randomly select a polynomial and use ElGamal cryptosytem, working, for example in <Equation input-equation="SMG(2^515)" style="2D Math">NiMtJSRTTUdHNiMqJCIiIyIkOiY=</Equation>, executing statements:</Text-field><Text-field layout="Normal" style="Normal"/></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">restart; mess := "If you find this worksheet interesting, drop me a line, please.":  
   read "ufelgp.m": pp := 2: dg:=515: px :=x^515 + x^2 + x + 1:
   ElGinit(pp, px): k := ElGmggfkey(pp, dg):
   n := k[1]; alpha := k[2]; beta := k[3]; a := k[4];
   c := ElGs2blE(mess); 
   cryptogram:=convert(subs(0=1,c[1]),bytes),convert(subs(0=1,c[2]),bytes);     
   md := ElGbl2sD(c[1], c[2]);</Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" style="Normal">Let us see yet, the result of executing the statement:</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">Factor(px) mod 2;</Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" style="Normal">At last, we may use Maple to find random irreducible polynomial px of degree 83 over GF(83) and use it to construct a cryptosystem as follows:</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">restart; 
 mess := "If you find this worksheet interesting, drop me a line, please.":  
 read "ufelgp.m": pp := 83: dg := 83: px := Randprime(dg, x) mod pp:  
 ElGinit(pp, px): k := ElGmggfkey(pp, dg):
 n := k[1]; alpha := k[2]; beta := k[3]; a := k[4];
 c := ElGs2blE(mess); 
 cryptogram:=convert(subs(0=1,c[1]),bytes),convert(subs(0=1,c[2]),bytes); 
 md := ElGbl2sD(c[1], c[2]);  </Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" style="Normal">      We can, of course, easily construct ElGamal cryptosystem for practical use with satisfactory  key size, much greater than about 500 bits, in many different ways, making use of the approach presented here.      </Text-field><Text-field layout="Normal" style="Normal">      In the end of cryptographic experiments let us suppose that the user A, who has his private key a, saved on the disk in the file named "a", has received the cryptogram c, generated by means of the routine ElGs2blE and saved in the file "c". Besides, he knows that his private key of length 5208 bits has been calculated using the prime pp and the polynomial px,  stored in  files "pp" and  "px", respectively. Let the reader decipher this cryptogram using the procedure  ElGbl2sD.</Text-field></Input></Group><Text-field layout="Normal" style="Normal"/></Section><Section collapsed="true"><Title><Text-field layout="Heading 1" style="Heading 1">Conclusions</Text-field></Title><Group><Input><Text-field layout="Normal" style="Normal">     It has been shown that the ElGamal encryption scheme, based on a multiplicative group of <Equation input-equation="GF(p^m)" style="2D Math">NiMtJSNHRkc2IyklInBHJSJtRw==</Equation>, on its subgroups and on <Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation> are user-friendly, because in such scheme  the key-generation and encryption/decryption algorithms are simple and effective, even if a key size of order up to 10000 bits or more is needed. Particularly interesting seems to be the use of <Equation input-equation="SMG(p^m)" style="2D Math">NiMtJSRTTUdHNiMpJSJwRyUibUc=</Equation> which makes the cryptosytem partly unpredictable and expands its keyspace. However,  the problem, presented here, is quite new and far from being fully discussed. </Text-field></Input></Group></Section><Section collapsed="true"><Title><Text-field layout="Heading 1" style="Heading 1">References</Text-field></Title><Text-field layout="Heading 1"><Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" italic="false" underline="false">[1] Menezes A. J., van Oorschot P. C., Vanstone S. A.:  </Font><Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false">Handbook af Applied Cryptography<Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" italic="false" underline="false">,  CRC Press, 1997 <Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" italic="false" underline="false">
[2] Zivkovic M.: </Font></Font><Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" underline="false">Table of Primitive Binary Polynomials. II,<Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,0]" italic="false" underline="false"> Mathematics of Computation, Vol. 63, No. 207, July1994, pp. 301 - 306</Font></Font></Font></Text-field><Text-field layout="Normal"/></Section><Group><Input><Text-field layout="Normal" style="Text"><Font italic="true">
Legal Notice: The copyright for this application is owned by the author(s). Neither Maplesoft nor the author are responsible for any errors contained within and are not liable for any damages resulting from the use of this material.. This application is intended for non-commercial, non-profit use only. Contact the author for permission if you wish to use this application in for-profit activities.</Font>
</Text-field></Input></Group><Group><Input><Text-field alignment="centred"><Image height="33" width="800">TUZOV3RLVWI8b2I8Uj1NRExDZE5WWlpKOkBMPkg6VEtHeE1rSjo8T2BMb1xcbFF4bFFXZE1XcHNIcVNobVdoWW9lWE9QbVRQbVZgbXZxeXhxPVhqPXhYcXVYYXhuYVhjRVdjPVVSPVV3ZVl3RUxLRExxdFBxPFI6PXJeYXZedVJBdXJaQG5adFZhdVZiPVdiTVl0TXl2YXl2WXl1WVl4bVl4cXl4cVl5dVl5RVlzRVlwbVhweXl5eXlwcXhwPUo6Pjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjpkeTxUeXBDPnFVTENUSmNEWG9YdXNUPGF1cGtjZldNWEBKQ2VVYGROdVRtV3h5eXlwcHVQQ0RTU3VMQ2x1Pjx4VHBRbWxzYl1NaWhVT2BxVGVYU1FPO0BKeFZdd09sOkBzeUZ2PHdcXHRAdHNOblFuXFxWP3c8d1xcP0ZxSmlqWHluWlZ2bnlIRXJtaUJfX3RXaXRbTXl4WVJJSVh2V2d0U1M9O2dRTXdBSUNdSVlyR1hSb2djW0VwcVl0c3huPUJWU1VHdUVBW1d4S3JXYVNIc3NvWUJQa3luS2N0cWdteVVLQVlRWVV3X3JzPXdib1lUV1hJP0lRS3lvW1hAd3lkcXl0WVJHQXlgaXhzW1NseVhhU3lxdXk6bWVsPWRYcXlkSWZ2Z1JJZVNVa1VtVUJHd3VaaXRTO2VRP1M+QWRNYXNua3lTR2JEU3VpbWJTYWJqeXROQXlNdVhsYVRXYUNwO3k/YXQ7X3R4YVR3YXRoP2NqPUdiZ1lWR0NBW2VBa2heaWh5YUlHb1ZkR3h5V2VRYXRhbVZIWXg6U0VJZXd5YWNtY1NCQXZnT3l5c3NFeUJWV0N3UUZ0WVd4WWRNZ2NZX3leVXk/Z2NlW1dYUUNEY3dHdXdITXc/cXd4W2dhY3NjR3J3T3R1S0ZYS3NjW0ZaSUJPcUlySUlda3VJQ2ZSb3NNX3lUU0VXV2NLUXNfcUdIZUlpYVdCc3ZhQVhXb0ZzWVR5dUlZU2RXQ2V0W2ZacE9ZdHZbXFxYU012Tj1YaGx1eGVsXXlsdlVuO1BZc3F2a21tQ3hTRVFQc01PZVVwUUVLTmB5VkFxY3FSUXBZeEhyW3hVXFxBdGdQVmV4bUhIUVlEWHB0TDtleV9cXFhIeHlUcExRPXFKaEprbHFBPXdQeHFPdHBQbXdRPWtXZFNTWWp4aFF0PWxpPFg9UHJcXEhveE1LeHBwZFVQR3hsYDxSYWRXc0VNVWhuTWluYXF2eVxcdF1wSndcXFB0dHQ6bHdfaHk7UHh1RWxXcGZ5cGlReWc8SWJnSHFRP3dSd3ZGZ2NRbm10SV1sWFpvYXV2d1xcXVZpXFw/eXVJakdxeUFfXWpeY2lhXFxedmFZZm1YWXZWX2ZveWRfd1phP3lJUGZOWHBPaW1iSW53aWllUXlaQFtqZltwX2BzP1xcTkBxYXdbPGFfPXFwZEl1XT5nbkhwVWlcXF5hW0FHY1NfeV1wbkhnX29JaT1Ya01gYkteeVVXakZoaENwaWY/bGxoZWxoa0txaz1xZ0NxcUlva0phZFpAXUlPc3BIamdRZ1V2Xk1wXltha1hOb2t4Y0ZheE1YPkVmeD1HSnlZXT11S1dYdWVmY1lDVl9ETztYXW9lRHdJXVVyaElYaEtkdFlndj1zWU14eU1oRUFiZEtkRkVEO01CaW1VWWd2TnNmQnVEZ3F3XnNSWm9pZXlpWUVmRUFzWU9jVTt1Zl9DXjtnPkVJVW1XeV14WltIP1VUaXdoYXliPEVXVUFobWdoVWVlXU9ETHlma1lkT1FETk1zbGVnXW1IR2t5blVyclVoamdidnN0cklDc09pVT91cFVodE1FX2NWVWV5d1dyU2VTdkl3SHFzRVV2d2FTYG12X2tDRWdERUVWT295ZlNGWUdYaFt4ZTt3ZnN5YT9IYmN1X1NpSFVmclN0cXNnSUNVS21SO0lFR0dpRVV4U1Nld2tCUmNpYz9mW0dIc11XQkNlRlNYTWVjQHF3UVlpT0NGaTtiZF9lcGdoQ2NyU0liclVGZktYcE9FPkNkR1VWSF9zcz1HYUVGXFxNaF91REpjWGVXR1NrSUE9VGBbdWhPaUtPeTtJZG9fc0JRZ1BHYmlNeFpJeFs9Uk5RSENVd2xJaFZBcz5NeHY9dDtJZWtlY1tpVG9lQl1ZU1ZzSV1VR2tNZ0M9eE1fY3ZdckNrR2xPeUU9d1ZzeW1vUlBFUkdVV29Lcz4/ZE5HY3FPdkw9RGNnVVVpZD1TZEJZdGFjQmN5VDtzQz8/c1hzQkZFSVBLZHdVaWJVVXVvd3RDeExFUnhHVVBPYz1lZVdXREpfdEJJRmpbUk1XWG9hSW5pRkRZeXZJZkZZSDtFaWZhV0FBZGtRZ1N1SW9ZSFM/c1xcYVlua1ljQ1JYQXk7PXVyU3NVRUdYb3Zta2RVP2JJa3V2SWhmO2hIS1Jtc0lxa0drQ0lFR1NRaVV5P3JbY2h5XURXP1VKd2VvX0hJO0lbaVJQdVlDY2VdeUlRR1NSPVNGY1lASUhOYWJFeWhUO0hcXGdDW2lpRXViWElZWz9GaGtmQWFSeWNjUTtEPE1CTGtzVUd2TV1GT1NXWmFGbm1VVk9CXU1oYGd1XWV3OkNTWFtWVVtkXmlXQ0lUTWtpbmdWbWNZO0V1SWtGWmdldGFTbGtlRF9TbFVkP1NVW1doYF9JSGt1TmFJQkVZQEtoUVtJYlNmbF9DcGdWXUlCZ2NmOkNyT1dXbGlWUFNETXVFa3dCWVFiZ0t4R2lXZmNkZ19jQ29YRHlGb0FGPENZZF9mWlNVS09YbVVFcm12cFdnYVFJZVdHeU1pdU9maGVGWVtVV2dkR3dlWztYQFloPG93c2tUd1VnallkdkVoblRQYExKYXRVbXlvXXhsa1VwZ1BTSG1TT2lTWHRNP0hzSGhXZ2xudT15cE1vc21QV1F0WG1sTERSXmVyYXBwQVBxQFR3dVxcbWY8eXRNb190TlFEbXd1VUJhbFtUS01dVVpcXFZzVVBnXFxPaFhVXWl3PmxUPlR0b2xZVWVNXFxgcTppTkZRa01ldUI8WV55cVtUcXdMeHlZa15tUERoVVRFTFtteGRZVHJVd0hZcHBgUl10c3lobTxcXHJkaE5cXF1WR2VqRXlUQkxsWGhVaWRTa2xWY0lta3VKQVxcT0ZBSnhYVEpcXG9ScFVyXFxxbkVVZjxQT2FvY2lvWHhZVVRSeGhtS0hub1V1QmF2dnh0XUBvcmR5cUlsYHR5Y0V5Zz1TdDxWO0xZYERvREVsQ2hXWWRrcElrU01vcGhuaHFrZU1XPFFYXmRvZ0VtTTxreEFZTT1tcFBLbVRUTW1YZVFMbnVLP0hNZUlVYGBUcU1TZGVOcW14SGVMSz1PVXB4XkBraVlwYHhYVmRvVUBMPVBwckFQSXVSW1FwQFlsdlBXd1FUb01wR2BqT1h5Rmh4QUVUaWVSQURLZ2lvVlBPeVhVbFhUOkl3YzxOZ2VNTnVwXFxYV3JkUUZQUXZsUD1Ub3Nlbz5xWGJpV09cXHlFPVBVaVBBQVNnTHR4WExHPVNUQVNBeGo9QFdpeHdYYFhPQXRIbG9JZW9IaUx2eXVvdU10THRUeUpzQXhCWHJAVHFXWE9zRUtvcHVBRVU8dXlPXFxMVHlQQVhtPXRPVVFuZWFORF1LT1l5THlYYnR4dWhtY1lyWE1raFxceWxMb19lcWB0U2VBT0hdbHFVd2lQbmtQd2xIUGdIcmVoWV5wS2hQd0dQSjs8TzxgcVU9dE14VVVFUFdAUmRJVGZZamphb3dUcU1RalhISlNcXE08RXZhcHBUQG1XTUpAaU9WaHlMUUtxXVQ9RXljPVVocU5hXVBKXFxYXFxMdVtEc1FAT1tYUnc8UmJgUGB0U3VlamNlWVhAVU49ckZleHVIbURta11YUkxhWUVsUm1JUF1QZWNoYHJ4bWE/YXJhYUN4dldRW1xcYVpgeWlGQWo/Z3ZWVmReQG1HeVtoaGp4UXZqSXdNVndQR3lYV19FcGpETm5zeV5FaHZFX2Q6UG5rT2FEQV5DbnhFQW9DaF9ld2M7cGJbSVtad2NVP2twR3d4dmNWVlxcT1dhWUdaV3FiR0dealZrQVFdbVhja2Z3VFZmb3ZaVm5aTHdmb0llUz5lQEh0Y3ZzZ1BuPFlxRE94Y3FiZE5tUHh0cXdoc2ZhZz5teU9lZGhxQ0ZrTldxc3B5XUBfVlFySUl1XW5jTEliPl94ZFFeW3l3XmBeWXFiU3hleWdhPk9rVkBmcFZmZU5obXhlU3duXj9fR09rbGZgUXFnS195Sz95akBweHZ3Ykh0SWB5WWFpP0h2Sl53dlF2WW5nQVZvPVhod2NSZUJJTWZsS1RVX2JgcXJGUUM8VUdSV1k9a1ZXQWl2XVg8Q1N5TXljeXdlb0U+P3R0a3NWZ0JUbXRHSVh2S0RUO0RgYXRwYUdRRVZBPWVmb0hAXVRnc3dzQ2ZXR0ViQ0NMSVl0U3dHO3RSYUM/XWhpW1Rmd1NQVWNTUVlaQ3Vsb0VbS1RuT1NUdURQcWZwUVVfWXhbP1VaPWJgeUN1RVRVZWN0Y3JzYVdJR2hQVVZkQ1hvW0RuO0dUb2Y9QVZCY1lSR2dhYVlic3Z0PVVCdVZJT2VaS2dHbWhIUXJdXXVtc2lmeVRQV3RuZXlaS3lkbUhqb1dSQXNTUUhld0RTPUhqXUM+cWRIW1hISWdrd1RHdXZJX3NnWURnYWJTc2lMWXJiXUljW3VaVXVDZUdOXUlueXlqaVZuTXVKaWJxXUU+PXNIW3RoUURYZ1RcXHFoTndUVm1HZG9TaUtzRF1ERF1VT2tzTz1mWDtYdklkYlV3Umlpc0NFdj90RUFTP2VIW0VIaU95W21jRT9oWTtld0tDclt4O0VDcFVFYUl0Uk1VZU1JQHdGPUd1cUlkcmlYbUFpSG91Ql1VRWt2Ym9EYF1iRGV1XlVIT3N4d0tTb2dWRV9HTlFiQkFkdU1ZUTtZX11YYnFCZVtGRllHRj10WGd4cnlZcEFGRG9pZElSSGdVZj91WEdnXVdndUdpZ11VUlFycDt1PU1IWUlYeGNJYW1zcUVsPHVSPFBNd3R3Tk1xTllNQj9cXGFJaXF2Ym94aGtud0RPdl1ecjphXFxbV2hFeHNuX2NkUW9ATmddb3JMUG5DcHRFP3dKcWk6YWRgP2dqWFxcQm9sOkBkSmlzW3ZlbF5wSz5dVHBjSUhob1Nab1hKT2h3W1dnc2VzdUJmRWddPXV1VVk9cVhaV1ZZTVNaRUNIV0hxZVg8U3VeRXV2WVg7QUZRUUNdXUZsXVNOcUlPPUlMUXdoSXdab2VxRW9PcVZZQFRUcHJXQU5xWXN1eE5BQFdqbHB1YVh5dG1YTVJrZHBJXUtcXExUQD1QZFxcU3hISlNYTmh1bEZZUW10d0poV0k8UXN1UlVwd21cXHJRREx5dU1nTXY+QHBTQHBmdFJpVW5pVFY6dVJSaWw8bFJZPHdsdFNWaUxoSEtEQHZWaVNgRE9mYVR2QXN5TXVLbVFVaHZxbFF1TFdAcWxyYFJkZFJLSW1eUVlBYVh4ZFBcXFR1VmxrdE1ZbXlQQWB4Uml2UlVvTHhLbUFOYWxMYHFWYGVURElPO01ZXFxIb1FpWW5Na0hMTnFoeWxVSlxcdFNedUtKSU1LQVlbcXVmTXJ4QVhmeEp5WHhlYFJQcXhPaW9ybEpXXVhFSFh3XFxsSnFyPVh3TjxUPmBuRlBrbEh2XkxUZF1rdml1Oll3bGhXa1R5RHBMU1VWVXFRQ0F1VFRsaVBvcHVvVEhOU1F5UnRzPklxS1lLaFROUU1zZUFqb2FsclF2YklzbE1wPVxcb2pMVU1EdURReW1hb2lRdWxtUE1FTHdocHVwbG5JdnlwUGBYbENETT5MWUBgcmRxdG95bkBNTEZUVVVQb1xcVVdSXFxXTWV0T0FvRWV3TElVY3RSd0B0XUVSR0BYdHFLdUhRV3FqV0xxWmBMVFVPVHVzbUhQY1lrP0ROPXVUXFxhWFNlTE51S3J0dGZAa0l1blVUWENNdFl5UlVRcGxYd2BYdj1pWHBwdUxtUlVxd1RNbVtdcXhoTEVsdD5sTmlAcVE9UV9sUkw8TmdlcmhoWHdBcnlBTD1pd11JeFlUVXloajtwb3FYUG1VZ0hHXFxnYW5mV2ZGPmhyQXd0d3lbWXM8VnVHWGhTR3hlUGpNXmV4blxcdmFiSE5qVGZmRll3RE5yZUBxb2hlSFdtb1dgXVBcXGdmcV1Ja3h4XFw/dmtubmNcXGdpdXBvdkloTWFaT0lraklkVnF0dj9lZm5oZWBpPU9peFZ1ZVZvcHhqSk91TllgW1dcXGpYXFxTTmtlcXJRX3BVZ2hqTmlOUXRwR1xcQ0llX0lhYllzQHd3QndcXExgeE8/cmBxWmk/Y0BXc1dgXkBmam9nZXBwamtJcG5Ya0tQbmRHYWRHaWRvY0U+bT9GamZfYllmXFxcXD9wXUhpZU5xV2dnZUl1Q0FuaGlad2FlcFlua2dlRnlqdk9odV9bR1FrcGlvU05hP25kaXByVUZqY1ZcXHBRbmd3XVI/XVdGZVd4YD5pX0hAdEF3ZGJueTx4X19PYEZ5Z2dxdWpBdEpoYWlBblNBcz14d3RwXmFZbmxvbG4/ZVlRdEFebUp2d0Q/a1xcUWxdeHFNUGNgX3NqVl1ndnJlT3NJT2twUF5WeV5bVndgT1tnd21McWldTm1aQGhCQXJpUF1PPltASGRtWVp5aXJbTm48WXBlTmZvbnNvXl1kbmZJWXVYd2tFQWNVeW5eQWBdVmV5WXVsUG9nQW47P1xcSz9tdF5ncF5qWEd4Zj55c2Zac2d1PWBzZWJfYUlFU1NKY1dld3RtQ3JFQ2ZnRVJhcUVOQ2hCO2ZeSXZ4WUw9UFNdPXlLWG1HZU1ZTG1yVFNCcExfYFVBbG1YbVhsVVRYRW5eRXNTbW1meVJFWHNERXdlbHZRcWxRYVhAQHRqPHBrVFlrRFNOcXhQUWpsdXNpVEpFTFhRXFxSd2BzUGFTVVlKd1BqZGVzX1FzS2BqQElqX0R1Rm1KbVBMbWxsaDxTU1BLVjxXW2VPYWFUTkB3TGx0dj1xZEBPT0hyYzxLPmh1aFBQPUFwU1VSUF1tYklWU3VybERMcXBLdWFWbGlWPklvT3hKeEx5R1hPaHF0PVFQQlFWSXRSamRWP11QRlBQQ3l2c11ZQl1SWEFzUEx5c1FUXk11TFVPRE11ZURQPVVQcEhzRlV4OlhKYGhObEVZS3lrcVFMUUhTRXVyXmFYX1hKSF1VeXh0Z01SQ1h0anVvP0VRV01MW2FSU2lraWRvZUxzVWR1V0VNdGhZWnlRW3F3eEhUW3RPdTxWR3hxYmBxcDxPUUFXT2VZSUl3XlR2YEhyTnlQO0VLaERMaVRxY1hMcTxOWGVqc0VLc2VUO01ZQTxvc211ZkBVQHR4VU1KWWFNRnV2VmFqVWVsdl14WGBuY3VUaFR4Qlxcd3h0dkNpdUBIc1FVUTptc0p5VVZYTE9lVUFMbWRhWV1UTW91cUVFeFdgeEs9UVFMeUdBeWlIUFxceE9mXXRHPmNKd2BneHdeZl1tSWRKd2dYaXliWF1fXlxcXXhdd1hvb3ZmSmB2Z1FrbFdyaHFgc3hxVGhkX0F1WEhvdGF1eHF2VlBzPmZYUUVHX1lHeXVqR1dxYUNPeUU+V1hbd3VFd3lzTUhzQUNhd1lmc0lpcXZXaVdwV0dvR1ltcXdBZWg7X1hxR1N5W1lRVVc8a0ZhVUdtdWhxZVlFO3hkd2JEVURkV1Y8T1lqbXdjXXJMP1RwdXdGX3NuV3VtaWlhQUlueUJbYVVieXhcXHl5YGNTTG1IeHNJbndZTHdmPW9iX2t0eGdVSldUQl1UdEl2S2tERE1JQ01WWkNIPFdXRjt2WGV1T0dlXlFlTHdpa11Ia0NmclVYdV9EZ29DW09JeXVoX0l5YltlRWhxcnlRP013VGV4SXVOYnVtdjxzT2l3eV11Tz5pZT9vTlhwbkZiXWl5a3l2QHBuTT9eYlFiY09wXUBwTV93T0laXFxpXXRWcEdJdT1QZGJIZk14Y3hYYXQ/YVdQWnN3dz54YUR2djx3cVF2eWtecGlBcl9AZmRZeWZveHNhY3RXX3V2Z0JQbXF2bUtfWk1BclpXWnlBdkNQbXVZZFxcQWJacF1aTmdYd3J5WGF4dmE+d2ZZcGNaZ2VtPnV4aXVbR2lZbnV3UXU8YWlKbnM/XFxVTnBxSGdqZndocVtiYWhiQHhDR2JIVmtrX25UUGVpb2JmeWNVZmBYbmF4aWRsd2lUSGptaGVGP3N3PnFXWHhUV3lnUWJ1cFp0WXBncXBrd3dmV3ZjSFpjQXdbaXVNaXliXm1FZnloX3l5WHNJSW9zWGRKZnh2cV0+eWFSX1pWeHlcXGJTP0ViQXdzXXddd3ZjT0ZvTWh3U1VSYWd5Q1lkaVR3QUJ1QUVHV0Z1U0lHb0VrS1lJR0ZZVVlddXdgdXdYb0d1QUZWV2tHd3F5ZmJAcXJyaWZqP3NZcHU9QF9db249Z1tRQGx0UWJRTlpEZlxcRldlXFx5cXV3WzxwdV4+bHZReFxcWXc8d1xcPFZ4UlBuPXl4aU5bQ05nQl5pck9wd0duRWZ5eVdudHF3Omd3RWZaU3BpX0dcXDw/YFFueFY/d3lnbTxOWl5xeWFHcHh4aU1wa19PaHFZcld4XFx0QHQ/QHZBQVxcZXFfclFxdj51eUB0eWFgV3l5Onh2bXlzWHd5WWZbTVd4b1dtSWd2b0U6O0I6TVRLV0RLV2dKO2VaMTo=</Image></Text-field></Input></Group><Text-field/></Worksheet>