From 796ba8a2c0f6def5034f5efc927dff0c46f5cb87 Mon Sep 17 00:00:00 2001
From: Benjamin Koltes <benjamin.koltes@student.ecp.fr>
Date: Tue, 29 Mar 2016 13:55:32 +0200
Subject: [PATCH] triangles

---
 __pycache__/camera.cpython-33.pyc             | Bin 1100 -> 1100 bytes
 __pycache__/intersection.cpython-33.pyc       | Bin 1765 -> 2619 bytes
 __pycache__/operation_vector.cpython-33.pyc   | Bin 6254 -> 7430 bytes
 __pycache__/raytracer.cpython-33.pyc          | Bin 3415 -> 3415 bytes
 __pycache__/scene.cpython-33.pyc              | Bin 2054 -> 2548 bytes
 intersection.py                               |  32 ++++++++++++++++++
 operation_vector.py                           |   2 +-
 scene.py                                      |   7 ++++
 .../script_triangle_multi.cpython-33.pyc      | Bin 0 -> 2416 bytes
 scripts/script_triangle.py                    |  24 ++++++-------
 scripts/script_triangle_multi.py              |  18 +++++-----
 scripts/triangle.png                          | Bin 0 -> 1541 bytes
 scripts/try.png                               | Bin 1610 -> 955 bytes
 13 files changed, 61 insertions(+), 22 deletions(-)
 create mode 100644 scripts/__pycache__/script_triangle_multi.cpython-33.pyc
 create mode 100644 scripts/triangle.png

diff --git a/__pycache__/camera.cpython-33.pyc b/__pycache__/camera.cpython-33.pyc
index 7ac9cd14ce80218af0287c5e0f604d59b9c1e5cf..9162902ab8f1d7ebd4d0c8cfd5ee667372bea14a 100644
GIT binary patch
delta 16
XcmX@ZafX9^9uF^9PtLE6?5->TFW3cS

delta 16
XcmX@ZafX9^9uF^<&8>GE*<D!xFaQO1

diff --git a/__pycache__/intersection.cpython-33.pyc b/__pycache__/intersection.cpython-33.pyc
index fae1ae74b367b9008f501976711328e4472c8010..b1778d74fdf9ad5c715e15622e77de29694fd838 100644
GIT binary patch
delta 1397
zcmaFLyIZ7w9uF^<Xy&glRSpJ*WCkR_%)r3lz`(#zoXWt!kix)_!pM-rzz_muF+x~O
z3^_~;xy%ev%nZ3K3{fl$jP5DS3@I!OEes&CnTa8al_7<dA%zVj62-=l!p@Mw0cNu^
zq;N8%m~nwQ91JPk48a;a3=9mJAU9|*GB7Zdf(R`QCJ>W_fq@~hBr&fP#4E_0SoE1q
zh=GAYPjB)}Mp;I-$=ey*H6Q{pnRz9tMa8MfC7JnodIgoGAVWQo#8@X!VN&52W?*1o
zWnf@%26?fbY4dTW$&B?c7)qEJY8V)r85v4=8L~MTin5t%7#OnnK!REP3=&y949yG-
zwY*@y0GLFG@-fu#GSu)fI6_tNGt@9M)bKNiq%bpNGcgo>WlUjU2nLzQ&rrj}AOVts
zs*tV~V5niLXQ&YX=@AjH6=Wz8WT+8@+5pl6af1LuGYdnp9TV6jeg<x+{t_XOK9GUU
zj11BuwL%Of++giOAQPII8G=iMq4AKy&d|)r2zH7F2Ll6xUnVF>GeH5Y0uK9hPy{eA
zJg^6ce{v}(A*AM|fO!fUB9j|fW_Xo?bcPgVCg!E*q=Mt5%n(8uKq#Y9eg+1Hg8a<9
z63;xiLXc63NyVk0fG;S@%q!6lo-D;$Y7I6!6HI1-NoYJ*fH?)FYzzzxdHF@Ti8&e|
z$AO7bNOVs=$12Ch4T?mM$)8va>*bh)7{wUH7zG#w7+IJk8Tpvx7+IKP83mY2IYFrl
zmJpIb9tIf(G8^PBa6$kjcu<gnVut}7NshHF;GhMGFhWIG8ERM<YFHUWQWzPsSs98f
z7*d!Rf>W3of>Y`l7=krGM*D%oGQ<s$d_#&#Q^7uWOUx-w)d1NG4yyu4$Q2lYJ(~z7
zlfa>#Twn;Ljlf<86HtF+By&)V6erf_rUqxGq}qZ4gbU<7Mj=Kaa8Q7wtT+)O5BELD
zsqC<9;LX6mP{II8F*RVX)-Z!oTahzNkcj~#jwZ+q7G#2|tWRNN2nL4+C?G)L>KEds
z0isdtF9q3)79b!Yu;&ZFBrG66g+Mac=U@Vt_o2zn2sypEf<gfl&J2w9j4VvplBAyo
z=VTK$WeJewxrrqiV22?UG?T;F<jql?4z&r{BCyL41k{a_cd{u7fJz@OMlMD%CSf)n
HBOVR_7DoJf

delta 561
zcmdlj@|3rJ9uF_qt>?GGcC#=rBr_lZW(EcZ2L=X)Vsi!th7<;d6h?*|28IwQi;*G3
zJ%x!Og_)s+0Yo-4F+?#jq_8lgu!2OQm>E*o7=ks}85kHcL56BDGB7Zdf(Wf-5D5|k
z(Gw3nGXdG+Y!wq)oLW>I<CL10m6)5E7vqwjT$-DjSArzuo>>x;l3Es@lb=4>kVBL+
zK0Y%qvm`#Ab@Ca;cJhpgWKv{gnOx1J!q3aVz`)ADz~Bt>^K{0|>zF1pa)5mvtid|j
zkX43BgLiT=>kJU(%2t}J0rCQvC?&@OF`0QKsYS)9$t9Wjd3ptvrJSIkf{Af~9HBQ^
zlHE`cRl-k$WpV|lauN>%1A`|_b!L7Zsw%Lv5CmBc1cmTqIWAr<HU<U;E=DdUVKx8;
CHj$$M

diff --git a/__pycache__/operation_vector.cpython-33.pyc b/__pycache__/operation_vector.cpython-33.pyc
index 6985a18e0b64f2524fb9bd0aa6ba3ed8b3334944..e84bbd2848fce4b6cdc33127148be27cedf31906 100644
GIT binary patch
delta 1681
zcmaE7&}PLskB66Q^}|nLcQ<mTF`2k9Ffce<#e^2878S=hrRHTN=4R%_xa237=BDPA
zAPKo=mc*o_mc{4fr%!GW6`h>R&pvq~(;Bi3*c`#E!brC6$^D#cljpL$Cf|U?taW5-
z-fY7rPNCaN*vYqkGB3v#vfV!U4#y1gHTQFxC9{B%3<Cp0u^a;fLkc592?Ik3BSQ@X
zLlzT5GXq02BM6D7FfoV+YcMk~F!+_SGcYiOr6!l;7ip9-GB7Y`g2hWglEo!Or62=y
zGK)(}Ss54@lJoP6QYLXrlJ7<*uIuD$?&oCRY|YI^VeBUHlvCmaw#mPEQYkWEa|5po
z*?y3myqj-2+178)<+mZ*YSGO{1d_?uJ=sa<KiLikmnliY<mb!HzlH0`bNk{3QSvl`
ai{ja0&E$L9QoNpg&6mZK$=4hxAqxOeiAT@?

delta 483
zcmZp(dS}2nkB67*n!@|A3mZApnApS^7#Q^QCMQUWPTs+^8Hu}j3$qF%5`XdoF}BI-
ztgn%UqS@+@xSN&O#W8era3GXOOHK~v+<>HGvJck`WG=`GV{U`V2|S!;A`A=+DU1vy
z3=B043|Wi}%?u39j11zz8cYlf41T3-3=9lmsmUezMPPwaW(Ed^;*z4td$^U6P1NAI
zj?8@^#<tmymmR~EOZdvslugd!Pem2t*sLHRg``t*a=YMkBqf{Eg=~<dMK`|@PDbWW
zo+0`lN%`alVl7DA&1=Q$VX7A=NWz$t6Qm_4ua&BYtCXICU`kGQl!=FPB}FH{l#vAh
DB6Mm;

diff --git a/__pycache__/raytracer.cpython-33.pyc b/__pycache__/raytracer.cpython-33.pyc
index 89eb08a1605bcffef331f543624caa5026ea71a1..02d8c7a6d69ecbd0f4849f8bd080bbabd9c1a4f9 100644
GIT binary patch
delta 16
XcmcaEbzO>m9uF_qR+i5j*#me1F~tRJ

delta 16
XcmcaEbzO>m9uF^<lI4eu>;b$0F7E{k

diff --git a/__pycache__/scene.cpython-33.pyc b/__pycache__/scene.cpython-33.pyc
index ac3f713769654225108a1111d89b0afaa5f39b8a..89952a162f1aa67ab673f4253845d919d5613d25 100644
GIT binary patch
delta 367
zcmZn@_#&)4kB66Q=Fd-I>zElBk{OTyGXn#I0|Ns?anwX*H%a#t4u%v?h86}8+04Wc
z#ln!n#SpB)y)j>aNj{_~GchkcCpDQBY5<64Vqjo!1{t6+c^;E`ND2c(um&Ro1B0Ii
z3j+f~DM-4^074l;D5Fvi1_p-Q#FEsa%)}fGkRhcYwZ*A9X%H1?>L-UXn#gg1>;P$G
zVB`eDQb7g=2AGp3UuCXQfN?lMN<kJ2FoLauiBB$M5t}$eYjZV|1tX*2<Soog83i^+
zv9L2TN=;5;-M}a}S(t4dqvGU4Y@1~yL1wTqFfa%(^04qQmx5dwoSd4M>Zidvc_O<8
XJJit0o7p{iK+fV~5@r)-7v=;2Q0hme

delta 140
zcmew&+$NwrkB66w<L<jK4rT_1WCkR_%)r3lz`(#z>^@Q1jV*<PAy|WRW0L^W<~SA;
z#>olHtdpm+E@b4~Y{|yX$S6G7k$nTB_~cLQ>lmdbFXY%PBLvdQ#=yWJz{tbG!(7VB
gz`zikoSK*Fr@=D0fKy}gQch<skUSTYFq<$Z0I+5oApigX

diff --git a/intersection.py b/intersection.py
index 9995590..13b87b9 100644
--- a/intersection.py
+++ b/intersection.py
@@ -1,5 +1,6 @@
 from operation_vector import *
 from scene import *
+from math import atan, pi
 
 class Intersection:
     def __init__(self, position, normal, object):
@@ -35,7 +36,38 @@ def intersect(objet, ray):
         else:
             return Intersection(position, -(position - centre).normalized(), objet)
         
+    elif type(objet) is Triangle:
+        i = (objet.v1 - objet.v0).normalized()
+        j = (objet.v2 - objet.v0).normalized()
+        n = (i^j).normalized()
+        if l*n == 0:
+            return None
+        
+        px = ((objet.v0 - o)*n)/(l*n)
+        p = o + px*l
+        
+        if not(pointInTriangle(p, objet.v0, objet.v1, objet.v2)):
+            return None
+        
+        normal = -n*((l*n)/abs(l*n))
+        return Intersection(p, normal, objet)
+    
+    else:
+        print('c',end = ' ')
     
     
         
 
+def sameSide(p1, p2, a,b):
+    cp1 = (b-a)^(p1-a)
+    cp2 = (b-a)^(p2-a)
+    if cp1*cp2 >= 0:
+        return True
+    else:
+        return False
+
+def pointInTriangle(p, a, b, c):
+    if sameSide(p, a, b, c) and sameSide(p, b, a, c) and sameSide(p, c, a, b):
+        return True
+    else:
+        return False
diff --git a/operation_vector.py b/operation_vector.py
index fe5ffd2..c0a4af0 100644
--- a/operation_vector.py
+++ b/operation_vector.py
@@ -45,7 +45,7 @@ class Vector:
         return vector1 + (-1 * vector2)
 
     def __repr__(self):
-        return 'Vector' + str(self.coord())
+        return 'Vector(' + str(list(self.coord())) + ')'
     
     def __str__(self):
         return '/ ' + str(self.x) + '\n| ' + str(self.y) + '\n\\ ' + str(self.z) + '\n'
diff --git a/scene.py b/scene.py
index c18a96b..c252592 100644
--- a/scene.py
+++ b/scene.py
@@ -6,6 +6,13 @@ class Sphere:
         self.radius = rayon
         self.material = material
 
+class Triangle:
+    def __init__(self, v0, v1, v2, material):
+        self.v0 = v0
+        self.v1 = v1
+        self.v2 = v2
+        self.material = material
+
 class Material:
     def __init__(self, color, ambiant, diffuse, specular, shininess, reflection):
         self.color = color
diff --git a/scripts/__pycache__/script_triangle_multi.cpython-33.pyc b/scripts/__pycache__/script_triangle_multi.cpython-33.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..7fb3a5a80b95934132e49a6ce92b5e23a35fa7d7
GIT binary patch
literal 2416
zcmbQo!^?Fu=U3PdHU@@d1|-1Fz`)?Zz`#)K%gn%#!oZNi$dJRp5XHcd%D|At$dJXv
zkix{!%*en9l4EAbVP?o>VTfXZ@L3pgSQ$b<GAs-^Y;YDkgvH2^!@&^62{x6LA%}}0
zmzyDq8={kuA%}+{iU%ym$dJR!5XH-o!p4xo&d|cZ5XHxkBFqrO%n-%T5GBA6CCHG<
z!jQ_(kSf5C!o|?c%n-%QkSfHGDh$@n01`}R201c?n*oZzCO5M&M2R4&<N~S3sZtcC
z609tRfdQvVF(j2-NVbF7DO?OGU_XOw7iUNjXNZzuNR?nn;bRa^5nzx=;bstyl7u;)
z4<w!{$si7~EJ_M2A;FL$i6$WpmXKyhkwKG?0ZTyQjt}bQC|QP7IfhgzhE!>WR9S{p
zF@|OqhA4Tkpfp3O3|LSUET{k$l!6J0fCUv9Qk58*85p8i8B&#z%!h>uDCA+Dg*d#K
zi6KgbA(fROOO+v20TdUEP>v!pM;^{mV@Oqja5x#V)M2s9&yWU=$S4hlR859dEs%IK
zBS>A8HcUhS#BF9|h|&Rz@GxZQGNfuVr0OuFGBczzf*b)N1wrg)R*>Q-J%&_$h7>`D
zY$k>xPv%r!hAaby6tFo_h775O3|U4DseBBndJG_M7=uMjK>lY0$(ce}oD5lJ45`K-
z^RmoA?gFJoesF5kU`XX=ND*R4)c_g5m<P^9!5Xp*3=El|tmaqB#K6Fyr>DWlz`#(-
z#=yYfoS2(hlnCL21hpVckW^-Fabj6&GDsAp7bFD2&Y(OBB5D{IVpth!85wGs7;2dr
zYFQX+Ss6;enYDz8p@x|ui<zN@k)ehO<dzy1kVp+HC|0vrKptskWC#XZ=BL35at+93
zc?G2)c4ARcVr3~O0|P@zQDSmxJctLfx+t+SKCuL>Bso97C`AJ#SPF7r37E_TlUZPo
zC4)T%R$H8$nwMJ2!@$6hmlR)=nwFDVk(r;T0rC`>C=CP!gjGyvacWU<j8ke}R$^{u
zUW`kAa%paAUI~(rduB;YN@`hrPJVh!adJ^+K}j)`jxQ<7Ow3EqNsZ4f%_+&$E2u0L
zLw0|BZfQwQW<gPYa%yogA1DY}K=w0=GU8E}c>)x1A|L|f$#jqo28IXrnJ<_b7&19P
z;-FB=WCpQ7=9PlP;^T7@GxOr(!9IpLORpd=T?4ERY$lih8Jxb#C*nobw%_(p2Dd}H
zmay2ad2iJm(qlbR-Z+YJJ3ys=+h_j&|NlRn2V?993u{<_A`xUmab<BS$T0<pB^ltT
zNGvEw%}W6@p|JvrH%Q7uiXc$T=VYd5lz?NtD6tY8`9)wAd8N4pmEgpiS5PXzz`&53
zSW=LaUy_rVq?ehSn4StY9g<?f+A~X1i%RnIbBas(L8?J<0uB7kymUN44zZ&GLREr;
z5INC+1K2mQB(*3rF$ZjCSZZ=feo?6?$QForX?$@(Mru)Nd{RzoX)0Ekvecpy>@r39
zrRk}q;#f^f%uCKl1t;-jFqs2(WtjnlGK5e@5Xu<r(hz8(ECr=FSW<|G*ue`<p3p=K
za!@IX2*~l^pbrM;9#CcsE&v5MD1tzBbxvt+W@=GtDHj6+Lt;uwe11|^YBD75KwL;n
zg5tC)wJ5*16r?3FEiDt|1yJh9$t;HC<f6p9^i*(yDatR0s7ubzDb3A;unUUvQ%aK|
zN|O^o!3Ig=d5O8H@$q1N0r~kkU`7Fm0ZM|oi3O$HAa_A5j0f>SPD#$mFNWBam7kdh
z_8z3H0lBUywKyZOAQfCBAP5>24j@n1<mRW8=A_zz@^Eno0|NsOqX3ftBNrI*FbXj8
zF!C_*u<$bqF={~}8>0}TBp8Y^f*}(pqb?&a2r}_9N-zq6)H3lfg7kpQkz)h^mE<1!

literal 0
HcmV?d00001

diff --git a/scripts/script_triangle.py b/scripts/script_triangle.py
index 4dac2c8..b77c4cc 100644
--- a/scripts/script_triangle.py
+++ b/scripts/script_triangle.py
@@ -14,21 +14,21 @@ materiau_sphere_rouge = Material(Vector((1,0,0)), .5, .3, .3, 100, .3)
 materiau_sphere_blanche = Material(Vector((1,1,1)), .5, .3, .3, 100, 0)
 materiau_sphere_verte= Material(Vector((0,1,0)), .5, .3, .3, 100, .3)
 c = (8+2*(3**.5))**.5
-l = 0+0*((c**2 - 4)**.5)
-v0 = Vector([0,0,2+l])
-v1 = Vector([0,2,2+l])
-v2 = Vector([2,0,2+l])
+l = ((c**2 - 4)**.5)
 v3 = Vector([0,0,2])
-#triangle_rouge = Triangle(v0,v1,v3,materiau_sphere_rouge)
-#triangle_vert = Triangle(v1,v2,v3,materiau_sphere_verte)
-#triangle_bleu = Triangle(v0,v2,v3,materiau_sphere_bleue)
-triangle_blanc = Triangle(v0,v1,v2,materiau_sphere_blanche)
+v1 = Vector([2,0,4])
+v2 = Vector([-1,l,4])
+v0 = Vector([-1,-l,4])
+triangle_rouge = Triangle(v0,v1,v3,materiau_sphere_rouge)
+triangle_vert = Triangle(v1,v2,v3,materiau_sphere_verte)
+triangle_bleu = Triangle(v0,v2,v3,materiau_sphere_bleue)
+#triangle_blanc = Triangle(v0,v1,v2,materiau_sphere_blanche)
 lumiere = Spotlight(Vector((1,1,0)), Vector((1,1,1)))
 scene = Scene()
-#scene.add_object(sphere_blanche)
-#scene.add_object(triangle_bleu)
-#scene.add_object(triangle_rouge)
-scene.add_object(triangle_blanc)
+scene.add_object(triangle_vert)
+scene.add_object(triangle_bleu)
+scene.add_object(triangle_rouge)
+#scene.add_object(triangle_blanc)
 scene.add_light(lumiere)
 affiche = raytracer_render(camera, scene)
 imsave('try.png',affiche)
diff --git a/scripts/script_triangle_multi.py b/scripts/script_triangle_multi.py
index f3fabc5..b51df60 100644
--- a/scripts/script_triangle_multi.py
+++ b/scripts/script_triangle_multi.py
@@ -25,18 +25,18 @@ c = (8+2*(3**.5))**.5
 l = (c**2 - 4)**.5
 v0 = Vector([0,2,2+l])
 v1 = Vector([3**.5,-1,2+l])
-v2 = Vector([3**.5,-1,2+l])
+v2 = Vector([-3**.5,-1,2+l])
 v3 = Vector([0,0,2])
-#triangle_rouge = Triangle(v0,v1,v3,materiau_sphere_rouge)
-#triangle_vert = Triangle(v1,v2,v3,materiau_sphere_verte)
-#triangle_bleu = Triangle(v0,v2,v3,materiau_sphere_bleue)
-triangle_blanc = Triangle(v0,v2,v3,materiau_sphere_blanche)
+triangle_rouge = Triangle(v0,v1,v3,materiau_sphere_rouge)
+triangle_vert = Triangle(v1,v2,v3,materiau_sphere_verte)
+triangle_bleu = Triangle(v0,v2,v3,materiau_sphere_bleue)
+#triangle_blanc = Triangle(v0,v2,v3,materiau_sphere_blanche)
 scene = Scene()
 lumiere = Spotlight(Vector([0,0,0]), Vector([1,1,1]))
-#scene.add_object(sphere_blanche)
-#scene.add_object(triangle_bleu)
-#scene.add_object(triangle_rouge)
-scene.add_object(triangle_blanc)
+scene.add_object(triangle_vert)
+scene.add_object(triangle_bleu)
+scene.add_object(triangle_rouge)
+#scene.add_object(triangle_blanc)
 scene.add_light(lumiere)
 affiche = np.zeros((nx, ny, 3))
 rows = list(range(nx))
diff --git a/scripts/triangle.png b/scripts/triangle.png
new file mode 100644
index 0000000000000000000000000000000000000000..4903dab3f31361c73814004329e1137c9c72c6d7
GIT binary patch
literal 1541
zcmeAS@N?(olHy`uVBq!ia0y~yU^oH79Bd2>3~M9S&0}C-U@3O;4B_D5;Hcq9>0n@B
z;4JWnEM{QfPXuAc752+B85mfXd%8G=RLpsM_jOTlsmQU1p~tgR1lS6uJT#CwwX{IM
z)kQ?mMeowDg}qlwp1-|k{d>xj%CxM7y19>@m}mc;yv26as>w`JwWi-$8&rikSeP0e
z6a)q{Rm3sxTrFeSbcb&@Hg6XH^}FgF_kj;#fij_2AE$?w8a-~kS;%x#+5fdk*W%6l
z<=6gGo^X$4llr`?Q4*nFU$}NAdo$fEe13i9=SG`93y&BwG`?B!IdM(gdjARkV=9<)
zIa7{r;e34Xw2>{F(gfK{CFeROH?QSPVc)|0c*UxB|3gCm`;_1OHrGKcCs<<j_1X81
z7qDy!IDbB_ob&O$)kWVVW;lqYnVRnM>)UOAeY%B>g@r_;&XHeMsavDi8qef(7`)q~
zC!DOpG&AtB<>4n0VvT1M<{Iy6DGUkSem~^%-CgGtn*~m^>}o5#`8)4_)N;X&L=&c&
z4zr8h?q^6$cW}G*ZO%p03GeSsTWQGH*t6uV)z#9iMwZJ|Cp0cC&02Bw)$RMQA0517
znIgg@d1Auz9<%&xSCeSr6AZJit=!18^Xs}hFVs~g=;nN`aGPIW{JCG~_z{*%&euz`
zrd&Ps%Y?JB<VyNnDWwV0@4W?#1w6cS-_MoGzMCY+wDZV?*CF#8*41m=ce565%-Qhr
zx$jv)kL+`*&B7kdxpHr$t)^wmpB5HMSD8?J>(7@7n#@0+trt3ah9zkB^_9!E`|iy%
zT;I&M<mK{({h}V%Hy^+1pIW7J;2@jP5yhG_nTL&JViczP_U<$PrI@_))6P3<cMGtK
zpP0P)y8fzH7g^%p*M{D;`2D$k)vmgCwewfKdbM+Zy`FGNCf|p1hh=9d&R;*rZ^GoQ
z)4y&n{W;_Dm;Wukd>^J)*sZ)AefpPf_U-A*qO;HU@BQ?>B7D9dpTUHwhDwq~2Gbri
zFt3!#pOs^s=y&ej^VB@{a*zCNQ5Saq3;Q^^XwAKRc00#wvf)=B&#J#`RsHkX;}h4X
zpXOL{F(CVTYIbP%?uF~-x;~09;?}<AR(pM&WM@W!+KHvtuCMEBf1Atyx-_Wt@A;4G
z)p~s<T)X8r#g6^^viiq-4XOr?R<mDzoGkrbeP`L9`J9)$uYW$tarr=HvXI(|u(0Qo
z?Ve9E^IsBGefw;=aIAh9i%|#X^>xuoGbf2=8@$fGejz)w|9m>{?OB{gJHBMp+zx#+
zssH!4?cMQVJc|t+-8RqCIRDtabUx3!e{&~s8ts}m@AlWbw>{S%U1;Q}W_WCK>)ViE
z14p%~@5J5}hJXB??`OX@%uRVhWJzsQZO8L(`e);vOqvBwtZB2FZy?rqX5Hz{t>$~)
zpL_jM|65~$M|_X$pMR5?6Pk4V&gcK$`}@`D<r_+Q-4wc~D&5?Wb+`KJpOr7pc5ThL
zwr=N41?$Aix2_s^zWZ-+z4eYa(@o9X`C;b+ST+^+y-w1|p8VwC>7RP{<`uHtjFdg6
z-sY9BcH&(2EDiNg{`fOhE5Efmd^=Vc8?jZcGbK7~&E8GF{zg8(ruX`4n9qd0C3$bH
zzDb-i^O>;s+4pt1uNmsy6}O}xZ5rgI7SqA~N(-wr4*uJ5fq{X6!PC{xWt~$(69AvS
BiqQZ7

literal 0
HcmV?d00001

diff --git a/scripts/try.png b/scripts/try.png
index 09abf45b713453cc820b6eca100672c98914e8f3..95846b642e6cc8cc5fcc12b1a048252d89e8c8e0 100644
GIT binary patch
literal 955
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_tsSc;uILpV4%IBGajIv5xj
zI14-?iy0XB6G519h5hnO1_tI>PZ!6KiaBrZ9L&4yAkzBq@taEiUpfi`LP8!o69lx)
zavF3`iAAkqViMa@TA}$%;Z5Si9xKV;RmVQwC{~*j-}S~K^Yxe4vddi;F@6y5S{C|J
zIN&#Di%#PNRe?<`PSYGt2ysL*DS9iU5GnXN!{MCQe1~OyY)dq2nPyt?O(^63wDL=3
z%8I%PVh6Z>G(UD&DV@^%Ry(7?`nK;^jjv5P1=<(h#5-rXtrR|TJR&!L{a$B>y&7K|
zTO@Y>4d30K?Y@%x$N>lDISY2@?96gn$)3V+`2V|h;YZ)H9al1|v|YR*@ZnqbkKB3k
zDICd9@0PU+C<<9~*`E+-EC0{-k(2Yg<YTs<ttveKzfZW)!f@xhaNGnziHwHb9<#Z=
zz2;Q!ILwjH#&*G;b7QTWh~0#i@{qaPcQc-vQEMimH-Yz(KvmtH{5}50Y;C-)>__JJ
zOnG_W-(TVP0&L%^*|-__x!5}ndpH(+mGM6)Q8kBgsf|bX7genyUdQuyLwL5^+I~oV
zvP#FJ``=2By?qbL?7#KCw@$0|@tjhmpqs;zAi~D*htIC|)s%?iUJIu%&)np)aCg0+
z4A=ZJj)2Zn4K43iB#9T;Cp*=#_<!8~us!;?#I$u!9iw{ohaJ&-;(O<Ul~{F7<`g#X
zf8zDJ-xP)Z`=$D_N-=!DSHAB|`5MNY_!-rOwYLrX_j=Y%yd1^%MCz}Ap~wR6;{DwT
zUwL1rwA?73<`BvDMCx1061`~tOM+|mRZV`pExGZYpI!IEXY7R%?Rug7%bi<lUp8`X
zckVyiX{3Kb^w;u(Oa;f~pSo}OC8LwM^7hVvXUsbfefT7@$R>{O;HyIiHYPlCn92S`
zD0A}1B{of0D-UgAd*XhQzo_#^ip|qj4(t2AX9dpe?upm8?}%P?=wwA0f78{OhNhOw
zRrEb}gxIc^KlsYzz{%E0{6};{_4~vRzIvP&d3s~XQ^ud151#&K7yQQf`lQC`f4bhT
n+W-A`Wa*QgQVFN&YxWa*r>qqDS8|bofq}u()z4*}Q$iB}D1VRF

delta 1557
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

-- 
GitLab