home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 15 / CD_ASCQ_15_070894.iso / vrac_os2 / svd100.zip / SVDISK.DOC < prev    next >
Text File  |  1994-06-08  |  24KB  |  664 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.                                                       Super Virtual Disk
  9.  
  10.                                Swappable/Lockable/Removable Virtual Disk
  11.                                                                 for OS/2
  12.  
  13.                                                                   SVDISK
  14.                                                             Version 1.00
  15.                                                                 06/08/94
  16.  
  17.  
  18.  
  19.                                   TABLE OF CONTENTS
  20.        _________________________________________________________________
  21.  
  22.             1.0. INTRODUCTION TO Super Virtual Disk ..................3
  23.                  1.1. What is Super Virtual Disk? ....................3
  24.                  1.2. Features of SVDisk .............................3
  25.             2.0. SYSTEM REQUIREMENTS .................................4
  26.             3.0. COPYRIGHT NOTICE ....................................4
  27.             4.0. WARRANTY ............................................4
  28.             5.0. COST OF Super Virtual Disk ..........................4
  29.             6.0. CONTENTS OF THIS PACKAGE ............................5
  30.             7.0. INSTALLATION ........................................6
  31.                  7.1. Quick start ....................................6
  32.                  7.2. SVDisk.sys parameters ..........................6
  33.             8.0. CONTROLLING Super Virtual Disk ......................8
  34.                  8.1. Super Virtual Disk Control help screen .........8
  35.                  8.2. Options for SVDC ...............................8
  36.                  8.3. PM Super Virtual Disk Control ..................10
  37.                  8.4. Diskette boot bypass using VFloppy .............11
  38.             9.0. PROGRAMMING INFORMATION .............................11
  39.             10.0. ERROR MESSAGES .....................................12
  40.                  10.1. List of error messages ........................12
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.                                                                        2
  75.  
  76.  
  77.  
  78.        1.0. INTRODUCTION TO Super Virtual Disk
  79.        _________________________________________________________________
  80.  
  81.        1.1. What is Super Virtual Disk?
  82.  
  83.        Super Virtual Disk (SVDisk) is a 32-bit OS/2 device driver that
  84.        emulates either a removable Virtual Disk (VDisk) or a removable
  85.        Virtual Floppy (VFloppy) drive.  By using OS/2's virtual memory
  86.        management facility, SVDisk allows the entire content of the disk
  87.        to be swapped out via the paging mechanism.  If the SVDisk is
  88.        frequently accessed, OS/2 will keep the most recently used memory
  89.        pages in RAM, and SVDisk will essentially behave like a RAM Disk.
  90.  
  91.        1.2. Features of SVDisk
  92.  
  93.        -  Emulates multiple VDisk devices up to 16MB each even on a 4MB
  94.           system.  Cluster size is maintained at 512 bytes by varying
  95.           the size of the File Allocation Table (FAT) to reduce file
  96.           slack.
  97.        -  Emulates multiple VFloppy devices, ranging from 360KB to
  98.           2.88MB.  Virtual media support ranges from 160KB to 1.2MB for
  99.           5.25" VFloppy device, and from 720K to 2.88MB for 3.5" VFloppy
  100.           device.  If the VFloppy is a 3.5" device, automatic media
  101.           sensing is supported.
  102.        -  Media in SVDisk is removable.  This allows SVDisk to release
  103.           all memory used by the device back to the system.
  104.        -  Dynamic device reconfiguration is supported for the VFloppy
  105.           device.  If you load a 1.44MB VFloppy device, it can be
  106.           reconfigured later (without rebooting) as a 360KB, 720KB,
  107.           1.2MB or 1.44MB drive.
  108.        -  Special boot sector on VFloppy device to allow bypassing of
  109.           floppy boot if the image of the VFloppy is transferred to the
  110.           a real diskette using DISKCOPY.
  111.        -  Formatting and sector/track read/write are supported.
  112.        -  SVDisk allows locking of swappable memory into non-swappable
  113.           memory.  Once memory is locked, SVDisk will behave like a RAM
  114.           drive without paging delay.  The size of the lock can be
  115.           specified by the user, since locking the entire disk as non-
  116.           swappable can have serious performance impact to OS/2's
  117.           virtual memory operation.
  118.        -  A 32-bit command line utility and a 32-bit PM application are
  119.           included to provide complete control of all the capabilities
  120.           of SVDisk.
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.                                                                        3
  134.  
  135.  
  136.  
  137.        2.0. SYSTEM REQUIREMENTS
  138.        _________________________________________________________________
  139.  
  140.        Machines equipped with an Intel 386SX compatible or higher
  141.        processor.  OS/2 2.1 or higher, with minimum 4MB of memory.
  142.  
  143.  
  144.        3.0. COPYRIGHT NOTICE
  145.        _________________________________________________________________
  146.  
  147.        SVDisk (Super Virtual Disk)  Version 1.00  06/08/94
  148.        (c) Copyright 1994 by Albert J. Shan.  All Rights Reserved.
  149.  
  150.        No part of this program may be disassembled, modified or altered
  151.        by any means.
  152.  
  153.  
  154.        4.0. WARRANTY
  155.        _________________________________________________________________
  156.  
  157.        I, Albert J. Shan, make no warranties, expressed or implied,
  158.        including, but not limited to, merchantability or fitness for any
  159.        particular purpose.  In no event shall Albert J. Shan be liable
  160.        for indirect or consequential damages arising from the use of the
  161.        software program.
  162.  
  163.        You are free to redistribute this shareware package in its
  164.        entirety.  No part of this package may be included as part of a
  165.        commercial package.  If you have any questions about commercial
  166.        distribution of Super Virtual Disk, I can be contacted at:
  167.  
  168.        Albert J. Shan
  169.        4620 Granville Avenue
  170.        Richmond, B.C.
  171.        CANADA  V7C 1E4
  172.  
  173.        or via CompuServe, ID 70730,401
  174.        or via Internet, 70730.401@compuserve.com
  175.  
  176.  
  177.        5.0. COST OF Super Virtual Disk
  178.        _________________________________________________________________
  179.  
  180.        The user is granted a 30 days trial period, after which he or she
  181.        is required to register the product.  The cost of a single
  182.        machine license is $40 Canadian or $30 U.S.  Please refer to the
  183.        file ORDER.FRM or ORDERFRM.US for details.
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.                                                                        4
  193.  
  194.  
  195.  
  196.        6.0. CONTENTS OF THIS PACKAGE
  197.        _________________________________________________________________
  198.  
  199.        The following files are included in this package:
  200.  
  201.            SVDISK.SYS      - Super Virtual Disk device driver
  202.            SVDC.EXE        - Super Virtual Disk Control
  203.            PMSVDC.EXE      - PM version of SVDC
  204.            SVDISK.DOC      - This documentation
  205.            SVDISK.HST      - History of SVDisk
  206.            ORDER.FRM       - Canadian and international order form
  207.            ORDERFRM.US     - US order form
  208.            README          - Last minute information
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.                                                                        5
  252.  
  253.  
  254.  
  255.        7.0. INSTALLATION
  256.        _________________________________________________________________
  257.  
  258.        7.1. Quick start
  259.  
  260.        To install SVDisk, make a subdirectory called SVDISK, and copy
  261.        all the SVDisk files into \SVDISK.  Then edit your OS/2
  262.        CONFIG.SYS to include a line:
  263.  
  264.          DEVICE=D:\SVDISK\SVDISK.SYS
  265.  
  266.        Where D: is the drive where you created the SVDISK subdirectory.
  267.  
  268.        You may want to add SVDISK to the path by appending D:\SVDISK at
  269.        the end of the PATH= statement in CONFIG.SYS.
  270.  
  271.        When you load SVDisk without any parameter as in the above
  272.        example, it will create a 1.44MB VFloppy device after you reboot
  273.        the system.
  274.  
  275.        When SVDisk is loaded, it does not put a media in the virtual
  276.        drive.  You have to manually insert it with SVDC or PMSVDC.  To
  277.        insert a virtual media after the system is booted, you type:
  278.  
  279.          SVDC X: /i:720
  280.  
  281.        Where X: is the drive letter of the SVDisk after boot.
  282.  
  283.        This will insert a 720KB virtual media into the drive.  If you
  284.        specify /i without any parameter, SVDC will insert a media with
  285.        the maximum capacity as defined by the SVDisk.sys device in
  286.        CONFIG.SYS.  To make media insertion automatic, simply edit
  287.        STARTUP.CMD on your OS/2 boot drive and add the SVDC line to it.
  288.  
  289.  
  290.        If you want to install a 8MB VDisk type device, edit your
  291.        CONFIG.SYS by adding a line:
  292.  
  293.          DEVICE=D:\SVDISK\SVDISK 8192 512
  294.  
  295.        This will create a 8MB VDisk device with 512 root directory
  296.        entries after you reboot the system.
  297.  
  298.  
  299.        7.2. SVDisk.sys parameters
  300.  
  301.        SVDisk.sys can be loaded with no parameter to up to two
  302.        parameters.  To load SVDisk as a VFloppy device, you must specify
  303.        the size of the VFloppy device in KB.  For example:
  304.  
  305.          REM *** Load a 1.44MB VFloppy device ***
  306.          DEVICE=\SVDISK\SVDISK.SYS 1440
  307.  
  308.  
  309.  
  310.                                                                        6
  311.  
  312.  
  313.  
  314.          REM *** Load a 2.88MB VFloppy device ***
  315.          DEVICE=\SVDISK\SVDISK.SYS 2880
  316.  
  317.          REM *** Load a 360KB VFloppy device ***
  318.          DEVICE=\SVDISK\SVDISK.SYS 360
  319.  
  320.        The possible values for VFloppy device are: 360, 720, 1200, 1440,
  321.        and 2880.  Since SVDisk defaults to a 1.44MB VFloppy device, the
  322.        1440 parameter can be omitted.
  323.  
  324.  
  325.        To load SVDisk as a VDisk device, you can specify up to two
  326.        parameters:
  327.  
  328.          DEVICE=\SVDISK\SVDISK.SYS ssss eeee
  329.  
  330.        Where ssss is the size of the VDisk device, and eeee is the root
  331.        directory entries for the device.  eeee is optional, and if you
  332.        do not specify it, SVDisk will default to 64 root directory
  333.        entries.
  334.  
  335.        The possible values for ssss are from 16 to 16384 (16KB to 16MB.)
  336.        The VDisk device will always round up the size into 16KB
  337.        boundary.  If you specify a 250KB VDisk device, it will be loaded
  338.        as 256KB.
  339.  
  340.        The possible values for eeee are from 16 to 1024.  This value is
  341.        also rounded up in multiple of 16.
  342.  
  343.        If you load a VDisk device near the size of 4MB, it will attempt
  344.        to resolve the File Allocation Table (FAT) size as either 12-bit
  345.        or 16-bit.  In the case of conflict due to a large root directory
  346.        entries specification, SVDisk will slightly reduce the VDisk size
  347.        in favor of a 12-bit FAT for lower disk sector overhead in the
  348.        system area on the virtual media.
  349.  
  350.        SVDisk distinguishes a VDisk device from a VFloppy device solely
  351.        by the ssss (size) parameter.  If ssss is one of the possible
  352.        values for a VFloppy device, it will load itself as a VFloppy
  353.        device, and the second parameter is ignored.
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.                                                                        7
  370.  
  371.  
  372.  
  373.        8.0. CONTROLLING Super Virtual Disk
  374.        _________________________________________________________________
  375.  
  376.        8.1. Super Virtual Disk Control help screen
  377.  
  378.        Type SVDC at the OS/2 command prompt to receive this help screen:
  379.  
  380.        Super Virtual Disk Control (32-bit) Version 1.00  SHAREWARE VERSION
  381.        (c) Copyright 1994 Albert J. Shan.  All Rights Reserved.
  382.  
  383.        For use with Super Virtual Disk driver (SVDISK.SYS)
  384.  
  385.        Usage: SVDC [options] Drive:
  386.          [options]  /c        Fake a disk change.
  387.                     /e[f]     Eject media [f = forced eject].
  388.                     /i[:size] Insert media (if size is not specified, default
  389.                               to max. drive capacity.)  Size can only be
  390.                               specified for the VFloppy device.  Valid sizes are:
  391.                               160, 180, 320, 360, 720, 1.2, 1.44, 2.88.
  392.                     /l:size   Lock SVDisk in non-swappable memory.  Size
  393.                               is anywhere from 0 (KB) to the max. media size.
  394.                     /r[:size] Reconfigure VFloppy device capacity (if size is not
  395.                               specified, default to max. drive capacity.)  Valid
  396.                               sizes are: 360, 720, 1.2, 1.44, 2.88.
  397.                     /u        Unlock non-swappable memory used by the SVDisk.
  398.                     Drive:    Drive letter of the Super Virtual Disk.
  399.  
  400.        NOTE: The drive must not contain any media before reconfiguring with /r.
  401.  
  402.        *** Note: parameters within [] are optional.
  403.  
  404.        By specifying the drive letter of the SVDisk and without
  405.        specifying any other options, SVDC will report the current status
  406.        of the SVDisk drive.  For example:
  407.  
  408.           [C:\SVDISK]svdc j:
  409.  
  410.                    SVDISK.SYS Version:  1.00
  411.            Reconfigurable device size:  2.88MB
  412.                   Current device size:  2.88MB
  413.                    Current media size:  1.44MB
  414.           Non-swappable memory locked:   128KB
  415.  
  416.  
  417.        8.2. Options for SVDC
  418.  
  419.        /c        Fake a disk change.  This command will cause the SVDisk
  420.                  specified to appear as if it has been changed (ejected
  421.                  then reinserted.)  This is accomplished by changing the
  422.                  Volume Serial on the SVDisk.  If the program in
  423.                  question is looking for a change in Volume Label or a
  424.                  DOS program is looking for a change line bit in
  425.                  hardware, /c will not work.
  426.  
  427.  
  428.                                                                        8
  429.  
  430.  
  431.  
  432.  
  433.        /e[f]     Eject media.  This will eject the media in the SVDisk,
  434.                  thereby releasing all memory, including locked memory
  435.                  (see /l and /u below) back to the system.  If a program
  436.                  is currently running off the SVDisk, you must specify
  437.                  /ef to force the disk to eject.  Further access to the
  438.                  SVDisk drive will cause a drive not ready error.
  439.  
  440.        /i[:size] Insert media.  If size is not specified, it will insert
  441.                  a media with the exactly same size as the SVDisk
  442.                  device.  For example, if the VFloppy is 2.88MB,
  443.                  specifying /i alone will insert a 2.88MB media into the
  444.                  SVDisk drive.  The optional size parameter is only
  445.                  applicable for a VFloppy device.  This allows different
  446.                  size media to be inserted into the VFloppy drive.  If
  447.                  the VFloppy is a 5.25" 360KB device, the possible
  448.                  values are: 160, 180, 320, and 360.  If the VFloppy is
  449.                  a 3.5" 1.44MB device, the possible values are: 720 and
  450.                  1.44.  Depending on the type of VFloppy device, the
  451.                  possible values are: 160, 180, 320, 360, 720, 1.2, 1.44
  452.                  and 2.88.
  453.  
  454.        /l:size   Lock virtual disk in non-swappable memory.  This will
  455.                  cause the virtual memory allocated by SVDisk to be
  456.                  locked in real memory pages, and they will be precluded
  457.                  from swapping out by the system.  The starting location
  458.                  of the lock is fixed at the beginning of the disk, at
  459.                  logical sector 0.  The size parameter is anywhere from
  460.                  0 to the maximum size of the media in the SVDisk.  It
  461.                  will be rounded up in 4KB in size as OS/2 can only lock
  462.                  memory in page boundary.  A size of 0 is equivalent to
  463.                  unlocking all the memory (see /u switch below.)  If a
  464.                  lock already exists on the SVDisk, it will be released,
  465.                  and the new lock size will be installed.  If there is
  466.                  not enough real memory for the lock, /l will fail, and
  467.                  at the same time, releasing any memory previously
  468.                  locked.
  469.  
  470.                  The OS/2 kernel will swap out other processes in order
  471.                  to make room for the lock.  This may take a while as
  472.                  pages are being swapped out.  The system will not be
  473.                  responsive when the kernel is into heavy paging
  474.                  activities.
  475.  
  476.                  WARNING: Locking memory as non-swappable has the same
  477.                  effect as removing system memory on the hardware level.
  478.                  If you have a 8MB system, locking a few mega bytes of
  479.                  memory will make your system appear as if it has 4MB
  480.                  total system memory or less.  If the lock succeeds in
  481.                  locking large amount of memory, and the remaining non-
  482.                  swappable memory is extremely low, the OS/2 virtual
  483.                  memory paging mechanism will thrash.  Although the
  484.                  system is not crashed, it will be paging in and out so
  485.  
  486.  
  487.                                                                        9
  488.  
  489.  
  490.  
  491.                  frequently that the system can no longer respond to the
  492.                  user's input.  You will need to press Ctrl-Alt-Del to
  493.                  recover in this case.  In general, it is recommended
  494.                  not to lock more that one quarter of total system
  495.                  memory as non-swappable for all SVDisk devices
  496.                  combined.  PMSVDC.EXE will limit the maximum of the
  497.                  lock to half of total system memory or the maximum disk
  498.                  size, whichever is less.  On the other hand, SVDC.EXE
  499.                  is designed to be flexible, so any lock size is
  500.                  possible.
  501.  
  502.        /r[:size] Reconfigure VFloppy device capacity.  This switch is
  503.                  only applicable to VFloppy device, and it allows
  504.                  dynamic device reconfiguration while the system is
  505.                  running.  Before you can reconfigure the VFloppy
  506.                  device, the media must first be ejected via the /i
  507.                  switch (you cannot specify /r and /i at the same time.)
  508.                  Specifying /r alone will reconfigure the VFloppy device
  509.                  to the maximum capacity as loaded by the device driver.
  510.                  If SVDisk is loaded as a 1.2MB VFloppy device, you
  511.                  cannot reconfigure it to a 1.44MB or 2.88MB VFloppy
  512.                  device.  For example, if SVDisk is loaded as a 3.5"
  513.                  2.88MB VFloppy device, you can reconfigure it to 5.25"
  514.                  360KB, and 1.2MB VFloppy device.  You can also
  515.                  reconfigure it to 3.5" 720KB, 1.44KB and 2.88MB VFloppy
  516.                  device.
  517.  
  518.        /u        Unlock non-swappable memory used by the SVDisk.  This
  519.                  is the same as specifying /l:0.  Locked memory is
  520.                  released as being swappable.
  521.  
  522.  
  523.        8.3. PM Super Virtual Disk Control
  524.  
  525.        The Presentation Manager version of Super Virtual Disk Control
  526.        (PMSVDC.EXE) provides identical functions as SVDC.EXE with one
  527.        exception.  The lock function will limit the maximum available
  528.        memory for the lock as half of total system memory or maximum
  529.        media size, whichever is less.  This means if you have 16MB of
  530.        memory, and your VDisk device is 16MB, the largest memory size
  531.        you can lock is 8MB.  Many system board reserves up to 384K of
  532.        memory for shadow ROM and other purposes.  This effectively
  533.        reduces your total system memory.  Instead of 16MB (16384KB), you
  534.        get 16000KB total system under OS/2 and the maximum size for the
  535.        lock in this case is 8000KB.  The lock function also warns you if
  536.        you are locking more than one quarter of the total system memory.
  537.        If you have multiple SVDisk devices, PMSVDC will add up all
  538.        memory locked all SVDisk devices, subtract the existing lock size
  539.        on the current device, then add the new requested size to see if
  540.        it exceeds one quarter total memory limit.  In general, the total
  541.        memory locked by all SVDisk devices should be less than one
  542.        quarter of the total system memory to prevent OS/2 pager from
  543.        thrashing.
  544.  
  545.  
  546.                                                                       10
  547.  
  548.  
  549.  
  550.  
  551.  
  552.        8.4. Diskette boot bypass using VFloppy
  553.  
  554.        SVDisk contains a special boot sector which can be used to bypass
  555.        real floppy boot.  You can do this by transferring the image of a
  556.        VFloppy device with DISKCOPY to a real diskette.  If you leave
  557.        the diskette in drive A:, upon system reboot, you will get the
  558.        following message on the screen:
  559.  
  560.        Transferring system boot from diskette to hard drive...
  561.  
  562.        And the boot sequence will be transferred to the hard drive.  If
  563.        you have OS/2 Boot Manager installed, you will see the Boot
  564.        Manager at this point.
  565.  
  566.  
  567.        9.0. PROGRAMMING INFORMATION
  568.        _________________________________________________________________
  569.  
  570.        When SVDisk is used as a VFloppy device, it tries to emulate a
  571.        real floppy drive as much as possible.  However, this emulation
  572.        is not 100%.  If you write a program against the behavior of a
  573.        real floppy drive, it will almost certainly work with SVDisk.
  574.        The converse is not always true.  This is because SVDisk makes
  575.        certain assumptions to simplify many of the internal operations
  576.        which are true for a virtual device.  The common pitfall is to
  577.        assume reading and writing to a floppy device are always slower
  578.        than other computational threads.  If a multithreaded OS/2
  579.        application is designed with the above assumption, it will almost
  580.        certainly fail because the disk read/write operation is much
  581.        faster than the program has expected.
  582.  
  583.        SVDisk supports the following IOCtl Category 8 logical disk
  584.        commands (in hex):
  585.  
  586.        00   Lock drive
  587.        01   Unlock drive
  588.        02   Redetermine media
  589.        04   Begin format
  590.        20   Block removable
  591.        21   Query logical map
  592.        43   Set device parameters (the changing the BPB of the device is
  593.             not supported)
  594.        44   Read track
  595.        64   Write track
  596.        65   Verify track
  597.        45   Format and verify track
  598.        60   Query media sense
  599.        63   Query device parameters
  600.  
  601.        Please refer to OS/2 2.x SDK (Software Development Kit) on
  602.        programming the IOCtl interface.
  603.  
  604.  
  605.                                                                       11
  606.  
  607.  
  608.  
  609.        10.0. ERROR MESSAGES
  610.        _________________________________________________________________
  611.  
  612.        10.1. List of error messages
  613.  
  614.        The following is a list of major error messages returned by
  615.        SVDC.EXE.  The error return code is also displayed as part of the
  616.        prefix in the error message:
  617.  
  618.        SVDnnnn: Error message text
  619.  
  620.        Where nnnn is the error return code.
  621.  
  622.        SVD0016: Drive X: is not a Super Virtual Disk.
  623.        SVD0017: SVDISK.SYS has a higher revision level.
  624.        SVD0018: Invalid media size.
  625.        SVD0020: Unable to eject Super Virtual Disk due to memory deallocation error.
  626.        SVD0021: Unable to insert Super Virtual Disk due to memory allocation error.
  627.        SVD0022: No media in drive.
  628.        SVD0023: You cannot insert two media in the drive.
  629.        SVD0024: Incorrect size specified.
  630.        SVD0025: System failed to lock memory as non-swappable.
  631.        SVD0026: System failed to unlock non-swappable memory.
  632.        SVD0027: No non-swappable memory locked by the Super Virtual Disk.
  633.        SVD0028: Cannot reconfigure Super Virtual Disk with a media in the Drive.
  634.        SVD0029: Only VFloppy type device can be reconfigured.
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.                                                                       12