In order to make these easier to grade, you are required to accept the following input parameters on the command line, in the order shown: java Alice port secret java Bob port secret prime generator java Eve port_a port_b secret (For simplicity, Eve can just use the same secret for both Bob and Alice) You should have a fallback plan (default ports, secrets, primes, and generators) in case your program is invoked without specifying these inputs. Any inputs provided will be in the correct order, but I may provide less than the full complement. E.g., it would be fair game to invoke Alice via: java Alice port or: java Alice but not: java Alice secret Any attempt to invoke your program incorrectly should cause usage info to be echo'd to standard out. For problem 3, the programs A1, B1, and C1 will be invoked in the same manner. For simplicity, you may assume that Bob (or B1) always initiates the key generation BUT both A1 and B1 should be able to send and receive encrypted messages (plaintext to be entered from the command line). Both the encrypted message, and the decrypted plaintext are to be sent to standard out. You must provide, and echo to the screen, a graceful way to exit these programs. (Hint, it better not be by typing something that I may want to encrypt on the command line!). You should clean everything up before you exit (most importantly, I should be able to use the same port numbers to grade the next student's assignment). Do not hardcode a machine name. I will run all of the programs on the same machine (within the detective cluster), so you may use "localhost" as the address. You should explain in your documentation if and why you require this. When checking the proper performance, I will invoke Alice (or A1) before Bob (or B1). If used, Eve (or E1) will be invoked first (before Alice/A1). This is consistent with having Bob or B1 initiate the exchange. If you have any questions, please email me so I can clarify it for everyone. Bob Fourney