%!PS-Adobe-2.0
%%BoundingBox: 0 0 600 600
%%EndComments
/size 600 def
/r {size 2 div 0.9 mul} def
/depth 0 def 
/maxdepth 1 def % change for different versions: 0 for 1 rotor, 1 for 1+6=7 rotors,
%   2 for 1+6+6^2=43 rotors, 3 for 1+6+6^2+6^3=259 rotors, 4 for 1+6+6^2+6^3+6^4=1555 rotors
/down {/depth depth 1 add def} def
/up   {/depth depth 1 sub def} def
/eps {.03} def % width of the narrow part of rotor arm
/del {.12} def % gap between rotors and puzzle
/x1 {3 sqrt 3 div r mul} def
/y1 {1 3 div r mul} def
/y2 {2 3 div r mul} def
/thirdminuseps {1 3 div eps sub r mul} def
/thirdpluseps {1 3 div eps add r mul} def
/oneminusdel {1 del sub r mul} def
/y3 {oneminusdel dup mul thirdminuseps dup mul sub sqrt} def
/theta {thirdminuseps y3 atan} def
/wheel { % draw rotor -- assumes center at 0 0
  newpath
  rand 2147483647 div 6 mul round 60 mul rotate 0 0 r 0 360 arc
  1 setgray gsave fill grestore 0 setgray stroke 0 setgray
  newpath
  0 1 2 {
    x1 y1 thirdminuseps -60 -150 arcn
    0 0 thirdpluseps 30 90 arc
    0  y2 thirdminuseps -90 -180 arcn
    0 0 oneminusdel 90 theta add 150 theta sub arc
    120 rotate
  } for
  closepath fill
  newpath % white dot
  r 0.785 mul 0 r 0.065 mul 0 360 arc 1 setgray fill 0 setgray
} def
/logo {
 gsave
  1 3 div eps sub 1 3 div eps sub scale
  down depth maxdepth le { % add six smaller wheels
    gsave x1 1 3 div eps sub div y1 1 3 div eps sub div translate
          wheel logo grestore
    gsave 0 y2 1 3 div eps sub div translate
          wheel logo grestore
    gsave x1 1 3 div eps sub div neg y1 1 3 div eps sub div translate
          wheel logo grestore
    gsave x1 1 3 div eps sub div neg y1 1 3 div eps sub div neg translate
          wheel logo grestore
    gsave 0 y2 1 3 div eps sub div neg translate
          wheel logo grestore
    gsave x1 1 3 div eps sub div y1 1 3 div eps sub div neg translate
          wheel logo grestore
  } if
  up grestore
} def
5 setlinewidth
size 2 div dup translate
wheel logo showpage