firew0rks 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +28 -0
  4. data/Rakefile +4 -0
  5. data/exe/firew0rks +4 -0
  6. data/lib/firew0rks/error.rb +3 -0
  7. data/lib/firew0rks/frame.rb +27 -0
  8. data/lib/firew0rks/frames/0.txt +41 -0
  9. data/lib/firew0rks/frames/1.txt +41 -0
  10. data/lib/firew0rks/frames/10.txt +41 -0
  11. data/lib/firew0rks/frames/100.txt +41 -0
  12. data/lib/firew0rks/frames/101.txt +41 -0
  13. data/lib/firew0rks/frames/102.txt +41 -0
  14. data/lib/firew0rks/frames/103.txt +41 -0
  15. data/lib/firew0rks/frames/104.txt +41 -0
  16. data/lib/firew0rks/frames/105.txt +41 -0
  17. data/lib/firew0rks/frames/106.txt +41 -0
  18. data/lib/firew0rks/frames/107.txt +41 -0
  19. data/lib/firew0rks/frames/108.txt +41 -0
  20. data/lib/firew0rks/frames/109.txt +41 -0
  21. data/lib/firew0rks/frames/11.txt +41 -0
  22. data/lib/firew0rks/frames/110.txt +41 -0
  23. data/lib/firew0rks/frames/111.txt +41 -0
  24. data/lib/firew0rks/frames/112.txt +41 -0
  25. data/lib/firew0rks/frames/113.txt +41 -0
  26. data/lib/firew0rks/frames/114.txt +41 -0
  27. data/lib/firew0rks/frames/115.txt +41 -0
  28. data/lib/firew0rks/frames/116.txt +41 -0
  29. data/lib/firew0rks/frames/117.txt +41 -0
  30. data/lib/firew0rks/frames/118.txt +41 -0
  31. data/lib/firew0rks/frames/119.txt +41 -0
  32. data/lib/firew0rks/frames/12.txt +41 -0
  33. data/lib/firew0rks/frames/120.txt +41 -0
  34. data/lib/firew0rks/frames/121.txt +41 -0
  35. data/lib/firew0rks/frames/122.txt +41 -0
  36. data/lib/firew0rks/frames/123.txt +41 -0
  37. data/lib/firew0rks/frames/124.txt +41 -0
  38. data/lib/firew0rks/frames/125.txt +41 -0
  39. data/lib/firew0rks/frames/126.txt +41 -0
  40. data/lib/firew0rks/frames/127.txt +41 -0
  41. data/lib/firew0rks/frames/128.txt +41 -0
  42. data/lib/firew0rks/frames/129.txt +41 -0
  43. data/lib/firew0rks/frames/13.txt +41 -0
  44. data/lib/firew0rks/frames/130.txt +41 -0
  45. data/lib/firew0rks/frames/131.txt +41 -0
  46. data/lib/firew0rks/frames/132.txt +41 -0
  47. data/lib/firew0rks/frames/133.txt +41 -0
  48. data/lib/firew0rks/frames/134.txt +41 -0
  49. data/lib/firew0rks/frames/135.txt +41 -0
  50. data/lib/firew0rks/frames/136.txt +41 -0
  51. data/lib/firew0rks/frames/137.txt +41 -0
  52. data/lib/firew0rks/frames/138.txt +41 -0
  53. data/lib/firew0rks/frames/139.txt +41 -0
  54. data/lib/firew0rks/frames/14.txt +41 -0
  55. data/lib/firew0rks/frames/140.txt +41 -0
  56. data/lib/firew0rks/frames/141.txt +41 -0
  57. data/lib/firew0rks/frames/142.txt +41 -0
  58. data/lib/firew0rks/frames/143.txt +41 -0
  59. data/lib/firew0rks/frames/144.txt +41 -0
  60. data/lib/firew0rks/frames/145.txt +41 -0
  61. data/lib/firew0rks/frames/146.txt +41 -0
  62. data/lib/firew0rks/frames/147.txt +41 -0
  63. data/lib/firew0rks/frames/148.txt +41 -0
  64. data/lib/firew0rks/frames/149.txt +41 -0
  65. data/lib/firew0rks/frames/15.txt +41 -0
  66. data/lib/firew0rks/frames/16.txt +41 -0
  67. data/lib/firew0rks/frames/17.txt +41 -0
  68. data/lib/firew0rks/frames/18.txt +41 -0
  69. data/lib/firew0rks/frames/19.txt +41 -0
  70. data/lib/firew0rks/frames/2.txt +41 -0
  71. data/lib/firew0rks/frames/20.txt +41 -0
  72. data/lib/firew0rks/frames/21.txt +41 -0
  73. data/lib/firew0rks/frames/22.txt +41 -0
  74. data/lib/firew0rks/frames/23.txt +41 -0
  75. data/lib/firew0rks/frames/24.txt +41 -0
  76. data/lib/firew0rks/frames/25.txt +41 -0
  77. data/lib/firew0rks/frames/26.txt +41 -0
  78. data/lib/firew0rks/frames/27.txt +41 -0
  79. data/lib/firew0rks/frames/28.txt +41 -0
  80. data/lib/firew0rks/frames/29.txt +41 -0
  81. data/lib/firew0rks/frames/3.txt +41 -0
  82. data/lib/firew0rks/frames/30.txt +41 -0
  83. data/lib/firew0rks/frames/31.txt +41 -0
  84. data/lib/firew0rks/frames/32.txt +41 -0
  85. data/lib/firew0rks/frames/33.txt +41 -0
  86. data/lib/firew0rks/frames/34.txt +41 -0
  87. data/lib/firew0rks/frames/35.txt +41 -0
  88. data/lib/firew0rks/frames/36.txt +41 -0
  89. data/lib/firew0rks/frames/37.txt +41 -0
  90. data/lib/firew0rks/frames/38.txt +41 -0
  91. data/lib/firew0rks/frames/39.txt +41 -0
  92. data/lib/firew0rks/frames/4.txt +41 -0
  93. data/lib/firew0rks/frames/40.txt +41 -0
  94. data/lib/firew0rks/frames/41.txt +41 -0
  95. data/lib/firew0rks/frames/42.txt +41 -0
  96. data/lib/firew0rks/frames/43.txt +41 -0
  97. data/lib/firew0rks/frames/44.txt +41 -0
  98. data/lib/firew0rks/frames/45.txt +41 -0
  99. data/lib/firew0rks/frames/46.txt +41 -0
  100. data/lib/firew0rks/frames/47.txt +41 -0
  101. data/lib/firew0rks/frames/48.txt +41 -0
  102. data/lib/firew0rks/frames/49.txt +41 -0
  103. data/lib/firew0rks/frames/5.txt +41 -0
  104. data/lib/firew0rks/frames/50.txt +41 -0
  105. data/lib/firew0rks/frames/51.txt +41 -0
  106. data/lib/firew0rks/frames/52.txt +41 -0
  107. data/lib/firew0rks/frames/53.txt +41 -0
  108. data/lib/firew0rks/frames/54.txt +41 -0
  109. data/lib/firew0rks/frames/55.txt +41 -0
  110. data/lib/firew0rks/frames/56.txt +41 -0
  111. data/lib/firew0rks/frames/57.txt +41 -0
  112. data/lib/firew0rks/frames/58.txt +41 -0
  113. data/lib/firew0rks/frames/59.txt +41 -0
  114. data/lib/firew0rks/frames/6.txt +41 -0
  115. data/lib/firew0rks/frames/60.txt +41 -0
  116. data/lib/firew0rks/frames/61.txt +41 -0
  117. data/lib/firew0rks/frames/62.txt +41 -0
  118. data/lib/firew0rks/frames/63.txt +41 -0
  119. data/lib/firew0rks/frames/64.txt +41 -0
  120. data/lib/firew0rks/frames/65.txt +41 -0
  121. data/lib/firew0rks/frames/66.txt +41 -0
  122. data/lib/firew0rks/frames/67.txt +41 -0
  123. data/lib/firew0rks/frames/68.txt +41 -0
  124. data/lib/firew0rks/frames/69.txt +41 -0
  125. data/lib/firew0rks/frames/7.txt +41 -0
  126. data/lib/firew0rks/frames/70.txt +41 -0
  127. data/lib/firew0rks/frames/71.txt +41 -0
  128. data/lib/firew0rks/frames/72.txt +41 -0
  129. data/lib/firew0rks/frames/73.txt +41 -0
  130. data/lib/firew0rks/frames/74.txt +41 -0
  131. data/lib/firew0rks/frames/75.txt +41 -0
  132. data/lib/firew0rks/frames/76.txt +41 -0
  133. data/lib/firew0rks/frames/77.txt +41 -0
  134. data/lib/firew0rks/frames/78.txt +41 -0
  135. data/lib/firew0rks/frames/79.txt +41 -0
  136. data/lib/firew0rks/frames/8.txt +41 -0
  137. data/lib/firew0rks/frames/80.txt +41 -0
  138. data/lib/firew0rks/frames/81.txt +41 -0
  139. data/lib/firew0rks/frames/82.txt +41 -0
  140. data/lib/firew0rks/frames/83.txt +41 -0
  141. data/lib/firew0rks/frames/84.txt +41 -0
  142. data/lib/firew0rks/frames/85.txt +41 -0
  143. data/lib/firew0rks/frames/86.txt +41 -0
  144. data/lib/firew0rks/frames/87.txt +41 -0
  145. data/lib/firew0rks/frames/88.txt +41 -0
  146. data/lib/firew0rks/frames/89.txt +41 -0
  147. data/lib/firew0rks/frames/9.txt +41 -0
  148. data/lib/firew0rks/frames/90.txt +41 -0
  149. data/lib/firew0rks/frames/91.txt +41 -0
  150. data/lib/firew0rks/frames/92.txt +41 -0
  151. data/lib/firew0rks/frames/93.txt +41 -0
  152. data/lib/firew0rks/frames/94.txt +41 -0
  153. data/lib/firew0rks/frames/95.txt +41 -0
  154. data/lib/firew0rks/frames/96.txt +41 -0
  155. data/lib/firew0rks/frames/97.txt +41 -0
  156. data/lib/firew0rks/frames/98.txt +41 -0
  157. data/lib/firew0rks/frames/99.txt +41 -0
  158. data/lib/firew0rks/version.rb +5 -0
  159. data/lib/firew0rks.rb +42 -0
  160. data/sig/firew0rks.rbs +4 -0
  161. metadata +203 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 4ef79dec5eee550bf21b8734a560ff9a11b8e697f635eddb094f6b56d78a21d8
4
+ data.tar.gz: '0787b275bd4ea615bf62c8003bdbd2e1a4d00bfcd1a055732507c189436aa37e'
5
+ SHA512:
6
+ metadata.gz: f6ff7e3b61242f100a6663a2ec62687b9955c2fee2b6f5078524fff71c15bd354d2a2397aab4fa4f7bbea44df84bfe155eefb631a036ae7d882d69135ece6dc1
7
+ data.tar.gz: f782fe12f47e5ebe561baa8697c1764b522c2c15f58ea159266a61cd21843bfbd14a763c3e4fc10cf9df30247d980d4dee6849af7c5e759512d0564e81010fef
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2025 Mark24
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # Firew0rks
2
+
3
+ Play fireworks text art animations in your terminal!
4
+
5
+ ## Installation
6
+
7
+ `gem install firew0rks`
8
+
9
+ ## Usage
10
+
11
+ 1) run program
12
+
13
+ `firew0rks`
14
+
15
+ 2) quit
16
+
17
+ `Ctrl + C`
18
+
19
+ ## Acknowledgments
20
+ This project is a Ruby version of [text_art_animations](https://github.com/rvizzz/text_art_animations) by rvizzz. Thank you for the inspiration and the amazing ASCII art animations!
21
+
22
+ ## Contributing
23
+
24
+ Bug reports and pull requests are welcome on GitHub at https://github.com/Mark24Code/firew0rks.
25
+
26
+ ## License
27
+
28
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ task default: %i[]
data/exe/firew0rks ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative "../lib/firew0rks.rb"
3
+
4
+ Fireworks.new.run
@@ -0,0 +1,3 @@
1
+ module Firew0rks
2
+ class Error < StandardError; end
3
+ end
@@ -0,0 +1,27 @@
1
+
2
+
3
+ class Frame
4
+ def initialize
5
+ @dir = File.dirname(__FILE__)
6
+ end
7
+
8
+ def get_name_order(name_path)
9
+ if name_path
10
+ return File.basename(name_path, ".txt").to_i
11
+ end
12
+ end
13
+
14
+ def get_frames
15
+ frame_files = Dir.glob(File.join(@dir, "frames", "*.txt").to_s)
16
+
17
+ frame_files = frame_files.sort do |a, b|
18
+ get_name_order(a) <=> get_name_order(b)
19
+ end
20
+
21
+ frame_contents = frame_files.map do |frame_files|
22
+ File.open(frame_files, 'r').read
23
+ end
24
+
25
+ return frame_contents
26
+ end
27
+ end
@@ -0,0 +1,41 @@
1
+                                                                              
2
+                                                                              
3
+                                                                              
4
+                                                                              
5
+                                                                              
6
+              +=,          .                        .           .             
7
+               `',         -  __^    _=             '        . `;             
8
+                 `  ',  ^  ` );` /^+'               `        ,  ' `, -        
9
+      '^'^+.      `  '  '    ;;=/ '   _+*      -`       .    '     ( `        
10
+    ___.  y7^+,`'. `'xx.   ='-)',  ._' .       `   ..   ; '      . -    ``.   
11
+        `^''^^_^!-.  '!^' `!.;'  ,''''` `      .`  ; .` ' '       ! `     )   
12
+      ^'``'`; .` ; '.x=;` .;*'__'.`_+^^*       -`.`^ ; -'.'       ^       '  `
13
+    =^''`)=+_,.'`. '.^';'^!;;;;7^^z;*++_,_.''''!+; ' ' ; ;   '  ` '- -        
14
+        .;      x^^!;x[;-`-'';^-..'.`` ',;'-.._[_!   ` ' '   '   , ) .,       
15
+  _-';/'```__,.,;`..Y^7;;][]'`.`-;)(;)=_/     ` ^*     `    .`   ( '`.) .   `.
16
+     ==^]*^'-'`'_-;';-][)8*{\;;+;/;!-^^7$_ .... `.  ` `.`. .-  -.-`. `].`-.  `
17
+  _^*;' ^  _,-x^' '.!-5y;*;]z1;-7/-. '',75..`''+_`.,.-`;.;`-; .;;  `, ] `;;  `
18
+ 7''`   .=^' `' '-;);)Y[()(;]/y;_`'),  -^,`';`  '` !;;.!-)-;)`.-)   (.^  )``. 
19
+     ..'* ,`'. +'_[{;'^2[][;*17)^=``*,-'.'`;(,` )  !!)-\)^)(!`;--`  ^,  `-  ' 
20
+   _^` .`' .-']`_y]^'.'Y\7Y[)]\.'^z..-;, '))-''+,.`'!^;{)!]^(-)`-`, ''   `,   
21
+   ' +`   _'``'/)yZ .;;7{[Y!.]/x.'^_-(,^+ ;\_  /^-`.''-[/'{`^;[`;`!  '    `, '
22
+   =^   .* `. y'_^' )!-).')` 72Y(..^[!)_  [_'  ,-;.-``-7, --'[[`--!    `   (  
23
+        ^  -`+'_y` --;.]`';  )[,'`;.Y[ \\., ^  '-!`; .; - ;;-Y^`;!!     `  ^  
24
+       ` _'.='_*  .;)! Z';), ` {  ;; ^[,1Y   ^+--;`; -'`; )!;^! !^;  `   ,  ` 
25
+       `_  4'.7   ) [- *`;^-    ` .)  ^2 ^'   (';!''.- `)`--)`, ( [,  .  \    
26
+       =` .' 4`   [_[' `;+    _   ' , )*,   - ^`(' `;; `-`  - ' ' ^!  ' `1    
27
+      ^`  '`_^`   '7[`  -),      .   .' ^   ` ^`1' '!/. `- ``   ` `!  ' `'    
28
+         `    `    -( _`/^     _  .  '        ' 1`  ,/; -` ``` `   '  '  ;    
29
+                  =]- =`['     ]  -  '     `    -   `^- '- ``` ` . ``    )    
30
+      `           y'' y`y!     ^   ,           `     `- ,' ;'- ;.; '` `  '-   
31
+                   -`    ^                            - '  .'; ',` ` ` .      
32
+                                              ;    '  '    ''; ''' ` - '   ,  
33
+                          `                   .    '  `    ' )```    ` `   '  
34
+                                              '     ; '      '         '      
35
+                                                    .        `                
36
+  `                                                 '  .              '       
37
+  `                                                 `  '                      
38
+                                                         `                    
39
+                                                                              
40
+                                                                              
41
+                                                                              
@@ -0,0 +1,41 @@
1
+                                                                              
2
+                                                                              
3
+                                                                              
4
+                                                                              
5
+                                                                              
6
+              ++,          .                        .                         
7
+               `',         -  _+^    _=             '        .  ;             
8
+                 `  ',  ^  ` );` +^+'                        ,  ' `, -        
9
+      ^''^+.      `  '  '    -;=/ '   _+*,     -        .    '  '  (          
10
+    __..  y^^+;`'. `_=z.   ='.)'^  ._' .       `   .    ' '      . ,     `.   
11
+        '7'''';^!-. ``!^' `;.;'  .''^^` '      .   ;  ` ' '       ; `     ;   
12
+      *'``'`- .` - `.x=;` .;*'__'.`_-'^x       -`.`' ; .'.'       ^       '  `
13
+    x^'``_++,,.'`. '.7';`);;-;;*^^z;*++_._.`'''!+; ' ' ; '   `  ` -- -        
14
+        -'      =^^-;x[;-`-''-),.''.`` -,-^-.._[_!   ' ' `   '   , ; `,       
15
+  _-';+'```..,.`^`..x77;'][)````-;;;;)\_(     ' ^%.._  ' `  ..   ( '`.; .    .
16
+ `   ]+^]*^'''`'_-;';']/;8y{\;'+;!''-;)7Y_  ..._*yz75[,. .  -  -.,`. `{ `-.  `
17
+  _^*'' ^  .,-=^' `.!-57;*-)[]--*/-. `',*Z,.`')]4Z5Yz^\;.-`-; .;-  `. ] `;'  `
18
+ 7''`   .+^' '' '.;;;)9[()!;7)y;_''),  '^_''; '$3zY[7Z3/-;-;;`.-;   ;.^  ;``. 
19
+     ..)^ . '. -'_/{;^7$\{[;1]7)^=``^,.`.'`;(.`.37Y*7%;(;^;(/`---`  ^,` `-` ' 
20
+   _^` .`' .-']`_Z\/'.'3)[$(;7\.'^z..';, ';;,''+_'^^!]-{)){!(-;`-`. -'    ,   
21
+  -` +`   _'``'/;77  ;;7{[]^.],[.'^,';,^+ ;)_  !^- .-';]{`^`^;(`; ,  '    ', .
22
+   _^   .* `. ]']^' )!-).'{' 1ZY;..^_!;,` /,^  ,`;`-` -*,`'--([`.-!    `   (  
23
+   '    *  -`='_7` -;;.{`';  )y;'`, 7( )+.' \  '-!`; ';`- ;;.11`;;(     `  ^  
24
+       ` .'./`.*  .;;; 7'-), ``)  ;' *],11.  ^;--;`- -'`; )!;*) !);  `   ,  ' 
25
+       `_  x' /   ) /- y`,^,    ` .;  ^x *^   !';;''.- `( '') , ! (,  .  (    
26
+       =` .- Z`   /_[' `;;``  .   ' , ;Y,   - ^ (' `;;  .```' , ' [!  ' `^    
27
+      x`  '`_^`  '!Y/`  -),      .` `.' '   ` *'\' `!). `-  '   ` '-  ' `-    
28
+         +  ' `    -! _ (/     _  .  '   `    ' ]`  '/- `` ``` `   -  '  ;    
29
+                  )]- /`/'     ]  -  '     .    -   '(- '' ``` ` ` ``    )    
30
+                  y*' y 7!     ^   ,           `     '' ,' -`- -.' ``    .`   
31
+                  -`` ' ^[         `                  - '   '- `'  ` ` .      
32
+                   '                          -    '  ' `  '`; ''`   ` '   ,  
33
+                                              `    .  `    '`) '.    `     .  
34
+                                              '     - '      '         `      
35
+                                              `     .        '                
36
+  `                                                 `  .              `       
37
+  `                                                 '  .              `       
38
+                                                                              
39
+                                                                              
40
+                                                                              
41
+                                                                              
@@ -0,0 +1,41 @@
1
+                                                                              
2
+                                                                              
3
+                                                                              
4
+                                                                              
5
+                                                                              
6
+             ._-            ,                                                 
7
+             '' `           ' ..)    .,                                       
8
+                    '   -    `]  -'+`  1  *_       -      _7,                 
9
+      !```.        ^    (     --,  1  .'-7_'.    ;.'_ _ x\^'       `          
10
+     y    ;'`.-      ,,    -` ``]   .`   '^_`.   `'`Y)`_^.'  =' ..            
11
+   ;    _[```-.-`   ]''-   ''`  7.`.-=_ ^Y[ ' . +`'.\) +-`.='  '              
12
+  _  _'`y``   .`    ^;.;   `; ..  ^^+;/^,)'_ ' .7,`--,^.._^       `           
13
+    _'```.... `     .]`` ```''`)`';`;,'+-'---_'^x(`-;) ;^_=*._=__-^' `        
14
+   ^'   +`      ,'``)Z-` `` `'`-''',-\ `]''^^{!;]\,'-;;!_]**^^'`     `        
15
+  ^`  `-`      .'   -{'` ---   '` _z_{..1__) `']^1[,;*=x!;' ...``''' .` .     
16
+ '  .-.-.-'``  ]. ` ($--`;(`,``!.+[=/^**7^(][[=[()]!;^;;;''''' . .... .       
17
+  ._!` _'     .'    (7;-`][`(--'''';,__+y7^^;^;;^;!**;)7Yx.`' ''''-,  -       
18
+ '`^   [ .`` _'   .-`-]-`Z*`\`;`.{^'` _=^^);,,;;[^;+;;7*^*(;;`'.'^.__ `  `    
19
+  -   `-'    [ .`.`;`)Z;`*--[-\``1.,;.'`+;]!;^;7!;)[[]%^=!\-)^'+_.  `^'       
20
+   .'  /     ^.`.;`; ]7(`';`*;Z(^^;.(\'.x7(');!^;`]y*)Z[/*,;''^+-^*  `    .   
21
+  ,` .)   .` .`.-;;' 7*]`;(;-;7!)+7,[1+'._^/]^;;'){[;)Yyy,;);'`+^''- ,    `   
22
+ _`.'    '   )-`]'; .`'7`'$( '!;'_Y!+''_^_7Z!'+-'])*;!{()'' ^/+.`.,  `^_   `  
23
+ /_'    ;    [`.7)` -` Y`'^[ `\`, '`'_^`=1^\/]!--7[-;;'1[_`'`;1/``''_   ^  '  
24
+  ^    )  ` -/ ;^^ `;` -`'-.  ]`! `  !-;)[\^)^!.`__;'(`*Z,\.`!; ``'           
25
+ '     (.  -`!'!  ` '  ;  -`  5`- `` ^(]7]Y ' ;''=)-`z`.1 `x ';.```      `    
26
+       -  .' ;''  `.`  !  ;,  ^`    _7z*,;).``;\'=7  ` '^, `  `', ``     `    
27
+      -   / .'    `;`  ' `)'   `   `; ^ (',+`.;=^7^ `` ';^      ^.``     `    
28
+      '  .! )    ; /' `'``''   `    ;-  ].'';,) ^^  `'  '          `     `    
29
+     ^   `  [    ^.(` . .-     -     (  '' _' - ^    '  '          `          
30
+     ^  `  -     ';^  - --     `         `,'```_'    `` -,                    
31
+        `         '/  , ;'      ,  .                    `                     
32
+                 . [  ! !,      (  -                         `                
33
+                 - ^  , /'      !                                             
34
+                 ' '    ''                                                    
35
+                   '                                                          
36
+                                                                              
37
+                                                                              
38
+                                                                              
39
+                                                                              
40
+                                                                              
41
+