### py-kms_2019-05-15
- Merging for Python2 / Python3 compatibility all-in-one.
- Added new options: 
    - timeout, [logsize](https://github.com/SystemRage/py-kms/pull/21).
    - more control on logging and info visualization (custom loglevel and stdout logfile redirection) to match [this](https://github.com/SystemRage/py-kms/issues/22) request.
- Setup for multithreading support.
- Graphical improvements:
    - added a (_"really silly"_) tkinter GUI as an alternative to command line.
- [Dockerized](https://github.com/SystemRage/py-kms/pull/20) with sqlite-web. 
- Fixed activation threshold.
- Renamed files, cosmetics and many other little big adjustments.

### py-kms_2018-11-15
 - Implemented some good modifications inspired by [this](https://github.com/ThunderEX/py-kms) other fork.
 	- Clean up code ( deleted no longer useful files randomHWID.py, randomEPID.py, timezones.py;
			erased useless functions and import modules )
	- Reading parameters directly from a slightly modified KmsDataBase.xml ( created with LicenseManager 5.0 by Hotbird64 HGM ) with kmsDB2Dict.py
- Added support for Windows Server 2019 and Office 2019.
- Improved random EPID generation.
- Corrected [this](https://github.com/SystemRage/py-kms/issues/8) in kmsBase.py

### py-kms_2018-03-01
 - *py-kms NOW is for Python3 too ( py3-kms ), the previous one ( written with Python2 ) is renamed py2-kms*
 - *Repaired logging messages*
 - *Added pretty processing messages*
 
### py-kms_2017-06-01
 - *Added option verbose logging in a file*
 - *Updated "kmsBase.py" with new SKUIDs*
 - *Added a brief guide "py-kms-Guide.pdf" ( replaced "client-activation.txt" )*
 - *Added a well formatted and more complete list of volume keys "py-kms-ClientKeys.pdf" ( replaced "client-keys.txt" )*

### py-kms_2016-12-30
 - *Updated kmsBase.py (Matches LicenseManager 4.6.0 by Hotbird64 HGM)*

### py-kms_2016-08-13
 - *Fixed major bug on Response function*
 - *Fixed Random PID Generator (thanks: mkuba50)*

### py-kms_2016-08-12
 - *Added missing UUID, credits: Hotbird64*
 - *Added Windows Server 2016 in random PID generator*
		
### py-kms_2016-08-11
 - *Added Windows Server 2016 UUID*
 - *Fixed GroupID and PIDRange*
 - *Added Office 2016 CountKMSID*
	
### py-kms_2015-07-29
 - *Added Windows 10 UUID*
		
### py-kms_2014-10-13 build 3:
 - *Added Client Activation Examples: "client-activation.txt"*
 - *Added Volume Keys: "client-keys.txt"*

### py-kms_2014-10-13 build 2:
 - *Added missing skuIds in file "kmsbase.py". Thanks (user_hidden)*
	
### py-kms_2014-10-13 build 1:
 - *The server now outputs the hwid in use.*
 - *The server hwid can be random by using parameter: "-w random". Example: "python server.py -w random"*
 - *Included file "randomHWID.py" to generate random hwid on demand.*
 - *Included file "randomPID.py" to generate random epid and hwid on demand.*

### py-kms_2014-03-21T232943Z:
- *The server HWID can now be specified on the command line.*
- *The client will print the HWID when using the v6 protocol.*
	
### py-kms_2014-01-03T032458Z:
 - *Made the sqlite3 module optional.*
 - *Changed the "log" flag to an "sqlite" flag and made a real log flag in preparation for when real request logging is implemented.*

### py-kms_2014-01-03T025524Z:
 - *Added RPC response decoding to the KMS client emulator.*
		
### py-kms_2013-12-30T064443Z:
 - *The v4 hash now uses the proper pre-expanded key.*

### py-kms_2013-12-28T073506Z:
 - *Modified the v4 code to use the custom aes module in order to make it more streamlined and efficient.*

### py-kms_2013-12-20T051257Z:
 - *Removed the need for the pre-computed table (tablecomplex.py) for v4 CMAC calculation, cutting the zip file size in half.*

### py-kms_2013-12-16T214638Z:
 - *Switched to getting the to-be-logged request time from the KMS server instead of the client.*

### py-kms_2013-12-16T030001Z:
 - *You can now specify the CMID and the Machine Name to use with the client emulator.*

### py-kms_2013-12-16T021215Z:
 - *Added a request-logging feature to the server. It stores requests in an SQLite database and uses the ePIDs stored there on a per-CMID basis.*
 - *The client emulator now works for v4, v5, and v6 requests.*
 - *The client emulator now also verifies the KMS v4 responses it receives.*
	
### py-kms_2013-12-14T230215Z
 - *Added a client (work in progress) that right now can only generate and send RPC bind requests.*
 - *Added a bunch of new classes to handle RPC client stuff, but I might just end up moving their functions back into the old classes at some point.*
 - *Lots of other code shuffling.*
 - *Made the verbose and debug option help easier to read.*
 - *Added some server error messages.*

### py-kms_2013-12-08T051332Z:
 - *Made some really huge internal changes to streamline packet parsing.*

### py-kms_2013-12-06T034100Z:
 - *Added tons of new SKU IDs*

### py-kms_2013-12-05T044849Z:
 - *Added Office SKU IDs*
 - *Small internal changes*

### py-kms_2013-12-04T010942Z:
 - *Made the rpcResponseArray in rpcRequest output closer to spec*

### py-kms_2013-12-01T063938Z:
 - *SKUID conversion: Converts the SKUID UUID into a human-readable product version for SKUIDs in its SKUID dictionary.*
 - *Fancy new timezone conversion stuff.*
 - *Enabled setting custom LCIDs.*
 - *Data parsing is now handled by structure.py.*
 - *Some other minor stuff you probably won't notice.*

### py-kms_2013-11-27T061658Z:
 - *Got rid of custom functions module (finally)*

### py-kms_2013-11-27T054744Z:
 - *Simplified custom functions module*
 - *Got rid of "v4" subfolder*
 - *Cleaned up a bunch of code*

### py-kms_2013-11-23T044244Z:
 - *Added timestamps to verbose output*
 - *Made the verbose output look better*

### py-kms_2013-11-21T014002Z:
 - *Moved some stuff into verbose output*
 - *Enabled server ePIDs of arbitrary length*

### py-kms_2013-11-20T180347Z:
 - *Permanently fixed machineName decoding*
 - *Adheres closer to the DCE/RPC protocol spec*
 - *Added client info to program output*
 - *Small formatting changes*

### py-kms_2013-11-13:
 - *First working release added to the Mega folder.*
