PeristatiqueV2.ino 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050
  1. <<<<<<< HEAD
  2. #include <BlynkSimpleEsp8266.h>
  3. #include <TimeLib.h>
  4. #include <WidgetRTC.h>
  5. #define AQUAGRA
  6. //#define AQUAZOA
  7. #ifdef AQUAGRA
  8. char auth[] = "_Fw7V6o4bPAovQ1idbetFcith6LmMnyh"; //220L
  9. #elif AQUAZOA
  10. char auth[] = "oObIhJsLplCUAhCBfwyvpBF_n_N8oqJv"; //70L
  11. #endif
  12. char ssid[] = "Livebox-7C2C";
  13. char pass[] = "566C61F61F9C925C9F3D7D79E6";
  14. WidgetRTC rtc;
  15. BlynkTimer timer;
  16. WidgetTerminal terminal(V60);
  17. //************************************************************************
  18. // Variable Global perso
  19. //************************************************************************
  20. #ifdef AQUAGRA
  21. #define RESERVE 1200
  22. #define LITRE 220
  23. #define FACTEURML 635 //Temps d'allumage de la pompe en ms pour distribuer 1ml
  24. #define RESERVEMIN 100
  25. #define STARTCa 16
  26. #define STARTKh 30
  27. #define STARTMg 7
  28. #elif AQUAZOA
  29. #define RESERVE 450
  30. #define LITRE 70
  31. #define FACTEURML 200//todo //Temps d'allumage de la pompe en ms pour distribuer 1ml
  32. #define RESERVEMIN 50
  33. #define STARTCa 16
  34. #define STARTKh 30
  35. #define STARTMg 7
  36. #endif
  37. #define POMPE0 0
  38. #define POMPE1 1
  39. #define POMPE2 2
  40. #define POMPE3 3
  41. //nombre de ml a distribuer pour remonter de +1 (mg ou kh) par litre d'eau
  42. #define FACTEUR0 0.0057 //FACTEUR CA
  43. #define FACTEUR1 0.36 //0.36ml/L = +1KH
  44. #define FACTEUR3 0.02 //FACTEUR MG
  45. const int PINPOMPE0 = 16;
  46. const int PINPOMPE1 = 5;
  47. const int PINPOMPE2 = 4;
  48. const int PINPOMPE3 = 0;
  49. float Mesure0, Mesure1, Mesure2, Mesure3;
  50. float ML0, ML1, ML2, ML3 ;
  51. float Cible0, Cible1, Cible2, Cible3 ;
  52. bool Auto0, Auto1, Auto2, Auto3 ;
  53. float Reserve0, Reserve1, Reserve2, Reserve3 ;
  54. float MLForce0, MLForce1, MLForce2, MLForce3 ;
  55. int dist;
  56. //************************************************************************
  57. // Fonction Seul
  58. //************************************************************************
  59. void Ft_Timer() {
  60. int Hmin = hour() * 60 + minute();
  61. switch(Hmin){
  62. case 0: //Calcium
  63. dist=0;
  64. AutoDistribue0(ML0);
  65. break;
  66. case 360: //Calcium
  67. dist=1;
  68. AutoDistribue0(ML0);
  69. break;
  70. case 720: //Calcium
  71. dist=2;
  72. AutoDistribue0(ML0);
  73. break;
  74. case 1080: //Calcium
  75. dist=3;
  76. AutoDistribue0(ML0);
  77. break;
  78. case 90: //KH
  79. dist=0;
  80. AutoDistribue1(ML1);
  81. break;
  82. case 450: //KH
  83. dist=1;
  84. AutoDistribue1(ML1);
  85. break;
  86. case 810: //KH
  87. dist=2;
  88. AutoDistribue1(ML1);
  89. break;
  90. case 1170: //KH
  91. dist=3;
  92. AutoDistribue1(ML1);
  93. break;
  94. case 180: //mineral
  95. dist=0;
  96. AutoDistribue2(ML2);
  97. break;
  98. case 540: //mineral
  99. dist=1;
  100. AutoDistribue2(ML2);
  101. break;
  102. case 900: //mineral
  103. dist=2;
  104. AutoDistribue2(ML2);
  105. break;
  106. case 1260: //mineral
  107. dist=3;
  108. AutoDistribue2(ML2);
  109. break;
  110. case 270://mg
  111. dist=0;
  112. AutoDistribue3(ML3);
  113. break;
  114. case 630://mg
  115. dist=1;
  116. AutoDistribue3(ML3);
  117. break;
  118. case 990://mg
  119. dist=2;
  120. AutoDistribue3(ML3);
  121. break;
  122. case 1350://mg
  123. dist=3;
  124. AutoDistribue3(ML3);
  125. break;
  126. }
  127. }
  128. BLYNK_CONNECTED() {
  129. char message[30];
  130. sprintf(message, "\nnew Connection\n");
  131. terminal.print(message);
  132. terminal.flush();
  133. rtc.begin();
  134. Blynk.syncAll();
  135. }
  136. BLYNK_WRITE(V60){
  137. if (String("Ca") == param.asStr()){
  138. Blynk.virtualWrite(V3, STARTCa);
  139. ML0=STARTCa;
  140. }
  141. if (String("Kh") == param.asStr()){
  142. Blynk.virtualWrite(V13, STARTKh);
  143. ML1=STARTKh;
  144. }
  145. if (String("Mi") == param.asStr()){
  146. Blynk.virtualWrite(V23, (ML0+ML1)/2);
  147. ML2=(ML0+ML1)/2;
  148. }
  149. if (String("Mg") == param.asStr()){
  150. Blynk.virtualWrite(V33, STARTMg);
  151. ML3=STARTMg;
  152. }
  153. }
  154. void setup(){
  155. //Pin Setup
  156. pinMode(PINPOMPE0, OUTPUT);
  157. pinMode(PINPOMPE1, OUTPUT);
  158. pinMode(PINPOMPE2, OUTPUT);
  159. pinMode(PINPOMPE3, OUTPUT);
  160. digitalWrite(PINPOMPE0, HIGH);
  161. digitalWrite(PINPOMPE1, HIGH);
  162. digitalWrite(PINPOMPE2, HIGH);
  163. digitalWrite(PINPOMPE3, HIGH);
  164. Blynk.begin(auth, ssid, pass, IPAddress(192, 168, 1, 18), 8081);
  165. setSyncInterval(10 * 60); // Sync interval in seconds (10 minutes)
  166. timer.setInterval(1000L*60, Ft_Timer);
  167. }
  168. void loop(){
  169. Blynk.run();
  170. timer.run();
  171. }
  172. //************************************************************************
  173. // Fonction Calcium
  174. //************************************************************************
  175. void AutoDistribue0(float ml){
  176. if (Auto0) {
  177. if(((ML0/4)*FACTEURML)>(1000*4)){
  178. Active1(ML0/4);
  179. }
  180. else if((((ML0/2)*FACTEURML)>(1000*2))&(dist==0|dist==2)){
  181. Active0(ML0/2);
  182. }
  183. else if (dist==0){
  184. Active0(ML0);
  185. }
  186. }
  187. else{
  188. Blynk.notify("Calcium est Arreter");
  189. }
  190. }
  191. void Active0(float ml) {
  192. digitalWrite(PINPOMPE0, LOW);
  193. delay(FACTEURML * ml);
  194. digitalWrite(PINPOMPE0, HIGH);
  195. Reserve0=Reserve0-ml;
  196. Blynk.virtualWrite(V4, Reserve0);
  197. char message[30];
  198. sprintf(message, "Distribution %.1fml de Calcium a %d:%d\n", ml,hour(),minute());
  199. terminal.print(message);
  200. terminal.flush();
  201. if(Reserve0<RESERVEMIN)
  202. Blynk.notify("Penser a remettre du Calcium");
  203. }
  204. //Mesure
  205. BLYNK_WRITE(V0) {
  206. if(Mesure0==0){//Si nouvelle connection on recupere juste la valeur enregistrer sur le server
  207. Mesure0 = param.asFloat();
  208. return;
  209. }
  210. Mesure0 = param.asFloat();
  211. ML0 = ML0 + (((ML0/Mesure0)* Cible0 - ML0)/4.0);
  212. MLForce0 = (Cible0-Mesure0)*FACTEUR0*LITRE;
  213. if(MLForce0<0)
  214. MLForce0=0;
  215. ML2 = (ML1+ML0)/2.0;
  216. Blynk.virtualWrite(V23, ML2);
  217. Blynk.virtualWrite(V3, ML0);
  218. Blynk.virtualWrite(V7, MLForce0);
  219. }
  220. //Cible
  221. BLYNK_WRITE(V1) {
  222. if(Cible0==0){//Si nouvelle connection on recupere juste la valeur enregistrer sur le server
  223. Cible0 = param.asFloat();
  224. return;
  225. }
  226. Cible0 = param.asFloat();
  227. ML0 = ML0 +(((ML0/Mesure0)* Cible0- ML0)/4.0);
  228. ML2 = (ML1+ML0)/2.0;
  229. Blynk.virtualWrite(V23, ML2);
  230. Blynk.virtualWrite(V3, ML0);
  231. }
  232. //En route
  233. BLYNK_WRITE(V2) {
  234. if ( param.asInt()){
  235. Auto0 = true;
  236. }
  237. else{
  238. Auto0 = false;
  239. }
  240. }
  241. BLYNK_WRITE(V3){
  242. ML0=param.asFloat();
  243. Blynk.virtualWrite(V3, ML0);
  244. }
  245. BLYNK_WRITE(V4){
  246. Reserve0=param.asFloat();
  247. Blynk.virtualWrite(V4, Reserve0);
  248. }
  249. //RAZ Reserve
  250. BLYNK_WRITE(V5){
  251. if(param.asInt()){
  252. Reserve0=RESERVE;
  253. Blynk.virtualWrite(V4, Reserve0);
  254. }
  255. }
  256. //Forcé4
  257. BLYNK_WRITE(V6){
  258. if(param.asInt()){
  259. Active0(4.0);
  260. }
  261. }
  262. //NB/Forcé
  263. BLYNK_WRITE(V7){
  264. MLForce0=param.asFloat();
  265. }
  266. //Forcé
  267. BLYNK_WRITE(V8){
  268. if ( param.asInt()){
  269. Active0(MLForce0);
  270. }
  271. }
  272. //************************************************************************
  273. // Fonction KH
  274. //************************************************************************
  275. void AutoDistribue1(float ml){
  276. if (Auto1) {
  277. if(((ML1/4)*FACTEURML)>(1000*4)){
  278. Active1(ML1/4);
  279. }
  280. else if((((ML1/2)*FACTEURML)>(1000*2))&(dist==0|dist==2)){
  281. Active1(ML1/2);
  282. }
  283. else if (dist==0){
  284. Active1(ML1);
  285. }
  286. }
  287. else{
  288. Blynk.notify("KH est Arreter");
  289. }
  290. }
  291. void Active1(float ml) {
  292. digitalWrite(PINPOMPE1, LOW);
  293. delay(FACTEURML * ml);
  294. digitalWrite(PINPOMPE1, HIGH);
  295. Reserve1=Reserve1-ml;
  296. Blynk.virtualWrite(V14, Reserve1);
  297. char message[30];
  298. sprintf(message, "Distribution %.1fml de KH a %d:%d\n", ml,hour(),minute());
  299. terminal.print(message);
  300. terminal.flush();
  301. if(Reserve1<RESERVEMIN)
  302. Blynk.notify("Penser a remettre du KH");
  303. }
  304. //Mesure
  305. BLYNK_WRITE(V10) {
  306. if(Mesure1==0){//Si nouvelle connection on recupere juste la valeur enregistrer sur le server
  307. Mesure1 = param.asFloat();
  308. return;
  309. }
  310. Mesure1 = param.asFloat();
  311. ML1 = ML1 + (((ML1/Mesure1)* Cible1 - ML1)/4.0);
  312. MLForce1 = (Cible1-Mesure1)*FACTEUR1*LITRE;
  313. if(MLForce1<0)
  314. MLForce1=0;
  315. ML2 = (ML1+ML0)/2.0;
  316. Blynk.virtualWrite(V23, ML2);
  317. Blynk.virtualWrite(V13, ML1);
  318. Blynk.virtualWrite(V17, MLForce1);
  319. }
  320. //Cible
  321. BLYNK_WRITE(V11) {
  322. if(Cible1==0){//Si nouvelle connection on recupere juste la valeur enregistrer sur le server
  323. Cible1 = param.asFloat();
  324. return;
  325. }
  326. Cible1 = param.asFloat();
  327. ML1 = ML1 +(((ML1/Mesure1) * Cible1- ML1)/4.0);
  328. ML2 = (ML0+ML1)/2.0;
  329. Blynk.virtualWrite(V23, ML2);
  330. Blynk.virtualWrite(V13, ML1);
  331. }
  332. //En route
  333. BLYNK_WRITE(V12) {
  334. if ( param.asInt()){
  335. Auto1 = true;
  336. }
  337. else{
  338. Auto1 = false;
  339. }
  340. }
  341. BLYNK_WRITE(V13){
  342. ML1=param.asFloat();
  343. Blynk.virtualWrite(V13, ML1);
  344. }
  345. BLYNK_WRITE(V14){
  346. Reserve1=param.asFloat();
  347. Blynk.virtualWrite(V14, Reserve1);
  348. }
  349. //RAZ Reserve
  350. BLYNK_WRITE(V15){
  351. if(param.asInt()){
  352. Reserve1=RESERVE;
  353. Blynk.virtualWrite(V14, Reserve1);
  354. }
  355. }
  356. //Forcé4
  357. BLYNK_WRITE(V16){
  358. if(param.asInt()){
  359. Active1(4.0);
  360. }
  361. }
  362. //NB/Forcé
  363. BLYNK_WRITE(V17){
  364. MLForce1=param.asFloat();
  365. }
  366. //Forcé
  367. BLYNK_WRITE(V18){
  368. if ( param.asInt()){
  369. Active1(MLForce1);
  370. }
  371. }
  372. //************************************************************************
  373. // Fonction Mineral
  374. //************************************************************************
  375. void AutoDistribue2(float ml){
  376. if (Auto2) {
  377. if(((ML2/4)*FACTEURML)>(1000*4)){
  378. Active1(ML2/4);
  379. }
  380. else if((((ML2/2)*FACTEURML)>(1000*2))&(dist==0|dist==2)){
  381. Active2(ML2/2);
  382. }
  383. else if (dist==0){
  384. Active2(ML2);
  385. }
  386. }
  387. else{
  388. Blynk.notify("Mineral est Arreter");
  389. }
  390. }
  391. void Active2(float ml) {
  392. digitalWrite(PINPOMPE2, LOW);
  393. delay(FACTEURML * ml);
  394. digitalWrite(PINPOMPE2, HIGH);
  395. Reserve2=Reserve2-ml;
  396. Blynk.virtualWrite(V24, Reserve2);
  397. char message[30];
  398. sprintf(message, "Distribution %.1fml de Mineral a %d:%d\n", ml,hour(),minute());
  399. terminal.print(message);
  400. terminal.flush();
  401. if(Reserve2<RESERVEMIN)
  402. Blynk.notify("Penser a remettre du Mineral");
  403. }
  404. //En route
  405. BLYNK_WRITE(V22) {
  406. if ( param.asInt()){
  407. Auto2 = true;
  408. }
  409. else{
  410. Auto2 = false;
  411. }
  412. }
  413. BLYNK_WRITE(V23){
  414. ML2=param.asFloat();
  415. Blynk.virtualWrite(V23, ML2);
  416. }
  417. BLYNK_WRITE(V24){
  418. Reserve2=param.asFloat();
  419. Blynk.virtualWrite(V24, Reserve2);
  420. }
  421. //RAZ Reserve
  422. BLYNK_WRITE(V25){
  423. if(param.asInt()){
  424. Reserve2=RESERVE;
  425. Blynk.virtualWrite(V24, Reserve2);
  426. }
  427. }
  428. //Forcé4
  429. BLYNK_WRITE(V26){
  430. if(param.asInt()){
  431. Active2(4.0);
  432. }
  433. }
  434. //NB/Forcé
  435. BLYNK_WRITE(V27){
  436. MLForce2=param.asFloat();
  437. }
  438. //Forcé
  439. BLYNK_WRITE(V28){
  440. if ( param.asInt()){
  441. Active2(MLForce2);
  442. }
  443. }
  444. //************************************************************************
  445. // Fonction Magnesium
  446. //************************************************************************
  447. void AutoDistribue3(float ml){
  448. if (Auto3) {
  449. if(((ML3/4)*FACTEURML)>(1000*4)){
  450. Active1(ML3/4);
  451. }
  452. else if((((ML3/2)*FACTEURML)>(1000*2))&(dist==0|dist==2)){
  453. Active3(ML3/2);
  454. }
  455. else if (dist==0){
  456. Active3(ML3);
  457. }
  458. }
  459. else{
  460. Blynk.notify("Magnesium est Arreter");
  461. }
  462. }
  463. void Active3(float ml) {
  464. digitalWrite(PINPOMPE3, LOW);
  465. delay(FACTEURML * ml);
  466. digitalWrite(PINPOMPE3, HIGH);
  467. Reserve3=Reserve3-ml;
  468. Blynk.virtualWrite(V34, Reserve3);
  469. char message[30];
  470. sprintf(message, "Distribution %.1fml de Magnesium a %d:%d\n", ml,hour(),minute());
  471. terminal.print(message);
  472. terminal.flush();
  473. if(Reserve3<RESERVEMIN)
  474. Blynk.notify("Penser a remettre du Magnesium");
  475. }
  476. //Mesure
  477. BLYNK_WRITE(V30) {
  478. if(Mesure3==0){//Si nouvelle connection on recupere juste la valeur enregistrer sur le server
  479. Mesure3 = param.asFloat();
  480. return;
  481. }
  482. Mesure3 = param.asFloat();
  483. ML3 = ML3 + (((ML3/Mesure3)* Cible3 - ML3)/4.0);
  484. MLForce3 = (Cible3-Mesure3)*FACTEUR3*LITRE;
  485. if(MLForce3<0)
  486. MLForce3=0;
  487. Blynk.virtualWrite(V33, ML3);
  488. Blynk.virtualWrite(V37, MLForce3);
  489. }
  490. //Cible
  491. BLYNK_WRITE(V31) {
  492. if(Cible3==0){//Si nouvelle connection on recupere juste la valeur enregistrer sur le server
  493. Cible3 = param.asFloat();
  494. return;
  495. }
  496. Cible3 = param.asFloat();
  497. ML3 = ML3 +(((ML3/Mesure3)* Cible3- ML3)/4.0);
  498. Blynk.virtualWrite(V23, ML2);
  499. Blynk.virtualWrite(V33, ML3);
  500. }
  501. //En route
  502. BLYNK_WRITE(V32) {
  503. if ( param.asInt()){
  504. Auto3 = true;
  505. }
  506. else{
  507. Auto3 = false;
  508. }
  509. }
  510. BLYNK_WRITE(V33){
  511. ML3=param.asFloat();
  512. Blynk.virtualWrite(V33, ML3);
  513. }
  514. BLYNK_WRITE(V34){
  515. Reserve3=param.asFloat();
  516. Blynk.virtualWrite(V34, Reserve3);
  517. }
  518. //RAZ Reserve
  519. BLYNK_WRITE(V35){
  520. if(param.asInt()){
  521. Reserve3=RESERVE;
  522. Blynk.virtualWrite(V34, Reserve3);
  523. }
  524. }
  525. //Forcé4
  526. BLYNK_WRITE(V36){
  527. if(param.asInt()){
  528. Active3(4.0);
  529. }
  530. }
  531. //NB/Forcé
  532. BLYNK_WRITE(V37){
  533. MLForce3=param.asFloat();
  534. }
  535. //Forcé
  536. BLYNK_WRITE(V38){
  537. if ( param.asInt()){
  538. Active3(MLForce3);
  539. }
  540. }
  541. =======
  542. E704.936
  543. G1 X203.128 Y152.398 E704.96501
  544. G1 X203.99 Y152.51 E704.99392
  545. G1 X204.857 Y152.405 E705.02297
  546. G1 X205.672 Y152.086 E705.05208
  547. G1 X206.383 Y151.578 E705.08114
  548. G1 X206.944 Y150.91 E705.11015
  549. G1 X207.325 Y150.124 E705.13921
  550. G1 X207.502 Y149.252 E705.1688
  551. G1 X207.431 Y148.246 E705.20234
  552. G1 X207.128 Y147.403 E705.23214
  553. G1 X206.634 Y146.684 E705.26115
  554. G1 X205.984 Y146.104 E705.29013
  555. G1 X205.205 Y145.703 E705.31927
  556. G1 X204.552 Y145.553 E705.34155
  557. G1 X204.36 Y145.509 E705.3481
  558. G1 X204.229 Y145.511 E705.35246
  559. G1 X203.776 Y145.52 E705.36753
  560. G1 X204.224 Y145.278 E705.37344
  561. G1 X204.249 Y145.267
  562. G1 X204.428 Y145.185 E705.37895
  563. G1 X204.708 Y145.057 E705.38919
  564. G1 X205.413 Y144.801 E705.41414
  565. G1 X205.893 Y144.662 E705.43076
  566. G1 X206.643 Y144.511 E705.4562
  567. G1 X207.146 Y144.442 E705.47309
  568. G1 X207.693 Y144.41 E705.49131
  569. G1 X208.394 Y144.388 E705.51464
  570. G0 F7200 X200.679 Y147.17
  571. G0 X198.6 Y153.628
  572. G0 X21.39 Y153.628
  573. G0 X20.611 Y153.395
  574. G1 F3600 X20.612 Y153.396 E705.51469
  575. G1 X20.616 Y153.6 E705.52147
  576. G1 X20.412 Y153.6 E705.52584
  577. G1 X20.411 Y153.6 E705.52587
  578. G1 X11.4 Y153.6 E705.82558
  579. G1 X11.4 Y144.583 E706.12549
  580. G1 X11.4 Y144.582 E706.12552
  581. G1 X11.4 Y144.374 E706.13244
  582. G1 X11.608 Y144.383 E706.13686
  583. G1 X12.727 Y144.435 E706.17412
  584. G1 X13.264 Y144.496 E706.1921
  585. G1 X13.979 Y144.635 E706.21632
  586. G1 X14.506 Y144.775 E706.23446
  587. G1 X15.173 Y145.011 E706.25799
  588. G1 X15.557 Y145.176 E706.27189
  589. G1 X15.622 Y145.203 E706.27423
  590. G1 X15.687 Y145.231 E706.27659
  591. G1 X16.216 Y145.512 E706.29651
  592. G1 X15.693 Y145.522 E706.30242
  593. G1 X15.485 Y145.526 E706.30843
  594. G1 X15.417 Y145.545 E706.31064
  595. G1 X14.643 Y145.761 E706.33737
  596. G1 X13.886 Y146.196 E706.36641
  597. G1 X13.26 Y146.805 E706.39545
  598. G1 X12.804 Y147.551 E706.42453
  599. G1 X12.545 Y148.382 E706.45348
  600. G1 X12.498 Y149.254 E706.48253
  601. G1 X12.671 Y150.112 E706.51164
  602. G1 X13.047 Y150.898 E706.54062
  603. G1 X13.606 Y151.569 E706.56967
  604. G1 X14.316 Y152.08 E706.59876
  605. G1 X15.128 Y152.398 E706.62777
  606. G1 X15.99 Y152.51 E706.65668
  607. G1 X16.857 Y152.405 E706.68573
  608. G1 X17.672 Y152.086 E706.71483
  609. G1 X18.383 Y151.578 E706.7439
  610. G1 X18.944 Y150.91 E706.77291
  611. G1 X19.325 Y150.124 E706.80196
  612. G1 X19.449 Y149.516 E706.8226
  613. G1 X19.502 Y149.252 E706.83156
  614. G1 X19.467 Y148.751 E706.84826
  615. G1 X19.684 Y149.152 E706.85187
  616. G1 X19.726 Y149.229 E706.85411
  617. G1 X19.837 Y149.475 E706.86122
  618. G1 X19.941 Y149.703 E706.86955
  619. G1 X20.2 Y150.415 E706.89475
  620. G1 X20.334 Y150.883 E706.91094
  621. G1 X20.496 Y151.677 E706.93789
  622. G1 X20.558 Y152.139 E706.9534
  623. G1 X20.59 Y152.686 E706.97162
  624. G1 X20.611 Y153.395 E706.99521
  625. G0 F7200 X17.83 Y145.679
  626. G0 X11.372 Y143.6
  627. G0 X11.372 Y76.391
  628. G0 X11.606 Y75.612
  629. G1 F3600 X11.605 Y75.613 E706.99526
  630. G1 X11.4 Y75.618 E707.00208
  631. G1 X11.4 Y75.413 E707.00646
  632. G1 X11.4 Y75.412 E707.0065
  633. G1 X11.4 Y66.4 E707.30624
  634. G1 X20.417 Y66.4 E707.60614
  635. G1 X20.418 Y66.4 E707.60618
  636. G1 X20.626 Y66.4 E707.61309
  637. G1 X20.617 Y66.608 E707.61752
  638. G1 X20.565 Y67.736 E707.65508
  639. G1 X20.507 Y68.252 E707.67235
  640. G1 X20.364 Y68.984 E707.69716
  641. G1 X20.229 Y69.492 E707.71464
  642. G1 X20.055 Y70.003 E707.73259
  643. G1 X19.845 Y70.502 E707.7506
  644. G1 X19.769 Y70.684 E707.75716
  645. G1 X19.498 Y71.201 E707.77657
  646. G1 X19.464 Y70.706 E707.78238
  647. G1 X19.45 Y70.509 E707.78819
  648. G1 X19.431 Y70.246 E707.79696
  649. G1 X19.128 Y69.403 E707.82676
  650. G1 X18.634 Y68.684 E707.85577
  651. G1 X17.984 Y68.104 E707.88474
  652. G1 X17.205 Y67.703 E707.91389
  653. G1 X16.36 Y67.509 E707.94272
  654. G1 X15.485 Y67.526 E707.97183
  655. G1 X14.643 Y67.761 E708.00091
  656. G1 X13.886 Y68.196 E708.02994
  657. G1 X13.26 Y68.805 E708.05899
  658. G1 X12.804 Y69.551 E708.08807
  659. G1 X12.545 Y70.382 E708.11702
  660. G1 X12.498 Y71.254 E708.14607
  661. G1 X12.671 Y72.112 E708.17518
  662. G1 X13.047 Y72.898 E708.20416
  663. G1 X13.606 Y73.569 E708.23321
  664. G1 X14.316 Y74.08 E708.2623
  665. G1 X15.128 Y74.398 E708.29131
  666. G1 X15.525 Y74.45 E708.30462
  667. G1 X15.806 Y74.486 E708.31405
  668. G1 X15.99 Y74.51 E708.32022
  669. G1 X16.22 Y74.482 E708.32792
  670. G1 X16.031 Y74.584 E708.32852
  671. G1 X15.776 Y74.722 E708.33364
  672. G1 X15.518 Y74.839 E708.34122
  673. G1 X15.292 Y74.943 E708.34949
  674. G1 X14.587 Y75.199 E708.37444
  675. G1 X14.107 Y75.338 E708.39106
  676. G1 X13.357 Y75.489 E708.4165
  677. G1 X12.854 Y75.558 E708.43339
  678. G1 X12.307 Y75.59 E708.45161
  679. G1 X11.606 Y75.612 E708.47494
  680. G0 F7200 X17.307 Y73.413
  681. G0 X18.301 Y72.493
  682. G0 X19.036 Y70.329
  683. G1 F3600 X18.769 Y69.587 E708.50117
  684. G1 X18.332 Y68.95 E708.52686
  685. G1 X17.756 Y68.436 E708.55254
  686. G1 X17.067 Y68.082 E708.5783
  687. G1 X16.318 Y67.91 E708.60386
  688. G1 X15.544 Y67.925 E708.62961
  689. G1 X14.799 Y68.133 E708.65534
  690. G1 X14.129 Y68.518 E708.68104
  691. G1 X13.575 Y69.057 E708.70675
  692. G1 X13.171 Y69.717 E708.73249
  693. G1 X12.942 Y70.453 E708.75812
  694. G1 X12.9 Y71.225 E708.78384
  695. G1 X13.053 Y71.984 E708.80959
  696. G1 X13.386 Y72.68 E708.83525
  697. G1 X13.881 Y73.274 E708.86097
  698. G1 X14.509 Y73.726 E708.8867
  699. G1 X15.228 Y74.008 E708.91239
  700. G1 X15.992 Y74.107 E708.93801
  701. G1 X16.759 Y74.014 E708.96371
  702. G1 X17.234 Y73.828 E708.98068
  703. G1 X17.48 Y73.732 E708.98946
  704. G1 X17.879 Y73.446 E709.00579
  705. G1 X18.109 Y73.282 E709.01518
  706. G1 X18.254 Y73.11 E709.02267
  707. G1 X18.606 Y72.691 E709.04087
  708. G1 X18.611 Y72.68 E709.04127
  709. G1 X18.825 Y72.238 E709.0576
  710. G1 X18.943 Y71.995 E709.06659
  711. G1 X19.099 Y71.226 E709.09269
  712. G1 X19.036 Y70.329 E709.12259
  713. G0 F7200 X17.834 Y74.318
  714. G0 X11.372 Y76.391
  715. G0 X11.372 Y143.6
  716. G0 X17.579 Y146.203
  717. G0 X19.036 Y148.329
  718. G1 F3600 X18.85 Y147.814 E709.14081
  719. G1 X18.769 Y147.587 E709.14882
  720. G1 X18.687 Y147.467 E709.15366
  721. G1 X18.387 Y147.03 E709.17129
  722. G1 X18.332 Y146.95 E709.17452
  723. G1 X17.863 Y146.531 E709.19543
  724. G1 X17.756 Y146.436 E709.20019
  725. G1 X17.44 Y146.274 E709.212
  726. G1 X17.182 Y146.142 E709.22164
  727. G1 X17.067 Y146.082 E709.22596
  728. G1 X16.318 Y145.91 E709.25152
  729. G1 X15.544 Y145.925 E709.27726
  730. G1 X14.799 Y146.133 E709.30299
  731. G1 X14.129 Y146.518 E709.32869
  732. G1 X13.575 Y147.057 E709.3544
  733. G1 X13.171 Y147.717 E709.38014
  734. G1 X12.942 Y148.453 E709.40577
  735. G1 X12.9 Y149.225 E709.43149
  736. G1 X13.053 Y149.984 E709.45724
  737. G1 X13.386 Y150.68 E709.4829
  738. G1 X13.881 Y151.274 E709.50862
  739. G1 X14.509 Y151.726 E709.53436
  740. G1 X15.228 Y152.008 E709.56004
  741. G1 X15.992 Y152.107 E709.58567
  742. G1 X16.759 Y152.014 E709.61136
  743. G1 X17.48 Y151.732 E709.63711
  744. G1 X18.109 Y151.282 E709.66284
  745. G1 X18.606 Y150.691 E709.68852
  746. G1 X18.943 Y149.995 E709.71424
  747. G1 X19.099 Y149.226 E709.74034
  748. G1 X19.036 Y148.329 E709.77025
  749. G0 F7200 X21.023 Y153.795
  750. G1 F3600 X21.024 Y153.796 E709.77029
  751. G1 X21.028 Y154 E709.77708
  752. G1 X20.824 Y154 E709.78145
  753. G1 X20.823 Y154 E709.78148
  754. G1 X11 Y154 E710.10819
  755. G1 X11 Y144.164 E710.43534
  756. G1 X11 Y144.163 E710.43537
  757. G1 X11 Y143.955 E710.44229
  758. G1 X11.208 Y143.964 E710.44672
  759. G1 X12.761 Y144.036 E710.49843
  760. G1 X13.322 Y144.099 E710.5172
  761. G1 X14.072 Y144.245 E710.54262
  762. G1 X14.616 Y144.39 E710.56134
  763. G1 X15.331 Y144.643 E710.58657
  764. G1 X15.849 Y144.865 E710.60531
  765. G1 X16.52 Y145.221 E710.63058
  766. G1 X17.003 Y145.519 E710.64945
  767. G1 X17.367 Y145.787 E710.66449
  768. G1 X17.601 Y145.958 E710.67357
  769. G1 X17.927 Y146.233 E710.68484
  770. G1 X18.041 Y146.33 E710.68819
  771. G1 X18.497 Y146.783 E710.70168
  772. G1 X18.599 Y146.884 E710.70491
  773. G1 X18.951 Y147.285 E710.71774
  774. G1 X19.03 Y147.39 E710.72123
  775. G1 X19.175 Y147.583 E710.72853
  776. G1 X19.412 Y147.899 E710.74167
  777. G1 X19.719 Y148.376 E710.76054
  778. G1 X20.078 Y149.038 E710.78559
  779. G1 X20.314 Y149.558 E710.80458
  780. G1 X20.578 Y150.285 E710.8303
  781. G1 X20.724 Y150.792 E710.84785
  782. G1 X20.888 Y151.597 E710.87518
  783. G1 X20.956 Y152.103 E710.89216
  784. G1 X20.99 Y152.675 E710.91122
  785. G1 X21.023 Y153.795 E710.94848
  786. G0 F7200 X198.6 Y153.628
  787. G0 X201.502 Y147.867
  788. G0 X202.348 Y146.809
  789. G0 X203.598 Y146.285
  790. G0 X204.942 Y146.424
  791. G0 X205.839 Y146.993
  792. G0 X207.036 Y148.329
  793. G1 F3600 X206.769 Y147.587 E710.97471
  794. G1 X206.332 Y146.95 E711.0004
  795. G1 X205.756 Y146.436 E711.02608
  796. G1 X205.067 Y146.082 E711.05184
  797. G1 X204.318 Y145.91 E711.0774
  798. G1 X203.544 Y145.925 E711.10315
  799. G1 X202.862 Y146.116 E711.12671
  800. G1 X202.799 Y146.133 E711.12888
  801. G1 X202.444 Y146.337 E711.1425
  802. G1 X202.129 Y146.518 E711.15458
  803. G1 X202.073 Y146.572 E711.15717
  804. G1 X201.575 Y147.057 E711.18029
  805. G1 X201.552 Y147.094 E711.18174
  806. G1 X201.255 Y147.58 E711.20068
  807. G1 X201.171 Y147.717 E711.20603
  808. G1 X201.136 Y147.83 E711.20996
  809. G1 X200.942 Y148.453 E711.23166
  810. G1 X200.9 Y149.225 E711.25738
  811. G1 X201.053 Y149.984 E711.28313
  812. G1 X201.386 Y150.68 E711.30879
  813. G1 X201.881 Y151.274 E711.33451
  814. G1 X202.509 Y151.726 E711.36025
  815. G1 X203.228 Y152.008 E711.38593
  816. G1 X203.992 Y152.107 E711.41156
  817. G1 X204.759 Y152.014 E711.43725
  818. G1 X205.48 Y151.732 E711.463
  819. G1 X206.109 Y151.282 E711.48873
  820. G1 X206.606 Y150.691 E711.51441
  821. G1 X206.943 Y149.995 E711.54013
  822. G1 X207.099 Y149.226 E711.56623
  823. G1 X207.036 Y148.329 E711.59614
  824. G0 F7200 X208.794 Y143.976
  825. G1 F3600 X208.795 Y143.975 E711.59618
  826. G1 X209 Y143.97 E711.603
  827. G1 X209 Y144.175 E711.60738
  828. G1 X209 Y144.176 E711.60742
  829. G1 X209 Y154 E711.93417
  830. G1 X199.164 Y154 E712.26131
  831. G1 X199.163 Y154 E712.26135
  832. G1 X198.955 Y154 E712.26826
  833. G1 X198.964 Y153.792 E712.27269
  834. G1 X199.035 Y152.245 E712.3242
  835. G1 X199.1 Y151.673 E712.34335
  836. G1 X199.243 Y150.938 E712.36825
  837. G1 X199.39 Y150.384 E712.38731
  838. G1 X199.643 Y149.669 E712.41254
  839. G1 X199.865 Y149.151 E712.43128
  840. G1 X200.219 Y148.484 E712.4564
  841. G1 X200.519 Y147.997 E712.47542
  842. G1 X200.81 Y147.6 E712.4918
  843. G1 X200.88 Y147.505 E712.49553
  844. G1 X200.958 Y147.399 E712.49934
  845. G1 X201.33 Y146.959 E712.5141
  846. G1 X201.402 Y146.886 E712.51661
  847. G1 X201.895 Y146.39 E712.53108
  848. G1 X201.963 Y146.33 E712.53306
  849. G1 X202.28 Y146.052 E712.54347
  850. G1 X202.573 Y145.833 E712.55408
  851. G1 X202.625 Y145.794 E712.55617
  852. G1 X202.899 Y145.588 E712.56757
  853. G1 X203.372 Y145.284 E712.58627
  854. G1 X204.046 Y144.919 E712.61177
  855. G1 X204.558 Y144.686 E712.63048
  856. G1 X205.282 Y144.423 E712.6561
  857. G1 X205.8 Y144.273 E712.67403
  858. G1 X206.573 Y144.117 E712.70026
  859. G1 X207.108 Y144.044 E712.71822
  860. G1 X207.681 Y144.01 E712.73731
  861. G1 X208.794 Y143.976 E712.77435
  862. G0 F7200 X208.628 Y76.4
  863. G0 X207.036 Y70.329
  864. G1 F3600 X206.769 Y69.587 E712.80058
  865. G1 X206.332 Y68.95 E712.82627
  866. G1 X205.756 Y68.436 E712.85195
  867. G1 X205.067 Y68.082 E712.87771
  868. G1 X204.318 Y67.91 E712.90327
  869. G1 X203.544 Y67.925 E712.92902
  870. G1 X202.799 Y68.133 E712.95475
  871. G1 X202.129 Y68.518 E712.98045
  872. G1 X201.575 Y69.057 E713.00616
  873. G1 X201.171 Y69.717 E713.03189
  874. G1 X200.942 Y70.453 E713.05753
  875. G1 X200.9 Y71.225 E713.08324
  876. G1 X201.053 Y71.984 E713.109
  877. G1 X201.159 Y72.206 E713.11718
  878. G1 X201.336 Y72.577 E713.13085
  879. G1 X201.386 Y72.68 E713.13466
  880. G1 X201.606 Y72.944 E713.14609
  881. G1 X201.881 Y73.274 E713.16038
  882. G1 X202.12 Y73.446 E713.17017
  883. G1 X202.509 Y73.726 E713.18611
  884. G1 X202.747 Y73.819 E713.19461
  885. G1 X203.228 Y74.008 E713.2118
  886. G1 X203.992 Y74.107 E713.23742
  887. G1 X204.759 Y74.014 E713.26312
  888. G1 X205.48 Y73.732 E713.28887
  889. G1 X206.109 Y73.282 E713.31459
  890. G1 X206.606 Y72.691 E713.34028
  891. G1 X206.943 Y71.995 E713.366
  892. G1 X207.099 Y71.226 E713.39209
  893. G1 X207.036 Y70.329 E713.422
  894. G0 F7200 X206.06 Y69.19
  895. G0 X205.206 Y68.561
  896. G0 X198.98 Y66
  897. G1 F3600 X21.045 Y66
  898. G1 X21.036 Y66.208 E713.42893
  899. G1 X20.964 Y67.768 E713.48087
  900. G1 X20.903 Y68.313 E713.49911
  901. G1 X20.755 Y69.07 E713.52476
  902. G1 X20.612 Y69.61 E713.54334
  903. G1 X20.43 Y70.144 E713.56211
  904. G1 X20.132 Y70.854 E713.58772
  905. G1 X19.881 Y71.341 E713.60594
  906. G1 X19.556 Y71.883 E713.62696
  907. G1 X19.221 Y72.37 E713.64662
  908. G1 X19.18 Y72.421 E713.64879
  909. G1 X18.873 Y72.806 E713.66294
  910. G1 X18.811 Y72.875 E713.66551
  911. G1 X18.45 Y73.274 E713.67731
  912. G1 X18.271 Y73.448 E713.68252
  913. G1 X18.041 Y73.671 E713.68952
  914. G1 X17.684 Y73.972 E713.70088
  915. G1 X17.611 Y74.034 E713.70376
  916. G1 X17.399 Y74.192 E713.71178
  917. G1 X17.109 Y74.407 E713.72378
  918. G1 X16.628 Y74.716 E713.7428
  919. G1 X15.954 Y75.081 E713.76829
  920. G1 X15.442 Y75.314 E713.787
  921. G1 X14.718 Y75.577 E713.81262
  922. G1 X14.2 Y75.727 E713.83056
  923. G1 X13.427 Y75.883 E713.85679
  924. G1 X12.892 Y75.956 E713.87475
  925. G1 X12.319 Y75.99 E713.89384
  926. G1 X11.206 Y76.024 E713.93087
  927. G1 X11.205 Y76.025 E713.93092
  928. G1 X11 Y76.03 E713.93774
  929. G1 X11 Y75.825 E713.94212
  930. G1 X11 Y75.824 E713.94216
  931. G1 X11 Y66 E714.2689
  932. G1 X20.836 Y66 E714.59605
  933. G1 X21.045 Y66 E714.603
  934. G1 X198.98 Y66 E720.52114
  935. G1 X199.184 Y66 E720.52793
  936. G1 X209 Y66 E720.85441
  937. G1 X209 Y75.836 E721.18156
  938. G1 X209 Y75.837 E721.18159
  939. G1 X209 Y76.045 E721.18851
  940. G1 X208.792 Y76.036 E721.19294
  941. G1 X207.239 Y75.964 E721.24465
  942. G1 X206.678 Y75.901 E721.26342
  943. G1 X205.928 Y75.755 E721.28883
  944. G1 X205.384 Y75.61 E721.30756
  945. G1 X204.667 Y75.356 E721.33286
  946. G1 X204.151 Y75.135 E721.35153
  947. G1 X203.48 Y74.779 E721.37679
  948. G1 X202.997 Y74.481 E721.39567
  949. G1 X202.603 Y74.191 E721.41194
  950. G1 X202.397 Y74.04 E721.41988
  951. G1 X202.308 Y73.965 E721.42375
  952. G1 X201.959 Y73.67 E721.4348
  953. G1 X201.722 Y73.435 E721.44201
  954. G1 X201.401 Y73.116 E721.45143
  955. G1 X201.179 Y72.863 E721.45898
  956. G1 X201.049 Y72.715 E721.46421
  957. G1 X200.802 Y72.386 E721.4765
  958. G1 X200.587 Y72.099 E721.48842
  959. G1 X200.281 Y71.624 E721.50722
  960. G1 X199.916 Y70.95 E721.53271
  961. G1 X199.687 Y70.447 E721.55109
  962. G1 X199.422 Y69.715 E721.57699
  963. G1 X199.275 Y69.204 E721.59467
  964. G1 X199.112 Y68.403 E721.62186
  965. G1 X199.044 Y67.893 E721.638
  966. >>>>>>> a372037c56739aa8f84d9e87678ae00f4b6e897f