├── LICENSE ├── README.md ├── amd.csv ├── amd.py ├── amd_mapping.csv ├── intel.csv ├── intel.py ├── microparse.py ├── via.csv └── via.py /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | {description} 294 | Copyright (C) {year} {fullname} 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | {signature of Ty Coon}, 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | microparse 2 | ========== 3 | 4 | Microcode update parser for AMD, Intel, and VIA processors written in Python 3.x. 5 | 6 | Update binaries can be obtained from: 7 | * /lib/firmware/amd-ucode and /lib/firmware/intel-ucode with the amd-ucode and intel-ucode packages installed on Debian/Ubuntu 8 | * Coreboot: http://review.coreboot.org/gitweb?p=coreboot.git;a=tree;f=src/cpu;hb=HEAD 9 | * AMD: http://www.amd64.org/microcode.html 10 | * Intel: https://downloadcenter.intel.com/SearchResult.aspx?lang=eng&keyword=%22microcode%22 11 | 12 | Listings of publicly available microcode updates are included: 13 | * amd.csv 14 | * amd_mapping.csv 15 | * intel.csv 16 | * via.csv 17 | -------------------------------------------------------------------------------- /amd.csv: -------------------------------------------------------------------------------- 1 | Date,Patch ID,Patch Data ID,Patch Data Length,Initialization Flag,Patch Data Checksum,Northbridge Device ID,Southbridge Device ID,Processor Revision ID,Northbridge Revision ID,Southbridge Revision ID,BIOS API Revision,Unknown 1,Unknown 2,Unknown 3,Match 1,Match 2,Match 3,Match 4,Match 5,Match 6,Match 7,Match 8 2 | 2/6/2004,0x00000039,0x00008000,0x00000040,0x00000000,0x3e331cfd,0x00000000,0x00000000,0x00000048,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000644,0x00000140,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff 3 | 2/6/2004,0x0000003a,0x00008000,0x00000040,0x00000000,0x3e88c6fd,0x00000000,0x00000000,0x0000004a,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000644,0x00000140,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff 4 | 7/19/2004,0x00000047,0x00008000,0x00000040,0x00000000,0x2ebedd53,0x00000000,0x00000000,0x0000004a,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000644,0x00000140,0x000004b4,0x000004ba,0x00000884,0x00000745,0xffffffff,0xffffffff 5 | 2/25/2004,0x00000041,0x00008000,0x00000040,0x00000000,0x3e5a6afd,0x00000000,0x00000000,0x00000150,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000644,0x00000140,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff 6 | 4/28/2005,0x0000004d,0x00008000,0x00000040,0x00000001,0xc294596b,0x00000000,0x00000000,0x00000210,0x00000000,0x00000000,0x00000001,0x000000aa,0x000000aa,0x000000aa,0x000002a8,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff 7 | 2/8/2007,0x01000018,0x00008000,0x00000040,0x00000000,0x07307066,0x00000000,0x00000000,0x00001000,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000644,0xffffffff,0x000006a4,0xffffffff,0x00000972,0x00000970,0x00000b9b,0xffffffff 8 | 3/26/2007,0x01000020,0x00008000,0x00000040,0x00000000,0x07306866,0x00000000,0x10000000,0x00001000,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000644,0xffffffff,0x000006a4,0xffffffff,0x00000972,0x00000970,0x00000b9b,0xffffffff 9 | 6/27/2007,0x01000033,0x00008000,0x00000040,0x00000000,0x55d576de,0x00000000,0x00000000,0x00001020,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000970,0x00000149,0xffffffff,0x000008c1,0xffffffff,0xffffffff,0xffffffff,0xffffffff 10 | 1/11/2008,0x01000066,0x00008000,0x00000040,0x00000000,0x84f07583,0x00000000,0x00000000,0x00001020,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000970,0x00000149,0x0000018b,0x000008c1,0xffffffff,0x00000f56,0x00000b9e,0x00000b9a 11 | 5/1/2008,0x01000084,0x00008000,0x00000040,0x00000000,0x1fcc8590,0x00000000,0x00000000,0x00001020,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000970,0x00000149,0x0000018b,0x000008c1,0xffffffff,0x00000f56,0x00000b9e,0x00000c70 12 | 11/5/2008,0x01000096,0x00008000,0x00000040,0x00000000,0x6d2dd485,0x00000000,0x00000000,0x00001020,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000970,0x00000149,0x0000018b,0x000008c1,0xffffffff,0x00000f56,0x00000b9e,0x00000c70 13 | 7/23/2007,0x01000035,0x00008000,0x00000040,0x00000000,0x55d576de,0x00000000,0x00000000,0x00001022,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000970,0x00000149,0xffffffff,0x000008c1,0xffffffff,0xffffffff,0xffffffff,0xffffffff 14 | 1/11/2008,0x01000065,0x00008000,0x00000040,0x00000000,0x6c67789b,0x00000000,0x00000000,0x00001022,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000970,0x00000149,0x0000018b,0x000008c1,0x00000baa,0x00000f56,0x00000b9e,0x00000b9a 15 | 4/30/2008,0x01000083,0x00008000,0x00000040,0x00000000,0x074388a8,0x00000000,0x00000000,0x00001022,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000970,0x00000149,0x0000018b,0x000008c1,0x00000baa,0x00000f56,0x00000b9e,0x00000c70 16 | 11/4/2008,0x01000095,0x00008000,0x00000040,0x00000000,0x54a4d79d,0x00000000,0x00000000,0x00001022,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000970,0x00000149,0x0000018b,0x000008c1,0x00000baa,0x00000f56,0x00000b9e,0x00000c70 17 | 5/1/2008,0x01000085,0x00008000,0x00000040,0x00000000,0x3d5db9c1,0x00000000,0x00000000,0x00001040,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x0000022f,0x000009a0,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff 18 | 5/1/2008,0x01000086,0x00008000,0x00000040,0x00000000,0x0330de04,0x00000000,0x00000000,0x00001041,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x000009a0,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff 19 | 3/11/2010,0x010000c6,0x00008000,0x00000040,0x00000000,0x840e66b5,0x00000000,0x00000000,0x00001041,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x000009a0,0x000009a5,0xffffffff,0x000009a1,0xffffffff,0xffffffff,0xffffffff,0xffffffff 20 | 10/24/2011,0x010000db,0x00008000,0x00000040,0x00000000,0x72bee4b9,0x00000000,0x00000000,0x00001041,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x000009a0,0x000009a5,0xffffffff,0x000009a1,0x000009ff,0xffffffff,0xffffffff,0xffffffff 21 | 7/31/2009,0x010000b6,0x00008000,0x00000040,0x00000000,0x6bda98e9,0x00000000,0x00000000,0x00001043,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000c10,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff 22 | 3/11/2010,0x010000c8,0x00008000,0x00000040,0x00000000,0xef77996a,0x00000000,0x00000000,0x00001043,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000c10,0x00000355,0xffffffff,0x00000351,0xffffffff,0xffffffff,0xffffffff,0xffffffff 23 | 11/11/2008,0x01000098,0x00008000,0x00000040,0x00000000,0x9aca53f8,0x00000000,0x00000000,0x00001062,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000b9a,0x00000c16,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff 24 | 12/17/2008,0x0100009f,0x00008000,0x00000040,0x00000000,0xd04eb78b,0x00000000,0x00000000,0x00001062,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000b9a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff 25 | 3/11/2010,0x010000c7,0x00008000,0x00000040,0x00000000,0x1d6353b8,0x00000000,0x00000000,0x00001062,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000b9a,0x00000c16,0x00000355,0xffffffff,0x00000351,0xffffffff,0xffffffff,0xffffffff 26 | 3/5/2010,0x010000c5,0x00008000,0x00000040,0x00000000,0xcd93c583,0x00000000,0x00000000,0x00001080,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000b89,0x00000355,0xffffffff,0x00000351,0xffffffff,0xffffffff,0xffffffff,0xffffffff 27 | 10/24/2011,0x010000da,0x00008000,0x00000040,0x00000000,0x71c5625a,0x00000000,0x00000000,0x00001080,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000b89,0x00000355,0xffffffff,0x00000351,0x00000a05,0xffffffff,0xffffffff,0xffffffff 28 | 3/3/2010,0x010000c4,0x00008000,0x00000040,0x00000001,0x939ce04a,0x00000000,0x00000000,0x00001081,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000ba7,0x00000c14,0x00000355,0xffffffff,0x00000351,0xffffffff,0xffffffff,0xffffffff 29 | 10/12/2011,0x010000d9,0x00008000,0x00000040,0x00000000,0xead2876e,0x00000000,0x00000000,0x00001081,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000ba7,0x00000c14,0x00000355,0x00000a08,0x00000351,0x00000e0c,0x000007c4,0x00000b9a 30 | 2/17/2010,0x010000bf,0x00008000,0x00000040,0x00000000,0x39028242,0x00000000,0x00000000,0x000010a0,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000f74,0x000001be,0x00000e33,0x000001a9,0x00000075,0xffffffff,0xffffffff,0xffffffff 31 | 10/24/2011,0x010000dc,0x00008000,0x00000040,0x00000000,0x4f360b0c,0x00000000,0x00000000,0x000010a0,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000f74,0x000001be,0x00000e33,0x000001a9,0x00000075,0x00000273,0x00000355,0x00000351 32 | 3/24/2010,0x03000002,0x00008003,0x00000040,0x00000000,0x4303b849,0x00000000,0x00000000,0x00001200,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x0bd8106d,0x29380a51,0x0a72ffff,0x7ca703fc,0x1cb8ffff,0x6b59ffff,0xa9f9ffff,0x1ac8ffff 33 | 3/6/2008,0x02000032,0x00008000,0x00000010,0x00000000,0x8ff3faea,0x00000000,0x00000000,0x00002031,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x00000cc3,0x00000334,0xffffffff,0x00000e0c,0xffffffff,0x00000f73,0x000005ab,0xffffffff 34 | 10/4/2010,0x0300000e,0x00008003,0x00000040,0x00000000,0xfe687cbc,0x00000000,0x00000000,0x00003001,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x47c10c96,0x192a02bd,0x73cdffff,0xa017ffff,0x5eb9ffff,0x4a81ffff,0x2ad0ffff,0xa8fdffff 35 | 10/4/2010,0x0300000f,0x00008003,0x00000040,0x00000000,0x295b89ab,0x00000000,0x00000000,0x00003010,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x472302bd,0xb9510c99,0xe573ffff,0x51d8ffff,0xa968ffff,0x88c4ffff,0xc9b0ffff,0x9af0ffff 36 | 13/09/2011,0x03000027,0x00008003,0x00000040,0x00000000,0x104f0040,0x00000000,0x00000000,0x00003010,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0xe31902bd,0x98060c99,0x687b0f8a,0xd04511c6,0x3c450e8c,0xee29ffff,0xdd66ffff,0x8953ffff 37 | 11/24/2010,0x05000028,0x00008001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00005010,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x9a9f6689,0xbbcd8a14,0xe0596b71,0xe21decf1,0x85ddcba1,0x051854d4,0x1f70711f,0xa2866bb5 38 | 1/21/2013,0x05000029,0x00008001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00005010,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0xfe99ab0e,0x1f837cc0,0x9e5918bb,0x9ea6c1f8,0x2953ec64,0x1825d798,0xcb2d8df1,0xd263ed74 39 | 10/11/2011,0x0500010d,0x00008001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00005020,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x0f17c373,0x878e486c,0x52f1f6ea,0x9376776b,0x5f036eda,0x038a3e66,0x00bd4b5c,0x49ae82a2 40 | 1/18/2013,0x05000119,0x00008001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00005020,0x00000000,0x00000000,0x00000000,0x000000aa,0x000000aa,0x000000aa,0x807ccb55,0xb9b50bf6,0xc7c048db,0x8e3f4bc3,0x19bbfe0c,0xe767b027,0x55dfb64d,0x55149239 41 | 10/21/2011,0x06000624,0x00008002,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00006012,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xc4896653,0xbf159038,0xc670eeec,0x846618db,0xe53a2fa6,0x466c912e,0x02db1a2f,0xbd1729dc 42 | 7/9/2012,0x06000629,0x00008002,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00006012,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x86d9e122,0x206f01a1,0x5e8ad0fb,0xd9969857,0x3b580b17,0x51448c94,0x1a1e377b,0x9d638b42 43 | 3/6/2013,0x0600063d,0x00008002,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00006012,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x445ba959,0x75b4edac,0x1aff943e,0xe5fb6f42,0xaf6c5616,0x3aa5721b,0xc61806ba,0xeebf7734 44 | 1/3/2013,0x06000822,0x00008002,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00006020,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xe081acb0,0x0f811dfd,0x17a16522,0xac204122,0x45acb894,0x5be0ff38,0xd1e6c1f0,0xe52b6647 45 | 7/13/2012,0x06001119,0x00008002,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00006101,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x3cc0219d,0x68471b37,0xa94f7d11,0x0fd57cfa,0x265df346,0xa0e5712d,0x562b724e,0x348d2ec4 46 | -------------------------------------------------------------------------------- /amd.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | import microparse 4 | import struct 5 | 6 | # http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/amd/microcode/microcode.c;hb=HEAD 7 | # http://lxr.free-electrons.com/source/arch/x86/include/asm/microcode_amd.h 8 | # http://lxr.free-electrons.com/source/arch/x86/kernel/microcode_amd.c 9 | # http://lxr.free-electrons.com/source/arch/x86/kernel/microcode_amd_early.c 10 | 11 | class static(): 12 | # multiplier for patch_data_len 13 | TRIAD_SIZE = 7 14 | F1X_MAX_SIZE = 2048 15 | F14_MAX_SIZE = 1824 16 | F15_MAX_SIZE = 4096 17 | 18 | fmt_string = "-- %-27s: %s\n" 19 | 20 | def container_header(swap_endian): 21 | if swap_endian: 22 | return struct.Struct(">4sII") 23 | else: 24 | return struct.Struct("<4sII") 25 | 26 | def container_equiv(swap_endian): 27 | if swap_endian: 28 | return struct.Struct(">IIIHH") 29 | else: 30 | return struct.Struct("II") 35 | else: 36 | return struct.Struct("IIHBBIIIHBBBBBBIIIIIIII") 41 | else: 42 | return struct.Struct(" static.F14_MAX_SIZE) \ 244 | or (signature.family == 0xf and self.total_size > static.F15_MAX_SIZE) \ 245 | or ((signature.family != 0xe and signature.family != 0xf) and self.total_size > static.F1X_MAX_SIZE): 246 | raise Exception("Microcode exceeds maximum valid size") 247 | 248 | self.nb_rev_id = header[9] 249 | self.sb_rev_id = header[10] 250 | self.bios_api_rev = header[11] 251 | self.unknown1 = header[12] 252 | self.unknown2 = header[13] 253 | self.unknown3 = header[14] 254 | self.match_reg1 = header[15] 255 | self.match_reg2 = header[16] 256 | self.match_reg3 = header[17] 257 | self.match_reg4 = header[18] 258 | self.match_reg5 = header[19] 259 | self.match_reg6 = header[20] 260 | self.match_reg7 = header[21] 261 | self.match_reg8 = header[22] 262 | else: 263 | raise Exception("Input microcode header size mismatch!") 264 | 265 | def parse_data(self, data): 266 | self.data = [] 267 | 268 | if len(data) == self.total_size - static.header(self.is_swap_endian).size: 269 | for i in range(0, self.total_size - static.header(self.is_swap_endian).size, microparse.static.data(self.is_swap_endian).size): 270 | try: 271 | self.data.append(microparse.static.data(self.is_swap_endian).unpack(data[i : i + microparse.static.data(self.is_swap_endian).size])[0]) 272 | except struct.error: 273 | raise Exception("Cannot unpack microcode data!") 274 | else: 275 | raise Exception("Input microcode data size mismatch!") 276 | 277 | def calculate_checksum(self): 278 | return (sum(self.data) & 0xFFFFFFFF) if self.data else 0 279 | 280 | def __str__(self): 281 | fmt_string = ".... %-25s: %s\n" 282 | checksum = " (!)" if self.patch_data_checksum != self.calculate_checksum() else "" 283 | 284 | output = \ 285 | microparse.static.fmt_string % ("Date", microparse.static.int2date(self.date)) + \ 286 | microparse.static.fmt_string % ("Patch ID", microparse.static.hex8(self.patch_id)) + \ 287 | microparse.static.fmt_string % ("Patch Data ID", microparse.static.hex8(self.patch_data_id)) + \ 288 | microparse.static.fmt_string % ("Patch Data Length", microparse.static.hex8(self.patch_data_len)) + \ 289 | microparse.static.fmt_string % ("Initialization Flag", microparse.static.hex8(self.init_flag)) + \ 290 | microparse.static.fmt_string % ("Patch Data Checksum", microparse.static.hex8(self.patch_data_checksum) + checksum) + \ 291 | microparse.static.fmt_string % ("Northbridge Device ID", microparse.static.hex8(self.nb_dev_id)) + \ 292 | microparse.static.fmt_string % ("Southbridge Device ID", microparse.static.hex8(self.sb_dev_id)) + \ 293 | microparse.static.fmt_string % ("Processor Revision ID", microparse.static.hex8(self.processor_rev_id)) 294 | 295 | if (self.equiv_cpuid): 296 | for s in self.equiv_cpuid[self.processor_rev_id]: 297 | output += \ 298 | microparse.signature.fmt_string % ("Processor Signature Entry", microparse.static.hex8(s)) + \ 299 | str(microparse.signature(s)) 300 | 301 | output += \ 302 | microparse.static.fmt_string % ("Northbridge Revision ID", microparse.static.hex8(self.nb_rev_id)) + \ 303 | microparse.static.fmt_string % ("Southbridge Revision ID", microparse.static.hex8(self.sb_rev_id)) + \ 304 | microparse.static.fmt_string % ("BIOS API Revision", microparse.static.hex8(self.bios_api_rev)) + \ 305 | microparse.static.fmt_string % ("Unknown 1", microparse.static.hex8(self.unknown1)) + \ 306 | microparse.static.fmt_string % ("Unknown 2", microparse.static.hex8(self.unknown2)) + \ 307 | microparse.static.fmt_string % ("Unknown 3", microparse.static.hex8(self.unknown3)) + \ 308 | microparse.static.fmt_string % ("Match Register 1", microparse.static.hex8(self.match_reg1)) + \ 309 | microparse.static.fmt_string % ("Match Register 2", microparse.static.hex8(self.match_reg2)) + \ 310 | microparse.static.fmt_string % ("Match Register 3", microparse.static.hex8(self.match_reg3)) + \ 311 | microparse.static.fmt_string % ("Match Register 4", microparse.static.hex8(self.match_reg4)) + \ 312 | microparse.static.fmt_string % ("Match Register 5", microparse.static.hex8(self.match_reg5)) + \ 313 | microparse.static.fmt_string % ("Match Register 6", microparse.static.hex8(self.match_reg6)) + \ 314 | microparse.static.fmt_string % ("Match Register 7", microparse.static.hex8(self.match_reg7)) + \ 315 | microparse.static.fmt_string % ("Match Register 8", microparse.static.hex8(self.match_reg8)) + "\n" 316 | 317 | return output 318 | -------------------------------------------------------------------------------- /amd_mapping.csv: -------------------------------------------------------------------------------- 1 | Processor Signature,Processor Revision,Family 2 | 0x00000f48,0x00000048,K8 (SH-C0) 3 | 0x00000f4a,0x0000004a,K8 (SH-CG) 4 | 0x00000f58,0x00000048,K8 (SH-C0) 5 | 0x00000f5a,0x0000004a,K8 (SH-CG) 6 | 0x00000f7a,0x0000004a,K8 (SH-CG) 7 | 0x00000f82,0x0000004a,K8 (CH-CG) 8 | 0x00000fc0,0x0000004a,K8 (DH-CG) 9 | 0x00000ff0,0x0000004a,K8 (DH-CG) 10 | 0x00010f50,0x00000150,0fh (SH-D0) 11 | 0x00010f70,0x00000150,0fh (SH-D0) 12 | 0x00010f80,0x00000150,0fh (CH-D0) 13 | 0x00010fc0,0x00000150,0fh (DH-D0) 14 | 0x00010ff0,0x00000150,0fh (DH-D0) 15 | 0x00020f10,0x00000210,0fh (JH-E1) 16 | 0x00020f12,0x00000210,0fh (JH-E6) 17 | 0x00020f32,0x00000210,0fh (JH-E6) 18 | 0x00020fb1,0x00000210,0fh (BH-E4) 19 | 0x00100f00,0x00001000, 20 | 0x00100f01,0x00001000, 21 | 0x00100f02,0x00001000, 22 | 0x00100f20,0x00001020, 23 | 0x00100f21,0x00001020,10h (DR-B1) 24 | 0x00100f22,0x00001022,10h (DR-B2) 25 | 0x00100f23,0x00001022,10h (DR-B3) 26 | 0x00100f2a,0x00001020,10h (DR-BA) 27 | 0x00100f42,0x00001041,10h (RB-C2) 28 | 0x00100f43,0x00001043,10h (RB-C3) 29 | 0x00100f52,0x00001041,10h (BL-C2) 30 | 0x00100f53,0x00001043,10h (BL-C3) 31 | 0x00100f62,0x00001062,10h (DA-C2) 32 | 0x00100f63,0x00001043,10h (DA-C3) 33 | 0x00100f80,0x00001080,10h (HY-D0) 34 | 0x00100f81,0x00001081,10h (HY-D1) 35 | 0x00100f91,0x00001081,10h (HY-D1) 36 | 0x00100fa0,0x000010a0,10h (PH-E0) 37 | 0x00200f31,0x00002031,11h (LG-B1) 38 | ,0x00003000,12h (LN-A0) 39 | ,0x00003001,12h (LN-A1) 40 | 0x00300f10,0x00003010,12h (LN-B0) 41 | 0x00500f10,0x00005010,14h (ON-B0) 42 | 0x00500f20,0x00005020,14h (ON-C0) 43 | 0x00600f12,0x00006012,15h (OR-B2) 44 | 0x00600f20,0x00006020,15h (OR-C0) 45 | 0x00610f01,0x00006101,15h (TN-A1) -------------------------------------------------------------------------------- /intel.csv: -------------------------------------------------------------------------------- 1 | Processor Signature,Date,Header Version,Revision,Flags,Checksum,Update Data Size 2 | 0x00000611,12/18/1996,0x00000001,0x00000b27,0x00000000,0x05793e46,2000 3 | 0x00000611,9/5/1995,0x00000001,0x000b0026,0x00000000,0x56520b61,2000 4 | 0x00000612,1/5/1996,0x00000001,0x000000c5,0x00000000,0x7c68ed35,2000 5 | 0x00000612,12/10/1996,0x00000001,0x000000c6,0x00000000,0x374569e7,2000 6 | 0x00000616,1/25/1995,0x00000001,0x000000c5,0x00000000,0xc269adc4,2000 7 | 0x00000616,12/10/1996,0x00000001,0x000000c6,0x00000000,0x2d239c7f,2000 8 | 0x00000617,1/25/1995,0x00000001,0x000000c5,0x00000000,0xa1ba5ea4,2000 9 | 0x00000617,12/10/1996,0x00000001,0x000000c6,0x00000000,0x3371797e,2000 10 | 0x00000619,1896/00/07,0x00000001,0x000000d1,0x00000000,0xabd00f1d,2000 11 | 0x00000619,7/18/1996,0x00000001,0x000000d1,0x00000000,0xa4bf0e1d,2000 12 | 0x00000619,2/18/1998,0x00000001,0x000000d2,0x00000000,0xc5c556c1,2000 13 | 0x00000630,8/27/1996,0x00000001,0x00000013,0x00000000,0xf316fc3b,2000 14 | 0x00000632,9/3/1996,0x00000001,0x00000020,0x00000000,0xebc16165,2000 15 | 0x00000633,12/12/1996,0x00000001,0x00000032,0x00000000,0x0d73d3bc,2000 16 | 0x00000633,9/23/1998,0x00000001,0x00000036,0x00000000,0xe92faa0c,2000 17 | 0x00000633,5/8/1998,0x00000001,0x00000034,0x00000001,0x278be7dc,2000 18 | 0x00000634,6/16/1997,0x00000001,0x00000033,0x00000000,0xf3ac5144,2000 19 | 0x00000634,9/23/1998,0x00000001,0x00000037,0x00000000,0x02c55597,2000 20 | 0x00000634,5/8/1998,0x00000001,0x00000035,0x00000001,0x3ac2fb53,2000 21 | 0x00000650,8/15/1997,0x00000001,0x00000005,0x00000000,0x10c8495d,2000 22 | 0x00000650,11/24/1997,0x00000001,0x00000015,0x00000000,0xffa999f3,2000 23 | 0x00000650,1/23/1998,0x00000001,0x00000027,0x00000001,0x66d67dd7,2000 24 | 0x00000650,6/10/1998,0x00000001,0x00000032,0x00000001,0xa0027121,2000 25 | 0x00000650,5/25/1999,0x00000001,0x00000040,0x00000001,0xb6a8b9b9,2000 26 | 0x00000650,5/25/1999,0x00000001,0x00000041,0x00000002,0xbc120ef5,2000 27 | 0x00000650,12/12/1997,0x00000001,0x00000019,0x00000004,0x657d0d11,2000 28 | 0x00000650,5/25/1999,0x00000001,0x00000045,0x00000008,0x429c2f70,2000 29 | 0x00000650,2/11/1998,0x00000001,0x0000002e,0x00000020,0x2f41bf64,2000 30 | 0x00000650,2/11/1998,0x00000001,0x0000002f,0x00000080,0xac6d02e6,2000 31 | 0x00000651,1/23/1998,0x00000001,0x00000029,0x00000001,0x8ec49c2f,2000 32 | 0x00000651,6/10/1998,0x00000001,0x00000030,0x00000001,0xde71ecc9,2000 33 | 0x00000651,5/25/1999,0x00000001,0x00000040,0x00000001,0xf400b4ac,2000 34 | 0x00000651,5/25/1999,0x00000001,0x00000041,0x00000002,0xa6218306,2000 35 | 0x00000651,5/25/1999,0x00000001,0x00000042,0x00000008,0x48947659,2000 36 | 0x00000652,4/8/1998,0x00000001,0x00000007,0x00000001,0x01e31f0f,2000 37 | 0x00000652,6/10/1998,0x00000001,0x00000014,0x00000001,0x0e4a7195,2000 38 | 0x00000652,5/12/1999,0x00000001,0x0000002a,0x00000001,0xc8b34cc7,2000 39 | 0x00000652,5/17/1999,0x00000001,0x0000002c,0x00000002,0x05073130,2000 40 | 0x00000652,5/12/1999,0x00000001,0x0000002b,0x00000004,0xd40d4baf,2000 41 | 0x00000652,5/18/1999,0x00000001,0x0000002d,0x00000008,0x35182bc2,2000 42 | 0x00000653,10/14/1998,0x00000001,0x00000001,0x00000001,0x76fdf028,2000 43 | 0x00000653,5/12/1999,0x00000001,0x0000000a,0x00000001,0x4ffe6c9b,2000 44 | 0x00000653,6/28/1999,0x00000001,0x00000010,0x00000001,0x4b6dfc5e,2000 45 | 0x00000653,5/18/1999,0x00000001,0x0000000c,0x00000002,0x810fe1ab,2000 46 | 0x00000653,5/20/1999,0x00000001,0x0000000b,0x00000004,0xe3f50f82,2000 47 | 0x00000653,5/18/1999,0x00000001,0x0000000d,0x00000008,0xc28f9258,2000 48 | 0x00000660,6/5/1998,0x00000001,0x00000004,0x00000001,0x0c7b5205,2000 49 | 0x00000660,3/12/1999,0x00000001,0x00000009,0x00000001,0x53201267,2000 50 | 0x00000660,5/5/1999,0x00000001,0x0000000a,0x00000001,0x05b795f4,2000 51 | 0x00000665,8/27/1998,0x00000001,0x00000001,0x00000010,0x6d487dc1,2000 52 | 0x00000665,3/10/1999,0x00000001,0x00000002,0x00000010,0x86563753,2000 53 | 0x00000665,5/5/1999,0x00000001,0x00000003,0x00000010,0x2b9733f1,2000 54 | 0x0000066a,5/5/1999,0x00000001,0x0000000c,0x00000002,0x1d9d265a,2000 55 | 0x0000066a,5/5/1999,0x00000001,0x0000000d,0x00000008,0xbb94bae6,2000 56 | 0x0000066a,5/5/1999,0x00000001,0x0000000b,0x00000020,0x5320efc2,2000 57 | 0x0000066d,3/12/1999,0x00000001,0x00000005,0x00000002,0x270b86cf,2000 58 | 0x0000066d,3/12/1999,0x00000001,0x00000006,0x00000008,0x5a11f8b1,2000 59 | 0x0000066d,5/5/1999,0x00000001,0x00000007,0x00000020,0x35ba5e6e,2000 60 | 0x00000670,5/28/1998,0x00000001,0x00000006,0x00000001,0x0ce041ad,2000 61 | 0x00000671,7/29/1998,0x00000001,0x00000002,0x00000001,0x9c9a73b0,2000 62 | 0x00000671,8/11/1998,0x00000001,0x00000003,0x00000001,0xf6cf7b0b,2000 63 | 0x00000671,8/11/1998,0x00000001,0x00000014,0x00000004,0x83239dd8,2000 64 | 0x00000672,9/9/1998,0x00000001,0x00000001,0x00000001,0xd08f3a1b,2000 65 | 0x00000672,10/29/1998,0x00000001,0x00000004,0x00000001,0x15916a64,2000 66 | 0x00000672,5/4/1999,0x00000001,0x0000000b,0x00000001,0x08308a8f,2000 67 | 0x00000672,6/30/1999,0x00000001,0x0000000c,0x00000001,0x608aeba6,2000 68 | 0x00000672,9/22/1999,0x00000001,0x00000010,0x00000001,0x0fc53099,2000 69 | 0x00000672,9/22/1999,0x00000001,0x00000038,0x00000004,0xffd6aa2a,2000 70 | 0x00000673,1/25/1999,0x00000001,0x00000002,0x00000001,0x6480ae79,2000 71 | 0x00000673,4/16/1999,0x00000001,0x00000005,0x00000001,0xe0c78621,2000 72 | 0x00000673,4/23/1999,0x00000001,0x00000007,0x00000001,0xaa465d96,2000 73 | 0x00000673,6/29/1999,0x00000001,0x0000000a,0x00000001,0x9285174f,2000 74 | 0x00000673,9/10/1999,0x00000001,0x0000000e,0x00000001,0xf64116d1,2000 75 | 0x00000673,9/10/1999,0x00000001,0x0000002e,0x00000004,0xa5945abf,2000 76 | 0x00000680,5/24/1999,0x00000001,0x0000000b,0x00000001,0x39fa1ef1,2000 77 | 0x00000680,6/10/1999,0x00000001,0x00000014,0x00000001,0x2b6c7f13,2000 78 | 0x00000680,5/25/1999,0x00000001,0x0000000d,0x00000008,0x56da26b2,2000 79 | 0x00000680,6/10/1999,0x00000001,0x00000016,0x00000008,0xe0cf925e,2000 80 | 0x00000680,5/25/1999,0x00000001,0x0000000c,0x00000020,0x8d1153dc,2000 81 | 0x00000680,6/10/1999,0x00000001,0x00000015,0x00000020,0xcc55d584,2000 82 | 0x00000681,7/12/1999,0x00000001,0x00000001,0x00000001,0xcb9da6d0,2000 83 | 0x00000681,9/21/1999,0x00000001,0x0000000d,0x00000001,0x31708166,2000 84 | 0x00000681,9/21/1999,0x00000001,0x00000010,0x00000004,0x04387de5,2000 85 | 0x00000681,9/21/1999,0x00000001,0x0000000f,0x00000008,0x73f2cca2,2000 86 | 0x00000681,7/16/1999,0x00000001,0x00000005,0x00000010,0xd31a2d47,2000 87 | 0x00000681,9/21/1999,0x00000001,0x00000011,0x00000010,0xfc16538d,2000 88 | 0x00000681,12/9/1999,0x00000001,0x00000014,0x00000010,0xc82efa9b,2000 89 | 0x00000681,9/21/1999,0x00000001,0x0000000e,0x00000020,0x02aa9e53,2000 90 | 0x00000683,1/10/2000,0x00000001,0x0000000c,0x00000001,0xb1605bca,2000 91 | 0x00000683,2/6/2001,0x00000001,0x00000013,0x00000001,0x2f0da1b0,2000 92 | 0x00000683,1/10/2000,0x00000001,0x0000000f,0x00000004,0x452c609f,2000 93 | 0x00000683,2/6/2001,0x00000001,0x00000010,0x00000004,0x30bf0a72,2000 94 | 0x00000683,10/15/1999,0x00000001,0x00000008,0x00000008,0x2942e387,2000 95 | 0x00000683,1/10/2000,0x00000001,0x00000010,0x00000010,0xaa8ed88c,2000 96 | 0x00000683,2/6/2001,0x00000001,0x00000014,0x00000010,0x0976fd98,2000 97 | 0x00000683,10/15/1999,0x00000001,0x00000007,0x00000020,0x1c5efd4b,2000 98 | 0x00000686,5/5/2000,0x00000001,0x00000007,0x00000001,0x87aa303f,2000 99 | 0x00000686,5/4/2000,0x00000001,0x0000000a,0x00000002,0xf3bb1079,2000 100 | 0x00000686,5/4/2000,0x00000001,0x00000002,0x00000004,0x332c50fc,2000 101 | 0x00000686,5/5/2000,0x00000001,0x00000008,0x00000010,0xea2b7b61,2000 102 | 0x00000686,5/4/2000,0x00000001,0x0000000b,0x00000020,0xc25b0947,2000 103 | 0x00000686,5/4/2000,0x00000001,0x0000000c,0x00000080,0xb8f53b16,2000 104 | 0x0000068a,11/2/2000,0x00000001,0x00000001,0x00000010,0x80fc9e3b,2000 105 | 0x0000068a,12/7/2000,0x00000001,0x00000004,0x00000020,0x995ec216,2000 106 | 0x0000068a,12/7/2000,0x00000001,0x00000005,0x00000080,0xb82bbbc1,2000 107 | 0x00000695,11/15/2003,0x00000001,0x00000005,0x00000010,0x0fc5ce6e,2000 108 | 0x00000695,11/9/2004,0x00000001,0x00000007,0x00000010,0xf7d0461f,2000 109 | 0x00000695,12/15/2002,0x00000001,0x00000005,0x00000020,0xb862c1fc,2000 110 | 0x00000695,11/9/2004,0x00000001,0x00000007,0x00000020,0xf7d0460f,2000 111 | 0x00000695,11/9/2004,0x00000001,0x00000047,0x00000080,0xa0324f3b,2000 112 | 0x00000696,7/7/2000,0x00000001,0x00000001,0x00000010,0x99c6bf9b,2000 113 | 0x000006a0,1/10/2000,0x00000001,0x00000003,0x00000004,0xdff45617,2000 114 | 0x000006a1,3/6/2000,0x00000001,0x00000001,0x00000004,0xdac0a4cd,2000 115 | 0x000006a4,6/16/2000,0x00000001,0x00000001,0x00000004,0x144a06e8,2000 116 | 0x000006b0,11/15/2000,0x00000001,0x00000004,0x00000010,0x65611eb6,2000 117 | 0x000006b0,11/17/2000,0x00000001,0x00000007,0x00000020,0xe11ea1c4,2000 118 | 0x000006b1,2/15/2001,0x00000001,0x0000001c,0x00000010,0x6506e1cf,2000 119 | 0x000006b1,2/20/2001,0x00000001,0x0000001d,0x00000020,0x6d9b5661,2000 120 | 0x000006b4,1/10/2002,0x00000001,0x00000001,0x00000010,0x58213e6a,2000 121 | 0x000006b4,1/11/2002,0x00000001,0x00000002,0x00000020,0xf512ec8f,2000 122 | 0x000006d0,4/30/2003,0x00000001,0x00000005,0x00000020,0xf1a75d34,2000 123 | 0x000006d1,7/9/2003,0x00000001,0x00000009,0x00000020,0x02cd7d21,2000 124 | 0x000006d2,8/14/2003,0x00000001,0x00000010,0x00000020,0xc20b4712,2000 125 | 0x000006d6,2/19/2004,0x00000001,0x00000017,0x00000020,0x836c9626,2000 126 | 0x000006d6,10/17/2004,0x00000001,0x00000018,0x00000020,0xb7b66d41,2000 127 | 0x000006d8,8/31/2006,0x00000001,0x00000021,0x00000008,0xdd4078dd,2000 128 | 0x000006d8,7/22/2004,0x00000001,0x00000020,0x00000020,0x2f6d5732,2000 129 | 0x000006e0,1/12/2005,0x00000001,0x00000005,0x00000010,0x345d94e9,5072 130 | 0x000006e0,2/15/2005,0x00000001,0x00000008,0x00000020,0x9969c6bb,5072 131 | 0x000006e1,3/8/2005,0x00000001,0x0000000a,0x00000010,0x35bd986b,5072 132 | 0x000006e1,4/13/2005,0x00000001,0x0000000c,0x00000020,0x0470ee98,5072 133 | 0x000006e4,8/16/2005,0x00000001,0x00000026,0x00000020,0xeb21d139,4048 134 | 0x000006e8,2/8/2006,0x00000001,0x0000003c,0x00000010,0xdf8af029,4048 135 | 0x000006e8,11/15/2005,0x00000001,0x00000039,0x00000020,0x00e9d6a3,4048 136 | 0x000006ec,5/1/2006,0x00000001,0x00000055,0x00000010,0x918fffef,4048 137 | 0x000006ec,5/1/2006,0x00000001,0x00000054,0x00000020,0x7066b518,4048 138 | 0x000006ec,6/22/2006,0x00000001,0x00000056,0x00000040,0x2e9a01e5,4048 139 | 0x000006ec,9/12/2006,0x00000001,0x00000059,0x00000080,0x75996a3e,4048 140 | 0x000006f0,8/18/2005,0x00000001,0x00000005,0x00000020,0x6d5b2cab,4048 141 | 0x000006f1,10/10/2005,0x00000001,0x00000011,0x00000027,0xa28acd13,4048 142 | 0x000006f2,3/8/2007,0x00000001,0x00000056,0x00000001,0xecfb6ee8,4048 143 | 0x000006f2,9/26/2007,0x00000001,0x0000005a,0x00000001,0x594ddba0,4048 144 | 0x000006f2,10/2/2010,0x00000001,0x0000005d,0x00000001,0x9384a573,4048 145 | 0x000006f2,3/15/2007,0x00000001,0x00000057,0x00000020,0x07e77759,4048 146 | 0x000006f2,10/2/2010,0x00000001,0x0000005c,0x00000020,0xc335a60f,4048 147 | 0x000006f4,3/12/2006,0x00000001,0x00000026,0x000000f5,0xda8e97d1,4048 148 | 0x000006f5,5/23/2006,0x00000001,0x00000036,0x00000020,0x97555a99,4048 149 | 0x000006f5,7/25/2006,0x00000001,0x00000038,0x00000080,0x6333b559,4048 150 | 0x000006f6,5/23/2006,0x00000001,0x00000044,0x00000001,0x817b0e80,4048 151 | 0x000006f6,3/7/2007,0x00000001,0x000000c6,0x00000001,0xb1bff977,4048 152 | 0x000006f6,9/16/2007,0x00000001,0x000000cb,0x00000001,0x6f5dfa09,4048 153 | 0x000006f6,9/30/2010,0x00000001,0x000000d0,0x00000001,0xb61ec71a,4048 154 | 0x000006f6,3/7/2007,0x00000001,0x000000c6,0x00000004,0xb1bff974,4048 155 | 0x000006f6,3/26/2007,0x00000001,0x000000c9,0x00000004,0x1208c7f9,4048 156 | 0x000006f6,9/16/2007,0x00000001,0x000000cd,0x00000004,0xa77fc94b,4048 157 | 0x000006f6,10/1/2010,0x00000001,0x000000d2,0x00000004,0x6618cfff,4048 158 | 0x000006f6,3/15/2007,0x00000001,0x000000c7,0x00000020,0xd863aca5,4048 159 | 0x000006f6,3/27/2007,0x00000001,0x000000c8,0x00000020,0x8b32392f,4048 160 | 0x000006f6,9/16/2007,0x00000001,0x000000cc,0x00000020,0xb5503da1,4048 161 | 0x000006f6,10/1/2010,0x00000001,0x000000d1,0x00000020,0xc3efba8f,4048 162 | 0x000006f7,7/12/2006,0x00000001,0x00000060,0x00000010,0x4c134b20,4048 163 | 0x000006f7,3/8/2007,0x00000001,0x00000066,0x00000010,0xfea82c68,4048 164 | 0x000006f7,9/16/2007,0x00000001,0x00000068,0x00000010,0x18729a7e,4048 165 | 0x000006f7,10/2/2010,0x00000001,0x0000006a,0x00000010,0x9911aaf2,4048 166 | 0x000006f7,7/12/2006,0x00000001,0x00000060,0x00000040,0x4c134af0,4048 167 | 0x000006f7,3/8/2007,0x00000001,0x00000066,0x00000040,0xfea82c38,4048 168 | 0x000006f7,3/26/2007,0x00000001,0x00000067,0x00000040,0x4a1c10cd,4048 169 | 0x000006f7,9/17/2007,0x00000001,0x00000069,0x00000040,0x4e779cf4,4048 170 | 0x000006f7,10/2/2010,0x00000001,0x0000006b,0x00000040,0xcc4deed3,4048 171 | 0x000006f9,9/28/2006,0x00000001,0x00000083,0x00000080,0x85b7e1df,4048 172 | 0x000006fa,3/13/2007,0x00000001,0x00000092,0x00000080,0x13ed7841,4048 173 | 0x000006fa,9/24/2007,0x00000001,0x00000094,0x00000080,0x613bce61,4048 174 | 0x000006fa,10/2/2010,0x00000001,0x00000095,0x00000080,0x9f4b38d8,4048 175 | 0x000006fb,3/14/2007,0x00000001,0x000000b3,0x00000001,0x54ad9bff,4048 176 | 0x000006fb,7/13/2007,0x00000001,0x000000b6,0x00000001,0xb3176c40,4048 177 | 0x000006fb,10/3/2010,0x00000001,0x000000ba,0x00000001,0x08707b60,4048 178 | 0x000006fb,3/14/2007,0x00000001,0x000000b4,0x00000004,0xaf7c100f,4048 179 | 0x000006fb,8/6/2007,0x00000001,0x000000b7,0x00000004,0x5cb3ffdf,4048 180 | 0x000006fb,5/11/2009,0x00000001,0x000000b9,0x00000004,0xb6a7f0c9,4048 181 | 0x000006fb,10/3/2010,0x00000001,0x000000bc,0x00000004,0x9394765a,4048 182 | 0x000006fb,3/14/2007,0x00000001,0x000000b3,0x00000008,0x54ad9bf8,4048 183 | 0x000006fb,7/13/2007,0x00000001,0x000000b6,0x00000008,0xc75d0879,4048 184 | 0x000006fb,4/28/2009,0x00000001,0x000000b8,0x00000008,0x7db01441,4048 185 | 0x000006fb,10/3/2010,0x00000001,0x000000bb,0x00000008,0xe7fbf398,4048 186 | 0x000006fb,3/14/2007,0x00000001,0x000000b3,0x00000010,0x54ad9bf0,4048 187 | 0x000006fb,7/13/2007,0x00000001,0x000000b6,0x00000010,0x5e5a71a7,4048 188 | 0x000006fb,10/3/2010,0x00000001,0x000000ba,0x00000010,0xed247070,4048 189 | 0x000006fb,7/13/2007,0x00000001,0x000000b6,0x00000020,0x04e4d5d9,4048 190 | 0x000006fb,10/3/2010,0x00000001,0x000000ba,0x00000020,0x9777492e,4048 191 | 0x000006fb,3/14/2007,0x00000001,0x000000b4,0x00000040,0xaf7c0fd3,4048 192 | 0x000006fb,8/6/2007,0x00000001,0x000000b7,0x00000040,0x530b8fb3,4048 193 | 0x000006fb,5/11/2009,0x00000001,0x000000b9,0x00000040,0x70fed5b1,4048 194 | 0x000006fb,10/3/2010,0x00000001,0x000000bc,0x00000040,0xf1a7a484,4048 195 | 0x000006fb,7/13/2007,0x00000001,0x000000b6,0x00000080,0x2831cee4,4048 196 | 0x000006fb,10/3/2010,0x00000001,0x000000ba,0x00000080,0xf953dc67,4048 197 | 0x000006fd,3/13/2007,0x00000001,0x000000a1,0x00000001,0x020ea906,4048 198 | 0x000006fd,8/13/2007,0x00000001,0x000000a3,0x00000001,0x89c0d09e,4048 199 | 0x000006fd,10/2/2010,0x00000001,0x000000a4,0x00000001,0x9ace6116,4048 200 | 0x000006fd,8/13/2007,0x00000001,0x000000a3,0x00000020,0x89c0d07f,4048 201 | 0x000006fd,10/2/2010,0x00000001,0x000000a4,0x00000020,0x9ace60f7,4048 202 | 0x000006fd,3/13/2007,0x00000001,0x000000a1,0x00000080,0x020ea887,4048 203 | 0x000006fd,8/13/2007,0x00000001,0x000000a3,0x00000080,0x89c0d01f,4048 204 | 0x000006fd,10/2/2010,0x00000001,0x000000a4,0x00000080,0x9ace6097,4048 205 | 0x00000f00,1/30/2000,0x00000001,0xffff0001,0x00000001,0x3675924f,2000 206 | 0x00000f01,2/29/2000,0x00000001,0xffff0004,0x00000001,0x18059a2b,2000 207 | 0x00000f03,5/18/2000,0x00000001,0xffff0001,0x00000001,0x3594d265,2000 208 | 0x00000f04,7/18/2000,0x00000001,0xffff000a,0x00000001,0xc5f9eaa6,2000 209 | 0x00000f04,7/18/2000,0x00000001,0xffff000b,0x00000002,0x3342165b,2000 210 | 0x00000f05,8/3/2000,0x00000001,0x00000007,0x00000001,0xf137420a,2000 211 | 0x00000f05,8/24/2000,0x00000001,0x0000000b,0x00000001,0x50c99636,2000 212 | 0x00000f05,8/3/2000,0x00000001,0x00000008,0x00000002,0x98f34c81,2000 213 | 0x00000f05,8/24/2000,0x00000001,0x0000000c,0x00000002,0xedb8177b,2000 214 | 0x00000f06,9/11/2000,0x00000001,0x00000004,0x00000002,0x680047b7,2000 215 | 0x00000f07,11/15/2000,0x00000001,0x00000007,0x00000001,0xd8f3a74b,2000 216 | 0x00000f07,2/14/2002,0x00000001,0x0000000d,0x00000001,0x8e3176c3,2000 217 | 0x00000f07,7/16/2002,0x00000001,0x00000012,0x00000001,0x39e69ff0,2000 218 | 0x00000f07,8/24/2000,0x00000001,0x00000004,0x00000002,0x0e41b8c7,2000 219 | 0x00000f07,11/15/2000,0x00000001,0x00000008,0x00000002,0xb7b473e7,2000 220 | 0x00000f09,1/4/2001,0x00000001,0x00000008,0x00000002,0x7ee4927c,2000 221 | 0x00000f0a,1/12/2001,0x00000001,0x00000005,0x00000001,0xf816cc4f,2000 222 | 0x00000f0a,1/11/2002,0x00000001,0x00000010,0x00000001,0xc3a888b5,2000 223 | 0x00000f0a,7/16/2002,0x00000001,0x00000013,0x00000001,0x2a2cc3cb,2000 224 | 0x00000f0a,1/12/2001,0x00000001,0x00000006,0x00000002,0x6dde873c,2000 225 | 0x00000f0a,1/11/2002,0x00000001,0x00000011,0x00000002,0xda6c5ba6,2000 226 | 0x00000f0a,8/21/2002,0x00000001,0x00000015,0x00000002,0x63e49a0c,2000 227 | 0x00000f0a,2/27/2001,0x00000001,0x00000009,0x00000004,0x571fe45e,2000 228 | 0x00000f0a,1/11/2002,0x00000001,0x00000012,0x00000004,0x26ca4178,2000 229 | 0x00000f0a,7/16/2002,0x00000001,0x00000014,0x00000004,0x64731550,2000 230 | 0x00000f11,10/15/2001,0x00000001,0x00000005,0x00000002,0xfd86261a,2000 231 | 0x00000f11,3/12/2002,0x00000001,0x00000006,0x00000002,0xbc7900e0,2000 232 | 0x00000f11,7/16/2002,0x00000001,0x00000008,0x00000002,0x0a9ea290,2000 233 | 0x00000f11,7/29/2003,0x00000001,0x0000000a,0x00000002,0xf72c94ec,2000 234 | 0x00000f12,5/23/2001,0x00000001,0x00000001,0x00000001,0xb9378453,2000 235 | 0x00000f12,1/12/2002,0x00000001,0x00000026,0x00000001,0x9608098d,2000 236 | 0x00000f12,7/16/2002,0x00000001,0x0000002a,0x00000001,0x3a66bee8,2000 237 | 0x00000f12,5/2/2003,0x00000001,0x0000002d,0x00000001,0x22ba6824,2000 238 | 0x00000f12,5/23/2001,0x00000001,0x00000002,0x00000002,0x337c2a2b,2000 239 | 0x00000f12,1/12/2002,0x00000001,0x00000027,0x00000002,0xa7f2dc1a,2000 240 | 0x00000f12,7/16/2002,0x00000001,0x0000002b,0x00000002,0x6c25c9b7,2000 241 | 0x00000f12,5/2/2003,0x00000001,0x0000002f,0x00000002,0x44847acc,2000 242 | 0x00000f12,5/23/2001,0x00000001,0x00000003,0x00000004,0x15dae44f,2000 243 | 0x00000f12,1/12/2002,0x00000001,0x00000028,0x00000004,0x2f6967b9,2000 244 | 0x00000f12,7/16/2002,0x00000001,0x0000002c,0x00000004,0x22ca8eb8,2000 245 | 0x00000f12,5/2/2003,0x00000001,0x0000002e,0x00000004,0xb2548d0a,2000 246 | 0x00000f13,2/11/2002,0x00000001,0x00000003,0x00000004,0x3793f1bb,2000 247 | 0x00000f13,7/17/2002,0x00000001,0x00000004,0x00000004,0xb0c33aa0,2000 248 | 0x00000f13,5/8/2003,0x00000001,0x00000005,0x00000004,0x386c53da,2000 249 | 0x00000f21,5/29/2001,0x00000001,0x00000002,0x00000002,0x0838c135,2000 250 | 0x00000f21,5/29/2001,0x00000001,0x00000001,0x00000004,0x78cddd37,2000 251 | 0x00000f22,4/6/2002,0x00000001,0x00000003,0x00000002,0x664ee8e8,2000 252 | 0x00000f22,7/29/2003,0x00000001,0x00000005,0x00000002,0x7190b462,2000 253 | 0x00000f23,7/30/2001,0x00000001,0x00000009,0x00000002,0xad94879e,2000 254 | 0x00000f23,7/30/2001,0x00000001,0x00000008,0x00000004,0x7483278f,2000 255 | 0x00000f24,10/26/2001,0x00000001,0x00000008,0x00000002,0x5852871d,2000 256 | 0x00000f24,1/14/2002,0x00000001,0x0000000c,0x00000002,0xd48cfbd0,2000 257 | 0x00000f24,7/19/2002,0x00000001,0x00000010,0x00000002,0x789bb8d7,2000 258 | 0x00000f24,1/16/2003,0x00000001,0x0000001d,0x00000002,0x2ea67dc8,2000 259 | 0x00000f24,6/5/2003,0x00000001,0x0000001f,0x00000002,0x1f19b59b,2000 260 | 0x00000f24,9/4/2001,0x00000001,0x00000004,0x00000004,0x29f94f04,2000 261 | 0x00000f24,10/26/2001,0x00000001,0x00000007,0x00000004,0x39226540,2000 262 | 0x00000f24,1/14/2002,0x00000001,0x0000000b,0x00000004,0x68298430,2000 263 | 0x00000f24,7/19/2002,0x00000001,0x0000000f,0x00000004,0x9c1f59bd,2000 264 | 0x00000f24,11/7/2002,0x00000001,0x00000018,0x00000004,0xbaafd460,2000 265 | 0x00000f24,6/5/2003,0x00000001,0x0000001e,0x00000004,0x9ba58d71,2000 266 | 0x00000f24,1/14/2002,0x00000001,0x0000000d,0x00000008,0x8df6975f,2000 267 | 0x00000f24,11/11/2002,0x00000001,0x0000001a,0x00000008,0x734224e2,2000 268 | 0x00000f24,6/5/2003,0x00000001,0x00000020,0x00000008,0x828598c7,2000 269 | 0x00000f24,9/7/2002,0x00000001,0x00000013,0x00000010,0x6ed8c0f9,2000 270 | 0x00000f24,6/10/2003,0x00000001,0x00000021,0x00000010,0x83ed02e7,2000 271 | 0x00000f25,1/24/2003,0x00000001,0x00000006,0x00000001,0x29917c89,2000 272 | 0x00000f25,2/3/2004,0x00000001,0x0000001a,0x00000001,0x5b57b0e6,2000 273 | 0x00000f25,4/6/2004,0x00000001,0x0000001e,0x00000001,0x8a2e5d1d,2000 274 | 0x00000f25,8/11/2004,0x00000001,0x00000029,0x00000001,0x2795ba4b,2000 275 | 0x00000f25,2/3/2004,0x00000001,0x00000019,0x00000002,0x419bfd63,2000 276 | 0x00000f25,4/6/2004,0x00000001,0x0000001d,0x00000002,0xaa23e63b,2000 277 | 0x00000f25,8/11/2004,0x00000001,0x0000002a,0x00000002,0xad53035d,2000 278 | 0x00000f25,1/23/2003,0x00000001,0x00000005,0x00000004,0xfd09b575,2000 279 | 0x00000f25,7/21/2003,0x00000001,0x00000015,0x00000004,0xd6976e46,2000 280 | 0x00000f25,2/3/2004,0x00000001,0x0000001b,0x00000004,0xdcbe99de,2000 281 | 0x00000f25,4/6/2004,0x00000001,0x0000001f,0x00000004,0x8268ccfc,2000 282 | 0x00000f25,8/11/2004,0x00000001,0x0000002b,0x00000004,0xe4dcce66,2000 283 | 0x00000f25,4/6/2004,0x00000001,0x00000020,0x00000010,0x7080bd1a,2000 284 | 0x00000f25,8/26/2004,0x00000001,0x0000002c,0x00000010,0x62d062ab,2000 285 | 0x00000f26,2/3/2004,0x00000001,0x0000000b,0x00000002,0x85276ce2,2000 286 | 0x00000f26,4/6/2004,0x00000001,0x0000000e,0x00000002,0x29fd8800,2000 287 | 0x00000f26,8/5/2004,0x00000001,0x00000010,0x00000002,0x17ccab58,2000 288 | 0x00000f27,6/28/2002,0x00000001,0x00000025,0x00000002,0xb71f9b56,2000 289 | 0x00000f27,11/6/2002,0x00000001,0x00000034,0x00000002,0x1e25abf5,2000 290 | 0x00000f27,6/4/2003,0x00000001,0x00000038,0x00000002,0x6d330d4a,2000 291 | 0x00000f27,6/28/2002,0x00000001,0x00000024,0x00000004,0xd7490795,2000 292 | 0x00000f27,7/22/2002,0x00000001,0x00000027,0x00000004,0xfad3605d,2000 293 | 0x00000f27,11/6/2002,0x00000001,0x00000033,0x00000004,0x3d579e37,2000 294 | 0x00000f27,6/4/2003,0x00000001,0x00000037,0x00000004,0x972cd5fa,2000 295 | 0x00000f27,11/6/2002,0x00000001,0x00000035,0x00000008,0x2c674e26,2000 296 | 0x00000f27,6/4/2003,0x00000001,0x00000039,0x00000008,0x823432ca,2000 297 | 0x00000f29,1/23/2003,0x00000001,0x0000000f,0x00000002,0x2de12f00,2000 298 | 0x00000f29,7/18/2003,0x00000001,0x00000018,0x00000002,0x0e0b85c7,2000 299 | 0x00000f29,3/24/2004,0x00000001,0x00000022,0x00000002,0x9a020a77,2000 300 | 0x00000f29,8/11/2004,0x00000001,0x0000002d,0x00000002,0x76e56915,2000 301 | 0x00000f29,11/11/2002,0x00000001,0x0000000a,0x00000004,0x83569f5f,2000 302 | 0x00000f29,1/23/2003,0x00000001,0x0000000e,0x00000004,0xb021af2a,2000 303 | 0x00000f29,4/14/2003,0x00000001,0x00000011,0x00000004,0xe2a5caca,2000 304 | 0x00000f29,6/4/2003,0x00000001,0x00000014,0x00000004,0xb8b0831e,2000 305 | 0x00000f29,7/18/2003,0x00000001,0x00000017,0x00000004,0xc42d13a3,2000 306 | 0x00000f29,3/24/2004,0x00000001,0x00000021,0x00000004,0xdeec05f1,2000 307 | 0x00000f29,8/11/2004,0x00000001,0x0000002e,0x00000004,0x7695d4dc,2000 308 | 0x00000f29,8/21/2003,0x00000001,0x0000001a,0x00000008,0xa9ad584d,2000 309 | 0x00000f29,8/11/2004,0x00000001,0x0000002f,0x00000008,0xfdb52a5d,2000 310 | 0x00000f32,5/11/2004,0x00000001,0x0000000a,0x0000000d,0x2538ef0a,2000 311 | 0x00000f33,5/12/2004,0x00000001,0x0000000b,0x0000000d,0xe5668aea,2000 312 | 0x00000f33,4/21/2005,0x00000001,0x0000000c,0x0000000d,0x58c41efd,2000 313 | 0x00000f34,5/4/2004,0x00000001,0x0000000e,0x0000001d,0x9b18561d,6096 314 | 0x00000f34,7/30/2004,0x00000001,0x00000013,0x0000001d,0x95f183f0,6096 315 | 0x00000f34,4/21/2005,0x00000001,0x00000017,0x0000001d,0x2cbd6146,7120 316 | 0x00000f41,4/21/2005,0x00000001,0x00000016,0x00000002,0x0a12a70a,5072 317 | 0x00000f41,11/22/2004,0x00000001,0x00000011,0x00000020,0x7fad61f2,5072 318 | 0x00000f41,11/22/2004,0x00000001,0x00000012,0x0000009d,0x52a22aa2,5072 319 | 0x00000f41,8/2/2004,0x00000001,0x00000009,0x000000bd,0x5c400364,4048 320 | 0x00000f41,4/22/2005,0x00000001,0x00000017,0x000000bd,0x326135c1,5072 321 | 0x00000f43,4/21/2005,0x00000001,0x00000005,0x0000009d,0x77812c17,2000 322 | 0x00000f44,4/21/2005,0x00000001,0x00000006,0x0000009d,0x9f60db18,3024 323 | 0x00000f47,4/21/2005,0x00000001,0x00000003,0x0000009d,0xaf2cef0d,3024 324 | 0x00000f48,5/8/2006,0x00000001,0x0000000c,0x00000001,0x5b9afec7,3024 325 | 0x00000f48,7/22/2005,0x00000001,0x00000008,0x00000002,0x16e9d7f2,3024 326 | 0x00000f48,9/1/2005,0x00000001,0x0000000b,0x00000002,0x090b64f2,3024 327 | 0x00000f48,1/15/2008,0x00000001,0x0000000e,0x00000002,0x0e158e10,3024 328 | 0x00000f48,6/30/2005,0x00000001,0x00000007,0x0000005f,0xd0938263,3024 329 | 0x00000f49,4/21/2005,0x00000001,0x00000003,0x000000bd,0xf85d53b8,2000 330 | 0x00000f4a,9/1/2005,0x00000001,0x00000003,0x0000005c,0xf422068b,2000 331 | 0x00000f4a,12/14/2005,0x00000001,0x00000004,0x0000005c,0x5e7996d9,2000 332 | 0x00000f4a,6/10/2005,0x00000001,0x00000002,0x0000005d,0xdfbc9997,2000 333 | 0x00000f62,11/14/2005,0x00000001,0x0000000d,0x00000004,0x3227de89,3024 334 | 0x00000f62,12/15/2005,0x00000001,0x0000000f,0x00000004,0x0976d137,3024 335 | 0x00000f64,12/15/2005,0x00000001,0x00000002,0x00000001,0x680b0995,3024 336 | 0x00000f64,12/23/2005,0x00000001,0x00000004,0x00000034,0xc66dbf02,3024 337 | 0x00000f65,4/26/2006,0x00000001,0x00000008,0x00000001,0x5c58f575,2000 338 | 0x00000f65,4/26/2006,0x00000001,0x00000007,0x00000004,0xb1d162e2,976 339 | 0x00000f65,4/28/2006,0x00000001,0x00000009,0x00000004,0x1262a7e1,2000 340 | 0x00000f65,5/10/2007,0x00000001,0x0000000b,0x00000004,0x69b15bba,2000 341 | 0x00000f68,7/14/2006,0x00000001,0x00000009,0x00000022,0x0d8bb650,2000 342 | 0x00001632,6/10/1998,0x00000001,0x00000002,0x00000000,0x6aae5598,2000 343 | 0x00010661,3/16/2007,0x00000001,0x00000032,0x00000001,0x0b13f1ed,4048 344 | 0x00010661,9/19/2007,0x00000001,0x00000038,0x00000001,0x8a2d6f19,4048 345 | 0x00010661,10/4/2010,0x00000001,0x00000043,0x00000001,0x4b64ba3a,4048 346 | 0x00010661,11/8/2006,0x00000001,0x00000014,0x00000002,0x73b6c3e8,4048 347 | 0x00010661,3/16/2007,0x00000001,0x00000031,0x00000002,0x891e5cc8,4048 348 | 0x00010661,10/4/2010,0x00000001,0x00000042,0x00000002,0x0e219073,4048 349 | 0x00010661,9/11/2006,0x00000001,0x00000012,0x00000003,0xdff9a512,4048 350 | 0x00010661,5/1/2007,0x00000001,0x00000036,0x00000004,0x007ab882,4048 351 | 0x00010661,3/16/2007,0x00000001,0x00000035,0x00000008,0x25d21171,4048 352 | 0x00010661,3/16/2007,0x00000001,0x00000033,0x00000080,0x9e99cc48,4048 353 | 0x00010661,10/4/2010,0x00000001,0x00000044,0x00000080,0x53baadcc,4048 354 | 0x00010671,3/29/2007,0x00000001,0x00000106,0x00000080,0x80731b2d,4048 355 | 0x00010674,7/20/2007,0x00000001,0x00000405,0x00000080,0x735d9fe0,4048 356 | 0x00010676,1/19/2008,0x00000001,0x0000060b,0x00000001,0x95fab8b5,4048 357 | 0x00010676,1/19/2008,0x00000001,0x0000060c,0x00000001,0xfbac0f6c,4048 358 | 0x00010676,9/29/2010,0x00000001,0x0000060f,0x00000001,0x8fe1a246,4048 359 | 0x00010676,1/19/2008,0x00000001,0x0000060b,0x00000004,0x95fab8b2,4048 360 | 0x00010676,1/19/2008,0x00000001,0x0000060c,0x00000004,0xfbac0f69,4048 361 | 0x00010676,9/29/2010,0x00000001,0x0000060f,0x00000004,0x8fe1a243,4048 362 | 0x00010676,1/19/2008,0x00000001,0x0000060b,0x00000010,0x95fab8a6,4048 363 | 0x00010676,1/19/2008,0x00000001,0x0000060c,0x00000010,0xfbac0f5d,4048 364 | 0x00010676,9/29/2010,0x00000001,0x0000060f,0x00000010,0x8fe1a237,4048 365 | 0x00010676,1/19/2008,0x00000001,0x0000060b,0x00000040,0x95fab876,4048 366 | 0x00010676,1/19/2008,0x00000001,0x0000060c,0x00000040,0xfbac0f2d,4048 367 | 0x00010676,9/29/2010,0x00000001,0x0000060f,0x00000040,0x8fe1a207,4048 368 | 0x00010676,1/19/2008,0x00000001,0x0000060c,0x00000080,0xfbac0eed,4048 369 | 0x00010676,9/29/2010,0x00000001,0x0000060f,0x00000080,0x8fe1a1c7,4048 370 | 0x00010677,1/19/2008,0x00000001,0x00000703,0x00000010,0x04de57b0,4048 371 | 0x00010677,4/28/2008,0x00000001,0x00000705,0x00000010,0xa6db99dd,8144 372 | 0x00010677,9/29/2010,0x00000001,0x0000070a,0x00000010,0xf3710db6,4048 373 | 0x0001067a,4/9/2008,0x00000001,0x00000a07,0x00000011,0x83067f5a,8144 374 | 0x0001067a,9/28/2010,0x00000001,0x00000a0b,0x00000011,0xb007e7e3,8144 375 | 0x0001067a,4/9/2008,0x00000001,0x00000a07,0x00000044,0x83067f27,8144 376 | 0x0001067a,9/28/2010,0x00000001,0x00000a0b,0x00000044,0xb007e7b0,8144 377 | 0x0001067a,4/9/2008,0x00000001,0x00000a07,0x000000a0,0x83067ecb,8144 378 | 0x0001067a,9/28/2010,0x00000001,0x00000a0b,0x000000a0,0xb007e754,8144 379 | 0x000106a2,7/14/2008,0x00000001,0xffff0019,0x00000003,0xd990b74e,11216 380 | 0x000106a4,9/19/2008,0x00000001,0x0000000a,0x00000002,0x6d0f43c1,9168 381 | 0x000106a4,2/20/2009,0x00000001,0x00000010,0x00000003,0x020495e7,10192 382 | 0x000106a4,4/21/2009,0x00000001,0x00000011,0x00000003,0x24e504ac,13264 383 | 0x000106a4,6/21/2013,0x00000001,0x00000012,0x00000003,0x9383a5f1,57152 384 | 0x000106a5,12/10/2008,0x00000001,0x00000004,0x00000003,0x9de0a6c0,4048 385 | 0x000106a5,2/20/2009,0x00000001,0x0000000f,0x00000003,0x81ef718c,6096 386 | 0x000106a5,4/14/2009,0x00000001,0x00000011,0x00000003,0xc2d891c3,8144 387 | 0x000106a5,3/3/2010,0x00000001,0x00000015,0x00000003,0xd8b120f2,8144 388 | 0x000106a5,5/17/2011,0x00000001,0x00000016,0x00000003,0x0650bcdf,9168 389 | 0x000106a5,6/21/2013,0x00000001,0x00000019,0x00000003,0x58220e71,40768 390 | 0x000106c0,7/27/2007,0x00000001,0x00000006,0x00000001,0x3829b920,5120 391 | 0x000106c0,8/24/2007,0x00000001,0x00000007,0x00000001,0x923cdfa3,5120 392 | 0x000106c1,12/3/2007,0x00000001,0x00000109,0x00000001,0x349f67a3,5072 393 | 0x000106c2,3/4/2008,0x00000001,0x00000207,0x00000001,0xf6c07831,5072 394 | 0x000106c2,6/4/2008,0x00000001,0x0000020a,0x00000001,0x399ceeb1,5072 395 | 0x000106c2,10/6/2008,0x00000001,0x00000211,0x00000001,0x6860b261,5072 396 | 0x000106c2,4/10/2009,0x00000001,0x00000217,0x00000001,0xd987bc76,5072 397 | 0x000106c2,6/4/2008,0x00000001,0x0000020a,0x00000004,0x9f6a2807,5072 398 | 0x000106c2,10/6/2008,0x00000001,0x00000212,0x00000004,0x6ba5106d,5072 399 | 0x000106c2,4/10/2009,0x00000001,0x00000218,0x00000004,0x8fb7c1ba,5072 400 | 0x000106c2,7/10/2008,0x00000001,0x0000020d,0x00000008,0x8b6b9648,5072 401 | 0x000106c2,12/2/2008,0x00000001,0x00000213,0x00000008,0xc87911f0,5072 402 | 0x000106c2,4/10/2009,0x00000001,0x00000219,0x00000008,0x556338c1,5072 403 | 0x000106c9,2/11/2009,0x00000001,0x00000007,0x00000004,0x21c6e011,5072 404 | 0x000106ca,8/25/2009,0x00000001,0x00000107,0x00000001,0xf851a3d9,5072 405 | 0x000106ca,8/25/2009,0x00000001,0x00000107,0x00000004,0x7deb58b2,5072 406 | 0x000106ca,8/25/2009,0x00000001,0x00000107,0x00000008,0xbe667ca5,5072 407 | 0x000106ca,8/25/2009,0x00000001,0x00000107,0x00000010,0x482cae0e,5072 408 | 0x000106ca,8/25/2009,0x00000001,0x00000106,0x00000020,0x9b4b3396,5072 409 | 0x000106d1,2/2/2008,0x00000001,0x00000010,0x00000008,0xcfbf7477,4048 410 | 0x000106d1,6/4/2008,0x00000001,0x00000021,0x00000008,0xc75506e6,4048 411 | 0x000106d1,4/6/2009,0x00000001,0x00000026,0x00000008,0xdeac5852,4048 412 | 0x000106d1,9/30/2010,0x00000001,0x00000029,0x00000008,0x2408d9a1,4048 413 | 0x000106e0,12/15/2008,0x00000001,0xffff001f,0x00000013,0x6208af28,11216 414 | 0x000106e1,2/6/2009,0x00000001,0xffff000d,0x00000013,0x30fa4231,12240 415 | 0x000106e3,2/27/2009,0x00000001,0xffff0006,0x00000013,0x79e1c091,3024 416 | 0x000106e4,3/8/2010,0x00000001,0x00000002,0x00000009,0xbdbb308a,5072 417 | 0x000106e4,7/1/2013,0x00000001,0x00000003,0x00000009,0xa8c7e0f3,24384 418 | 0x000106e5,5/29/2009,0x00000001,0x00000003,0x00000013,0x65b9a532,6096 419 | 0x000106e5,4/5/2010,0x00000001,0x00000004,0x00000013,0xf7762473,6096 420 | 0x000106e5,9/1/2011,0x00000001,0x00000005,0x00000013,0x5273a933,6096 421 | 0x000106e5,8/20/2013,0x00000001,0x00000007,0x00000013,0xc6783666,28480 422 | 0x000106e5,4/29/2009,0x00000001,0xffff0007,0x00000013,0x27248b94,5072 423 | 0x000106f1,2/10/2009,0x00000001,0xffff0007,0x00000013,0x4d02492b,10192 424 | 0x00020650,2/18/2009,0x00000001,0xffff0008,0x00000013,0x41248cb2,5072 425 | 0x00020651,7/7/2009,0x00000001,0xffff000f,0x00000013,0x173d00aa,4048 426 | 0x00020651,7/23/2009,0x00000001,0xffff0012,0x00000013,0x7d62f211,5072 427 | 0x00020652,11/12/2009,0x00000001,0x00000009,0x00000012,0xe580b1fe,7120 428 | 0x00020652,6/10/2010,0x00000001,0x0000000c,0x00000012,0x1e7bd02b,7120 429 | 0x00020652,9/1/2011,0x00000001,0x0000000d,0x00000012,0xaa7e2951,7120 430 | 0x00020652,6/26/2013,0x00000001,0x0000000e,0x00000012,0x8d3e4af9,32576 431 | 0x00020655,3/1/2010,0x00000001,0x00000002,0x00000092,0x267e87ff,2000 432 | 0x00020655,9/1/2011,0x00000001,0x00000003,0x00000092,0xc50abfd4,2000 433 | 0x00020655,6/28/2013,0x00000001,0x00000004,0x00000092,0x3facc649,12096 434 | 0x00020661,10/23/2009,0x00000001,0x00000104,0x00000001,0x38cb12b9,5072 435 | 0x00020661,10/23/2009,0x00000001,0x00000104,0x00000002,0xd89229bc,5072 436 | 0x00020661,7/18/2011,0x00000001,0x00000105,0x00000002,0x52558795,5072 437 | 0x000206a0,8/26/2009,0x00000001,0x00000024,0x00000012,0x4749d0fc,4048 438 | 0x000206a1,12/9/2009,0x00000001,0x00000005,0x00000012,0x79ddfabd,7120 439 | 0x000206a1,12/23/2009,0x00000001,0x00000007,0x00000012,0x8f1081f2,8144 440 | 0x000206a2,2/17/2010,0x00000001,0x00000026,0x00000012,0x82ffbd7b,9168 441 | 0x000206a3,5/26/2010,0x00000001,0x00000008,0x00000012,0xd42fd75e,9168 442 | 0x000206a5,7/22/2010,0x00000001,0x00000007,0x00000012,0x20b7fde6,7120 443 | 0x000206a6,9/15/2010,0x00000001,0x00000028,0x00000012,0x2b9becc8,9168 444 | 0x000206a7,4/7/2011,0x00000001,0x00000017,0x00000012,0xacfe0d23,8144 445 | 0x000206a7,5/18/2011,0x00000001,0x00000018,0x00000012,0xff749cfb,9168 446 | 0x000206a7,7/14/2011,0x00000001,0x0000001b,0x00000012,0xf04a1c9c,9168 447 | 0x000206a7,10/11/2011,0x00000001,0x00000025,0x00000012,0x6aa14554,9168 448 | 0x000206a7,4/24/2012,0x00000001,0x00000028,0x00000012,0xf3e9935d,9168 449 | 0x000206a7,6/12/2013,0x00000001,0x00000029,0x00000012,0xc9c91df0,40768 450 | 0x000206c0,8/20/2009,0x00000001,0xffff0016,0x00000013,0x764eea44,8144 451 | 0x000206c1,12/22/2009,0x00000001,0x00000006,0x00000003,0x45e27c49,6096 452 | 0x000206c2,6/18/2010,0x00000001,0x0000000f,0x00000003,0xfecacce7,7120 453 | 0x000206c2,9/7/2010,0x00000001,0x00000013,0x00000003,0x62f14fdf,7120 454 | 0x000206c2,3/11/2011,0x00000001,0x00000014,0x00000003,0x67223a59,7120 455 | 0x000206c2,8/26/2011,0x00000001,0x00000015,0x00000003,0x212c71e7,8144 456 | 0x000206d0,8/16/2010,0x00000001,0x80000006,0x00000007,0x0388f880,8144 457 | 0x000206d1,9/24/2010,0x00000001,0x80000103,0x00000007,0x7c603aba,9168 458 | 0x000206d1,12/1/2010,0x00000001,0x80000106,0x00000007,0x613705df,11216 459 | 0x000206d2,2/17/2011,0x00000001,0x8000020a,0x0000000f,0x2bfbe623,15312 460 | 0x000206d2,5/3/2011,0x00000001,0x8000020c,0x0000000f,0x667e1a9e,17360 461 | 0x000206d3,3/15/2011,0x00000001,0x80000302,0x0000000f,0x9472d590,14288 462 | 0x000206d3,4/20/2011,0x00000001,0x80000304,0x0000000f,0x055f8af3,16336 463 | 0x000206d5,9/29/2011,0x00000001,0x00000512,0x0000006d,0x7232b20c,18384 464 | 0x000206d5,10/13/2011,0x00000001,0x00000513,0x0000006d,0xbdb805cb,18384 465 | 0x000206d6,9/29/2011,0x00000001,0x0000060c,0x0000006d,0x3b5bdadc,15312 466 | 0x000206d6,12/14/2011,0x00000001,0x00000610,0x0000006d,0x2abfcee6,15312 467 | 0x000206d6,4/18/2012,0x00000001,0x00000618,0x0000006d,0x791d46f9,16336 468 | 0x000206d6,5/22/2012,0x00000001,0x00000619,0x0000006d,0xf9bfc8ba,16336 469 | 0x000206d7,12/14/2011,0x00000001,0x00000705,0x0000006d,0x377a0be1,16336 470 | 0x000206d7,4/3/2012,0x00000001,0x0000070c,0x0000006d,0xc23464cc,16336 471 | 0x000206d7,5/22/2012,0x00000001,0x0000070d,0x0000006d,0x8a88ffaa,16336 472 | 0x000206d7,6/17/2013,0x00000001,0x00000710,0x0000006d,0x30eaa2e5,69440 473 | 0x000206e0,10/23/2008,0x00000001,0xffff0001,0x00000005,0x51909517,13264 474 | 0x000206e0,1/6/2009,0x00000001,0xffff0005,0x00000005,0x56b8ca90,14288 475 | 0x000206e1,1/6/2009,0x00000001,0xffff0006,0x00000005,0x7accb59f,14288 476 | 0x000206e2,10/1/2008,0x00000001,0xffff0004,0x00000005,0xe256dba6,12240 477 | 0x000206e3,4/7/2009,0x00000001,0xffff0008,0x00000005,0x05796a00,8144 478 | 0x000206e3,6/19/2009,0x00000001,0xffff000c,0x00000005,0xcee10012,9168 479 | 0x000206e5,9/28/2009,0x00000001,0xffff0016,0x00000005,0xe8c225b7,8144 480 | 0x000206e6,12/8/2009,0x00000001,0x00000002,0x00000004,0x92caf080,6096 481 | 0x000206e6,4/21/2010,0x00000001,0x00000007,0x00000004,0x7303e23d,6096 482 | 0x000206e6,8/23/2010,0x00000001,0x00000008,0x00000004,0x23df3e07,6096 483 | 0x000206f0,6/11/2010,0x00000001,0xffff0013,0x00000005,0x8448fc15,8144 484 | 0x000206f1,10/13/2010,0x00000001,0x00000008,0x00000005,0x00d18792,11216 485 | 0x000206f2,4/23/2011,0x00000001,0x00000030,0x00000005,0x3fe86eb5,11216 486 | 0x000206f2,7/21/2011,0x00000001,0x00000032,0x00000005,0x43a4f899,12240 487 | 0x000206f2,8/31/2011,0x00000001,0x00000034,0x00000005,0xd5f8781b,12240 488 | 0x000206f2,4/12/2012,0x00000001,0x00000036,0x00000005,0x0ef5cab4,12240 489 | 0x000206f2,6/18/2013,0x00000001,0x00000037,0x00000005,0x99e7bda6,53056 490 | 0x00030660,11/3/2010,0x00000001,0x00000003,0x00000004,0x5173abd8,5072 491 | 0x00030660,11/3/2010,0x00000001,0x00000003,0x00000008,0x0b1dee36,5072 492 | 0x00030661,6/23/2011,0x00000001,0x00000106,0x00000002,0xfa10249d,5072 493 | 0x00030661,6/23/2011,0x00000001,0x00000106,0x00000004,0x5a1a3b1f,5072 494 | 0x00030661,6/23/2011,0x00000001,0x00000106,0x00000008,0x69977030,5072 495 | 0x000306a2,5/18/2011,0x00000001,0x00000008,0x00000012,0xa0e51feb,8144 496 | 0x000306a4,9/8/2011,0x00000001,0x00000007,0x00000012,0x7e23e5af,9168 497 | 0x000306a5,9/9/2011,0x00000001,0x00000007,0x00000012,0x08e38731,9168 498 | 0x000306a8,1/6/2012,0x00000001,0x0000000a,0x00000012,0xda510a7b,10192 499 | 0x000306a9,1/6/2012,0x00000001,0x0000000a,0x00000012,0x6f1725f4,10192 500 | 0x000306a9,4/12/2012,0x00000001,0x00000012,0x00000012,0x44bb9c4a,11216 501 | 0x000306a9,7/16/2012,0x00000001,0x00000013,0x00000012,0xb80c344b,11216 502 | 0x000306a9,1/9/2013,0x00000001,0x00000017,0x00000012,0x3546450b,11216 503 | 0x000306a9,6/13/2013,0x00000001,0x00000019,0x00000012,0xe8ec0584,48960 504 | 0x000306c1,3/30/2012,0x00000001,0xffff000d,0x00000032,0x1d84a35e,21456 505 | 0x000306c2,7/10/2012,0x00000001,0xffff0003,0x00000032,0xaf97f1f8,13264 506 | 0x000306c3,8/16/2013,0x00000001,0x00000017,0x00000032,0xe0c85170,81728 507 | 0x000306e4,7/9/2013,0x00000001,0x00000416,0x000000ed,0xf28363df,44864 508 | 0x000306e6,6/19/2013,0x00000001,0x00000600,0x000000ed,0x14788dce,44864 509 | 0x00040650,8/13/2012,0x00000001,0xffff0007,0x00000072,0xbaeb63c8,14288 510 | 0x00040650,11/9/2012,0x00000001,0xffff000a,0x00000072,0x52f85222,22480 511 | 0x00040651,2/22/2013,0x00000001,0x00000006,0x00000072,0xc9c88122,15312 512 | 0x00040651,9/14/2013,0x00000001,0x00000017,0x00000072,0x6d9ec14c,77632 513 | 0x00040660,7/10/2012,0x00000001,0xffff000b,0x00000032,0xa882cff8,18384 514 | 0x00040661,8/21/2013,0x00000001,0x0000000f,0x00000032,0xcc7cd277,94016 -------------------------------------------------------------------------------- /intel.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | import microparse 4 | import struct 5 | 6 | # http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/intel/microcode/microcode.c;hb=HEAD 7 | # http://lxr.free-electrons.com/source/arch/x86/include/asm/microcode_intel.h 8 | # http://lxr.free-electrons.com/source/arch/x86/kernel/microcode_intel.c 9 | # http://lxr.free-electrons.com/source/arch/x86/kernel/microcode_intel_early.c 10 | # http://lxr.free-electrons.com/source/arch/x86/kernel/microcode_intel_lib.c 11 | # http://inertiawar.com/microcode/ 12 | 13 | class static(): 14 | # default data block size for old microcode revisions 15 | DEFAULT_DATA_SIZE = 2000 16 | 17 | def header(swap_endian): 18 | if swap_endian: 19 | return struct.Struct("IIIIIIIIIiii") 22 | 23 | def data_header(swap_endian): 24 | if swap_endian: 25 | return struct.Struct("IIIIIIIIIIIIIIIIIIIIIIII") 28 | 29 | def extended_count(swap_endian): 30 | if swap_endian: 31 | return struct.Struct("IIiii") 34 | 35 | class microcode(): 36 | def __init__(self, data, swap_endian): 37 | self.is_swap_endian = swap_endian 38 | 39 | self.parse_header(data[0 : static.header(self.is_swap_endian).size]) 40 | self.parse_data(data[static.header(self.is_swap_endian).size : static.header(self.is_swap_endian).size + self.data_size]) 41 | 42 | self.is_data_extended = False 43 | if self.data.count(0) > 8: # weak heuristic for additional metadata in data block 44 | self.is_data_extended = True 45 | self.parse_data_header() 46 | 47 | self.is_extended = False 48 | if self.total_size - (static.header(self.is_swap_endian).size + self.data_size) > 0: # metadata has extended section 49 | self.is_extended = True 50 | raise Exception("Warning: Extended Intel microcode not fully supported!") 51 | self.parse_extended_count(data[static.header(self.is_swap_endian).size + self.data_size : static.header(self.is_swap_endian).size + self.data_size + intel.static.extended_count(self.is_swap_endian).size], result.endian) 52 | self.parse_extended(data[static.header(self.is_swap_endian).size + self.data_size + intel.static.extended_count(self.is_swap_endian).size : self.total_size], result.endian) 53 | 54 | self.raw = data[0 : self.total_size] 55 | 56 | def csv(self): 57 | data_extended = "Y" if self.is_data_extended else "N" 58 | extended = "Y" if self.is_extended else "N" 59 | 60 | return \ 61 | microparse.static.hex8(self.processor_signature) + "," + \ 62 | microparse.static.int2date(self.date) + "," + \ 63 | microparse.static.hex8(self.header_version) + "," + \ 64 | microparse.static.hex8(self.update_revision) + "," + \ 65 | microparse.static.hex8(self.processor_flags) + "," + \ 66 | microparse.static.hex8(self.checksum) + "," + \ 67 | str(int(self.data_size) * microparse.static.data(self.is_swap_endian).size) + "," + \ 68 | data_extended + "," + \ 69 | extended + "\n" 70 | 71 | def filename(self): 72 | return microparse.static.hex8(self.processor_signature) + "_" + microparse.static.hex8(self.update_revision) + "_" + microparse.static.hex8(self.checksum) 73 | 74 | def size(self): 75 | return self.total_size 76 | 77 | def parse_header(self, data): 78 | if len(data) == static.header(self.is_swap_endian).size: 79 | try: 80 | header = static.header(self.is_swap_endian).unpack(data) 81 | except struct.error: 82 | raise Exception("Cannot unpack microcode header!") 83 | 84 | self.header_version = header[0] 85 | if self.header_version == 0x01000000: 86 | raise Exception("Unexpected microcode endianness!") 87 | elif self.header_version != 1: 88 | raise Exception("Unexpected microcode header version!") 89 | self.update_revision = header[1] 90 | self.date = header[2] 91 | self.processor_signature = header[3] 92 | self.checksum = header[4] 93 | self.loader_revision = header[5] 94 | self.processor_flags = header[6] 95 | self.data_size = header[7] 96 | if self.data_size == 0: 97 | self.data_size = static.DEFAULT_DATA_SIZE 98 | if self.data_size % 4 != 0: # sanity check 99 | raise Exception("Unexpected microcode data size") 100 | self.total_size = header[8] 101 | if self.total_size == 0: # recompute total size for old microcode revisions 102 | self.total_size = static.header(self.is_swap_endian).size + self.data_size 103 | #if (self.total_size % 1024 != 0): # seems to no longer be applicable for new microcode revisions 104 | # raise Exception("Unexpected microcode total size") 105 | self.unknown1 = header[9] 106 | self.unknown2 = header[10] 107 | self.unknown3 = header[11] 108 | else: 109 | raise Exception("Input microcode header size mismatch!") 110 | 111 | def parse_data(self, data): 112 | self.data = [] 113 | 114 | if len(data) == self.data_size: 115 | for i in range(0, self.data_size, microparse.static.data(self.is_swap_endian).size): 116 | try: 117 | self.data.append(microparse.static.data(self.is_swap_endian).unpack(data[i : i + microparse.static.data(self.is_swap_endian).size])[0]) 118 | except struct.error: 119 | raise Exception("Cannot unpack microcode data!") 120 | else: 121 | raise Exception("Input microcode data size mismatch!") 122 | 123 | def parse_data_header(self): 124 | if self.is_data_extended and len(self.data) > static.data_header(self.is_swap_endian).size: 125 | try: 126 | # bit of a hack, need to repack the data back into a list 127 | header = bytearray() 128 | for i in range(static.data_header(self.is_swap_endian).size // 4): 129 | header += microparse.static.data(self.is_swap_endian).pack(self.data[i]) 130 | # now unpack 131 | data_header = static.data_header(self.is_swap_endian).unpack(header[0 : static.data_header(self.is_swap_endian).size]) 132 | 133 | except struct.error: 134 | raise Exception("Cannot unpack microcode data header!") 135 | 136 | self.data_unknown1 = data_header[0] 137 | self.data_unknown2 = data_header[1] 138 | self.data_unknown3 = data_header[2] 139 | self.data_revision = data_header[3] 140 | self.data_unknown4 = data_header[4] 141 | self.data_unknown5 = data_header[5] 142 | self.data_date = data_header[6] 143 | self.data_length = data_header[7] 144 | self.data_unknown6 = data_header[8] 145 | self.data_processor_signature = data_header[9] 146 | self.data_unknown7 = data_header[10] 147 | self.data_unknown8 = data_header[11] 148 | self.data_unknown9 = data_header[12] 149 | self.data_unknown10 = data_header[13] 150 | self.data_unknown11 = data_header[14] 151 | self.data_unknown12 = data_header[15] 152 | self.data_unknown13 = data_header[16] 153 | self.data_unknown14 = data_header[17] 154 | self.data_unknown15 = data_header[18] 155 | self.data_unknown16 = data_header[19] 156 | self.data_unknown17 = data_header[20] 157 | self.data_unknown18 = data_header[21] 158 | self.data_unknown19 = data_header[22] 159 | self.data_unknown20 = data_header[23] 160 | else: 161 | raise Exception("Input microcode data header size mismatch!") 162 | 163 | def parse_extended_count(self, data): 164 | if len(data) == static.extended_count(self.is_swap_endian).size: 165 | try: 166 | extended_data = static.extended_count(self.is_swap_endian).unpack(data) 167 | except struct.error: 168 | raise Exception("Cannot unpack microcode extended header!") 169 | 170 | self.extended_signature_count = extended_data[0] 171 | self.extended_table_checksum = extended_data[1] 172 | self.unknown4 = extended_data[2] 173 | self.unknown5 = extended_data[3] 174 | self.unknown6 = extended_data[4] 175 | else: 176 | raise Exception("Input microcode extended header size mismatch!") 177 | 178 | def parse_extended(self, data): 179 | self.extended_processor_signature = [] 180 | self.extended_processor_flags = [] 181 | self.extended_checksums = [] 182 | 183 | if self.is_extended and len(data) == self.extended_signature_count * 3 * microparse.static.data(self.is_swap_endian).size: 184 | for i in range(0, self.extended_signature_count * 3 * microparse.static.data(self.is_swap_endian).size, 3 * microparse.static.data(self.is_swap_endian).size): 185 | try: 186 | signature = microparse.static.data(self.is_swap_endian).unpack(data[i : i + microparse.static.data(self.is_swap_endian).size]) 187 | flags = microparse.static.data(self.is_swap_endian).unpack(data[i + microparse.static.data(self.is_swap_endian).size: i + 2 * microparse.static.data(self.is_swap_endian).size]) 188 | checksums = microparse.static.data(self.is_swap_endian).unpack(data[i + 2 * microparse.static.data(self.is_swap_endian).size : i + 3 * microparse.static.data(self.is_swap_endian).size]) 189 | 190 | self.extended_processor_signature.append(signature[0]) 191 | self.extended_processor_flags.append(flags[0]) 192 | self.extended_checksums.append(checksums[0]) 193 | except struct.error: 194 | raise Exception("Cannot unpack microcode extended data!") 195 | else: 196 | raise Exception("Input microcode extended data size mismatch!") 197 | 198 | def calculate_checksum(self): 199 | checksum = self.header_version + self.update_revision + self.date + self.processor_signature + self.loader_revision + self.processor_flags + self.data_size + self.total_size + self.unknown1 + self.unknown2 + self.unknown3 200 | for v in self.data: 201 | checksum += v 202 | 203 | return -checksum & 0xFFFFFFFF 204 | 205 | def calculate_extended_table_checksum(self): 206 | if self.is_extended: 207 | checksum = self.extended_signature_count + self.unknown4 + self.unknown5 + self.unknown6 208 | for s in self.extended_processor_signature: 209 | checksum += s 210 | for s in self.extended_processor_flags: 211 | checksum += s 212 | for s in self.extended_checksums: 213 | checksum += s 214 | 215 | return -checksum & 0xFFFFFFFF 216 | 217 | def calculate_extended_signature_checksum(self, offset): 218 | if self.is_extended: 219 | checksum = calculate_checksum() - self.processor_flags - self.processor_signature + self.extended_processor_signature[offset] + self.extended_processor_flags[offset] 220 | 221 | return -checksum & 0xFFFFFFFF 222 | 223 | def __str__(self): 224 | checksum1 = " (!)" if self.checksum != self.calculate_checksum() else "" 225 | 226 | output = \ 227 | microparse.static.fmt_string % ("Header Version", microparse.static.hex8(self.header_version)) + \ 228 | microparse.static.fmt_string % ("Update Revision", microparse.static.hex8(self.update_revision)) + \ 229 | microparse.static.fmt_string % ("Date", microparse.static.int2date(self.date)) + \ 230 | microparse.static.fmt_string % ("Processor Signature", microparse.static.hex8(self.processor_signature)) + \ 231 | str(microparse.signature(self.processor_signature)) + \ 232 | microparse.static.fmt_string % ("Checksum", microparse.static.hex8(self.checksum) + checksum1) + \ 233 | microparse.static.fmt_string % ("Loader Revision", microparse.static.hex8(self.loader_revision)) + \ 234 | microparse.static.fmt_string % ("Processor Flags", microparse.static.hex8(self.processor_flags)) + \ 235 | microparse.static.fmt_string % ("Data Size", microparse.static.hex8(self.data_size)) + \ 236 | microparse.static.fmt_string % ("Total Size", microparse.static.hex8(self.total_size)) + \ 237 | microparse.static.fmt_string % ("Unknown 1", microparse.static.hex8(self.unknown1)) + \ 238 | microparse.static.fmt_string % ("Unknown 2", microparse.static.hex8(self.unknown2)) + \ 239 | microparse.static.fmt_string % ("Unknown 3", microparse.static.hex8(self.unknown3)) 240 | 241 | if self.is_data_extended: 242 | output += \ 243 | microparse.static.fmt_string % ("Data Unknown 1", microparse.static.hex8(self.data_unknown1)) + \ 244 | microparse.static.fmt_string % ("Data Unknown 2", microparse.static.hex8(self.data_unknown2)) + \ 245 | microparse.static.fmt_string % ("Data Unknown 3", microparse.static.hex8(self.data_unknown3)) + \ 246 | microparse.static.fmt_string % ("Data Revision", microparse.static.hex8(self.data_revision)) + \ 247 | microparse.static.fmt_string % ("Data Unknown 4", microparse.static.hex8(self.data_unknown4)) + \ 248 | microparse.static.fmt_string % ("Data Unknown 5", microparse.static.hex8(self.data_unknown5)) + \ 249 | microparse.static.fmt_string % ("Data Date", microparse.static.int2date(self.data_date)) + \ 250 | microparse.static.fmt_string % ("Data Length", microparse.static.hex8(self.data_length)) + \ 251 | microparse.static.fmt_string % ("Data Unknown 6", microparse.static.hex8(self.data_unknown6)) + \ 252 | microparse.static.fmt_string % ("Data Processor Signature", microparse.static.hex8(self.data_processor_signature)) + \ 253 | str(microparse.signature(self.data_processor_signature)) + \ 254 | microparse.static.fmt_string % ("Data Unknown 7", microparse.static.hex8(self.data_unknown7)) + \ 255 | microparse.static.fmt_string % ("Data Unknown 8", microparse.static.hex8(self.data_unknown8)) + \ 256 | microparse.static.fmt_string % ("Data Unknown 9", microparse.static.hex8(self.data_unknown9)) + \ 257 | microparse.static.fmt_string % ("Data Unknown 10", microparse.static.hex8(self.data_unknown10)) + \ 258 | microparse.static.fmt_string % ("Data Unknown 11", microparse.static.hex8(self.data_unknown11)) + \ 259 | microparse.static.fmt_string % ("Data Unknown 12", microparse.static.hex8(self.data_unknown12)) + \ 260 | microparse.static.fmt_string % ("Data Unknown 13", microparse.static.hex8(self.data_unknown13)) + \ 261 | microparse.static.fmt_string % ("Data Unknown 14", microparse.static.hex8(self.data_unknown14)) + \ 262 | microparse.static.fmt_string % ("Data Unknown 15", microparse.static.hex8(self.data_unknown15)) + \ 263 | microparse.static.fmt_string % ("Data Unknown 16", microparse.static.hex8(self.data_unknown16)) + \ 264 | microparse.static.fmt_string % ("Data Unknown 17", microparse.static.hex8(self.data_unknown17)) + \ 265 | microparse.static.fmt_string % ("Data Unknown 18", microparse.static.hex8(self.data_unknown18)) + \ 266 | microparse.static.fmt_string % ("Data Unknown 19", microparse.static.hex8(self.data_unknown19)) + \ 267 | microparse.static.fmt_string % ("Data Unknown 20", microparse.static.hex8(self.data_unknown20)) 268 | 269 | if self.is_extended: 270 | checksum2 = " (!)" if self.extended_checksum != self.calculate_extended_table_checksum() else "" 271 | 272 | output += \ 273 | microparse.static.fmt_string % ("Extended Signature Count", microparse.static.hex8(self.extended_signature_count)) + \ 274 | microparse.static.fmt_string % ("Extended Checksum", microparse.static.hex8(self.extended_checksum) + checksum2) + \ 275 | microparse.static.fmt_string % ("Unknown 4", microparse.static.hex8(self.unknown4)) + \ 276 | microparse.static.fmt_string % ("Unknown 5", microparse.static.hex8(self.unknown5)) + \ 277 | microparse.static.fmt_string % ("Unknown 6", microparse.static.hex8(self.unknown6)) 278 | 279 | return output 280 | -------------------------------------------------------------------------------- /microparse.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | import argparse 4 | import datetime 5 | import os 6 | import re 7 | import binascii 8 | import struct 9 | 10 | import amd 11 | import intel 12 | import via 13 | 14 | # Used to parse processor signature 15 | class signature(): 16 | fmt_string = "-- %-27s: %s\n" 17 | 18 | def __init__(self, signature): 19 | if signature != 0: 20 | self.stepping = signature & 0xF 21 | signature = signature >> 4 22 | 23 | self.model = signature & 0xF 24 | signature = signature >> 4 25 | 26 | self.family = signature & 0xF 27 | signature = signature >> 4 28 | 29 | self.type = signature & 0x3 30 | signature = signature >> 2 31 | 32 | self.unknown1 = signature & 0x3 33 | signature = signature >> 2 34 | 35 | self.extended_model = signature & 0xF 36 | signature = signature >> 4 37 | 38 | self.extended_family = signature & 0xFF 39 | signature = signature >> 8 40 | 41 | self.unknown2 = signature & 0xF 42 | else: 43 | raise Exception("Invalid processor signature!") 44 | 45 | def __str__(self): 46 | return \ 47 | signature.fmt_string % ("Stepping", static.hex8(self.stepping)) + \ 48 | signature.fmt_string % ("Model", static.hex8(self.model)) + \ 49 | signature.fmt_string % ("Family", static.hex8(self.family)) + \ 50 | signature.fmt_string % ("Type", static.hex8(self.type)) + \ 51 | signature.fmt_string % ("Unknown 1", static.hex8(self.unknown1)) + \ 52 | signature.fmt_string % ("Extended Model", static.hex8(self.extended_model)) + \ 53 | signature.fmt_string % ("Extended Family", static.hex8(self.extended_family)) + \ 54 | signature.fmt_string % ("Unknown 2", static.hex8(self.unknown2)) 55 | 56 | class static(): 57 | fmt_string = "%-30s: %s\n" 58 | 59 | def data(swap_endian): 60 | if not swap_endian: 61 | return struct.Struct("I") 64 | 65 | def int2date(date): 66 | hex_date = static.hex8(date)[2 : ] 67 | return hex_date[4 : 8] + "/" + hex_date[0 : 2] + "/" + hex_date[2 : 4] 68 | 69 | def ymd2date(y, m, d): 70 | return str(y).zfill(4) + "/" + str(m).zfill(2) + "/" + str(d).zfill(2) 71 | 72 | def hex8(num): 73 | return "0x%08x" % num 74 | 75 | def tprint(string): 76 | print(str(datetime.datetime.now()) + ": " + string) 77 | 78 | def ascii2bin(data): 79 | code = b"" 80 | values = re.sub(b"[ \t\r]", b"", data) # remove spaces, tabs, and newlines (windows) 81 | values = re.split(b"[,\n]", values) # split on newlines (linux) and commas 82 | 83 | for v in values: 84 | if v.startswith(b"0x"): 85 | code += binascii.unhexlify(bytes(v[2 : ])) 86 | 87 | return code 88 | 89 | def detect_ascii(path): 90 | with open(path, "rb") as f: 91 | for block in f: 92 | if b'\0' in block: # check for null 93 | return False 94 | return True 95 | 96 | def open_path(path): 97 | if os.path.isdir(path): 98 | if result.recursive == True: 99 | listing = os.listdir(path) 100 | 101 | for obj in listing: 102 | open_path(path + "/" + obj) 103 | 104 | else: 105 | raise Exception("Cannot open directory without recursion") 106 | else: 107 | data = b"" 108 | static.tprint("Parsing " + path) 109 | 110 | if path.endswith((".dat", ".bin", ".txt", ".pdb", ".PDB", ".cfg", ".h", ".c")): 111 | with open(path, "rb") as f: 112 | data = f.read() 113 | 114 | if detect_ascii(path): 115 | data = ascii2bin(data) 116 | 117 | parse(data) 118 | else: 119 | static.tprint("Error: File extension not recognized") 120 | 121 | def parse(data): 122 | offset = 0 123 | 124 | while offset < len(data): 125 | if result.type == "amd": 126 | if (result.amd_individual): 127 | m = amd.microcode(data[offset : ], dict(), 0, result.swap_endian) 128 | else: 129 | m = amd.container(data[offset : ], result.swap_endian) 130 | elif result.type == "intel": 131 | m = intel.microcode(data[offset: ], result.swap_endian) 132 | elif result.type == "via": 133 | m = via.microcode(data[offset: ], result.swap_endian) 134 | else: 135 | raise Exception("Microcode format not specified") 136 | 137 | if result.verbose: 138 | print(m) 139 | 140 | if result.report: 141 | report(m) 142 | 143 | if result.output: 144 | output(m) 145 | 146 | offset += m.size() 147 | 148 | def output(m): 149 | if result.type != "amd" or result.amd_individual: 150 | filename = result.output + "/" + m.filename() + ".bin" 151 | 152 | if not os.path.exists(result.output): 153 | os.makedirs(result.output) 154 | 155 | if not os.path.exists(filename): 156 | with open(filename, "wb") as f: 157 | static.tprint("Writing " + f.name) 158 | f.write(m.raw) 159 | else: 160 | static.tprint("File " + filename + " already exists!") 161 | else: 162 | for microcode in m.microcodes: 163 | filename = result.output + "/" + microcode.filename() + ".bin" 164 | 165 | if not os.path.exists(result.output): 166 | os.makedirs(result.output) 167 | 168 | if not os.path.exists(filename): 169 | with open(filename, "wb") as f: 170 | static.tprint("Writing " + f.name) 171 | f.write(microcode.raw) 172 | else: 173 | static.tprint("File " + filename + " already exists!") 174 | 175 | def report(m): 176 | with open("report.csv", "a") as f: 177 | f.write(m.csv()) 178 | static.tprint("Updating report file") 179 | 180 | def main(): 181 | global result 182 | 183 | parser = argparse.ArgumentParser(description = "Microparse: AMD/Intel/VIA CPU microcode update parser") 184 | parser.add_argument("-c", action = "store_true", dest = "amd_individual", default = False, help = "amd microcode is not in container (rare)") 185 | parser.add_argument("-e", action = "store_true", dest = "swap_endian", default = False, help = "swap parsing endianess") 186 | parser.add_argument("-o", action = "store", dest = "output", help = "output directory for segmented microcode") 187 | parser.add_argument("-p", action = "store_true", dest = "report", default = False, help = "generate CSV report of all parsed microcode") 188 | parser.add_argument("-r", action = "store_true", dest = "recursive", default = False, help = "recurse into directory") 189 | parser.add_argument("-t", action = "store", dest = "type", choices = ["amd", "intel", "via"], help = "specify input format as amd, intel, or via microcode") 190 | parser.add_argument("-v", action = "store_true", dest = "verbose", default = False, help = "verbose output") 191 | parser.add_argument("target", action = "store", help = "input file or folder") 192 | 193 | result = parser.parse_args() 194 | 195 | open_path(result.target) 196 | 197 | if __name__ == "__main__": 198 | main() 199 | -------------------------------------------------------------------------------- /via.csv: -------------------------------------------------------------------------------- 1 | Update Revision,Date,Processor Signature,Checksum,Loader Revision,Reserved,Payload Size,Total Size,Name,Reserved, 2 | 0x00000000,1/15/2009,0x000006f2,0x00000001,0xffffffff,0x00000000,3232,3280,b'F600E2P2',0x00000000, 3 | 0x00000000,6/26/2009,0x000006f3,0x00000001,0xffffffff,0x00000000,912,960,b'F60021P3',0x00000000, 4 | 0x00000000,6/25/2010,0x000006f8,0x00000001,0xffffffff,0x00000000,544,592,b'F600F2T8',0x00000000, 5 | 0x00000000,5/26/2010,0x000006f8,0x00000001,0xffffffff,0x00000000,3104,3152,b'F600d2P8',0x00000000, 6 | 0x00000000,10/5/2010,0x000006fa,0x00000001,0xffffffff,0x00000000,768,816,b'F60073TA',0x00000000, 7 | 0x00000000,9/24/2010,0x000006fa,0x00000001,0xffffffff,0x00000000,3088,3136,b'F60063PA',0x00000000, 8 | 0x00000000,9/24/2010,0x000006fa,0x00000001,0xffffffff,0x00000000,2368,2416,b'F60063PA',0x00000000, -------------------------------------------------------------------------------- /via.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | import microparse 4 | import struct 5 | 6 | # http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/via/nano/update_ucode.h;hb=HEAD 7 | # http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/via/nano/update_ucode.c;hb=HEAD 8 | 9 | class static(): 10 | def header(swap_endian): 11 | if swap_endian: 12 | return struct.Struct("<4sIBBHIIIIII8sI") 13 | else: 14 | return struct.Struct(">4sIBBHIIIIII8sI") 15 | 16 | class microcode(): 17 | def __init__(self, data, swap_endian): 18 | self.is_swap_endian = swap_endian 19 | 20 | self.parse_header(data[0 : static.header(self.is_swap_endian).size]) 21 | self.parse_data(data[static.header(self.is_swap_endian).size : static.header(self.is_swap_endian).size + self.payload_size]) 22 | 23 | self.raw = data[0 : self.total_size] 24 | 25 | def csv(self): 26 | return \ 27 | microparse.static.hex8(self.update_revision) + "," + \ 28 | microparse.static.ymd2date(self.year, self.month, self.day) + "," + \ 29 | microparse.static.hex8(self.signature) + "," + \ 30 | microparse.static.hex8(self.checksum) + \ 31 | microparse.static.hex8(self.loader_revision) + "," + \ 32 | microparse.static.hex8(self.reserved1) + "," + \ 33 | str(int(self.payload_size) * microparse.static.data(self.is_swap_endian).size) + "," + \ 34 | str(int(self.total_size) * microparse.static.data(self.is_swap_endian).size) + "," + \ 35 | self.name.decode("utf-8") + "," + \ 36 | microparse.static.hex8(self.reserved2) + "\n" 37 | 38 | def filename(self): 39 | return microparse.static.hex8(self.signature) + "_" + microparse.static.hex8(self.update_revision) + "_" + microparse.static.hex8(self.checksum) 40 | 41 | def size(self): 42 | return self.total_size 43 | 44 | def parse_header(self, data): 45 | if len(data) == static.header(self.is_swap_endian).size: 46 | try: 47 | header = static.header(self.is_swap_endian).unpack(data) 48 | except struct.error: 49 | raise Exception("Cannot unpack microcode header!") 50 | 51 | self.magic = header[0] 52 | if self.magic != b"SARR": 53 | raise Exception("Input microcode magic string mismatch!") 54 | self.update_revision = header[1] 55 | self.day = header[2] 56 | self.month = header[3] 57 | self.year = header[4] 58 | self.signature = header[5] 59 | self.checksum = header[6] 60 | self.loader_revision = header[7] 61 | self.reserved1 = header[8] 62 | self.payload_size = header[9] 63 | self.total_size = header[10] 64 | self.name = header[11] 65 | self.reserved2 = header[12] 66 | else: 67 | raise Exception("Input microcode header size mismatch!") 68 | 69 | def parse_data(self, data): 70 | self.data = [] 71 | 72 | if len(data) == self.payload_size: 73 | for i in range(0, self.payload_size, microparse.static.data(self.is_swap_endian).size): 74 | try: 75 | self.data.append(microparse.static.data(self.is_swap_endian).unpack(data[i : i + microparse.static.data(self.is_swap_endian).size])[0]) 76 | except struct.error: 77 | raise Exception("Cannot unpack microcode data!") 78 | else: 79 | raise Exception("Input microcode data size mismatch!") 80 | 81 | def calculate_checksum(self): 82 | # may not work correctly, needs to be checked 83 | checksum = self.magic + self.update_revision + self.year + self.month + self.day + self.signature + self.checksum + self.loader_revision + self.reserved1 + self.payload_size + self.total_size + self.name + self.reserved2 84 | for v in self.data: 85 | checksum += v 86 | 87 | return -checksum & 0xFFFFFFFF 88 | 89 | def __str__(self): 90 | #checksum = " (!)" if self.checksum != self.calculate_checksum() else "" 91 | 92 | return \ 93 | microparse.static.fmt_string % ("Update Revision", microparse.static.hex8(self.update_revision)) + \ 94 | microparse.static.fmt_string % ("Date", microparse.static.ymd2date(self.year, self.month, self.day)) + \ 95 | microparse.static.fmt_string % ("Processor Signature", microparse.static.hex8(self.signature)) + \ 96 | str(microparse.signature(self.signature)) + \ 97 | microparse.static.fmt_string % ("Checksum", microparse.static.hex8(self.checksum)) + \ 98 | microparse.static.fmt_string % ("Loader Revision", microparse.static.hex8(self.loader_revision)) + \ 99 | microparse.static.fmt_string % ("Reserved 1", microparse.static.hex8(self.reserved1)) + \ 100 | microparse.static.fmt_string % ("Payload Size", microparse.static.hex8(self.payload_size)) + \ 101 | microparse.static.fmt_string % ("Total Size", microparse.static.hex8(self.total_size)) + \ 102 | microparse.static.fmt_string % ("Name" , "\"" + self.name.decode("utf-8") + "\"") + \ 103 | microparse.static.fmt_string % ("Reserved 2", microparse.static.hex8(self.reserved2)) 104 | --------------------------------------------------------------------------------