From 98c24430995013977c42c7191f7da6160fde62ea Mon Sep 17 00:00:00 2001 From: akagunduz <david.akagunduz@gmail.com> Date: Tue, 30 Apr 2024 12:20:16 +0200 Subject: [PATCH] lecture de fichier +affichage debug --- Cell.class | Bin 0 -> 407 bytes Cell.java | 3 +- Grid.class | Bin 0 -> 2406 bytes Grid.java | 58 ++++++++++++++++++++++++++++--------- Sudoku.class | Bin 0 -> 732 bytes Sudoku.java | 24 ++++++--------- SudokuButtonListener.class | Bin 0 -> 2103 bytes SudokuButtonListener.java | 46 ++++++++++++++--------------- SudokuUI.class | Bin 0 -> 2185 bytes SudokuUI.java | 12 ++++---- exemple.gri | Bin 0 -> 36 bytes 11 files changed, 80 insertions(+), 63 deletions(-) create mode 100644 Cell.class create mode 100644 Grid.class create mode 100644 Sudoku.class create mode 100644 SudokuButtonListener.class create mode 100644 SudokuUI.class create mode 100644 exemple.gri diff --git a/Cell.class b/Cell.class new file mode 100644 index 0000000000000000000000000000000000000000..c8b3b8cc3d755aceacc0d0a8c098afaa3595d0a7 GIT binary patch literal 407 zcmZvWKT88a5XIlz?fqL%6BDh(LaTU%DQ(0iAOu7UCH-Dp!iDn!@h+drMo<I`KY$-f ze0yq8u-KW|H}5wy?;o#k08X&0p|G96M=wG@!j2$VnX<7084JSGqAKb$fj>B!2-IkC z%TDK_sO)8Pm)qry$xA9~Fn0ZTX6wlpO@MrSzZUfMqFGMudExxY$d={t+^kHB2yu!4 zp&L(C&~^H-G}UZ)mCx<8#sTkByjS2kCo9F8AY;N`MqQY7_5#WLXLygTTQhEvb$&%M zA?vt}U!1q*_Wt1#a+;hYQfz*6`^;`%kUhbBU?DW29qtwi-_MFep5|7B+28THReL<D KPk)CF58Y4nyE3r= literal 0 HcmV?d00001 diff --git a/Cell.java b/Cell.java index 9bad4e1..9847835 100644 --- a/Cell.java +++ b/Cell.java @@ -17,5 +17,4 @@ public class Cell { public void setValue(int value) { this.value = value; } -} - +} \ No newline at end of file diff --git a/Grid.class b/Grid.class new file mode 100644 index 0000000000000000000000000000000000000000..06cddd8aca75e7400b09335d28641b193ac51fab GIT binary patch literal 2406 zcma)8U2_vv7=BLkvB|R7kT$fXtrjS?ACyXfR%ofxKq1lsl2WWyahoh{=yo@5Hie2G zsP*fD8N746Qf_(+jHV2o(JN=vpWubp{sd(}d`>o@Vdyws^nASMec$uG&-3g_fBWa& zj{pYnrHXb8DCh`dCtg%=P=#Oa4=ET_p<qZw5QpV3tYQydlEce#IHF<%3F&<_jAIxL z;kb$uNXp?A>3>qen2H$26`YbDr&ToIOq91yC^)C083QtUQm)R2@S2>bLU>)y(+b{D z@TNc@ZJ1_WAT&Kamf&(wAUKq@vhJ{eud{1Xz@M-)hCuCD)-p~N7G?}*LZ2~d*_?9q z^!&J<EAJzwt!Iuq+03Y8FN|iTORRJ3lD??-nYuOGmvWt~H9Ocfso*UEW!7-zg#v14 zGTBwRT*+6=L7J1YfRJl@p#t@tT~8-uhLl}!(uQ|uSeCFyUaR4GbZXdz4%tQNu7*-M zS-bD3?&?V^S8$oy&=&+ApU5m#Co)N|94=^h8_YR_w1$ja8MvrmR>K^!8ZKd8fvI5u z7Mn{I(rF`~S72+%$@m=J(cqv{pl%(Ji8;r<EWy-}hg&&fb;;AmuB45eo3$+s1#noz zeu2n{ZM%8b(R1U5J7;I|wLx4C;fjVOyjy9Z3hR+V*31}=hO4sN_wc@eXp@T%xKK6h zlS%y&FXmn^>-5YeBh7NEOceqe%Y@1r*U=-V?3p-bk{08rn<V#(x>+zzUz92!zw7C} zTvBMJVa>X8T%_l8=LjSH^h{K6C^eGciJo>1hYF-(C_ux>rYB`;>7I}`g{YawmXc(u zD__dH2Kn{b1zr&I>R|b2D8@4REX5<`Ni$o>NhgzpJ|ScepHkC-v}xz%x1eV-sX{L2 zkaUA+R&Xly@R;UOh|h4?jLK%l>8#HhDn7(Dc5%#cZ0As$Adw6Dypgc2wC<kIx^rCR zUEOl|nRaaSL2ZO>i22Ky1od3buvk>fMm&@?LJWHUSMG|xf{&!^J{4$Rr#5RX+Ve*F zOZOTWC408Bq~LS%JZ9VTg`9wvv@F9(m^#s7S6^4(T+ZPs{Df|0Oe5d!1r9#lX_e)P zz=@@tv4Q(^m4AiCDpNT{LO0D+)-?tdd?B#wss1*qP2k!8_QQ7m0JQUU7O0VL5?2AP z`9yK-;_f;hYai#K?p28HNH`My88tOOz~>ukj)ZTb!*{qv&W+vQ!`B>dS%ZIS6@k=p zjaYf~=d$4V`)$V8pqt|kggAznGmHpSG-4ClprMcR0qzG;iynG3!2bwQ)F{{~fCo^- zeQdj5Ds4A<z0!ovy-fGr8iG@6P^NlT5n4rf+&A1ROFFZ=2=y*D9rFA71F?WK4a5RX z{vx!S*xKZe1&Y|*uf&wQc&0zNf}pQID7$El#{%(Ku!!2_0L%Yn*~jtL9YmsAiimRV zE~1XP>sJsv<;}dKS0>)t`_l^Q#_yn!_NIH-1~B9{5sbj)gBRm7cMYF#mdM^<pB^q} zQBO;hUUkHzo~*=(Ljy5s#4wupJGzZOu+2D$R!s5i0{sjkw?I#qs9t64b@F(F>#xY@ zx8zddI1KF}q6&iIA+{*kBX&MOjra?7#PXbi*dzYd`w23S=tKhq2jy>w5d{sk1iB9| zl$EfZwMr#~%S^{_aU)8!205c7nZ1aY-Mi@Sr*(71y_JAUC3qn!kAdCfUed`ozZ~`r z?E#)7*U(HMwTzYZHBcsXhfLQJZ;cnx+VAg)5%g!H&lS;jzC_a>J<;u@jg;T7Jw@!0 zReB(IP;|gvY9>yg_YvCtgy{e+`}i->0KtmmC=Ql@tAqa`R0Yk#6JPs%R_dd(OxBNO W&MGVZ7@v{NCcMghi2JkrOZ^LYm@LHr literal 0 HcmV?d00001 diff --git a/Grid.java b/Grid.java index 7875772..eea46a8 100644 --- a/Grid.java +++ b/Grid.java @@ -1,30 +1,60 @@ +import java.io.DataInputStream; +import java.io.FileInputStream; +import java.io.IOException; + public class Grid { private Cell[][] cells; public Grid() { cells = new Cell[9][9]; for (int i = 0; i < 9; i++) { - for (int j = 0; j < 9; j++) { - cells[i][j] = new Cell(); + for (int column = 0; column < 9; column++) { + cells[i][column] = new Cell(); } } } - public Grid(Grid grid) { - cells = new Cell[9][9]; + public void loadGridFromFile(String fileName) { + try (DataInputStream input = new DataInputStream(new FileInputStream(fileName))) { + for (int i = 0; i < 9; i++) { + String line = String.valueOf(input.readInt()); + for (int column = 0; column < 9; column++) { + int value; + if (column < line.length()) { + char digit = line.charAt(column); + value = Character.getNumericValue(digit); + } else { + value = 0; + } + cells[i][column].setValue(value); + } + } + System.out.println("Success"); + System.out.println(this); + } catch (IOException e) { + System.err.println("Error: " + e.getMessage()); + } + } + + public Cell getCell(int i, int column) { + return cells[i][column]; + } + + public void setCell(int i, int column, int value) { + cells[i][column].setValue(value); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); for (int i = 0; i < 9; i++) { - for (int j = 0; j < 9; j++) { - cells[i][j] = new Cell(grid.cells[i][j].getValue()); + for (int column = 0; column < 9; column++) { + int value = cells[i][column].getValue(); + sb.append(value).append(" "); } + sb.append("\n"); } + return sb.toString(); } - - - public Cell getCell(int ligne, int col) { - return cells[ligne][col]; - } - } - - diff --git a/Sudoku.class b/Sudoku.class new file mode 100644 index 0000000000000000000000000000000000000000..0e1ad1d155c5e29ce75482090e85e9d98caa5b9c GIT binary patch literal 732 zcmZuv+iuf96r4?*ICh*gw4~*dhLo1zxR8{-AknHXNJU72BAJ4!K2%O(BDb+!xegLP z!z-_VAd!gF58$H^vv#;i$kN%}vu9?`ob~q~-!1_>#I}wyYARNBWKh$PLtVu!ooh{o zhD@)ixUECOx`qwhDWIw2E=(0I0c99@1A%<^3D+HNcD=xh_XM(L>lLpbhXYq&q3Z?i z^ReG^qnA!^#Ed$0V+j!`n5|!6#do|wVA(wGo;q)x&d3Rd9XpP^V7MdMN_On@&z?Ew za}wPS$5G$i_atM{9uLB^aa$q{T)`sMrGkM4RM=R0ZJ>%}0~R)^oTd(+%JO?E?i*;M zBTzrQaE9)qhGc4_HH}^A^W+Vc_Ec;ccpwQXf4V&Aox1&)sZr<*r0jka`e|cT^Z#x% zGxaT<{l#RzyNF$%19YQEpqgU6u=9drh&c?`@j2(EMEc(}r+O}nMgi9NbY;G;;Oo&o zcUkT^6vic<wvsbYv8E8#44I=TvR|QmN-$R$%d7wtemOGaiR0kr=vA(Qw>j$zl#jn5 zvIzW5G_2s-ywoF2hS`pF`5qfH<S3NyZcd<D+3g7mGiXQhG=={91B#zfTr?&q$v!fW jebk{cmJ&ZDcCtbj>-5p2k2ZU{&RYeUrb@vZ3F_ug@)L`B literal 0 HcmV?d00001 diff --git a/Sudoku.java b/Sudoku.java index fc22ab5..63310b2 100644 --- a/Sudoku.java +++ b/Sudoku.java @@ -2,7 +2,7 @@ public class Sudoku { private Grid grid; public Sudoku() { - this.grid = new Grid(); //grille de base + this.grid = new Grid(); } public Grid getGrid() { @@ -10,19 +10,13 @@ public class Sudoku { } public static void main(String[] args) { - Sudoku sudoku = new Sudoku(); - sudoku.printGrid(); // Afficher la grille - new SudokuUI(sudoku); - } - - public void printGrid() { - for (int row = 0; row < 9; row++) { - for (int col = 0; col < 9; col++) { - int value = grid.getCell(row, col).getValue(); - System.out.print(value + " "); - } - System.out.println(); + if (args.length > 0) { + Sudoku sudoku = new Sudoku(); + sudoku.getGrid().loadGridFromFile(args[0]); + // Pas besoin d'afficher la grille ici, car loadGridFromFile() le fait déjà + new SudokuUI(sudoku.getGrid()); + } else { + System.err.println("Usage: java Sudoku <grid_file>"); } } -} - +} \ No newline at end of file diff --git a/SudokuButtonListener.class b/SudokuButtonListener.class new file mode 100644 index 0000000000000000000000000000000000000000..7467af292b1d88a98ae35ce53c7fe8738ca0c189 GIT binary patch literal 2103 zcmaJ?T~`xV6x}zOWRf^2f)S9UQfzIAAE~s&R{R148w^6h+E)7E5XLwfX3}H=`~a70 z*{AjqUv&9GAAGS(QdS@O)|dW={)#@;Wk2?r1PLy6&02TvoO|xsXYX_Foj?Bl^)~<~ z@m&lDFc?J-K9J!<8HQxYMsPBQkMMB}r!XADX`G4SEY3x6K86vD#xRBpF*=S%F@cL> z`$T3r9g`7UlC61Jo|56R4AZiIM#rZ*W_8Rd1S{@}g357La7zkWv0^VOg!32q9#+s7 zYM$phRfVqk`TQ+&*<8(3S8S)4nH=?3=o3C|JGOULp+A+&H8#G+ci<`!#@t0qVNc$6 ztjo2f1*>w!TqudfEO@r-%vhBhZe_`076(&4V#ZwYGS;%?c$pF3WnAXN60B{`GYhw; z%yKivF1vcwEZK`w?lL2WnNM!unnJ8;o)xkoT3d}{!h6eO)LrGroLj3DtO;Av>Y1x8 zy0>c$wt2hiS&mgXE=m|UgewLTNE&!chJ)xc@HYC%W!&+sN}t*1_zX|!_{_jne6HgQ z17G5rj(G!L;cFe=82A>~6`+Fw7f{f#Xu!e^18E%5Q8aK9wt-u?ZJ-33st9(bWU>Yg z{U#`v>5Z=ztg;BGkeDf1X4UGWN`4Z{B1toq;|7-C7&wY!29C>+!4U&4$_o2lMOC4F z8*qBzmR0Z+lD_HXx@@V#W=ctQy2R^6zfAkt&6tkVx_Z-H$vNekcfmGGZc*WIv(`SZ z2F&n4qx`;U&a1HN*ll~av&oTP(W)p!%4Vf%@lzq*8mGBwfbFeGL$jZYmN#aVq~g*B zd6_e)*04pYmdF07F+(kt6AGO>C^VXYQRsKYT74ZH_qAx&NP?SKhMF~fLvkeYHjNk5 zcKbF_l|AW_S8#Ux0%L8T0^iPj+n4~$ZWSwT%^|JMmXp%(k>o?8`H`_pluXo~vZ__H zXl>~|uw%zk*>&VhwPdwb1ICF^w5BX9Y>qA7!y8MX7a9W6|GdTmas>Q0Pl5mDLEt+~ zze9M3<GcKtpkIjZ1L<F&(!Co9q!SwmrjKnvOZR9S2tDB{yFq-o7chv?hA4LP*@I5B z6MHW`-b1Px^DlY?>G@+vcoX_2B4^T18SN=!KSi*PXrhi-;y!x#84~lL*atgy)nTlo zd#5$Ai8k8P32_v^I(FY@x;wW1j6HR<ucPZ_^IqQ^n^GN}o7ne+2?BR<4;`c}lm<x$ z*iSlLl&zaW@sg*Emnhvl1+36=mtx(cbl+39A1K-YceEq?99gyR@H2Fd>gWhF9&d-H z08<o7qgOiJORDiT^rw51b?jdw<=#XhTwY8jIn>d$23=c+7JN+aMn+N|P)b1wA&@$+ zxWK!i8G3=r`k{kolkL$*I7G%;g2AJ8boV|)TT(Q7fKc%9ouFF(?@w(z^nSn6M-gGP zK3+BbjGMv<A1a36a|G1EX96nM(3|j*WYvlncoW_b@v_7_NxUKAoq7cxZ@ebnPvjRN z_1R!ni)-OWm<(n^@en7&aV>E@8;*yP*R#5?j)&v=i#)pGVcG%@VZ>#zsX&Md{C-E{ zSZ~qcFv|`8cB44QMmW#1kFeCEeE9dKZBl;8xajBEErkxM=ZL6(Fr?JqP?ShiQh1+H H0yyzMev89S literal 0 HcmV?d00001 diff --git a/SudokuButtonListener.java b/SudokuButtonListener.java index cf3064d..5563c3b 100644 --- a/SudokuButtonListener.java +++ b/SudokuButtonListener.java @@ -6,36 +6,33 @@ import java.awt.event.ActionListener; public class SudokuButtonListener implements ActionListener { private int row; private int col; - private Sudoku sudoku; + private Grid grid; private JButton[][] buttons; - public SudokuButtonListener(int row, int col, Sudoku sudoku, JButton[][] buttons) { + public SudokuButtonListener(int row, int col, Grid grid, JButton[][] buttons) { this.row = row; this.col = col; - this.sudoku = sudoku; + this.grid = grid; this.buttons = buttons; } @Override public void actionPerformed(ActionEvent e) { - String input = JOptionPane.showInputDialog("Enter a number:"); - if (input != null && input.length() > 0) { - try { - int num = Integer.parseInt(input); - sudoku.getGrid().getCell(row, col).setValue(num); - if (num == 0) { - buttons[row][col].setText(""); // Empty cell if the number is 0 - } else { - buttons[row][col].setText(String.valueOf(num)); - } - if (!isValidMove(num, row, col)) { - buttons[row][col].setForeground(Color.RED); // Set text color to red for invalid move - } else { - buttons[row][col].setForeground(Color.BLACK); // Reset text color - } - } catch (NumberFormatException ex) { - JOptionPane.showMessageDialog(null, "Please enter a valid number."); + try { + int num = Integer.parseInt(JOptionPane.showInputDialog("Enter a number:")); + grid.getCell(row, col).setValue(num); + if (num == 0) { + buttons[row][col].setText(""); // Empty cell if the number is 0 + } else { + buttons[row][col].setText(String.valueOf(num)); } + if (!isValidMove(num, row, col)) { + buttons[row][col].setForeground(Color.RED); // Set text color to red for invalid move + } else { + buttons[row][col].setForeground(Color.BLACK); // Reset text color + } + } catch (NumberFormatException ex) { + JOptionPane.showMessageDialog(null, "Please enter a valid number."); } } @@ -45,7 +42,7 @@ public class SudokuButtonListener implements ActionListener { private boolean isValidRow(int num, int row) { for (int i = 0; i < 9; i++) { - if (sudoku.getGrid().getCell(row, i).getValue() == num && i != col) { + if (grid.getCell(row, i).getValue() == num && i != col) { return false; } } @@ -54,7 +51,7 @@ public class SudokuButtonListener implements ActionListener { private boolean isValidCol(int num, int col) { for (int i = 0; i < 9; i++) { - if (sudoku.getGrid().getCell(i, col).getValue() == num && i != row) { + if (grid.getCell(i, col).getValue() == num && i != row) { return false; } } @@ -66,12 +63,11 @@ public class SudokuButtonListener implements ActionListener { for (int j = 0; j < 3; j++) { int row = i + boxStartRow; int col = j + boxStartCol; - if (sudoku.getGrid().getCell(row, col).getValue() == num && (row != this.row || col != this.col)) { + if (grid.getCell(row, col).getValue() == num && (row != this.row || col != this.col)) { return false; } } } return true; } -} - +} \ No newline at end of file diff --git a/SudokuUI.class b/SudokuUI.class new file mode 100644 index 0000000000000000000000000000000000000000..8d4871aef93808bffe47b020e5a4ab5ff201b99b GIT binary patch literal 2185 zcmaJ?TW=Fr5dMz6_S)MGI1YiBBtXK=H~~Z2LP;PrF$4?_H-`j6ZyS4)E;zgHdYuqj zN(=NxZ_o>s`q&qqi@-*W)Q3uys{W#?LZvgiHnNdgt#r=r%$%8TzL_)o=Rd#v3Sb}Z zDcFevVGQD+j6J-MhHyxs{Z$!bypPLB$vCV)!4U;vOoVY1$M`L+;5bh3TZRoMWt>zH z^{h^@<TNj5csa{UR>qWq7!Jrd7s9lHZp`rad0ukt_5ypn$e$S*uPNA!*ZJcOjzP}e z#9In9%!ZIxupb51=`!YI%nL~KwowoWW{%Q6A|TIJ9LF-t0_!eb%v{nIwJXW;l3~s# zkB_?=vI!nAOv4!!2*<r+JEqA|$|~prt22hFpR6p*>h_d2TO>()-qtloXaAlD_8o6^ zeOfd1;t0EG%Q{;A@}yRBPs?~)K*?GaJFia|?5!<ZDOi^)=hC|vn~EVADs~~MVmI~> zG*7MK5-tmLH{+i%%!0L)qTC$Kbjm7<SP+Odn;ds>2z0P8sVzB4MxD`?t%}2;OkOM* zB^B?$R#Ao{qoQIFODe8lS;b!LtNV11A2t?rvus#&@G9O_@gA<Jc%LC(#|J7t#Ep8e z=SZeJpFx<gOh+IvW*b_O<KI+q3m>WY7&laW!Z1F?X98=y%sq-TM%mF#opeLEt>SZh zA>&IGU*T&RcU0WPHv&-cExuFnJu?+*(E2<h6SlTMv`1VxMUDC(>)6x|0{%GHD^%8< zDZ}B?bb3WiHd(nP?IM%I`kYoNI;o;n)=!mmTXTpMYMOYOodn`(ckixyVCFs6CpA-> z*KOC&s%Mm>tfFPpv6*A(sUrl=Z6=p+S3@n@Mlr{!k>+iyVp4y1G<o)HIBtwRHmD!B z?1FAjXnDu7m!Gxmk%f}8?5PC$2qz(J>D^iPSkg10$YGA`$^<sFwt1^51Bj6EX<MJu zZCfv7jjP0B{c5zfkDI?=D^MnhmP{5(mZ_W0h=-|8K|@IVmWTtY428*9d6)FFdXe@; zeadQ$m9iSg7??sQrj4@U-e4(yfn^P3&Gq%_CX=<-rqL#JEOCLaAvN7Q>PTmdW&vH~ zqE49v#xrB76GVbHAb4;zh}+rZre3c9CB2^t<Bg*K7+Q?Ko%kEebK^Cxhd_T*AbpVl zCR;6B{1Q(A8jbUmhF&ZZJKV1sey4&<o-9P#X{}hH64K2`lldZlotoo|QSX_St3ejT z%ane_K_89zo%Cbz(L=M$eWP*a?t-rHix7B;zWzWE675c+29X$e1YaT&j)Z@Q-}eYo zA{wY7m<U!8T0uCs0wu@V8eXVDog93CwklQ)MilRPjMY^{5`$H=w~OCK2Uify_4d}# zQN<dTcFrWKSep=4tV>8$bp1?m1zx6g91&VWgd|Llf=-$w-DtxmtRkeVF--b2I&hLS zXR((4KV8u2pJQM>OtLJahw`LJ>18G2kSQ<V2misINcbn*^^f-Qescw}Tn+1orI@sW z?p(A-igeY`Tg8T$<ga35OnQJ#kI`2}KU-|h_4Fnl5+@HK)v%?CtphPazHNpDJwv@Q zDa+~}a<ILM_})NWKGYfb5uxag`v`Rg9)r>zxaAl3pI*D=qt)WXeQx5zlpwH?Qr|== z_EAdxNYLMQH@08|TX6>4a30$+OVSbsaGUJzko`R>>ML~e5Q0zO6Hg$Er&vNz#-NO_ e5Hex{ygnsPTctjd%Gm!GLVqJbd=0x`M*anar4p3@ literal 0 HcmV?d00001 diff --git a/SudokuUI.java b/SudokuUI.java index ea418c5..db2f01c 100644 --- a/SudokuUI.java +++ b/SudokuUI.java @@ -2,11 +2,11 @@ import javax.swing.*; import java.awt.*; public class SudokuUI extends JFrame { - private Sudoku sudoku; + private Grid grid; private JButton[][] buttons; - public SudokuUI(Sudoku sudoku) { - this.sudoku = sudoku; + public SudokuUI(Grid grid) { + this.grid = grid; this.buttons = new JButton[9][9]; setTitle("Sudoku"); @@ -28,14 +28,13 @@ public class SudokuUI extends JFrame { } private void createGridButtons(JPanel gridPanel) { // Création sudoku - Grid grid = sudoku.getGrid(); for (int row = 0; row < 9; row++) { for (int col = 0; col < 9; col++) { JButton button = new JButton(); button.setFont(new Font("Arial", Font.BOLD, 24)); button.setContentAreaFilled(false); button.setBorder(BorderFactory.createLineBorder(Color.BLACK)); - button.addActionListener(new SudokuButtonListener(row, col, sudoku, buttons)); + button.addActionListener(new SudokuButtonListener(row, col, grid, buttons)); gridPanel.add(button); buttons[row][col] = button; @@ -45,5 +44,4 @@ public class SudokuUI extends JFrame { } } } -} - +} \ No newline at end of file diff --git a/exemple.gri b/exemple.gri new file mode 100644 index 0000000000000000000000000000000000000000..5637e4d56cd8db38199bd1029b48b5f6c94025e7 GIT binary patch literal 36 scmZQzES8a<oAQr=Yr}5SrFjZWNsVEQmiMPgBs>sMvA(Oz{dKJX0N~gS1ONa4 literal 0 HcmV?d00001