reference updates
authoradam <adam@megacz.com>
Sun, 9 Jan 2005 11:00:52 +0000 (11:00 +0000)
committeradam <adam@megacz.com>
Sun, 9 Jan 2005 11:00:52 +0000 (11:00 +0000)
darcs-hash:20050109110052-5007d-2fd07791070233621ccfdf9e3fc9e6a1a90dda5b.gz

doc/ibex-doc.xml
doc/reference/ibex-logo.pdf [new file with mode: 0644]
doc/reference/lifecycle.pdf
doc/reference/reference.xml

index 05e49d9..6d4df4f 100644 (file)
      **italics**
      __boldface__
      ||typewriter||
      **italics**
      __boldface__
      ||typewriter||
+     ==nonstructural heading==
 
      blank lines become paragraph breaks
 
 
      blank lines become paragraph breaks
 
      \quot
      \apos
 
      \quot
      \apos
 
+     wiki plugins: page topology (who points here, orphaned pages, statistics, document upload, etc)
+                   http://en.wikipedia.org/wiki/Special:Specialpages
+
+     structured ebnf content?
+     http://www.docbook.org/tdg/en/html/docbook.html
+
   </pre>
 
   </section>
   </pre>
 
   </section>
diff --git a/doc/reference/ibex-logo.pdf b/doc/reference/ibex-logo.pdf
new file mode 100644 (file)
index 0000000..cc178bc
--- /dev/null
@@ -0,0 +1,47 @@
+%PDF-1.4\r%âãÏÓ\r
+1 0 obj<</Pages 2 0 R/Type/Catalog/Metadata 10 0 R>>\rendobj\r2 0 obj<</Count 1/Kids[6 0 R]/Type/Pages>>\rendobj\r3 0 obj<</ModDate(D:20040425042500-07'00')/CreationDate(D:20040425042500-07'00')/Creator(Illustrator)/Producer(Adobe PDF library 6.66)>>\rendobj\r5 0 obj null\rendobj\r6 0 obj<</Contents 9 0 R/Type/Page/Parent 2 0 R/MediaBox[0.0 0.0 216.0 216.5]/BleedBox[0.0 0.0 216.0 216.5]/TrimBox[0.0 0.0 216.0 216.5]/ArtBox[17.50049 0.0 206.58105 215.01807]/Resources<</ExtGState<</GS0 7 0 R>>/Properties<</MC0<</Color[20224.0 32768.0 32768.0]/Title(Layer 1)/Visible true/Preview true/Editable true/Printed true/Dimmed true>>>>>>>>\rendobj\r7 0 obj<</Type/ExtGState/SA true/OP false/op false/OPM 1/ca 1.0/CA 1.0/BM/Normal/SMask/None/AIS false>>\rendobj\r8 0 obj 14920\rendobj\r9 0 obj<</Length 8 0 R>>stream\r
+/Layer /MC0 BDC \r1 0 0 -1 0 0 cm\r0 0 0 1 k\r0 i \r/GS0 gs\r56.13184 -157.37939 m\r56.72656 -185.70264 95.53955 -209.16553 119.54199 -213.87158 c\r69.36621 -221.03857 0.31396 -167.31885 37.35547 -115.41846 c\r41.23438 -115.06982 56.92822 -117.90527 62.21387 -120.68066 c\r58.48828 -127.44043 52.84668 -141.06055 56.13184 -157.37939 c\rf\r56.13184 -157.37939 m\r56.72656 -185.70264 95.53955 -209.16553 119.54199 -213.87158 c\r69.36621 -221.03857 0.31396 -167.31885 37.35547 -115.41846 c\r41.23438 -115.06982 56.92822 -117.90527 62.21387 -120.68066 c\r58.48828 -127.44043 52.84668 -141.06055 56.13184 -157.37939 c\rf\r0 0 0 0 K\r1 w 4 M 0 j 0 J []0 d \r56.13184 -157.37939 m\r56.72656 -185.70264 95.53955 -209.16553 119.54199 -213.87158 c\r69.36621 -221.03857 0.31396 -167.31885 37.35547 -115.41846 c\r41.23438 -115.06982 56.92822 -117.90527 62.21387 -120.68066 c\r58.48828 -127.44043 52.84668 -141.06055 56.13184 -157.37939 c\rS\r145.86621 -184.11328 m\r142.31152 -185.41455 138.5332 -186.14502 134.65527 -186.39795 c\r156.23242 -168.72803 166.46582 -127.32227 145.51074 -105.37109 c\r126.62891 -85.58984 96.10938 -75.66211 70.55713 -67.99609 c\r97.55029 -74.76172 124.80078 -81.09277 152.12012 -86.4375 c\r151.18359 -86.26758 142.32129 -84.61328 142.37891 -86.15234 c\r142.46387 -88.3584 153.94629 -95.12598 155.91406 -97.41504 c\r163.5332 -106.27637 167.03906 -109.69727 170.37598 -120.73535 c\r174.27832 -133.63574 175.87793 -152.98779 171.55371 -165.83936 c\r164.54199 -174.4707 155.41309 -180.61719 145.86621 -184.11328 c\rf\r145.86621 -184.11328 m\r142.31152 -185.41455 138.5332 -186.14502 134.65527 -186.39795 c\r156.23242 -168.72803 166.46582 -127.32227 145.51074 -105.37109 c\r126.62891 -85.58984 96.10938 -75.66211 70.55713 -67.99609 c\r97.55029 -74.76172 124.80078 -81.09277 152.12012 -86.4375 c\r151.18359 -86.26758 142.32129 -84.61328 142.37891 -86.15234 c\r142.46387 -88.3584 153.94629 -95.12598 155.91406 -97.41504 c\r163.5332 -106.27637 167.03906 -109.69727 170.37598 -120.73535 c\r174.27832 -133.63574 175.87793 -152.98779 171.55371 -165.83936 c\r164.54199 -174.4707 155.41309 -180.61719 145.86621 -184.11328 c\rf\r145.86621 -184.11328 m\r142.31152 -185.41455 138.5332 -186.14502 134.65527 -186.39795 c\r156.23242 -168.72803 166.46582 -127.32227 145.51074 -105.37109 c\r126.62891 -85.58984 96.10938 -75.66211 70.55713 -67.99609 c\r97.55029 -74.76172 124.80078 -81.09277 152.12012 -86.4375 c\r151.18359 -86.26758 142.32129 -84.61328 142.37891 -86.15234 c\r142.46387 -88.3584 153.94629 -95.12598 155.91406 -97.41504 c\r163.5332 -106.27637 167.03906 -109.69727 170.37598 -120.73535 c\r174.27832 -133.63574 175.87793 -152.98779 171.55371 -165.83936 c\r164.54199 -174.4707 155.41309 -180.61719 145.86621 -184.11328 c\rS\r175.57422 -56.73828 m\r176.0498 -55.29004 176.2959 -54.125 176.40332 -53.24609 c\r176.5957 -54.22852 176.29883 -55.44336 175.57422 -56.73828 c\rh\rf\r175.57422 -56.73828 m\r176.0498 -55.29004 176.2959 -54.125 176.40332 -53.24609 c\r176.5957 -54.22852 176.29883 -55.44336 175.57422 -56.73828 c\rh\rf\r175.57422 -56.73828 m\r176.0498 -55.29004 176.2959 -54.125 176.40332 -53.24609 c\r176.5957 -54.22852 176.29883 -55.44336 175.57422 -56.73828 c\rh\rS\r176.40332 -53.24609 m\r176.40039 -53.22754 176.39746 -53.20703 176.3916 -53.18555 c\r175.81543 -50.54492 176.73145 -50.5791 176.40332 -53.24609 c\rh\rf\r176.40332 -53.24609 m\r176.40039 -53.22754 176.39746 -53.20703 176.3916 -53.18555 c\r175.81543 -50.54492 176.73145 -50.5791 176.40332 -53.24609 c\rh\rf\r176.40332 -53.24609 m\r176.40039 -53.22754 176.39746 -53.20703 176.3916 -53.18555 c\r175.81543 -50.54492 176.73145 -50.5791 176.40332 -53.24609 c\rh\rS\r109.72656 -115.14746 m\r106.53516 -114.98682 107.25 -112.95947 109.72656 -115.14746 c\r109.72656 -115.14746 109.72656 -115.14746 109.72656 -115.14746 c\rh\rf\r109.72656 -115.14746 m\r106.53516 -114.98682 107.25 -112.95947 109.72656 -115.14746 c\r109.72656 -115.14746 109.72656 -115.14746 109.72656 -115.14746 c\rh\rf\r109.72656 -115.14746 m\r106.53516 -114.98682 107.25 -112.95947 109.72656 -115.14746 c\r109.72656 -115.14746 109.72656 -115.14746 109.72656 -115.14746 c\rh\rS\r180.67383 -74.25 m\r181.40527 -74.38086 181.55762 -74.42188 180.67383 -74.25 c\r180.67383 -74.25 180.67383 -74.25 180.67383 -74.25 c\rh\rf\r180.67383 -74.25 m\r181.40527 -74.38086 181.55762 -74.42188 180.67383 -74.25 c\r180.67383 -74.25 180.67383 -74.25 180.67383 -74.25 c\rh\rf\r180.67383 -74.25 m\r181.40527 -74.38086 181.55762 -74.42188 180.67383 -74.25 c\r180.67383 -74.25 180.67383 -74.25 180.67383 -74.25 c\rh\rS\r99.10938 -55.81055 m\r84.30566 -52.09961 87.70215 -52.38672 99.10938 -55.81055 c\r99.10938 -55.81055 99.10938 -55.81055 99.10938 -55.81055 c\rh\rf\r99.10938 -55.81055 m\r84.30566 -52.09961 87.70215 -52.38672 99.10938 -55.81055 c\r99.10938 -55.81055 99.10938 -55.81055 99.10938 -55.81055 c\rh\rf\r99.10938 -55.81055 m\r84.30566 -52.09961 87.70215 -52.38672 99.10938 -55.81055 c\r99.10938 -55.81055 99.10938 -55.81055 99.10938 -55.81055 c\rh\rS\r70.55713 -67.99609 m\r55.75293 -64.28711 59.14893 -64.57422 70.55713 -67.99609 c\r70.55713 -67.99609 70.55713 -67.99609 70.55713 -67.99609 c\rh\rf\r70.55713 -67.99609 m\r55.75293 -64.28711 59.14893 -64.57422 70.55713 -67.99609 c\r70.55713 -67.99609 70.55713 -67.99609 70.55713 -67.99609 c\rh\rf\r70.55713 -67.99609 m\r55.75293 -64.28711 59.14893 -64.57422 70.55713 -67.99609 c\r70.55713 -67.99609 70.55713 -67.99609 70.55713 -67.99609 c\rh\rS\r152.12012 -86.4375 m\r152.85059 -86.56836 153.00488 -86.60938 152.12012 -86.4375 c\r152.12012 -86.4375 152.12012 -86.4375 152.12012 -86.4375 c\rh\rf\r152.12012 -86.4375 m\r152.85059 -86.56836 153.00488 -86.60938 152.12012 -86.4375 c\r152.12012 -86.4375 152.12012 -86.4375 152.12012 -86.4375 c\rh\rf\r152.12012 -86.4375 m\r152.85059 -86.56836 153.00488 -86.60938 152.12012 -86.4375 c\r152.12012 -86.4375 152.12012 -86.4375 152.12012 -86.4375 c\rh\rS\r66.59131 -91.49023 m\r64.96582 -89.86621 61.02002 -86.15039 56.37695 -88.00879 c\r51.73438 -89.86621 52.43018 -89.16797 55.68115 -92.88281 c\r58.93066 -96.59766 62.64453 -94.50781 63.57275 -93.81152 c\r64.50195 -93.11621 68.2168 -93.11621 66.59131 -91.49023 c\rh\r145.98145 -93.5791 m\r124.3877 -112.47607 113.82813 -115.354 109.72656 -115.14746 c\r107.25 -112.95947 106.53516 -114.98682 109.72656 -115.14746 c\r109.81641 -115.22656 109.90625 -115.31104 110.00195 -115.40039 c\r116.03711 -121.20361 116.26855 -127.23975 117.19727 -132.11377 c\r118.12695 -136.98926 116.26855 -143.72119 114.64355 -144.64941 c\r113.01758 -145.57813 111.85742 -146.2749 110.46484 -145.11377 c\r109.07227 -143.95361 109.53711 -135.82861 105.59033 -134.20361 c\r101.64355 -132.57959 96.53711 -123.06104 89.34082 -120.73926 c\r82.14453 -118.41797 81.6792 -116.79297 81.91211 -119.81055 c\r82.14453 -122.82813 83.07275 -123.75684 79.35791 -129.09766 c\r75.64453 -134.43506 76.57324 -132.57959 74.94824 -132.34619 c\r73.32275 -132.11377 71.2334 -117.49023 71.46582 -115.40039 c\r71.69873 -113.31152 38.50244 -114.70361 36.41357 -116.3291 c\r34.32422 -117.95361 41.75293 -104.25781 38.03809 -102.40039 c\r34.32422 -100.54297 39.89551 -103.09668 35.7168 -100.54297 c\r31.53857 -97.99121 39.89551 -94.74023 38.50244 -91.49023 c\r37.10938 -88.24023 28.98486 -72.45605 28.28809 -72.45605 c\r27.5918 -72.45605 18.53857 -52.72461 18.07471 -50.63477 c\r17.61035 -48.54492 19.4668 -46.22266 19.4668 -42.97363 c\r19.4668 -39.72168 19.23486 -36.70605 20.16406 -34.84863 c\r21.09229 -32.99316 23.18164 -34.38477 23.18164 -34.38477 c\r23.18164 -34.38477 23.41357 -33.9209 23.41357 -33.9209 c\r23.41357 -33.9209 37.57373 -33.22461 25.50244 -32.99316 c\r13.43115 -32.75879 36.87793 -29.97266 41.52002 -34.38477 c\r46.1626 -38.79395 44.07324 -32.0625 54.28809 -34.15234 c\r64.50195 -36.24219 47.09131 -30.20508 88.41211 -60.15137 c\r129.73242 -90.09863 90.26953 -52.72461 101.64355 -17.20703 c\r113.01758 18.31055 94.67969 -8.38379 122.76855 -45.29297 c\r147.11426 -77.28516 170.76074 -65.33203 175.57422 -56.73828 c\r173.42578 -63.26953 166.54883 -75.58105 145.98145 -93.5791 c\rh\rf\r66.59131 -91.49023 m\r64.96582 -89.86621 61.02002 -86.15039 56.37695 -88.00879 c\r51.73438 -89.86621 52.43018 -89.16797 55.68115 -92.88281 c\r58.93066 -96.59766 62.64453 -94.50781 63.57275 -93.81152 c\r64.50195 -93.11621 68.2168 -93.11621 66.59131 -91.49023 c\rh\r145.98145 -93.5791 m\r124.3877 -112.47607 113.82813 -115.354 109.72656 -115.14746 c\r107.25 -112.95947 106.53516 -114.98682 109.72656 -115.14746 c\r109.81641 -115.22656 109.90625 -115.31104 110.00195 -115.40039 c\r116.03711 -121.20361 116.26855 -127.23975 117.19727 -132.11377 c\r118.12695 -136.98926 116.26855 -143.72119 114.64355 -144.64941 c\r113.01758 -145.57813 111.85742 -146.2749 110.46484 -145.11377 c\r109.07227 -143.95361 109.53711 -135.82861 105.59033 -134.20361 c\r101.64355 -132.57959 96.53711 -123.06104 89.34082 -120.73926 c\r82.14453 -118.41797 81.6792 -116.79297 81.91211 -119.81055 c\r82.14453 -122.82813 83.07275 -123.75684 79.35791 -129.09766 c\r75.64453 -134.43506 76.57324 -132.57959 74.94824 -132.34619 c\r73.32275 -132.11377 71.2334 -117.49023 71.46582 -115.40039 c\r71.69873 -113.31152 38.50244 -114.70361 36.41357 -116.3291 c\r34.32422 -117.95361 41.75293 -104.25781 38.03809 -102.40039 c\r34.32422 -100.54297 39.89551 -103.09668 35.7168 -100.54297 c\r31.53857 -97.99121 39.89551 -94.74023 38.50244 -91.49023 c\r37.10938 -88.24023 28.98486 -72.45605 28.28809 -72.45605 c\r27.5918 -72.45605 18.53857 -52.72461 18.07471 -50.63477 c\r17.61035 -48.54492 19.4668 -46.22266 19.4668 -42.97363 c\r19.4668 -39.72168 19.23486 -36.70605 20.16406 -34.84863 c\r21.09229 -32.99316 23.18164 -34.38477 23.18164 -34.38477 c\r23.18164 -34.38477 23.41357 -33.9209 23.41357 -33.9209 c\r23.41357 -33.9209 37.57373 -33.22461 25.50244 -32.99316 c\r13.43115 -32.75879 36.87793 -29.97266 41.52002 -34.38477 c\r46.1626 -38.79395 44.07324 -32.0625 54.28809 -34.15234 c\r64.50195 -36.24219 47.09131 -30.20508 88.41211 -60.15137 c\r129.73242 -90.09863 90.26953 -52.72461 101.64355 -17.20703 c\r113.01758 18.31055 94.67969 -8.38379 122.76855 -45.29297 c\r147.11426 -77.28516 170.76074 -65.33203 175.57422 -56.73828 c\r173.42578 -63.26953 166.54883 -75.58105 145.98145 -93.5791 c\rh\rf\r66.59131 -91.49023 m\r64.96582 -89.86621 61.02002 -86.15039 56.37695 -88.00879 c\r51.73438 -89.86621 52.43018 -89.16797 55.68115 -92.88281 c\r58.93066 -96.59766 62.64453 -94.50781 63.57275 -93.81152 c\r64.50195 -93.11621 68.2168 -93.11621 66.59131 -91.49023 c\rh\r145.98145 -93.5791 m\r124.3877 -112.47607 113.82813 -115.354 109.72656 -115.14746 c\r107.25 -112.95947 106.53516 -114.98682 109.72656 -115.14746 c\r109.81641 -115.22656 109.90625 -115.31104 110.00195 -115.40039 c\r116.03711 -121.20361 116.26855 -127.23975 117.19727 -132.11377 c\r118.12695 -136.98926 116.26855 -143.72119 114.64355 -144.64941 c\r113.01758 -145.57813 111.85742 -146.2749 110.46484 -145.11377 c\r109.07227 -143.95361 109.53711 -135.82861 105.59033 -134.20361 c\r101.64355 -132.57959 96.53711 -123.06104 89.34082 -120.73926 c\r82.14453 -118.41797 81.6792 -116.79297 81.91211 -119.81055 c\r82.14453 -122.82813 83.07275 -123.75684 79.35791 -129.09766 c\r75.64453 -134.43506 76.57324 -132.57959 74.94824 -132.34619 c\r73.32275 -132.11377 71.2334 -117.49023 71.46582 -115.40039 c\r71.69873 -113.31152 38.50244 -114.70361 36.41357 -116.3291 c\r34.32422 -117.95361 41.75293 -104.25781 38.03809 -102.40039 c\r34.32422 -100.54297 39.89551 -103.09668 35.7168 -100.54297 c\r31.53857 -97.99121 39.89551 -94.74023 38.50244 -91.49023 c\r37.10938 -88.24023 28.98486 -72.45605 28.28809 -72.45605 c\r27.5918 -72.45605 18.53857 -52.72461 18.07471 -50.63477 c\r17.61035 -48.54492 19.4668 -46.22266 19.4668 -42.97363 c\r19.4668 -39.72168 19.23486 -36.70605 20.16406 -34.84863 c\r21.09229 -32.99316 23.18164 -34.38477 23.18164 -34.38477 c\r23.18164 -34.38477 23.41357 -33.9209 23.41357 -33.9209 c\r23.41357 -33.9209 37.57373 -33.22461 25.50244 -32.99316 c\r13.43115 -32.75879 36.87793 -29.97266 41.52002 -34.38477 c\r46.1626 -38.79395 44.07324 -32.0625 54.28809 -34.15234 c\r64.50195 -36.24219 47.09131 -30.20508 88.41211 -60.15137 c\r129.73242 -90.09863 90.26953 -52.72461 101.64355 -17.20703 c\r113.01758 18.31055 94.67969 -8.38379 122.76855 -45.29297 c\r147.11426 -77.28516 170.76074 -65.33203 175.57422 -56.73828 c\r173.42578 -63.26953 166.54883 -75.58105 145.98145 -93.5791 c\rh\rS\r196.70313 -163.91699 m\r182.1748 -199.03125 140.87012 -218.39355 107.91357 -211.46973 c\r63.04688 -202.04297 35.12695 -159.54883 45.11816 -114.5874 c\r51.96143 -110.54395 64.71875 -108.27539 72.52344 -109.51123 c\r76.92529 -110.20801 73.47949 -113.81055 73.05176 -116.55811 c\r71.73535 -125.00439 73.95361 -134.27393 75.86621 -142.45313 c\r79.95117 -159.92432 85.72998 -170.91064 102.35303 -179.1875 c\r118.72754 -187.34131 137.46875 -189.42969 153.90723 -180.47119 c\r181.68652 -165.33203 198.34961 -118.62598 174.06445 -93.18457 c\r155.18359 -73.40234 124.66309 -63.47461 99.10938 -55.81055 c\r126.10352 -62.57422 179.16602 -72.13477 206.48535 -77.47656 c\r205.5498 -77.30664 170.875 -72.42871 170.93164 -73.96484 c\r171.01563 -76.13477 184.25977 -84.7998 186.29883 -87.5166 c\r194.0752 -97.87793 198.00879 -104.87598 200.4082 -117.51855 c\r202.24707 -127.19922 201.95703 -132.20117 201.83887 -137.53809 c\r201.6123 -147.77393 199.51563 -154.43164 196.70313 -163.91699 c\rf\r196.70313 -163.91699 m\r182.1748 -199.03125 140.87012 -218.39355 107.91357 -211.46973 c\r63.04688 -202.04297 35.12695 -159.54883 45.11816 -114.5874 c\r51.96143 -110.54395 64.71875 -108.27539 72.52344 -109.51123 c\r76.92529 -110.20801 73.47949 -113.81055 73.05176 -116.55811 c\r71.73535 -125.00439 73.95361 -134.27393 75.86621 -142.45313 c\r79.95117 -159.92432 85.72998 -170.91064 102.35303 -179.1875 c\r118.72754 -187.34131 137.46875 -189.42969 153.90723 -180.47119 c\r181.68652 -165.33203 198.34961 -118.62598 174.06445 -93.18457 c\r155.18359 -73.40234 124.66309 -63.47461 99.10938 -55.81055 c\r126.10352 -62.57422 179.16602 -72.13477 206.48535 -77.47656 c\r205.5498 -77.30664 170.875 -72.42871 170.93164 -73.96484 c\r171.01563 -76.13477 184.25977 -84.7998 186.29883 -87.5166 c\r194.0752 -97.87793 198.00879 -104.87598 200.4082 -117.51855 c\r202.24707 -127.19922 201.95703 -132.20117 201.83887 -137.53809 c\r201.6123 -147.77393 199.51563 -154.43164 196.70313 -163.91699 c\rf\r196.70313 -163.91699 m\r182.1748 -199.03125 140.87012 -218.39355 107.91357 -211.46973 c\r63.04688 -202.04297 35.12695 -159.54883 45.11816 -114.5874 c\r51.96143 -110.54395 64.71875 -108.27539 72.52344 -109.51123 c\r76.92529 -110.20801 73.47949 -113.81055 73.05176 -116.55811 c\r71.73535 -125.00439 73.95361 -134.27393 75.86621 -142.45313 c\r79.95117 -159.92432 85.72998 -170.91064 102.35303 -179.1875 c\r118.72754 -187.34131 137.46875 -189.42969 153.90723 -180.47119 c\r181.68652 -165.33203 198.34961 -118.62598 174.06445 -93.18457 c\r155.18359 -73.40234 124.66309 -63.47461 99.10938 -55.81055 c\r126.10352 -62.57422 179.16602 -72.13477 206.48535 -77.47656 c\r205.5498 -77.30664 170.875 -72.42871 170.93164 -73.96484 c\r171.01563 -76.13477 184.25977 -84.7998 186.29883 -87.5166 c\r194.0752 -97.87793 198.00879 -104.87598 200.4082 -117.51855 c\r202.24707 -127.19922 201.95703 -132.20117 201.83887 -137.53809 c\r201.6123 -147.77393 199.51563 -154.43164 196.70313 -163.91699 c\rS\rEMC \r\rendstream\rendobj\r10 0 obj<</Length 19694/Type/Metadata/Subtype/XML>>stream\r
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>\r
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>\r
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>\r
+<rdf:Description rdf:about='uuid:3097121e-96ab-11d8-91f8-000a956e58ec' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='Adobe PDF library 6.66'></rdf:Description>\r
+<rdf:Description rdf:about='uuid:3097121e-96ab-11d8-91f8-000a956e58ec' xmlns:xap='http://ns.adobe.com/xap/1.0/'\r
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/' xap:CreateDate='2004-04-25T04:25:00-07:00' xap:ModifyDate='2004-04-25T04:25:00-07:00' xap:CreatorTool='Illustrator' xap:MetadataDate='2004-04-25T04:25:00-07:00'><xap:Thumbnails><rdf:Alt><rdf:li rdf:parseType='Resource'><xapGImg:format>JPEG</xapGImg:format><xapGImg:width>228</xapGImg:width><xapGImg:height>256</xapGImg:height><xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADkAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7&#xA;FXYqk3mPzj5W8tWn1vXtVtdNgNeDXEqRl+JoQgYguR4LU4q8b81f85k/lzpjPFodrd67Mp+GRE+r&#xA;W7D/AIyTUlBr/wAVHFXnM/8Azlt+bPmS9/R3lHy5biaWpSCKK4v7oD/JMZiWg/4x4qh9V8+/nvU/&#xA;4y8/ab5Ti2LWDC2lvFH/ADC2ENxcKaj/AHaVxVJX/OOzsCRJ57846/MDU/VHh0i2Pshka9elf+Kl&#xA;+jFUdYf85ZarpQU6dos1xKop62sapc6ixPiQVhQf7BVxVGj/AJzZ8/D/AKUWlfdc/wDVXFUbYf8A&#xA;Ob3mONw1/wCWbW5XbkkFy8A96co5iPprirL9E/5zY8lXDKus6Ff6fyoC1u0V0invUs0DEfJcVel+&#xA;WPz+/KTzGY47LzFbQ3Lj/ee8LWj8tvgH1gRhz/qVxV6CkiOAUYMCAQQex6HFV2KuxV2KuxV2KuxV&#xA;2KuxV2KuxV2KuxV2KuxV2KuxVhP5ifnF5D8g23PXdQH11l5w6Zb0lu5AehEdRxU9mchffFXy5+YP&#xA;/OXvnrXTJa+WYU8u6eaqJlInvGHj6jAJHWlRxXkv82KvJdL0bzr571uX6sl1rOpMPUvLyeQuI0HW&#xA;S4uJm4xoP5nYDFU+Om/ln5UqNVuj5z1tR/vBp0jQaTE3hLe0E1xTrSBVX/iw4qgNY/Nbzhf2babZ&#xA;Tx6DojH/AI5GjRixtyP+LPS/eTfOV2OKsPxV2KuxV2KuxV2KuxVlfk/80/zA8nyIfL+t3NrAjcvq&#xA;TN6tsT3rBJzj+njX3xV9Efl7/wA5n2UxisvPOm/VGNFOq2AaSLpSskDFpFHclGf/AFcVfR3l/wAy&#xA;6D5i02PU9Dv4dQsJfsXEDh1qOoNOjDup3HfFUzxV2KuxV2KuxV2KuxV2KuxV2KuxV2KoTVdW03Sd&#xA;Pn1DU7mOzsrZDJPcTMERFXqWZqAYq+UPze/5y7v71p9H/L+tpafYfXZF/fPTr9Xjcfuwf5nHLwCn&#xA;FXzXeXl5e3Ut3ezyXN3Oxee4mdpJHdtyzuxLMT4nFWZ6L5D03T9Kt/Mnnq4l03RrlfU0zSoOP6S1&#xA;FezQo+0MBPWeQU/lDYqgfM/5h6nq9guiadBHoXlaFuUGhWRIjYjpJcyn95cy/wCXKT/khemKsUxV&#xA;2KuxV2KuxV2KuxV2KuxV2KuxVP8Ayb5882eTNUXUvLmoyWNxUeqinlFKqmoWWJqo4+Y27b4q+xPy&#xA;c/5yg8t+czBo+vqmi+ZHokakn6rcv/xS7Gqsf99ua+DMcVe44q7FXYq7FXYq7FXYq7FXYq7FWN+f&#xA;vP8A5b8jeXptb165ENvH8MMS0aWaQ/ZjiSo5MfnTuSBU4q+E/wA3fzs81fmRqVbxzZ6HA1bHR4mJ&#xA;jSmweU7epJ/lEbfsgYq87xV6PZaHpPkCxtta802sd/5pu4xPovliavp2ytvFeakvv9qO3P2ur0XY&#xA;qsI13XtY17VbjVtYupLzULluU08hqdtgqjoqqNlUbAbDbFUvxV2KuxV2KuxV2KuxV2KuxV2KuxV2&#xA;KuxVsEg1GxHQ4q+lPyE/5yhudLe38s+e7lp9NNIrHW5CWkgqQFS5Y7tGO0h3XvVfsqvr2OSOWNZI&#xA;2DxuAyOpBUqRUEEdQcVXYq7FXYq7FXYq7FXYqxzz9588v+R/Ldzr2tylLaD4Y4koZJZWrwijUkcm&#xA;an8TQAkKvz7/ADM/MvzF+YPmSXWdYlpGKpYWKk+lbwk7Ig8T+03Vj7UAVYlir0LyzpuneT9Bg87a&#xA;/bR3ep3nL/COiTrySRkPFtQukPW3iYUjX/dj/wCSpqqwfU9T1DVNQuNR1G4ku767kaW5uZWLO7sa&#xA;lmJxVC4q7FXYq7FXYqzHyV+UX5iecyjaBos89oxp9flAhtdq1pNJxRiKbhan2xV7f5Y/5wl1GRVl&#xA;8zeYY4DQE2unxNITX/i6bhxI/wCMRxV6XpH/ADiL+TdiALq0vNVoNzd3UiEn/o1+rj8MVZDF/wA4&#xA;6/kxEKReWLYA9eTSSn75Wen0YqlvmH/nGr8qLrTp/wBH+WrNdQpyhaSa8ijLgbBvq0sdAemwNOvF&#xA;qUKr5T8x6R+WWna7d6F5h0XW/KGrWknpSm2nh1S2FekginS0lKEHkpWZqruMVS+T8o77UonufJGr&#xA;Wfm+BAWa1sy0GpKgNCz6fcBJjv8A765jFWC3FvcW08lvcRPDPExSWGRSjqw2KspoQRiqnirsVdir&#xA;6N/5xo/5yDm0K5tvJfmq6LaFMRFpN9KR/okjH4YpHY7Qt+yT9g/5P2VX2MCCKjpireKuxV2KuxV2&#xA;KqF9fWlhZT3t5MkFrbRtLPNIeKIiKWZmPYACpxV+fn56fm9ffmN5reeJni8vWBaLSLQ1Wq1o07r/&#xA;AL8lp/sRRe1Sq81xVlv5feWNP1O6u9Z13lH5V0CNbvWHQ8WlLHjBZxH/AH7cyfAPBeTfs4qlfm7z&#xA;TqPmjXrjV74LG0vGO2tYhxht7eMcIbeFRsscSAKo/jiqTYq7FXYq7FWYfl1+VPnP8wNRNpoFmWt4&#xA;243WozVS1h2r8clDVqdEUFj4UxV9c/lr/wA4r+QPKqRXesxjzFrAoxmu0H1eNhQ0jtyWTr3fkfCm&#xA;KvaIoo4o1jjUIiAKqgUAAFAPuGKr8VdirsVdiryD/nIj8lLXz/5ba/02IL5r0xC1hINvXj3ZrZ/9&#xA;Y7oezeALYq+EAbyxvAQZLW8tZKgjlHLHLG30MrKw+YOKs+tfzL03zFbx6Z+ZNk+rxIgjtvMttxTW&#xA;bYKKJylai3cYpuk3xb1Dg4qkvnHyBfeX4LbVLS6i1nyxqBI03XrQH0ZCBUxSo3xwTqPtRSb+FeuK&#xA;sVxV2KuxV9m/84p/nPJ5i0r/AAXrtwZNa0uKunTyGrXFolBxJPV4eh8Vof2WOKvofFXYq7FXYq7F&#xA;XzF/zmH+ab2dlB5B0uYrcXii51pkJBFvWsUBp/vxl5MOvEDs2KvkjFV0ccksixxqXkchURQSxYmg&#xA;AA6k4qz78x5o/L2m2H5dWbKf0Q31vzJKlCJtYlSkiVFarZofQX/K5nvirz/FXYq7FXYq9g/IT8gt&#xA;Q/Ma+Op6kz2XlOzkC3FwopJcyChMEFem32n/AGfc9FX3F5e8u6L5d0i30jRbSOx061XjDbxDio8T&#xA;4knuxqSdySd8VTLFXYq7FXYq7FXYq0QCKHcHFXxr/wA5d/lSuia/F520uDjputP6epqgNI76hYSH&#xA;/jOoJP8AlKSftDFXztirJfJfni+8s3E8TwJqeg6gvpaxoVyT9Wuou1af3cqdY5V+JD02qCqivO3k&#xA;2y061tfMfly4bUPKOqsVtLhqevaXAAZ7G8A2WaMHY9JF+Je9FWIYq7FUy8t+YdU8ua9Y65pcvo3+&#xA;nyrNA/UVXqrDurLVWHcGmKv0j8iecNO84+UtM8x6eaQahCspjqCY5N1kjYjvHIrIfcYqn+KuxV2K&#xA;oTVtStdL0u81O8f07SxhkuLiSleMcSl3bt0UVxV+aPnTzTfea/NeqeYr3a41KdpuFahE+zHGD4Rx&#xA;hUHyxVJMVZ1+VUENhean51u0V7Tyjbi8t0cArJqUzelp8dCDWkx9U/5KHFWE3FxPc3EtxcSNLPM7&#xA;STSuaszuaszE9SScVU8VdirsVZf+VX5d6h+YHnSz8v2pMcDfvtRuhT9zaoR6j77cjUKg/mIxV+in&#xA;l/QNJ8v6NaaPpNuttp9lGIreFOiqv6yTuSdyak7nFUxxV2KuxV2KuxV2KuxV2Ksa/MbyZZecvJmq&#xA;+XbviovoGSGZhURTD4opOlfgkVW260pir82L+xu9PvrmwvIzDd2krwXELfaSSNijqfcMKYqh8VZZ&#xA;+Xvmy20bUJdN1iM3XlTWwlrr1kT/ALq5fBcxdeM9ux9SNvmvRjiqz8yfIOq+RPNt55f1D94sR9Sy&#xA;uwKJcWz19OVeo3pRhXZgR2xVi2KuxV9Q/wDOFvnuZL7VvJN1JW3lT9JacGOyupWOdB/rgowH+S3j&#xA;ir6zxV2KuxV47/zld5kfRfygvoI24TazPDp0bD7QDkyyfQ0ULqfnir4NxV2Ks88xEaJ+V3lzQx8N&#xA;5r883mDUFPX0ULWdgp9qJPIP9cYqwPFXYq7FXYq+3v8AnEb8v00D8vj5iuY+Op+Y29YE/aS0jqsC&#xA;+3OrSbHcMK9MVe7Yq7FXYq7FXYq7FXYq7FXYq7FXwl/zlh5PGg/mtcX8KBbTXoUvl4moEw/dTDx5&#xA;FkEh/wBfFXjGKuxV9kfmV5CT8yv+cfvL3mOzjEvmXStKt72OQULygQKbuA0qW5EFkHXkANuRxV8b&#xA;4q7FWafk15pPlf8AM/y7q5kMUEd2kF2/YQXNYJSa1B4pIW+jFX6PqaqDQiorQ7HFW8Vdir5c/wCc&#xA;4r8pY+UtPVtp5by4lWv++FiRCR/z2ehxV8nYqqW8E1xPHBCpeaZljjQdWZjQAfM4qzH84riI+f8A&#xA;UNMt3DWegLBodpToE0yFbViP9aSNn+ZxVhWKuxV2Kpt5T8v3HmLzPpWg29RLqd1DahwK8RK4Vn+S&#xA;gljir9NNM0+107TrXT7SMQ2tpEkFvCNwkcahUQeygUxVFYq7FXYq7FXYq7FXYq7FXYq7FXzj/wA5&#xA;r+Xxc+TND11VDSabfNbNTqIruMlifbnAg+nFXxzirsVfoV/zjmzS/kp5XZzVmt5FJG2yTyIvTwVQ&#xA;MVfIX/ORH5fDyV+Zl/bW0ZTStT/3I6btRRHMx9SMe0cqsoH8vHxxV5lirsVfpf8Alt5hPmPyDoGt&#xA;O/Oe+sLeW5br+/MY9UV9nqMVZLirsVfJ3/OckLi+8nzH7DxX6L41Rrcn/iYxV8uYqy78orCK/wDz&#xA;P8rwTDlAupW8867msVu4mkG3+TGcVY3ql/NqOp3eoTkma8mkuJSTU8pXLtU99ziqFxV2KuxV7b/z&#xA;iL5bXVvzZS/kQNFotnNdjl9kySUt1X58ZmYf6uKvufFXYq7FXYqxj8zPOK+TPIur+ZmiEx06EPHE&#xA;W4BpHcRxKWIb7UjqOmKsB/IP/nIJfzLlvdK1Gwj07XbKMXHCBy0M0HIIzoH+JSjMoYEnrWvYKvZc&#xA;VdirsVdirsVeWf8AOTmmx335KeYgRWWBYLiFqVIMVzG7U6fsBsVfn9irsVfoV/zjeCPyS8rV/wB8&#xA;Tf8AUTLirBf+cy/J66j5DsvMkMdbnQ7kLO4H/HtdkRNyP/GURU+nFXxfirsVfen/ADijqjXn5L6T&#xA;A1S1hLdQcj3BuZJAOp6B6Yq9gxV2KvnL/nNfRJLjyTomsqOX6PvzAwA3VLqJiWr4coUH3Yq+OMVZ&#xA;t+Tvw+eUmp/vNpusT8j0UxaTdOpb25AYqwnFXYq7FXYq+vP+cJPL3o+XPMPmB497y7isonPWlrH6&#xA;jcfYm53Ptir6YxV2KuxV2KvnH/nM3ztZ2nlGx8pQyq2oapcJc3EQJqtrb1ILL0+KbjxP+S2KvDv+&#xA;cX9Rmsvzs8vrHvHd/WbadP5ka2kYf8C6K30Yq+/8VdirsVdirsVYL+eVvFP+UXmwSAkR6bcSLQ0+&#xA;JIyR+OKvzlxV2Kv0d/JLTjYflN5UhNeUmmWs5B6gzRLJTt/NiqZfmV5eXzF5A1/RSnN72xnjgHhN&#xA;wJian+TIFOKvzQxV2Kvtz/nDKZJPymu0XrFq9yj/ADMED/qYYq94xV2KsJ/Ofye3m78s9e0WJOd5&#xA;LbGWyFKsbiAiaJVI6c3jCn2OKvziIINDsR1GKs1/KOj+Z7616G80LXYFb+UnSLlqn/gcVYTirsVd&#xA;irsVfRvlz85rj8p/y78gaZYWsd1Lqv1jV9fjctz+qSXUkcKwkFQrvGpNWBFVHbFX1t5e17S/MGiW&#xA;etaVOLnT7+JZreZdgysO47EdCDuDsd8VTHFXYq8F/wCci/8AnIWPyZbt5b8szRy+aLhf9JmoHWyi&#xA;YVDMpBUyOD8KnoPiO1Kqvi/U9U1LVb+bUNTupb2+uG5z3Vw7SSO3izMSTir1P/nFXSmv/wA6dHmo&#xA;Wj06K5u5APD0WhU/Q8ynFX3virsVdirsVdirzX/nI66S1/JfzNM5oPq6RAdKmeVIB+MmKvz1xVVt&#xA;rea5uIraBS80zrHEg6lnNFA+ZOKv1C0XTotM0iy06FuUNnBHBEf8iNQq/gMVRjcuJ4U5U+GvSvau&#xA;KvzC82aemm+atZ05AFSyvrm3VRsAIpmQAdPDFUpxV9r/APOFsUiflVqLMKLLrdw6HbcC1tlr96nF&#xA;XvuKuxVogEEHocVfAn/OSn5cyeTfzHu5oIgmj64z32nsooiuxBuIgKmnCRqgdlZcVY9+S1G/M3Rb&#xA;Y/8AH8biwptub22ltgDXah9Wm+KsIxV2KuxV2Ks6/Nmcte+WLWlFs/LOjIp8fWtFujt/rXBGKvfP&#xA;+cJ/NWpXGma/5anLSWNg8N3ZHr6ZueYlTfopMQYAdy3jir6dJA6mnb78VeCfnn/zk1o3la1uNC8p&#xA;zx6j5lcNHJcIRJb2Z6Eud1klHaPoD9vpxZV8XX19eX95PfX073N5cu0txcSsXd3c1ZmY7kk4qoYq&#xA;+q/+cJvJ8y/p3zhMhSOQLpli5GzgETXHXtURdPfwxV9U4q7FXYq7FXYq+fv+czvMSWP5dWGjKxFx&#xA;q98lUrs0Fspkc/RIYvvxV8WYq9A/ITy23mD83PLVlw5RQXS3s9fs8LMG4o3szRhfpxV+iYAAAAoB&#xA;0GKt4q/Nb82P/Jp+cv8Atual/wBRcmKsUxV93f8AOJWmvafkzp9wdl1C5urgD3WZoK9T/vkYq9mx&#xA;V2KuxV51+e35caX558gX9rdSx2l5p6PfWF/LXhDJChY8+IZvTdaq9B70JAxV8k+Qvym80W3mzRtY&#xA;sdW0GePTb23vPWh1a0l2gmR/sRu0n0FcVYb+Zvl6by9+YHmDSZI2jS3v7j6tzBXnA0rNC4r1DxkE&#xA;EYqxjFXYq7FWc/mdGZ7XyfrCfHbX/l+zhWYDYy6dysZY6/zJ6C/QRiqY/k3+dup/lf8Aps2GmQai&#xA;+sRwKDO7J6UluzlG+EHkpErBl27fEKbqoPzp+en5n+b/AFYtT1uaGxlBVtOsiba3KGvwMqHlIu/+&#xA;7GbFWA4q7FWb/l5+UnmvztNFcWsP1Py8s4gv9euCsdtB0Lbuyeo4DCiL1JA2rXFX6A+S/LGh+VvL&#xA;On6BoqqthZQhISCCXqSzSsR1Z2JZiO5xVPMVdirsVdirRIAqdgMVfCf/ADlZ57TzL+ZsunWz87Dy&#xA;6hsUpWhuCeVy1D3DUjP+pirxjFX1N/zhT5Kcy615yuI6RgDTLBmWoY1Wa4Ir4UiAPzGKvq7FWm5c&#xA;Txpyp8NelffFX5g+bNSXVPNOs6mh5JfX1zcqfETTM48f5sVSrFX6R/k/of6D/LDyzprVEsWnwPOh&#xA;24zSoJJV+iRmxVmOKuxV2Kqc8Mc0LwyKrxyKVZHHJSD2I7jFX5pfmL5Wbyp551vy8a+np93JHblq&#xA;1MBPOFjXerRMpxVG6V+aPmG206LSNXhtfMmiQrwg07V4zcCFdxS3nVo7mDY7enIB7YqifW/JvVjW&#xA;W31jytO/X6u0OrWinxCSmznUe3qOcVaPkLyjdb6V5+0l/wDirUINQsZO+1TbzRdv9+Yqt/5Vin2j&#xA;5v8ALYi7SfX23PhwEXqfTxp74qiPNc2gab5A0/ytDrlv5g1W21Ka+Saxjn+rWsE0KxyQrNcJA0hl&#xA;eNHoicRTrU4qwHFXYq7FXYqiPr999RFh9Zl+oiT1hac29L1SOPqenXjy47VpXFU58qfmB508pXAn&#xA;8u6xc6eQQzQxuTC5Br8cLcon/wBkpxV9Jflh/wA5j2tw8Onef7ZbRyQo1mzRmi+c0NWdfdk5D/JA&#xA;xV9LaXqum6rYQ3+m3MV5ZXCh4biB1kjdT3VlJU/RiqLxV2KvM/z6/Ni1/L3yXNcQSKdf1ANb6Pb1&#xA;+L1afFMR/JCCGNepov7WKvz6llllleWV2klkYtJIxLMzMakkncknFUd5d0DVPMOuWWiaVCZ9Qv5V&#xA;ht4+1W6sx7KoqzHsBXFX6Qfl75M0/wAmeT9M8uWPxRWMISSWnEySt8UshHX45GZqHpWmKsjxVh/5&#xA;veZ4/LH5a+YdZZuMkFnIlua0/fzD0oOm/wDeuuKvzbxVkX5d+V5PNPnjRNAVSyX93HHcU6iBTznb&#xA;/YxKzYq/TBFCoqgABQAABQCngMVXYq7FXYqtZlRSzGijqTir89/+cifMmheY/wA3Na1TQ51urBxb&#xA;xC6jHwSPDbpG7Kf2gCvHl3pttTFXmuKuxV2KuxV2KuxV2KuxV2KuxV2KuxVnH5ZfnD5z/LzUBNo1&#xA;yZdOkcPeaTOS1tLTYnj1R6ftrv41G2Kvtz8qPzp8o/mNpofTZfq2rxLW90iZh68XbkvT1I6/tqPm&#xA;FJpiqYfmd+Zvlz8vvLkur6vLWQ1SyskI9a4mpURxg/ezHZRuewKr4B/MP8wfMHnzzLPr2tSAyyfB&#xA;bWyV9KCEElYowewruepNSd8VY0qszBVBZmNFUbkk4q+3f+cZ/wAiz5K0seZdeiA80alFRIGoTZ27&#xA;b+n7Sv1k8Ps7fFyVe7Yq7FXyn/zmf+YUbfo3yLZSgujDUNWCndditvE3zqzlT/kHFXyvir6a/wCc&#xA;MPIL3Gr6l53u4v8AR7JTYaY7DrPIA07qfFI+Ke/M+GKvrrFXYq7FXYq89/PfyZ5k83/l1f6P5evW&#xA;s9QJWb0lYIt0kYJa1kc04rJ1r05Acvhrir88rq1ubS6mtLqJoLm3dop4ZAVdJEJVlZTuCpFCMVUs&#xA;VRGn6ff6jew2On28l3e3DBILaBGkkdj0CqoJJxVlut/kt+amiaYdU1Ly3eQ2KKZJZkVZfTQCpaRY&#xA;mdowO5YCmKsKxV2KuxV2KuxV2KuxV2KuxV2Ko3RtZ1XRdTt9U0m6kstRtHElvcwsVdWHuOxGxHQj&#xA;Y4q9O1vVG/Oh4bprk2/5i20KwLpkslLPU403H1LmeNvc7ktD9hzulGJXFXlh0+/F9+jzbSi/EnoG&#xA;04N63q14+n6dOXLltSlcVfWX/OOn/ONd1ot5B5w86wBNRiAfStIbc279RPNTb1B+yv7PU/EPhVfT&#xA;IAAAAoBsAMVbxViH5o/mPo35f+UrrXdRZWlUenYWXLi9xcMDwjXv2qzfsip9sVfnZ5j8wap5i12+&#xA;1zVZfW1DUJWnuH6CrdFUfsqooqr2AAxVf5X8tar5m8wWGg6VH6t/qEqwwg14rXdncgGiIoLMewGK&#xA;v0f8heTdM8m+U9O8u6cv7iwiCNIQA0kh+KSVqd3dmY+FaDbFWQYq7FXYq7FVksscMTyysEjQFndi&#xA;FAA3JJNAMVfmz+avmWw8zfmLr+u6fGI7G9u3a2oOPKNAI1kI7GQLzPucVYpir6+/5xB0H8uLbRTq&#xA;0Go29551vlkjurSRlE9rCrkCOKJjz4uqhnkAoahexqq+g9d8yeX9C0yTU9Zv4LHT4vt3E7qiVG9B&#xA;U7ttso3PbFXwL+e/5geWfOvnVr/y5pcVhp1uhhF0sYilvG5ljPKoA8aLy+KnX+UKvOMVdirsVdir&#xA;sVdirsVdirsVdirasysGUlWU1VhsQRir6U/5x6/OPydceaox57s7VPNUsaWth5wlX95KAeKx3Tn4&#xA;Vk4nj6/Vl+Fz4qvr4EEVGKt4qxn8wfzC8t+RPL0uta7ciGMArbQL8Us8tKiKJKjkx+4dSQN8VfAf&#xA;5o/mj5i/MPzC2q6tIY7aLkmnaerExW8RNaDpydqfG9N/YAAKsNxV9rf84s/kufKuif4s1uDj5g1a&#xA;MfVoZF+K1tG3C79JJdmfwFF2PIYq9+xV2KuxV2KuxV4b/wA5YfmUPLPkM+X7Kbjq/mMNb0U/FHZg&#xA;f6Q+x25giPcb8jT7OKvh3FXYquR3R1dGKupBVgaEEdCDiqteajqF86yXtzLdOoorzO0hA8AWJxVD&#xA;4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq+pP+cbf+cjnie08k+crktGxWDRdWlNSCfhS2nY9u0bnp&#xA;9k7UIVev/m/+f/lL8u7Z7VnGpeY3SsGkQtRl5D4XuH39JO+/xHsKbhV8QefPzA80eedcfWPMF0Z5&#xA;91t4FqsMEda+nElTxX8T1JJxVI9P0++1G9hsbC3ku725cR29tCpeR3boqqtSTir6+/Ir/nFu10B7&#xA;XzL51SO81laS2mlbSQWrDdWkIqsso7fsr25GhCr6OxV2KuxV2KuxVQvr22sbOe8upFhtraNpZ5nN&#xA;EREHJmY9lAFScVfnR+cP5iXHn7z7qGvMWFjX6tpcL9UtIiRHUdmepdh/MxxVhOKuxV2KuxV2KuxV&#xA;2KuxV2KuxV2KuxV2KuxV2KuxVlvlz8ttd1WwGs3zxaD5aB/ea7qRaK3anVYFAaW5fwWJW96Yqmh8&#xA;8eXPKStb/l/bO2p8Skvm/UEX65UijfUberx2in+erS0/aXpirAri4uLmeS4uZXmuJmLzTSMXd3Y1&#xA;ZmY1JJPUnFUw8seW9X8zeYLHQdIh9fUdQlENuhNBXqzMeyooLMewGKvvD8nPyK8sflrp4uDwvvMU&#xA;0YW+1aQDbl9qKAN/dx1+lurdgqr02SeGOIyySKkQoTIxAXfYbnbFWoriCWL1Y3DR927bYq2slQtV&#xA;KlugO/4ioxVoNMY2+ELIKgAmq+xqO2Kt0k4U5Lz/AJqGn3V/jiq/FXzD/wA5hfmrPZQQeQtJnKS3&#xA;kYuNbdDuICf3UB/4yFeTf5IXsxxV8k4q7FXYq7FXYq7FXYq7FXYq2qszBVBZmNFUbkk4q94/LD/n&#xA;Ezzh5mji1LzNI3l7SnAZLd05XsikVH7s7Qg+L/F/kYql3/OSP5L+WPy0uNAGg3d1cR6rHc+vFePH&#xA;I6tbekA4MaRbP63SnUbYq8XxV2KtgEkACpOwA61xVmmnflR5hNnHqfmKW38q6PIOSXmsMYZJV/5d&#xA;7RQ11Nt04R8ffFUUPMv5e+V/h8saW3mDVk2Gva7Gv1dGH7Vtpql091ad3/1RirF9c8xeZ/NWqC61&#xA;a8uNVv3+CLmS5A7JFGvwoo7KgA9sVTfTvyk/Mq/hE8Xl28gtW2F3ep9SgNf+Lrowx/8ADYqih+WV&#xA;pZmuveb9B0sKaSxRXL6lOKdQE06O6SvsXGKvTPyS/JX8ufN+qTvpfnjUW1PSmWVxZW36NnWNhT1Y&#xA;JJGncry+EtxWncbiqr6T078mvLVvyN/qOta1IQAJNS1a+mNB/MiypE2++6YqybTvKXljTXSSx0u1&#xA;t5k3E0cKLISerM4HJj7nFU2CqK0AFTU07nFW8VdirsVS7zDrlhoOh3+s6hJ6Vlp9vJczvtXhEhY8&#xA;QerbbDucVfmr5y80X/mrzTqnmK/P+k6ncPOUrUIhNI4lP8saBUX2GKpNirsVdirsVdirsVdirsVZ&#xA;F5H8g+avO+sppPl2ya6n2M8p+GGBCaepNJ0RfxPQAnbFX2j+Tv8Azjf5V8hLDqd+E1fzOtGN/ItY&#xA;oGp0tkP2afzn4j/kglcVewAAAACgHQYq+GP+ct/Nq63+akmmwuGtdBt47T4fsmaT99K3zHNUP+ri&#xA;rzry3+WnnnzHCLnS9Imaw76lPxtrMb03uZzHD9HKuKvQtM/5x8NpD9a1yW91MLQm30eEQWm4qOer&#xA;6l9WtF26mJZRiqL+s6f5bHHRtW8r+SAuxuraaTzFrZJ6j63BFcxRnbf0jFQ4qw66l/LC41H19Q1L&#xA;zJ5y1e4cB3CQ2PrSHZV9WZ9Qnep2+wCcVe5/lr+QDanDHqF95N03y3YyUaNNVkudW1Jlp+1G0lva&#xA;Q/7OFmB6pir6A8veStB0GKNNOgSAx7coI4bUMvZXitUghNP9TFUTceVfLVxJ6k+l2sj+JiT+mKsb&#xA;1/8AJD8p9diKX3lewUkU9S2hW0k9v3lv6T7f62KvJbz/AJxw138u/M9p52/LK8kvjYPyuvL12yiS&#xA;e3YUmiinoqNyWvFXAI2IYtQYq+idL1GDUdPt76AMI7iNZAkilJF5CvF0O6MOjKdwdjiqKxV2KuxV&#xA;2KuxV82f85mefzYeX7DyXaScbjVyLrUFB3FrC/7tTv0kmWo2/YOKvj7FXYq7FXYq7FXYq7FXYq9h&#xA;/Jf/AJxz8y+f5ItU1DnpXlYEE3jCk1yAd1tlYdP+LD8I7ciKYq+1fJ3knyz5N0WPSPL9kllZxgF+&#xA;O7yOBvJK5+J3Pifl0AxVOzKgrSrELzou9R7YqgNe1mDRtF1HV7wFLPTbeS6nYEVMcSF3puN+K7Yq&#xA;+Ir389vKNnq15q3l38v9PbV72eS6n1fXpH1Odp5XLtKsZEUcJqdgm2KpN5g/5yO/ODW2Hqa61jGo&#xA;IiTT4orUoG2ISWNRMNv8vFXn+p6zq+rXH1jVL64v7j/f11K8z7/5UhY4qifLPljXfM+tW+i6HaPe&#xA;6jdGkUKUFAN2ZmNFVVG5YmgxV9xfkr/zjz5b/L+1h1G9VNT81OoMuouvwQEjeO2Vt0HYufib2B4h&#xA;V64AAKDYDFW8VdirsVdiqkKRyrGAArA0FT1G+wpSm+KquKuxV2KuxV2Kvz1/5yM1DVrz85PMf6SB&#xA;V7aZILaM7cbdI1MJA7eojeofdjirzXFXYq7FXYq7FXYqqW9vPcTx29vG008rBIoo1LOzMaBVUVJJ&#xA;PbFX1Z+R3/OKUcPoeYfzBhEk20lpoBoUQ9Q12ejN/wAVdB+1XdQq+oYoooo1jiQJGgCoiigAAoAA&#xA;PAYquIB64q4AAAAUA2AGKvGP+ctPMx0b8pLmzicLPrVxDYLT7QQkzSEexSEof9bFXwnirsVRmj6R&#xA;qWs6pa6Vplu91qF7IsNtbxirO7mgH9SemKvvv8jfyX0v8t/LwWQJc+Yr5VbVL8DvsfQiJ3ESHp3Y&#xA;/EewVV6birsVdirsVdirsVU3hDyRyE7xEkDqKkUr898VVMVdirsVdirsVfEP/OZWnW1p+bNtNCtJ&#xA;L7Sbe4uG/mkE08IP/AQqPoxV4TirsVdirsVdiqYaBoGs+YNWt9I0a0kvtRum4QW8QqT3JPZVUbsx&#xA;2A3O2Kvt/wDI/wD5x10LyDbQ6tqoj1Lza6/vLqnKK25ChjtgwB6bNIRyPTYEgqvZcVdirsVdir5J&#xA;/wCc3tcL6v5Z0JTxFvBPeyqP2vWdYoyf9X0ZAPnir5hxV2Kvs/8A5xW/JUeXdITzprkBXXtTj/3H&#xA;wSLRrW0cbHfpJMNz4LQd2GKvoXFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXyp/wA5Z/lj558zee9K&#xA;1Xy9o9zqlsNLFrKbZOfpvBNNMeVDtyWb4a9SKCpxV8533kTzxYI733l3U7RI/wC8aezuIwtBU8iy&#xA;Cm2KpFir0H8rfyQ87fmLcsdKhWz0qL+/1a7DJAD/ACR0BaR/ZRQftEVGKq3nX/nH380/Kl60E2iz&#xA;6pa/7r1DS45LqFhWlW4Lzj32+NR7VxVA6P8Akb+burlRZ+VNQTnTg11H9TVq7ghrkwgj3xV9kfkT&#xA;+SWmflzoCyXKR3Hmi9QHU70b8ejfV4j2jQ/8EfiP7IVV6nirsVdirsVdir4X/wCcvb+S6/OCSFyC&#xA;bGwtrdQK7KS8w/5PVxV4nir13/nGz8qB5787rc6hD6nl3RClxqAYVSaQkmG3PiHKlm/yQR3GKvvZ&#xA;VCgKBQDoMVbxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVplViK/smo+eKqN7ZxXkBglZxG32hGxQkd&#xA;CCVoaHFWN2H5UfljYSepZ+VNJhlBqsos4C4P+SxUsPoOKsojijijWONQiIoVFGwCqKAD5YqvxV2K&#xA;uxV2KuxV2KuxV2Kvgz/nLFGH51aq5HwyW9oUPiFgVD/wykYq8gRHd1RFLOxAVQKkk9ABir9FPyQ/&#xA;LqLyF+Xun6O6AapKPrWrSClWupQC617iMARjxC174qz7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX&#xA;Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq+LP+c0NG+q/mNpmpRrxh1DTVRmpSs0E0nPem/wAEiYqx&#xA;b/nGTyQvmn81tPa4j9TT9FU6ndA0oWhIEC77H98ysR3UHFX32AAAAKAdBireKuxV2KuxV2KuxV2K&#xA;uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV4B/zmT5TOqfl5Z6/EhafQLoGRqbL&#xA;b3fGKT33lEX3Yqgv+cLfKyWfkvVvMUiAXGq3YgiYip9C0WilT2rJJID8sVfRmKuxV2KuxV2KuxV2&#xA;KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KpD578tReZvJus6BIob9JWk1vG&#xA;W6LI6ERv/sHow+WKse/IXQn0T8ofK9i6em7Wa3TKftVuybk8vesuKs/xV2KuxV2KuxV2KuxV2Kux&#xA;V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVogEEEVB2IOKrIKeioEfpBfhEYpRQu1&#xA;BTbtiqpirsVdirsVdirsVdirsVdirsVdirsVdirsVdir/9k=</xapGImg:image></rdf:li></rdf:Alt></xap:Thumbnails></rdf:Description>\r
+<rdf:Description rdf:about='uuid:3097121e-96ab-11d8-91f8-000a956e58ec' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:cb6e89bb-959d-11d8-ba9b-000a956e58ec'/>\r
+<rdf:Description rdf:about='uuid:3097121e-96ab-11d8-91f8-000a956e58ec' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'/>\r
+</rdf:RDF>\r
+</x:xmpmeta>\r
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                           
+<?xpacket end='w'?>\rendstream\rendobj\rxref\r0 11\r0000000004 65535 f\r
+0000000016 00000 n\r
+0000000076 00000 n\r
+0000000126 00000 n\r
+0000000000 00001 f\r
+0000000270 00000 n\r
+0000000290 00000 n\r
+0000000649 00000 n\r
+0000000760 00000 n\r
+0000000781 00000 n\r
+0000015751 00000 n\r
+trailer\r<</Size 11/Root 1 0 R/Info 3 0 R/ID[<304e386c96ab11d891f8000a956e58ec><3096410896ab11d891f8000a956e58ec>]>>\rstartxref\r35522\r%%EOF\r
\ No newline at end of file
index 940e482..b704b39 100644 (file)
Binary files a/doc/reference/lifecycle.pdf and b/doc/reference/lifecycle.pdf differ
index 28f8a34..37148d6 100644 (file)
-<ibex-doc title="The Ibex Reference" subtitle="Nitrogen Release" author="Adam Megacz" email="adam@ibex.org">
+<ibex-doc title="The Ibex Reference" subtitle="Nitrogen Release" author="Adam Megacz" email="adam@ibex.org" logo="ibex-logo.pdf">
 
 <!-- ----------------------------------------------------------------------- -->
 <section title="Introduction">
 
 
 <!-- ----------------------------------------------------------------------- -->
 <section title="Introduction">
 
-    **
-    If you are reading the html version of this document and are
-    thinking of printing it out, you might be interested in the nicely
-    typeset <link url="reference.pdf" text="pdf version"/> produced
-    with LaTeX.
-    **
+    
+    ** If you are reading the html version of this document and are       **
+    ** thinking of printing it out, you might be interested in the nicely **
+    ** typeset <link url="reference.pdf" text="pdf version"/> produced    **
+    ** with LaTeX.                                                        ** 
+
+  Ibex is a software platform based on the philosophy that the most
+  useful systems consist of both **statically typed** and
+  **dynamically typed** languages, working in concert.
+
+  <list>
+
+      - Statically typed languages (such as Java) are well suited for
+        high-performance, reliable, reusable code.  Unfortunately
+        programs written in statically typed languages often take
+        longer to develop, and their commitment to a specific type
+        system makes interoperating with other languages cumbersome.
 
 
-    This document is a __reference__. It is not a
-    __specification__ or a
-    __tutorial__.
+      - Dynamically typed languages (such as JavaScript) typically
+        perform poorly (due to runtime checks and inadequate static
+        information for optimization), tend to admit more errors (due
+        to less static checking), and export APIs which are not
+        precisely defined (due to the huge number of possible
+        type/method combinations).  However, writing programs in
+        dynamically typed languages is a much more rapid process, and
+        the implicit coercions in such languages make interoperability
+        between similar languages very easy.
+
+   </list>
     
     
-    This document does not guide the user gently through examples (as a
-    tutorial would), and it doesn't provide enough detail and formality
-    for a third party to construct a compatible re-implementation of the
-    Ibex Core (as a specification would).
+   The architectural incarnation of this philosophy is the Ibex Object
+   Model, a universal interface to dynamically typed languages.  The
+   IOM serves as a common interface between statically typed languages
+   and dynamically typed languages both locally and over the network.
+
+   <section title="The Ibex Object Model">
+
+      The Ibex Object Model consists of three primitive types:
     
     
-    Rather, the goal of this document is to completely describe every
-    aspect of the environment that the Ibex Core provides to client
-    applications, from the bottom up. If you want to be an Ibex expert,
-    this is the right document to read. It is assumed that you are already
-    familiar with XML and with either JavaScript or ECMAscript.
+      <list>
+          - __number__  -- a floating point number
+          - __string__  -- a unicode string
+          - __boolean__ -- either [[true]] or [[false]]
+      </list>
+    
+      From these primitives, more complex structures can be built from
+      two aggregate types:
     
     
-    If you need to use or rely on some behavior you notice in the Ibex
-    Core, but which is not clearly defined here, please post to <link
-    url="http://lists.ibex.org/listinfo/users" text="the users mailing list"/>.
+      <list>
+          - __array__   -- a collection of objects indexed by a non-negative integer
+          - __hash__    -- a collection of objects indexed by objects (often strings)
+      </list>
+    
+      Any of the following actions can be performed on an object:
+    
+      <list>
+          - __get(key)__ -- attempts to retrieve the object indexed by
+            [[key]].  Returns an object.
     
     
+          - __put(key, val)__ -- attempts to add object [[val]] with key
+            [[key]] to an object.  Does not return a value.
+    
+          - __call(args)__ -- attempts to call the object as if it were a
+            function.  The [[args]] value is a list of arguments.  May or
+            may not return a value.
+      </list>
+    
+      The keys of some objects may be enumerated by attempting to "call"
+      the object; the return value will be an array of the object's keys.
+
+      Finally, an object may be **coerced** to any of the three
+      primitive types, although this coercion may fail.  Objects may
+      also be coerced to the **bytestream** type, which represents an
+      unbounded stream of octets.  Dynamically typed code may not
+      explicitly manipulate bytestreams, although it can pass objects
+      to statically typed code which in turn coerces those objects to
+      bytestreams.
+    
+      Any of the above operations may **throw** an exception, which is
+      itself an object.
+
+      Any entity in the statically typed world which supports these
+      operations may expose itself to the dynamically typed world.
+      Furthermore, it can expect that any values passed to it will support
+      all of the operations shown above.
+    </section>
+
+    <section title="Namespaces">
+        - relation to XML
+        - cover templates here with David's isomorphism?
+    </section>
+
+    <section title="Platforms Founded on the Ibex Object Model">
+
+       The remainder of this document describes the three major
+       systems founded on the Ibex Object Model:
+
+       <list>
+           - The Ibex User Interface
+           - The Ibex Persistent Storage Service
+           - The Ibex Mail Server
+           - IbexDoc
+       </list>
+
+       Currently, all four of these systems use Java as the statically
+       typed language and IbexScript (a derivitave of JavaScript) as
+       the dynamically typed language.  However, since they interact
+       strictly via the Ibex Object Model, either component can be
+       rewritten in a different language.
+
+    </section>
+  
   <section title="Key Concepts">
   
     <definition term="The Core">
   <section title="Key Concepts">
   
     <definition term="The Core">
         </definition>
 
   </section>
         </definition>
 
   </section>
+</section>
 
 
+<section title="The Ibex User Interface">
   <section title="Life Cycle of an Ibex Application">
   
     <image url="lifecycle.pdf" caption="The Lifecycle of an Ibex Application"/>
 
     A user typically begins an Ibex session by clicking on a link to
   <section title="Life Cycle of an Ibex Application">
   
     <image url="lifecycle.pdf" caption="The Lifecycle of an Ibex Application"/>
 
     A user typically begins an Ibex session by clicking on a link to
-    an Ibex application.  This link serves the {\tt launch.html} file
-    to the user's browser, which in turn downloads the appropriate
-    {\it Wildebeest} -- currently either an ActiveX Control
+    an Ibex application.  This link serves the [[launch.html]] file
+    to the user's browser (1), which in turn downloads the appropriate
+    **Wildebeest** (2)-- currently either an ActiveX Control
     (Win32/MSIE), XPInstaller (Mozilla), or Signed Applet (all
     others).
 
     The Wildebeest downloads the appropriate core for the user's
     (Win32/MSIE), XPInstaller (Mozilla), or Signed Applet (all
     others).
 
     The Wildebeest downloads the appropriate core for the user's
-    machine and verifies its digital signature.  It then launches the
-    core, which downloads the UI (an [[.ibex]] archive), loads it,
-    applies the [[main.t]] template (found in the archive), and
-    renders it onto the screen, running any associated JavaScript
-    code.
+    machine and verifies its digital signature (3).  It then launches
+    the core, which downloads the UI (4), (an [[.ibex]] archive),
+    loads it, applies the [[main.t]] template (found in the archive),
+    and renders it onto the screen, running any associated JavaScript
+    code (5).
       
     The user interacts with the application by clicking and moving the
       
     The user interacts with the application by clicking and moving the
-    mouse, and by pressing keys on the keyboard.  These actions trigger
-    fragments of JavaScript code which are designated to handle events.
-    This JavaScript code can then relay important information back to the
-    server using XML-RPC or SOAP, or it can modify the structure and
-    properties of the user interface to change its appearance, thereby
-    giving feedback to the user.
+    mouse, and by pressing keys on the keyboard (5).  These actions
+    trigger fragments of JavaScript code which are designated to
+    handle events.  This JavaScript code can then relay important
+    information back to the server using XML-RPC or SOAP (5), or it
+    can modify the structure and properties of the user interface to
+    change its appearance, thereby giving feedback to the user.
       
     The Ibex core quits when the last remaining surface has been destroyed.
 
       
     The Ibex core quits when the last remaining surface has been destroyed.
 
     of Ibex.
       
   </section>
     of Ibex.
       
   </section>
-</section>
   
 <section title="The XML Template Representation">
 
   A template (discussed in the next section) is an XML file which acts
   as a blueprint for constructing a tree of boxes.  We call this
   
 <section title="The XML Template Representation">
 
   A template (discussed in the next section) is an XML file which acts
   as a blueprint for constructing a tree of boxes.  We call this
-  construction process **applying**, since unlike
-  **instantiation** in object-oriented programming systems, you
-  always apply a template to a pre-existing box, and you can apply
-  multiple templates to the same box.
+  construction process **applying**, since unlike **instantiation** in
+  object-oriented programming systems, you always apply a template to
+  a pre-existing box, and you can apply multiple templates to the same
+  box.
 
   Each XML tag corresponds to a single box, or to another template
   which will be applied to that box.  For example, a [[scrollbar]]
 
   Each XML tag corresponds to a single box, or to another template
   which will be applied to that box.  For example, a [[scrollbar]]
 </section>
 
 <!-- ----------------------------------------------------------------------- -->
 </section>
 
 <!-- ----------------------------------------------------------------------- -->
-<section title="Layout and Rendering">
-
-      Each box occupies a rectangular region on the surface.  The visual
-      appearance of a surface is created by rendering each box in its tree.
-      Unless the [[clip]] attribute is [[false]], each box will
-      clip its childrens' visual representations to its own, so that the
-      children appear "confined to" the parent.  Children are rendered after
-      their parents so they appear "on top of" their parents.
-      
-      Each box has two major visual components, each with subcomponents:
+<section title="Rendering">
+
+      FIXME: needs way, way, way more diagrams of nonrectangular boxes.
+
+      Each box occupies a region on the surface.  The visual
+      appearance of a surface is created by rendering each box in its
+      tree.  Unless the [[clip]] attribute is [[false]], each box will
+      clip its childrens' visual representations to its own, so that
+      the children appear "confined to" the parent.  Children are
+      rendered after their parents so they appear "on top of" their
+      parents.
       
       
-      FIXME: diagram
+      <heading title="Boxes Don't Have to Be Rectangular"/>
+
+      Until now we've tactily assumed that boxes are rectangular.  In
+      fact, unlike its predecessor (XWT), Ibex boxes can be **any
+      shape at all**.  We refer to the outline of a box as its path,
+      which may be composed of lines and curves (arcs and splines).
+      If the path is not set (or set to [[null]]), the box's path is
+      **implicitly** a rectangle.
+
+      A key step in understanding how Ibex works, and understanding
+      how operations on rectangular boxes generalize to arbitrary
+      boxes is to realize that "the path **is** the box".  Just as a
+      rectangular box clips its children to the inside of the
+      rectangle, a circular box will clip its children to the inside
+      of the circle.
+
+      In fact, Ibex's integration of vector graphics with
+      constraint-based user interface layout runs quite deep -- boxes
+      which "contain" text are actually boxes whose outline path
+      **is** the actual letters of the text.  This means that you can
+      assign children to a text-shaped box, and the children's
+      appearance will be cliped to the **inside** of the text letters.
+
+      The only time rectangular and non-rectangular boxes act
+      differently is when box packing takes place; when packing boxes,
+      Ibex only looks at the **bounding box** of a path (the smallest
+      rectangle that completely encloses the box's path).  In the case
+      of rectangular boxes (which have not been rotated or sheared),
+      this bounding box happens to be exactly the same as the box's
+      path.  So Ibex is actually treating these boxes the same, but
+      the chosen treatment favors rectangular boxes.
+
+      <section title="Visual Elements">
+
+      The appearance of a box consists of three visual elements: its
+      path, stroke, and fill.
       
       
-      <definition term="path">
-  
-          A box's [[path]] consists of zero or more lines and curves.
-          The path may be filled with a color, gradient, or texture, and
-          may be stroked with a line of a given thickness and color.  If
-          the path is not specified, it defaults to the perimiter of the
-          box.  [**Note: Vector Graphics support (including the ability
-          to set the [[path]] property to anything other than the
-          default) is currently not implemented**].
-  
-          A path also has:
-  
-          <list>
-              an associated [[strokecolor]], which is a color
-  
-              an associated [[strokewidth]], which is a number
-              specifying the width of the stroke.  [**Note: Vector
-              Graphics support (including the [[strokewidth]]
-              property) is currently not implemented**]
-              
-              a [[fill]], which is either a color, gradient, or
-              texture
-          </list>        
-          </definition>
-  
-      <definition term="text">
-  
-          Each box also has a single line of [[text]], whose
-          appearance is determined by its:
-  
-          <list>
-              associated [[font]], which can be any font supported by
-              the <link url="http://www.freetype.org" text="FreeType2"/>
-              library.
-              
-              an associated [[fontsize]] in **pixels**
-              
-              an associated [[textcolor]]
-          </list>
-          </definition>
+      <property name="path" type="string" default='""'>
+          A box's [[path]] consists of zero or more contours, each of
+          which consists of one or more lines, bezier curves (cubic or
+          quadradic), or generalized elliptic arcs.  The grammar and
+          feature set supported are identical to that specified in <link
+          url="http://www.w3.org/TR/SVG11/paths.html" text="SVG 1.1,
+          section 8"/>.
+
+    One of the most common sources of frustration when working with
+    text representations of vector paths, or programs that manipulate
+    them, is making a mistake when setting a transform which causes
+    the entire path to be off the screen.  Since no part of the path
+    is visible, you have no idea which direction it went! To minimize
+    the chance of this happening, and generally make dealing with
+    vectors a more enjoyable experience, Ibex always **recenters** a
+    path.  When you set a box's path (either by writing to its
+    [[path]] or [[text]] properties), Ibex translates the entire path
+    so that it is lined up with the X and Y axes, as close to the
+    origin as possible, in the positive-X, positive-Y quadrant.  Ibex
+    will note this translation by setting the box's [[transform]] to
+    the transformation used to do this.  If you do not desire this
+    behavior, just set the [[transform]] back to the identity
+    transform.
+         </property>
+    
+    <property name="stroke" type="string" default="clear">
+          The color with which to stroke the path.  Ibex paths may
+          only be stroked with a single color, solid line (not
+          dashed), of "hairline width" (meaning that the line is never more than one
+          antialiased pixel wide no matter what magnification it is
+          viewed at).
+
+          This property can be set to a 5-character hex string
+          ([[#RGB]]), 7-character hex string ([[#RRGGBB]]),
+          9-character hex string ([[#AARRGGBB]]), specifying the box's
+          hexadecimal color.  Any other string is compared against the
+          <link url="http://www.color.org/ICC-1A_1999-04.PDF"
+          text="ICC"/> colors (the same set of color names supported
+          by SVG).  If this property is set to [[null]], the stroke
+          color will be set to clear ([[#00000000]]).
+
+          Other vector formats (notably SVG and PDF) support "thick"
+          lines, dashed lines, lines stroked with a gradient or
+          texture, and an assortment of special caps and joins for
+          these thick lines (hairline lines do not need joins or
+          caps).  Fortunately, all of these constructs can be
+          converted into **filled** paths rather easily, making it
+          possible for Ibex to support the same functionality with a
+          much simpler API (and more efficient rendering engine).
+          </property>
+    
+      <property name="fill">
+          The graphic element with which to fill the path.  This
+          property can be set to any of the values specified for
+          [[stroke]], as well as to a texture (an image) or a
+          gradient.  Paths which self-intersect are filled according
+          to the SVG guidelines.
+
+          When an image (texture) is written to this property, the
+          box's [[minwidth]] and [[minheight]] properties will be
+          automatically set to the dimensions of the image (they can
+          be changed later if desired).
+          </property>
+      </section>   
+
+      <section title="Text">
+
+      Ibex treats text exactly the same way it treats other paths.
+      Writing to the [[text]] property actually sets the box's path to
+      the outline of the rendered form of the text, and text is
+      subject to the same rotation, shearing, and scaling
+      transformations as all other boxes.  You can even **read back**
+      the curves from which the text is composed by reading from the
+      [[path]] property (the string returned will be in SVG Path
+      syntax), modify it, and write it to the [[path]] property of
+      another box.
+
+    <property name="text" type="string" default='""'>
+      The box's text; writing [[null]] to this property sets it to
+      [[""]].  In order to help eliminate common chores when working
+      with text, Ibex will automatically take the following actions
+      when you write to the [[text]] property:
+      </property>
+
+      <list>
+          The text is converted to curves using the Freetype library,
+          and the resulting curve becomes the box's path.
+
+          If the box's [[strokecolor]] is [[null]], it is set to black
+          ([[#FF000000]]).  When first created, a box has an invisible
+          stroke; automatically setting the stroke to a visible color
+          helps eliminate confusing errors.  You can change the stroke
+          color back to clear after writing to the [[text]] property.
+
+          The box's [[aspect]] property is automatically set to the
+          correct aspect ratio for the chosen string in the chosen
+          font.  This ensures that resizing will not warp the text.
+      </list>
+    
+    <property name="font" type="stream" default=".ibex.ui.font.sansserif">
+        Fonts are rendered using the [[stroke]] assigned to the box,
+        using the font assigned to the [[font]] property.  When an
+        object is written to this property, it is coerced to a stream which is interpreted using
+        the <link url="http://www.freetype.org" text="FreeType 2
+        library"/>, and the resulting font is used to render the box's
+        [[text]].
+
+        To choose the size of a font, just set the box's [[height]]
+        property to the desired height **in pixels**.  Conversion
+        functions from points to pixels are available.
+        </property>
+     </section>
+
+     <section title="Transformations">
+      The [[transform]] property allows the user to specify an
+      arbitrary affine transformation to be applied to the box's path,
+      text, and children.  The syntax and features supported are
+      identical to those described in <link
+      url="http://www.w3.org/TR/SVG11/coords.html" text="SVG 1.1,
+      section 7"/>, and include rotation, shearing, scaling, and
+      translation.
+
+      <property name="transform">
+          FIXME
+      </property>
+
+      One tricky part about transformations is their interaction with
+      box packing and dimension properties.  A box's size properties
+      (such as [[minwidth]] or [[height]]) are **always** measured in
+      the box's own coordinate space (ie after applying the box's
+      [[transform]]).  This means that the sum of the [[width]]s of a
+      box's children may not be equal to the parent box's [[width]],
+      even if the children appear (on screen) to completely fill its
+      width.
+
+      One other consequence of combining transformations with
+      constraint-based layout is that when a box is rotated, its width
+      and height are no longer completely independent (remember, the
+      box's width is measured in the rotated coordinate space).  If a
+      box is turned at a 45 degree angle and then forced into a space
+      10 pixels wide, enlarging the box's width will force a reduction
+      in its height (in order to cram it in the 10 pixel space).  In
+      situations like this, Ibex will first look to the box's
+      [[aspect]], if explicitly set, and obey that.  If the box's
+      [[aspect]] is unspecified, Ibex will use the ratio between the
+      box's [[minwidth]] and [[minheight]] to guide the tradeoff.  If
+      either of these properties is [[0]], Ibex will simply attempt to
+      make the ratio as close to [[1:1]] as possible.
+
+      When we talk about a box's **bounding box**, we are referring to
+      the smallest rectangle in the **parent's** coordinate space
+      which completely encloses the child box's path.  This is the
+      only time we will deal with the size of a child using a
+      coordinate space other than its own.
+    </section>
+
+  <section title="Layout Properties">
+
+    We will cover the layout algorithm in detail in the next section,
+    but we introduce the properties at play here and give an intuition
+    about their purpose.
+    
+    <property name="packed" type="boolean" default="true">
+        The layout strategy for this box.  If set to [[true]], the
+        box occupies no cells and is laid out independently of its
+        siblings.
+        </property>
+    
+    <property name="zoom" type="boolean" default="false">
+        This property controls the strategy Ibex uses for changing the
+        box's width and height in response to layout constraints.
+
+        If [[zoom]] is set to [[false]] (the default), then the box's
+        [[path]] will be altered by multiplying all the vertices by a
+        scaling factor in order to make the path's bounding box meet
+        the required constraints.  The box's [[transform]] will not be
+        affected, and the scaling of the box's children will not be
+        affected.
+
+        If [[zoom]] is set to [[true]], the box's [[path]] will not be
+        altered in response to layout constraints; rather, its
+        [[transform]] will be altered in order to "zoom in" or "zoom
+        out" and bring all of the path's vertices within the desired
+        region.  Since the box's [[transform]] also applies to its
+        descendants, they too will be magnified or reduced.
+        </property>
+    
+    <property name="shrink" type="boolean" default="false">
+        If set to [[true]], this box will shrink
+        (horizontally/vertically/both) to the smallest size allowed by
+        its children and the bounding box of its path.
+        </property>
+    
+    <property name="x y" type="integer" default="varies">
+        If the box is a root box, writing to these properties moves
+        the surface; reading from them returns the position of the
+        surface.
+
+        On non-root boxes, writing to these properties is a shorthand
+        for adding a [["translate(x, y)"]] to the box's [[transform]].
+        Reading from these properties will return FIXME.
+        </property>
+    
+    <property name="minwidth minheight" type="integer" default="0">
+        The desired minimum width and height.  See the [[zoom]]
+        property for a description of how the box is altered to meet
+        these constraints.
+        </property>
+    
+    <property name="maxwidth maxheight" type="integer" default="ibex.ui.maxdim">
+        The desired maximum width and height.  See the [[zoom]]
+        property for a description of how the box is altered to meet
+        these constraints.
+        </property>
+    
+    <property name="width height" type="integer">
+        When read, this is the current (width/height) of this box.
+        Writing to this property is equivalent to writing to
+        **both** the minimum and maximum (width/height).
+        </property>
+    
+    <property name="cols rows" type="integer" default="0">
+        The number of (columns/rows) in which to lay out the children of this
+        box.  If set to zero, the number of (columns/rows) is unconstrained.
+        Either [[rows]] or [[cols]] must be zero.  If
+        [[0]] is written to [[cols]] when [[rows]] is
+        [[0]], the write is ignored.  If a nonzero value is
+        written to [[cols]] when [[rows]] is nonzero,
+        [[rows]] is set to [[0]], and vice versa.
+        </property>
+    
+    <property name="colspan rowspan" type="integer" default="1">
+        The number of (columns/rows) that this box spans within its parent.
+        </property>
+    
+    <property name="aspect" type="float" default="0.0">
+        The width-to-height ratio constraint for this box; can be set
+        either as a floating point number ([[0.5]]) or a ratio
+        ([["1:2"]]).  Setting this to [[0.0]] disables the ratio
+        constraint.
+
+      Note packed boxes always **shrink** in order to satisfy aspect
+      constraints, while unpacked boxes always **grow** in order to
+      satisfy them -- even if this means growing larger than the box's
+      parent.
+        </property>
+    
+    <property name="visible" type="boolean" default="true">
+        If set to [[false]], this box will be rendered as if its
+        width and height were zero. If this is a root box, the
+        associated surface will be hidden.
+
+        When reading from this property, the value [[false]] will
+        be returned if this box **or any of its ancestors** is not
+        visible.  Thus it is possible to write [[true]] to a box's
+        [[visible]] property and then read back [[false]].
+        </property>
+    </section>
+
+</section>
   
   
-      These eight components plus the size of a box fully specify its
-      appearance.  Every single box you see in Ibex is drawn only on the
-      basis of these components and its size.
+<section title="Layout Algorithm">
 
       The size and position of every box is determined by its
       properties, its childrens' sizes, and its parent's size and
 
       The size and position of every box is determined by its
       properties, its childrens' sizes, and its parent's size and
       not the same thing as the property [[minwidth]], although they
       are closely related.
       
       not the same thing as the property [[minwidth]], although they
       are closely related.
       
-      <heading title="The Size of the Root Box"/>
-  
-      When the user resizes a window, Ibex changes the root box's
-      [[maxwidth]] and [[maxheight]] to match the size chosen by
-      the user and then determines the root box's size using the same sizing
-      rules it uses for other boxes.
-      
-      Ibex will always attempt to prevent the
-      user from making the surface smaller than the root box's
-      [[minwidth]] and [[minheight]].  If the [[hshrink]] or
-      [[vshrink]] flag is set, Ibex will try to prevent the user from
-      resizing the surface at all.  However, not all platforms give Ibex
-      enough control to do this.
-      
-    <heading title="The alignment point"/>
-  
-      When talking about positioning, we will often refer to the
-      **alignment point**.
-      
-          If the [[align]] property is "[[center]]", then the
-          alignment point is the center of the box.
-          
-          If the [[align]] property is "[[topleft]]",
-          "[[bottomleft]]", "[[topright]]", or
-          "[[bottomright]]", then the alignment point is
-          corresponding corner of the box.
-          
-          If the [[align]] property is "[[top]]",
-          "[[bottom]]", "[[right]]", or "[[left]]", then
-          the alignment point is middle of the corresponding edge of the
-          box.
-  
     <section title="Packing">
   
       A grid of **cells** is created within the parent.  If the
     <section title="Packing">
   
       A grid of **cells** is created within the parent.  If the
       infinite number of columns.  Either [[cols]] or [[rows]]
       must be zero, but not both.
           
       infinite number of columns.  Either [[cols]] or [[rows]]
       must be zero, but not both.
           
-      If a child's [[visible]] property is [[false]], it does
-      not occupy any cells (and is not rendered).  Otherwise, each child
-      occupies a rectangular set of cells [[child.colspan]] cells
-      wide and [[child.rowspan]] cells high.
+      <heading title="Target Regions"/>
+
+      A box's target region is the portion of its parent which the
+      layout algorithm has determined that the box should occupy.  A
+      box's target region is determined mainly by the value of its
+      [[pinned]] property:
+
+      <property name="pinned" type="box" default="null">
+          If a box's [[pinned]] property is [[null]], it is said to be
+          "unpinned" or "not pinned".  In this case, the box's target
+          region will be the set of cells in its parent which it
+          occupies.
+
+          If a box's [[pinned]] region is set to some other box, then
+          this box's target region will be the projection of that
+          other box's actual dimensions and position, projected onto
+          this box's parent.  The net effect is that the pinned box
+          will "track" the size and position of the box it is pinned
+          to.  A box may not be pinned to one of its descendants, nor
+          may boxes be pinned in a cycle (A is pinned to B, B is
+          pinned to C, and C is pinned to A).
+          </property>
+
+      If a child's [[visible]] property is [[false]], it does not
+      occupy any cells (and is not rendered).  If a box's [[pinned]]
+      property (described below) is non-[[null]], it does not occupy
+      any cells and is exempt from the packing process.  Otherwise,
+      each child occupies a rectangular set of cells [[child.colspan]]
+      cells wide and [[child.rowspan]] cells high.
           
       The Core iterates over the cells in the grid in the following
       order: if [[rows]] is 0, the Core iterates across each column
       before proceeding to the next row; otherwise rows come before
       columns.  At each cell, the Core attempts to place the **first
           
       The Core iterates over the cells in the grid in the following
       order: if [[rows]] is 0, the Core iterates across each column
       before proceeding to the next row; otherwise rows come before
       columns.  At each cell, the Core attempts to place the **first
-      remaining unplaced child's** top-left corner in that cell
-      (with the child occupying some set of cells extending down and
-      to the right of that cell).  If the parent has a fixed number of
-      columns and the child's [[colspan]] exceeds that limit, the
-      child is placed in column zero regardless, but only occupies the
-      available set of cells (it does not "hang off the end" of the
-      box).  <image url="layout.pdf" width="1in"/>
+      remaining unplaced, packed child's** top-left corner in that
+      cell (with the child occupying some set of cells extending down
+      and to the right of that cell).  If the parent has a fixed
+      number of columns and the child's [[colspan]] exceeds that
+      limit, the child is placed in column zero regardless, but only
+      occupies the available set of cells (it does not "hang off the
+      end" of the box).  <image url="layout.pdf" width="1in"/>
       
       <pre>
       <ui:box cols="3">
       
       <pre>
       <ui:box cols="3">
       </section>
   
     <section title="Constraining">
       </section>
   
     <section title="Constraining">
-  
       Each box's minimum width is computed recursively as the
       maximum of:
   
       <list>
           Its [[minwidth]]
                
       Each box's minimum width is computed recursively as the
       maximum of:
   
       <list>
           Its [[minwidth]]
                
-          The width of the box's [[text]] (after applying the
-          box's [[transform]]) [**Note: Vector Graphics support
-          (including the [[transform]] property) is currently not
-          implemented**].
+          The width of its [[path]]
                
                
-          The width of the box's path (after applying the box's
-          [[transform]]) **if the box is [[packed]]**.
-               
-          The minimum width of the children in each row.
+          The sum of the widths of the bounding boxes enclosing its
+          children, when those children are sized to **their own**
+          minimum widths.
+
+          The box's minimum **height** multiplied by its [[aspect]],
+          if its aspect is not [[0]] (unspecified).
       </list>
       </list>
-          
+
       If a box's [[hshrink]] property is set to
       [[true]], the box's maximum width is the same as its
       minimum width; otherwise it is the box's
       [[maxwidth]].
       If a box's [[hshrink]] property is set to
       [[true]], the box's maximum width is the same as its
       minimum width; otherwise it is the box's
       [[maxwidth]].
-
     </section>  
 
     <section title="Placing">
     </section>  
 
     <section title="Placing">
-  
-      <heading title="Non-Packed Boxes"/>
 
 
-      Each non-packed box is transformed according to the parent's
-      [[transform]] property and then positioned so that its alignment
-      point is [[(child.x, child.y)]] pixels from the corresponding
-      edge/corner/center of its parent.
+      <heading title="Target Origin"/>
+
+      Once the box's size and the size and position of its target
+      region have been computed, the box is placed relative to its
+      **target origin**, which is determined by by the [[origin]]
+      property:
+
+      <property name="origin" type="string" default="center">
+          Determines which corner of the box's target region should be
+          treated as the origin for layout purposes.
+
+          If the [[origin]] property is "[[center]]", then the
+          target origin is at the center of the target region.
+          
+          If the [[origin]] property is "[[topleft]]",
+          "[[bottomleft]]", "[[topright]]", or "[[bottomright]]", then
+          the target origin is at the corresponding corner of the
+          target region.
+          
+          If the [[origin]] property is "[[top]]", "[[bottom]]",
+          "[[right]]", or "[[left]]", then the target origin is middle
+          of the corresponding edge of the target region.
+          </property>
+
+      <property name="x y" type="number" default="0">
+          Determines the offset from the box's origin at which it will
+          be placed.
+          </property>
+
+      If the box's [[hshrink]] property is not set, it is expanded to
+      its maximum width, but no larger than its parent's width.
+
+      Finally, if the child has a nonzero [[aspect]], one of its
+      dimensions (either width or height) will **grow** in order to
+      ensure that [[width == height * aspect]].  This may cause the
+      child to exceed the paren't size.
+
+      <heading title="Non-Packed Boxes with a transform"/>
+
+      First, the coordinate space in which the child is positioned is
+      translated so that the origin coincides with the
+      corner/edge/center of the box's parent corresponding to the
+      child's [[align]] property.  The child's [[transform]] attribute
+      is applied to the coordinate space, and the child is positioned
+      in this transformed space with its aligment point at the origin.
+
+      The following diagram may be helpful:
+
+      FIXME: diagram
 
       <heading title="Packed Boxes"/>
 
 
       <heading title="Packed Boxes"/>
 
+      Thoughout this section, when we refer to the [[minwidth]],
+      [[maxwidth]], or minimum width of a child box, we are referring
+      to the corresponding dimension of the child's **bounding box**
+      -- the smallest rectangle **in the parent's coordinate space**
+      that completely encloses the child's path.
+
       Ibex formulates a set of constraints for placing a box's
       **packed** children as follows:
 
       <list>
       Ibex formulates a set of constraints for placing a box's
       **packed** children as follows:
 
       <list>
-          - A box's width can be no greater than the sum of the
+            A box's width can be no greater than the sum of the
             columns it occupies
             columns it occupies
-          - The sum of a set of colums cannot be smaller than the
+
+            The sum of a set of colums cannot be smaller than the
             minimum width of a box that spans them.
             minimum width of a box that spans them.
-          - The sum of the widths of the parents' columns will be at
+
+            The sum of the widths of the parents' columns will be at
             least as large as the parent's width is (but possibly
             larger).
       </list>
             least as large as the parent's width is (but possibly
             larger).
       </list>
       prioritized from most important to least important:
 
       <list>
       prioritized from most important to least important:
 
       <list>
-          - (__Most Important__) The sum of all columns will be a close
+            (__Most Important__) The sum of all columns will be a close
             to the parent's with as possible (ie as small as possible)
             to the parent's with as possible (ie as small as possible)
-          - Ibex will attempt to make a set of columns no wider than
+
+            Ibex will attempt to make a set of columns no wider than
             the [[maxwidth]] of a box spanning them.
             the [[maxwidth]] of a box spanning them.
-          - (__Least Important__) Ibex will attempt to make all
-            columns the same width.
+
+            Ibex will attempt to make all
+            columns the same width. (**least important**)
       </list>
 
       Each packed box is then placed within the set of cells that it
       spans.  Usually the box will exactly fill this rectangle; if it
       </list>
 
       Each packed box is then placed within the set of cells that it
       spans.  Usually the box will exactly fill this rectangle; if it
-      does not (due to [[maxwidth]] or minimum width constraints), the
-      box's will be placed so that its alignment point coincides with
-      the alignment point of that rectangle of cells.
+      does not (due to [[maxwidth]], minimum width, or aspect
+      constraints), the box's will be placed so that its alignment
+      point coincides with the alignment point of that rectangle of
+      cells.
 
 
+      <heading title="The Size of the Root Box"/>
+  
+      When the user resizes a window, Ibex changes the root box's
+      [[maxwidth]] and [[maxheight]] to match the size chosen by
+      the user and then determines the root box's size using the same sizing
+      rules it uses for other boxes.
+      
+      Ibex will always attempt to prevent the
+      user from making the surface smaller than the root box's
+      [[minwidth]] and [[minheight]].  If the [[hshrink]] or
+      [[vshrink]] flag is set, Ibex will try to prevent the user from
+      resizing the surface at all.  However, not all platforms give Ibex
+      enough control to do this.
+      
   </section>
 
   </section>
 
-  <section title="Rendering">
-
-    Boxes are rendered in a depth-first, pre-order traversal.  Note that
-    this may cause a non-packed box to overlap its siblings.
-    
-    <list type="ordered">
-        
-        If the box's [[transform]] property is non-null, the
-        coordinate space is transformed accordingly for the rest of
-        this phase and for the rendering of all children.  [**Note:
-        Vector Graphics support (including the [[transform]]
-        property) is currently not implemented**].
-        
-        If the box is packed and has a non-[[null]] path, the
-        path is translated such that the alignment point of the path's
-        bounding box coincides with the box's alignment point (both
-        alignment points are determined by the box's [[align]]
-        property).
-        
-        If a box has a path, that path is filled with the color,
-        gradient, or image specified by the [[fill]] property and
-        stroked with the color and width specified by the
-        [[strokecolor]] and [[strokewidth]] properties.
-        
-        If the box has a non-null [[text]] attribute,
-        the text is rendered in [[font]] with size
-        [[fontsize]] and color [[textcolor]].  The text is
-        then translated such that the alignment point of the text's
-        bounding box coincides with the box's alignment point (both
-        alignment points are determined by the box's [[align]]
-        property).
-        
-        The box's children are rendered (pre-order traversal).
-
-    </list>
-    
-    </section>
 </section>
 
 <!-- ----------------------------------------------------------------------- -->
 </section>
 
 <!-- ----------------------------------------------------------------------- -->
   meaning, which will be explained later.  Each box's numeric
   properties hold its **child boxes**.
 
   meaning, which will be explained later.  Each box's numeric
   properties hold its **child boxes**.
 
-  <section title="Rendering Properties">
-
-    Every box has several special properties which control how it is
-    drawn. In general, if you put an
-    invalid value to a special property, no action will be taken -- the
-    put will be ignored.
-    
-    <property name="strokecolor" type="string" default="clear">
-
-             If the value is a 5-character hex string ([[#RGB]]),
-             7-character hex string ([[#RRGGBB]]), 9-character hex
-             string ([[#AARRGGBB]]), the box's stroke color will be set
-             to that color. 
-
-             If the value is one of the <link
-             url="http://www.color.org/ICC-1A_1999-04.PDF"
-             text="ICC"/> colors (the same set of color names
-             supported by SVG), the stroke color be set to that color.
-
-             If the value is [[null]], the stroke color will be set
-             to clear ([[#00000000]]).
-             </property>
-    
-    <property name="strokewidth" type="int" default="1">
-             The width (in pixels) to stroke the path with.
-             </property>
-    
-    <property name="fill">
-             This property can be set to any of the values specified for
-             [[strokecolor]].  
-             Alternatively, if the value written is an object, its stream
-             will be read and interpreted as a PNG, GIF, or JPEG image,
-             which will become the texture for this box, and the box's
-             [[minwidth]] and [[minheight]] properties will be
-             automatically set to the dimensions of the image.
-             </property>
-    
-    <property name="path" type="string" default='""'>
-            The box's path.  The grammar and feature set supported are
-            identical to that specified in <link
-            url="http://www.w3.org/TR/SVG11/paths.html" text="SVG 1.1,
-            section 8"/>.
-            </property>
-    
-    <property name="text" type="string" default='""'>
-            The box's text; writing [[null]] to this property sets it
-            to [[""]].
-            </property>
-    
-    <property name="textcolor" type="number" default="black">
-            The color in which to render the font; accepts the same values as [[strokecolor]].
-            </property>
-
-    <property name="font" type="stream" default=".ibex.ui.font.sansserif">
-            When an object is written to this property, its stream is read
-            using the <link url="http://www.freetype.org" text="FreeType 2 library"/>,
-            and the resulting font is used to render the
-            box's [[text]].
-            </property>
-            
-    <property name="fontsize" type="number" default="10">
-            The size (in points) to render the text.
-            </property>
-    
-    </section>
-
-  <section title="Layout Properties">
-    
-    <property name="shrink" type="boolean" default="false">
-        If set to [[true]], this box will shrink
-        (horizontally/vertically/both) to the smallest size allowed by
-        its children and the bounding box of its path.
-        </property>
-    
-    <property name="x y" type="integer" default="varies">
-        If the box is a root box, this is the (x/y)-coordinate of the
-        surface; otherwise it is the distance between the parent's
-        alignment point and the corresponding corner/edge/center of
-        its parent.
-        </property>
-    
-    <property name="minwidth minheight" type="integer" default="0">
-        The desired minimum width and height.
-        </property>
-    
-    <property name="maxwidth maxheight" type="integer" default="ibex.ui.maxdim">
-        The desired maximum width and height.
-        </property>
-    
-    <property name="width height" type="integer">
-        When read, this is the current (width/height) of this box.
-        Writing to this property is equivalent to writing to
-        **both** the minimum and maximum (width/height).
-        </property>
-    
-    <property name="cols rows" type="integer" default="0">
-        The number of (columns/rows) in which to lay out the children of this
-        box.  If set to zero, the number of (columns/rows) is unconstrained.
-        Either [[rows]] or [[cols]] must be zero.  If
-        [[0]] is written to [[cols]] when [[rows]] is
-        [[0]], the write is ignored.  If a nonzero value is
-        written to [[cols]] when [[rows]] is nonzero,
-        [[rows]] is set to [[0]], and vice versa.
-        </property>
-    
-    <property name="colspan rowspan" type="integer" default="1">
-        The number of (columns/rows) that this box spans within its parent.
-        </property>
-    
-    <property name="align" type="string" default="center">
-        Determines the box's alignment point for positioning its text,
-        texture, path, and children.
-        </property>
-    
-    <property name="visible" type="boolean" default="true">
-        If set to [[false]], this box will be rendered as if its
-        width and height were zero. If this is a root box, the
-        associated surface will be hidden.
-
-        When reading from this property, the value [[false]] will
-        be returned if this box **or any of its ancestors** is not
-        visible.  Thus it is possible to write [[true]] to a box's
-        [[visible]] property and then read back [[false]].
-        </property>
-    
-    <property name="packed" type="boolean" default="true">
-        The layout strategy for this box.  If set to [[true]], the
-        box occupies no cells and is laid out independently of its
-        siblings.
-        </property>
-    
-    </section>
-
   <section title="Child Control Properties">
     
     <property name="redirect" type="box" default="thisbox">
   <section title="Child Control Properties">
     
     <property name="redirect" type="box" default="thisbox">
     
    
     <property name="surface" type="" default="null">
     
    
     <property name="surface" type="" default="null">
-        FIXME
         If this box has a parent, this property returns
         [[**parent**.surface]]; otherwise it returns null.
         This property is a simple building block that the widget
         If this box has a parent, this property returns
         [[**parent**.surface]]; otherwise it returns null.
         This property is a simple building block that the widget
         windows.
         </property>
     
         windows.
         </property>
     
-    <property name="Maximized">
+    <property name="Maximized Minimized">
         The value [[true]] is put to this property on the root box
         The value [[true]] is put to this property on the root box
-        when the surface is maximized, and [[false]] when the surface
-        is un-maximized. Reading from this value will return [[true]]
-        if the surface is maximized and [[false]] if it is
-        not. Putting [[true]] to this property will maximize the
-        window, and putting [[false]] to this property will
-        unmaximize the window.
+        when the surface is maximized/minimized, and [[false]] when
+        the surface is un-maximized/minimized. Reading from this value
+        will return [[true]] if the surface is maximized/minimized and
+        [[false]] if it is not. Putting [[true]] to this property will
+        maximize/minimize the window, and putting [[false]] to this
+        property will unmaximize/unminimize the window.
+
         Note that not all platforms support maximization.
         </property>
     
         Note that not all platforms support maximization.
         </property>
     
-    <property name="Minimized">
-        The value [[true]] is put to this property on the root box
-        when the surface is minimized, and [[false]] when the surface
-        is unminimized. Reading from this value will return [[true]]
-        if the surface is minimized and [[false]] if it is
-        not. Putting [[true]] to this property will minimize the
-        window, and putting [[false]] will unminimize it.
-        </property>
-    
     <property name="Close">
         When the user attempts to close a surface, the value
         [[true]] will be put to this property. Scripts may trap
     <property name="Close">
         When the user attempts to close a surface, the value
         [[true]] will be put to this property. Scripts may trap
         property.
         </property>
     
         property.
         </property>
     
-    <property name="icon">
-        The surface's icon. This is usually displayed on the titlebar of a
-        window.  The value should be an object whose stream is a PNG image. Note
-        that not all platforms support this property.
+    <property name="titlebar">
+        The surface's titlebar text and icon.  If a string is written
+        to this property, the surface's titlebar text is set to that
+        string; if a stream yielding an image is written, the
+        surface's icon is set to that image.  Note that not all
+        platforms support this property. Only ASCII characters
+        0x20-0x7F are permitted.
         </property>
     
         </property>
     
-    <property name="titlebar">
-        The surface's titlebar text. Note that not all platforms support
-        this property. Only ASCII characters 0x20-0x7F are permitted.
+    </section>
+
+  </section>
+
+
+<section title="Events">
+
+    Every execution of the Event Context begins with an event, which
+    consists of a key/value pair, and a mouse position, which consists of
+    an x and y coordinate.  The possible keys are [[_Press[1-3]]],
+    [[_Release[1-3]]], [[_Click[1-3]]], [[_DoubleClick[1-3]]],
+    [[_Move]], [[_KeyPressed]], and [[_KeyReleased]].
+    
+    Here are two example events:
+    
+    An event is triggered by writing the key to the value on a box.  This
+    triggers any trap handlers which may be present.  Once these handlers
+    have executed, Ibex figures out which child of the current box contains
+    the mouse (taking into account that some boxes may cover up others)
+    and writes the key and value to that box.  If none of the box's
+    children contain the mouse position, Ibex removes the leading
+    underscore from the key name and writes the value to
+    **that** property.  Once all the traps on that property have
+    executed, the value is written to the box's parent.
+    
+    Intuitively, Ibex delivers the underscored event to every box from the
+    root to the target, and then delivers the non-underscored event to
+    that same set of boxes in reverse order.  So the event travels down
+    the tree to the target, and then back up to the root.  The following
+    example prints out "first second third fourth" in that order.
+    
+    <pre>
+    <ui:box>
+        _Press1 ++= function(b) { ibex.log.info("first"); }
+         Press1 ++= function(b) { ibex.log.info("fourth"); }
+        <ui:box>
+          _Press1 ++= function(b) { ibex.log.info("second"); }
+           Press1 ++= function(b) { ibex.log.info("third"); }
+        </ui:box>
+    </ui:box>
+    </pre>
+
+    In general, you should use the **non-underscore** names to respond
+    to user input and use the underscored names when you want to override
+    child boxes' behavior or route events to particular boxes (for
+    example, when implementing a focus protocol).  This is why the
+    underscored elements are delivered to parents before children (so
+    parents can override their childrens' behavior), but non-underscored
+    events are delivered to children before parents (since, visually, a
+    mouse click is usually "intended" for the leaf box underneath the
+    cursor).
+    
+  <heading title="Stopping the Process"/>
+
+    At any point in this sequence, a trap handler can choose not to
+    cascade (by returning [[true]] from the trap handler function).
+    This will immediately cease the propagation of the event.  This is how
+    you would indicate that an event has been "handled".
+    
+  <heading title="Non-Propagating Events"/>
+
+    Ibex uses the following events to notify a box about changes that
+    only matter to that particular box.  These events do not propagate
+    either up or down the tree.
+
+    <property name="Enter Leave">
+        The value [[true]] is written to this property when the mouse (enters/leaves) the box.
+        </property>
+    
+    <property name="SizeChange">
+        The value [[true]] is put to this property after the size
+        of this box changes.
+        </property>
+
+    <property name="ChildChange">
+        When a child is added or removed, that child is written to
+        this property.  The write is always performed **after** the
+        addition or removal, so these two cases can be distinguished
+        by checking [[indexof(child)]].
+
+        Note that if the parent's redirect target is set to another
+        box, this trap will only be invoked when children are
+        manipulated by reading and writing to the parent.  Reads and
+        writes directly to the redirect target will **not** trigger
+        this trap.
+
+        Note also that this traps is still triggered if a box's
+        [[redirect]] target is **null**.  This is useful for
+        boxes that need to accept children and then relocate them
+        elsewhere.
+        </property>
+    
+  <section title="Listing of Events">
+    
+    <property name="Press1 Press2 Press3">
+        Indicates that the use has pressed a mouse button.  On
+        platforms with three mouse buttons, the **middle** button
+        is button 3 -- this ensures that applications written to only
+        use two buttons (1 and 2) will work intuitively on three button
+        platforms.
+        </property>
+    
+    <property name="Release1 Release2 Release3">
+        Indicates that the use has released a mouse button.
+        </property>
+    
+    <property name="Click1 Click2 Click3">
+        Indicates that the user has pressed and released the
+        mouse button without moving the mouse much (exactly how
+        much is platform-dependent).
+        </property>
+    
+    <property name="DoubleClick1 DoubleClick2 DoubleClick3">
+        Indicates that the user has clicked the 
+        mouse button twice within a short period of time (exactly how long is platform-dependent).
         </property>
     
         </property>
     
+    <property name="Move">
+        Indicates that the mouse has moved while within this box, or that
+        the mouse while outside this box **if a button was pressed while within this box and has not yet been released**
+        </property>
+    
+    <property name="KeyPressed KeyReleased">
+
+        A string is written to this property when a key is pressed or
+        released If the key was any other key, a multi-character
+        string describing the key will be put. For simplicity, we use
+        the VK_ constants in the <link
+        url="http://java.sun.com/products/jdk/1.1/docs/api/java.awt.event.KeyEvent.html#VK_0"
+        text=" Java 1.1 API java.awt.event.KeyEvent class"/>.  When a
+        key is pressed or released, the string put will be the portion
+        of its VK_ constant after the underscore, all in lower case.
+
+        <list>
+        If the shift key was depressed immediately before the
+        event took place, then the string will be capitalized. Special
+        keynames are also capitalized; shift+home is reported as
+        "[[HOME]]".  Symbols are capitalized as they appear on the
+        keyboard; for example, on an American QWERTY keyboard, shift+2
+        is reported as "[[@]]".
+
+        If the alt, meta, or command key was depressed immediately
+        before this key was pressed, then the string will be prefixed
+        with the string "[[A-]]". If the control key was depressed
+        while this key was pressed, then the string will be prefixed
+        with the string "[[C-]]". If both alt and control are
+        depressed, the string is prefixed with "[[C-A-]]".
+
+        Ibex does not distinguish between a key press resulting from
+        the user physically pushing down a key, and a 'key press'
+        resulting from the keyboard's typematic repeat. In the rare
+        case that an application needs to distinguish between these
+        two events, it should watch for KeyReleased messages and
+        maintain an internal key-state vector.
+        </list>
+        </property>
+    </section>
+  <section title="Re-routing events">
+
+    At any point in the Event Context, you can write to the [[mouse]]
+    property on any box.  The value written should be an object with two
+    properties, [[x]] and [[y]].  For example:
+    
+    <pre>
+    _Press1 ++= function(p) {
+        mouse = { x: 32, y: 77 };
+    }
+    </pre>
+
+    The coordinates specified are relative to the box whose [[mouse]]
+    property is being written to.  There is no need to supply the
+    [[inside]] property; it is computed automatically.  Writing to
+    the [[mouse]] property causes Ibex to recompute the eventual
+    target box, and also alter the values returned by [[mouse.x]],
+    [[mouse.y]], and [[mouse.inside]] for any **descendants**
+    of the current box.  Writing to the [[mouse]] property also
+    automatically prevents the event from returning to the box's parents
+    -- it is equivalent to not cascading on the non-underscored event.
+    This ensures that child boxes cannot trick their parent boxes into
+    thinking that the mouse has moved.
+    
+    If you want the event to "skip over" the boxes between the trapee
+    and the target, or if you want to re-route an event to a box which
+    is not a descendant of the current box, simply write the value to
+    the proper key on the target box.
+    
+    <pre>
+    <ui:box>
+        _KeyPressed = function(k) { ibex.log.info("first"); }
+         KeyPressed = function(k) { ibex.log.info("sixth"); }
+        $recipient.target = $target;
+        <ui:box id="recipient">
+            _KeyPressed = function(k) {
+                ibex.log.info("second");
+                thisbox.target.KeyPressed = k;
+                // inhibit cascade; keep event from going to $excluded
+                return true;
+            }
+             KeyPressed = function(k) { ibex.log.info("fifth"); }
+            <ui:box id="excluded">
+                _KeyPressed = function(k) {
+                   ibex.log.info("this never happens");
+                }
+            </ui:box>
+        </ui:box>
+        <ui:box id="target"> 
+            _KeyPressed = function(k) { ibex.log.info("third"); }
+             KeyPressed = function(k) { ibex.log.info("fourth"); }
+        </ui:box>
+    </ui:box>
+    </pre>
+
+    </section>
+
+  <section title="Synthesizing Your Own Events">
+
+    You can create "fake events" by simply writing to the [[mouse]]
+    property and then writing a value to one of the underscored properties
+    on a box.  This will have exactly the same effect as if the use had
+    actually pressed a key, clicked a button, or moved the mouse -- they
+    are indistinguishable.
+    
     </section>
     </section>
+ </section>
 
 
-  </section>
+</section>
 
 
+<section title="Ibex Base Services">
 <!-- ----------------------------------------------------------------------- -->
 <section title="Streams">
     
 <!-- ----------------------------------------------------------------------- -->
 <section title="Streams">
     
     </section>
 
 
     </section>
 
 
-<!-- ----------------------------------------------------------------------- -->
-<section title="Threads">
-
   <section title="Contexts">
 
     From the perspective of an application writer, Ibex is strictly
   <section title="Contexts">
 
     From the perspective of an application writer, Ibex is strictly
     
     </section>
 </section>
     
     </section>
 </section>
-
-<section title="Events">
-
-    Every execution of the Event Context begins with an event, which
-    consists of a key/value pair, and a mouse position, which consists of
-    an x and y coordinate.  The possible keys are [[_Press[1-3]]],
-    [[_Release[1-3]]], [[_Click[1-3]]], [[_DoubleClick[1-3]]],
-    [[_Move]], [[_KeyPressed]], and [[_KeyReleased]].
-    
-    Here are two example events:
-    
-    An event is triggered by writing the key to the value on a box.  This
-    triggers any trap handlers which may be present.  Once these handlers
-    have executed, Ibex figures out which child of the current box contains
-    the mouse (taking into account that some boxes may cover up others)
-    and writes the key and value to that box.  If none of the box's
-    children contain the mouse position, Ibex removes the leading
-    underscore from the key name and writes the value to
-    **that** property.  Once all the traps on that property have
-    executed, the value is written to the box's parent.
-    
-    Intuitively, Ibex delivers the underscored event to every box from the
-    root to the target, and then delivers the non-underscored event to
-    that same set of boxes in reverse order.  So the event travels down
-    the tree to the target, and then back up to the root.  The following
-    example prints out "first second third fourth" in that order.
-    
-    <pre>
-    <ui:box>
-        _Press1 ++= function(b) { ibex.log.info("first"); }
-         Press1 ++= function(b) { ibex.log.info("fourth"); }
-        <ui:box>
-          _Press1 ++= function(b) { ibex.log.info("second"); }
-           Press1 ++= function(b) { ibex.log.info("third"); }
-        </ui:box>
-    </ui:box>
-    </pre>
-
-    In general, you should use the **non-underscore** names to respond
-    to user input and use the underscored names when you want to override
-    child boxes' behavior or route events to particular boxes (for
-    example, when implementing a focus protocol).  This is why the
-    underscored elements are delivered to parents before children (so
-    parents can override their childrens' behavior), but non-underscored
-    events are delivered to children before parents (since, visually, a
-    mouse click is usually "intended" for the leaf box underneath the
-    cursor).
-    
-    </section>
-
-  <heading title="Stopping the Process"/>
-
-    At any point in this sequence, a trap handler can choose not to
-    cascade (by returning [[true]] from the trap handler function).
-    This will immediately cease the propagation of the event.  This is how
-    you would indicate that an event has been "handled".
-    
-  <heading title="Non-Propagating Events"/>
-
-    Ibex uses the following events to notify a box about changes that
-    only matter to that particular box.  These events do not propagate
-    either up or down the tree.
-
-    <property name="Enter Leave">
-        The value [[true]] is written to this property when the mouse (enters/leaves) the box.
-        </property>
-    
-    <property name="SizeChange">
-        The value [[true]] is put to this property after the size
-        of this box changes.
-        </property>
-
-    <property name="ChildChange">
-        When a child is added or removed, that child is written to
-        this property.  The write is always performed **after** the
-        addition or removal, so these two cases can be distinguished
-        by checking [[indexof(child)]].
-
-        Note that if the parent's redirect target is set to another
-        box, this trap will only be invoked when children are
-        manipulated by reading and writing to the parent.  Reads and
-        writes directly to the redirect target will **not** trigger
-        this trap.
-
-        Note also that this traps is still triggered if a box's
-        [[redirect]] target is **null**.  This is useful for
-        boxes that need to accept children and then relocate them
-        elsewhere.
-        </property>
-    
-  <section title="Listing of Events">
-    
-    <property name="Press1 Press2 Press3">
-        Indicates that the use has pressed a mouse button.  On
-        platforms with three mouse buttons, the **middle** button
-        is button 3 -- this ensures that applications written to only
-        use two buttons (1 and 2) will work intuitively on three button
-        platforms.
-        </property>
-    
-    <property name="Release1 Release2 Release3">
-        Indicates that the use has released a mouse button.
-        </property>
-    
-    <property name="Click1 Click2 Click3">
-        Indicates that the user has pressed and released the
-        mouse button without moving the mouse much (exactly how
-        much is platform-dependent).
-        </property>
-    
-    <property name="DoubleClick1 DoubleClick2 DoubleClick3">
-        Indicates that the user has clicked the 
-        mouse button twice within a short period of time (exactly how long is platform-dependent).
-        </property>
-    
-    <property name="Move">
-        Indicates that the mouse has moved while within this box, or that
-        the mouse while outside this box **if a button was pressed while within this box and has not yet been released**
-        </property>
-    
-    <property name="KeyPressed KeyReleased">
-
-        A string is written to this property when a key is pressed or
-        released If the key was any other key, a multi-character
-        string describing the key will be put. For simplicity, we use
-        the VK_ constants in the <link
-        url="http://java.sun.com/products/jdk/1.1/docs/api/java.awt.event.KeyEvent.html#VK_0"
-        text=" Java 1.1 API java.awt.event.KeyEvent class"/>.  When a
-        key is pressed or released, the string put will be the portion
-        of its VK_ constant after the underscore, all in lower case.
-
-        <list>
-        If the shift key was depressed immediately before the
-        event took place, then the string will be capitalized. Special
-        keynames are also capitalized; shift+home is reported as
-        "[[HOME]]".  Symbols are capitalized as they appear on the
-        keyboard; for example, on an American QWERTY keyboard, shift+2
-        is reported as "[[@]]".
-
-        If the alt, meta, or command key was depressed immediately
-        before this key was pressed, then the string will be prefixed
-        with the string "[[A-]]". If the control key was depressed
-        while this key was pressed, then the string will be prefixed
-        with the string "[[C-]]". If both alt and control are
-        depressed, the string is prefixed with "[[C-A-]]".
-
-        Ibex does not distinguish between a key press resulting from
-        the user physically pushing down a key, and a 'key press'
-        resulting from the keyboard's typematic repeat. In the rare
-        case that an application needs to distinguish between these
-        two events, it should watch for KeyReleased messages and
-        maintain an internal key-state vector.
-        </list>
-        </property>
-
-    </section>
-
-</section>
-
 <!-- ----------------------------------------------------------------------- -->
 <section title="Networking">
     
 <!-- ----------------------------------------------------------------------- -->
 <section title="Networking">
     
     
   </section>
 
     
   </section>
 
-<!-- ----------------------------------------------------------------------- -->
-<section title="Advanced Topics">
-
-  <section title="Re-routing events">
-
-    At any point in the Event Context, you can write to the [[mouse]]
-    property on any box.  The value written should be an object with two
-    properties, [[x]] and [[y]].  For example:
-    
-    <pre>
-    _Press1 ++= function(p) {
-        mouse = { x: 32, y: 77 };
-    }
-    </pre>
-
-    The coordinates specified are relative to the box whose [[mouse]]
-    property is being written to.  There is no need to supply the
-    [[inside]] property; it is computed automatically.  Writing to
-    the [[mouse]] property causes Ibex to recompute the eventual
-    target box, and also alter the values returned by [[mouse.x]],
-    [[mouse.y]], and [[mouse.inside]] for any **descendants**
-    of the current box.  Writing to the [[mouse]] property also
-    automatically prevents the event from returning to the box's parents
-    -- it is equivalent to not cascading on the non-underscored event.
-    This ensures that child boxes cannot trick their parent boxes into
-    thinking that the mouse has moved.
-    
-    If you want the event to "skip over" the boxes between the trapee
-    and the target, or if you want to re-route an event to a box which
-    is not a descendant of the current box, simply write the value to
-    the proper key on the target box.
-    
-    <pre>
-    <ui:box>
-        _KeyPressed = function(k) { ibex.log.info("first"); }
-         KeyPressed = function(k) { ibex.log.info("sixth"); }
-        $recipient.target = $target;
-        <ui:box id="recipient">
-            _KeyPressed = function(k) {
-                ibex.log.info("second");
-                thisbox.target.KeyPressed = k;
-                // inhibit cascade; keep event from going to $excluded
-                return true;
-            }
-             KeyPressed = function(k) { ibex.log.info("fifth"); }
-            <ui:box id="excluded">
-                _KeyPressed = function(k) {
-                   ibex.log.info("this never happens");
-                }
-            </ui:box>
-        </ui:box>
-        <ui:box id="target"> 
-            _KeyPressed = function(k) { ibex.log.info("third"); }
-             KeyPressed = function(k) { ibex.log.info("fourth"); }
-        </ui:box>
-    </ui:box>
-    </pre>
-
-    </section>
-
-  <section title="Synthesizing Your Own Events">
-
-    You can create "fake events" by simply writing to the [[mouse]]
-    property and then writing a value to one of the underscored properties
-    on a box.  This will have exactly the same effect as if the use had
-    actually pressed a key, clicked a button, or moved the mouse -- they
-    are indistinguishable.
-    
-    </section>
 
   <section title="Ibex self-emulation">
 
 
   <section title="Ibex self-emulation">
 
     new_ibex.load ++= function() { return newLoadFunction; }
     ibex.apply(ibex.box, .main, new_ibex);
     </pre>
     new_ibex.load ++= function() { return newLoadFunction; }
     ibex.apply(ibex.box, .main, new_ibex);
     </pre>
-  </section>
+</section>
 </section>
 
 <!-- ----------------------------------------------------------------------- -->
 </section>
 
 <!-- ----------------------------------------------------------------------- -->