Sz\303\241m\303\255t\303\263g\303\251pes sz\303\241melm\303\251let J\303\241rai Antal Ezek a programok csak szeml\303\251ltet\303\251sre szolg\303\241lnak
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">1. A pr\303\255mek eloszl\303\241sa, szit\303\241l\303\241s</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">2. Egyszer\305\261 faktoriz\303\241l\303\241si m\303\263dszerek</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">3. Egyszer\305\261 pr\303\255mtesztel\303\251si m\303\263dszerek</Font></Text-field> LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0Yn
<Text-field style="Heading 1" layout="Heading 1">4. Lucas-sorozatok</Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">5. Alkalmaz\303\241sok </Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">6. Sz\303\241mok \303\251s polinomok</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">7. Gyors Fourier-transzform\303\241ci\303\263</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">8. Elliptikus f\303\274ggv\303\251nyek</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">9. Sz\303\241mol\303\241s elliptikus g\303\266rb\303\251ken</Font></Text-field> restart;
<Text-field style="Heading 2" layout="Heading 2">9.1. Elliptikus <Font encoding="UTF-8">g\303\266rb\303\251k.</Font></Text-field>
<Text-field style="Heading 2" layout="Heading 2">9.2. Hasse t<Font encoding="UTF-8">\303\251</Font>tele.</Text-field> # # This routine randomly choose an elliptic "curve" modulo n, # where gcd(n,6)=1. The coordinates x,y are choosen # randomly, the parameter a too, and b is calculated. # The list [x,y,a,b] is given back or a divisor d of n. # ellrand:=proc(n) local x,y,a,b,r,d,f; r:=rand(n); d:=0; while d=0 do x:=r(n); y:=r(n); a:=r(n); b:=y^2-x^3-a*x mod n; d:=4*a^3+27*b^2 mod n; gcd(d,n); od; if %<n and %>1 then return % fi; [x,y,a,b]; end; Zio2I0kibkc2IjYpSSJ4R0YlSSJ5R0YlSSJhR0YlSSJiR0YlSSJyR0YlSSJkR0YlSSJmR0YlRiVGJUMnPkYrLUklcmFuZEdGJUYjPkYsIiIhPyhGJSIiIkY1RiUvRixGM0MoPkYnLUYrRiM+RihGOT5GKUY5PkYqLUkkbW9kR0YlNiQsKCokKUYoIiIjRjVGNSokKUYnIiIkRjUhIiIqJkYpRjVGJ0Y1RkdGJD5GLC1GPjYkLCYqJiIiJUY1KUYpRkZGNUY1KiYiI0ZGNSlGKkZDRjVGNUYkLUkkZ2NkR0YlNiRGLEYkQCQzMkkiJUdGJUYkMkY1RllPRlk3JkYnRihGKUYqRiVGJUYl # # This brute force procedure calculate the number of points # on an elliptic curve modulo p>3, a prime. The curve # parameters are a, b. # ellcount:=proc(a,b,p) local x,c; c:=1; for x from 0 to p-1 do c:=c+numtheory[jacobi](x^3+a*x+b,p)+1; od; c; end; Zio2JUkiYUc2IkkiYkdGJUkicEdGJTYkSSJ4R0YlSSJjR0YlRiVGJUMlPkYqIiIiPyhGKSIiIUYtLCZGJ0YtRi0hIiJJJXRydWVHJSpwcm90ZWN0ZWRHPkYqLChGKkYtLSZJKm51bXRoZW9yeUdGJTYjSSdqYWNvYmlHRiU2JCwoKiQpRikiIiRGLUYtKiZGJEYtRilGLUYtRiZGLUYnRi1GLUYtRipGJUYlRiU= ellrand(97); ellcount(%[3],%[4],97); NyYiI2IiI1UiIyMpIiNa IiQxIg==
<Text-field style="Heading 2" layout="Heading 2">9.3. Gyakorlat.</Text-field> with(plots); N2duSSxJbnRlcmFjdGl2ZUc2IkkoYW5pbWF0ZUdGJEkqYW5pbWF0ZTNkR0YkSS1hbmltYXRlY3VydmVHRiRJJmFycm93R0YkSS1jaGFuZ2Vjb29yZHNHSShfc3lzbGliR0YkSSxjb21wbGV4cGxvdEdGJEkuY29tcGxleHBsb3QzZEdGJEkqY29uZm9ybWFsR0YkSSxjb25mb3JtYWwzZEdGJEksY29udG91cnBsb3RHRiRJLmNvbnRvdXJwbG90M2RHRiRJKmNvb3JkcGxvdEdGJEksY29vcmRwbG90M2RHRiRJLWN5bGluZGVycGxvdEdGJEksZGVuc2l0eXBsb3RHRiRJKGRpc3BsYXlHRiRJKmRpc3BsYXkzZEdGJEkqZmllbGRwbG90R0YkSSxmaWVsZHBsb3QzZEdGJEkpZ3JhZHBsb3RHRiRJK2dyYWRwbG90M2RHRiRJLGdyYXBocGxvdDNkR0YkSS1pbXBsaWNpdHBsb3RHRiRJL2ltcGxpY2l0cGxvdDNkR0YkSShpbmVxdWFsR0YkSSxpbnRlcmFjdGl2ZUdGJEkyaW50ZXJhY3RpdmVwYXJhbXNHRiRJLWxpc3Rjb250cGxvdEdGJEkvbGlzdGNvbnRwbG90M2RHRiRJMGxpc3RkZW5zaXR5cGxvdEdGJEkpbGlzdHBsb3RHRiRJK2xpc3RwbG90M2RHRiRJK2xvZ2xvZ3Bsb3RHRiRJKGxvZ3Bsb3RHRiRJK21hdHJpeHBsb3RHRiRJKW11bHRpcGxlR0YkSShvZGVwbG90R0YkSSdwYXJldG9HRiRJLHBsb3Rjb21wYXJlR0YkSSpwb2ludHBsb3RHRiRJLHBvaW50cGxvdDNkR0YkSSpwb2xhcnBsb3RHRiRJLHBvbHlnb25wbG90R0YkSS5wb2x5Z29ucGxvdDNkR0YkSTRwb2x5aGVkcmFfc3VwcG9ydGVkR0YkSS5wb2x5aGVkcmFwbG90R0YkSSdyZXBsb3RHRiRJKnJvb3Rsb2N1c0dGJEksc2VtaWxvZ3Bsb3RHRiRJK3NldG9wdGlvbnNHRiRJLXNldG9wdGlvbnMzZEdGJEkrc3BhY2VjdXJ2ZUdGJEkxc3BhcnNlbWF0cml4cGxvdEdGJEkrc3BoZXJlcGxvdEdGJEkpc3VyZmRhdGFHRiRJKXRleHRwbG90R0YkSSt0ZXh0cGxvdDNkR0YkSSl0dWJlcGxvdEdGJA== implicitplot(y^2=x^3-10*x+10,x=-5..10,y=-20..20,numpoints=10000); NiQtSSdDVVJWRVNHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2Z2dsNyQ3JCQhM0MpKioqKioqKioqKioqXCQhIzwkITMqUihHOWRHa1c5Ri43JCQhM25QU1IpUWtUXyRGLiQhMzsvKysrKysrN0YuNyRGMTckJCEzVUl0aXZVd0hORi4kITM5PHJLKWZHMTciRi43JDckJCEzQEEqPj5kJlFfTkYuJCEzaVUrKysrKyshKSEjPUY3NyRGPTckJCEzWFVnZSZmXiFmTkYuJCEzZSo+c1Z5IUhEa0ZCNyQ3JCQhM3dfYS4jRz0kcE5GLiQhM0tUKysrKysrU0ZCRkQ3JEZKNyQkITMwcT5dImZHP2QkRi4kITNTYXUlKmZ2Qno/RkI3JDckJCEzd0gxdT1EJ1xkJEYuJCEzP3pJNiI+RHk1JSEjS0ZQNyRGVjckJCEzWmheMStUQ3NORi4kIjNzdTQyTiQ0bCM+RkI3JDckRkskIjM7ZioqKioqKioqKioqKlJGQkZnbjckRl1vNyQkITMtPCMpXEZxR2lORi4kIjNPZEMmKipSKCk0bSZGQjckNyRGPiQiM0NlKioqKioqKioqKioqekZCRmFvNyRGZ283JCQhMyNmbTwhZS40V05GLiQiMylRNHIvKUd1diIqRkI3JDckJCEzY1FTUilRa1RfJEYuJCIzJ2YqKioqKioqKioqKio+IkYuRltwNyRGYXA3JCQhMyQ+TkcmNGw3Pk5GLiQiMyYpUiozYS0vNUQiRi43JDckRiwkIjNidEc5ZEdrVzlGLkZncDckNyQkITNKKSoqKioqKioqKioqXExGLiQhM1AzKysrRCJ5VSNGLjckJCEzI1soPnJjJ1JkTiRGLiQhM08vKysrKysrQ0YuNyQ3JEZncSQhMyNSKysrKysrUyNGLjckJCEzUSNmJEd1OXVnTEYuJCEzcCczeCZvZ05yQkYuNyQ3JCQhM2MpM1FmJnllRE1GLiQhMysvKysrKysrP0YuRl9yNyRGZXI3JCQhM1ZyMkA6NDZzTUYuJCEzW3Y3eCMqM1B1O0YuNyQ3JCQhM0lPd2QjUU9GWyRGLiQhMzMvKysrKysrO0YuRltzNyRGYXNGKzckRl1xNyQkITMob3clR2FFbydbJEYuJCIzLzdGNHlxW2s6Ri43JDckJCEzPlB3ZCNRT0ZbJEYuJCIzMycqKioqKioqKioqKipmIkYuRmhzNyRGXnQ3JCQhMzx5cHQ9bzZZTUYuJCIzUVU+ajs6SmM9Ri43JDckJCEzWCozUWYmeWVETUYuJCIzKycqKioqKioqKioqKioqPkYuRmR0NyRGanQ3JCQhM3kiKSopKSlmRmQsTUYuJCIzWl5ScWZ0X1BARi43JDckJCEzcnY+cmMnUmROJEYuJCIzI2YqKioqKioqKioqKipSI0YuRmB1NyRGZnU3JCQhM3Zzdy5VQXFgTEYuJCIzKFt6TGFrcyk0Q0YuNyQ3JEZicSQiMy4yKysrRCJ5VSNGLkZcdjckNyQkITNTKSoqKioqKioqKioqKj4kRi4kITNPMCsrKysrS0lGLjckJCEzSSYpSF1wQHZpS0YuJCEzI1ErKysrKyshR0YuNyQ3JCQhM3YmKUhdcEB2aUtGLkZedzckJCEzKHkqKioqKioqKioqKlxMRi5GZHE3JEZidjckJCEzOSMpWylmIUhKJ0gkRi4kIjMlW29mZlRNb2wjRi43JDckJCEzXygpSF1wQHZpS0YuJCIzJWUqKioqKioqKioqKip6I0YuRmh3NyRGXng3JCQhM0VnJFs9XGNrQiRGLiQiMzdFY2Y2dEAoKkdGLjckNyRGZ3YkIjNPMCsrKysrS0lGLkZkeDckNyQkITMwKSoqKioqKioqKioqXElGLiQhMyd6IyllcTlidlokRi43JCQhM0VlOTgmeXl4OSRGLiQhM3MuKysrKysrS0YuNyRGY3lGZnY3JEZqeDckJCEzRT8lKlEieVk5PCRGLiQiM1U/XnEkM2VRNyRGLjckNyQkITMjNFlKXnl5eDkkRi4kIjNzJioqKioqKioqKioqKj4kRi5Gank3JEZgejckJCEzcnVnJHlFOy81JEYuJCIzSCo+JyozUVZXTCRGLjckNyRGX3kkIjNURyllcTlidlokRi5GZno3JDckJCEzZSkqKioqKioqKioqKioqR0YuJCEzI2VFMEAlb0I8UUYuNyQkITMjKnBAJTQ3OCgqKkhGLiQhMzMvKysrKysrT0YuNyRGZVtsRl55NyRGXFtsNyQkITMlZU5GR3EpKmYtJEYuJCIzWVxIKDNhJypmYCRGLjckNyQkITNbdEAlNDc4KCoqSEYuJCIzayYqKioqKioqKioqKipmJEYuRlxcbDckRmJcbDckJCEzI1JqbHRvTVslSEYuJCIzcWMkM2o7ZiY+UEYuNyQ3JEZhW2wkIjNFbV81VW9CPFFGLkZoXGw3JDckJCEzQikqKioqKioqKioqKlxGRi4kITNhZUc5ZGBxJDMlRi43JCQhM2wkcGgtRTcvIUdGLiQhM2MuKysrKysrU0YuNyQ3JCQhM0AkcGgtRTcvIUdGLkZqXWxGYFtsNyQ3JEZhW2wkIjNxbV81VW9CPFFGLjckJCEzLyMqKSlcInktJWZHRi4kIjNnNlBtXTJ1IipRRi43JDckJCEzYSlwaC1FNy8hR0YuJCIzYyYqKioqKioqKioqKioqUkYuRmRebDckRmpebDckJCEzRnU5akBYTXBGRi4kIjM3a3MsIlImZV5TRi43JDckJCEzbikqKioqKioqKioqKlxGRi4kIjNWZkc5ZGBxJDMlRi5GYF9sNyQ3JEZnX2wkITNWZkc5ZGBxJDMlRi43JCQhM2omSDxrWGJjbyNGLiQhMyp6KFFiXGFlclRGLjckNyQkITN3KSoqKioqKioqKioqKmYjRi4kITMvSTlkRzlkKUclRi5GX2BsNyQ3JCQhMzYqKioqKioqKioqKipcRkYuRmlfbDckJCEzRG5iJHBaaTpuI0YuJCIzNXoiRz1GTDM+JUYuNyQ3JEZmYGwkIjMvSTlkRzlkKUclRi5GXmFsNyQ3JCQhM1MpKioqKioqKioqKipcQ0YuJCEzbWRwM0UuO1pXRi43JCQhM0dccnonKikzdlwjRi4kITMjUisrKysrK1MlRi43JEZdYmxGZWBsNyRGZGFsNyQkITNcTVFHU2pKcURGLiQiM0NDLTR1TiUzSyVGLjckNyQkITNHZHJ6JyopM3ZcI0YuJCIzI2YqKioqKioqKioqKipSJUYuRmRibDckRmpibDckJCEzVSIpKlJfcCgpR1kjRi4kIjNSO21JKD1uVlYlRi43JDckJCEzJSkpKioqKioqKioqKipcQ0YuJCIzbWRwM0UuO1pXRi5GYGNsNyRGaGFsNyQkITM7Tm1IemhORENGLiQhM0x1KjNfJm9ybFdGLjckNyQkITMlKikqKioqKioqKioqKipII0YuJCEzZXVAbCZwMyxjJUYuRlxkbDckNyRGZ2NsJCIzeGNwM0UuO1pXRi43JCQhMy5XYEQ/LCNvTSNGLiQiMzVdVSxhTyZbXyVGLjckNyRGY2RsJCIzcHRAbCZwMyxjJUYuRltlbDckRmJkbDckJCEzKGUxeSkpZU9eQSNGLiQhM1VEPSpId04nKmYlRi43JDckJCEzLSoqKioqKioqKioqKlxARi4kITM2IlI8XzEyJFJZRi5GZWVsNyRGYWVsNyQkITNDWl4jKmYmM1xBI0YuJCIzKTNSKylmaHYqZiVGLjckNyRGXGZsJCIzKyNSPF8xMiRSWUYuRmFmbDckRltmbDckJCEzM2duKD0sQyJbP0YuJCEzLXY+bSwkcDtuJUYuNyQ3JCQhMzcqKioqKioqKioqKioqKj5GLiQhM1lJIlI8X2NwbyVGLkZbZ2w3JEZnZmw3JCQhM3NuPSUpSFc6JzQjRi4kIjMmZWs2SCI9VGNZRi43JDckRmJnbCQiM1lJIlI8X2NwbyVGLkZnZ2w3JEZhZ2w3JCQhMzBEI0dacEpzKT1GLiQhM0xOWnMhWzoycSVGLjckNyQkITM/KioqKioqKioqKioqXD1GLiQhMz44UjxfImVfcSVGLkZhaGw3JEZdaGw3JCQhM1AleiEpKTRNWWY+Ri4kIjNpJHlbalUtPnAlRi43JDckRmhobCQiMz44UjxfImVfcSVGLkZdaWw3JEZnaGw3JCQhM3B3Kj0hPlorUTxGLiQhM2FrZ2gjM2EnKXAlRi43JDckJCEzRyoqKioqKioqKioqKipwIkYuJCEzc2cjeU0vOGtwJUYuRmdpbDckRmNpbDckJCEzR0UnPl1Ub08iPUYuJCIzeG9jUXRkNi5aRi43JDckJCEzXyoqKioqKioqKioqKipwIkYuJCIzZ2gjeU0vOGtwJUYuRmNqbDckRl1qbDckJCEzUz0xRiFvLnZmIkYuJCEzYWAkeSM+Tkt0WUYuNyQ3JCQhM1EqKioqKioqKioqKipcOkYuJCEzUCZwM0VHQUVtJUYuRl9bbTckNyRGXmpsJCIzc2cjeU0vOGtwJUYuNyQkITMkPmdNZWVxdmwiRi4kIjN2TiplYipbJm9vJUYuNyQ3JEZmW20kIjNQJnAzRUdBRW0lRi5GXlxtNyQ3JEZmW20kITNcJXAzRUdBRW0lRi43JCQhM3M8QV4qUTdQWSJGLiQhM00pM01ZSCssaiVGLjckNyQkITNZKioqKioqKioqKioqKlIiRi4kITNoUTxfY3AzMVlGLkZbXW03JEZkXG03JCQhM2w7dUVnTishXCJGLiQiMy5Vay8lXDQrayVGLjckNyRGYl1tJCIzaFE8X2NwMzFZRi5GZ11tNyRGYV1tNyQkITNJPSUpKWVbLl9MIkYuJCEzKFJiKEgvMnpzWEYuNyQ3JCQhM2MqKioqKioqKioqKipcN0YuJCEzaThSPF8iMyFIWEYuRmFebTckNyRGYl1tJCIzXFI8X2NwMzFZRi43JCQhM2QyNypwX0QqNDhGLiQiM2wkKSk0YFMsKWZYRi43JDckRmhebSQiM2k4UjxfIjMhSFhGLkZgX203JEZnXm03JCQhM0EjPVRvJilSNEAiRi4kITMmKVxvdiJRZ1RdJUYuNyQ3JCQhMykpKioqKioqKioqKioqKjQiRi4kITM8UjxfY3BlTFdGLkZqX203JDckRmhebSQiM3Q3UjxfIjMhSFhGLjckJCEzTEh1KHosVGw2IkYuJCIzLlVKRiJRNFRXJUYuNyQ3JCQhM2sqKioqKioqKioqKioqNCJGLiQiM0hRPF9jcGVMV0YuRmlgbTckNyRGYGFtJCEzSFE8X2NwZUxXRi43JCQhM2c4JikqZmxeLDQiRi4kITMmUmpxMURpaVUlRi43JDckJCEzWEs6J28xVFswIkYuRmBibEZoYW03JEZeYm03JCQhMz94VWs3JD5gdSpGQiQhM0MnPkdtXiJlTVZGLjckNyQkITM3JioqKioqKioqKioqKlwqRkIkITN4OGRHOSMpZjlWRi5GYmJtNyQ3JCQhM0EnKioqKioqKioqKioqXCpGQiQiM3g4ZEc5IylmOVZGLjckJCEzLEE6J28xVFswIkYuRl1jbDckRmNjbUZfYW03JEZoYm03JCQhM11cJ1sncCZ5PmkpRkIkITMsJ3AkNFshUlRCJUYuNyQ3JCQhMysnKioqKioqKioqKioqKnpGQiQhMzpjRzlkRzl4VEYuRmhjbTckRl5jbTckJCEzISlvJ1FueHM/LCpGQiQiM0Z2cHp0ZykpcFVGLjckNyRGX2RtJCIzOmNHOWRHOXhURi5GZGRtNyRGXmRtNyQkITNYSmVCZnU6PHZGQiQhMzlaLygzLGUoR1RGLjckNyQkITMhZSoqKioqKioqKioqKlwnRkIkITMpcCZHOWQuJG8tJUYuRl5lbTckRmpkbTckJCEzJEc5JlFBTz1obUZCJCIzOSxGSSpIIylILyVGLjckNyRGZWVtJCIzKXAmRzlkLiRvLSVGLkZqZW03JEZkZW03JCQhM2JbaFdPLUJHa0ZCJCEzIkdPOU9nUSI+U0YuNyQ3JCQhMzxVOz91R2xcaUZCRmpdbEZkZm03JEZqZm03JCQhMyhcOnlDX2pWUSZGQiQhM18lXHMxMS52KlFGLjckNyQkITNjJioqKioqKioqKioqKipcRkIkITNtRDBAJW90PiZRRi5GXmdtNyQ3JEZlZ20kIjNtRDBAJW90PiZRRi43JCQhMzdyOj91R2xcaUZCRl1fbDckRl1obTckJCEzbyUqKioqKioqKioqKipcJ0ZCJCIzNGNHOWQuJG8tJUYuNyRGZGdtNyQkITN2em9UInBNY04lRkIkITN2K2ImKlsyJD14JEYuNyQ3JCQhM00mKioqKioqKioqKioqXCRGQiQhM3BEMEAlPTZhbSRGLkZnaG03JDckRmVnbSQiMzVFMEAlb3Q+JlFGLjckJCEzQjs9NUZ6cGZSRkIkIjM2OVEqUTYnZUFQRi43JDckRl5pbSQiM0REMEAlPTZhbSRGLkZmaW03JEZdaW03JCQhM2ldZU52LFtNTEZCJCEzISozXiEqPidRVGskRi43JDckJCEzcyl5KikqPjwvIipIRkIkITM/LisrKysrK09GLkZgam03JEZmam03JCQhM1I8REtVSSVwTSNGQiQhM1BrMVFiPVsyTkYuNyQ3JCQhMzcmKioqKioqKioqKioqKj5GQiQhMyYpR04jKWVxa2RNRi5GXFtuNyQ3JCQhM1MmKioqKioqKioqKioqKj5GQiQiMyYpR04jKWVxa2RNRi43JCQhMytKKCopKj48LyIqSEZCJCIzPyYqKioqKioqKioqKipmJEYuNyQ3JEZeXG5GZVxsRlxqbTckNyRGaVtuRmVbbjckJCEzWCc+Mz8qbzN3OEZCJCEzJm8ieXpHb1BtTEYuNyQ3JCQhM1thKioqKioqKioqKioqXCEjPiQhMzEwWnc2cEBRS0YuRmZcbjckNyQkITNvJioqKioqKioqKioqKio+RkJGW1xuNyQkITNIT0JGXD9wdSIpRl9dbiQiMyIpZXNrYSVlWUckRi43JDckRl1dbiQiM2gvWnc2cEBRS0YuRmZdbjckRlxdbjckJCEzL25tJ3BQRmcyJUZfXW4kITMhemJaKnAjUllBJEYuNyQ3JCQhM1csaWd1JSpIKlIjRl9dbkZmeUZgXm43JEZmXm43JCQiMyllWCZ6ZC5DTF9GX11uJCEzdDk3YTRrKUcyJEYuNyQ3JCQiM10vKysrKysrNUZCJCEzOyoqKioqKioqKipcJCpIRi5Gal5uNyQ3JEZhX24kIjM7KioqKioqKioqKlwkKkhGLjckJCEzYy5kZ3UlKkgqUiNGX11uRmN6NyQ3JCQhMyNScTBZWipIKlIjRl9dbkZjekZcXm43JEZgX243JCQiM2IvSCZRRz4jWzlGQiQhMzR4Mk9VXl8+SEYuNyQ3JCQiM29LOEMvN1ZzQEZCRl53RmFgbjckRmdgbjckJCIzNnkiZmA9Sk5PI0ZCJCEzUiR5JjQ7JDNPdyNGLjckNyQkIjNXLysrKysrK0RGQiQhM0YicDJCPj93dCNGLkZbYW43JDckRmJhbiQiM3MicDJCPj93dCNGLjckJCIzRXc4Qy83VnNARkJGYXg3JDckRltibiQiM1EmKioqKioqKioqKioqeiNGLkZmX243JEZhYW43JCQiM1FfTChlLXRjQyRGQiQhMyVvKkdCU2glKSlmI0YuNyQ3JCQiMzcvKysrKysrU0ZCJCEzInlgaCVROlllQ0YuRmJibjckRmdhbjckJCIzXlxFOHonPVZGJEZCJCIzK2R6Kik9XV4kZiNGLjckNyQkIjNvLysrKysrK1NGQiQiM09QOllROlllQ0YuRl5jbjckNyRGZWNuJCEzRFE6WVE6WWVDRi43JCQiM3ZoNDVyUjdKVEZCJCEzWSNmJEgjUm1cViNGLjckNyQkIjNoJSkzcHZ4RUVWRkJGXXJGXWRuNyRGY2RuNyQkIjNINU9sXFBbISlcRkIkITNObDRDTEJZaEFGLjckNyQkIjMpWysrKysrK10mRkIkITNvaWpqailbOTojRi5GZ2RuNyQ3JEZeZW4kIjNvaWpqailbOTojRi43JCQiM2VDNHB2eEVFVkZCRml1NyQ3JCQiMy1DNHB2eEVFVkZCRml1NyRGaWJuRmdjbjckRl1lbjckJCIzeVh6a14heVQjZUZCJCEzZ2ElUi9bWmszI0YuNyQ3JCQiM2FsUicpPkpKYmlGQkZockZfZm43JEZlZm43JCQiMylwVi0heTNQVm1GQiQhM11fMSEzISopKlshPkYuNyQ3JCQiMzUwKysrKysrcUZCJCEzLCoqKioqKioqKipcPD1GLkZpZm43JDckJCIzKy8rKysrKytxRkIkIjN5KSoqKioqKioqKlw8PUYuNyQkIjM9LVMnKT5KSmJpRkJGXXU3JEZqZ243JEZeZW4kIjNCaWpqailbOTojRi43JDckRmZnbkZiZ243JCQiMzFpTVxrSTJTdUZCJCEzRmYjKT48R048PEYuNyQ3JCQiM0RrJCpRN0F2YnpGQkZkc0ZjaG43JEZpaG43JCQiMzp4XXNERUU6IylGQiQhMyEqKm9FTi5xU18iRi43JDckJCIzSzArKysrKysmKUZCJCEzMkY5ZEcqZTJXIkYuRl1pbjckNyRGZGluJCIzMkY5ZEcqZTJXIkYuNyQkIjNNJlIqUTdBdmJ6RkJGYXQ3JEZcam43JEZgZ24kIjMsKioqKioqKioqKlw8PUYuNyRGY2luNyQkIjM0Z3BDIzM1RSYqKUZCJCEzV0REJD4tJ3A/OEYuNyQ3JCQiM1tWXFBtb2cyJSpGQkY0RmRqbjckRmpqbjckJCIzdmsuVEtcPmInKkZCJCEzNitoKD4pPjAzNkYuNyQ3JCQiM1crKysrKysrNUYuJCEzUyYpKioqKioqKioqKip6KkZCRl5bbzckNyRGZVtvJCIzJSl6KioqKioqKioqKip6KkZCNyQkIjM3cVxQbW9nMiUqRkJGZHA3JEZdXG9GaWluNyRGZFtvNyQkIjNRXmUoKSkqPk5JNUYuJCEzWi0lKm9PbVE0KSlGQjckNyQkIjNpPkwuJEdeXjAiRi5GQEZiXG83JEZoXG83JCQiMzgkZiFmQUpOJzMiRi4kITNUJD1cZCQqXEZJJ0ZCNyQ3JCQiM1RaeDJGam9HNkYuRk1GXF1vNyRGYl1vNyQkIjNRTnRiPCtvSjZGLiQhM0wzQidbOG45XiRGQjckNyQkIjNPKysrKysrXTZGLiQhM3AmKikqKioqKipcKD1fRl9dbkZmXW83JDckRl1ebyQiM0lbIyoqKioqKlwoPV9GX11uNyQkIjNJW3gyRmpvRzZGLkZebzckRmVebzckJCIzKnkjKUg4TCo9MzZGLiQiMzYkKnlgazYmXDYmRkI3JDckJCIzaUBMLiRHXl4wIkYuJCIzT2YqKioqKioqKioqKip6RkJGaV5vNyQ3JEZgX29GaG83JEZlW28kIjMzIykqKioqKioqKioqKnoqRkI3JDckRl1ebyQhMzMoKikqKioqKipcKD1fRl9dbjckJCIzI3oqUSMqb0Q9YDZGLiQhMyVmMEpQWV1vWykhIz83JDckJCIzKCoqZUtzaitROiJGLkZZRl1gbzckRmRgb0ZiXm83JDckJCIzYyoqKioqKioqKioqKipcI0YuJCEzIylcKioqKioqKioqXCh5RkI3JCQiMzFBZ2k6ZT5SQ0YuRk03JEZeYW83JCQiM25STHpiLU1IQ0YuJCEzSDMiKlthLHU6QEZCNyQ3JCQiMz8rUnRYUkY9Q0YuRllGYmFvNyRGaGFvNyQkIjNWbj1yM3hGR0NGLiQiM2BdLE5NV2Y3PkZCNyQ3JCQiMzxAZ2k6ZT5SQ0YuRl5vRlxibzckRmJibzckJCIzWidIXCp6SDhkQ0YuJCIzY3Ngb00wN1ZeRkI3JDckRmpgbyQiM0MlKSoqKioqKioqKlwoeUZCRmZibzckNyQkIjNaKioqKioqKioqKioqXEVGLiQhM1AlRzlkeV4iUjlGLjckJCIzX2cjcGktV0JlI0YuRjQ3JEZlY283JCQiMzlRY3Bxa0cuREYuJCEzcDMvYj0jUnczKUZCNyQ3JCQiM186ZUFNYl4sREYuJCEzX1QrKysrKyshKUZCRmljbzckRl9kb0ZpYG83JEZcY283JCQiM3QjUUduRFg2XSNGLiQiMzY2a2Q/KWYlcHpGQjckNyQkIjM+OWVBTWJeLERGLkZiX29GZmRvNyQ3JCQiM3U4ZUFNYl4sREYuRmJfbzckJCIzSCY9K2UoKTROYiNGLiQiM0xuaCd5KnBJZDVGLjckNyQkIjN1ZSNwaS1XQmUjRi4kIjNzJioqKioqKioqKioqKj4iRi5GY2VvNyQ3JEZqZW9GZHA3JCQiM2VfZT4oUU85aCNGLiQiMyZSMDYzSU9HSSJGLjckNyRGYWNvJCIzOiVHOWR5XiJSOUYuRmBmbzckNyQkIjNRKioqKioqKioqKioqKnojRi4kITM5a21tbW1tJyk+Ri43JCQiM01IM2hCIW9tbyNGLkZkczckRl9nb0ZgY283JEZmZm83JCQiMyIzXSVwZlohR24jRi4kIjM6RDhbMnQ9UjpGLjckNyQkIjNkRjNoQiFvbW8jRi5GYXRGZGdvNyQ3JEZbaG8kIjNLJyoqKioqKioqKioqKmYiRi43JCQiM2oqUXhVXyhRT0ZGLiQiMyE9aSRmb0tqcDxGLjckNyRGW2dvJCIzUGttbW1tbScpPkYuRmFobzckNyQkIjMlKSkqKioqKioqKioqKlxIRi4kITNTI1E6WSlHSXpDRi43JCQiMytPcDlJOjlBSEYuRl1yNyRGYGlvNyQkIjNUL0JRQyVSYyJHRi4kITNKXWhvSl5xVD9GLjckNyQkIjN4RjFcJnBVSyFHRi5GaHJGZGlvNyRGamlvNyQkIjMlKikqKioqKioqKioqKip6I0YuRl1nbzckNyRGW2dvJCIzOWttbW1tbScpPkYuNyQkIjNyIm93OixuPiFHRi4kIjNHNGJ6Tll2JSo+Ri43JDckJCIzYkQxXCZwVUshR0YuRl11RmVqbzckRltbcDckJCIzS1MrJFFHTSJvR0YuJCIzbT9LWHcmMyQ9QUYuNyQ3JCQiM01McDlJOjlBSEYuRml1Rl9bcDckRmVbcDckJCIzKEctJCoqemdoTkhGLiQiM1IqZj0rN2QkUUNGLjckNyQkIjNIKioqKioqKioqKioqXEhGLiQiM1MjUTpZKUdJekNGLkZpW3A3JDckJCIzPyoqKioqKioqKioqKio0JEYuJCEzQygqKioqKioqKipcZUhGLjckJCIzdjBaMFlbX1hJRi5GXnc3JEZqXHA3JEZgXHBGXmlvNyQ3JEZgXHAkIjMnPlE6WSlHSXpDRi43JCQiM2soSDckXHdCLklGLiQiM2oqPm5eJEguZUVGLjckNyQkIjMzLlowWVtfWElGLkZheEZjXXA3JEZpXXA3JCQiM2BtdiUpemVkcklGLiQiM2I6KVJQbCh6dkdGLjckNyRGZlxwJCIzQygqKioqKioqKipcZUhGLkZdXnA3JDckJCIzNioqKioqKioqKioqKlxLRi4kITNWV3c2JXpaTlYkRi43JCQiMzQ6Ym0hUms6PCRGLkZmeTckRlxfcEZlXHA3JEZjXnA3JCQiM15FOXFxXigqUkpGLiQiM0cqPSd6VyYqUiQ0JEYuNyQ3JCQiM0s4Ym0hUms6PCRGLkZjekZhX3A3JDckJCIzKEdebDFSazo8JEYuRmN6NyQkIjNhcGYrRD5pM0tGLiQiM0wydUpMOk01TEYuNyQ3JEZoXnAkIjNWV3c2JXpaTlYkRi5GXmBwNyQ3JCQiM1kqKioqKioqKioqKioqUiRGLiQhM3B2OmpfNVUzUkYuNyQkIjNBUU9UOWMlKSlIJEYuJCEzay4rKysrKytPRi43JEZdYXA3JEZoXnAkITMqUms8VHpaTlYkRi43JEZkYHA3JCQiMzVEQSZSSS11RiRGLiQiM09FMlkqPUZwXyRGLjckNyQkIjNjTk9UOWMlKSlIJEYuRmBcbkZnYXA3JDckJCIzN05PVDljJSkpSCRGLkZgXG43JCQiMyJ6YSpcIVtSZ00kRi4kIjMkWyd5bT1aKlF1JEYuNyQ3JEZpYHAkIjM4dzpqXzVVM1JGLkZkYnA3JDckJCIzJCopKioqKioqKioqKipcTkYuJCEzNWBHOWQuZSZRJUYuNyQkIjNXXm5wdD5gRU1GLkZqXWw3JEZjY3A3JEZpYHAkITM4dzpqXzVVM1JGLjckNyQkIjMtKioqKioqKioqKioqKlIkRi5GW2NwNyQkIjNXI1J6LCxvXFQkRi4kIjMueiMpPTFgM2dSRi43JDckJCIzeVtucHQ+YEVNRi5GXV9sRl5kcDckRmRkcDckJCIzRmt5JHksLE1bJEYuJCIzKylvbGRHKGZ4VEYuNyQ3JCQiM1wpKioqKioqKioqKipcTkYuJCIzKlImRzlkLmUmUSVGLkZoZHA3JDckJCIzJSkpKioqKioqKioqKioqcCRGLiQhM1MnKioqKioqKioqSGhbRi43JCQiM3MqbzJYOXAiek9GLiQhM0cvKysrKysrW0YuNyRGaWVwNyQkIjM+I2VzMSYpW1pkJEYuJCEzKkcqbzdOcCpmWSVGLjckNyQkIjM+blYiei87VGIkRi5GYGJsRl9mcDckRmVmcEZeY3A3JDckRl9jcEZhZXA3JCQiM1BnY3R6cUxfTkYuJCIzIVtjcnR5blBSJUYuNyQ3JCQiMyhcTzl6LztUYiRGLkZdY2xGW2dwNyRGYWdwNyQkIjNbSik0aEhVL2kkRi4kIjNBVS8veFE6N1lGLjckNyQkIjMxKG8yWDlwInpPRi4kIjNHJyoqKioqKioqKioqKnolRi5GZWdwNyRGW2hwNyQkIjNvJEdwdSU+MipvJEYuJCIzImVCOk1aVCJIW0YuNyQ3JEZlZXAkIjNTJyoqKioqKioqKkhoW0YuRmFocDckNyQkIjN2KSoqKioqKioqKioqXFFGLiQhM2ppbW1tVE5UYEYuNyQkIjNRLmoiKW9oUi5RRi4kITNnLysrKysrK19GLjckRmBpcDckRmVlcCQhM0goKioqKioqKioqSGhbRi43JEZnaHA3JCQiM19nKCoqSCwoKnB2JEYuJCIzemxSTGx6K1tdRi43JDckJCIzcytqIilvaFIuUUYuJCIzaScqKioqKioqKioqKio+JkYuRmppcDckNyQkIjNGK2oiKW9oUi5RRi5GY2pwNyQkIjNfdFxDOys/RFFGLiQiMzkpUjgrSExoRSZGLjckNyRGXGlwJCIzamltbW1UTlRgRi5GaWpwNyQ3JCQiM0MpKioqKioqKioqKioqKlJGLiQhMzBbbCpvPydlRmVGLjckJCIzTVhcTEJyNkZSRi4kITMnXCsrKysrK2cmRi43JDckJCIzKlslXExCcjZGUkYuRltccUZbaXA3JEZfW3E3JCQiMyUpXGc9SCwnSCpRRi4kIjNbZ1FdYidSYVsmRi43JDckJCIzblVcTEJyNkZSRi4kIjMpcCoqKioqKioqKioqKmYmRi5GYlxxNyRGaFxxNyQkIjNWaiE0JlslKW9nUkYuJCIzKVIjZShSITMkW3EmRi43JDckRmRbcSQiMztabCpvPydlRmVGLkZeXXE3JDckJCIzZSkqKioqKioqKioqKlxURi4kITMkNCQ+dW5NVj9qRi43JCQiMyMqPSllUidHQV1TRi4kITNLMCsrKysrK2dGLjckRl1ecTckJCIzbykqKioqKioqKioqKioqUkYuRmZbcTckRmRdcTckJCIzcTsmKW8/aUVHU0YuJCIzKyNHKFw2TWlDZkYuNyQ3JCQiM0U7KWVSJ0dBXVNGLiQiM00oKioqKioqKioqKioqKmZGLkZnXnE3JDckJCIzOTwpZVInR0FdU0YuJCIzQykqKioqKioqKioqKioqZkYuNyQkIjMzUngoNFcoWyY0JUYuJCIzJ29OZlMjb09YaEYuNyQ3JEZpXXEkIjMkNCQ+dW5NVj9qRi5GaF9xNyQ3JCQiMyUqKSoqKioqKioqKioqKkglRi4kITNvQzlkRzkyPm9GLjckJCIzO1JBaHIsKFFIJUYuJCEzLzErKysrKytvRi43JEZnYHE3JCQiM1h5RktaRTBvVUYuJCEzJyo9dV9mcSFbcidGLjckNyQkIjNsN0JRJDReRTwlRi4kITNvMCsrKysrK2tGLkZdYXE3JEZjYXE3JEZpXXEkITMjPSQ+dW5NVj9qRi43JDckRmldcSQiMyM9JD51bk1WP2pGLjckJCIzPD0taGZoKEc7JUYuJCIzS1lGUHVObWxqRi43JDckJCIzKio0QlEkNF5FPCVGLiQiM28oKioqKioqKioqKioqUidGLkZgYnE3JEZmYnE3JCQiMzgkNDhEaG8mSFVGLiQiM0c3JSlITHEieWUnRi43JDckJCIzXU9BaHIsKFFIJUYuJCIzLykqKioqKioqKioqKip6J0YuRlxjcTckRmJjcTckJCIzay0hcF5EKnAnSCVGLiQiMyh5KWZAJyk+ISkzb0YuNyQ3JEZjYHEkIjNvQzlkRzkyPm9GLkZoY3E3JDckJCIzSCoqKioqKioqKioqKlxXRi4kITMwI3kkeSRHWS5LKEYuNyQkIjNJa1hFNmBXN1dGLiQhM0cyKysrKysrc0YuNyQ3JCQiM1RqWEU2YFc3V0YuJCEzUzErKysrKytzRi5GYmBxNyRGXmRxNyQkIjNyLFsvNiM9SE8lRi4kIjMvQzApUTU9QS4oRi43JDckJCIzamhYRTZgVzdXRi4kIjNTKSoqKioqKioqKioqKj4oRi5GY2VxNyQ3JCQiM3VnWEU2YFc3V0YuRlxmcTckJCIzJD0lbylSTy0mSFdGLiQiM19fPHFpLm1hc0YuNyQ3JEZjZHEkIjMwI3kkeSRHWS5LKEYuRmJmcTckNyQkIjNrKioqKioqKioqKioqKmYlRi4kITN4bzJCcDJCSHlGLjckJCIzSkhdJHkoPlpJWEYuJCEzdzErKysrKyt3Ri43JDckJCIzVUddJHkoPlpJWEYuRmRncTckRmNkcSQhMzsieSR5JEdZLksoRi43JDckRmNkcSQiMyVIeSR5JEdZLksoRi43JCQiM10hcFRjZktiXCVGLiQiMzwqW2JcdXomeXVGLjckNyQkIjN2RF0keSg+WklYRi4kIjN3KSoqKioqKioqKioqKmYoRi5GYWhxNyQ3JEZoaHEkIjNrKioqKioqKioqKioqKmYoRi43JCQiMz9kVHo+PWNoWEYuJCIzP1ZBKVEiPV0teEYuNyQ3JEZdZ3EkIjMrbjJCcDJCSHlGLkZgaXE3JDckJCIzKysrKysrK11aRi4kITNzbGBlT2clZU0pRi43JCQiM2F3JCo0enQkemslRi4kITM3MisrKysrKyEpRi43JEZfanFGXGdxNyQ3JEZdZ3EkIjMpeXdJI3AyQkh5Ri43JCQiM1t4XnZqXlRGWUYuJCIzN2ZHbCcqRypvI3pGLjckNyQkIjN4dSQqNHp0JHprJUYuJCIzQykqKioqKioqKioqKioqekYuRmlqcTckNyQkIjMpUVAqNHp0JHprJUYuRmJbcjckJCIzZyJbWl54JSlHcCVGLiQiMygpeUxGbXNJXyIpRi43JDckRltqcSQiM3NsYGVPZyVlTSlGLkZoW3I3JDckJCIzTysrKysrKytcRi4kITN2bm1tbW07bikpRi43JCQiMyhvZDlcbCl6eltGLiQhMyN5KysrKysrISkpRi43JEZnXHI3JCQiMyhmcUAhb1dfOFtGLiQhMyxAN1IiZSlScCYpRi43JDckJCIzI3BHaDYhKVJbdyVGLiQhM1kyKysrKysrJSlGLkZdXXI3JEZjXXJGamlxNyRGXlxyNyQkIjN0czdVQFVkZVpGLiQiM15wS2E0YTh4JClGLjckNyQkIjNEJUdoNiEpUlt3JUYuJCIzZSkqKioqKioqKioqKipSKUYuRmpdcjckRmBecjckJCIzOi5SRVlCW0JbRi4kIjM3ImZIbTJaU2cpRi43JDckJCIzS3RYIlxsKXp6W0YuJCIzOygqKioqKioqKioqKip6KUYuRmZecjckNyQkIjM/dVgiXGwpenpbRi4kIjMlKikqKioqKioqKioqKip6KUYuNyQkIjMuLVFCRSgqeSkpW0YuJCIzUUdsUGpTKilIKSlGLjckNyRGY1xyJCIzdm5tbW1tO24pKUYuRmdfcjckNyQkIjNyKysrKysrXV1GLiQhM2UjKUhRMUUtJVIqRi43JCQiMytmNCJHRE1LKlxGLiQhMzszKysrKysrIypGLjckRmZgckZiXHI3JDckJCIzWSoqKioqKioqKioqKioqW0YuRl5gcjckJCIzJCozUCM9UG9MJlxGLiQiM15VTSE9TSVvZCEqRi43JDckJCIzWWI0IkdETUsqXEYuJCIzRyoqKioqKioqKioqKio+KkYuRmBhcjckRmZhcjckJCIzS3FZKzZFNj1dRi4kIjNxIykzS1BJLiZHKkYuNyQ3JEZiYHIkIjMhMylIUTFFLSVSKkYuRlxicjckNyQkIjMxLCsrKysrK19GLiQhM2hSbiQ9ZnoqRyoqRi43JCQiMzFlMj92Q0cxXkYuJCEzXzMrKysrKysnKkYuNyRGW2NyNyRGYmByJCEzITMpSFExRS0lUipGLjckNyRGYmByJCIzZSMpSFExRS0lUipGLjckJCIzNiRlX0NfZUQzJkYuJCIzJCp6KGZNRnhKXipGLjckNyQkIjNTYjI/dkNHMV5GLiQiM2sqKioqKioqKioqKioqZipGLkZoY3I3JDckJCIzSGMyP3ZDRzFeRi5GYWRyNyQkIjM4bSUpKXk9VG45JkYuJCIzLyI0ayopXEI/dSpGLjckNyRGZ2JyJCIzaFJuJD1meipHKipGLkZnZHI3JDckJCIzVSwrKysrK11gRi4kITMqZjJLNnROcC8iISM7NyQkIjMkb0kwUDghKipIYEYuJCEzdisrKysrK1M1RmZlcjckNyRGaGVyJCEzIzQrKysrKysvIkZmZXI3JCQiMzowVChvVFlIRiZGLiQhM1AmNEx5UF8lPjVGZmVyNyQ3JCQiMzlgaiJlR1YqPV9GLiQhMykzKysrKysrKyJGZmVyRmBmcjckRmZmcjckRmdiciQhMyV5dE89ZnoqRyoqRi43JEZdZXI3JCQiM29JRCdlbHA1QCZGLiQiMyYpPioqcDw0W3EqKkYuNyQ3JCQiM09eaiJlR1YqPV9GLiQiIzUiIiFGYGdyNyRGZmdyNyQkIjMnXHVmamMkcHVfRi4kIjMlPVNQY3IiMz81RmZlcjckNyQkIjM8L2BxTCwqKkhgRi4kIjMvKysrKysrUzVGZmVyRl1ocjckRmNocjckJCIzLEklei8hM3BRYEYuJCIzRT4pUWx5OkkvIkZmZXI3JDckRmJlciQiMypmMks2dE5wLyJGZmVyRmlocjckNyQkIjN5LCsrKysrK2JGLiQhMy1HRkZGRl8sNkZmZXI3JCQiM0olKVxqRmJfUmFGLiQhMyc0KysrKysrMyJGZmVyNyRGaGlyRmFlcjckRl9pcjckJCIzZjdMKFJIKSk+UyZGLiQiM0pdLyVcWE9oMSJGZmVyNyQ3JCQiM2EjKVxqRmJfUmFGLiQiMzIrKysrKyshMyJGZmVyRl9qcjckRmVqcjckJCIzcXEnKSlRIipHYVkmRi4kIjM6YmpIYyo9IyozIkZmZXI3JDckRmRpciQiMy1HRkZGRl8sNkZmZXJGW1tzNyQ3JCQiMzgtKysrKytdY0YuJCEzIkclb3RXIlJwOiJGZmVyNyQkIjNvaVM/JkhJKVtiRi4kITMqNCsrKysrKzciRmZlcjckRmpbc0ZjaXI3JEZhW3M3JCQiMyVHXWpaMlcnR2JGLiQiM25tSTEhZWhCNiJGZmVyNyQ3JCQiMyE0MS9fSEkpW2JGLiQiMzYrKysrKys/NkZmZXJGYVxzNyRGZ1xzNyQkIjNTJVxecUlLOmYmRi4kIjN5b2l5JVEiZk42RmZlcjckNyRGZltzJCIzKUglb3RXIlJwOiJGZmVyRl1dczckNyQkIjNbLSsrKysrK2VGLiQhMyVvbGckKTRhRkAiRmZlcjckJCIzUF50Jip5JXBadyZGLiQhMzMsKysrKysrN0ZmZXI3JEZcXnM3JCQiM2hYUzomSHd1biZGLiQhMzd6NS83cUtuNkZmZXI3JDckJCIzenE6QlkwIXpsJkYuJCEzLiwrKysrK2c2RmZlckZiXnM3JEZoXnNGZVtzNyRGY11zNyQkIjM1TWFaaiZ6WWwmRi4kIjNjXmxTO0B2ZTZGZmVyNyQ3JCQiMy1wOkJZMCF6bCZGLiQiMzkrKysrKytnNkZmZXJGX19zNyRGZV9zNyQkIjMlKj1FJG9EP3FyJkYuJCIzQy04Xkp6NyM9IkZmZXI3JDckJCIzclt0Jip5JXBadyZGLiQiMz0rKysrKysrN0ZmZXJGW2BzNyRGYWBzNyQkIjNEVTApejA4KHpkRi4kIjNlKj0wNyYpNGE/IkZmZXI3JDckRmhdcyQiM21jMU8pNGFGQCJGZmVyRmdgczckNyQkIjMlRysrKysrKyZmRi4kITNhNVFfZl1JcDdGZmVyNyQkIjN4bTtLLjwxcmVGLiQhMzUsKysrKytTN0ZmZXI3JEZmYXNGZ11zNyRGXWFzNyQkIjNSYDR3MTwiPiVlRi4kIjNfWVAnW2FCKUc3RmZlcjckNyQkIjMqXG1ATHFoNShlRi4kIjNAKysrKysrUzdGZmVyRl1iczckRmNiczckJCIzUyJbUCtmZ1MhZkYuJCIzS1JMSzQwRF83RmZlcjckNyRGYmFzJCIzYTVRX2ZdSXA3RmZlckZpYnM3JDckJCIzPy4rKysrKytoRi4kITNgPG5sb2lcRThGZmVyNyQkIjNNbmUiW3AoUiMzJ0YuJCEzTiwrKysrKz84RmZlcjckNyRGaWNzJCEzPCwrKysrKz84RmZlcjckJCIzcjBJcGE1OFRnRi4kITM5LVtlOTtJLzhGZmVyNyQ3JCQiM0UiM0BaJSpbcyhmRi4kITM5LCsrKysrIUciRmZlckZhZHM3JEZnZHNGYWFzNyRGX2NzNyQkIjM7WHRcJj1EaSdmRi4kIjNkdnQnUUd0Y0YiRmZlcjckNyQkIjNyeDVzVypbcyhmRi4kIjNEKysrKysrIUciRmZlckZeZXM3JDckRmVlcyQiMzIrKysrKyshRyJGZmVyNyQkIjNKaWQjR2ZOeS0nRi4kIjMzSkoiPiVRQypIIkZmZXI3JDckJCIzemplIltwKFIjMydGLiQiMzYrKysrKys/OEZmZXJGXWZzNyQ3JEZkZnMkIjNHKysrKysrPzhGZmVyNyQkIjNXIVxiWUoieSozJ0YuJCIzJ3BgZUYpXHNBOEZmZXI3JDckRmRjcyQiM3E8bmxvaVxFOEZmZXJGXGdzNyQ3JCQiM2MuKysrKytdaUYuJCEzdXpNL2pePyVRIkZmZXI3JCQiM2FhLnExeSsnPSdGLiQhM0AsKysrKytnOEZmZXI3JEZbaHM3JEZkY3MkITNxPG5sb2lcRThGZmVyNyRGYmdzNyQkIjMxZW8iKVxrMF5oRi4kIjNkMGJyWVxRWThGZmVyNyQ3JCQiM3hfLnExeSsnPSdGLiQiM10rKysrKytnOEZmZXJGZWhzNyQ3JEZcaXMkIjNLKysrKysrZzhGZmVyNyQkIjMqSHhSPCh5WTdpRi4kIjNeaGdgbiYzK1AiRmZlcjckNyRGZ2dzJCIzY3pNL2pePyVRIkZmZXJGZGlzNyQ3JCQiMyNSKysrKysrUydGLiQhMyozJm9dSlxvVTlGZmVyNyQkIjNvTGUjWz11R1InRi4kITM1LCsrKysrUzlGZmVyNyQ3JEZkanMkITNHLCsrKysrUzlGZmVyNyQkIjMxLHlrTmM4eGpGLiQhMz5aRjxPRyFSViJGZmVyNyQ3JCQiMyg+NytzZEEnKkcnRi4kITNDLCsrKysrKzlGZmVyRlxbdDckRmJbdEZmZ3M3JDckRmdncyQiM3V6TS9qXj8lUSJGZmVyNyQkIjMjcEU8Sic0dXRpRi4kIjNTaj9ddyFwT1IiRmZlcjckNyQkIjNJPiw/eERpKkcnRi4kIjNPKysrKysrKzlGZmVyRlxcdDckRmJcdDckJCIzVExmZWNRaU1qRi4kIjNzX1BDUU9WPDlGZmVyNyQ3JCQiMyM+JGUjWz11R1InRi4kIjNkKysrKysrUzlGZmVyRmhcdDckNyRGX110JCIzUisrKysrK1M5RmZlcjckJCIzWTcyR0Z0I2VSJ0YuJCIzc1deczdGNlQ5RmZlcjckNyRGX2pzJCIzKjMmb11KXG9VOUZmZXJGZ110NyQ3JCQiM0UvKysrKytdbEYuJCEzciwrK103ZCw6RmZlcjckJCIzKW8vPmdbMlRcJ0YuJCEzOSwrKysrKyFbIkZmZXI3JDckRmdedCQhM0osKysrKyshWyJGZmVyRl5qczckNyRGX2pzJCIzcl1vXUpcb1U5RmZlcjckJCIzJXl0U0FxbWlYJ0YuJCIzL1EicGdhJipcWSJGZmVyNyQ3JCQiMzNYIT5nWzJUXCdGLiQiM1YrKysrKyshWyJGZmVyRmNfdDckRmlfdDckJCIzLiF6LTQ1WXBeJ0YuJCIzJjRmIzR0ViIpKVsiRmZlcjckNyRGYl50JCIzciwrK103ZCw6RmZlckZfYHQ3JDckJCIzZy8rKysrKytuRi4kITM1KXBia0p2N2MiRmZlcjckJCIzRy8rOW16bydwJ0YuJCEzQCwrKysrK2c6RmZlcjckNyRGX2F0JCEzUiwrKysrK2c6RmZlcjckJCIzMV1xXWopMykqbydGLiQhMzwhKT1nakJHZDpGZmVyNyQ3JCQiMzc5L3AyblYmZidGLiQhM04sKysrKys/OkZmZXJGZ2F0NyRGXWJ0RmFedDckRmVgdDckJCIzdlY8Im8+OHVkJ0YuJCIzYU9OPTkpKm83OkZmZXI3JDckJCIzTzcvcDJuViZmJ0YuJCIzWSsrKysrKz86RmZlckZkYnQ3JEZqYnQ3JCQiMyI0Pz5sWXV2aidGLiQiM3M5I0cqM29rTzpGZmVyNyQ3JCQiM10tKzltem8ncCdGLiQiM10rKysrKytnOkZmZXJGYGN0NyRGZmN0NyQkIjNPL28lKmVKLylwJ0YuJCIzJVEmM0dDPV9nOkZmZXI3JDckRmpgdCQiMyR6cGJrSnY3YyJGZmVyRlxkdDckNyQkIjMoXCsrKysrKyZvRi4kITMiZTJ1U0tiOGkiRmZlcjckJCIzZzxxUEYwI2V6J0YuJCEzVSwrKysrKys7RmZlcjckRltldDckRmpgdCQhMyR6cGJrSnY3YyJGZmVyNyRGYmR0NyQkIjM0KSp5bUsoR3h2J0YuJCIzKT5jKUdyY2clZSJGZmVyNyQ3JCQiMyNcLHh0Xz9leidGLiQiM08rKysrKysrO0ZmZXJGZWV0NyRGW2Z0NyQkIjNeM112dFFvPG9GLiQiM3ZLYG1Md2gzO0ZmZXI3JDckRmdkdCQiMyJlMnVTS2I4aSJGZmVyRmFmdDckNyQkIjNLMCsrKysrK3FGLiQhMytcdzYlSE5BbyJGZmVyNyQkIjMrd1dhY0hLJSpwRi4kITM5LCsrKysrIW8iRmZlcjckRmBndDckJCIzKDNHajVYUEspcEYuJCEzPTMtJnApKkhibiJGZmVyNyQ3JCQiM3duSiY+NENeKm9GLiQhM0csKysrKytTO0ZmZXJGZmd0NyRGXGh0RmZkdDckRmdmdDckJCIzKkckeW5gWFV4b0YuJCIzeDdmbyZ5J29LO0ZmZXI3JDckJCIzK21KJj40Q14qb0YuJCIzQCsrKysrK1M7RmZlckZjaHQ3JEZpaHQ3JCQiMy47JHkkZkAobyRwRi4kIjNZXUMkMzRNb2wiRmZlcjckNyQkIjNNdFdhY0hLJSpwRi4kIjMyKysrKysrIW8iRmZlckZfaXQ3JEZlaXQ3JCQiM2FtViQpKkc6bSpwRi4kIjMqUl14JCplLTRvIkZmZXI3JDckRlxndCQiM09cdzYlSE5BbyJGZmVyRltqdDckNyQkIjNwMCsrKysrXXJGLiQhM2VaLkpIRV9WPEZmZXI3JCQiM29FJHonPjlnIjQoRi4kITMqNCsrKysrK3MiRmZlcjckNyQkIjN5RCR6Jz45ZyI0KEYuRl1bdUZbZ3Q3JEZhanQ3JCQiM3VvdTRWSmlicUYuJCIzWncxJT07bl5xIkZmZXI3JDckJCIzN0Ikeic+OWciNChGLiQiMyQqKioqKioqKioqKioqPjxGZmVyRmRbdTckRmpbdTckJCIzJ2UnKlJBTWpbNihGLiQiM0x4RVN2KHAkSDxGZmVyNyQ3JEZmanQkIjNCWi5KSEVfVjxGZmVyRmBcdTckNyQkIjMvMSsrKysrK3RGLiQhM082N3ozN2EwPUZmZXI3JCQiM3ljPkN4QEMnRyhGLiQhM3MrKysrKysrPUZmZXI3JEZfXXU3JCQiMyRwYTRrJnAnNEUoRi4kITNfeWVQKT0iZip5IkZmZXI3JDckJCIzZUspKSlcMzciKj0oRi4kITMmMysrKysrK3ciRmZlckZlXXU3JDckJCIzcEopKSlcMzciKj0oRi5GXl51NyQkIjMhWysrKysrKzooRi4kITNCWi5KSEVfVjxGZmVyNyRGZlx1NyQkIjNLQVlKPDgmUjwoRi4kIjNCTiVcPylIaGA8RmZlcjckNyQkIjMiKkgpKSlcMzciKj0oRi4kIjN6KioqKioqKioqKioqZjxGZmVyRmpedTckRmBfdTckJCIzTyEzXyo0WXBLc0YuJCIzJil6RiwvIlt6eCJGZmVyNyQ3JCQiMyplJj5DeEBDJ0coRi4kIiM9RltockZmX3U3JDckJCIzK2I+Q3hAQydHKEYuJCIzayoqKioqKioqKioqKip6IkZmZXI3JCQiM2EnUioqSGJBPEgoRi4kIjMxaSw/PnQ/LT1GZmVyNyQ3JEZbXXUkIjNPNjd6MzdhMD1GZmVyRmdgdTckNyQkIjNSMSsrKysrXXVGLiQhMyUzRUshenQvbz1GZmVyNyQkIjNbIlImUiVSJik9UShGLiQhM2QrKysrKytTPUZmZXI3JEZmYXVGalx1NyRGXWF1NyQkIjNOaTdcWUk3XXRGLiQiMyV6KipvVSZRakU9RmZlcjckNyQkIjNyKlEmUiVSJik9UShGLiQiM10qKioqKioqKioqKipSPUZmZXJGXWJ1NyRGY2J1NyQkIjN1Syh6aGxlJzN1Ri4kIjNncz9OZVYtXj1GZmVyNyQ3JEZiYXUkIjMlM0VLIXp0L289RmZlckZpYnU3JDckJCIzdzErKysrKyt3Ri4kITNraD50ZF88Sj5GZmVyNyQkIjNKXDoiUTMhKUdkKEYuJCEzRysrKysrKz8+RmZlcjckRmhjdTckJCIzV1wjb1FlVWZfKEYuJCEzWCk+KXBiOEQrPkZmZXI3JDckJCIzZW1aInBFNXlaKEYuJCEzVisrKysrKyEpPUZmZXJGXmR1NyRGZGR1RmFhdTckRl9jdTckJCIzNVgzUS8/O251Ri4kIjNEVSUpXGxNVXY9RmZlcjckNyQkIjMjUnc5cEU1eVooRi4kIjNPKioqKioqKioqKioqej1GZmVyRltldTckNyQkIjMiW3c5cEU1eVooRi5GZGV1NyQkIjMlSGNcO0Y2X18oRi4kIjNjXU0qM21WKioqPUZmZXI3JDckJCIzbFk6IlEzISlHZChGLiQiM0EqKioqKioqKioqKio+PkZmZXJGamV1NyRGYGZ1NyQkIjMzOyQqPW5eYCRlKEYuJCIzSV1HM0ExUkM+RmZlcjckNyRGZGN1JCIza2g+dGRfPEo+RmZlckZmZnU3JDckJCIzNjIrKysrK114Ri4kITNzIXp5eS41XCo+RmZlcjckJCIzOkQjKW9GOjNud0YuJCEzOSsrKysrK2c+RmZlcjckRmVndUZjY3U3JEZcZ3U3JCQiM2BoZVRAS1JUd0YuJCIzO1FDaTI9JypbPkZmZXI3JDckJCIzZkAjKW9GOjNud0YuJCIzMyoqKioqKioqKioqKmY+RmZlckZcaHU3JDckRmNodSQiM3MpKioqKioqKioqKipmPkZmZXI3JCQiMyFRRChwIkdOIypwKEYuJCIzam1TQGVzYHQ+RmZlcjckNyRGYWd1JCIzMyJ6eXkuNVwqPkZmZXJGW2l1NyQ3JCQiM2dzc3REVWdoeEYuJEZiYG9GW2hyNyRGYWd1JCEzMyJ6eXkuNVwqPkZmZXI3JEZhaXU3JCQiM2l1dDFubkBkeEYuJCIzL00/eUdiMikqPkZmZXI3JDckJCIzJSpwc3REVWdoeEYuJCIzIyopKioqKioqKioqKioqKj5GZmVyRl1qdS1JJ0NPTE9VUkdGJTYmSSRSR0JHRigiIiJGW2hyRltoci1JK0FYRVNMQUJFTFNHRiU2JEkieEdGKEkieUdGKA==
<Text-field style="Heading 2" layout="Heading 2">9.4. Gyakorlat.</Text-field> # # Addition on an elliptic "curve" modulo n, where gcd(n,6)=1. # P and Q are the points to add and a,b are the parameters. # The return value is the sum of the points or a divisor d of n. # elladd:=proc(P,Q,a,b,n) local l,d; if P[3]=0 then return Q fi; if Q[3]=0 then return P fi; if P=Q then return elldou(P,a,b,n) fi; if P[1]=Q[1] then return [0,1,0] fi; d:=igcdex(P[1]-Q[1],n,'l'); if 1<d and d<n then return d fi; l:=(P[2]-Q[2])*l mod n; l^2-P[1]-Q[1] mod n; [%,l*(P[1]-%)-P[2] mod n,1]; end; Zio2J0kiUEc2IkkiUUdGJUkiYUdGJUkiYkdGJUkibkdGJTYkSSJsR0YlSSJkR0YlRiVGJUMrQCQvJkYkNiMiIiQiIiFPRiZAJC8mRiZGMUYzT0YkQCQvRiRGJk8tSSdlbGxkb3VHRiU2JkYkRidGKEYpQCQvJkYkNiMiIiImRiZGQk83JUYzRkNGMz5GLC1JJ2lnY2RleEdGJTYlLCZGQUZDRkQhIiJGKS5GK0AkMzJGQ0YsMkYsRilPRiw+RistSSRtb2RHRiU2JComLCYmRiQ2IyIiI0ZDJkYmRlpGTEZDRitGQ0YpLUZVNiQsKCokKUYrRmVuRkNGQ0ZBRkxGREZMRik3JUkiJUdGJS1GVTYkLCYqJkYrRkMsJkZBRkNGXW9GTEZDRkNGWUZMRilGQ0YlRiVGJQ== # # Doubling on an elliptic "curve" modulo n, where gcd(n,6)=1. # P is the point to double and a, b are the parameters. # The return value is the double of the point P or # a divisor d of n. # elldou:=proc(P,a,b,n) local l,d; if P[3]=0 then return P fi; if P[2]=0 then return [0,1,0] fi; d:=igcdex(2*P[2],n,'l'); if 1<d and d<n then return d fi; l:=(3*P[1]^2+a)*l mod n; l^2-2*P[1] mod n; [%,l*(P[1]-%)-P[2] mod n,1]; end; Zio2JkkiUEc2IkkiYUdGJUkiYkdGJUkibkdGJTYkSSJsR0YlSSJkR0YlRiVGJUMpQCQvJkYkNiMiIiQiIiFPRiRAJC8mRiQ2IyIiI0YyTzclRjIiIiJGMj5GKy1JJ2lnY2RleEdGJTYlLCQqJkY4RjtGNkY7RjtGKC5GKkAkMzJGO0YrMkYrRihPRis+RiotSSRtb2RHRiU2JComLCYqJkYxRjspJkYkNiNGO0Y4RjtGO0YmRjtGO0YqRjtGKC1GSjYkLCYqJClGKkY4RjtGOyomRjhGO0ZQRjshIiJGKDclSSIlR0YlLUZKNiQsJiomRipGOywmRlBGO0ZaRlhGO0Y7RjZGWEYoRjtGJUYlRiU= # # This program compute k*P, k>=0 or a divisor of n # on an elliptic "curve" modulo n, where gcd(n,6)=1. # It use the left-to-right binary method. # ellmul:=proc(P,k,a,b,n) local L,i,Q; if k=0 then return [0,1,0] fi; if P[3]=0 then return P fi; L:=convert(k,base,2); Q:=P; for i from nops(L)-1 to 1 by -1 do Q:=elldou(Q,a,b,n); if type(Q,integer) then return Q fi; if L[i]=1 then Q:=elladd(P,Q,a,b,n); if type(Q,integer) then return Q fi; fi; od; Q; end; Zio2J0kiUEc2Ikkia0dGJUkiYUdGJUkiYkdGJUkibkdGJTYlSSJMR0YlSSJpR0YlSSJRR0YlRiVGJUMoQCQvRiYiIiFPNyVGMSIiIkYxQCQvJkYkNiMiIiRGMU9GJD5GKy1JKGNvbnZlcnRHJSpwcm90ZWN0ZWRHNiVGJkklYmFzZUdGJSIiIz5GLUYkPyhGLCwmLUklbm9wc0dGPjYjRitGNEY0ISIiRkhGNEkldHJ1ZUdGPkMlPkYtLUknZWxsZG91R0YlNiZGLUYnRihGKUAkLUkldHlwZUdGPjYkRi1JKGludGVnZXJHRj5PRi1AJC8mRis2I0YsRjRDJD5GLS1JJ2VsbGFkZEdGJTYnRiRGLUYnRihGKUZPRi1GJUYlRiU=
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">10. Faktoriz\303\241l\303\241s elliptikus g\303\266rb\303\251kkel</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">11. Pr\303\255mteszt elliptikus g\303\266rb\303\251kkel</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">12. Polinomfaktoriz\303\241l\303\241s</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1">13. Az AKS-teszt</Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">14. A szita m\303\263dszerek alapjai</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">15. Sz\303\241mtest szita</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1">16. Vegyes probl<Font encoding="UTF-8">\303\251</Font>m<Font encoding="UTF-8">\303\241</Font>k</Text-field>
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0Yn