π
<-

News 2024
August (1)
July (1)
June (4)
April (2)

News 2023
August (2)
July (1)
June (3)
May (4)
April (1)

News 2022
August (3)
June (1)
May (1)
March (2)

News 2021
August (12)
July (1)
June (2)
May (7)
April (3)
March (1)

News 2020
August (15)
July (2)
June (7)
May (7)
April (19)
March (4)

News 2019
August (4)
July (7)
June (6)
May (1)
April (3)
March (1)

News 2018
August (11)
July (8)
June (3)
May (10)
April (2)
March (4)

News 2017
August (15)
July (18)
June (1)
May (7)
April (4)
March (7)

News 2016
August (17)
July (16)
June (2)
May (2)
April (1)
March (5)

News 2015
August (25)
July (1)
June (4)
May (9)
April (4)
March (10)

News 2014
August (4)
July (4)
June (11)
May (12)
April (9)
March (12)
January (13)

News 2013
October (11)
August (5)
July (5)
June (9)
May (12)
April (10)
March (7)
January (10)

News 2012
August (12)
July (10)
June (13)
May (22)
April (8)
March (5)

News 2011
October (23)
August (1)
July (7)
June (29)
May (11)
April (5)
March (3)

News 2010
August (2)
July (2)
June (5)

News 2009
August (1)
July (1)
June (1)
May (1)
April (1)
March (1)

Récapitulatif/Statistiques de l'année 2022 sur TI-Planet !

New postby Adriweb » 04 Jan 2023, 10:35

C'est reparti comme les années précédentes ! Voici l'habituelle news récapitulative de 2022 pleine de stats ;)
(Pour 2021, il n'y en a pas eu, oops, mais pour 2020, c'est par ici)

Stats de base
  • Plus de 552 topics et plus de 4360 posts créés
  • 424 archives mises en lignes (hors BAC/DNB...)
  • ... et les archives nouvelles ont cumulé environ 12000 téléchargements (contre 95k pour celles BAC/DNB...) ! (voir plus bas pour le top)
  • Environ 361000 générations créées grâce à nos éditeurs en ligne.
  • Plus de 27500 membres se sont inscrits sur le forum
  • Top 10 des pays des visiteurs: France (66.9%), Etats-Unis (4.3%), Espagne (3.3%), Brésil (2.1%), Maroc (1.9%), Portugal (1.6%), Canada (1.2%), Belgique (1%), Bolivie (0.9%), Réunion (0.9%).
  • Durée moyenne de chaque visite : environ 3min20 (visiteurs), et ≈13min (membres connectés).


Top 15 des news(/topics liés) les plus populaires
  1. Abitur 2029 et fin de la calculatrice graphique en Allemagne : 21733 lectures
  2. Concours Python 2022 - Pykaster3D «attrape-les toutes» ! : 20004
  3. Epreuves spécialité BAC 2022: conseils du jour 1 au jour 2 : 9800
  4. Phi pour N0110: déverrouillage + multiboot Omega 2.0 : 8942
  5. Zero, clone amélioré de TI-84 Plus CE (100 MHz + USB-C) : 6971
  6. Phi épisode 5 : bataille de reuploads Epsilon 18.2.0 : 6743
  7. QCC 2022 : Quelle Calculatrice Choisir ? : 6270
  8. Liste Portugal 2022 + nouvelle NumWorks N0120 EX : 6151
  9. Découverte spécifications nouvelle NumWorks N0120 EX : 5931
  10. Upsilon : firmware successeur d'Omega par sa communauté ! : 5230
  11. Enorme faille consignes mode examen Aix-Marseille : 5085
  12. Khi: bootloader conforme France, multiboot Epsilon+KhiCAS : 4952
  13. Liste calculatrices Australie SACE 2022: éviction HP+Sharp : 4671
  14. NumWorks N0120EX : phénomène de puissance au Portugal ! : 4582
  15. Mise à jour KhiCAS avec graphes 3D TI-Nspire CX NumWorks : 4344


Top 20 des archives uploadées en 2022, par téléchargements (hors sujets/corrigés/témoignages BAC/DNB...)
  1. OutRun v1.07 (Jeux cprizm, March 2022) - SlyVTT. 1277 téléchargements
  2. Jetpack Joyride CE (Jeux ce, January 2022) - King Dub Dub... 1144 téléchargements
  3. Tetris (Jeux nw, August 2022) - notOrzy. 676 téléchargements
  4. Jetpack Joyride (Jeux cgraph, January 2022) - Drakalex007. 408 téléchargements
  5. Minecraft (Alpha 1.5) (Jeux ce, May 2022) - Capysquid. 369 téléchargements
  6. Celeste Classic (Jeux cprizm, January 2022) - Lephenixnoir... 271 téléchargements
  7. Tanks CE (Jeux ce, February 2022) - commandblockguy. 172 téléchargements
  8. Pykaster3D v1.11 (concours Python 2022) (Jeux cprizm, September 2022) - Xavier Andréani... 129 téléchargements
  9. TI-Nspire CX II CAS Premium 5.4.0.259 Windows (Utilitaires PC Nspire, January 2022) - Texas Instruments. 103 téléchargements
  10. OS TI-Nspire™ CX II CAS (v 5.4.0.259) (OS Nspire, January 2022) - Texas Instruments. 91 téléchargements
  11. Windows 10 (Utilitaires cprizm, April 2022) - Farhi. 85 téléchargements
  12. KhiCAS (Casio Graph 90+E / fx-CG50) (Maths cprizm, August 2022) - Bernard Parisse. 82 téléchargements
  13. Labyrinthe 3D (Jeux ce, March 2022) - clemCH. 80 téléchargements
  14. S.A.M.M. (Jeux ce, March 2022) - Captain Calc. 78 téléchargements
  15. Periodic Table CE (Physique ce, April 2022) - mr womp womp. 70 téléchargements
  16. OS+apps TI-83 Premium CE (v. 5.8) (OS ce, June 2022) - Texas Instruments. 70 téléchargements
  17. Angry Birds (Jeux Nspire, November 2022) - Dubs. 69 téléchargements
  18. TI-Connect CE (v6.0, Windows) (Utilitaires PC ce, August 2022) - Texas Instruments. 67 téléchargements
  19. Supersonic Ball HP v1.00 (Jeux prime, February 2022) - DJ Omnimaga. 66 téléchargements
  20. ?


Top 12 des images en galerie








15566
TI-Nspire CX II CAS M-1020AL PCB
June 2022
Vue 30603 fois
15769
TI-Nspire CX II CAS, M-AO PCB
June 2022
Vue 22556 fois
15842
PCB NumWorks N0120 (rev 4.18)
July 2022
Vue 17218 fois
15068
TI-82 Advanced PCB (HW Rev B)
January 2022
Vue 6810 fois
15067
TI-82 Advanced PCB (HW Rev A)
January 2022
Vue 6716 fois
15238
TI-84 Plus (L-0421AF) PCB
February 2022
Vue 1884 fois
15843
Pesée NumWorks N0120EX
July 2022
Vue 1487 fois
15069
TI-Nspire CX II CAS + OS 5.4
January 2022
Vue 1224 fois
15972
TI-Nspire CX II Ndless + Octopus
September 2022
Vue 968 fois
16184
gaming fx-92+ Spéciale Collège
November 2022
Vue 886 fois
15211
Grand rangement Printemps 2022
February 2022
Vue 817 fois
15992
Journées APMEP 2022 Jonzac
October 2022
Vue 704 fois



Top 25 des membres les plus actifs
  • Sur le forum :
    critor (1387 posts, soit 3.8 / jour), Adriweb (416 posts, soit 1.1 / jour), parisse (393 posts, soit 1.1 / jour), Shadow (157 posts, soit 0.4 / jour), Hamza.S (131 posts, soit 0.4 / jour), cent20 (120 posts, soit 0.3 / jour), SlyVTT (99 posts, soit 0.3 / jour), DJ Omnimaga (80 posts, soit 0.2 / jour), Lionel Debroux (70 posts, soit 0.2 / jour), Acmos (66 posts, soit 0.2 / jour), ggauny@live.fr (65 posts, soit 0.2 / jour), Admin (63 posts, soit 0.2 / jour), Capysquid (48 posts, soit 0.1 / jour), DrawingFoolMe2 (46 posts, soit 0.1 / jour), Bobb (39 posts, soit 0.1 / jour), Bisam (34 posts, soit 0.1 / jour), Afyu (34 posts, soit 0.1 / jour), drudomi (32 posts, soit 0.1 / jour), Yaya.Cout (32 posts, soit 0.1 / jour), dechampsfx (24 posts, soit 0.1 / jour), RapidZapper (24 posts, soit 0.1 / jour), fmo (23 posts, soit 0.1 / jour), Noury (22 posts, soit 0.1 / jour), FrenchPythonLover (20 posts, soit 0.1 / jour), Dubs (20 posts, soit 0.1 / jour)
  • Sur le tchat : (tout compris - et pour "Via Discord", ben du coup on n'a plus les stats individuelles, en tout cas pour le moment :P) :
    Afyu (11263 posts, soit 30.9 / jour), ShoutBot (10225 posts, soit 28.0 / jour), critor (9778 posts, soit 26.8 / jour), redgl0w (5758 posts, soit 15.8 / jour), Shadow (5350 posts, soit 14.7 / jour), ptijoz (4116 posts, soit 11.3 / jour), cent20 (3940 posts, soit 10.8 / jour), Capysquid (3678 posts, soit 10.1 / jour), Hamza.S (3539 posts, soit 9.7 / jour), noelnadal (3512 posts, soit 9.6 / jour), FrenchPythonLover (1768 posts, soit 4.8 / jour), SlyVTT (1667 posts, soit 4.6 / jour), Acmos (1648 posts, soit 4.5 / jour), Ti64CLi++ (1400 posts, soit 3.8 / jour), Hayleia (1327 posts, soit 3.6 / jour), ascpial (1176 posts, soit 3.2 / jour), M4x1m3 (1043 posts, soit 2.9 / jour), Adriweb (984 posts, soit 2.7 / jour), Hackcell4TI (840 posts, soit 2.3 / jour), LeGmask (839 posts, soit 2.3 / jour), TheMachine02 (805 posts, soit 2.2 / jour), _Orlando_ (705 posts, soit 1.9 / jour), noobenprogrammation (558 posts, soit 1.5 / jour), Oh11115 (555 posts, soit 1.5 / jour), TIny_Hacker (454 posts, soit 1.2 / jour)

Merci à tous pour cette année 2022 sur TI-Planet, bonne année 2023 encore une fois...
et qu'elle soit meilleure que 2021... !


Image

Mise à jour img2calc Python : optimisation palette KhiCAS

New postby critor » 17 Jan 2023, 11:36

13917Dans une série d'articles précédents nous te présentions img2calc, notre service en ligne gratuit sur TI-Planet te permettant de convertir facilement et rapidement tes images pour tes projets sur calculatrices.

Un large choix de formats cible t'était proposé :
  • fichiers à appeler depuis tes programmes en langage Basic :
    • .g3p pour Casio Graph 90+E et fx-CG50/20/10
    • .c2p pour Casio fx-CP400 et fx-CG500
    • .8ca ou .8ci pour TI-82 Advanced Edition Python, TI-83 Premium CE, TI-84 Plus CE et TI-84 Plus C Silver Edition
    • .8xi pour TI-83 Plus (compatible TI-82 Plus, TI-82 Advanced monochrome et TI-84 monochrome),
    • .83i pour TI-83 (compatible TI-82 Stats et TI-76.fr)
    • .82i pour TI-82
    • .86i pour TI-86
    • .85i pour TI-85
    • .73i pour TI-73
  • fichiers à appeler depuis tes scripts en langage Python :
    • IM8C.8xv pour les éditions Python des TI-83 Premium CE et TI-84 Plus CE
  • scripts Python pour les différentes bibliothèques de tracé par pixels disponibles selon les modèles :
    • ti_draw (TI-Nspire CX II)
    • graphic (TI-Nspire CX II avec KhiCAS, TI-Nspire CX avec KhiCAS, NumWorks avec KhiCAS, Casio Graph 90+E et fx-CG50 avec KhiCAS)
    • nsp (TI-Nspire avec Micropython)
    • ti_graphics (TI-83 Premium CE et TI-84 Plus CE éditions Python)
    • casioplot (Casio Graph 90/35+E II, fx-9750/9860GIII et fx-CG50)
    • hpprime (HP Prime)
    • kandinsky (NumWorks)

Aujourd'hui, parlons donc de la conversion d'images en scripts Python par img2calc.

Le code des scripts obtenus se compose de 3 éléments :
  • une fonction affichant une image
  • les données de l'image
  • la palette de couleurs associées
Par exemple pour l'image ci-contre, tu pouvais obtenir ce genre de script :
Code: Select all
#image converted on TI-Planet
#tiplanet.org/img2calc


#the image drawing function
#- rle : image RLE-compressed data
#- w : width of image
#- pal : palette of colors to use with image
#- zoomx : horizontal zoom
#- zoomy : vertical zoom
#- itransp : index of 1 transparent color in palette or -1 if none
def draw_image(rle, x0, y0, w, pal, zoomx=1, zoomy=1, itransp=-1):
  i, x = 0, 0
  x0, y0 = int(x0), int(y0)
  nvals = len(pal)
  nbits = 0
  nvals -= 1
  while(nvals):
    nvals >>= 1
    nbits += 1
  maskval = (1 << nbits) - 1
  maskcnt = (0xFF >> nbits >> 1) << nbits
  while i<len(rle):
    v = rle[i]
    mv = v & maskval
    c = (v & maskcnt) >> nbits
    if (v & 0b10000000 or nbits == 8):
      i += 1
      c |= rle[i] << (7 - nbits + (nbits == 8))
    c = c + 1
    while c:
      cw = min(c, w - x)
      if mv != itransp:
        col = pal[mv]
        for l in range(0, zoomy, zoomy < 0 and -1 or 1):
          for k in range(cw):
            for p in range(0, zoomx, zoomx < 0 and -1 or 1):
              set_pixel(x0 + (x + k)*zoomx + p - (zoomx < 0), y0 + l - (zoomy < 0), col)
      c -= cw
      x = (x + cw) % w
      y0 += x == 0 and zoomy
    i += 1


#palette for your image
#12 RGB-888 colors
palette = (
(0,0,0),(104,40,120),(136,112,80),(80,192,0),(248,132,24),(160,168,160),(248,252,0),(0,252,248),(248,0,0),(248,252,248),(248,172,176),(0,0,248),
)

#your image data
#160x154 RLE-4 pixels
image = (
b'P\x81\1P\x81\6\xf0\0\1\0\1\20\1\x90\3QP\2\23\1\0\21\xa0\1\xf1\0\0\1\xf0\0\x110\xb2\1\4\2\0\2\1\x92\6`\2\0\5\20\2\1\2\20\5\1 \1\xf0\1b \2\0\4\26\4\0\27\0\xf8\0\20\xf1\0\0\27`\22P\2\4\x92\1\4\2\20\1\xf2\5\x80\1\22\0\1\22\20\25\2@\2\20\2\0\xf2\0\0b \2\0\6'
b'\31\6\0\27\xb0\2\27\0\5\27\5\20\22\xf0\0\2\4\x92\1\4\2\20\xe2\5\xb0\1\2\20\5\2\25\0\x020\2\20\2\0\xf2\0\0b \2\0\6\31\6\0\27\0\x85\1\0\xf8\0\0\27\0\a\31\a\20\22\xa0\1\4\x82\1\24\2\0\1\xc2\5P\22\20\22\5\2\0\1\5\22\0\x020\2\0\22\0\xf2\0\0b \2\0\n\26\n\0'
b'\27\0\25G\25\0\bJ\4\b\0\27\0\a\31\a\20\22\xb0\1\2\4\x82\1\24\2\0\1\xa2\5@\2%\x025B\1\0\22\20\1"\0\xf2\0\0b \2P\27\0\25\27\31\a\25\0\bZ\b\0\27\0\5\27\5\20\22\xe0\1\1\x92\1\0\1\0\x92\5@\2%\x025"\5\1\5\21\5 "\1\xf2\0\0b \2\x001\0\27\0\25\a\t\'\25\0\bZ\b\0'
b'\27\x001\20\22\xf0\1\x92\1\4\2\20\21\xe2\4@\1\2\25\2\5\22\1\5"\0\5\21\2\5 \xa2\1\0b \2\0\'\5\0\27\0\25\a\t\'\25\0\bZ\b\0\27`\22\24\xf0\1\2\4\xf2\0\24 \1\xc2\4`\1" \25\2\20\5\0\22\25\20\xa2\1\0b \2\0\a\31\a\0\27\0\25\27\31\a\25\0\bZ\b\0\27\0\n\26\n\20B'
b'\24\2\xe0\1\4\x82\1\4\2\20\xb2\4\xf0\0\5\2 \2\25\22\25\0\2%\20\xa2\1\0b \2\0\a\31\a\0\27\0\25\a\t\'\25\0\bZ\b\0\27\0\6\31\6\20\xf2\0\24\xe0\1\4\xf2\0\24\2\0\1\x92\4P5\2\25\2\5\0R% \x1252\0b \2\0\5\27\x050\25G\25\0\bZ\20\27\0\6\31\6\20\xa2\1\24\xe0\1'
b'\xf2\0\24\2\0\1\xf2\3P\5\2\25\2\25\2\0\2\1\2\0"\5\2\5\2\xc0\1b \2P\27\1\0\1\x057\25\0\b:\30@\n\26\n\20\xe2\1\xd0\1\1\x82\1\0\1\0\xe2\3P\2\1"\5\22\x010"\5\2\25\x010Q\20b \2\0\2\23\1\0\'\1\0\x017\25\0\b*\b \21\20\2\23\1\20\xf2\1\4\xc0\1\22\1R\4\2\20\21'
b'\xb2\3\x80\1\1\22\1\x020b\x150b\0b \2\0\4\26\4\0G\0\5\'\25\0\b\32\b\20\x017`\x82\2\24\xd0\1\4b\4\2 \1\x92\3`\2\0\2\5\0\2@b\5" R\0b \2\0\6\31\6\0W\0\1\5\a\25\0\b\n\b\0\1W\0\5\27\5\20\22\0\24\xc2\1\4\xf0\1\24R\24\2\20\x82\3`\5 \1P25\2\5\2\5 B\0b \2\0\6'
b'\31\6\0W\1\0\1%\0\30\20g\0\a\31\a\20\22\4 \24\x92\1\4\xa0\2b\24\2\0\1\xe2\2\xf0\0"PB\25\0\22\5\x1202\0b \2\0\n\26\n\0\xf7\0\0\1\25\0\b\20\xf7\0\0\a\31\a\x102$ \24R\4\0\xf2\0\4\xa0\1\4R\24\2\0\1\xc2\2P\2\x90\1\22\5\2\0\25\0\22\25\2\1 \1"\0b \2P\x87\1\1P'
b'\xf7\0\0\5\27\5\20b\20\2\4\0R\4\0\xf1\0\4\22\x90\1\x82\1\0\1\0\xb2\2P\5\x90\1\22\25\0\5\0"\25\x120"\0b \2\x001\0W!@\2\0\1g\x001\20\x92\1\4\20\4B\x80\1\4"\4\x80\1\22\1B\4\2\20\1\x92\2P\5\x90\1\2%\0\1\0\x125\22\x102\0b \2\0\'\5\0\'\21P(\4\b\0a`\xb2\1\24 '
b'\4\x90\1\4B\24\x80\1\24B\4\2\20\1\xf2\1@\22\1\x80\1\2%\2\20\22%"\x102\0b \2\0\a\31\a\0\27\1\20\2D \30\x80\1\n\26\n\20\xe2\1\24\2\x90\1\4\x82\1\x80\1\2\4B\4\2 \xd2\1@\5\2@\22\1\20\2% \x025"\x102\0b \2\0\a\31\a\0\a\1\0\2\24\26\t\26\4\6\2P\5\27\5\0\6\31\6'
b'\20\xf2\1\4\xa0\1\4\x82\1\24\x90\1\x042$\2\0\1\xb2\1@\22 B\20\2\25\2 \2%\2\0\22`b \2\0\5\27\5 \x146\t6\4\0\n\26\4\0\a\31\a\0\6\31\6\20\xf2\1\4\xa0\1\24\xa2\1\24\xf0\0\2\4B\24\2\0\1\x92\x010\25\2\20b\0\2\25\2 \2\25\2\0\22\1\x102\0b \2P\24\6\t\6\31\6\24@'
b'\6\31\6\0\a\31\a\0\n\26\n\20\xf2\1\4\xd0\1\1\xc2\1\x80\1\1R\0\1\0\x82\x010\25\2\20b\0\2\25\22\x102\0\22 2\0b \2\0\2\23\1\0\4\5\6\t\6\t\n\4\2\x001\0\6\31\6\x007\0\2\23\1\20\xf2\1\4\xe0\1\4\xa2\1\24\x80\1\2\x012\4\2\20\1b0\25\2\0\xf2\0\0\2\25\22\20\1\22'
b'\20\22\20B\0b \2\0\4\26\4\0\4\t&\22 \'\5\0\6\t\n\6\0\1\27\1`\22\20Db\4\0\xa2\x014\x104R\4\xa0\1\x142\4\2\20\1B0"\0b\20\2\25\2@\2\0\5\22\20B\0b \2\0\6\31\6\0\4\31$0\a\31\a\0\n\26\2@\1\xa2\x0104"\4\xb0\1\x042$\20$"\4\xd0\1\4"\24\2\x102 \25\22\0R\1\x102P'
b'\2\25\2 2\0b \2\0\6\31\6\0$\2\0\n\26\n\0\a\31\1@\xd2\2 \22\24\xb0\1\4b$ $\0R\24`\24\22\24\2\20\22\0\5\0\25\22\0R\20%\22@B 2\0b \2\0\n\26\n\0\4\2 \6\31\6\0\5\27\20\xc2\3\xf0\1\4\x92\x014\x80\1\4\22\24`\x042\0B\25\22\0B\0\1\0B0R\1\20\1"\0b \2\xa0\1\6\31'
b'\6@\xe2\3\1\xd0\1\4\xd2\1\x80\1\4RP\1\2\24\0"\1\2\0\5\1\2\x001\20\2\21\2\1\x120!20\1\2\0b \2\x001\x001\0\4\n\6\4\20\21\xb2\1\xf1\0\xc2\1\4\xc0\1\4\xe2\1\xf0\0\4R\4P"\0\22\20\1\0\2\0\2`\2\20\2\0\22`\2\21\x120\2\0b \2\0\'\5\0\'\5\0$\5\1\xa2\1!\x80\1\xc2'
b'\1\4\0\xb2\x014\xa2\1\4\xf0\x0042\24\xf0\0\x120\2\0b\0\2\20\2\0\22\0\1"% \x020\2\0b \2\0\a\31\a\0\a\31\a\0\2\20\xa2\1\xd0\1\xc2\1\4\x80\x024b\4\0b\24\20$\22\4P2\0\x82\x035\2\xf0\0b \2\0\a\31\a\0\a\31 \x82\1\1\x80\1\t\x050\25\xc2\1\4\xd0\x01204\22\4\xf0'
b'\0\4\22$\20\4\2P2\0R@\22\0\2@BU\x010\2\0b \2\0\5\27\5\0\5\a\20\x92\1`\x82\3\4\0\xa2\1\20\x82\x010\4\2\xf0\0\4R\24`2\0\x120\1\0\2\20R \2\20\1\2\5\0E0\2\0b \2\xf0\0\1\xf2\0P\5\0\5\0\5\20\25\0\5\0\5\0\5\0\xc2\1\4\0\xa2\1\20\x82\x011\4\x80\1\4b\4`2\0B\0!\2'
b'\1b\1\20\22\0\21\20E \2\0b \2\0\2\23\1\20\xf2\0\1`\5\0\5\0\5\20\25\0\5\0\5\0\5\0\xc2\1\4\0\x91\1\2\20\xc2\1\4\x80\1\4b\4`2\0\2E \x92\1\1\0%\1\25\20\2% \2\0b \2\0\4\26\2\1\xf2\0P\25\1\5\1\5\1\5\0\1\25\1\5\1\5\1\5\0\xc2\1\4\xa0\1\2\20\xc2\1\4\0\xf2\0D"\4'
b'`2\0\2\25"\5\20\x82\1\x112%0\25 \2\0b \2\0\6\t\2\1b\1@\xc5\2\xc2\1\4\xa0\1\2\20\xc2\1\4\xd0\1\2$`2\0\2\5\2%\2\5\20b\1\0\22\25\2%\0\2\1\20\2 \2\0b \2\0\6\5\0b\x010\xb2\4\4\xf0\0\2\20\2\20\xc2\1\4\0\xf2\0\0" \22`2\0\2\5"\5\2\5\2\20R\20\2e\0\22P\2\0b \2\0'
b'\n\0b@\4@\4\0\4\0\4@\4\0\4\0\4 \xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002\0\2\25\22\25\2\0\2\0\x012\20\22e\0\22\1 "\0b \2\20b@\2\0\22\5\x020\2\0\22\5\x020\2\0\22\5\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002\0\1E\2\1\0\5'
b'\x102\0\1\2\1"%\0"0"\0b \2\0\1R \1\5\1\5\0\1\2\x050\1\5\0\1\2\x050\1\5\0\1\2\5\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002\20\1%@\5\20\22\0\1\22\x102\21\22@!\0b \2\1R \2\25\2\5\20\1 \2\0\2\5\20\1 \2\0\2\5\20\1\0\xc2\1\x040\1\0\1\0\4\20\2'
b'\20\xc2\1\4\20\2@\2\0R\4\xf0\x002`\22 \5\0\22\x002\1\0\1\2\21\2\1\x90\1b R\1 \2\5"\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\20\2\0\24\2\0\2\0R\4\xf0\x002@\2\0\22\x010\22\0"\1\0\1 \2\1\20\xf2\0\0b B\x010\5\22\4\2\5P\2\0\2\5P\2\0\2\x05'
b'0\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\20\2\0$\0\2\0R\4\xf0\x002@\2\0R\20\x012\0"\5\22 2\5"\0b B \x052\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\20\2\0$\0\2\0R\4\xf0\x002@\2\0\2\xd0\1%\22 2\5"\0b 2 \5\22\24\2\4\2\5P\2\0\2\5P\2\0\2'
b'\x050\xc2\1\x040\1\0\x010\2\20\xc2\1\4\20\2\0$\0\2\0R\4\xf0\x002\x80\1!\x92\x015\22\x102\5"\0b "02\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\4\xa0\1\2\20\xc2\1\4\20\2\0$\0\2\0R\4\xf0\x002`\1\22\21\xe5\1\2 "\5"\0b "\20\1\22\24\2\4\2\4\2\5P\2\0\2\5P\2\0\2\x05'
b'0\xc2\1\4\0\xa2\1\20\xc2\1\4\20\2\0\24\2\0\2\0R\4\xf0\x00202\xc0\1"E\20"\5"\0b "\20"\24\2\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\4\0\xa2\1\20\xc2\1\4\xf0\0\2\0R\4\xf0\x0020\2\x010\x82\1\1\0\x050\2\25\2\20R\0b \x020\2\4\2\24\2\4\2\4\2\5P\2\0\2\5P\2\0\2'
b'\x050\xc2\1\4\xa0\1\2\20\xc2\1\4\0\xf2\0\0R\4\xf0\x0020\2\20\2\0\xb2\1\5"\20\22 \22\5"\0b \2 \22\4\2\24\2\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4\0\xf2\0\0R\4\xf0\x0020\1\20\2\0\xb2\1\5\22\25\x020b\0b \2\20\22\24\2\4\2\5\4\2\4\2'
b'\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4\0a\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\x020Q\20b \2\20\22\24\2\4\25\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2\xb0\1b \2\20"\4'
b'\2\4\5"\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4P\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\1\22\5\4\2\4\22\5\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4P\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2'
b' \xf2\0\0b \2\0\2\0\22%2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4 \30\0\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\x82\1\4\2\5P\2\0\2\5P\2\0\2\5\a \xc2\1\x040(\0\30\0\2\20\xc2\1\4 \30\0\4\0\2\0R\4\xf0\x002@\2\0\2'
b'\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\2\5B\5\2\4\2\5P\2\0\2\5P\2\0\2\27 \xc2\1\x040(\0\30\0\2\20\xc2\1\4 \30\0\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\x82\1\4\2\5P\2\0\2\5P\2\0\a\21\2\20\xc2\1\x040\30\20\b\20\2\20\xc2\1\4 \30\0'
b'\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\2\0B\0\2\4\2\5P\2\0\2\5P\2\0\a\5\0\t\20\xc2\1\4\xa0\1\2\20\xc2\1\4 \30\0\2\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\x82\1\4\2\5P\2\0\2\5P\2\0\a\5\0\a\20\xc2\1\4\0\xa2'
b'\1\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\2\5\22\1\0"\4\2\5P\2\0\2\5P\2\0\a\5\0\t\20\xc2\1\4\0\xa2\1\20\xc2\1\4\0\xf2\0\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\2\0\2\20\2\0\2\0\4\2\5P\2\0\2\5P\2'
b'\27\5\0\a\20\xc2\1\4\xa0\1\2\20\xc2\1\4\0\xf2\0\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2\xb0\1b \2\0\2\x002\0\4\20\24\2\5P\2\0\2\5P\2\27\5\0\a\20\xc2\1\4\xf0\0\1\20\2\20\xc2\1\4\0a\2\0\22\1"\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \x012\21\20b \2\0\2\0\22\1'
b'\4\0\4\20\24\2\5P\2\0\2\5P\2\a\2\5\0\a\20\xc2\1\4P\33\22\0\2\20B\1b\4\xf0\0\2\0\2\0\2\24\2\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \x025"\0b \2\0"\20\4\0\4\2\0\24\2\5P\2\0\2\5P\2\a\2\5\0\a\20\xc2\1\4P\33\22\0\2\x102\1\0*2\4\20\24\0\21\0\2\0\2\0$\n\4\xf0'
b'\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\20\4\2\4\22\24\2\5P\2\0\2\5P\2\0\2\5\0\a\20\xc2\1\4 \33\0\33\22\0\2\20"\1\0\2$\5"\4\20\24\0\21\0\2\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20"\0\4\2\4\22\24\2\5P\2\0\2\5P\2\a9\a\t"\20*'
b'B\4 \33\0\33\22\0\2\20"\0T"\4\20\24\0\21\0\2\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\0\4\2\4\22\24\2\5P\2\0\2\5P\t\a\t\a\31\a\t\22\1\0\x0242\4 \33\0\33\22\0\2\20"\0T\n\22\4\20\24\0\21\0\2\0\2\0\4\20\n\4\xf0\x002@\2\0\2\0\xb2\1'
b'\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\22\24\2\5P\2\0\2\5P\a\20\t\20\a\0\22\0\2D\n"\4 \33\0\33\22\0\2\20"\0T\n\22\4\20\24\0\21\0\2\0\2\0\4\20\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 2\5"\0b \2\20\22\4\2\4\2\4\2\1"\5P\2\0\2\5P\a\2\5\t\22\a\22\20d\5\22\4 '
b'\33\0\33\22\0\2\20"\0$\22\4\n\22\4\20\24\0\21\0\2\0\2\0\24\2\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 2\5"\0b \2\20\22\4\2\4\2\4\2\0\5\1\0\5P\2\0\2\5P\a*\31\a\n\2\0\2d\n\22\4 \33\0\33\22\0\2\20"\0\24 \4\n\22\4\20\4\2\0\21\0\2\0\2\0\4\20\n\4\xf0\x002@\2\0'
b'\2\0\xb2\1\5\22\25\2 2\5"\0b \2\20\22\4\2\4\2\4\x020\5P\2\0\2\5P\a2\t\a\22\0\xf4\0\n\22\4 \33\0\33\22\0\2\20"\0\4\20\2\0\4\n\22\4\xf0\0\2\0\2\0\4\0\4\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 2\5"\0b \2\20\22\4\2\4\2\4\2\0\2\20\5\1@\2\0\2\5\1@\t2\5\2\5\2\0'
b'\4\2\0\2\0\2\0\4\n\22\4 \33\0\33\22\0\2\20"\0\24\2\0\2\0\n\22\4\0\xf2\0\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2\xb0\1b \2\20\22\4\2\4\2\4\2\0\22\0\xc2\1\1 \a\5\2\31\2\5\t\2\0\4P\4\n\22\4\xa0\1\2\20"\0\4\0\4\0\4\0\n\22\4\0\xf2\0\0\2\0\4\20\n\4\xf0'
b'\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\x85\2\a\t\5\2\5\2\t\5\2\0\4\2\4 \2\4\n\22\4\0\x91\1\2\20"\0\4\2\4\2\4\0\n\22\4\0a\2\0\2\0\4\20\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\x85\2\t\5'
b'\t\2\5\n\t\5\2\0\24\2\4\22\4\2\n\22\4\0\xa2\1\20"\0T\n\22\4\xf0\0\2\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\xf2\1\a\t\5\t\25\31\5\2\0\4\20\4\20\4\0\n\22\4\0\xa2\1\20"\0T\n\22\4\20\4 \2\0\2\0\2\0$\n\4\xf0\x002'
b'@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\xf5\1\aI\25\t\2\0\4\20\4\20\4\0\n\22\4\xf0\0\21\0\2\20"\x004\2\0\n\22\4\20\4 \2\0\2\0\2\0\4\2\0\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\xf5\1\a\x197'
b'\25\2\0\xf4\0\n\22\4 \30 \21\0\2\20"\0\4\0\4 \n\22\4\20\4\0\2\0\2\0\2\0\2\0\4\0\4\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\22\1\xf5\1\a\5i\2\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20"\0$\0\24\n\22\4\20\4\0\4\0\2\0\2\0\2\0\4\20\n'
b'\4\xf0\x002@\2\0\1\xc2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2 \x85\2\t\2e\2\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20"\0\4\2\4\0\2\4\n\22\4\20\4\0\4\0\2\0\2\0\2\0\24\0\n\4\xf0\x002@\2\20\xc2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2 \x85\2\t\5\2U\2\0\4'
b'\22\4\2\4\2\4\n\22\4 \30\0\v\0\21\0\2\20"\0\4\0\4\20\4\n\22\4\20\4\0\4\0\2\0\2\0\2\0$\n\4\xf0\x002@\2\20\xc2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\1\0\x85\2\t%R\0\4\20\4\0\4\0\4\n\22\4 \30\0\v\0\21\0\2\20"\0T\n\22\4\20\2\0\2\0\2\0\2\0\2\0$\n\4'
b'\xf0\x002@\2\20\xb2\1\23%\1\b\2\b\0\xf2\0\0b \2\20\22\4\2\4\2\4\2\4\0\4\x85\2\aE2\0\4\2\0D\n\22\4 \30\0\v\0\21\0\2\20"\0T\n\22\4\xf0\0\2\0\2\0$\n\4\xf0\x002@\2\20\xb2\1\x035\b\5\30\x90\1b \2\20\22\4\2\4\2\4\2$\x85\2\aE2\0\xf4\0\n\22\4 \30\0\v\0\21\0\2'
b'\20"\x004\0\4\n\22\4\0\xf2\0\0\2\0$\n\4\xf0\x002@\2\20\xb2\1\23%8\0\x025\22\5\0b \2\20\22\4\2\4\2\4\2$\xf9\1\27I\2\5\22\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20"\0\4\20\4\0\4\n\22\4\0\xf2\0\0\2\0$\n\4\xf0\x002@\2\20\xb2\1\23%8\0\xf2\0\0b \2\20\22\4\2\4\2\4\2'
b'$\x85\2\aI\2\5\22\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20"\0\4\0\2\4\2\4\n\22\4\0a\2\0\2\0\2\24\2\4\xf0\0"\5\2\1 \2\x102E"\23%8\0%B\0b \2\20\22\4\2\4\2\4\2$\xb5\19\aU\2\25\2\0D\22\4\n\22\4 \30\0\v\0\21\0\2\20"\x004\2\4\n\22\4\xf0\0\2\0\22\0"\4\xf0\0"% \2\20'
b'"g\25\23%8\0%B\0b \2\x102\4\2\4\22\24\xb5\1:\a\5B%\2\0D\20\4\n\22\4 \30\0\v\0\21\0\2\20"\x004\0\4\n\22\4\20\x110\2\0R\4\xf0\0"\20\5 \2\20\22\x97\1\23%8\0%B\0b \2\0\1\2%\4\2\4\2\5\24\xb5\x012\a\t\27%)\2\0\4 \4\20\4\n\22\4\0\xa2\1\20"\0T\n\22\4\20\21\0'
b'\30\0\2\0R\4P\2%\2\20\5 \2\20\22\x97\1\23%8\0\22\5B\0b \2\0\2\0\2\25\4\2\4\5\2\24\xb5\1)\'\xf5\0\2\0D\20\4\n\22\4\0\xa2\1\20"\0T\n\22\4\20\21\0\30\0\2\0R\4P\2%\xba\1\x97\1\23%(EB\0b \2\0\2\0\22\25\24\5\2\5\4\xc5\1\xc9\1\2\0\4 \4\20\4\n\22\4\xa0\1\2\20"'
b'\0T\n\22\4\20\25\0\30\0\2\0R\4P\2%\b\4\xba\1\5g\23%(%\0\5B\0b \2\0\2\0\2\5\2%"\4\xb5\1\2\xc5\1\2\0\4\20\2\4\20\4\n\22\4\xa0\1\2\20"\0T\n\22\x045\4\30\0\2\0R\4P\2%(\24\x8a\1\2\1W\23\25\1(%\0\5B\0b \2\0\2\0"\25\22\5\2\4\xb9\1\1\2\xb5\1\2\0\4"\4\20\4\n\22'
b'\4 \x040\30\0\2\20"\0T"\x045\n\1\b\0\2\0R\4P\2%H\x85\1 !\27\23\1\20(%\0\5A\0b \2\0\2\0\2\0B\5\2\4\xb9\1\0Q\5\1\5\21\5\1\2\0\4 \24\0\4\n\22\4 \4\0\2\0\v\30\0\2\20"\0D\n"5*\b\0\2\0R\4P\2%\0\xd8\1@\27 \25 %\0\5Pb \2\0\2\0b\0\2\4\xc5\1\xc0\1\2\0$\2\0$\n\22'
b'\4 \4\0\2\0\v\30\0\2\20"\0D25\n\t\n\20\2\0R\4P\2\xb5\4\0\5B\0b \2\0\2\0\x82\1\4\x95\3\2\0\xf4\0\n\22\4 \4\0\2\0\v\30\0\2\20"\1\20\32\x0525\b\0\b"\0R\4P\2%\xd0\3%\0\5B\0b \2\0\2\0\2\5"\0\22\0\4\x95\3\2\0\24\0$\0\4\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\25Z'
b'\22\0R\4P\2%@\xfa\0\5\xf2\1%\0\5B\0b \2\0\2\0\2\0\2\20\2\1\2\24\x95\3\2\0\4\20\4\20\2\4\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\4\5\n\4:\1\2\0R\4P\2% \1\2\x8a\1\5\xf2\0c%\0\5B\0b \2\0\2\0\2\1\2\20\4\0\1\24\x95\3\2\0\4\20\4\0\2\24\n\22\4 \4\0\2\0\v\30\0\2\20'
b'\xc2\1\4\5\4\b*\5\0\2\0R\4P\2% \2\xaa\1R\x83\1%\1\5B\0b \2\0\2\0\22 \4\0\2\24\x95\3\2\0\xf4\0\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\48\32\2\0\2\0R\4P\2% \5Y\5:U\xf3\0UB\0b \2\0\2\0\2\1\0\4\0\4\0$\x99\3\2\0\xf4\0\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\27\2\30\n'
b'\31\0\2\0R\4P\2%\0\1\5\x8a\1\4( \x93\x015\0\5B\0b \2\0\2\0\2\0\24\0\4\2$\x99\3\2\0\xf4\0"\4 \4\0\2\0\v\30\0\2\20\xc2\1\4\0\1\a\0\v\0\v\0\2\0R\4P\x025\1\0\xc8\1\3\5\xb3\1%\0\5B\0b \2\0\1\22\4\2\4\2\4\2$\x97\3\2\0d\n"\4\xa0\1\2\20\xc2\1\4\1\20\a\v\0\v\0'
b'\2\0R\4P\2eY\5(\x023\xd5\1\0\5B\0b \2\20\22\4\2\4\2\4\2$\x99\3\2\0d\n"\4\0\x91\1\2\20\xc2\1!\20\v\0\v\0\2\0"\1\22\4P\2%2U\2\30\5\27#\xa2\1%\0\x051\20b \2\20\22\4\2\4\2\x042\x97\3\2\0d\n"\4\0\xa2\1\20\xb2\1P\1\0\v\0\2\0\2\1\20\22\4P\2%\0\23\x82\x017#'
b'\xa0\1%\0\5Pb \2\20\22\4\2\4R\x97\3\2\0d2\4\0\xa2\1\20\xa2\1\x80\1\v\0\2\1\20:\4\2@\2\25#\xd7\1#\x92\1\v%\0\5;\20b \2\20\x82\1\25\x97\3\2\1\0\x024\x052\4\xa0\1\2\20\xa2\1\xe0\1*$@\2UYW\5#\x92\1\v%\0E\2\0bPR\5\xd7\3\22\1\20\32R\4\xf0\0\4\2\0\2\20\xa2\1P'
b'\1\xf0\0\32\1\2\1\n@\2\5CYG\25#\xd5\1\0\25\2\25\2\xb0\1\x0252\x175\a\25\'\5\ae\a\xf5\0\xc2\1\4\xf0\0\24\0\2\20\xa2\1`\2`"\32\1@Z\xf7\x005\1\b#\xa0\1%\0\5\x82\2\xf8\0\xea\3\xc2\1\4 \x010\24\0\2\20\xa2\1\xf0\0\1P2\1\4@Z\xf7\0\25\21\30#\xa0\1%\0\2\5\2\5\2'
b'\5"\5R\5(R\xea\3\xc2\1\4 \x010\24\0\2\20B\1"\25 \1@\x020B\v\2\1\33\21\xd5\1\1H#\x90\1\1%\20\21\v\1\v!\vQ\v\30B\x85\4\xc2\1\4 \1\0"\24\0\2\20B\0E \21@R$0$Zi\58\x023$\n\x95\1 \xeb\1\b\228\x8a\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5\x000\1\xf0\0\1\22\0Q\n\2e'
b'\xa8\1C\2$\n\xc0\1\xc5\1(\2\30\4\xaa\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5\0@\2\x80\1\2\32Q9\1%\xc3\1\1\x134\n\xc0\x015\2E\22(\2\b\4\xca\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5\0P\2\xf0\0\2:A\t\n\x015\xf9\0\5#\33$\n\24\0+\20\v \5\0B%\22\25\2(\2\b\xea\4\xc2\1\4'
b' \1\0"\24\0\2\20\22\0\xf5\0\x80\1\22@\32\25\xf1\x002\xf5\0\23\1\33\a\24\n\24\2@+\20\5\0\2\25\22%\22\5\2(\2\b\4\xea\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5\0\20\x110\b\31\b0\24\x81\x014\x93\1\33\27\5\4\n\4\22\0\x010;\0\2\0\2\25\2\5\1\2\5\22\1\2\30\22\b\xfa\4'
b'\xc2\1\4 \1\0"\4\2\0\2\20\22\0%\30\0\23\0\a\31\a\20\b\t\n\30\xa4\2\xc7\1\4\n$\20\n\5\33\0[\2\x002\5"\5\22\30\22\30\xfa\4\xc2\1\4\xa0\1\2\20\22\0\25\2\30#\a\5\t\27\0\1H\4\3\4\5\2\5\1\t\1\xa4\1i\5\'\2$\2\20\2\nU"E\22\1%\22(R\xd5\4\xc2\1\4\0\xa2\1\20\22'
b'\20\30\27\23\5G\2\58\4\x035\1\n\5\1\x94\1\x97\1\2\32\24\2 \4\n\xa5\2\22\xf8\5\xc2\1\4\0\xa2\1\20"\0\30\27\23\x027\5\22%\32\23%1\xf4\2\20\4\20\4\n\xa0\1\x9b\a\xc2\1\4\0\x91\1 "\0\30\27\3\2\4\a\5\27\5B\32\23%1\xb2\2\n\24\2\0\24\20\4\n\xb1\1k\1K!K\21\xbb'
b'\1!K\xd1\1\xc2\1\4\xd0\1"\0\30\27\3\24\a\2\a\25\22 \32\23%\1\2\21\xb2\2\n\22\0$\20\4\n\5\2\xe5\1"E\a\25\a\x95\1\a\xd5\1\a5\a\x85\1\xc2\1\4\0\xc2\1\4\2\25\30\27\3\24\a\2\a\25\22(\32\23%\1\2\21\2%\xf2\1\n\x104\20\4\n\25BU\2\5B\25\22\x87\1\5\a%\a\25\a%\27'
b'\xf5\0\a%\27%\27\5\a\5\xc2\1\4\xd0\1\4\2\20\30\27\3\24\'\25\22(\32\23%1\0%\x80\2\2D\20\4\n5\2%\22\x85\1B\5\2\5\a\x1575\a\x85\1\a%\'\5\a5\a%\'\5\xc2\1\4\xb0\1%\2\20\30\27\3\24\'\25\22(\32\23%1\0%\xd0\1\2\4\nT\20\4\n\22%B\5\22G\x052\25\x175\27\x95\1\27'
b'\25\x175\xf7\0\25\'\25\a\xc2\1\4\xb0\1%\2\20\30\27\3\24\'\25\22 \32\23%!E\x90\1"\0\24\nT\20\4\n\22\25\22\5"\5\x127%\2\5\2\5\22\27%\27\xa5\1\a\25\27\25g\25\'\25\a\25\a\xc2\1\4\xb0\1%\2\20\30\27\3\24\'\25B\32\23%!%\2\5\xf1\0\20"\0\24\nT\20\4\n\22\25\22\5'
b'\22\5\2\5G%\2\5B\a\xf5\1\a\5\27%g\x157E\xc2\1\4\xb0\1%\1\20\30\27\3\22\'\25\22%\32\23%!%\0\5\xf2\0\20"\0\24\nT\20\4\n\2%B\5\2\5\x1757B\xb5\1W\5\x175W\x157E\xc2\1\4\xb0\1% \30\20\3\20\'\25\22(\32\20% %\0\5\xf2\0\20"\0\24\nT\20\4\nE2U\a\5G\xb5\x017\5\aE'
b'\a\x85\1\x87\x015\a\xc2\1\4\0\xa2\1%\xd0\3%\0\5\xf2\0\20"\0\24\nT\20\4\n\2e\2e\x87\x012%\'5W%\xe7\1U\xb2\1$\33\x80\1\xb5\4\0\5\xf2\0\20"\0\24\nT\20\4\n\v\20[\xa5\3\x87\4\xa2\1\4\22\4\0\v\xf0\0\v%\v( \27 \24 \27\20\30 \22\20%\0\5\xf2\0\20"\0\24\nT\20\4'
b'\n\2\5\2%\2\27%G\25\a\5\a\x057\x152EW\x85\1\a%WE\a\xd2\1\4\x80\1\v\0%\v(\21\0\27 \24 \25\21\30\21\0\22\20%\0\5\xf2\0\20"\0\24\nD\2\20\4\n\xd5\1\'%\27\x85\1"5\22\25\27\x85\1\a%\27\25\'5\a\xd2\1\4\v0;\20%\v(\21\3\27\24\0\24\0\x185\30\22\0\22\3\0%\0\5\xf2'
b'\0\20"\0\24\n4\2 \4\2%\22U\a\25\'%\27\x85\1\2\5\2\5B\25\'\5\a\25\27%G%\27%\27R\4b\4+ +\20%\v\b\2\b\21\3\27\24\0\24\0\30\27\25\30\22\0\22\3\0%\0\5\xf2\0\20"\0\24\n$\x020\2\0\5\2\5\2%\'\5\x87\1\5\'%2\25\2\25\22%\aB\a\5\a5G\5\aE\a\5\a\xd2\1\4\v\20[\0\v%\v'
b'\b\2\b\21\3\27\24\0\24\0\30\27\25\30\22\0\22\3\0%\0\5\xf2\0\20"\0\24\n\24`\xb5\1\27U\a\25\27%\2%\x025\22%\a5\2eB\25\xd2\2\4\0[\20\33%\v(\21\3\27\24\0\24\0\30\27\25\30\22\0\22\3\0%\0\5\xf2\0\20"\0\24\n\4`5\2%\'%\a\xf5\0\27U\2\5b\5\2\27\x92\1\5\1\5B%2\25'
b'\24\xb2\1\4\33@\33\0\v%\v(\21\3\27\24\0\24\0\x185\30\22\0\22\3\0E\xf2\0\20"\0\24\n \33\5\v\1%\x025\a\25gE\27E\a\x85\x017\5\2e\2\xa5\1\x025\xf2\1\33@\33\20%\0(\21\3\27 \24\0\30\25\21\30\22\20\1\3\0%\2\5\xf2\0\20"\0\24\n\20\33\25\1\5\22\5\2e\a\5\a\25\x17'
b'5\'5\27%\a5\'\xa5\1\2\xa5\1\x015\xe2\1\1+\20\33\0\v\20%\1"\20\3\27 \22\0\22\27\x102 \3\0%\0\5\xf2\0\20"\0\24\n\33\1E\2\1\xf5\0\a\25\aU\a\5\'\25W\5\'\25\'U"\25\22\25B\xf5\0\xc2\1\4\1\33\20\33\0+\20\xb5\4\0\5\xf2\0\20"\0\24\n\0\5\x125\22\xa5\1\a\25\a57'
b'\x057\25G\5G5\27\25\27\5\2\25B\x85\1\xa2\1\4\33 \x8b\1% T\30\25\2\b`\23P%\0\5\xf2\0\20"\0\24\n\25\22\x052U\a\x85\1\27E\x97\x015\'\5\27\5\a\5\a\xb5\1\x125\2\5\2\25\x82\1\4\xf0\0K\x105\20\xf4\0\30\25\30@3K%\0\5\x90\1"\0\24\n\x025\2\x85\1\a%\27E\a5\x87\1U'
b'\xf7\0\x95\x0175\a%\22\5b\4;\0K\0\v\0\v\25\x005\x94\1\5\4\b\25\30\0Ck%\0\5\x90\1"\0\24\n5\2\25\a\xa5\1\'\25\xf7\0\25\27\5\'\25G\5W\x157\5\a\5\27\xc5\1\xf2\0\xe0\1\21\0\1%\4\x82\1\5\2\0\2\25\x183\25A\v%\0\5\x90\1"\0\24\2\x91\1e\x87\6\v\1\33\x81\1b\xa0\2'
b'%\4\xf5\0\22 \b\5\30#\0e\v%\0\2+\0;\20"\0\4\2\xa0\1e\x87\6\33\21\x80\1"\4\1+\0\x8b\1\25\0\25\2E\x94\x010(#\20k\0%\20\33\0\5+\5\v\0"\0\2\0\5"\25\x87\1\5\27EGE\x175\'%g\5\27U\a\x057\25\'E\22\5\2\24;\0\33\20;5\0\2\25\22\xb5\4 5\22\25P\a\2\5\22\5\27\5\x97'
b'\x015W\25\a\25\27\25\a\x157\5\x97\x015\a\25G\x057\25\a\25\22\5'
)

#image drawing code sample
draw_image(image, 0, 0, 160, palette, zoomx=1, zoomy=1, itransp=-1)
draw_image(image, 320, 0, 160, palette, zoomx=-1, zoomy=1, itransp=-1)

Rappelons que les interpréteurs Micropython 32 bits de nos calculatrices font appel à 3 types de mémoires :
  • La mémoire de stockage qui comme son nom l'indique stocke physiquement tes fichiers de scripts Python.
  • La pile (stack) qui référence, à l'exécution, les objets Python créés par tes scripts. Sa capacité limite donc le nombre total d'objets Python pouvant coexister simultanément en mémoire.
  • Le tas (heap) qui reçoit, à l'exécution, le contenu des objets Python créés. Il limite donc le volume global de données utilisées pour ces différents objets.

Voici quelques indications de consommation heap mesurées en Python 64 bits sur nos ordinateurs, via la méthode sys.getsizeof(...) :
  • pour un entier : 24 octets de base + 4 octets si non nul + 4 octets pour chaque groupe de 30 bits utilisés au-delà des premiers 31 bits dans sa représentation binaire
  • pour une liste : 56 octets de base + 8 octets par élément + les tailles de chaque élément
  • pour un tuple : 40 octets de base + 8 octets par élément + les tailles de chaque élément
  • pour une chaîne : 49 octets de base + 1 octet par caractère
  • pour un tableau d'octets (bytes) : 33 octets de base + 1 octet par octet
Ce n'est pas exactement pareil en Micropython 32 bits où nous ne disposons de plus pas de la méthode sys.getsizeof(...) pour des mesures fiables, mais le fonctionnement en reste similaire.

Dans tous les cas comme tu peux le constater le langage Python a le très gros défaut d'être un énorme consommateur de heap, mémoire qui sera bien souvent le facteur le plus limitant pour tes projets sur calculatrices. Rappelons les pires modèles sur ce critère :
  • NumWorks avec seulement 64,9 Ko de heap si ta machine est verrouillée sur le firmware officiel
  • éditions Python des TI-83 Premium CE et TI-84 Plus CE avec encore bien pire 19,7 Ko de heap
Voici maintenant les pires modèles sur le critère de l'espace de stockage utilisable pour les scripts Python :
  • éditions Python des TI-83 Premium CE et TI-84 Plus CE qui en pratique n'autorisent que 80 Ko d'espace de stockage pour les scripts Python (si on les dépasse, l'application Python refusera de se lancer, et il faudra archiver ou supprimer des scripts jusqu'à redescendre en-dessous de cette limite)
  • NumWorks avec encore bien pire 43 Ko si ta machine est verrouillée sur le firmware officiel
Des modèles qui cumulent les inconvénients.

Prenons aujourd'hui en exemple l'image ci-contre utilisant 12 couleurs différentes.

Comme déjà expliqué, img2calc a justement été conçu en priorité pour réduire la consommation en heap et stockage. Pour cela img2calc mutualise deux approches :
  • La compression de ton image au format RLE.
  • Le compactage des données, avec l'utilisation des types d'objets Python les moins gourmands en mémoire :
    • des tuples plutôt que des listes pour la palette de couleurs (utilisable comme des listes, mais au contenu non modifiable à la différence)
    • des bytes plutôt que des chaînes ou listes pour les données de la compression RLE (type d'objet Python s'utilisant comme une chaîne de caractères mais optimisé pour le stockage d'octets)
Depuis la mise à jour de janvier 2022 et selon le modèle cible choisi, img2calc pouvait te générer les couleurs de la palette sous 5 formats différents.

Le format de couleur le plus courant est le tuple (rouge, vert, bleu). C'est le seul format connu des bibliothèques graphiques :
  • ti_draw (TI-Nspire CX II)
  • ti_graphics (éditions Python des TI-83 Premium CE et TI-84 Plus CE)
  • casioplot (Casio Graph 90+E et fx-CG50)

En cibant l'un de ces modèles, voici la palette obtenue avec img2calc :
Code: Select all
palette = (
(0,0,0), (104,40,120), (136,112,80), (80,192,0), (248,132,24), (160,168,160), (248,252,0), (0,252,248), (248,0,0), (248,252,248), (248,172,176), (0,0,248)
)

C'est le pire cas niveau consommation mémoire. Les données de cette petite palette 12 couleurs de rien du tout, occupent en effet ici :
  • 158 octets en mémoire de stockage
  • $mathjax$40+12\times\left(8+40+3\times\left(8+24\right)\right)+26\times 4$mathjax$
    soit déjà 1,872 Ko à l'exécution en mémoire heap

En plus des tuples (rouge, vert, bleu) précédents, la bibliothèque graphique kandinsky des NumWorks gère 2 autres formats de couleurs :
  • chaînes hexadécimales "#RRVVBB"
  • chaînes identifiant certaines valeurs de couleurs avec leurs noms ou initiales
Puisqu'il y a ici le choix, c'est pour chaque valeur de couleur qu'img2calc opte pour le format le plus économe en mémoire :
Code: Select all
palette = (
"k", "#682878", "brown", "g", "orange", "#a0a8a0", "y", "cyan", "r", "w", "#f8acb0", "b"
)

Les données de la palette n'occupent ici plus que :
  • 100 octets en mémoire de stockage
  • $mathjax$40+12\times\left(8+49\right)+1+7+5+1+6+7+1+4+1+1+7+1$mathjax$
    soit 766 octets

Pour la HP Prime, un seul format de couleur est reconnu par la bibliothèque graphique hpprime, mais il est bien plus intéressant en terme de mémoire : l'entier 24 bits.
Code: Select all
palette = (
0, 7022972, 9269841, 5358336, 16746267, 10922151, 16776960, 65535, 16711680, 16777215, 16755894, 255
)

Ici nous avons :
  • 112 octets en mémoire de stockage
  • $mathjax$40+12\times\left(8+24\right)+11\times 4$mathjax$
    soit seulement 468 octets en mémoire heap

Le programme Micropython permettant notamment de rajouter le Python sur les anciennes TI-Nspire CX, TI-Nspire CM et TI-Nspire monochromes, inclut une bibliothèque graphique nsp gérant elle aussi un seul et unique format : l'entier 16 bits.
Code: Select all
palette = (
0, 26959, 35722, 22016, 64547, 42324, 65504, 2047, 63488, 65535, 64886, 31
)

Cela nous donne :
  • 86 octets en mémoire de stockage
  • $mathjax$40+12\times\left(8+24\right)+11\times 4$mathjax$
    soit 468 octets en mémoire heap

Enfin, traitons du cas de l'application de mathématiques intégrée KhiCAS, disponible pour les modèles couleur TI-Nspire CX II, anciennes TI-Nspire CX, NumWorks, Casio Graph 90+E et fx-CG50.

img2calc choisissait ici parmi 2 formats de couleurs :
  • tuples (rouge, vert, bleu)
  • chaînes nommant les couleurs mais avec quelques différences par rapport aux NumWorks : uniquement des noms complets (pas d'initiales), et avec un peu moins de couleurs reconnues
Code: Select all
palette = (
"black", (104,40,120), (136,112,80), "green", (248,132,24), (160,168,160), "yellow", "cyan", "red", "", (248,172,176), "blue"
)

Les données de la palette occupaient ici :
  • 156 octets en mémoire de stockage
  • $mathjax$40+12\times 8 + 5\times\left(40+3\times\left(8+24+4\right)\right)+7\times 49+5+5+6+4+3+0+4$mathjax$
    soit 1,246 Ko à l'exécution en mémoire heap

Résumons les consommations, du meilleur au pire :





tas/heap
(octets)
stockage
(octets)
nsp
468
86
hpprime
468
112
kandinsky
766
100
graphic
1246
156
ti_draw
ti_graphics
casioplot
1872
158

Une économie de mémoire fort modeste par rapport à tout ce que nous venons de survoler, les scripts générés pour KhiCAS se classant alors à l'avant-dernière place niveau consommation mémoire.

Or la bibliothèque graphique graphic de KhiCAS reconnaissait un autre format de couleur fort intéressant mais non utilisé ici, l'entier 16 bits. Un oubli fort regrettable de notre part, ne rendant ainsi pas honneur aux formidables possibilités de KhiCAS...

16353Et bien bonne nouvelle, la dernière mise à jour d'img2calc corrige cet oubli.

Les 3 formats de couleurs gérés sont désormais correctement pris en compte lorsque l'on effectue une conversion pour KhiCAS :
  • tuples (rouge, vert, bleu)
  • chaînes nommant les couleurs
  • entiers 16 bits
Seul le choix le plus économe en mémoire est retenu pour chaque couleur, et voici le résultat :
Code: Select all
palette = (
0, 26959, 35722, 22016, 64547, 42324, 65504, 2047, 63488, "", 64886, 31,
)

Les données de la palette occupent donc ici :
  • 84 octets en mémoire de stockage
  • $mathjax$40+12\times 8 + 11\times 24 + 10\times 4 + 49 + 0$mathjax$
    soit 489 octets seulement à l'exécution en mémoire heap

Résumons suite à cette mise à jour :





tas/heap
(octets)
stockage
(octets)
nsp
468
86
hpprime
468
112
graphic
489
84
kandinsky
766
100
ti_draw
ti_graphics
casioplot
1872
158

Les scripts générés pour KhiCAS se classent maintenant clairement parmi les meilleurs niveau consommation mémoire ! :bj:

Bonnes conversions à toi, et n'hésite pas à nous montrer tes projets ! ;)

Liens :

12 graphiques TI-HP émulées en ligne chez Internet Archive

New postby critor » 30 Jan 2023, 20:32

Lorsque nous consultons les sites des différentes constructeurs de calculatrices ou autorités de réglementation des examens, nous utilisons régulièrement la WayBackMachine (littéralement machine à remonter le temps) par Internet Archive. Elle nous permet d'affichage des sauvegardes d'anciennes versions des pages, et de mieux t'informer sur les dernières nouveautés.

L'Internet Archive est un organisme à but non lucratif américain, ayant pour objectif de préserver la connaissance humaine et de la mettre à disposition de tous dans une sorte de "bibliothèque d'Alexandrie en ligne".

Nous parlons de données, mais elles sont loin de se limiter aux seules sauvegardes de sites Internet, ce n'est qu'un aspect disponible. Bien d'autres choses sont archivées et disponibles : images, musiques, vidéos et même logiciels.

Un projet pantagruélique occupant à ce jour plusieurs milliers de téraoctets.

Dernière nouveauté dans la bibliothèque de l'Internet Archive : le tiroir des calculatrices.

Tu peux y retrouver plusieurs calculatrices graphiques sorties entre 1990 et 2002. Un seul clic sur une de ces calculatrices et elle reprend immédiatement vie grâce à l'émulateur en ligne MAME ! :favorite:

Au menu du tiroir, nous avons donc plusieurs modèles Texas Instruments :
  • 1990 : TI-81 avec ROM en version 1.8K
  • 1992 : TI-85 avec ROM en version 10.0
  • 1993 : TI-82 avec ROM en version 19.0
  • 1995 : TI-92 avec ROM en version 1.11
  • 1997 : TI-86 avec ROM en version 1.6
  • 1998 : TI-73 avec OS en version 1.60 sur un Boot en version 1.3005
  • 1998 : TI-89 avec OS en version 1.00
  • 2002 : TI-Voyage 200 avec OS en version 2.09

Sont également présents des modèles du regretté Hewlett Packard :
  • 1993 : HP 48GX avec ROM en version R
  • 1995 : HP 38G avec ROM en version A
  • 1998 : HP 48G+ avec ROM en version R
Une HP 39G (2000) est également présente, mais elle semble cassée. L'amorçage ne va pas plus loin que le Boot Code qui affiche systématiquemetn un message "No System".

Tout ceci nous rappelle le projet de site TI-Emulation (archive) porté par nos membres Persalteas et AlexRider38, qui avaient hélas dû renoncer face à l'hostilité de Texas Instruments, préoccupé par le fait que les fichiers permettent d'utiliser gratuitement ses produits sur tablettes et smartphones.
Ou encore notre émulateur de TI-z80 monochromes en Flash, qui pendant des années t'a permis d'essayer les programmes directement en ligne sans avoir à les télécharger et installer pour cela, avant de disparaître avec la mort de cette technologie.

Espérons que cette fois-ci sera la bonne. Car il est important de sauvegarder et préserver le formidable patrimoine éducatif développé par Texas Instruments pendant que nous l'avons encore sous la main.

D'ailleurs justement, quelque chose que nous avions développé et qui manque à ce jour : c'est la possibilité de choisir la version à émuler, ainsi que celle de charger un programme. ;)

Lien : https://archive.org/details/calculatordrawer
Source : https://blog.archive.org/2023/01/29/a-c ... t-archive/

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
753 utilisateurs:
>709 invités
>37 membres
>7 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)