Slashdot Mirror


User: scumdamn

scumdamn's activity in the archive.

Stories
0
Comments
736
First seen
Last seen
Profile
(view on slashdot.org)

Comments · 736

  1. Re:Karma on Sony Bans Sale of Virtual Items from Everquest · · Score: 1

    Then slap me a scoop of it and I'll scoop you some next time I have mod status. Hey, it's about time for Jon of Katz to respawn. Who wants to join my party and smite him. I heard he has the Cloak of Pomposity. What do you say we camp him and sell the Cloak over Ebay?

    Oh yeah,
    I know I'll get moderated down for this but...

  2. Re:Machine Translation in Wired on Jordan Pollack Answers AI And IP Questions · · Score: 1

    My wife (who is very fluent in both English and Spanish) uses Babelfish to translate documents from English to Spanish. She sweeps up behind it, but reports that it's much faster than doing the whole thing by hand.
    It's kind of like OCR. Many times the scanner will get a letter or two wrong, but that's very easy to fix and a lot faster than transcribing it yourself.

  3. Re:Voog? on Ogg Vorbis And Xiphophorus · · Score: 1

    I didn't know that one had the witches in it. I have not yet read it.
    By the way, have you read "The Fifth Elephant" yet?

  4. Re:Voog? on Ogg Vorbis And Xiphophorus · · Score: 3

    Actually, the names are from Discworld. Nanny Ogg and Vorbis. For references to Vorbis, grab Small Gods. For Nanny Ogg, the most recent book would be Maskerade.

  5. OT: Alternate terminals on Miguel de Icaza Tells All! · · Score: 1

    Will Powershell be included in the next release of Gnome? I'd like to see it the default Gnome terminal. I've not yet seen another Terminal emulator with multiple tabs. Especially one designed for Gnome with keyboard support. Have you looked at it yet? It's really changed how I work in X. Rather than a multitude of xterms I have one window with multiple tabs. Each one doing a different thing. Even if you're not going to include it, at least have a look. It just might change how you work in X.

  6. OT: Powershell if Phat on Miguel de Icaza Tells All! · · Score: 1

    I use powershell every day here at work. One bash tab is running ssh, the other is running local programs, etc. I love powershell.

  7. Re:Amen brother! on Final Fantasy IX Pics And Info · · Score: 1

    Which one was Mystic Quest?

  8. Re:And now the appeals. on Microsoft Loses · · Score: 2

    Actually, I read the first 37K of the judgement. The judge has convinced me. Overall a very good explaination of the ruling. I'm sold on it. I'm sure the appeals court is going to side with MS on at least enough counts to justify (to them) overturning a structural remedy. I can almost stand a Republican congress, but a Republican supreme court is almost dangerous.

  9. Re:Legacy systems & Linux: A similar situation? on Wyse Ditches Linux For WinCE · · Score: 1

    This is like a soundoff! Unfortunately, I don't know how to impliment the features you've suggested. I'll show you mine, though, if you show me yours.
    Seriously, though, email me if you'd like a tarred copy of my firewall script. Unfortunately, I've been the only pair of eyes to have a look at it and it'd be nice to have someone else check it for possible vulnerabilities.

  10. Re:Linux router (OT) on Wyse Ditches Linux For WinCE · · Score: 1
    Actually, mine's much better.
    • It was free
    • I can ssh into it.
    • I can use it to compile programs (slowly)
    • It's a mail server
    • I can administer it remotely.
      Why would I need a proprietary router like the Linksys?

  11. Re:Legacy systems & Linux: A similar situation? on Wyse Ditches Linux For WinCE · · Score: 1
    I'm about as proud of my firewall as all those rednecks I was in high school with were about their trucks. I've tweaked it, enhanced it, shined it up, showed it off, etc. It's a hell of a firewall.
    I'm not pimping it or anything. In fact, I don't have the script available for download or anything, but here's what it can do:
    1. Filter out certain incoming ports. I have SMB, STMP, telnet, and a few others.
    2. Update the firewall rules every time I recieve a new ip address.
    3. Update my IP on our webserver every time it changes
    4. Prevent spoofing, etc.

    Yup. I love my firewall.
  12. Re:Legacy systems & Linux: A similar situation? on Wyse Ditches Linux For WinCE · · Score: 2

    I think this fella and his boss are missing out on a big opportunity. With broadband connections and multiple computers in a house you have people who want to share their internet connection between two or more computers. The easy solution is a little headless Linux box running as a router. I have one at home that requires NO upkeep at all. If the power goes down for a minute or so the little box boots first, gets an IP from Roadrunner, and is ready to give out private IPs to the Windows boxes by the time they boot.
    So if I had slow systems coming in on the cheap I'd be throwing a command-line only install on them with just the basic tools, throw two nics in the box, put my firewall script in the directories it goes in, and sell it as a router.

  13. Re:Copyrights and Patents on Copyright Comments Redux · · Score: 2

    No, duh. If the government stepped out of it and stopped enforcing the contract your work would be copied and cloned so fast your head would spin. The way it was originally envisioned had the government doing you a favor in exchange for you giving back to society. It actually worked.

  14. Re:Copyrights and Patents on Copyright Comments Redux · · Score: 2

    I can. Intellectual property could easily be copied for little or no cost if not for our government making it illegal. This costs the government money to enforce, and in exchange for enforcing your right and allowing you the opportunity to make money from your creations they expect your creations to be released to the public domain when you croak.
    There are many citations of how this helps the nation and society as a whole, but most of them are common sense, so I'll skip to the next topic without wasting space repeating what's been said before.

  15. Quickies on IBM Runs 41,000 Copies of Linux on Mainframe · · Score: 1

    I think this is the kind of story for a site like linuxtoday. This story hasn't changed very at all since the last time it was run (Tuesday). It's just a different news agency reporting it.

  16. Losing money? on How Much Is A Web Site Worth? · · Score: 1

    You've recieved $20k a year, in five years, the site has cost $60k to keep running. So in five years the site has earned $40k. That's $8k a year in earnings. Better than Amazon, but consider that that wouldn't even pay the labor of one developer. I'd keep it as a side job that earns me a bit of cash.

  17. Re:Emotion Engine on Playstation 2 Emotion Engine · · Score: 1

    You think it's possible to build a farm of those and to use them for movie rendering?
    A farm of women? What the hell are you thinking? It's an old wives tale that women who work together for a while will begin menstruating at the same time. Do you want a rendering farm that slows down for 4-7 days a month? We have systems that are close to five nines now and you want to go back to the antiquated 23 of 28 model?

  18. Re:Whoops.. on BeOS 5.0 Available for Free - But Not Yet · · Score: 1

    I've finally worked around all the issues with the preview version. I now have a dual-boot Linux/Be system. I have all my Linux partitions automatically mounted on boot, true type fonts work great, my windows partition is now BFS, lilo is working great, and I'm really impressed with the installer. The only problem I'm having with the whole thing is SSH failing to compile even though it's supposed to. Any other ideas on how to make this Be system more Linux-like? (eg XFree86, etc)

  19. A good concession on US to Give Web Patents More Scrutiny · · Score: 2

    But they should start looking at patents that have already been granted with the same guidelines that they are looking at new patents with. This functions as an admission that the system was broken. Let's invalidate some patents that were released under the broken system.

  20. Re:The Path Forward seems clear to me... on Cphack, the GPL, And So Much More · · Score: 2

    Please take a look at my userinfo. I've done such a thing and released it on Slashdot.

  21. Re:COPYING on GPL To Be Tested by Mattel? · · Score: 2

    Please disregard the previous message. This is the correct COPYING. ************************************************** ***************************
    The following license applies to CP4Hack. No matter who the copyright owner is,
    this is the license the software is released under.
    ************************************************** ***************************

    GNU GENERAL PUBLIC LICENSE
    Version 2, June 1991

    Copyright (C) 1989, 1991 Free Software Foundation, Inc.
    675 Mass Ave, Cambridge, MA 02139, USA
    Everyone is permitted to copy and distribute verbatim copies
    of this license document, but changing it is not allowed.

    Preamble

    The licenses for most software are designed to take away your
    freedom to share and change it. By contrast, the GNU General Public
    License is intended to guarantee your freedom to share and change free
    software--to make sure the software is free for all its users. This
    General Public License applies to most of the Free Software
    Foundation's software and to any other program whose authors commit to
    using it. (Some other Free Software Foundation software is covered by
    the GNU Library General Public License instead.) You can apply it to
    your programs, too.

    When we speak of free software, we are referring to freedom, not
    price. Our General Public Licenses are designed to make sure that you
    have the freedom to distribute copies of free software (and charge for
    this service if you wish), that you receive source code or can get it
    if you want it, that you can change the software or use pieces of it
    in new free programs; and that you know you can do these things.

    To protect your rights, we need to make restrictions that forbid
    anyone to deny you these rights or to ask you to surrender the rights.
    These restrictions translate to certain responsibilities for you if you
    distribute copies of the software, or if you modify it.

    For example, if you distribute copies of such a program, whether
    gratis or for a fee, you must give the recipients all the rights that
    you have. You must make sure that they, too, receive or can get the
    source code. And you must show them these terms so they know their
    rights.

    We protect your rights with two steps: (1) copyright the software, and
    (2) offer you this license which gives you legal permission to copy,
    distribute and/or modify the software.

    Also, for each author's protection and ours, we want to make certain
    that everyone understands that there is no warranty for this free
    software. If the software is modified by someone else and passed on, we
    want its recipients to know that what they have is not the original, so
    that any problems introduced by others will not reflect on the original
    authors' reputations.

    Finally, any free program is threatened constantly by software
    patents. We wish to avoid the danger that redistributors of a free
    program will individually obtain patent licenses, in effect making the
    program proprietary. To prevent this, we have made it clear that any
    patent must be licensed for everyone's free use or not licensed at all.

    The precise terms and conditions for copying, distribution and
    modification follow.

    GNU GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

    0. This License applies to any program or other work which contains
    a notice placed by the copyright holder saying it may be distributed
    under the terms of this General Public License. The "Program", below,
    refers to any such program or work, and a "work based on the Program"
    means either the Program or any derivative work under copyright law:
    that is to say, a work containing the Program or a portion of it,
    either verbatim or with modifications and/or translated into another
    language. (Hereinafter, translation is included without limitation in
    the term "modification".) Each licensee is addressed as "you".

    Activities other than copying, distribution and modification are not
    covered by this License; they are outside its scope. The act of
    running the Program is not restricted, and the output from the Program
    is covered only if its contents constitute a work based on the
    Program (independent of having been made by running the Program).
    Whether that is true depends on what the Program does.

    1. You may copy and distribute verbatim copies of the Program's
    source code as you receive it, in any medium, provided that you
    conspicuously and appropriately publish on each copy an appropriate
    copyright notice and disclaimer of warranty; keep intact all the
    notices that refer to this License and to the absence of any warranty;
    and give any other recipients of the Program a copy of this License
    along with the Program.

    You may charge a fee for the physical act of transferring a copy, and
    you may at your option offer warranty protection in exchange for a fee.

    2. You may modify your copy or copies of the Program or any portion
    of it, thus forming a work based on the Program, and copy and
    distribute such modifications or work under the terms of Section 1
    above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License. (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

    These requirements apply to the modified work as a whole. If
    identifiable sections of that work are not derived from the Program,
    and can be reasonably considered independent and separate works in
    themselves, then this License, and its terms, do not apply to those
    sections when you distribute them as separate works. But when you
    distribute the same sections as part of a whole which is a work based
    on the Program, the distribution of the whole must be on the terms of
    this License, whose permissions for other licensees extend to the
    entire whole, and thus to each and every part regardless of who wrote it.

    Thus, it is not the intent of this section to claim rights or contest
    your rights to work written entirely by you; rather, the intent is to
    exercise the right to control the distribution of derivative or
    collective works based on the Program.

    In addition, mere aggregation of another work not based on the Program
    with the Program (or with a work based on the Program) on a volume of
    a storage or distribution medium does not bring the other work under
    the scope of this License.

    3. You may copy and distribute the Program (or a work based on it,
    under Section 2) in object code or executable form under the terms of
    Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code. (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

    The source code for a work means the preferred form of the work for
    making modifications to it. For an executable work, complete source
    code means all the source code for all modules it contains, plus any
    associated interface definition files, plus the scripts used to
    control compilation and installation of the executable. However, as a
    special exception, the source code distributed need not include
    anything that is normally distributed (in either source or binary
    form) with the major components (compiler, kernel, and so on) of the
    operating system on which the executable runs, unless that component
    itself accompanies the executable.

    If distribution of executable or object code is made by offering
    access to copy from a designated place, then offering equivalent
    access to copy the source code from the same place counts as
    distribution of the source code, even though third parties are not
    compelled to copy the source along with the object code.

    4. You may not copy, modify, sublicense, or distribute the Program
    except as expressly provided under this License. Any attempt
    otherwise to copy, modify, sublicense or distribute the Program is
    void, and will automatically terminate your rights under this License.
    However, parties who have received copies, or rights, from you under
    this License will not have their licenses terminated so long as such
    parties remain in full compliance.

    5. You are not required to accept this License, since you have not
    signed it. However, nothing else grants you permission to modify or
    distribute the Program or its derivative works. These actions are
    prohibited by law if you do not accept this License. Therefore, by
    modifying or distributing the Program (or any work based on the
    Program), you indicate your acceptance of this License to do so, and
    all its terms and conditions for copying, distributing or modifying
    the Program or works based on it.

    6. Each time you redistribute the Program (or any work based on the
    Program), the recipient automatically receives a license from the
    original licensor to copy, distribute or modify the Program subject to
    these terms and conditions. You may not impose any further
    restrictions on the recipients' exercise of the rights granted herein.
    You are not responsible for enforcing compliance by third parties to
    this License.

    7. If, as a consequence of a court judgment or allegation of patent
    infringement or for any other reason (not limited to patent issues),
    conditions are imposed on you (whether by court order, agreement or
    otherwise) that contradict the conditions of this License, they do not
    excuse you from the conditions of this License. If you cannot
    distribute so as to satisfy simultaneously your obligations under this
    License and any other pertinent obligations, then as a consequence you
    may not distribute the Program at all. For example, if a patent
    license would not permit royalty-free redistribution of the Program by
    all those who receive copies directly or indirectly through you, then
    the only way you could satisfy both it and this License would be to
    refrain entirely from distribution of the Program.

    If any portion of this section is held invalid or unenforceable under
    any particular circumstance, the balance of the section is intended to
    apply and the section as a whole is intended to apply in other
    circumstances.

    It is not the purpose of this section to induce you to infringe any
    patents or other property right claims or to contest validity of any
    such claims; this section has the sole purpose of protecting the
    integrity of the free software distribution system, which is
    implemented by public license practices. Many people have made
    generous contributions to the wide range of software distributed
    through that system in reliance on consistent application of that
    system; it is up to the author/donor to decide if he or she is willing
    to distribute software through any other system and a licensee cannot
    impose that choice.

    This section is intended to make thoroughly clear what is believed to
    be a consequence of the rest of this License.

    8. If the distribution and/or use of the Program is restricted in
    certain countries either by patents or by copyrighted interfaces, the
    original copyright holder who places the Program under this License
    may add an explicit geographical distribution limitation excluding
    those countries, so that distribution is permitted only in or among
    countries not thus excluded. In such case, this License incorporates
    the limitation as if written in the body of this License.

    9. The Free Software Foundation may publish revised and/or new versions
    of the General Public License from time to time. Such new versions will
    be similar in spirit to the present version, but may differ in detail to
    address new problems or concerns.

    Each version is given a distinguishing version number. If the Program
    specifies a version number of this License which applies to it and "any
    later version", you have the option of following the terms and conditions
    either of that version or of any later version published by the Free
    Software Foundation. If the Program does not specify a version number of
    this License, you may choose any version ever published by the Free Software
    Foundation.

    10. If you wish to incorporate parts of the Program into other free
    programs whose distribution conditions are different, write to the author
    to ask for permission. For software which is copyrighted by the Free
    Software Foundation, write to the Free Software Foundation; we sometimes
    make exceptions for this. Our decision will be guided by the two goals
    of preserving the free status of all derivatives of our free software and
    of promoting the sharing and reuse of software generally.

    NO WARRANTY

    11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
    FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
    OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
    PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
    OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
    TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
    PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
    REPAIR OR CORRECTION.

    12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
    INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
    OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
    TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
    YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
    PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    POSSIBILITY OF SUCH DAMAGES.

    END OF TERMS AND CONDITIONS

    Appendix: How to Apply These Terms to Your New Programs

    If you develop a new program, and you want it to be of the greatest
    possible use to the public, the best way to achieve this is to make it
    free software which everyone can redistribute and change under these terms.

    To do so, attach the following notices to the program. It is safest
    to attach them to the start of each source file to most effectively
    convey the exclusion of warranty; and each file should have at least
    the "copyright" line and a pointer to where the full notice is found.


    Copyright (C) 19yy

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

    Also add information on how to contact you by electronic and paper mail.

    If the program is interactive, make it output a short notice like this
    when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) 19yy name of author

    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

    The hypothetical commands `show w' and `show c' should show the appropriate
    parts of the General Public License. Of course, the commands you use may
    be called something other than `show w' and `show c'; they could even be
    mouse-clicks or menu items--whatever suits your program.

    You should also get your employer (if you work as a programmer) or your
    school, if any, to sign a "copyright disclaimer" for the program, if
    necessary. Here is a sample; alter the names:

    Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    `Gnomovision' (which makes passes at compilers) written by James Hacker.

    , 1 April 1989
    Ty Coon, President of Vice

    This General Public License does not permit incorporating your program into
    proprietary programs. If your program is a subroutine library, you may
    consider it more useful to permit linking proprietary applications with the
    library. If this is what you want to do, use the GNU Library General
    Public License instead of this License.

  22. Re:COPYING on GPL To Be Tested by Mattel? · · Score: 1

    Please disregard the previous message. This is the correct COPYING.
    ************************************************** ***************************
    The following license applies to CP4Hack. No matter who the copyright owner is,
    this is the license the software is released under.
    ************************************************** ***************************

    GNU GENERAL PUBLIC LICENSE
    Version 2, June 1991

    Copyright (C) 1989, 1991 Free Software Foundation, Inc.
    675 Mass Ave, Cambridge, MA 02139, USA
    Everyone is permitted to copy and distribute verbatim copies
    of this license document, but changing it is not allowed.

    Preamble

    The licenses for most software are designed to take away your
    freedom to share and change it. By contrast, the GNU General Public
    License is intended to guarantee your freedom to share and change free
    software--to make sure the software is free for all its users. This
    General Public License applies to most of the Free Software
    Foundation's software and to any other program whose authors commit to
    using it. (Some other Free Software Foundation software is covered by
    the GNU Library General Public License instead.) You can apply it to
    your programs, too.

    When we speak of free software, we are referring to freedom, not
    price. Our General Public Licenses are designed to make sure that you
    have the freedom to distribute copies of free software (and charge for
    this service if you wish), that you receive source code or can get it
    if you want it, that you can change the software or use pieces of it
    in new free programs; and that you know you can do these things.

    To protect your rights, we need to make restrictions that forbid
    anyone to deny you these rights or to ask you to surrender the rights.
    These restrictions translate to certain responsibilities for you if you
    distribute copies of the software, or if you modify it.

    For example, if you distribute copies of such a program, whether
    gratis or for a fee, you must give the recipients all the rights that
    you have. You must make sure that they, too, receive or can get the
    source code. And you must show them these terms so they know their
    rights.

    We protect your rights with two steps: (1) copyright the software, and
    (2) offer you this license which gives you legal permission to copy,
    distribute and/or modify the software.

    Also, for each author's protection and ours, we want to make certain
    that everyone understands that there is no warranty for this free
    software. If the software is modified by someone else and passed on, we
    want its recipients to know that what they have is not the original, so
    that any problems introduced by others will not reflect on the original
    authors' reputations.

    Finally, any free program is threatened constantly by software
    patents. We wish to avoid the danger that redistributors of a free
    program will individually obtain patent licenses, in effect making the
    program proprietary. To prevent this, we have made it clear that any
    patent must be licensed for everyone's free use or not licensed at all.

    The precise terms and conditions for copying, distribution and
    modification follow.

    GNU GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

    0. This License applies to any program or other work which contains
    a notice placed by the copyright holder saying it may be distributed
    under the terms of this General Public License. The "Program", below,
    refers to any such program or work, and a "work based on the Program"
    means either the Program or any derivative work under copyright law:
    that is to say, a work containing the Program or a portion of it,
    either verbatim or with modifications and/or translated into another
    language. (Hereinafter, translation is included without limitation in
    the term "modification".) Each licensee is addressed as "you".

    Activities other than copying, distribution and modification are not
    covered by this License; they are outside its scope. The act of
    running the Program is not restricted, and the output from the Program
    is covered only if its contents constitute a work based on the
    Program (independent of having been made by running the Program).
    Whether that is true depends on what the Program does.

    1. You may copy and distribute verbatim copies of the Program's
    source code as you receive it, in any medium, provided that you
    conspicuously and appropriately publish on each copy an appropriate
    copyright notice and disclaimer of warranty; keep intact all the
    notices that refer to this License and to the absence of any warranty;
    and give any other recipients of the Program a copy of this License
    along with the Program.

    You may charge a fee for the physical act of transferring a copy, and
    you may at your option offer warranty protection in exchange for a fee.

    2. You may modify your copy or copies of the Program or any portion
    of it, thus forming a work based on the Program, and copy and
    distribute such modifications or work under the terms of Section 1
    above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License. (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

    These requirements apply to the modified work as a whole. If
    identifiable sections of that work are not derived from the Program,
    and can be reasonably considered independent and separate works in
    themselves, then this License, and its terms, do not apply to those
    sections when you distribute them as separate works. But when you
    distribute the same sections as part of a whole which is a work based
    on the Program, the distribution of the whole must be on the terms of
    this License, whose permissions for other licensees extend to the
    entire whole, and thus to each and every part regardless of who wrote it.

    Thus, it is not the intent of this section to claim rights or contest
    your rights to work written entirely by you; rather, the intent is to
    exercise the right to control the distribution of derivative or
    collective works based on the Program.

    In addition, mere aggregation of another work not based on the Program
    with the Program (or with a work based on the Program) on a volume of
    a storage or distribution medium does not bring the other work under
    the scope of this License.

    3. You may copy and distribute the Program (or a work based on it,
    under Section 2) in object code or executable form under the terms of
    Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code. (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

    The source code for a work means the preferred form of the work for
    making modifications to it. For an executable work, complete source
    code means all the source code for all modules it contains, plus any
    associated interface definition files, plus the scripts used to
    control compilation and installation of the executable. However, as a
    special exception, the source code distributed need not include
    anything that is normally distributed (in either source or binary
    form) with the major components (compiler, kernel, and so on) of the
    operating system on which the executable runs, unless that component
    itself accompanies the executable.

    If distribution of executable or object code is made by offering
    access to copy from a designated place, then offering equivalent
    access to copy the source code from the same place counts as
    distribution of the source code, even though third parties are not
    compelled to copy the source along with the object code.

    4. You may not copy, modify, sublicense, or distribute the Program
    except as expressly provided under this License. Any attempt
    otherwise to copy, modify, sublicense or distribute the Program is
    void, and will automatically terminate your rights under this License.
    However, parties who have received copies, or rights, from you under
    this License will not have their licenses terminated so long as such
    parties remain in full compliance.

    5. You are not required to accept this License, since you have not
    signed it. However, nothing else grants you permission to modify or
    distribute the Program or its derivative works. These actions are
    prohibited by law if you do not accept this License. Therefore, by
    modifying or distributing the Program (or any work based on the
    Program), you indicate your acceptance of this License to do so, and
    all its terms and conditions for copying, distributing or modifying
    the Program or works based on it.

    6. Each time you redistribute the Program (or any work based on the
    Program), the recipient automatically receives a license from the
    original licensor to copy, distribute or modify the Program subject to
    these terms and conditions. You may not impose any further
    restrictions on the recipients' exercise of the rights granted herein.
    You are not responsible for enforcing compliance by third parties to
    this License.

    7. If, as a consequence of a court judgment or allegation of patent
    infringement or for any other reason (not limited to patent issues),
    conditions are imposed on you (whether by court order, agreement or
    otherwise) that contradict the conditions of this License, they do not
    excuse you from the conditions of this License. If you cannot
    distribute so as to satisfy simultaneously your obligations under this
    License and any other pertinent obligations, then as a consequence you
    may not distribute the Program at all. For example, if a patent
    license would not permit royalty-free redistribution of the Program by
    all those who receive copies directly or indirectly through you, then
    the only way you could satisfy both it and this License would be to
    refrain entirely from distribution of the Program.

    If any portion of this section is held invalid or unenforceable under
    any particular circumstance, the balance of the section is intended to
    apply and the section as a whole is intended to apply in other
    circumstances.

    It is not the purpose of this section to induce you to infringe any
    patents or other property right claims or to contest validity of any
    such claims; this section has the sole purpose of protecting the
    integrity of the free software distribution system, which is
    implemented by public license practices. Many people have made
    generous contributions to the wide range of software distributed
    through that system in reliance on consistent application of that
    system; it is up to the author/donor to decide if he or she is willing
    to distribute software through any other system and a licensee cannot
    impose that choice.

    This section is intended to make thoroughly clear what is believed to
    be a consequence of the rest of this License.

    8. If the distribution and/or use of the Program is restricted in
    certain countries either by patents or by copyrighted interfaces, the
    original copyright holder who places the Program under this License
    may add an explicit geographical distribution limitation excluding
    those countries, so that distribution is permitted only in or among
    countries not thus excluded. In such case, this License incorporates
    the limitation as if written in the body of this License.

    9. The Free Software Foundation may publish revised and/or new versions
    of the General Public License from time to time. Such new versions will
    be similar in spirit to the present version, but may differ in detail to
    address new problems or concerns.

    Each version is given a distinguishing version number. If the Program
    specifies a version number of this License which applies to it and "any
    later version", you have the option of following the terms and conditions
    either of that version or of any later version published by the Free
    Software Foundation. If the Program does not specify a version number of
    this License, you may choose any version ever published by the Free Software
    Foundation.

    10. If you wish to incorporate parts of the Program into other free
    programs whose distribution conditions are different, write to the author
    to ask for permission. For software which is copyrighted by the Free
    Software Foundation, write to the Free Software Foundation; we sometimes
    make exceptions for this. Our decision will be guided by the two goals
    of preserving the free status of all derivatives of our free software and
    of promoting the sharing and reuse of software generally.

    NO WARRANTY

    11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
    FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
    OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
    PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
    OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
    TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
    PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
    REPAIR OR CORRECTION.

    12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
    INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
    OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
    TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
    YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
    PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    POSSIBILITY OF SUCH DAMAGES.

    END OF TERMS AND CONDITIONS

    Appendix: How to Apply These Terms to Your New Programs

    If you develop a new program, and you want it to be of the greatest
    possible use to the public, the best way to achieve this is to make it
    free software which everyone can redistribute and change under these terms.

    To do so, attach the following notices to the program. It is safest
    to attach them to the start of each source file to most effectively
    convey the exclusion of warranty; and each file should have at least
    the "copyright" line and a pointer to where the full notice is found.


    Copyright (C) 19yy

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

    Also add information on how to contact you by electronic and paper mail.

    If the program is interactive, make it output a short notice like this
    when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) 19yy name of author

    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

    The hypothetical commands `show w' and `show c' should show the appropriate
    parts of the General Public License. Of course, the commands you use may
    be called something other than `show w' and `show c'; they could even be
    mouse-clicks or menu items--whatever suits your program.

    You should also get your employer (if you work as a programmer) or your
    school, if any, to sign a "copyright disclaimer" for the program, if
    necessary. Here is a sample; alter the names:

    Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    `Gnomovision' (which makes passes at compilers) written by James Hacker.

    , 1 April 1989
    Ty Coon, President of Vice

    This General Public License does not permit incorporating your program into
    proprietary programs. If your program is a subroutine library, you may
    consider it more useful to permit linking proprietary applications with the
    library. If this is what you want to do, use the GNU Library General
    Public License instead of this License.

  23. Re:I've released a version with clarified licensin on GPL To Be Tested by Mattel? · · Score: 2

    /*
    * cph1_rev.c
    * By Matthew Skala
    */
    /* CP4Hack.
    * Copyright (C) 2000 Matthew Skala
    *
    * This program is free software; you can redistribute it and/or modify
    * it under the terms of the GNU General Public License as published by
    * the Free Software Foundation; either version 2 of the License, or
    * (at your option) any later version.
    *
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    * GNU General Public License for more details.
    *
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    /
    #include <stdio.h>

    /* Polynomial table for forward CRC */
    unsigned long crctable[256]={
    0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL,
    0x076DC419L, 0x706AF48FL, 0xE963A535L, 0x9E6495A3L,
    0x0EDB8832L, 0x79DCB8A4L, 0xE0D5E91EL, 0x97D2D988L,
    0x09B64C2BL, 0x7EB17CBDL, 0xE7B82D07L, 0x90BF1D91L,
    0x1DB71064L, 0x6AB020F2L, 0xF3B97148L, 0x84BE41DEL,
    0x1ADAD47DL, 0x6DDDE4EBL, 0xF4D4B551L, 0x83D385C7L,
    0x136C9856L, 0x646BA8C0L, 0xFD62F97AL, 0x8A65C9ECL,
    0x14015C4FL, 0x63066CD9L, 0xFA0F3D63L, 0x8D080DF5L,
    0x3B6E20C8L, 0x4C69105EL, 0xD56041E4L, 0xA2677172L,
    0x3C03E4D1L, 0x4B04D447L, 0xD20D85FDL, 0xA50AB56BL,
    0x35B5A8FAL, 0x42B2986CL, 0xDBBBC9D6L, 0xACBCF940L,
    0x32D86CE3L, 0x45DF5C75L, 0xDCD60DCFL, 0xABD13D59L,
    0x26D930ACL, 0x51DE003AL, 0xC8D75180L, 0xBFD06116L,
    0x21B4F4B5L, 0x56B3C423L, 0xCFBA9599L, 0xB8BDA50FL,
    0x2802B89EL, 0x5F058808L, 0xC60CD9B2L, 0xB10BE924L,
    0x2F6F7C87L, 0x58684C11L, 0xC1611DABL, 0xB6662D3DL,
    0x76DC4190L, 0x01DB7106L, 0x98D220BCL, 0xEFD5102AL,
    0x71B18589L, 0x06B6B51FL, 0x9FBFE4A5L, 0xE8B8D433L,
    0x7807C9A2L, 0x0F00F934L, 0x9609A88EL, 0xE10E9818L,
    0x7F6A0DBBL, 0x086D3D2DL, 0x91646C97L, 0xE6635C01L,
    0x6B6B51F4L, 0x1C6C6162L, 0x856530D8L, 0xF262004EL,
    0x6C0695EDL, 0x1B01A57BL, 0x8208F4C1L, 0xF50FC457L,
    0x65B0D9C6L, 0x12B7E950L, 0x8BBEB8EAL, 0xFCB9887CL,
    0x62DD1DDFL, 0x15DA2D49L, 0x8CD37CF3L, 0xFBD44C65L,
    0x4DB26158L, 0x3AB551CEL, 0xA3BC0074L, 0xD4BB30E2L,
    0x4ADFA541L, 0x3DD895D7L, 0xA4D1C46DL, 0xD3D6F4FBL,
    0x4369E96AL, 0x346ED9FCL, 0xAD678846L, 0xDA60B8D0L,
    0x44042D73L, 0x33031DE5L, 0xAA0A4C5FL, 0xDD0D7CC9L,
    0x5005713CL, 0x270241AAL, 0xBE0B1010L, 0xC90C2086L,
    0x5768B525L, 0x206F85B3L, 0xB966D409L, 0xCE61E49FL,
    0x5EDEF90EL, 0x29D9C998L, 0xB0D09822L, 0xC7D7A8B4L,
    0x59B33D17L, 0x2EB40D81L, 0xB7BD5C3BL, 0xC0BA6CADL,
    0xEDB88320L, 0x9ABFB3B6L, 0x03B6E20CL, 0x74B1D29AL,
    0xEAD54739L, 0x9DD277AFL, 0x04DB2615L, 0x73DC1683L,
    0xE3630B12L, 0x94643B84L, 0x0D6D6A3EL, 0x7A6A5AA8L,
    0xE40ECF0BL, 0x9309FF9DL, 0x0A00AE27L, 0x7D079EB1L,
    0xF00F9344L, 0x8708A3D2L, 0x1E01F268L, 0x6906C2FEL,
    0xF762575DL, 0x806567CBL, 0x196C3671L, 0x6E6B06E7L,
    0xFED41B76L, 0x89D32BE0L, 0x10DA7A5AL, 0x67DD4ACCL,
    0xF9B9DF6FL, 0x8EBEEFF9L, 0x17B7BE43L, 0x60B08ED5L,
    0xD6D6A3E8L, 0xA1D1937EL, 0x38D8C2C4L, 0x4FDFF252L,
    0xD1BB67F1L, 0xA6BC5767L, 0x3FB506DDL, 0x48B2364BL,
    0xD80D2BDAL, 0xAF0A1B4CL, 0x36034AF6L, 0x41047A60L,
    0xDF60EFC3L, 0xA867DF55L, 0x316E8EEFL, 0x4669BE79L,
    0xCB61B38CL, 0xBC66831AL, 0x256FD2A0L, 0x5268E236L,
    0xCC0C7795L, 0xBB0B4703L, 0x220216B9L, 0x5505262FL,
    0xC5BA3BBEL, 0xB2BD0B28L, 0x2BB45A92L, 0x5CB36A04L,
    0xC2D7FFA7L, 0xB5D0CF31L, 0x2CD99E8BL, 0x5BDEAE1DL,
    0x9B64C2B0L, 0xEC63F226L, 0x756AA39CL, 0x026D930AL,
    0x9C0906A9L, 0xEB0E363FL, 0x72076785L, 0x05005713L,
    0x95BF4A82L, 0xE2B87A14L, 0x7BB12BAEL, 0x0CB61B38L,
    0x92D28E9BL, 0xE5D5BE0DL, 0x7CDCEFB7L, 0x0BDBDF21L,
    0x86D3D2D4L, 0xF1D4E242L, 0x68DDB3F8L, 0x1FDA836EL,
    0x81BE16CDL, 0xF6B9265BL, 0x6FB077E1L, 0x18B74777L,
    0x88085AE6L, 0xFF0F6A70L, 0x66063BCAL, 0x11010B5CL,
    0x8F659EFFL, 0xF862AE69L, 0x616BFFD3L, 0x166CCF45L,
    0xA00AE278L, 0xD70DD2EEL, 0x4E048354L, 0x3903B3C2L,
    0xA7672661L, 0xD06016F7L, 0x4969474DL, 0x3E6E77DBL,
    0xAED16A4AL, 0xD9D65ADCL, 0x40DF0B66L, 0x37D83BF0L,
    0xA9BCAE53L, 0xDEBB9EC5L, 0x47B2CF7FL, 0x30B5FFE9L,
    0xBDBDF21CL, 0xCABAC28AL, 0x53B39330L, 0x24B4A3A6L,
    0xBAD03605L, 0xCDD70693L, 0x54DE5729L, 0x23D967BFL,
    0xB3667A2EL, 0xC4614AB8L, 0x5D681B02L, 0x2A6F2B94L,
    0xB40BBE37L, 0xC30C8EA1L, 0x5A05DF1BL, 0x2D02EF8DL
    };

    /* This answers the question: how many freely-chosen bits do I include
    * when I ask for a crc collision with input length (index)? */
    char freebits[12]={0,0,0,0,1,4,10,16,22,28,34,40};

    /* This says where each forced bit goes */
    char bitsforced[32]={0,1,2,3,4,6,
    8,9,10,11,12,14,
    16,17,18,19,20,22,
    24,25,26,27,28,30,
    32,33,34,35,38,
    40,41,42};

    /* This says where each free bit goes */
    char bitsfree[40]={36,43,44,46,
    48,49,50,51,52,54,
    56,57,58,59,60,62,
    64,65,66,67,68,70,
    72,73,74,75,76,78,
    80,81,82,83,84,86,
    88,89,90,91,92,94};

    /* The portion of the inverted matrix corresponding to the CRC bits */
    unsigned long crcmatrix[32]={
    0x9BF7B4FE,0x10CEBBDB,0x3EC28E73,0xE516F5B2,
    0x3EB07172,0xAC6CB91B,0x2344667F,0x25ECE58C,
    0xD24109C4,0x501CB10A,0x97761211,0x0A2EF700,
    0x0C806D13,0x55AE3901,0x4C147270,0xDAC3C857,
    0x384B8A54,0xF7583CAD,0xA1DA1DC4,0x0028BBDC,
    0xB5BB7FE3,0x99610C1A,0x1FC446C4,0x8DE0FF05,
    0x01D3D128,0x64FAC9B2,0x3BC5E604,0xE564A85C,
    0xADEB84A5,0xCFCDBB2B,0x3E7D9F68,0xA102B971
    };

    /* The portion of the inverted matrix corresponding to the free bits */
    unsigned long freematrix[40]={
    0x0CBFC054,0xAEAB35B2,0x315B20B2,0x1F113696,
    0x6DA65FB4,0x08F3CFCD,0xC0E8FCF1,0xD928FA77,
    0x58C085F6,0x55F7A6A4,0x726948CB,0xBEE706A6,
    0xDE9BCF28,0x539FADD8,0xA5D7713D,0xA6B4900F,
    0x3CA9547B,0xC98AC9B5,0xAF52FA18,0x60098F5B,
    0x142D2C51,0x706AA085,0x46494250,0x54026BCE,
    0xEBE4D0A3,0x673646B9,0x945A22D6,0x7C5347FB,
    0xC61C9B99,0x97780ADB,0x7E9DB1AE,0x88C43E39,
    0x55CEBFB3,0x5C81ADC9,0x0F3DD57C,0x3D44BCF3,
    0x0383F8DD,0x73F38757,0xA8F2D5CF,0x2922BEA9
    };

    /* Matrix columns to take into account the canonicalization */
    unsigned long lengthmatrix[12]={
    0x84741063,0xC5273406,0xE5A222DF,0x9941CB2B,
    0xD9EBE522,0xCB93A8AF,0x962E3D2D,0x90029144,
    0x5B298B04,0x575F1D8A,0x78EE4BEC,0x47B6B86A
    };

    /* Macros to get and flip bits. FLIPBITR does the special reverse indexing
    * mandated by the way we numbered our bits. */
    #define GETBIT(p,b) ((((p)[(b)>>3])>>((b)&7))&1)
    #define FLIPBIT(p,b) ((p)[(b)>>3]^=(1<<((b)&7)))
    #define FLIPBITR(p,b) { if (length-1-((b)>>3)>=0) \
    (p)[length-1-((b)>>3)]^=(1<<((b)&7)); }

    /* Attempt to reverse CRC32, given the desired CRC value, the length, and
    * some choices for the "free" bits. */
    void reverse_crc(unsigned long crc,int length,char *in,char *out) {
    unsigned long bits;
    int i;

    /* correct for output length */
    bits=lengthmatrix[length-1];

    /* XOR in the CRC */
    for (i=0;i<32;i++)
    if (crc&(1<<i))
    bits^=crcmatrix[i];

    /* XOR in the free bits */
    for (i=0;i<freebits[length-1];i++)
    if (GETBIT(in,i))
    bits^=freematrix[i];

    /* set up output */
    for (i=0;i<length;i++)
    out[i]=0x20;

    /* output forced bits */
    for (i=0;i<32;i++)
    if (bits&(1<<i))
    FLIPBITR(out,bitsforced[i]);

    /* output free bits */
    for (i=0;i<freebits[length-1];i++)
    if (GETBIT(in,i))
    FLIPBITR(out,bitsfree[i]);
    }

    /* The CP4 HQ password hash function */
    void cp_hash(char *input,int length,
    unsigned long *hash1,unsigned long *hash2) {
    int i;

    *hash1=0;
    *hash2=0;
    for (i=0;i<length;i++) {
    *hash1=(*hash1>>8)^crctable[(*hash1&0xFF)^(input[i ]|0x20)];
    *hash2=(*hash2<<5)+(*hash2>>27)+(input[i]|0x20)-*h ash1;
    }
    }

    /* main program. To use, just type in the 16-digit hex string as seen in the
    * ini file. */
    int main(void) {
    unsigned long hash1,hash2,gothash1,gothash2;
    int length,bflip,i;
    char freeb[6],plaintext[12];

    scanf("%08x%08x",&hash1,&hash2);

    for (length=1;length<=12;length++) {
    printf("Trying length %d (2^%d possibilities)...\n",
    length,freebits[length-1]);
    for (i=0;i<6;i++) freeb[i]=0;

    do {
    reverse_crc(hash1,length,freeb,plaintext);
    cp_hash(plaintext,length,&gothash1,&gothash2);

    if ((hash1==gothash1) && (hash2==gothash2)) {
    printf("Found: \"");
    for (i=0;i<length;i++)
    putchar(plaintext[i]);
    printf("\"\n");
    return 0;
    }

    for (bflip=0;GETBIT(freeb,bflip);bflip++) FLIPBIT(freeb,bflip);
    FLIPBIT(freeb,bflip);
    } while (bflip<freebits[length-1]);
    }

    return 1;
    }

  24. COPYING on GPL To Be Tested by Mattel? · · Score: 1

    ************************************************** *************************** The following copyright applies to the Red Hat Linux compilation and any portions of Red Hat Linux/Intel it does not conflict with. Whenever this policy does conflict with the copyright of any individual portion of Red Hat Linux, it does not apply. ************************************************** *************************** GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.

  25. cndecode.c on GPL To Be Tested by Mattel? · · Score: 1

    /*
    * cndecode.c
    * By Matthew Skala
    */
    /* CP4Hack.
    * Copyright (C) 2000 Matthew Skala
    *
    * This program is free software; you can redistribute it and/or modify
    * it under the terms of the GNU General Public License as published by
    * the Free Software Foundation; either version 2 of the License, or
    * (at your option) any later version.
    *
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    * GNU General Public License for more details.
    *
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    /
    /*
    * Utility to decode the Cyber Patrol 4 cyber.not file
    * Usage:
    * cndecode cyber.not dictionary suppdict iplist
    * all arguments except the first are optional
    * "dictionary" is a list (newline separated) of words for the URL-hash attack
    * typically /usr/dict/words or equivalent, or use our ready-made one
    * suppdict is another such list; if it's specified, it will be written to
    * with the list of actual words found (saves time next run)
    * iplist is lines of ip address and domain name, tab separated; it will be
    * written to with any new addresses looked up (if we compile with reverse
    * DNS enabled).
    */

    /*********************************************** ****************************/
    /* System stuff */

    /*
    * Compiling notes:
    * This was written under Linux on a PC, but should be portable to any 32-bit
    * little-endian architecture. Since CP4 is PC-specific, that shouldn't be
    * too much of a limitation. This program does require structures bigger than
    * 64K, and so it might be touch-and-go on a 16-bit PC compiler. If you
    * enable reverse DNS with the defines below, you will have to have reasonably
    * Linux-ish (which in turn means reasonably BSD-ish) networking libraries.
    * Reverse queries can take a long time. If you find this annoying, you
    * can set a time limit, and then after that time expires the system will stop
    * attempting reverse lookups. This is a win because the reverse lookups it
    * already did are saved; next time, it'll pick up where it left off. Real
    * Programmers, of course, would run multiple queries at once, but that would
    * mean either splitting into several processes, multithreading, or "fake"
    * multithreading with custom-written resolver routines. This way is a lot
    * less stressful. (I have a perl script that spawns 40 processes to max out
    * my modem, but it's a monstrosity.) The amount of CPU power required for
    * CRC reversal scales exponentially with the number of characters of CRC
    * reversing you choose; that also determines how accurately it'll guess for
    * URL hashes that are not in the dictionary. It's probably smarter to get a
    * bigger dictionary.
    */

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <ctype.h>

    /* Compile-time configuration */

    /* Should we attempt reverse lookups? Requires Net libraries, active
    * connection, and a certain amount of time. */
    #define REVERSE_DNS
    /* After this many seconds, no more reverse DNS queries will be performed.
    * Default one hour, and ignored if you turned reverse DNS off. */
    #define TIME_LIMIT 3600
    /* How many characters of CRC reversal? Five is essentially free, more takes
    * exponentially longer time. */
    #define REVERSE_CRC_LENGTH 8
    /* How many entries in the dictionary hash table? */
    #define DICTHASH_SIZE 32767
    /* How many entries in the IP address hash table? */
    #define IPHASH_SIZE 32767
    /* What's the longest line length we expect to see? */
    #define LINELEN 256

    /* Headers we only need if we're doing reverse DNS */
    #ifdef REVERSE_DNS
    #include <netdb.h>
    #include <sys/socket.h>
    #include <time.h>
    #endif

    /*********************************************** *****************************/
    /* Reference tables */

    /* Forward CRC polynomial table */
    unsigned long crctable[256]={
    0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL,
    0x076DC419L, 0x706AF48FL, 0xE963A535L, 0x9E6495A3L,
    0x0EDB8832L, 0x79DCB8A4L, 0xE0D5E91EL, 0x97D2D988L,
    0x09B64C2BL, 0x7EB17CBDL, 0xE7B82D07L, 0x90BF1D91L,
    0x1DB71064L, 0x6AB020F2L, 0xF3B97148L, 0x84BE41DEL,
    0x1ADAD47DL, 0x6DDDE4EBL, 0xF4D4B551L, 0x83D385C7L,
    0x136C9856L, 0x646BA8C0L, 0xFD62F97AL, 0x8A65C9ECL,
    0x14015C4FL, 0x63066CD9L, 0xFA0F3D63L, 0x8D080DF5L,
    0x3B6E20C8L, 0x4C69105EL, 0xD56041E4L, 0xA2677172L,
    0x3C03E4D1L, 0x4B04D447L, 0xD20D85FDL, 0xA50AB56BL,
    0x35B5A8FAL, 0x42B2986CL, 0xDBBBC9D6L, 0xACBCF940L,
    0x32D86CE3L, 0x45DF5C75L, 0xDCD60DCFL, 0xABD13D59L,
    0x26D930ACL, 0x51DE003AL, 0xC8D75180L, 0xBFD06116L,
    0x21B4F4B5L, 0x56B3C423L, 0xCFBA9599L, 0xB8BDA50FL,
    0x2802B89EL, 0x5F058808L, 0xC60CD9B2L, 0xB10BE924L,
    0x2F6F7C87L, 0x58684C11L, 0xC1611DABL, 0xB6662D3DL,
    0x76DC4190L, 0x01DB7106L, 0x98D220BCL, 0xEFD5102AL,
    0x71B18589L, 0x06B6B51FL, 0x9FBFE4A5L, 0xE8B8D433L,
    0x7807C9A2L, 0x0F00F934L, 0x9609A88EL, 0xE10E9818L,
    0x7F6A0DBBL, 0x086D3D2DL, 0x91646C97L, 0xE6635C01L,
    0x6B6B51F4L, 0x1C6C6162L, 0x856530D8L, 0xF262004EL,
    0x6C0695EDL, 0x1B01A57BL, 0x8208F4C1L, 0xF50FC457L,
    0x65B0D9C6L, 0x12B7E950L, 0x8BBEB8EAL, 0xFCB9887CL,
    0x62DD1DDFL, 0x15DA2D49L, 0x8CD37CF3L, 0xFBD44C65L,
    0x4DB26158L, 0x3AB551CEL, 0xA3BC0074L, 0xD4BB30E2L,
    0x4ADFA541L, 0x3DD895D7L, 0xA4D1C46DL, 0xD3D6F4FBL,
    0x4369E96AL, 0x346ED9FCL, 0xAD678846L, 0xDA60B8D0L,
    0x44042D73L, 0x33031DE5L, 0xAA0A4C5FL, 0xDD0D7CC9L,
    0x5005713CL, 0x270241AAL, 0xBE0B1010L, 0xC90C2086L,
    0x5768B525L, 0x206F85B3L, 0xB966D409L, 0xCE61E49FL,
    0x5EDEF90EL, 0x29D9C998L, 0xB0D09822L, 0xC7D7A8B4L,
    0x59B33D17L, 0x2EB40D81L, 0xB7BD5C3BL, 0xC0BA6CADL,
    0xEDB88320L, 0x9ABFB3B6L, 0x03B6E20CL, 0x74B1D29AL,
    0xEAD54739L, 0x9DD277AFL, 0x04DB2615L, 0x73DC1683L,
    0xE3630B12L, 0x94643B84L, 0x0D6D6A3EL, 0x7A6A5AA8L,
    0xE40ECF0BL, 0x9309FF9DL, 0x0A00AE27L, 0x7D079EB1L,
    0xF00F9344L, 0x8708A3D2L, 0x1E01F268L, 0x6906C2FEL,
    0xF762575DL, 0x806567CBL, 0x196C3671L, 0x6E6B06E7L,
    0xFED41B76L, 0x89D32BE0L, 0x10DA7A5AL, 0x67DD4ACCL,
    0xF9B9DF6FL, 0x8EBEEFF9L, 0x17B7BE43L, 0x60B08ED5L,
    0xD6D6A3E8L, 0xA1D1937EL, 0x38D8C2C4L, 0x4FDFF252L,
    0xD1BB67F1L, 0xA6BC5767L, 0x3FB506DDL, 0x48B2364BL,
    0xD80D2BDAL, 0xAF0A1B4CL, 0x36034AF6L, 0x41047A60L,
    0xDF60EFC3L, 0xA867DF55L, 0x316E8EEFL, 0x4669BE79L,
    0xCB61B38CL, 0xBC66831AL, 0x256FD2A0L, 0x5268E236L,
    0xCC0C7795L, 0xBB0B4703L, 0x220216B9L, 0x5505262FL,
    0xC5BA3BBEL, 0xB2BD0B28L, 0x2BB45A92L, 0x5CB36A04L,
    0xC2D7FFA7L, 0xB5D0CF31L, 0x2CD99E8BL, 0x5BDEAE1DL,
    0x9B64C2B0L, 0xEC63F226L, 0x756AA39CL, 0x026D930AL,
    0x9C0906A9L, 0xEB0E363FL, 0x72076785L, 0x05005713L,
    0x95BF4A82L, 0xE2B87A14L, 0x7BB12BAEL, 0x0CB61B38L,
    0x92D28E9BL, 0xE5D5BE0DL, 0x7CDCEFB7L, 0x0BDBDF21L,
    0x86D3D2D4L, 0xF1D4E242L, 0x68DDB3F8L, 0x1FDA836EL,
    0x81BE16CDL, 0xF6B9265BL, 0x6FB077E1L, 0x18B74777L,
    0x88085AE6L, 0xFF0F6A70L, 0x66063BCAL, 0x11010B5CL,
    0x8F659EFFL, 0xF862AE69L, 0x616BFFD3L, 0x166CCF45L,
    0xA00AE278L, 0xD70DD2EEL, 0x4E048354L, 0x3903B3C2L,
    0xA7672661L, 0xD06016F7L, 0x4969474DL, 0x3E6E77DBL,
    0xAED16A4AL, 0xD9D65ADCL, 0x40DF0B66L, 0x37D83BF0L,
    0xA9BCAE53L, 0xDEBB9EC5L, 0x47B2CF7FL, 0x30B5FFE9L,
    0xBDBDF21CL, 0xCABAC28AL, 0x53B39330L, 0x24B4A3A6L,
    0xBAD03605L, 0xCDD70693L, 0x54DE5729L, 0x23D967BFL,
    0xB3667A2EL, 0xC4614AB8L, 0x5D681B02L, 0x2A6F2B94L,
    0xB40BBE37L, 0xC30C8EA1L, 0x5A05DF1BL, 0x2D02EF8DL
    };

    /* This answers the question: how many freely-chosen bits do I include
    * when I ask for a crc collision with input length (index)? */
    char freebits[12]={0,0,0,0,1,4,10,16,22,28,34,40};

    /* This says where each forced bit goes */
    char bitsforced[32]={0,1,2,3,4,6,
    8,9,10,11,12,14,
    16,17,18,19,20,22,
    24,25,26,27,28,30,
    32,33,34,35,38,
    40,41,42};

    /* This says where each free bit goes */
    char bitsfree[40]={36,43,44,46,
    48,49,50,51,52,54,
    56,57,58,59,60,62,
    64,65,66,67,68,70,
    72,73,74,75,76,78,
    80,81,82,83,84,86,
    88,89,90,91,92,94};

    /* The portion of the inverted matrix corresponding to the CRC bits */
    unsigned long crcmatrix[32]={
    0x9BF7B4FE,0x10CEBBDB,0x3EC28E73,0xE516F5B2,
    0x3EB07172,0xAC6CB91B,0x2344667F,0x25ECE58C,
    0xD24109C4,0x501CB10A,0x97761211,0x0A2EF700,
    0x0C806D13,0x55AE3901,0x4C147270,0xDAC3C857,
    0x384B8A54,0xF7583CAD,0xA1DA1DC4,0x0028BBDC,
    0xB5BB7FE3,0x99610C1A,0x1FC446C4,0x8DE0FF05,
    0x01D3D128,0x64FAC9B2,0x3BC5E604,0xE564A85C,
    0xADEB84A5,0xCFCDBB2B,0x3E7D9F68,0xA102B971
    };

    /* The portion of the inverted matrix corresponding to the free bits */
    unsigned long freematrix[40]={
    0x0CBFC054,0xAEAB35B2,0x315B20B2,0x1F113696,
    0x6DA65FB4,0x08F3CFCD,0xC0E8FCF1,0xD928FA77,
    0x58C085F6,0x55F7A6A4,0x726948CB,0xBEE706A6,
    0xDE9BCF28,0x539FADD8,0xA5D7713D,0xA6B4900F,
    0x3CA9547B,0xC98AC9B5,0xAF52FA18,0x60098F5B,
    0x142D2C51,0x706AA085,0x46494250,0x54026BCE,
    0xEBE4D0A3,0x673646B9,0x945A22D6,0x7C5347FB,
    0xC61C9B99,0x97780ADB,0x7E9DB1AE,0x88C43E39,
    0x55CEBFB3,0x5C81ADC9,0x0F3DD57C,0x3D44BCF3,
    0x0383F8DD,0x73F38757,0xA8F2D5CF,0x2922BEA9
    };

    /* Matrix columns to take into account the canonicalization */
    unsigned long lengthmatrix[12]={
    0x84741063,0xC5273406,0xE5A222DF,0x9941CB2B,
    0xD9EBE522,0xCB93A8AF,0x962E3D2D,0x90029144,
    0x5B298B04,0x575F1D8A,0x78EE4BEC,0x47B6B86A
    };

    /* The Cyber Patrol blocking categories */
    char *category[16]={
    "Violence / Profanity",
    "Partial Nudity",
    "Full Nudity",
    "Sexual Acts / Text",
    "Gross Depictions / Text",
    "Intolerance",
    "Satanic or Cult",
    "Drugs / Drug Culture",
    "Militant / Extremist",
    "Sex Education",
    "Questionable / Illegal & Gambling",
    "Alcohol & Tobacco",
    "Reserved 4",
    "Reserved 3",
    "Reserved 2",
    "Reserved 1"
    };

    /* This indicates the "score" for each possible character value. First
    * 32 entries are for characters 32 to 63, second 32 entries are for
    * characters 96 to 127. The way this works is that unexpected characters
    * get higher scores and so are less likely to be chosen... this gives us
    * that little bit of extra guidance to help find good reverse CRCs.
    * The baseline is that an ordinary alphabet character is 10 points.
    * Illegal characters count 50, ensuring that they're unlikely to ever be
    * chosen. Scores assigned manually, and only semi-systematically.
    */
    unsigned cscore[64]={
    /* SP ! " # $ % & ' */
    50,20,30,20,17,50,50,30,
    /* ( ) * + , - . / */
    20,20,20,17,20,12,12,50,
    /* 0 1 2 3 4 5 6 7 */
    14,14,15,15,15,15,15,15,
    /* 8 9 : ; < = > ? */
    15,14,20,20,50,20,50,30,
    /* ` a b c d e f g */
    30,7,10,10,9,7,10,10,
    /* h i j k l m n o */
    10,7,12,10,9,10,9,7,
    /* p q r s t u v w */
    10,15,9,9,9,7,12,10,
    /* x y z { | } ~ DEL */
    9,10,12,20,30,20,30,50
    };

    /*********************************************** ****************************/
    /* Data structures */

    /* Structures for the hash tables */
    typedef struct _DICTHASH_ENT {
    struct _DICTHASH_ENT *next;
    unsigned long hash;
    char *word;
    } DICTHASH_ENT;
    typedef struct _IPHASH_ENT {
    struct _IPHASH_ENT *next;
    unsigned long ip;
    char *name;
    } IPHASH_ENT;

    /* Linked list of blocking masks, for key printing */
    typedef struct _BLOCKING_MASK {
    struct _BLOCKING_MASK *next;
    unsigned short mask;
    } BLOCKING_MASK;

    /* Global vars */
    char *cyber_not;
    long cyber_not_size;
    DICTHASH_ENT **dicthash;
    IPHASH_ENT **iphash;
    BLOCKING_MASK *masks=NULL;
    #ifdef REVERSE_DNS
    time_t start_time;
    #endif

    /*********************************************** **************************/
    /* Utility functions */

    /* Encryption used to conceal the config files, and the deputy password */
    void cpcrypt4(char *data,long length) {
    unsigned char key;
    long i,j;

    key=(unsigned char)(length&0xFF);
    for (i=0;i<2;i++) {
    for (j=0;j<length;j++) {
    key=(key>>1)+(key<<7);
    key^=(unsigned char)data[j];
    data[j]=(char)key;
    }
    }
    }

    /* The slightly nonstandard CRC32 used for URL hashing */
    unsigned long forward_crc(char *input,int length) {
    int i;
    unsigned long rval=0;

    for (i=0;i<length;i++)
    rval=(rval>>8)^crctable[(rval&0xFF)^(input[i]|0x20 )];
    return rval;
    }

    #define GETBIT(p,b) ((((p)[(b)>>3])>>((b)&7))&1)
    #define FLIPBIT(p,b) ((p)[(b)>>3]^=(1<<((b)&7)))
    #define FLIPBITR(p,b) { if (length-1-((b)>>3)>=0) \
    (p)[length-1-((b)>>3)]^=(1<<((b)&7)); }

    /* attempt to reverse the CRC32 function */
    void reverse_crc(unsigned long crc,int length,char *in,char *out) {
    unsigned long bits;
    int i;

    /* correct for output length */
    bits=lengthmatrix[length-1];

    /* XOR in the CRC */
    for (i=0;i<32;i++)
    if (crc&(1<<i))
    bits^=crcmatrix[i];

    /* XOR in the free bits */
    for (i=0;i<freebits[length-1];i++)
    if (GETBIT(in,i))
    bits^=freematrix[i];

    /* set up output */
    for (i=0;i<length;i++)
    out[i]=0x20;

    /* output forced bits */
    for (i=0;i<32;i++)
    if (bits&(1<<i))
    FLIPBITR(out,bitsforced[i]);

    /* output free bits */
    for (i=0;i<freebits[length-1];i++)
    if (GETBIT(in,i))
    FLIPBITR(out,bitsfree[i]);
    }

    /* load a word into dictionary, if its hash was in cyber.not */
    int guess_word(char *word,int length) {
    unsigned long hash;
    DICTHASH_ENT *tmp;

    hash=forward_crc(word,length);
    for (tmp=dicthash[hash%DICTHASH_SIZE];
    tmp && (tmp->hash!=hash);
    tmp=tmp->next);
    if (tmp && !tmp->word) {
    tmp->word=(char *)malloc(length+1);
    if (!tmp->word) {
    puts("ERROR - out of memory (dicthash entry)");
    exit(1);
    }
    memcpy(tmp->word,word,length);
    tmp->word[length]='\0';
    return 1;
    } else
    return 0;
    }

    /* clear out the list of blocking masks */
    void clear_blockmask_key(void) {
    BLOCKING_MASK *tmp;

    while (masks) {
    tmp=masks;
    masks=tmp->next;
    free(tmp);
    }
    }

    /* add a mask to the sorted list, if it's not already there. Yes, this
    * is O(n**2), but the list never gets over a few tens of entries, and so
    * doing it with a more sophisticated structure wouldn't be worthwhile. */
    void add_blockmask(unsigned short newmask) {
    BLOCKING_MASK *tmp=NULL,*tmp2;

    /* skip past all the entries less than new */
    while (masks && (masks->mask<newmask)) {
    tmp2=masks->next;
    masks->next=tmp;
    tmp=masks;
    masks=tmp2;
    }
    /* add new, if appropriate */
    if ((!masks) || (masks->mask!=newmask)) {
    tmp2=(BLOCKING_MASK *)malloc(sizeof(BLOCKING_MASK));
    if (!tmp2) {
    puts("ERROR - out of memory (blocking mask entry)");
    exit(1);
    }
    tmp2->next=masks;
    masks=tmp2;
    tmp2->mask=newmask;
    }
    /* replace the skipped entries */
    while (tmp) {
    tmp2=tmp->next;
    tmp->next=masks;
    masks=tmp;
    tmp=tmp2;
    }
    }

    /* print a key of the masks currently on the list */
    void print_blockmask_key(void) {
    BLOCKING_MASK *tmp;
    unsigned short tm;
    int print_head,bit;

    for (tmp=masks;tmp;tmp=tmp->next) {
    printf("%04X: ",tmp->mask);
    print_head=6;
    tm=tmp->mask;
    bit=0;
    while (tm>0) {
    if (tm&1) {
    if (print_head+strlen(category[bit])>71) {
    printf("\n ");
    print_head=7;
    } else {
    putchar(' ');
    print_head++;
    }
    printf("%s",category[bit]);
    print_head+=strlen(category[bit]);
    if (tm&~1) {
    putchar(',');
    print_head++;
    }
    }
    bit++;
    tm>>=1;
    }
    putchar('\n');
    }
    }

    /* print a pretty IP address, with reverse lookup if we're allowed */
    void print_ip(unsigned long ip) {
    IPHASH_ENT *tmp;
    char *name;

    /* check if it's already in the table */
    for (tmp=iphash[ip%IPHASH_SIZE];
    tmp && (tmp->ip!=ip);
    tmp=tmp->next);
    if (tmp) /* if so, just print that */
    printf("%s",tmp->name);
    #ifdef REVERSE_DNS
    /* if we're allowed a reverse lookup, take it */
    else if (time(NULL)<start_time+TIME_LIMIT) {
    struct hostent *he;

    he=gethostbyaddr((char *)&ip,4,AF_INET);
    tmp=(IPHASH_ENT *)malloc(sizeof(IPHASH_ENT));
    name=(char *)malloc(he?strlen(he->h_name)+1:16);
    if (!tmp || !name) {
    puts("ERROR - out of memory (IP hash ent)");
    exit(1);
    }
    tmp->next=iphash[ip%IPHASH_SIZE];
    iphash[ip%IPHASH_SIZE]=tmp;
    tmp->ip=ip;
    tmp->name=name;

    if (he)
    strcpy(name,he->h_name);
    else
    sprintf(name,"%ld.%ld.%ld.%ld",
    ip&0xFF,(ip>>8)&0xFF,(ip>>16)&0xFF,ip>>24);
    printf("%s",name);
    }
    #endif
    else /* finally, we just print it out numerically */
    printf("%ld.%ld.%ld.%ld",ip&0xFF,(ip>>8)&0xFF,(ip> >16)&0xFF,ip>>24);
    }

    /* reverse a hash and print the results */
    void print_revhash(unsigned long hash) {
    DICTHASH_ENT *tmp;
    char *neww,freeb[6],plaintext[12];
    unsigned score,bestscore=(unsigned)-1;
    int length,i,bflip;

    /* check if it's already in the table */
    for (tmp=dicthash[hash%DICTHASH_SIZE];
    tmp && (tmp->hash!=hash);
    tmp=tmp->next);
    if (!tmp) {
    puts("ERROR - reversing unseen hash (should never happen)");
    exit(1);
    }

    if (!tmp->word) { /* if no word, attempt reversal */
    neww=(char *)malloc(12);
    if (neww==NULL) {
    puts("ERROR - out of memory (new word)\n");
    exit(1);
    }
    tmp->word=neww;
    strcpy(neww,"?UNKNOWN?");

    for (length=1;length<=REVERSE_CRC_LENGTH;length++) {
    for (i=0;i<6;i++) freeb[i]=0;

    do {
    /* reverse the hash, and see if that worked */
    reverse_crc(hash,length,freeb,plaintext);
    if (hash==forward_crc(plaintext,length)) {
    /* compute the score for this guess */
    score=0;
    for (i=0;i<length;i++)
    score+=cscore[plaintext[i]-(plaintext[i]>64?64:32) ];
    if (plaintext[0]=='~') /* ~ at start is ignored */
    score-=cscore['~'-64];

    /* if this is an improvement, use it */
    if (score<bestscore) {
    bestscore=score;
    memcpy(neww,plaintext,length);
    neww[length]='\0';
    }
    }

    for (bflip=0;GETBIT(freeb,bflip);bflip++) FLIPBIT(freeb,bflip);
    FLIPBIT(freeb,bflip);
    } while (bflip<freebits[length-1]);
    }
    }

    /* now print whatever word we found */
    printf("%s",tmp->word);
    }

    /*********************************************** ****************************/
    /* Main functional blocks */

    /* Load and decrypt cyber.not */
    void load_cyber_not(char *filename) {
    FILE *datafile;

    datafile=fopen(filename,"rb");
    if (!datafile) {
    puts("ERROR - can't open cyber.not");
    exit(1);
    }
    if ((fseek(datafile,0,SEEK_END)<0)
    || ((cyber_not_size=ftell(datafile))<0)
    || (fseek(datafile,0,SEEK_SET)<0)) {
    puts("ERROR - can't reposition in cyber.not");
    exit(1);
    }
    cyber_not=(char *)malloc(cyber_not_size);
    if ((!cyber_not)
    || (fread(cyber_not,1,cyber_not_size,datafile)<cyber_ not_size)) {
    puts("ERROR - can't read cyber.not");
    }
    fclose(datafile);
    cpcrypt4(cyber_not,cyber_not_size);
    }

    /* Initialize the dictionary hash table with the hashes in cyber.not */
    void find_hashes_to_reverse(void) {
    long table1_start,table1_end;
    long i,hcnt=0;
    unsigned long hash;
    short mask;
    char length;
    DICTHASH_ENT *tmp;

    /* find Table 1 in cyber.not */
    memcpy(&table1_start,cyber_not+0x0010,4); /* Table 1 offset */
    memcpy(&table1_end,cyber_not+0x0014,4); /* Table 1 length */
    table1_end+=table1_start;
    table1_start+=2; /* "SD" marker */
    table1_end-=2; /* "ED" marker */

    /* initialize our hash table to empty */
    dicthash=(DICTHASH_ENT **)malloc(DICTHASH_SIZE*sizeof(DICTHASH_ENT *));
    if (!dicthash) {
    puts("ERROR - can't allocate dictionary hash");
    exit(1);
    }
    for (i=0;i<DICTHASH_SIZE;i++) dicthash[i]=NULL;

    /* step through the table, looking for hashes */
    for (i=table1_start;i<table1_end;) {
    i+=4; /* skip IP address */
    memcpy(&mask,cyber_not+i,2); /* category mask */
    i+=2; /* skip over mask */

    if (mask==0) { /* we have hash records */
    for (;(length=cyber_not[i]);) { /* yes, this should be assignment */
    i+=3; /* skip length and mask */
    for (length-=3;length>0;length-=4) {
    memcpy(&hash,cyber_not+i,4);
    i+=4;
    for (tmp=dicthash[hash%DICTHASH_SIZE];
    tmp && (tmp->hash!=hash);
    tmp=tmp->next); /* does this hash exist already? */
    if (!tmp) { /* if not, add it */
    tmp=(DICTHASH_ENT *)malloc(sizeof(DICTHASH_ENT));
    if (!tmp) {
    puts("ERROR - out of memory");
    exit(1);
    }
    tmp->next=dicthash[hash%DICTHASH_SIZE];
    dicthash[hash%DICTHASH_SIZE]=tmp;
    tmp->hash=hash;
    tmp->word=NULL;
    hcnt++;
    }
    }
    }
    i++; /* skip terminating length */
    }
    }
    printf("Scanning cyber.not, found %ld unique hash values\n",hcnt);
    }

    /* load a dictionary file */
    void load_dictionary(char *filename) {
    FILE *datafile;
    char textline[LINELEN+8],x;
    int length,newwords=0,i;

    datafile=fopen(filename,"rt");
    if (!datafile) {
    /* not an error! the dictionary need not exist */
    printf("Dictionary file %s missing.\n",filename);
    return;
    }

    /* First pass: word, ~word, word.htm, word.html */
    textline[0]='~';
    while (!feof(datafile) && fgets(textline+1,LINELEN,datafile)) {
    if (strchr(textline+1,'#') || strchr(textline+1,' '))
    continue;
    length=strlen(textline+1)-1;
    textline[length+1]='\0';
    for (i=1;i<=length;i++) textline[i]=tolower(textline[i]);
    strcat(textline+1,".html");
    newwords+=guess_word(textline+1,length); /* word */
    newwords+=guess_word(textline,length+1); /* ~word */
    newwords+=guess_word(textline+1,length+4); /* word.htm */
    newwords+=guess_word(textline+1,length+5); /* word.html */
    }

    /* Second pass: Xword, ~Xword, wordX, ~wordX, xwordx */
    fseek(datafile,0,SEEK_SET);
    while (!feof(datafile) && fgets(textline+2,LINELEN,datafile)) {
    if (strchr(textline+2,'#') || strchr(textline+2,' '))
    continue;
    length=strlen(textline+2)-1;
    for (i=2;i<=length+1;i++) textline[i]=tolower(textline[i]);
    for (x='a';x<='z';x++) {
    textline[1]=x;
    textline[length+2]=x;
    newwords+=guess_word(textline+1,length+1); /* Xword */
    newwords+=guess_word(textline,length+2); /* ~Xword */
    newwords+=guess_word(textline+2,length+1); /* wordX */
    if (x=='x')
    newwords+=guess_word(textline+1,length+2); /* xwordx */
    textline[1]='~';
    newwords+=guess_word(textline+1,length+2); /* ~wordX */
    }
    for (x='0';x<='9';x++) {
    textline[1]=x;
    textline[length+2]=x;
    newwords+=guess_word(textline+1,length+1); /* Xword */
    newwords+=guess_word(textline,length+2); /* ~Xword */
    newwords+=guess_word(textline+2,length+1); /* wordX */
    textline[1]='~';
    newwords+=guess_word(textline+1,length+2); /* ~wordX */
    }
    }

    /* Third pass: .htm and .html variants of second pass */
    fseek(datafile,0,SEEK_SET);
    while (!feof(datafile) && fgets(textline+2,LINELEN,datafile)) {
    if (strchr(textline+2,'#') || strchr(textline+2,' '))
    continue;
    length=strlen(textline+2)-1;
    for (i=2;i<=length+1;i++) textline[i]=tolower(textline[i]);
    for (x='a';x<='z';x++) {
    textline[1]=x;
    textline[length+2]=x;
    textline[length+3]='\0';
    strcat(textline+2,".html");
    newwords+=guess_word(textline+2,length+5); /* wordX.htm */
    newwords+=guess_word(textline+2,length+6); /* wordX.html */
    textline[length+2]='\0';
    strcat(textline+2,".html");
    newwords+=guess_word(textline+1,length+5); /* Xword.htm */
    newwords+=guess_word(textline+1,length+6); /* Xword.html */
    }
    for (x='0';x<='9';x++) {
    textline[1]=x;
    textline[length+2]=x;
    textline[length+3]='\0';
    strcat(textline+2,".html");
    newwords+=guess_word(textline+2,length+5); /* wordX.htm */
    newwords+=guess_word(textline+2,length+6); /* wordX.html */
    textline[length+2]='\0';
    strcat(textline+2,".html");
    newwords+=guess_word(textline+1,length+5); /* Xword.htm */
    newwords+=guess_word(textline+1,length+6); /* Xword.html */
    }
    }

    fclose(datafile);
    printf("Found %d new words in %s\n",newwords,filename);
    }

    /* save a dictionary file */
    void save_dictionary(char *filename) {
    FILE *datafile;
    long i;
    DICTHASH_ENT *tmp;

    /* open */
    datafile=fopen(filename,"wt");
    if (!datafile) {
    /* this error is not fatal */
    printf("ERROR - cannot write dictionary %s (non-fatal)\n",filename);
    return;
    }

    /* write */
    for (i=0;i<DICTHASH_SIZE;i++)
    for (tmp=dicthash[i];tmp;tmp=tmp->next)
    if (tmp->word)
    fprintf(datafile,"%s\n",tmp->word);

    /* close */
    fclose(datafile);
    }

    void dump_newsgroup_blocks(void) {
    long table3_start,table3_end;
    long i;
    short mask;
    char length;

    puts("*** NEWSGROUP BLOCKS ***\n");

    /* find Table 3 in cyber.not */
    memcpy(&table3_start,cyber_not+0x0024,4); /* Table 3 offset */
    memcpy(&table3_end,cyber_not+0x0028,4); /* Table 3 length */
    table3_end+=table3_start;
    table3_start+=2; /* "SD" marker */
    table3_end-=2; /* "ED" marker */

    /* get ready to print a new blocking mask key */
    clear_blockmask_key();

    /* step through the table, looking for newsgroups */
    for (i=table3_start;i<table3_end;) {
    length=cyber_not[i];
    i+=1; /* skip length byte */
    memcpy(&mask,cyber_not+i,2); /* category mask */
    i+=2; /* skip over mask */
    add_blockmask(mask);

    printf("%04X ",mask);
    for (length-=3;length>0;length--) {
    putchar(cyber_not[i]);
    i++;
    }
    putchar('\n');
    }

    /* print the key */
    putchar('\n');
    print_blockmask_key();
    putchar('\n');
    }

    /* Load a file of reverse-lookup hints. Just initializes the table if
    * the filename parameter is null. */
    void load_iphints(char *filename) {
    FILE *datafile;
    char name[LINELEN],*ntmp;
    int i,ipa,ipb,ipc,ipd,count=0;
    unsigned long ip;
    IPHASH_ENT *tmp;

    /* initialize our hash table to empty */
    iphash=(IPHASH_ENT **)malloc(IPHASH_SIZE*sizeof(IPHASH_ENT *));
    if (!iphash) {
    puts("ERROR - can't allocate IP hash");
    exit(1);
    }
    for (i=0;i<IPHASH_SIZE;i++) iphash[i]=NULL;
    if (filename==NULL) return;

    datafile=fopen(filename,"rt");
    if (!datafile) {
    /* not an error! the hints file need not exist */
    printf("IP address file %s missing.\n",filename);
    return;
    }

    while (!feof(datafile)) {
    fscanf(datafile,"%d.%d.%d.%d\t%s\n",&ipa,&ipb,&ipc ,&ipd,name);
    ip=((long)ipa)+((long)ipb<<8)+((long)ipc<<16)+((lo ng)ipd<<24);
    tmp=(IPHASH_ENT *)malloc(sizeof(IPHASH_ENT));
    ntmp=(char *)malloc(strlen(name)+1);
    if ((!tmp) || (!ntmp)) {
    puts("ERROR - out of memory (IP hash entry)");
    exit(1);
    }
    tmp->next=iphash[ip%IPHASH_SIZE];
    iphash[ip%IPHASH_SIZE]=tmp;
    tmp->ip=ip;
    tmp->name=ntmp;
    strcpy(ntmp,name);
    count++;
    }

    fclose(datafile);
    printf("Found %d IP addresses in %s\n",count,filename);
    }

    /* save reverse-lookup hints file */
    void save_iphints(char *filename) {
    FILE *datafile;
    long i;
    IPHASH_ENT *tmp;

    /* open */
    datafile=fopen(filename,"wt");
    if (!datafile) {
    /* this error is not fatal */
    printf("ERROR - cannot write IP hints %s (non-fatal)\n",filename);
    return;
    }

    /* write */
    for (i=0;i<IPHASH_SIZE;i++)
    for (tmp=iphash[i];tmp;tmp=tmp->next)
    fprintf(datafile,"%ld.%ld.%ld.%ld\t%s\n",
    tmp->ip&0xFF,(tmp->ip>>8)&0xFF,(tmp->ip>>16)&0xFF, tmp->ip>>24,
    tmp->name);

    /* close */
    fclose(datafile);
    }

    /* OK, this is the good part */
    void dump_web_blocks(void) {
    long table1_start,table1_end,table2_start,table2_end;
    long i,j;
    unsigned long ip,hash;
    short mask;
    char length;

    /* find Table 1 in cyber.not */
    memcpy(&table1_start,cyber_not+0x0010,4); /* Table 1 offset */
    memcpy(&table1_end,cyber_not+0x0014,4); /* Table 1 length */
    table1_end+=table1_start;
    table1_start+=2; /* "SD" marker */
    table1_end-=2; /* "ED" marker */

    /* find Table 2 in cyber.not */
    memcpy(&table2_start,cyber_not+0x001A,4); /* Table 2 offset */
    memcpy(&table2_end,cyber_not+0x001E,4); /* Table 2 length */
    table2_end+=table2_start;
    table2_start+=2; /* "SD" marker */
    table2_end-=2; /* "ED" marker */

    /* step through the table 1, printing out the blocks*/
    for (i=table1_start;i<table1_end;) {
    puts("************************************"
    "************************************");
    clear_blockmask_key();

    memcpy(&ip,cyber_not+i,4);
    i+=4; /* skip IP address */
    memcpy(&mask,cyber_not+i,2); /* category mask */
    i+=2; /* skip over mask */

    /* print the IP address and synonyms */
    putchar(' ');
    putchar(' ');
    print_ip(ip);
    putchar('\n');
    for (j=table2_start;j<table2_end;) {
    memcpy(&hash,cyber_not+j,4);
    j+=4;
    length=cyber_not[j++];
    if (hash==ip) {
    for (;length>0;length--) {
    memcpy(&hash,cyber_not+j,4);
    j+=4;
    putchar('=');
    putchar(' ');
    print_ip(hash);
    putchar('\n');
    }
    } else
    j+=(length*4);
    }

    /* print the individual blocks */
    if (mask==0) {
    putchar('\n');
    for (;(length=cyber_not[i]);) { /* yes, this should be assignment */
    i++; /* skip length */
    memcpy(&mask,cyber_not+i,2); /* category mask */
    i+=2; /* skip over mask */
    add_blockmask(mask);
    printf("%04X http://%ld.%ld.%ld.%ld/",mask,
    ip&0xFF,(ip>>8)&0xFF,(ip>>16)&0xFF,ip>>24);
    for (length-=3;length>0;length-=4) {
    memcpy(&hash,cyber_not+i,4);
    i+=4;
    print_revhash(hash);
    putchar('/');
    }
    putchar('\n');
    }
    i++; /* skip terminating length */
    putchar('\n');
    } else { /* block on entire site */
    add_blockmask(mask);
    puts("ENTIRE SITE:");
    }

    print_blockmask_key();
    }
    }

    /*********************************************** ***************************/
    /* Main program */

    int main(int argc,char **argv) {
    puts("cndecode - Cyber Patrol 4 cyber.not decoder");
    puts("By Matthew Skala\n");

    #ifdef REVERSE_DNS
    start_time=time(NULL);
    #endif

    if (argc<2) {
    puts("ERROR - no cyber.not file specified");
    return 1;
    }
    load_cyber_not(argv[1]);
    find_hashes_to_reverse();

    if (argc>=4) /* supplemental */
    load_dictionary(argv[3]);
    if (argc>=3) /* main */
    load_dictionary(argv[2]);
    if (argc>=5)
    load_iphints(argv[4]);
    else
    load_iphints(NULL);

    dump_newsgroup_blocks();
    dump_web_blocks();

    if (argc>=4)
    save_dictionary(argv[3]);
    if (argc>=5)
    save_iphints(argv[4]);

    return 0;
    }